\expandafter\let\csname ifltj@in@latex\expandafter\endcsname
\csname iftrue\endcsname
\NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{luatexja-core}[2021-05-11 Core of LuaTeX-ja]
+ \ProvidesPackage{luatexja-core}[2022-08-18 Core of LuaTeX-ja]
\fi %</LaTeX>
%% Load prerequisite packages.
\expandafter\endinput\fi\relax
%% Check LuaTeX version.
-\ifnum\luatexversion<100
+\ifnum\luatexversion<110
\@PackageError{luatexja-core}
{This LuaTeX engine is too old for this package;\MessageBreak
- at least 1.0.0 is needed}
+ at least 1.10.0 is needed}
{Package loading is aborted now.\MessageBreak}
\expandafter\endinput\fi\relax
\newdimen\ltj@dimen@jQ \ltj@dimen@jQ=0.25mm
\let\jQ=\ltj@dimen@jQ \let\jH=\jQ
-%%%%%%%% error message
-\def\ltj@defnum{0}
-\def\ltj@defdimen{0}
-
%%%%%%%% Attributes for Japanese typesetting.
\newattribute\ltj@icflag % attribute for italic correction
\newattribute\ltj@curjfnt % index for ``current horizontal Japanese font''
\newlanguage\ltj@@japanese
\ltj@dir\z@
\ltj@icflag\z@
-\ltj@charclass\z@
\ltj@curjfnt\m@ne
\ltj@curtfnt\m@ne
-\ltj@yablshift\z@
-\ltj@ykblshift\z@
-\ltj@tablshift\z@
-\ltj@tkblshift\z@
%%%%%%%% Attributes for character ranges
\newcount\ltj@tempcnta
\loop\ifnum\ltj@tempcnta<7
\expandafter\newattribute%
\csname ltj@kcat\the\ltj@tempcnta\endcsname
- \csname ltj@kcat\the\ltj@tempcnta\endcsname=0
+ \csname ltj@kcat\the\ltj@tempcnta\endcsname=\z@
\advance\ltj@tempcnta\@ne
\repeat
end
}
\begingroup\catcode`\/=11
+\global\let\ltj@@orig@/=\/
\protected\gdef\ltj@@/{\relax\luafunction\ltj@@italic@inner}
\global\let\/\ltj@@/ %% PRIMITIVE
\endgroup
% {y,t}{ja,al}baselineshift = <dimen>
% yjabaselineshift = <dimen>
-\define@key[ltj]{japaram}{yalbaselineshift}{%
- \directlua{tex.setattribute(luatexja.isglobal,
- luatexbase.attributes['ltj@yablshift'], token.scan_dimen())}#1\relax}
-\define@key[ltj]{japaram}{yjabaselineshift}{%
- \directlua{tex.setattribute(luatexja.isglobal,
- luatexbase.attributes['ltj@ykblshift'], token.scan_dimen())}#1\relax}
-\define@key[ltj]{japaram}{talbaselineshift}{%
- \directlua{tex.setattribute(luatexja.isglobal,
- luatexbase.attributes['ltj@tablshift'], token.scan_dimen())}#1\relax}
-\define@key[ltj]{japaram}{tjabaselineshift}{%
- \directlua{tex.setattribute(luatexja.isglobal,
- luatexbase.attributes['ltj@tkblshift'], token.scan_dimen())}#1\relax}
+\def\ltj@set@blshift@#1{\directlua{%
+ local n = token.scan_dimen()
+ tex.setattribute(luatexja.isglobal,
+ luatexbase.attributes['#1'], (n==0) and -0x7FFFFFFF or n)%
+}}
+\define@key[ltj]{japaram}{yalbaselineshift}{\ltj@set@blshift@{ltj@yablshift}#1\relax}
+\define@key[ltj]{japaram}{yjabaselineshift}{\ltj@set@blshift@{ltj@ykblshift}#1\relax}
+\define@key[ltj]{japaram}{talbaselineshift}{\ltj@set@blshift@{ltj@tablshift}#1\relax}
+\define@key[ltj]{japaram}{tjabaselineshift}{\ltj@set@blshift@{ltj@tkblshift}#1\relax}
% jaxspmode = {<char_code>, <mode>}
% mode: inhibit, preonly, postonly, allow
% autospacing = <bool> (default: true)
\define@boolkey[ltj]{japaram}{autospacing}[true]{%
\ifltj@japaram@autospacing
- \directlua{luatexja.ext_print_global()}\ltj@autospc\@ne
+ \directlua{luatexja.ext_print_global()}\unsetattribute\ltj@autospc
\else
\directlua{luatexja.ext_print_global()}\ltj@autospc\z@
\fi}
% autoxspacing = <bool> (default: true)
\define@boolkey[ltj]{japaram}{autoxspacing}[true]{%
\ifltj@japaram@autoxspacing
- \directlua{luatexja.ext_print_global()}\ltj@autoxspc\@ne
+ \directlua{luatexja.ext_print_global()}\unsetattribute\ltj@autoxspc
\else
\directlua{luatexja.ext_print_global()}\ltj@autoxspc\z@
\fi}
t[\the\ltj@alljachar@inner] = function()
font.current(get_attr(attr_curjfnt)); tex.language=lang_ja;
for i=0,6 do
- set_attr(luatexbase.attributes['ltj@kcat' .. floor(i)],0)
+ set_attr(luatexbase.attributes['ltj@kcat' .. floor(i)], 0)
end
end
}
%%%% vadjust
\let\ltj@@orig@vadjust\vadjust
-\protected\def\ltj@@vadjust{%
- \ltj@@orig@vadjust\bgroup
- \directlua{luatexja.direction.set_list_direction_hook('adj')}%
+\newluafunction\ltj@@vadjust@begin@inner
+\newluafunction\ltj@@vadjust@dirhook@inner
+\newluafunction\ltj@@vadjust@check@dir@inner
+\directlua{
+ local t = lua.get_functions_table()
+ t[\the\ltj@@vadjust@begin@inner] = luatexja.direction.adjust_begin
+ t[\the\ltj@@vadjust@dirhook@inner]
+ = function () luatexja.direction.set_list_direction_hook('adj') end
+ t[\the\ltj@@vadjust@check@dir@inner] = luatexja.direction.check_adjust_direction
+}
+\protected\luadef\ltj@@vadjust\ltj@@vadjust@begin@inner
+\luadef\ltj@@vadjust@dirhook\ltj@@vadjust@dirhook@inner
+\protected\luadef\ltj@@vadjust@check@dir\ltj@@vadjust@check@dir@inner
+\def\ltj@@vadjust@pre{\ltj@@orig@vadjust pre\bgroup\ltj@@vadjust@dirhook
+ \aftergroup\ltj@@vadjust@check@dir\let\ltj@@next}
+\def\ltj@@vadjust@post{\ltj@@orig@vadjust\bgroup\ltj@@vadjust@dirhook
\aftergroup\ltj@@vadjust@check@dir\let\ltj@@next}
\let\vadjust\ltj@@vadjust %% PRIMITIVE
-\protected\def\ltj@@vadjust@check@dir{%
- \directlua{luatexja.direction.check_adjust_direction()}%
-}
%%%% \hbox, \vbox, \vtop
\setbox\z@\hbox{%
\protected\def\ltj@@unvbox@{\ltj@@lua@unboxcheckdir\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{\ltj@reset@globaldefs\afterassignment\ltj@@unhcopy@\ltj@tempcnta}
+\protected\def\ltj@@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