OSDN Git Service

Added cache tables of JFM for speed. (quick fix)
[luatex-ja/luatexja.git] / src / luatexja-core.sty
index 0db069e..ecde410 100644 (file)
 \newdimen\ltj@tempdima
 \newskip\ltj@tempskipa
 
-\newdimen\zw
-\newdimen\zh
+\newdimen\ltj@zw
+\newdimen\ltj@zh
 \newdimen\jQ \jQ=0.25mm
 \newdimen\jH \jH=0.25mm
 
 
 %%%%%%%% Attributes for Japanese typesetting.
 \newluatexattribute\ltj@curjfnt   % index for ``current Japanese font''
+\newluatexattribute\jfam          % index for current jfam
 \newluatexattribute\ltj@charclass % 
 \newluatexattribute\ltj@yablshift % attribute for \yabaselineshift
 \newluatexattribute\ltj@ykblshift % attribute for \ykbaselineshift
     texio.write_nl("("..path..")")
     dofile(path)
   end
-  require('lualibs')
-  ltj.loadlua('luatexja-rmlgbm.lua') 
-    % For Ryumin-Light and GothicBBB-Medium.
-  ltj.loadlua('luatexja-jfont.lua')
   ltj.loadlua('luatexja-core.lua')
-  ltj.loadlua('luatexja-jfmglue.lua')
-  ltj.loadlua('luatexja-xkanji.lua')
 }
 
 
 
 %%%%%%%% Redefine \/
 %\let\ltj@ic=\/ \protected\def\/{{\ltj@icflag=1\ltj@ic}}
-\protected\def\/{\directlua{ltj.ext_append_italic()}}
+\protected\def\/{\directlua{luatexja.jfont.append_italic()}}
 
 %%%%%%%% \jfont\CS={...:...;jfm=metric;...}, \globaljfont
-\protected\def\jfont{\afterassignment\ltj@@jfont\directlua{ltj.ext_jfontdefX(false)}}
+\protected\def\jfont{\afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false)}}
 \protected\def\globaljfont{%
-  \afterassignment\ltj@@jfont\directlua{ltj.ext_jfontdefX(true)}}
-\def\ltj@@jfont{\directlua{ltj.ext_jfontdefY()}}
+  \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true)}}
+\def\ltj@@jfont{\directlua{luatexja.jfont.jfontdefY()}}
+
+\def\zw{\directlua{luatexja.jfont.load_zw()}\ltj@zw}
+\def\zh{\directlua{luatexja.jfont.load_zh()}\ltj@zh}
 
 %%%%%%%% \inhibitglue
