OSDN Git Service

use pre_shipout_filter hook if available
[luatex-ja/luatexja.git] / src / ltj-base.sty
index b8b7855..2ce01d7 100644 (file)
@@ -13,7 +13,7 @@
 
 \ifltj@in@latex                 %<*LaTeX>
   \NeedsTeXFormat{LaTeX2e}
-  \ProvidesPackage{ltj-base}[2013/05/14]
+  \ProvidesPackage{ltj-base}[2021-03-16]
 \fi                             %</LaTeX>
 
 %%------------------ Tiny helpers
 %% \ltj@q@mark
 \protected\def\ltj@q@mark{\ltj@q@mark@}
 
-%! etoolbox の \letcs, \cslet, \csletcs.
-%% \ltj@letcs
-\protected\def\ltj@letcs#1#2{
-  \expandafter\let\expandafter#1\csname#2\endcsname
-}
-
-%% \ltj@cslet
-\protected\def\ltj@cslet#1#2{
-  \expandafter\let\csname#1\endcsname#2
-}
-
+%! etoolbox の \csletcs.
 %% \ltj@csletcs
 \protected\def\ltj@csletcs#1#2{
   \expandafter\let\csname#1\expandafter\endcsname
   \else\expandafter\ltx@secondoftwo\fi
 }
 
-%% \ltj@if@empty{<stuff>}{<yes>}{<no>}
-%! <stuff> が空であるか.
-% Checks if <stuff> is empty.
-\long\def\ltj@if@empty#1{
-  \ltj@ifx{\ltj@@q@empty#1\ltj@@q@empty}
-}
 \protected\def\ltj@@q@empty{\ltj@@q@empty@}
 
 %% \ltj@if@blank{<stuff>}{<yes>}{<no>}
   #4
 }
 
-%% \ltj@burst-`>TEXT
-%! トリックに使う \romannumeral をエイリアスしておく.
-% Gets the head of TEXT expanded repeatedly until an unexpandable
-% token is seen, and if the token is a space then it is gobbled.
-\let\ltj@burst\romannumeral
-
 %%------------------ LaTeX vs plain
 \ifltj@in@latex            %<*LaTeX>
 
 %! plain であるか.
 \ltj@csletcs{ifltj@in@plain}{iffalse}
 
-%% \ltj@require@package{<package>}{<date>}
-%! サブパッケージを読み込む. LaTeX では \RequirePackage、それ以外では
-%! \input を使う. <date> は必須だが空でもよい.
-\def\ltj@require@package#1#2{
-  \RequirePackage{#1}[#2]
-}
-
-%% \ltj@print{<message>}
-%! 端末への出力.
-\let\ltj@print\typeout
-
 \else                           %<*!LaTeX>
 
 %% \ifltj@in@plain
   \ltj@csletcs{ifltj@in@plain}{iffalse}
 \fi
 
-%% \ltj@require@package{<package>}{<date>}
-\def\ltj@require@package#1#2{
-  \input #1.sty\relax
-}
-
-%% \ltj@print{<message>}
-\def\ltj@print#1{
-  \immediate\write16{#1}
-}
-
 \fi                             %</LaTeX>
 %%------------------ Value-token handling
 
 %% \ltj@gobble@num <number>
 %! 次に続く整数を(2 回展開で)読み捨てる. 
 \def\ltj@gobble@num{
-  \ltj@burst-`>\ltj@@gobble@num
-}
-\def\ltj@@gobble@num{
-  \expandafter\ltj@@gobble@numA\the\parshapeindent
-}
-\begingroup
-  \lccode`8=`p\lccode`9=`t
-\lowercase{\endgroup
-  \def\ltj@@gobble@numA#189{ }
+  \directlua{token.scan_int()}
 }
 
 %% \ltj@gobble@glue <glue>
 %! 次に続くグルー値を(2 回展開で)読み捨てる. 
