X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fluatexja-core.sty;h=4a5d3f0e4e520b0e6fd898e09e2358bed2ff19d9;hb=847312c712d721a0198c00563075948541ced2b7;hp=07e1adb707ffcb72671cf275db2d5768505dcda8;hpb=3c1d8a6574a9305e9ff4d36b349022c49d8ab0f7;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja-core.sty b/src/luatexja-core.sty index 07e1adb..4a5d3f0 100644 --- a/src/luatexja-core.sty +++ b/src/luatexja-core.sty @@ -146,13 +146,17 @@ \newluatexattribute\ltj@tablshift % attribute for talbaselineshift \newluatexattribute\ltj@tkblshift % attribute for tjabaselineshift \newluatexattribute\jfam % index for current jfam -\newluatexattribute\ltj@dir % temp attr for indicating box direction + +\newcount\ltj@dir@count % counter for indicating direction +\newcount\ltj@adjdir@count % counter for indicating direction (for vadjust) +\newluatexattribute\ltj@dir \ltj@dir=0 \ltj@icflag=0 \ltj@origchar=0 \ltj@charclass=0 \ltj@curjfnt=-1 +\ltj@curtfnt=-1 %%%%%%%% Attributes for character ranges \newcount\ltj@tempcnta @@ -219,7 +223,7 @@ %%%%%%%% \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\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()}} @@ -252,6 +256,11 @@ luatexja.stack.hmode = -tex.nest[tex.nest.ptr].mode }% } +\setbox0\vbox{% + \directlua{% This value depends on the version of LuaTeX. + luatexja.stack.vmode = -tex.nest[tex.nest.ptr].mode + }% +} % prebreakpenalty = {, } \define@key[ltj]{japaram}{kcatcode}{% @@ -265,6 +274,7 @@ \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}{% @@ -354,16 +364,19 @@ \fi} % [x]]kanjiskip = -\define@key[ltj]{japaram}{kanjiskip}{% % SKIP +\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) -}} -\define@key[ltj]{japaram}{xkanjiskip}{% % SKIP +}\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} + % jcharwidowpenalty = \define@key[ltj]{japaram}{jcharwidowpenalty}{% %COUNT @@ -402,11 +415,17 @@ \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{% \relax\ifnum\globaldefs<0\directlua{luatexja.isglobal=''}% \else\directlua{luatexja.isglobal='global'}\fi% - \setkeys[ltj]{japaram}{#1}\ignorespaces} + \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{% @@ -420,6 +439,7 @@ \ltj@@decl@array@param{jacharrange} \ltj@@decl@array@param{chartorange} \def\ltjgetparameter#1{% + \directlua{luatexja.base.start_time_measure('get_par')}% \ifcsname ltj@@array@param/#1\endcsname \expandafter\ltx@firstoftwo \else @@ -429,9 +449,12 @@ {\ltj@@getparam@one{#1}}% } \def\ltj@@getparam@one#1{% - \directlua{luatexja.ext_get_parameter_unary('#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 @@ -473,13 +496,13 @@ % いつも global \def\ltj@@getjfontnumber#1{% result in \ltj@tempcntc \ltj@reset@globaldefs - \begingroup\ltj@curjfnt=-1\relax - #1\directlua{luatexja.__temp = \the\ltj@curjfnt}\endgroup + \begingroup\ltj@curjfnt=-1 \ltj@curtfnt=-1\relax + #1\directlua{luatexja.__temp = -\the\ltj@curjfnt*\the\ltj@curtfnt}\endgroup \ltj@tempcntc=\directlua{tex.sprint(luatexja.__temp)}\relax \ifnum\ltj@tempcntc=-1 \@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} @@ -512,6 +535,97 @@ \directlua{luatexja.jfont.clear_alt_font(\the\ltj@tempcntc)}}\ignorespaces} +%%%%%%%% \yoko, \tate, \ifydir, \iftdir +\newif\ifydir +\newif\iftdir +\newif\ifddir +\protected\def\tate{% + \directlua{luatexja.direction.set_list_direction(3, 'tate')}% + \ltj@reset@globaldefs\ltj@dir@count=3\relax + \ifvmode\ltj@adjdir@count=3\fi\tdirtrue\ydirfalse\ddirfalse\ltj@restore@globaldefs} +\protected\def\yoko{% + \directlua{luatexja.direction.set_list_direction(4, 'yoko')}% + \ltj@reset@globaldefs\ltj@dir@count=4\relax + \ifvmode\ltj@adjdir@count=4\fi\ydirtrue\tdirfalse\ddirfalse\ltj@restore@globaldefs} +\protected\def\dtou{% + \directlua{luatexja.direction.set_list_direction(1, 'dtou')}% + \ltj@reset@globaldefs\ltj@dir@count=1\relax + \ifvmode\ltj@adjdir@count=1\fi\ydirfalse\tdirfalse\ddirtrue\ltj@restore@globaldefs} +\yoko + +\newcount\ltj@adjdir@count@backup +%%%% 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} +%%%% vadjust +\let\ltj@@orig@vadjust=\vadjust +\protected\def\vadjust{% + \ltj@@orig@vadjust\bgroup + \ifcase\ltj@adjdir@count\or\dtou\or\or\tate\or\yoko\fi + \aftergroup\ltj@@vadjust@check@dir\let\next} +\protected\def\ltj@@vadjust@check@dir{% + \directlua{luatexja.direction.check_adjust_direction()}% +} +%%%% unhbox and unvbox +\let\ltj@@orig@unhbox=\unhbox +\let\ltj@@orig@unvbox=\unvbox +\protected\def\unhbox{\begingroup\afterassignment\ltj@@unhbox\ltj@tempcnta} +\protected\def\unvbox{\begingroup\afterassignment\ltj@@unvbox\ltj@tempcnta} +\protected\def\ltj@@unhbox{% + \directlua{luatexja.direction.check_dir(\the\ltj@tempcnta)}% + \ltj@@orig@unhbox\ltj@tempcnta\endgroup} +\protected\def\ltj@@unvbox{% + \directlua{luatexja.direction.check_dir(\the\ltj@tempcnta)}% + \ltj@@orig@unvbox\ltj@tempcnta\endgroup} + +%%%%%%%% \ltjgetwd etc. +%\def\ltjgetwd{\expandafter\expandafter\expandafter\ltj@@getwd\ltj@grab@num} +%\def\ltjgetht{\expandafter\expandafter\expandafter\ltj@@getht\ltj@grab@num} +%\def\ltjgetdp{\expandafter\expandafter\expandafter\ltj@@getdp\ltj@grab@num} +\def\ltj@@getwd#1{% + \directlua{luatexja.direction.get_box_dim('width', \the\numexpr#1\relax)}% + \ltj@tempdima% +} +\def\ltj@@getht#1{% + \directlua{luatexja.direction.get_box_dim('height', \the\numexpr#1\relax)}% + \ltj@tempdima% +} +\def\ltj@@getdp#1{% + \directlua{luatexja.direction.get_box_dim('depth', \the\numexpr#1\relax)}% + \ltj@tempdima% +} +\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} + +%%%%%%%% \ifybox, \iftbox, \ifdbox +\def\ltj@@box@cond#1#2\fi{\fi\csname if#1\endcsname} +\def\ifybox#1{\directlua{luatexja.direction.dir_conditional(\the\numexpr #1\relax, 4)}% + \ltj@@box@cond{true}\else\ltj@@box@cond{false}\fi} +\def\iftbox#1{\directlua{luatexja.direction.dir_conditional(\the\numexpr #1\relax, 3)}% + \ltj@@box@cond{true}\else\ltj@@box@cond{false}\fi} +\def\ifdbox#1{\directlua{luatexja.direction.dir_conditional(\the\numexpr #1\relax, 1)}% + \ltj@@box@cond{true}\else\ltj@@box@cond{false}\fi} + %%------------------ Load module for the format \ifltj@in@latex %<*LaTeX> @@ -529,17 +643,6 @@ \ltj@overwrite@catcodetable\CatcodeTableLaTeXAtLetter \ltj@overwrite@catcodetable\CatcodeTableExpl -%%%%%%%% \yoko, \tate, \ifydir, \iftdir -\protected\def\tate{% - \directlua{luatexja.direction.set_list_direction(3, 'tate')}% -} -\protected\def\yoko{% - \directlua{luatexja.direction.set_list_direction(4, 'yoko')}% -} -\yoko -\newif\ifydir\ydirtrue -\newif\iftdir\tdirfalse - %%------------------ all done \ltj@core@AtEnd