X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fluatexja-core.sty;h=dc51b7a3a393c7313bafc171b67f9d49184bb96e;hb=c696627b410894afdf57afed985d0009cc5ae87d;hp=706eabb8f54ec54c6a578797db35ec51f90167db;hpb=2b3abd97c607a1a2c62ae9b0e726d5fe6573caca;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja-core.sty b/src/luatexja-core.sty index 706eabb..dc51b7a 100644 --- a/src/luatexja-core.sty +++ b/src/luatexja-core.sty @@ -65,31 +65,34 @@ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname \csname iftrue\endcsname \NeedsTeXFormat{LaTeX2e} - \ProvidesPackage{luatexja-core}[2014/01/13 Core of LuaTeX-ja] + \ProvidesPackage{luatexja-core}[2015/11/03 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 + \input atbegshi.sty + \AtBeginShipoutInit \fi % \endlinechar=-1 % %% 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 @@ -130,24 +133,36 @@ %%%%%%%% Attributes for Japanese typesetting. \newluatexattribute\ltj@icflag % attribute for italic correction -\newluatexattribute\ltj@curjfnt % index for ``current Japanese font'' -\newluatexattribute\ltj@origchar % +\newluatexattribute\ltj@curjfnt % index for ``current horizontal Japanese font'' +\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 \yabaselineshift -\newluatexattribute\ltj@ykblshift % attribute for \ykbaselineshift +\newluatexattribute\ltj@yablshift % attribute for yalbaselineshift +\newluatexattribute\ltj@ykblshift % attribute for yjabaselineshift +\newluatexattribute\ltj@tablshift % attribute for talbaselineshift +\newluatexattribute\ltj@tkblshift % attribute for tjabaselineshift \newluatexattribute\jfam % index for current jfam -\ltj@icflag=0\ltj@origchar=0\ltj@charclass=0 + +\newluatexattribute\ltj@dir +\newlanguage\ltj@@japanese +\ltj@dir\z@ +\ltj@icflag\z@ +\ltj@origchar\z@ +\ltj@charclass\z@ +\ltj@curjfnt\m@ne +\ltj@curtfnt\m@ne %%%%%%%% Attributes for character ranges \newcount\ltj@tempcnta -\ltj@tempcnta=0 +\ltj@tempcnta\z@ \loop\ifnum\ltj@tempcnta<7 \expandafter\newluatexattribute% \csname ltj@kcat\the\ltj@tempcnta\endcsname \csname ltj@kcat\the\ltj@tempcnta\endcsname=0 - \advance\ltj@tempcnta by1 + \advance\ltj@tempcnta\@ne \repeat @@ -157,7 +172,8 @@ \protected\def\ltj@@q@escapenum{\ltj@@q@escapenum@} \directlua{% - luatexja = {} + luatexja = {}; + luatexja.lang_ja = \the\ltj@@japanese; dofile(assert(kpse.find_file('luatexja.lua', 'tex'), "File `luatexja.lua' not found")) } @@ -168,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. @@ -180,36 +195,72 @@ \fi % %%%%%%%% \asluastring -\def\asluastring#1{'\luaescapestring{\detokenize{#1}}'} +\def\asluastring#1{'\luatexluaescapestring{\detokenize{#1}}'} %%%%%%%% Redefine \/ \protected\def\/{\relax\directlua{luatexja.jfont.append_italic()}} %%%%%%%% \jfont\CS={...:...;jfm=metric;...}, \globaljfont -\protected\def\jfont{\afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false)}} -\protected\def\globaljfont{% - \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true)}} -\def\ltj@@jfont{\directlua{luatexja.jfont.jfontdefY()}} +\protected\def\jfont#1{% + \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}')}} +\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 -%%%%%%%% \zw, \zh -\protected\def\zw{\directlua{luatexja.jfont.load_zw()}\ltj@zw} -\protected\def\zh{\directlua{luatexja.jfont.load_zh()}\ltj@zh} +%%%%%%%% \tfont\CS={...:...;jfm=metric;...}, \globaltfont +\protected\def\tfont#1{% + \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false, 'tate','\luatexluaescapestring{\noexpand#1}')}} +\protected\def\globaltfont#1{% + \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true, 'tate','\luatexluaescapestring{\noexpand#1}')}} +%%%%%%%% \zw, \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}} -\protected\def\inhibitglue{\ifhmode\ltj@@ihb\fi} -\def\ltj@@ihb{\relax\directlua{luatexja.jfmglue.create_inhibitglue_node()}} - -%%%%%%%% \yoko, \tate, \ifydir, \iftdir -%% At this moment, tategaki mode is not implemented; -%% there is only yokogaki mode now. -\let\yoko\relax -\let\tate\relax -\newif\ifydir\ydirtrue -\newif\iftdir\tdirfalse +\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{% @@ -233,26 +284,32 @@ %%%%%%%% \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 - } + }% +} +\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}{% - \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_table(luatexja.isglobal, 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 \define@key[ltj]{japaram}{jatextfont}{% \expandafter\ltj@@set@stackfont#1:{MJT}} \define@key[ltj]{japaram}{jascriptfont}{% @@ -261,30 +318,33 @@ \expandafter\ltj@@set@stackfont#1:{MJSS}} \protected\def\ltj@@set@stackfont#1,#2:#3{% \ltj@reset@globaldefs - \ltj@tempcnta=\ltj@curjfnt\ltj@curjfnt=-1 #2% - \ifnum\ltj@curjfnt=-1 + \ltj@tempcnta=\ltj@curjfnt\ltj@curjfnt\m@ne#2% + \ifnum\ltj@curjfnt=\m@ne \@PackageError{luatexja-core}% {\string#2 is not a control sequence that represents \MessageBreak a Japanese font}{}% \else - \directlua{luatexja.stack.set_stack_font(luatexja.isglobal, - luatexja.stack_table_index.#3, + \directlua{luatexja.stack.set_stack_font(luatexja.stack_table_index.#3, \ltj@safe@num@or{nil}{#1}, \the\ltj@curjfnt)}% \fi \ltj@curjfnt=\ltj@tempcnta \ltj@restore@globaldefs } -% yalbaselineshift = +% {y,t}{ja,al}baselineshift = % yjabaselineshift = \define@key[ltj]{japaram}{yalbaselineshift}{% \directlua{tex.setattribute(luatexja.isglobal, - luatexbase.attributes['ltj@yablshift'], - \ltj@safe@dimen@or\ltj@defdimen{#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'], - \ltj@safe@dimen@or\ltj@defdimen{#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\relax} +\define@key[ltj]{japaram}{tjabaselineshift}{% + \directlua{tex.setattribute(luatexja.isglobal, + luatexbase.attributes['ltj@tkblshift'], luatexja.token.scan_dimen())}#1\relax} % jaxspmode = {, } % mode: inhibit, preonly, postonly, allow @@ -297,52 +357,63 @@ \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_table(luatexja.isglobal, - 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_table(luatexja.isglobal, - 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]{% \ifltj@japaram@autospacing - \directlua{luatexja.ext_print_global()}\ltj@autospc=1 + \directlua{luatexja.ext_print_global()}\ltj@autospc\@ne \else - \directlua{luatexja.ext_print_global()}\ltj@autospc=0 + \directlua{luatexja.ext_print_global()}\ltj@autospc\z@ \fi} % autoxspacing = (default: true) \define@boolkey[ltj]{japaram}{autoxspacing}[true]{% \ifltj@japaram@autoxspacing - \directlua{luatexja.ext_print_global()}\ltj@autoxspc=1 + \directlua{luatexja.ext_print_global()}\ltj@autoxspc\@ne \else - \directlua{luatexja.ext_print_global()}\ltj@autoxspc=0 + \directlua{luatexja.ext_print_global()}\ltj@autoxspc\z@ \fi} -% [x]]kanjiskip = -\define@key[ltj]{japaram}{kanjiskip}{% % SKIP - \directlua{luatexja.stack.set_stack_skip(luatexja.isglobal, 'kanjiskip', \ltj@safe@glue{#1})}} -\define@key[ltj]{japaram}{xkanjiskip}{% % SKIP - \directlua{luatexja.stack.set_stack_skip(luatexja.isglobal, 'xkanjiskip', \ltj@safe@glue{#1})}} - +% [x]]kanjiskip = +\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() + 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) + }} +\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]% @@ -373,13 +444,21 @@ } \protected\def\ltj@setpar@global{% - \ifnum\globaldefs>0\directlua{luatexja.isglobal='global'}\else\directlua{luatexja.isglobal=''}\fi + \relax\ifnum\globaldefs>0\directlua{luatexja.isglobal='global'}% + \else\directlua{luatexja.isglobal=''}\fi } \protected\def\ltjsetparameter#1{% - \ltj@setpar@global\setkeys[ltj]{japaram}{#1}\ignorespaces} + \directlua{luatexja.base.start_time_measure('set_par')}% + \ltj@setpar@global\setkeys[ltj]{japaram}{#1}% + \directlua{luatexja.base.stop_time_measure('set_par')}% + \ignorespaces} \protected\def\ltjglobalsetparameter#1{% - \ifnum\globaldefs<0\directlua{luatexja.isglobal=''}\else\directlua{luatexja.isglobal='global'}\fi - \setkeys[ltj]{japaram}{#1}\ignorespaces} + \relax\ifnum\globaldefs<0\directlua{luatexja.isglobal=''}% + \else\directlua{luatexja.isglobal='global'}\fi% + \directlua{luatexja.base.start_time_measure('set_par')}% + \setkeys[ltj]{japaram}{#1}% + \directlua{luatexja.base.stop_time_measure('set_par')}% + \ignorespaces} %%%%%%%% \ltjgetparameter \def\ltj@@decl@array@param#1{% @@ -392,7 +471,10 @@ \ltj@@decl@array@param{kcatcode} \ltj@@decl@array@param{jacharrange} \ltj@@decl@array@param{chartorange} +\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 @@ -402,7 +484,8 @@ {\ltj@@getparam@one{#1}}% } \def\ltj@@getparam@one#1{% - \directlua{luatexja.ext_get_parameter_unary('#1')}}% + \directlua{luatexja.ext_get_parameter_unary('#1')}% +}% \def\ltj@@getparam@two#1#2{% \directlua{luatexja.ext_get_parameter_binary('#1', \ltj@safe@num@or{nil}{#2})}% } @@ -410,13 +493,13 @@ %%%%%%%% \ltjalchar, \ltjjachar \let\ltj@@origchar=\char \protected\def\ltj@alljachar{\relax - \csname ltj@kcat0\endcsname=0 - \csname ltj@kcat1\endcsname=0 - \csname ltj@kcat2\endcsname=0 - \csname ltj@kcat3\endcsname=0 - \csname ltj@kcat4\endcsname=0 - \csname ltj@kcat5\endcsname=0 - \csname ltj@kcat6\endcsname=0 } + \csname ltj@kcat0\endcsname\z@ + \csname ltj@kcat1\endcsname\z@ + \csname ltj@kcat2\endcsname\z@ + \csname ltj@kcat3\endcsname\z@ + \csname ltj@kcat4\endcsname\z@ + \csname ltj@kcat5\endcsname\z@ + \csname ltj@kcat6\endcsname\z@} \protected\def\ltj@allalchar{\relax \csname ltj@kcat0\endcsname="7FFFFFFF %" \csname ltj@kcat1\endcsname="7FFFFFFF %" @@ -427,30 +510,33 @@ \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{\directlua{luatexja.math.is_math_letters[#1]=true}} -\protected\def\ltjunsetmathletter#1{\directlua{luatexja.math.is_math_letters[#1]=false}} - +\protected\def\ltjsetmathletter#1{% + \directlua{luatexja.math.is_math_letters[luatexja.token.scan_int()]=true}#1\relax +} +\protected\def\ltjunsetmathletter#1{% + \directlua{luatexja.math.is_math_letters[luatexja.token.scan_int()]=false}#1\relax +} %%%%%%%% \ltjdeclarealtfont{100-200,3000-,5000,...} % の 第 3 引数の文字達は で組む % いつも global -\def\ltj@@getjfontnumber#1{% result in \ltj@tempcntc +\def\ltj@@getjfontnumber#1{% result in \ltj@tempcntc \ltj@reset@globaldefs - \bgroup\ltj@curjfnt=-1\relax - #1\directlua{luatexja.__temp = \the\ltj@curjfnt}\egroup + \begingroup\ltj@curjfnt\m@ne\ltj@curtfnt\m@ne\relax + #1\directlua{luatexja.__temp = -(\the\ltj@curjfnt)*(\the\ltj@curtfnt)}\endgroup \ltj@tempcntc=\directlua{tex.sprint(luatexja.__temp)}\relax - \ifnum\ltj@tempcntc=-1 + \ifnum\ltj@tempcntc=\m@ne \@PackageError{luatexja-core}% {\string#1 is not a control sequence that represents \MessageBreak - a Japanese font}{I'll use the current Japanese font instead.^^J}% + a Japanese font}{I'll use the current horizontal Japanese font instead.^^J}% \ltj@tempcntc=\ltj@curjfnt \fi\ltj@restore@globaldefs} - + \protected\def\ltjdeclarealtfont#1#2#3{% {\ltj@@getjfontnumber#1\@tempcnta=\ltj@tempcntc% \@tempcnta: 基底フォント \ltj@@getjfontnumber#2% @@ -480,6 +566,197 @@ \directlua{luatexja.jfont.clear_alt_font(\the\ltj@tempcntc)}}\ignorespaces} +%%%%%%%% \yoko, \tate,\dtou +\protected\def\tate{% + \directlua{luatexja.direction.set_list_direction(3, 'tate')}% +} +\protected\def\yoko{% + \directlua{luatexja.direction.set_list_direction(4, 'yoko')}% +} +\protected\def\dtou{% + \directlua{luatexja.direction.set_list_direction(1, 'dtou')}% +} +\protected\def\utod{% 「縦数式ディレクション」 + \directlua{luatexja.direction.set_list_direction(11, 'utod')}% +} +\define@key[ltj]{japaram}{direction}{%% always local + \directlua{luatexja.direction.set_list_direction(1, 'ltjsetparameter')}% +} + +\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\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{% + \ltj@@orig@vadjust\bgroup + \directlua{luatexja.direction.set_list_direction_hook('adj')}% + \aftergroup\ltj@@vadjust@check@dir\let\next} +\protected\def\ltj@@vadjust@check@dir{% + \directlua{luatexja.direction.check_adjust_direction()}% +} + +%%%% \hbox, \vbox, \vtop +\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 + \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 + \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 + +\AtBeginShipout{\directlua{luatexja.direction.finalize()}} + +%%%% \raise, \lower, \moveleft, \moveright +\let\ltj@@orig@raise=\raise +\let\ltj@@orig@lower=\lower +\protected\def\raise{\ltj@reset@globaldefs\afterassignment\ltj@@raise\ltj@tempdima} +\protected\def\lower{\ltj@reset@globaldefs\afterassignment\ltj@@raise\ltj@tempdima-} +\protected\def\ltj@@raise{% + \ltj@restore@globaldefs + \edef\ltj@@raise@a{% + \noexpand\directlua{luatexja.direction.raise_box()}% + \ltj@@orig@raise\the\ltj@tempdima\noexpand\box\ltj@afbox + }\ltj@afterbox\ltj@@raise@a} +\let\ltj@@orig@moveleft=\moveleft +\let\ltj@@orig@moveright=\moveright +\protected\def\moveleft{\ltj@reset@globaldefs\afterassignment\ltj@@moveleft\ltj@tempdima} +\protected\def\moveright{\ltj@reset@globaldefs\afterassignment\ltj@@moveleft\ltj@tempdima-} +\protected\def\ltj@@moveleft{% + \ltj@restore@globaldefs + \edef\ltj@@moveleft@a{% + \noexpand\directlua{luatexja.direction.raise_box()}% + \ltj@@orig@moveleft\the\ltj@tempdima\noexpand\box\ltj@afbox + }\ltj@afterbox\ltj@@moveleft@a} + +%%%% \vcenter +\let\ltj@@orig@vcenter=\vcenter +\protected\def\vcenter{\ltj@afterbox\ltj@@vcenter\vbox} +\protected\def\ltj@@vcenter{% + \directlua{luatexja.direction.raise_box()}% + \ltj@@orig@vcenter{\box\ltj@afbox}% +} + +%%%% \unhbox and \unvbox +\long\def \@gobbletwo #1#2{} +\let\ltj@@orig@unhbox=\unhbox +\let\ltj@@orig@unvbox=\unvbox +\protected\def\unhbox{\ltj@reset@globaldefs\afterassignment\ltj@@unhbox\ltj@tempcnta} +\protected\def\unvbox{\ltj@reset@globaldefs\afterassignment\ltj@@unvbox\ltj@tempcnta} +\protected\def\ltj@@unhbox{% + \directlua{luatexja.direction.unbox_check_dir()}% + \ltj@@orig@unhbox\ltj@tempcnta} +\protected\def\ltj@@unvbox{% + \directlua{luatexja.direction.unbox_check_dir()}% + \ltj@@orig@unvbox\ltj@tempcnta} +\let\ltj@@orig@unhcopy=\unhcopy +\let\ltj@@orig@unvcopy=\unvcopy +\protected\def\unhcopy{\ltj@reset@globaldefs\afterassignment\ltj@@unhcopy\ltj@tempcnta} +\protected\def\unvcopy{\ltj@reset@globaldefs\afterassignment\ltj@@unvcopy\ltj@tempcnta} +\protected\def\ltj@@unhcopy{% + \directlua{luatexja.direction.unbox_check_dir(true)}% + \ltj@@orig@unhcopy\ltj@tempcnta + \directlua{luatexja.direction.uncopy_restore_whatsit()}} +\protected\def\ltj@@unvcopy{% + \directlua{luatexja.direction.unbox_check_dir(true)}% + \ltj@@orig@unvcopy\ltj@tempcnta + \directlua{luatexja.direction.uncopy_restore_whatsit()}} + +%%%% lastbox +\let\ltj@@orig@lastbox=\lastbox +\protected\def\lastbox{% + \directlua{luatexja.direction.lastbox_hook()}\ltj@@orig@lastbox +} + +%%%%%%%% \ltjgetwd etc. +\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())}} +\let\ltjgetwd=\ltj@@getwd\let\ltjgetht=\ltj@@getht\let\ltjgetdp=\ltj@@getdp + +%%%%%%%% \ltjsetwd= etc. +\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 \ifltj@in@latex %<*LaTeX> @@ -491,12 +768,13 @@ \newluatexcatcodetable\ltj@temp@cctb \def\ltj@overwrite@catcodetable#1{% \setluatexcatcodetable\ltj@temp@cctb{\luatexcatcodetable#1}% - \setluatexcatcodetable#1{\luatexcatcodetable\ltj@temp@cctb\catcode"FFFFF=14}% + \setluatexcatcodetable#1{\luatexcatcodetable\ltj@temp@cctb\catcode"FFFFF=14}%" } \ltj@overwrite@catcodetable\CatcodeTableLaTeX \ltj@overwrite@catcodetable\CatcodeTableLaTeXAtLetter \ltj@overwrite@catcodetable\CatcodeTableExpl + %%------------------ all done \ltj@core@AtEnd \endinput