OSDN Git Service

target release date: 2022-02-11
[luatex-ja/luatexja.git] / src / addons / luatexja-adjust.sty
index b25e706..ab0c580 100644 (file)
   \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
     \csname iftrue\endcsname
   \NeedsTeXFormat{LaTeX2e}
-  \ProvidesPackage{luatexja-adjust}[2013/05/14]
+  \ProvidesPackage{luatexja-adjust}[2022-02-11]
 \fi                             %</LaTeX>
 
 % Load core module if not yet.
+% xkeyval.sty is already required in luatexja.sty.
 \ifx\luatexjacoreLoaded\@undefined
   \ifltj@in@latex                 %<*LaTeX>
-    \RequirePackage{luatexja}[2013/05/14]
+    \RequirePackage{luatexja}
   \else                           %<*!LaTeX>
     \input luatexja.sty %
   \fi                             %</LaTeX>
 %! Main part of luatexja-adjust
 \RequireLuaTeXjaSubmodule{adjust}
 
-% enable/disable ``advanced'' line adjustment
-\protected\def\ltjdisableadjust{\directlua{luatexja.adjust.disable_cb()}}
-\protected\def\ltjenableadjust{\directlua{luatexja.adjust.enable_cb()}}
+\newcount\ltjadj@status@le
+\newcount\ltjadj@status@lp
+\newcount\ltjadj@status@pr
+\newcount\ltjadj@status@ls
+\let\ltj@adjust@temp=\relax
+\define@choicekey[ltj]{adjust}{lineend}[\@@temp\ltj@adjust@temp]%
+{false,true,extended}[true]{%
+  \ifnum\ltj@adjust@temp=-1 \else\ltjadj@status@le=\ltj@adjust@temp\fi\relax}
+\define@boolkey[ltj]{adjust}{priority}[true]{%
+  \ltjadj@status@pr=\ifltj@adjust@priority1\else0\fi\relax}
+\define@boolkey[ltj]{adjust}{profile}[true]{%
+  \ltjadj@status@lp=\ifltj@adjust@profile1\else0\fi\relax}
+\define@boolkey[ltj]{adjust}{linestep}[true]{%
+  \ltjadj@status@ls=\ifltj@adjust@linestep1\else0\fi\relax}
+
+\protected\def\@@ltjenableadjust[#1]{%
+   \setkeys[ltj]{adjust}{#1}%
+   \directlua{luatexja.adjust.enable_cb(
+    \the\ltjadj@status@le, \the\ltjadj@status@pr,
+    \the\ltjadj@status@lp, \the\ltjadj@status@ls)}\ignorespaces
+}
+\protected\def\ltjdisableadjust{%
+  \ltjenableadjust[lineend=false,priority=false,profile=false,linestep=false]}%
+\protected\def\ltjenableadjust{%
+   \ltx@ifnextchar[{\@@ltjenableadjust}{\@@ltjenableadjust[lineend,priority]}}%]
+
 \ltjenableadjust
-% there is also a key for \ltjsetparameter, for same effect
-\define@boolkey[ltj]{japaram}{adjust}[true]{%
-  \ifltj@japaram@adjust\ltjenableadjust\else\ltjdisableadjust\fi
+
+%%% 優先順位の設定
+\define@key[ltj]{adjpri}{kanjiskip}{%
+  \directlua{luatexja.adjust.priority_table[\the\count@][1] = token.scan_int()}#1\relax}
+\define@key[ltj]{adjpri}{xkanjiskip}{%
+  \directlua{luatexja.adjust.priority_table[\the\count@][2] = token.scan_int()}#1\relax}
+\define@key[ltj]{adjpri}{others}{%
+  \directlua{luatexja.adjust.priority_table[\the\count@][3] = token.scan_int()}#1\relax}
+\define@key[ltj]{japaram}{stretch_priority}{%
+  \begingroup\count@=1 \setkeys[ltj]{adjpri}{#1}\relax
+  \directlua{luatexja.adjust.make_priority_table(1)}\endgroup}
+\define@key[ltj]{japaram}{shrink_priority}{%
+  \begingroup\count@=2 \setkeys[ltj]{adjpri}{#1}\relax
+  \directlua{luatexja.adjust.make_priority_table(2)}\endgroup}
+\ltjsetparameter{%
+  stretch_priority={kanjiskip=-35, xkanjiskip=-25, others=50},
+   shrink_priority={kanjiskip=-35, xkanjiskip=-25, others=50},
 }
+\define@key[ltj]{japaram}{linestep_factor}{%
+  \directlua{local d = #1; luatexja.adjust.step_factor=math.abs(d)}\relax}
+\define@key[ltj]{japaram}{profile_hgap_factor}{%
+  \directlua{luatexja.adjust.profile_hgap_factor = math.abs(#1)}\relax}
+
+\newluafunction\ltj@@ghost@jachar@inner@both
+\newluafunction\ltj@@ghost@jachar@inner@before
+\newluafunction\ltj@@ghost@jachar@inner@after
+\directlua{
+  local t = lua.get_functions_table(); local cgj = luatexja.adjust.create_ghost_jachar_node;
+  t[\the\ltj@@ghost@jachar@inner@both] = function() cgj(0) end;
+  t[\the\ltj@@ghost@jachar@inner@before] = function() cgj(1) end;
+  t[\the\ltj@@ghost@jachar@inner@after] = function() cgj(2) end
+}%
+\protected\def\ltjghostjachar{\ifhmode\relax\luafunction\ltj@@ghost@jachar@inner@both\fi}% will be removed
+\protected\def\ltjghostbeforejachar{\ifhmode\relax\luafunction\ltj@@ghost@jachar@inner@before\fi}
+\protected\def\ltjghostafterjachar{\ifhmode\relax\luafunction\ltj@@ghost@jachar@inner@after\fi}
 
 
 %%------------------ all done