-\def\ltj@gobble@glue{%
-  \ltj@burst-`>\ltj@@gobble@glue
-}
-\def\ltj@@gobble@glue{
-  \expandafter\ltj@@gobble@glueA\the\glueshrinkorder
+\def\ltj@gobble@glue{
+  \directlua{token.scan_glue()}
 }
-\def\ltj@@gobble@glueA#1{ }
 
 %% \ltj@gobble@dimen <dimen>
 %! 次に続く寸法値を(2 回展開で)読み捨てる. 
-\def\ltj@gobble@dimen{%
-  \ltj@burst-`>\ltj@@gobble@dimen
-}
-\def\ltj@@gobble@dimen{
-  \expandafter\ltj@@gobble@dimenA\the\glueshrinkorder
-  0pt minus
-}
-\def\ltj@@gobble@dimenA#1{ }
-
-%% \ltj@@scan@brace
-% This is to be followed by a macro with one argument; if the macro is
-% followed by an open-group token (catcode 1), then it receives as the
-% argument a token \bxnt@escape instead of the group initiated by the
-% open-group, which is left untouched.
-\def\ltj@@scan@brace{
-  \directlua{luatexja.base.scan_brace()}
-}
-
-%% \ltj@@scan@number
-\def\ltj@@scan@number{
-  \directlua{luatexja.base.scan_number()}
+\def\ltj@gobble@dimen{
+  \directlua{token.scan_dimen()}
 }
 
 %% \ltj@grab@num <number>
 %!   (command_name が "assign_int" であるトークン).
 %! (注意: まだ文字表記(`A)に対応していません.)
 \def\ltj@grab@num{
-  \ltj@burst-`>\ltj@@grab@num
-}
-\def\ltj@@grab@num{
-  \ltj@@scan@brace\ltj@@grab@numA
-}
-\def\ltj@@grab@numA#1{
-  \ltj@ifx{#1\ltj@@q@escape}{}{%else
-    \ltj@@scan@number\ltj@@grab@numB#1
-  }
-}
-\def\ltj@@grab@numB#1{
-  \ltj@ifx{#1\ltj@@q@escape}{
-    {0}
-  }{
-    \ltj@@grab@numC
-  }
-}
-\def\ltj@@grab@numC#1\ltj@@q@escapenum{
-  {#1}
+  \directlua{tex.sprint('{' .. token.scan_int() .. '}')}
 }
 
 %%------------------ Safe passing
   }
 }
 
-%% \ltj@safe@glue{<glue>}
-%! グルー値.
-% For a glue. The result is a gluespec object.
-\def\ltj@safe@glue{
-  \ltj@safe@glue@or\ltj@safe@invalid
-}
-\def\ltj@safe@glue@or#1#2{
-  \expandafter\expandafter\expandafter\ltj@@safe@glueA
-   \ltj@gobble@glue#2\ltj@@safe@end{#2}{#1}
-}
-\def\ltj@@safe@glueA#1\ltj@@safe@end#2#3{
-  \ltj@if@blank{#1}{
-    (luatexja.base.to_skip("\the\glueexpr#2\relax"))
-  }{
-    #3
-  }
-}
-
-%% \ltj@safe@real{<real>}
-%! 実数. これは十進表記に限る.
-% For a real number given in decimal notation or a macro that
-% expands to such notation.
-\def\ltj@safe@real#1{
-  (tonumber("\luatexluaescapestring{#1}"))
-}
-
-%% \ltj@val@counter{<counter>}
-%! LaTeX カウンタの現在値.
-% For the current value of a LaTeX counter.
-\def\ltj@val@counter#1{
-  (\expandafter\number\csname c@#1\endcsname)
-}
-
-%% \ltj@val@skip{<skip>}
-% For the current value of a skip (or LaTeX-length) parameter.
-%! グルーレジスタ(LaTeX 長さ変数).
-%! 整形式のグルー値にも使える.
-\def\ltj@val@skip#1{
-  (luatexja.base.to_skip("\the\glueexpr#1\relax"))
-}
 %! 整形式の整数 → 数値 : \number#1
 %! 内部寸法 → 数値 : \number#1
 %! 整形式の寸法 → 数値 : \number\dimexpr#1\relax
   "\luatexluaescapestring{\detokenize{#1}}"
 }
 