-\protected\def\inhibitglue{\directlua{ltj.ext_create_inhibitglue_node()}}
+\protected\def\inhibitglue{\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
 
 %%%%%%%% \ltjdefcharrange<name>{100-200,3000-,5000,...}
 \protected\def\ltjdefcharrange#1#2{%
-  \ltj@tempcntc=#1 \expandafter\ltj@@dcrange#2,,\ignorespaces}
+  {\ltj@tempcntc=#1 \expandafter\ltj@@dcrange#2,,}\ignorespaces}
 \def\ltj@@dcrange#1,{\def\ltj@temp{#1}%
   \ifx\ltj@temp\empty\let\@next=\relax\else
   \ltj@@dcrangeA{#1}\let\@next=\ltj@@dcrange\fi\@next}
     \ltj@tempcnta=#1 \ltj@tempcntb=\ltj@tempcnta
   \else
     \def\ltj@temp{#1}%
-    \ifx\ltj@temp\empty\ltj@tempcnta='200 \else\ltj@tempcnta=#1 \fi
+    \ifx\ltj@temp\empty\ltj@tempcnta='200\else\ltj@tempcnta=#1\fi\relax
     \def\ltj@temp{#2}%
-    \ifx\ltj@temp\empty\ltj@tempcntb="10FFFF \else\ltj@tempcntb=#2 \fi%"
+    \ifx\ltj@temp\empty\ltj@tempcntb="10FFFF\else\ltj@tempcntb=#2\fi\relax%"
   \fi
   \directlua{luatexja.charrange.add_char_range(\the\ltj@tempcnta,\the\ltj@tempcntb,
     \the\ltj@tempcntc)}%
   \directlua{luatexja.stack.set_stack_table(ltj.isglobal, \asluastring{#3},
     \ltj@safe@num@or\ltj@defnum{#1},\ltj@safe@num@or\ltj@defnum{#2},#4,#5)}}
 
+% jatextfont = {<char_code>, <font_cs>}
+\define@key[ltj]{japaram}{jatextfont}{%
+  \expandafter\ltj@@set@stackfont#1:{mjtext}}
+\define@key[ltj]{japaram}{jascriptfont}{%
+  \expandafter\ltj@@set@stackfont#1:{mjscr}}
+\define@key[ltj]{japaram}{jascriptscriptfont}{%
+  \expandafter\ltj@@set@stackfont#1:{mjss}}
+\def\ltj@@set@stackfont#1,#2:#3{%
+  {\directlua{tex.globaldefs=0}\ltj@curjfnt=-1 #2%
+   \global\ltj@tempcnta=\ltj@curjfnt}%
+  \ifnum\ltj@tempcnta=-1
+    \@PackageError{luatexja-core}%
+    {\string#2 is not a control sequence that represents \MessageBreak
+     a Japanese font}{}%
+  \else
+    \directlua{luatexja.stack.set_stack_font(ltj.isglobal, \asluastring{#3},
+    \ltj@safe@num@or\ltj@defnum{#1}, \the\ltj@tempcnta)}%
+  \fi}
+
 % yalbaselineshift = <dimen>
 % yjabaselineshift = <dimen>
 \define@key[ltj]{japaram}{yalbaselineshift}{%
     \directlua{ltj.ext_print_global()}\ltj@autoxspc=0
   \fi}
 
+% [x]]kanjiskip = <dimen>
 \define@key[ltj]{japaram}{kanjiskip}{%              % SKIP
   \directlua{luatexja.stack.set_stack_skip(ltj.isglobal, 'kanjiskip', \ltj@safe@glue{#1})}}
 \define@key[ltj]{japaram}{xkanjiskip}{%             % SKIP
   \directlua{luatexja.stack.set_stack_skip(ltj.isglobal, 'xkanjiskip', \ltj@safe@glue{#1})}}
+
+% jcharwidowpenalty = <count>
 \define@key[ltj]{japaram}{jcharwidowpenalty}{%      %COUNT
-  \directlua{luatexja.stack.set_stack_table(ltj.isglobal, 'jwp', 0,
-    \ltj@safe@num@or\ltj@defnum{#1}, -10000, 10000)}}
+  \ltj@@set@stack0,#1:{jwp}{-10000}{10000}}
 
 % differentjfm = { large | small | average | both }
 \define@choicekey*+[ltj]{japaram}{differentjfm}[\ltj@temp\ltj@tempr]%
   {large,small,average,both}{%
   \ifcase\ltj@tempr
-    \directlua{ltj.ja_diffmet_rule = math.max}\or
-    \directlua{ltj.ja_diffmet_rule = math.min}\or
-    \directlua{ltj.ja_diffmet_rule = math.two_average}\or
-    \directlua{ltj.ja_diffmet_rule = math.two_add}
+    \directlua{luatexja.jfmglue.diffmet_rule = math.max}\or
+    \directlua{luatexja.jfmglue.diffmet_rule = math.min}\or
+    \directlua{luatexja.jfmglue.diffmet_rule = math.two_average}\or
+    \directlua{luatexja.jfmglue.diffmet_rule = math.two_add}
   \fi
 }{\ltj@PackageError{luatexja}{invalid argument `#1' for `differentjfm'}{%
   Argument for `differentjfm' must be one of `large', `small', `average',^^J%
   \fi\next
 }
 
-\protected\def\ltjsetparameter#1{\directlua{ltj.isglobal=''}%
+\protected\def\ltjsetparameter#1{%
+  \ifnum\globaldefs>0\directlua{ltj.isglobal='global'}\else\directlua{ltj.isglobal=''}\fi
   \setkeys[ltj]{japaram}{#1}\ignorespaces}
-\protected\def\ltjglobalsetparameter#1{\directlua{ltj.isglobal='global'}%
+\protected\def\ltjglobalsetparameter#1{%
+  \ifnum\globaldefs<0\directlua{ltj.isglobal=''}\else\directlua{ltj.isglobal='global'}\fi
   \setkeys[ltj]{japaram}{#1}\ignorespaces}
 
 %%%%%%%%