X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fluatexja-core.sty;h=53aa6665c508037ae5fc37dffecd2c24b0fdc18c;hb=b5ae2980b79b069dd439c80b784c10e1b4f86d2f;hp=8676934af233ddddc62caa0f593c1843acbbd8ee;hpb=8bad6f3e68102b7e6020ec0c39a532b81ce6bae7;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja-core.sty b/src/luatexja-core.sty index 8676934..53aa666 100644 --- a/src/luatexja-core.sty +++ b/src/luatexja-core.sty @@ -65,22 +65,22 @@ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname \csname iftrue\endcsname \NeedsTeXFormat{LaTeX2e} - \ProvidesPackage{luatexja-core}[2014/06/22 Core of LuaTeX-ja] + \ProvidesPackage{luatexja-core}[2015/02/22 Core of LuaTeX-ja] \fi % %% Load prerequisite packages. \endlinechar=13 % +\newif\ifltj@everyhook@avail\ltj@everyhook@availfalse %! 外部パッケージは普通の \endlinechar で読まないと危険. \ifltj@in@latex %<*LaTeX> - \RequirePackage{luaotfload} [2013/05/10] % v2.2 - \RequirePackage{infwarerr} [2010/04/08] % v1.3 + \RequirePackage{luaotfload} [2013/12/31] % v2.3 \RequirePackage{ltxcmds} [2011/11/09] % v1.22 \RequirePackage{pdftexcmds} [2011/11/29] % v0.20 \RequirePackage{xkeyval} [2012/10/14] % v2.6b \RequirePackage{atbegshi} + \IfFileExists{everyhook.sty}{\RequirePackage{everyhook}\ltj@everyhook@availtrue}{} \else %<*!LaTeX> \input luaotfload.sty - \input infwarerr.sty \input ltxcmds.sty \input pdftexcmds.sty \input xkeyval @@ -137,6 +137,7 @@ \newluatexattribute\ltj@curtfnt % index for ``current vertical Japanese font'' \newluatexattribute\ltj@origchar % \newluatexattribute\ltj@charclass % +\newluatexattribute\ltj@charcode % \newluatexattribute\ltj@autospc % attribute for autospacing \newluatexattribute\ltj@autoxspc % attribute for autoxspacing \newluatexattribute\ltj@yablshift % attribute for yalbaselineshift @@ -146,7 +147,7 @@ \newluatexattribute\jfam % index for current jfam \newluatexattribute\ltj@dir - +\newlanguage\ltj@@japanese \ltj@dir=0 \ltj@icflag=0 \ltj@origchar=0 @@ -176,6 +177,16 @@ "File `luatexja.lua' not found")) } + +%%% true if we can use [new]token.scan_int and co. +\newif\ifltj@token@avail@scan +\directlua{% + local bs = string.char(92) + if luatexja.token then tex.sprint(bs .. 'ltj@token@avail@scantrue') end + print (luatexja.token) +} + + %% \RequireLuaTeXjaSubmodule{name}[date] % A TeX version of luatexja.load_module(name) % The second optional argument [date] is simply ignored. @@ -201,17 +212,17 @@ %%%%%%%% \jfont\CS={...:...;jfm=metric;...}, \globaljfont \protected\def\jfont{% - \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false)}} + \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false, 'yoko')}} \protected\def\globaljfont{% - \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true)}} -\def\ltj@@jfont{\directlua{luatexja.jfont.jfontdefY('yoko')}} + \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true, 'yoko')}} +\def\ltj@@jfont{\directlua{luatexja.jfont.jfontdefY()}} %%%%%%%% \tfont\CS={...:...;jfm=metric;...}, \globaltfont -\protected\def\tfont{\afterassignment\ltj@@tfont\directlua{luatexja.jfont.jfontdefX(false)}} +\protected\def\tfont{% + \afterassignment\ltj@@tfont\directlua{luatexja.jfont.jfontdefX(false, 'tate')}} \protected\def\globaltfont{% - \afterassignment\ltj@@tfont\directlua{luatexja.jfont.jfontdefX(true)}} -\def\ltj@@tfont{\directlua{luatexja.jfont.jfontdefY('tate')}} - + \afterassignment\ltj@@tfont\directlua{luatexja.jfont.jfontdefX(true, 'tate')}} +\def\ltj@@tfont{\directlua{luatexja.jfont.jfontdefY()}} %%%%%%%% \zw, \zh \protected\def\zw{\directlua{tex.setdimen('ltj@zw', luatexja.jfont.get_zw())}\ltj@zw} @@ -246,18 +257,19 @@ %%%%%%%% \ltjsetparameter \newcount\ltj@@stack \newcount\ltj@@group@level -\ltj@@group@level=0 \ltj@@stack=0 +\ltj@@group@level\z@\ltj@@stack\z@ -\setbox0\hbox{% +\setbox\z@\hbox{% \directlua{% This value depends on the version of LuaTeX. luatexja.stack.hmode = -tex.nest[tex.nest.ptr].mode }% } -\setbox0\vbox{% +\setbox\z@\vbox{% \directlua{% This value depends on the version of LuaTeX. luatexja.stack.vmode = -tex.nest[tex.nest.ptr].mode }% } +\setbox\z@\box\voidb@x % prebreakpenalty = {, } \define@key[ltj]{japaram}{kcatcode}{% @@ -293,6 +305,22 @@ \ltj@restore@globaldefs } +\ifltj@token@avail@scan %%%%%%%%%%%%%%%%%%%%%%%% new tokenlib +% {y,t}{ja,al}baselineshift = +% yjabaselineshift = +\define@key[ltj]{japaram}{yalbaselineshift}{ + \directlua{tex.setattribute(luatexja.isglobal, + luatexbase.attributes['ltj@yablshift'], luatexja.token.scan_dimen())}#1} +\define@key[ltj]{japaram}{yjabaselineshift}{ + \directlua{tex.setattribute(luatexja.isglobal, + luatexbase.attributes['ltj@ykblshift'], luatexja.token.scan_dimen())}#1} +\define@key[ltj]{japaram}{talbaselineshift}{ + \directlua{tex.setattribute(luatexja.isglobal, + luatexbase.attributes['ltj@tablshift'], luatexja.token.scan_dimen())}#1} +\define@key[ltj]{japaram}{tjabaselineshift}{ + \directlua{tex.setattribute(luatexja.isglobal, + luatexbase.attributes['ltj@tkblshift'], luatexja.token.scan_dimen())}#1} +\else %%%%%%%%%%%%%%%%%%%%%%%% old tokenlib % yalbaselineshift = % yjabaselineshift = \define@key[ltj]{japaram}{yalbaselineshift}{% @@ -313,6 +341,7 @@ \directlua{tex.setattribute(luatexja.isglobal, luatexbase.attributes['ltj@tkblshift'], \ltj@safe@dimen@or\ltj@defdimen{#1})}} +\fi %%%%%%%%%%%%%%%%%%%%%%%% % jaxspmode = {, } % mode: inhibit, preonly, postonly, allow @@ -360,19 +389,35 @@ \directlua{luatexja.ext_print_global()}\ltj@autoxspc=0 \fi} -% [x]]kanjiskip = -\define@key[ltj]{japaram}{kanjiskip}{\ltjsetkanjiskip{#1}} -\define@key[ltj]{japaram}{xkanjiskip}{\ltjsetxkanjiskip{#1}} -\protected\def\ltjsetkanjiskip#1{% % SKIP - \directlua{% - local d = \ltj@safe@glue{#1} - luatexja.stack.set_stack_skip(luatexja.stack_table_index.KSK, d); node.free(d) -}\ignorespaces} -\protected\def\ltjsetxkanjiskip#1{% % SKIP - \directlua{% - local d = \ltj@safe@glue{#1} - luatexja.stack.set_stack_skip(luatexja.stack_table_index.XSK, d); node.free(d) -}\ignorespaces} +% [x]]kanjiskip = +\ifltj@token@avail@scan %%%%%%%%%%%%%%%%%%%%%%%% new tokenlib + \define@key[ltj]{japaram}{kanjiskip}{\message{<#1>}\ltjsetkanjiskip #1} + \define@key[ltj]{japaram}{xkanjiskip}{\ltjsetxkanjiskip #1} + \protected\def\ltjsetkanjiskip{% % SKIP + \directlua{% + local d = luatexja.token.scan_glue() + luatexja.stack.set_stack_skip(luatexja.stack_table_index.KSK, d); node.free(d) + }} + \protected\def\ltjsetxkanjiskip{% % SKIP + \directlua{% + local d = luatexja.token.scan_glue() + luatexja.stack.set_stack_skip(luatexja.stack_table_index.XSK, d); node.free(d) + }} +\else %%%%%%%%%%%%%%%%%%%%%%%% old tokenlib + \define@key[ltj]{japaram}{kanjiskip}{\ltjsetkanjiskip{#1}} + \define@key[ltj]{japaram}{xkanjiskip}{\ltjsetxkanjiskip{#1}} + \protected\def\ltjsetkanjiskip#1{% % SKIP + \directlua{% + local d = \ltj@safe@glue{#1} + luatexja.stack.set_stack_skip(luatexja.stack_table_index.KSK, d); node.free(d) + }\ignorespaces} + \protected\def\ltjsetxkanjiskip#1{% % SKIP + \directlua{% + local d = \ltj@safe@glue{#1} + luatexja.stack.set_stack_skip(luatexja.stack_table_index.XSK, d); node.free(d) + }\ignorespaces} +\else +\fi %%%%%%%%%%%%%%%%%%%%%%%% % jcharwidowpenalty = @@ -438,6 +483,7 @@ \ltj@@decl@array@param{boxdir} \def\ltjgetparameter#1{% \directlua{luatexja.base.start_time_measure('get_par')}% + % stop call is moved in luatexja.lua \ifcsname ltj@@array@param/#1\endcsname \expandafter\ltx@firstoftwo \else @@ -448,11 +494,9 @@ } \def\ltj@@getparam@one#1{% \directlua{luatexja.ext_get_parameter_unary('#1')}% - \directlua{luatexja.base.stop_time_measure('get_par')}% }% \def\ltj@@getparam@two#1#2{% \directlua{luatexja.ext_get_parameter_binary('#1', \ltj@safe@num@or{nil}{#2})}% - \directlua{luatexja.base.stop_time_measure('get_par')}% } %%%%%%%% \ltjalchar, \ltjjachar @@ -553,9 +597,12 @@ \yoko %%%% insert -%\let\orig@insert=\insert -%\protected\def\insert{\begingroup\afterassignment\ltj@@insert@A\ltj@tempcnta} -%\protected\def\ltj@@insert@A{\orig@insert\ltj@tempcnta\bgroup\aftergroup\endgroup\let\next} +\let\orig@insert=\insert +\protected\def\insert{\begingroup\afterassignment\ltj@@insert@A\ltj@tempcnta} +\protected\def\ltj@@insert@A{\orig@insert\ltj@tempcnta\bgroup + \aftergroup\ltj@@insert@B\let\next} +\protected\def\ltj@@insert@B{\directlua{luatexja.direction.populate_insertion_dir_whatsit()}\endgroup} + %%%% vadjust \let\ltj@@orig@vadjust=\vadjust \protected\def\vadjust{% @@ -567,14 +614,35 @@ } %%%% \hbox, \vbox, \vtop -\everyhbox{% - \directlua{luatexja.direction.set_list_direction_hook()}% - \aftergroup\ltj@@reset@badness -} -\everyvbox{% - \directlua{luatexja.direction.set_list_direction_hook()}% - \aftergroup\ltj@@reset@badness +\setbox\z@\hbox{% + $\directlua{% This value depends on the version of LuaTeX. + luatexja.stack.mmode = -tex.nest[tex.nest.ptr].mode + }$% } +\setbox\z@\box\voidb@x +\ifltj@everyhook@avail% using everyhook package + \PushPreHook{hbox}{% + \directlua{luatexja.direction.set_list_direction_hook()}% + \aftergroup\ltj@@reset@badness + } + \PushPreHook{vbox}{% + \directlua{luatexja.direction.set_list_direction_hook()}% + \aftergroup\ltj@@reset@badness + } +\else + \let\ltj@@everyhbox=\everyhbox\let\ltj@@everyvbox=\everyvbox + \newtoks\ltj@@i@everyhbox\newtoks\ltj@@i@everyvbox + \let\everyhbox=\ltj@@i@everyhbox\let\everyvbox=\ltj@@i@everyvbox + \ltj@@everyhbox{% + \directlua{luatexja.direction.set_list_direction_hook()}% + \aftergroup\ltj@@reset@badness + \the\ltj@@i@everyhbox} + \ltj@@everyvbox{% + \directlua{luatexja.direction.set_list_direction_hook()}% + \aftergroup\ltj@@reset@badness + \the\ltj@@i@everyvbox} +\fi + \protected\def\ltj@@reset@badness{% \directlua{% if luatexja.global_temp then @@ -584,11 +652,6 @@ end }% } -\setbox0\hbox{% - $\directlua{% This value depends on the version of LuaTeX. - luatexja.stack.mmode = -tex.nest[tex.nest.ptr].mode - }$% -} \AtBeginShipout{\directlua{luatexja.direction.finalize()}} %%%% \raise, \lower, \moveleft, \moveright @@ -646,7 +709,6 @@ \ltj@@orig@unvcopy\ltj@tempcnta \directlua{luatexja.direction.uncopy_restore_whatsit()}} - %%%% lastbox \let\ltj@@orig@lastbox=\lastbox \protected\def\lastbox{% @@ -654,18 +716,21 @@ } %%%%%%%% \ltjgetwd etc. +\ifltj@token@avail@scan %%%%%%%%%%%%%%%%%%%%%%%% new tokenlib +\def\ltj@@getwd{% + \directlua{luatexja.direction.get_box_dim('width', luatexja.token.scan_int())}} +\def\ltj@@getht{% + \directlua{luatexja.direction.get_box_dim('height', luatexja.token.scan_int())}} +\def\ltj@@getdp{% + \directlua{luatexja.direction.get_box_dim('depth', luatexja.token.scan_int())}} +\else %%%%%%%%%%%%%%%%%%%%%%%% old tokenlib \def\ltj@@getwd#1{% - \directlua{luatexja.direction.get_box_dim('width', \the\numexpr#1\relax)}% - \ltj@tempdima% -} + \directlua{luatexja.direction.get_box_dim('width', \the\numexpr#1\relax)}} \def\ltj@@getht#1{% - \directlua{luatexja.direction.get_box_dim('height', \the\numexpr#1\relax)}% - \ltj@tempdima% -} + \directlua{luatexja.direction.get_box_dim('height', \the\numexpr#1\relax)}} \def\ltj@@getdp#1{% - \directlua{luatexja.direction.get_box_dim('depth', \the\numexpr#1\relax)}% - \ltj@tempdima% -} + \directlua{luatexja.direction.get_box_dim('depth', \the\numexpr#1\relax)}} +\fi %%%%%%%%%%%%%%%%%%%%%%%% \let\ltjgetwd=\ltj@@getwd\let\ltjgetht=\ltj@@getht\let\ltjgetdp=\ltj@@getdp %%%%%%%% \ltjsetwd= etc. @@ -688,7 +753,6 @@ \directlua{luatexja.direction.set_box_dim('depth')}% \ltj@restore@globaldefs\endgroup} - %%------------------ Load module for the format \ifltj@in@latex %<*LaTeX>