-%% \ltj@luaescape{<text>}
-%! 非トークン化して Lua エスケープ.
-\def\ltj@luaescape#1{
-  \luatexluaescapestring{\detokenize{#1}}
-}
-%% \ltj@luaxescape{<text>}
-%! 非トークン化せずに(展開ありで) Lua エスケープ.
-%! つまり単なる \luatexescape.
-\let\ltj@luaxescape\luatexluaescapestring
-
-%%------------------ Fully-expandable error messaging
-
-%! ixerrtrick パッケージから移植.
-%! 展開限定文脈でも使える \PackageError 等.
-%! Lua 関数版(luatexja/base.lua 参照)もある.
-
-%% \ltj@@error@message@a
-\begingroup
-\def~{ }
-\xdef\ltj@@error@message@a{%
-  Type~~H <return>~~for immediate help%
-}%
-\endgroup
-
-%%<+> \ltj@MessageBreak
-% An analogue of \MessageBreak that is used in \ltj@GenericError, etc.
-% (\MessageBreak cannot be used there.)
-% NB: It is realized as a macro that expands to two instances
-% of the character of code 127. This marker is later detected
-% by the Lua process.
-\begingroup
-\lccode42=127
-\lowercase{
-  \gdef\ltj@MessageBreak{**}
-  \directlua{
-    luatexja.base._error_set_break("**")
-  }
-}
-\endgroup
-
-%%<+> \ltj@GenericError{<cont>}{<msg-main>}{<msg-ref>}{<msg-help>}
-% A variant of \GenericError that can be used in expansion-only
-% situation. The meanings of arguments are the same as the original
-% \GenericError.
-%%<+> \ltj@PlainError{<msg-main>}{<msg-help>}
-% A simpler error messenger available in expansion-only situations.
-% It behaves similarly to:
-%   \errhelp{<msg-help}\errmessage{<msg-main>}
-\begingroup
-% with the same hack as in \GenericError...
-\lccode`\@=`\ %
-\lccode`\~=`\ %
-\lccode`\}=`\ %
-\lccode`\{=`\ %
-\catcode`\ =11\relax%
-\lowercase{%
-\endgroup%
-\def\ltj@GenericError#1#2#3#4{% not protected
-\directlua{%
-luatexja.base._error_set_message("\ltj@luaxescape{#1}",%
-"\ltj@luaxescape{#2.^^J^^J#3^^J\ltj@@error@message@a}",%
-"\ltj@luaxescape{#4}")%
-}%
-\    % use csname with four spaces as last expander
-}
-\def\    {% csname with four spaces
-\directlua{%
-luatexja.base._error_show(false)% and many spaces trail!
-                                        %
-                                        %
-}%
-}%
-\def\ltj@PlainError#1#2{%
-\directlua{%
-luatexja.base._error_set_message("  ",%
-"\ltj@luaxescape{#1}",%
-"\ltj@luaxescape{#2}")%
-}%
-\error  % again a weird name is used
-}
-\def\error  {% csname with two trailing spaces
-\directlua{%
-luatexja.base._error_show(true)% and many spaces trail!
-                                        %
-                                        %
-}%
-}%
-}
-
-%% \ltj@@error@on@line
-\def\ltj@@error@on@line{
-  on input line \the \inputlineno
-}
-
-%% \ltj@generic@warn@info
-\def\ltj@@generic@warn@info#1#2#3#4{
-  \begingroup
-    \directlua{
-      luatexja.base._generic_warn_info("\ltj@luaxescape{#3}",
-        "\ltj@luaxescape{#4}", (#1 > 0), (#2 > 0))
-    }
-  \endgroup
-}
-
-%% \ltj@GenericWarning{<cont>}{<msg-main>}
-\def\ltj@GenericWarning{
-  \ltj@@generic@warn@info{1}{1}
-}
-%% \ltj@GenericWarningNoLine{<cont>}{<msg-main>}
-\def\ltj@GenericWarningNoLine{
-  \ltj@@generic@warn@info{1}{0}
-}
-%% \ltj@GenericInfo{<cont>}{<msg-main>}
-\def\ltj@GenericInfo{
-  \ltj@@generic@warn@info{0}{1}
-}
-%% \ltj@GenericInfoNoLine{<cont>}{<msg-main>}
-\def\ltj@GenericInfoNoLine{
-  \ltj@@generic@warn@info{0}{0}
-}
-
-%% \ltj@@space@seq@a
-\begingroup
-\def~{ }
-\xdef\ltj@@space@seq@a{~~~~~~~~~~~~~~~~}
-\xdef\ltj@@space@seq@b{~~~~~~~~~~~~~}
-\endgroup
-
-%% \ltj@PackageError{<pkg-name>}{<msg-main>}{<msg-help>}
-\def\ltj@PackageError#1#2#3{%
-  \ltj@GenericError{(#1)\ltj@@space@seq@a}%
-   {Package #1 Error: #2}%
-   {See the #1 package documentation for explanation.}%
-   {#3}%
-}
-%% \ltj@PackageWarning{<pkg-name>}{<msg-main>}
-\def\ltj@PackageWarning#1#2{%
-  \ltj@GenericWarning{(#1)\ltj@@space@seq@a}%
-   {Package #1 Warning: #2}%
-}
-%% \ltj@PackageWarningNoLine{<pkg-name>}{<msg-main>}
-\def\ltj@PackageWarningNoLine#1#2{%
-  \ltj@GenericWarningNoLine{(#1)\ltj@@space@seq@a}%
-   {Package #1 Warning: #2}%
-}
-%% \ltj@PackageInfo{<pkg-name>}{<msg-main>}
-\def\ltj@PackageInfo#1#2{%
-  \ltj@GenericInfo{(#1)\ltj@@space@seq@b}%
-   {Package #1 Info: #2}%
-}
-%% \ltj@PackageInfoNoLine{<pkg-name>}{<msg-main>}
-\def\ltj@PackageInfoNoLine#1#2{%
-  \ltj@GenericInfoNoLine{(#1)\ltj@@space@seq@b}%
-   {Package #1 Info: #2}%
-}
-
 %%------------------ debug logging
 \ifdefined\LuaTeXjaDebugEnabled
 
@@ -514,29 +226,15 @@ luatexja.base._error_show(true)% and many spaces trail!
 
 %% \ltj@afterbox <token><box>
 %% -> \setbox\ltj@afbox<box><token>
-%% from Sonja Maus, ``Looking Ahead for a <box>'',
-%%      TUGBoat, 11, No. 4, 1990.
+%% idea from the atbegshi package
 \newbox\ltj@afbox
+\directlua{luatexja.afbox_number=\the\ltj@afbox}
 \protected\def\ltj@afterbox#1{%
-  \def\ltj@afb@xarg{#1}%
-  \afterassignment\ltj@afb@x
-  \chardef\next`.}
-\def\ltj@afb@x{\futurelet\next\ltj@afb@xtest}
-\def\ltj@afb@xtest{%
-  \ifcase\ifx\next\hbox\tw@\fi
-         \ifx\next\vbox\tw@\fi
-         \ifx\next\vtop\tw@\fi
-         \ifx\next\box\@ne\fi
-         \ifx\next\copy\@ne\fi
-         \ifx\next\vsplit\@ne\fi
-         \ifx\next\lastbox\@ne\fi
-         0% ``A <box> was ...'' error will be causes by \setbox later anyway.
-  \or\afterassignment\ltj@afb@xarg
-  \or\afterassignment\ltj@afb@xagarg
-  \fi
-  \setbox\ltj@afbox
+  \def\ltj@afbox@@arg{#1}\edef\ltj@afbox@@grouplevel{\number\currentgrouplevel}%
+  \afterassignment\ltj@afbox@@\setbox\ltj@afbox}
+\def\ltj@afbox@@{%
+  \ifnum\ltj@afbox@@grouplevel<\currentgrouplevel\expandafter\aftergroup\fi\ltj@afbox@@arg
 }
-\def\ltj@afb@xagarg{\aftergroup\ltj@afb@xarg}
 
 
 %%------------------ all done