X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fluatexja-core.sty;h=dc51b7a3a393c7313bafc171b67f9d49184bb96e;hb=eb118f3e5ea0852407b5261817700401699528b9;hp=dd20eeead9f8af9813f3783f82affd8d48ac4ca7;hpb=3e8f91836a53e6864d3c5831fc7f91cfaad61bc3;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja-core.sty b/src/luatexja-core.sty index dd20eee..dc51b7a 100644 --- a/src/luatexja-core.sty +++ b/src/luatexja-core.sty @@ -65,7 +65,7 @@ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname \csname iftrue\endcsname \NeedsTeXFormat{LaTeX2e} - \ProvidesPackage{luatexja-core}[2015/05/03 Core of LuaTeX-ja] + \ProvidesPackage{luatexja-core}[2015/11/03 Core of LuaTeX-ja] \fi % %% Load prerequisite packages. @@ -92,7 +92,7 @@ %% Check if LuaTeX is used \ltx@LocalExpandAfter\ifx\csname directlua\endcsname\relax % Loading is silently aborted, since the notice of the wrong - % engine is aldready shown in otfluaload. + % engine is already shown in luaotfload. \ltj@core@AtEnd \expandafter\endinput\fi\relax @@ -184,8 +184,7 @@ \def\RequireLuaTeXjaSubmodule#1{% \@ifnextchar[{\ltj@requirelua@submod{#1}}{\ltj@requirelua@submod{#1}[]}} \def\ltj@requirelua@submod#1[#2]{% - \directlua{luatexja.load_module( - "\luatexluaescapestring{#1}")}} + \directlua{luatexja.load_module("\luatexluaescapestring{#1}")}} %%%%%%%% Load all sub-packages. @@ -206,25 +205,62 @@ \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false, 'yoko','\luatexluaescapestring{\noexpand#1}')}} \protected\def\globaljfont#1{% \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true, 'yoko','\luatexluaescapestring{\noexpand#1}')}} -\def\ltj@@jfont{\directlua{luatexja.jfont.jfontdefY()}} +\ifdefined\newluafunction + \newluafunction\ltj@@jfont@inner + \directlua{ + local t = lua.get_functions_table() + t[\the\ltj@@jfont@inner] = luatexja.jfont.jfontdefY + } + \def\ltj@@jfont{\luafunction\ltj@@jfont@inner} +\else + \def\ltj@@jfont{\directlua{luatexja.jfont.jfontdefY()}} +\fi %%%%%%%% \tfont\CS={...:...;jfm=metric;...}, \globaltfont \protected\def\tfont#1{% - \afterassignment\ltj@@tfont\directlua{luatexja.jfont.jfontdefX(false, 'tate','\luatexluaescapestring{\noexpand#1}')}} + \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false, 'tate','\luatexluaescapestring{\noexpand#1}')}} \protected\def\globaltfont#1{% - \afterassignment\ltj@@tfont\directlua{luatexja.jfont.jfontdefX(true, 'tate','\luatexluaescapestring{\noexpand#1}')}} -\def\ltj@@tfont{\directlua{luatexja.jfont.jfontdefY()}} + \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true, 'tate','\luatexluaescapestring{\noexpand#1}')}} %%%%%%%% \zw, \zh -\protected\def\zw{\directlua{tex.setdimen('ltj@zw', luatexja.jfont.get_zw())}\ltj@zw} -\protected\def\zh{\directlua{tex.setdimen('ltj@zh', luatexja.jfont.get_zh())}\ltj@zh} +\ifdefined\newluafunction + \newluafunction\ltj@zw@inner + \newluafunction\ltj@zh@inner + \directlua{ + local t, setdimen, ltjf = lua.get_functions_table(), tex.setdimen, luatexja.jfont + t[\the\ltj@zw@inner] = function() setdimen('ltj@zw', ltjf.get_zw()) end + t[\the\ltj@zh@inner] = function() setdimen('ltj@zh', ltjf.get_zh()) end + } + \protected\def\zw{\luafunction\ltj@zw@inner\ltj@zw} + \protected\def\zh{\luafunction\ltj@zh@inner\ltj@zh} +\else + \protected\def\zw{\directlua{tex.setdimen('ltj@zw', luatexja.jfont.get_zw())}\ltj@zw} + \protected\def\zh{\directlua{tex.setdimen('ltj@zh', luatexja.jfont.get_zh())}\ltj@zh} +\fi %%%%%%%% \inhibitglue -\protected\def\ltj@reset@globaldefs{% - \directlua{luatexja.global_temp = tex.globaldefs; tex.globaldefs = 0}} -\protected\def\ltj@restore@globaldefs{\directlua{tex.globaldefs = luatexja.global_temp}\relax} -\protected\def\inhibitglue{\ifhmode\ltj@@ihb\fi} -\def\ltj@@ihb{\relax\directlua{luatexja.jfmglue.create_inhibitglue_node()}} +\ifdefined\newluafunction + \newluafunction\ltj@reset@globaldefs@inner + \newluafunction\ltj@restore@globaldefs@inner + \newluafunction\ltj@@ihb@inner + \directlua{ + local t = lua.get_functions_table() + t[\the\ltj@reset@globaldefs@inner] + = function() luatexja.global_temp = tex.globaldefs; tex.globaldefs = 0 end + t[\the\ltj@restore@globaldefs@inner] + = function() tex.globaldefs = luatexja.global_temp end + t[\the\ltj@@ihb@inner] = luatexja.jfmglue.create_inhibitglue_node + } + \protected\def\ltj@reset@globaldefs{\luafunction\ltj@reset@globaldefs@inner} + \protected\def\ltj@restore@globaldefs{\luafunction\ltj@restore@globaldefs@inner} + \protected\def\inhibitglue{\ifhmode\relax\luafunction\ltj@@ihb@inner\fi} +\else + \protected\def\ltj@reset@globaldefs{% + \directlua{luatexja.global_temp = tex.globaldefs; tex.globaldefs = 0}} + \protected\def\ltj@restore@globaldefs{\directlua{tex.globaldefs = luatexja.global_temp}\relax} + \protected\def\inhibitglue{\ifhmode\ltj@@ihb\fi} + \def\ltj@@ihb{\relax\directlua{luatexja.jfmglue.create_inhibitglue_node()}} +\fi %%%%%%%% \ltjdefcharrange{100-200,3000-,5000,...} \protected\def\ltjdefcharrange#1#2{% @@ -263,15 +299,14 @@ \setbox\z@\box\voidb@x % prebreakpenalty = {, } -\define@key[ltj]{japaram}{kcatcode}{% - \expandafter\ltj@@set@stack#1:{KCAT}{0}{0x7FFFFFFF}} -\define@key[ltj]{japaram}{prebreakpenalty}{% - \expandafter\ltj@@set@stack#1:{PRE}{-10000}{10000}} -\define@key[ltj]{japaram}{postbreakpenalty}{% - \expandafter\ltj@@set@stack#1:{POST}{-10000}{10000}} -\def\ltj@@set@stack#1,#2:#3#4#5{% - \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#3, - \ltj@safe@num@or{nil}{#1},\ltj@safe@num@or{nil}{#2},#4,#5)}} +\define@key[ltj]{japaram}{kcatcode}{\ltj@@set@stack{KCAT}{0}{0x7FFFFFFF}#1\relax} +\define@key[ltj]{japaram}{prebreakpenalty}{\ltj@@set@stack{PRE}{-10000}{10000}#1\relax} +\define@key[ltj]{japaram}{postbreakpenalty}{\ltj@@set@stack{POST}{-10000}{10000}#1\relax} +\def\ltj@@set@stack#1#2#3{% + \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#1,#2,#3)}} +%\def\ltj@@set@stack#1,#2:#3#4#5{% +% \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#3, +% \ltj@safe@num@or{nil}{#1},\ltj@safe@num@or{nil}{#2},#4,#5)}} % jatextfont = {, } % only horizontal font is supported @@ -300,16 +335,16 @@ % yjabaselineshift = \define@key[ltj]{japaram}{yalbaselineshift}{% \directlua{tex.setattribute(luatexja.isglobal, - luatexbase.attributes['ltj@yablshift'], luatexja.token.scan_dimen())}#1} + luatexbase.attributes['ltj@yablshift'], luatexja.token.scan_dimen())}#1\relax} \define@key[ltj]{japaram}{yjabaselineshift}{% \directlua{tex.setattribute(luatexja.isglobal, - luatexbase.attributes['ltj@ykblshift'], luatexja.token.scan_dimen())}#1} + luatexbase.attributes['ltj@ykblshift'], luatexja.token.scan_dimen())}#1\relax} \define@key[ltj]{japaram}{talbaselineshift}{% \directlua{tex.setattribute(luatexja.isglobal, - luatexbase.attributes['ltj@tablshift'], luatexja.token.scan_dimen())}#1} + luatexbase.attributes['ltj@tablshift'], luatexja.token.scan_dimen())}#1\relax} \define@key[ltj]{japaram}{tjabaselineshift}{% \directlua{tex.setattribute(luatexja.isglobal, - luatexbase.attributes['ltj@tkblshift'], luatexja.token.scan_dimen())}#1} + luatexbase.attributes['ltj@tkblshift'], luatexja.token.scan_dimen())}#1\relax} % jaxspmode = {, } % mode: inhibit, preonly, postonly, allow @@ -322,25 +357,13 @@ \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi - \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.XSP, - \ltj@safe@num@or{nil}{#1}, - \ltj@safe@num@or{nil}{\ltj@temp},0,3)}} - + \ltj@@set@stack{XSP}03#1 \ltj@temp} % alxspmode = {, } % mode: inhibit, preonly, postonly, allow % or 0 1 2 3 \define@key[ltj]{japaram}{alxspmode}{% \inhibitxspcode - \expandafter\ltj@set@alxspmode#1:\relax} -\def\ltj@set@alxspmode#1,#2:{% - \lowercase{\edef\ltj@temp{#2}}% - \def\ltj@tempa{inhibit}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{0}\fi - \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi - \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi - \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi - \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.XSP, - \ltj@safe@num@or{nil}{#1}, - \ltj@safe@num@or{nil}{\ltj@temp},0,3)}} + \expandafter\ltj@set@jaxspmode#1:\relax}% same code as jaxspmode % autospacing = (default: true) \define@boolkey[ltj]{japaram}{autospacing}[true]{% @@ -359,8 +382,24 @@ \fi} % [x]]kanjiskip = - \define@key[ltj]{japaram}{kanjiskip}{\ltjsetkanjiskip #1} - \define@key[ltj]{japaram}{xkanjiskip}{\ltjsetxkanjiskip #1} +\define@key[ltj]{japaram}{kanjiskip}{\ltjsetkanjiskip#1} +\define@key[ltj]{japaram}{xkanjiskip}{\ltjsetxkanjiskip#1} +\ifdefined\newluafunction + \newluafunction\ltjsetkanjiskip@inner + \newluafunction\ltjsetxkanjiskip@inner + \directlua{ + local t, scan_glue = lua.get_functions_table(), luatexja.token.scan_glue + local sss, sti = luatexja.stack.set_stack_skip, luatexja.stack_table_index + t[\the\ltjsetkanjiskip@inner] = function() + local d = scan_glue(); sss(sti.KSK, d); node.free(d) + end + t[\the\ltjsetxkanjiskip@inner] = function() + local d = scan_glue(); sss(sti.XSK, d); node.free(d) + end + } + \protected\def\ltjsetkanjiskip{\luafunction\ltjsetkanjiskip@inner} + \protected\def\ltjsetxkanjiskip{\luafunction\ltjsetxkanjiskip@inner} +\else \protected\def\ltjsetkanjiskip{% % SKIP \directlua{% local d = luatexja.token.scan_glue() @@ -371,10 +410,10 @@ local d = luatexja.token.scan_glue() luatexja.stack.set_stack_skip(luatexja.stack_table_index.XSK, d); node.free(d) }} - +\fi % jcharwidowpenalty = \define@key[ltj]{japaram}{jcharwidowpenalty}{% %COUNT - \ltj@@set@stack0,#1:{JWP}{-10000}{10000}} + \ltj@@set@stack{JWP}{-10000}{10000}\z@#1 } % differentjfm = { large | small | average | pleft | pright | paverage | both} \define@choicekey*+[ltj]{japaram}{differentjfm}[\ltj@temp\ltj@tempr]% @@ -471,18 +510,16 @@ \csname ltj@kcat6\endcsname="7FFFFFFF }%" \protected\def\ltjjachar{\afterassignment\ltj@@jachar\ltj@tempcnta} -\def\ltj@@jachar{{\directlua{tex.globaldefs = 0}\ltj@alljachar\ltj@@origchar\ltj@tempcnta}} +\def\ltj@@jachar{{\directlua{tex.globaldefs=0}\ltj@alljachar\ltj@@origchar\ltj@tempcnta}} \protected\def\ltjalchar{\afterassignment\ltj@@alchar\ltj@tempcnta} -\def\ltj@@alchar{{\directlua{tex.globaldefs = 0}\ltj@allalchar\ltj@@origchar\ltj@tempcnta}} +\def\ltj@@alchar{{\directlua{tex.globaldefs=0}\ltj@allalchar\ltj@@origchar\ltj@tempcnta}} %%%%%%%% \ltjsetmathletter, \ltjunsetmathletter \protected\def\ltjsetmathletter#1{% - \ltj@tempcnta=#1 - \directlua{luatexja.math.is_math_letters[\the\ltj@tempcnta]=true}% + \directlua{luatexja.math.is_math_letters[luatexja.token.scan_int()]=true}#1\relax } \protected\def\ltjunsetmathletter#1{% - \ltj@tempcnta=#1 - \directlua{luatexja.math.is_math_letters[\the\ltj@tempcnta]=false}% + \directlua{luatexja.math.is_math_letters[luatexja.token.scan_int()]=false}#1\relax } %%%%%%%% \ltjdeclarealtfont{100-200,3000-,5000,...} @@ -573,37 +610,76 @@ } \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 - } + \ifdefined\newluafunction + \newluafunction\ltj@@box@dirhook + \directlua{ + local t, ltjd = lua.get_functions_table(), luatexja.direction + t[\the\ltj@@box@dirhook] + = function() ltjd.set_list_direction_hook() end + } + \PushPreHook{hbox}{\luafunction\ltj@@box@dirhook\aftergroup\ltj@@reset@badness} + \PushPreHook{vbox}{\luafunction\ltj@@box@dirhook\aftergroup\ltj@@reset@badness} + \else + \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 + } + \fi \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} + \ifdefined\newluafunction + \newluafunction\ltj@@box@dirhook + \directlua{ + local t, ltjd = lua.get_functions_table(), luatexja.direction + t[\the\ltj@@box@dirhook] + = function() ltjd.set_list_direction_hook() end + } + \ltj@@everyhbox{\luafunction\ltj@@box@dirhook + \aftergroup\ltj@@reset@badness\the\ltj@@i@everyhbox} + \ltj@@everyvbox{\luafunction\ltj@@box@dirhook + \aftergroup\ltj@@reset@badness\the\ltj@@i@everyvbox} + \else + \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 +\fi + +\ifdefined\newluafunction + \newluafunction\ltj@@reset@badness@inner + \directlua{ + local t = lua.get_functions_table() + t[\the\ltj@@reset@badness@inner] = function() + if luatexja.global_temp then + tex.hbadness= tex.hbadness or luatexja.hbadness_temp + tex.vbadness= tex.vbadness or luatexja.vbadness_temp + tex.globaldefs= luatexja.global_temp or tex.globaldefs + end + end} + \protected\def\ltj@@reset@badness{\luafunction\ltj@@reset@badness@inner} +\else + \protected\def\ltj@@reset@badness{% + \directlua{% + if luatexja.global_temp then + tex.hbadness= tex.hbadness or luatexja.hbadness_temp + tex.vbadness= tex.vbadness or luatexja.vbadness_temp + tex.globaldefs= luatexja.global_temp or tex.globaldefs + end + }% + } \fi -\protected\def\ltj@@reset@badness{% - \directlua{% - if luatexja.global_temp then - tex.hbadness= tex.hbadness or luatexja.hbadness_temp - tex.vbadness= tex.vbadness or luatexja.vbadness_temp - tex.globaldefs= luatexja.global_temp or tex.globaldefs - end - }% -} \AtBeginShipout{\directlua{luatexja.direction.finalize()}} %%%% \raise, \lower, \moveleft, \moveright @@ -677,24 +753,9 @@ \let\ltjgetwd=\ltj@@getwd\let\ltjgetht=\ltj@@getht\let\ltjgetdp=\ltj@@getdp %%%%%%%% \ltjsetwd= etc. -\protected\def\ltjsetwd{\begingroup - \ltj@reset@globaldefs\afterassignment\ltj@@setwd@a\ltj@tempcnta} -\def\ltj@@setwd@a{\afterassignment\ltj@@setwd@b\ltj@tempdima} -\def\ltj@@setwd@b{% - \directlua{luatexja.direction.set_box_dim('width')}% - \ltj@restore@globaldefs\endgroup} -\protected\def\ltjsetht{\begingroup - \ltj@reset@globaldefs\afterassignment\ltj@@setht@a\ltj@tempcnta} -\def\ltj@@setht@a{\afterassignment\ltj@@setht@b\ltj@tempdima} -\def\ltj@@setht@b{% - \directlua{luatexja.direction.set_box_dim('height')}% - \ltj@restore@globaldefs\endgroup} -\protected\def\ltjsetdp{\begingroup - \ltj@reset@globaldefs\afterassignment\ltj@@setdp@a\ltj@tempcnta} -\def\ltj@@setdp@a{\afterassignment\ltj@@setdp@b\ltj@tempdima} -\def\ltj@@setdp@b{% - \directlua{luatexja.direction.set_box_dim('depth')}% - \ltj@restore@globaldefs\endgroup} +\protected\def\ltjsetwd{\directlua{luatexja.direction.set_box_dim('width')}} +\protected\def\ltjsetht{\directlua{luatexja.direction.set_box_dim('height')}} +\protected\def\ltjsetdp{\directlua{luatexja.direction.set_box_dim('depth')}} %%------------------ Load module for the format