\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}[2016/05/15]
\fi
% enable/disable ``advanced'' line adjustment
-\protected\def\ltjdisableadjust{\directlua{luatexja.adjust.disable_cb()}}
-\protected\def\ltjenableadjust{\directlua{luatexja.adjust.enable_cb()}}
+% 1: lineend (aw_step1)
+% 2: priority (aw_step2)
+% 3: all
+
+\newcount\ltjadj@status
+\define@key[ltj]{adjust}{all}[]{\ltjadj@status=3 }
+\define@boolkey[ltj]{adjust}{lineend}[true]{%
+ \ifltj@adjust@lineend
+ \ifodd\ltjadj@status\else\advance\ltjadj@status\@ne\fi
+ \else
+ \ifodd\ltjadj@status\advance\ltjadj@status\m@ne\fi
+ \fi\relax}
+\define@boolkey[ltj]{adjust}{priority}[true]{%
+ \ifltj@adjust@priority
+ \ifnum\ltjadj@status>1\else\advance\ltjadj@status2\fi
+ \else
+ \ifnum\ltjadj@status>1\advance\ltjadj@status-2\fi
+ \fi\relax}
+\protected\def\@@ltjenableadjust[#1]{%
+ \setkeys[ltj]{adjust}{#1}%
+ \directlua{luatexja.adjust.enable_cb(\the\ltjadj@status)}\ignorespaces
+}
+\protected\def\ltjdisableadjust{\ltjenableadjust*[]}
+\protected\def\ltjenableadjust{%
+ \ltx@ifnextchar*{\ltjadj@status\z@\ltx@firstoftwo{\@ltjenableadjust}}{\@ltjenableadjust}}
+\protected\def\@ltjenableadjust{%
+ \ltx@ifnextchar[{\@@ltjenableadjust}{\@@ltjenableadjust[all]}}%]
+
\ltjenableadjust
% there is also a key for \ltjsetparameter, for same effect
\define@boolkey[ltj]{japaram}{adjust}[true]{%
- \ifltj@japaram@adjust\ltjenableadjust\else\ltjdisableadjust\fi
+ \ifltj@japaram@adjust\ltjenableadjust\else\ltjdisableadjust\fi\relax
}
end
-- step 2: 行中の glue を変える
+local function aw_step2_dummy(p, _, added_flag)
+ if added_flag then -- 行末に kern 追加したので,それによる補正
+ local f = node_hpack(getlist(p), getfield(p, 'width'), 'exactly')
+ setfield(f, 'head', nil)
+ setfield(p, 'glue_set', getfield(f, 'glue_set'))
+ setfield(p, 'glue_order', getfield(f, 'glue_order'))
+ setfield(p, 'glue_sign', getfield(f, 'glue_sign'))
+ node_free(f)
+ return
+ end
+end
local function aw_step2(p, total, added_flag)
local name = (total>0) and 'stretch' or 'shrink'
local res = total_stsh[(total>0) and 1 or 2]
end
-local ltjs_fast_get_stack_skip = ltjs.fast_get_stack_skip
-local function adjust_width(head)
- if not head then return head end
- local line = 1
- for p in node_traverse_id(id_hlist, to_direct(head)) do
- line = line + 1
- aw_step2(p, aw_step1(p, get_total_stretched(p, line)))
- end
- return to_node(head)
-end
-
do
- luatexja.adjust = luatexja.adjust or {}
+ local myaw_atep1, myaw_step2
+ local dummy = function(p,t,n) return t, false end
+ local ltjs_fast_get_stack_skip = ltjs.fast_get_stack_skip
+ local function adjust_width(head)
+ if not head then return head end
+ local line = 1
+ for p in node_traverse_id(id_hlist, to_direct(head)) do
+ line = line + 1
+ myaw_step2(p, myaw_step1(p, get_total_stretched(p, line)))
+ end
+ return to_node(head)
+ end
local is_reg = false
- function luatexja.adjust.enable_cb()
- if not is_reg then
+ function enable_cb(status)
+ if status>0 and (not is_reg) then
luatexbase.add_to_callback('post_linebreak_filter',
adjust_width, 'Adjust width', 100)
is_reg = true
- end
- end
- function luatexja.adjust.disable_cb()
- if is_reg then
+ elseif is_reg and status==0 then
luatexbase.remove_from_callback('post_linebreak_filter', 'Adjust width')
is_reg = false
end
+ myaw_step1 = (status%2>0) and aw_step1 or dummy
+ myaw_step2 = (status>=2) and aw_step2 or aw_step2_dummy
+ end
+ function disable_cb() -- only for compatibility
+ enable_cs(0)
end
+ luatexja.adjust = luatexja.adjust or {enable_cb=enable_cb, disable_cb=disable_cb}
end
luatexja.unary_pars.adjust = function(t)