OSDN Git Service

get rid of attr_orig_char
[luatex-ja/luatexja.git] / src / luatexja-core.sty
index cf4b8a5..f524066 100644 (file)
   \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}[2014/09/24 Core of LuaTeX-ja]
 \fi                             %</LaTeX>
 
 %% 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{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                             %</LaTeX>
 \endlinechar=-1 %
 
 \newluatexattribute\jfam          % index for current jfam
 
 \newluatexattribute\ltj@dir
-
+\newlanguage\ltj@@japanese
 \ltj@dir=0
 \ltj@icflag=0
 \ltj@origchar=0
   \directlua{% This value depends on the version of LuaTeX.
     luatexja.stack.hmode = -tex.nest[tex.nest.ptr].mode
   }%
-  $\directlua{% This value depends on the version of LuaTeX.
-    luatexja.stack.mmode = -tex.nest[tex.nest.ptr].mode
-  }$% 
 }
 \setbox0\vbox{%
   \directlua{% This value depends on the version of LuaTeX.
 \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
 }
 \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<number>, \ltjjachar<number>
 %%%%%%%% \ltjdeclarealtfont<base_font_cs><alt_font_cs>{100-200,3000-,5000,...}
 % <base_font_cs> の 第 3 引数の文字達は <alt_font_cs> で組む
 % いつも global
-\def\ltj@@getjfontnumber#1{% result in \ltj@tempcntc 
+\def\ltj@@getjfontnumber#1{% result in \ltj@tempcntc
   \ltj@reset@globaldefs
   \begingroup\ltj@curjfnt=-1 \ltj@curtfnt=-1\relax
   #1\directlua{luatexja.__temp = -(\the\ltj@curjfnt)*(\the\ltj@curtfnt)}\endgroup
      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%
 \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{%
   \ltj@@orig@vadjust\bgroup
-  \directlua{luatexja.direction.set_list_direction('adj')}%
+  \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
-\everyhbox{%
-  \directlua{luatexja.direction.set_list_direction()}%
-  \aftergroup\ltj@@reset@badness
-}
-\everyvbox{%
-  \directlua{luatexja.direction.set_list_direction()}%
-  \aftergroup\ltj@@reset@badness
+\setbox0\hbox{%
+  $\directlua{% This value depends on the version of LuaTeX.
+    luatexja.stack.mmode = -tex.nest[tex.nest.ptr].mode
+  }$%
 }
+\ifltj@everyhook@avail
+  \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
+  {\catcode`\!=0\catcode`\\=12
+  !@PackageWarningNoLine{luatexja-core}{%
+  I will use \everyhbox and \everyvbox directly !MessageBreak
+  for  supporting multiple directions, !MessageBreak
+  since everyhook.sty is not available}}
+  \everyhbox{%
+    \directlua{luatexja.direction.set_list_direction_hook()}%
+    \aftergroup\ltj@@reset@badness
+  }
+  \everyvbox{%
+    \directlua{luatexja.direction.set_list_direction_hook()}%
+    \aftergroup\ltj@@reset@badness
+  }
+\fi
 \protected\def\ltj@@reset@badness{%
   \directlua{%
     if luatexja.global_temp then
     end
   }%
 }
+\AtBeginShipout{\directlua{luatexja.direction.finalize()}}
 
 %%%% \raise, \lower, \moveleft, \moveright
 \let\ltj@@orig@raise=\raise
 }
 
 %%%% \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.check_dir(\the\ltj@tempcnta)}%
+  \directlua{luatexja.direction.unbox_check_dir()}%
   \ltj@@orig@unhbox\ltj@tempcnta}
 \protected\def\ltj@@unvbox{%
-  \directlua{luatexja.direction.check_dir(\the\ltj@tempcnta)}%
+  \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
 }
 
 %%%%%%%% \ltjgetwd<box_num> 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%