summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/luatexja/src
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/luatex/generic/luatexja/src
Initial commit
Diffstat (limited to 'macros/luatex/generic/luatexja/src')
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-adjust.sty144
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty844
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-25c.sty357
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-26h.sty412
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty406
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty60
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-otf.sty205
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty706
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty210
-rw-r--r--macros/luatex/generic/luatexja/src/addons/luatexja-zhfonts.sty77
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-CCT.lua84
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-banjiao.lua98
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-jis.lua92
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-kaiming.lua98
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-min.lua261
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-mono.lua9
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-prop.lua9
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-propv.lua9
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-quanjiao.lua98
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-tmin.lua189
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-ujis.lua304
-rw-r--r--macros/luatex/generic/luatexja/src/jfm-ujisv.lua307
-rw-r--r--macros/luatex/generic/luatexja/src/lltjext.sty758
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-adjust.lua551
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-base.lua403
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-base.sty472
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-charrange.lua112
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-compat.lua140
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-debug.lua187
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-direction.lua1147
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-inputbuf.lua53
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua23096
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-jfmglue.lua1375
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-jfont.lua1028
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-jisx0208.lua6883
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-kinsoku_make.tex456
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-latex.sty91
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-lineskip.lua116
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-math.lua181
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-otf.lua296
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-plain.sty110
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-pretreat.lua188
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua416
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-ruby.lua782
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-setwidth.lua311
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-stack.lua143
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-unicode-ccfix.lua276
-rw-r--r--macros/luatex/generic/luatexja/src/ltjclasses.dtx4676
-rw-r--r--macros/luatex/generic/luatexja/src/ltjclasses.ins28
-rw-r--r--macros/luatex/generic/luatexja/src/ltjltxdoc.dtx218
-rw-r--r--macros/luatex/generic/luatexja/src/ltjltxdoc.ins10
-rw-r--r--macros/luatex/generic/luatexja/src/ltjsclasses.dtx5709
-rw-r--r--macros/luatex/generic/luatexja/src/ltjsclasses.ins13
-rw-r--r--macros/luatex/generic/luatexja/src/luatexja-compat.sty140
-rw-r--r--macros/luatex/generic/luatexja/src/luatexja-core.sty742
-rw-r--r--macros/luatex/generic/luatexja/src/luatexja.lua601
-rw-r--r--macros/luatex/generic/luatexja/src/luatexja.sty61
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjcore.sty339
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjdefs.sty230
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjfont.sty874
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-array.sty26
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty155
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty58
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty513
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-listings.sty440
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-microtype.sty67
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-preview.sty22
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty96
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-stfloats.sty27
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-tascmac.sty142
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty87
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjp-xunicode.sty99
72 files changed, 59923 insertions, 0 deletions
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-adjust.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-adjust.sty
new file mode 100644
index 0000000000..c4cc54c2f9
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-adjust.sty
@@ -0,0 +1,144 @@
+%
+% luatexja-adjust.sty
+%
+
+%% Avoid multiple loading.
+\csname\if11luatexjaadjustLoaded\fi\endcsname
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode33=\the\catcode33%
+\catcode35=\the\catcode35%
+\catcode40=\the\catcode40%
+\catcode41=\the\catcode41%
+\catcode42=\the\catcode42%
+\catcode43=\the\catcode43%
+\catcode44=\the\catcode44%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode58=\the\catcode58%
+\catcode59=\the\catcode59%
+\catcode60=\the\catcode60%
+\catcode61=\the\catcode61%
+\catcode62=\the\catcode62%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\catcode94=\the\catcode94%
+\catcode95=\the\catcode95%
+\catcode126=\the\catcode126%
+\endlinechar=\the\endlinechar
+\relax}
+\catcode32=10 %< >
+\catcode33=12 %<">
+\catcode35=6 %<#>
+\catcode40=12 %<(>
+\catcode41=12 %<)>
+\catcode42=12 %<*>
+\catcode43=12 %<+>
+\catcode44=12 %<,>
+\catcode45=12 %<->
+\catcode46=12 %<.>
+\catcode58=12 %<:>
+\catcode59=12 %<;>
+\catcode60=12 %<<>
+\catcode61=12 %<=>
+\catcode62=12 %<>>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\catcode94=7 %<^>
+\catcode95=8 %<_>
+\catcode126=13 %<~>
+\endlinechar=-1 %
+
+\edef\ltj@adjust@AtEnd{\x
+ \noexpand\let\noexpand\ltj@adjust@AtEnd\relax}
+\def\luatexjaadjustLoaded{\endinput}
+
+%% Check if LaTeX is used.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax %<*!LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iffalse\endcsname
+\else %<*LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iftrue\endcsname
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{luatexja-adjust}[2018/07/24]
+\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}
+ \else %<*!LaTeX>
+ \input luatexja.sty %
+ \fi %</LaTeX>
+\fi
+
+%% When environment check fails, exit now.
+\ifx\LuaTeXjaAvailable\@undefined
+ \ltj@otf@AtEnd
+\expandafter\endinput\fi\relax
+
+%%------------------
+
+%! Main part of luatexja-adjust
+\RequireLuaTeXjaSubmodule{adjust}
+
+\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
+
+%%% 優先順位の設定
+\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}
+
+
+%%------------------ all done
+\ltj@adjust@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty
new file mode 100644
index 0000000000..ca187cc900
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-ajmacros.sty
@@ -0,0 +1,844 @@
+%
+% luatexja-ajmacros.sty
+%
+% Original:
+% \ProvidesPackage{ajmacros}[2019/04/01 21:00 iNOUE Koich! <inoue@ma.ns.musashi-tech.ac.jp>]
+%
+
+
+%% Avoid multiple loading.
+\csname\if11luatexjaajmacrosLoaded\fi\endcsname
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode33=\the\catcode33%
+\catcode35=\the\catcode35%
+\catcode40=\the\catcode40%
+\catcode41=\the\catcode41%
+\catcode42=\the\catcode42%
+\catcode43=\the\catcode43%
+\catcode44=\the\catcode44%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode58=\the\catcode58%
+\catcode59=\the\catcode59%
+\catcode60=\the\catcode60%
+\catcode61=\the\catcode61%
+\catcode62=\the\catcode62%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\catcode94=\the\catcode94%
+\catcode95=\the\catcode95%
+\catcode126=\the\catcode126%
+\endlinechar=\the\endlinechar
+\relax}
+\catcode32=10 %< >
+\catcode33=12 %<">
+\catcode35=6 %<#>
+\catcode40=12 %<(>
+\catcode41=12 %<)>
+\catcode42=12 %<*>
+\catcode43=12 %<+>
+\catcode44=12 %<,>
+\catcode45=12 %<->
+\catcode46=12 %<.>
+\catcode58=12 %<:>
+\catcode59=12 %<;>
+\catcode60=12 %<<>
+\catcode61=12 %<=>
+\catcode62=12 %<>>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\catcode94=7 %<^>
+\catcode95=8 %<_>
+\catcode126=13 %<~>
+\endlinechar=-1 %
+
+\edef\ltj@ajmacros@AtEnd{\x
+ \noexpand\let\noexpand\ltj@ajmacros@AtEnd\relax}
+\def\luatexjaajmacrosLoaded{\endinput}
+
+%% Check if LaTeX is used.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax %<*!LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iffalse\endcsname
+\else %<*LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iftrue\endcsname
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{luatexja-ajmacros}[2017/05/05]
+\fi %</LaTeX>
+
+%%------------------
+%! Main part of luatexja-ajmacros
+\newif\if@kana\@kanafalse
+%% for plain TeX
+\newcount\@tempcnta
+\newcount\@tempcntb
+\ifltj@in@latex\else
+ \def\@tw{\char"2}
+ \def\@ifstar#1#2#3{\ifx*#3\expandafter#1\else#2{#3}\fi}
+ \long\def\@gobble#1{}
+\fi
+
+{%
+\gdef\shift@CID#1#2{{\@tempcnta#1\advance\@tempcnta#2\CID{\@tempcnta}}}
+\gdef\ajTsumesuji{\@ifstar{\@@ajTsumesuji}{\@ajTsumesuji}}
+\global\let\ajTumesuji\ajTsumesuji
+\gdef\@ajTsumesuji#1#2{{\@tempcnta\unless\ifnum\ltjgetparameter{direction}=3 \ifcase#1\or780\or247\or9758\or9738\fi
+ \else\ifcase#1\or8736\or8966\or13274\or13254\fi\fi
+ \aj@expand\aj@Tsumesuji#2\@nil}}
+\gdef\@@ajTsumesuji#1{\@ajTsumesuji{\aj@expand\aj@count@toks#14321\@nil}{#1}}
+\gdef\aj@expand#1#2{\expandafter\@aj@expand\number#2!#1}
+\gdef\@aj@expand#1!#2{#2#1}
+\gdef\aj@count@toks#1#2#3#4#5#6\@nil{#5}
+\gdef\aj@Tsumesuji#1{\ifx\@nil#1\else\shift@CID{\@tempcnta}{#1}%
+ \expandafter\aj@Tsumesuji
+ \fi}
+\gdef\ajMaru{\@ifstar{\@aj@Maru}{\aj@Maru}}
+\gdef\aj@Maru#1{\ifnum#1=\z@ \CID{8224}%
+ \else\ifnum#1<21 \shift@CID{#1}{7554}%
+ \else\ifnum#1=21 \CID{8091}%
+ \else\ifnum#1<32 \shift@CID{#1}{8080}%
+ \else\shift@CID{#1}{10212}%
+ \fi\fi\fi\fi}
+\gdef\@aj@Maru#1{\ifnum#1<10 \shift@CID{#1}{10234}%
+ \else\ifnum#1<21 \shift@CID{#1}{7554}%
+ \else\ifnum#1=21 \CID{8091}%
+ \else\ifnum#1<32 \shift@CID{#1}{8080}%
+ \else\shift@CID{#1}{10212}%
+ \fi\fi\fi\fi}
+\gdef\ajKuroMaru{\@ifstar{\@aj@KuroMaru}{\aj@KuroMaru}}
+\gdef\aj@KuroMaru#1{\ifnum#1=\z@ \CID{10503}%
+ \else\ifnum#1<10 \shift@CID{#1}{8285}%
+ \else\shift@CID{#1}{10504}%
+ \fi\fi}
+\gdef\@aj@KuroMaru#1{\shift@CID{#1}{10504}}
+\gdef\ajKaku{\@ifstar{\@aj@Kaku}{\aj@Kaku}}
+\gdef\aj@Kaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{10764}}%
+ \else\shift@CID{#1}{10774}%
+ \fi}
+\gdef\@aj@Kaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{10765}}%
+ \else\shift@CID{#1}{10774}%
+ \fi}
+\gdef\ajKuroKaku{\@ifstar{\@aj@KuroKaku}{\aj@KuroKaku}}
+\gdef\aj@KuroKaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{11037}}%
+ \else\shift@CID{#1}{11047}%
+ \fi}
+\gdef\@aj@KuroKaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{11038}}%
+ \else\shift@CID{#1}{11047}%
+ \fi}
+\gdef\ajMaruKaku{\@ifstar{\@aj@MaruKaku}{\aj@MaruKaku}}
+\gdef\aj@MaruKaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{11307}}%
+ \else\shift@CID{#1}{11317}%
+ \fi}
+\gdef\@aj@MaruKaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{11308}}%
+ \else\shift@CID{#1}{11317}%
+ \fi}
+\gdef\ajKuroMaruKaku{\@ifstar{\@aj@KuroMaruKaku}{\aj@KuroMaruKaku}}
+\gdef\aj@KuroMaruKaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{11576}}%
+ \else\shift@CID{#1}{11586}%
+ \fi}
+\gdef\@aj@KuroMaruKaku#1{\ifnum#1<10{\@tempcnta#1\multiply\@tempcnta\tw@
+ \shift@CID{\@tempcnta}{11577}}%
+ \else\shift@CID{#1}{11586}%
+ \fi}
+\gdef\ajKakko{\@ifstar{\@aj@Kakko}{\aj@Kakko}}
+\gdef\aj@Kakko#1{\ifnum#1=\z@ \CID{8227}%
+ \else\ifnum#1<21 \shift@CID{#1}{8070}%
+ \else\shift@CID{#1}{9873}%
+ \fi\fi}
+\gdef\@aj@Kakko#1{\ifnum#1<10 \shift@CID{#1}{9884}%
+ \else\ifnum#1<21 \shift@CID{#1}{8070}%
+ \else\shift@CID{#1}{9873}%
+ \fi\fi}
+\gdef\ajRoman{\@ifstar{\@aj@Roman}{\aj@Roman}}
+\gdef\aj@Roman#1{\ifnum#1<11 \shift@CID{#1}{7574}%
+ \else\ifnum#1<13 \shift@CID{#1}{8214}%
+ \else\shift@CID{#1}{8282}%
+ \fi\fi}
+\gdef\@aj@Roman#1{\ifnum#1=4 \CID{9883}\else\aj@Roman{#1}\fi}
+\gdef\ajroman#1{\ifnum#1<11 \shift@CID{#1}{8091}%
+ \else\shift@CID{#1}{8287}%
+ \fi}
+\gdef\ajPeriod#1{\ifnum#1<10 \shift@CID{#1}{8061}\else\shift@CID{#1}{20577}\fi}%AJ1-6
+\gdef\ajKakkoalph#1{\shift@CID{#1}{8111}}
+\gdef\ajKakkoYobi#1{\shift@CID{#1}{8196}}
+\gdef\ajKakkoroman#1{\shift@CID{#1}{9973}}
+\gdef\ajKakkoRoman#1{\shift@CID{#1}{9988}}
+\gdef\ajKakkoAlph#1{\shift@CID{#1}{10003}}
+\gdef\ajKakkoHira#1{\shift@CID{#1}{10029}}
+\gdef\ajKakkoKata#1{\shift@CID{#1}{10077}}
+\gdef\ajKakkoKansuji#1{\shift@CID{#1}{10125}}
+\gdef\ajMaruKansuji#1{\shift@CID{#1}{10460}}
+\gdef\ajNijuMaru#1{\shift@CID{#1}{16222}}
+\gdef\ajRecycle#1{\shift@CID{#1}{16314}}
+\gdef\ajHasenKakuAlph#1{\shift@CID{#1}{20496}}%AJ1-6
+\gdef\ajCross#1{\shift@CID{#1}{20523}}%AJ1-6
+\gdef\ajSlanted{\@ifstar{\aj@Slanted}{\@aj@Slanted}}%AJ1-6
+\gdef\aj@Slanted#1{\shift@CID{#1}{20589}}%AJ1-6
+\gdef\@aj@Slanted#1{\ifnum#1<10 \shift@CID{#1}{9460}\else\shift@CID{#1}{20589}\fi}%AJ1-6
+\gdef\ajApostrophe#1{\shift@CID{#1}{20649}}%AJ1-6
+\global\let\ajYear\ajApostrophe%AJ1-6
+\gdef\ajSquareMark{\@ifstar{\aj@SquareMark}{\@ifnextchar+{\@aj@SquareMark}{\@ajSquareMark}}}
+\gdef\@ajSquareMark#1{\shift@CID{#1}{12229}}
+\gdef\aj@SquareMark#1{\shift@CID{#1}{12241}}
+\gdef\@aj@SquareMark+#1{\shift@CID{#1}{\ifodd\@tempcnta24459\else24482\fi
+ \divide\@tempcnta\tw@}}
+\gdef\ajHishi#1{\shift@CID{#1}{12256}}
+%
+\let\offsetalph\z@
+\chardef\offsetAlph26
+\chardef\offsetHira26
+\chardef\offsetKata48
+\chardef\offsetYobi48
+\let\offsetMaru\z@
+\chardef\offsetKuroMaru144
+\chardef\offsetKaku122
+\chardef\offsetKuroKaku125
+\chardef\offsetMaruKaku122
+\chardef\offsetKuroMaruKaku121
+\@tempcnta10312
+\def\@aj@sujidef#1{\ifx\@nil#1%
+ \else\advance\@tempcnta\csname offset#1\endcsname
+ \expandafter\xdef\csname aj\@ajsujifam#1\endcsname##1%
+ {\noexpand\shift@CID{##1}{\number\@tempcnta}}%
+ \expandafter\@aj@sujidef\fi}
+\def\@ajsujidef#1{\ifx\@nil#1%
+ \else\advance\@tempcnta\csname offset#1\endcsname
+ \def\@ajsujifam{#1}%
+ \@aj@sujidef{alph}{Alph}{Hira}{Kata}{Yobi}\@nil
+ \expandafter\@ajsujidef\fi}
+\@ajsujidef{Maru}{KuroMaru}{Kaku}{KuroKaku}{MaruKaku}{KuroMaruKaku}\@nil
+\gdef\ajMaruYobi#1{\ifnum#1<8 \shift@CID{#1}{10470}%
+ \else\ifnum#1=8 \CID{10492}%
+ \else\ifnum#1=9 \CID{10487}%
+ \fi\fi\fi}
+%
+\gdef\ajTsumekakko#1{\aj@expand\@ajTsumekakko#1\@nil}
+\global\let\ajTumekakko\ajTsumekakko
+\gdef\@ajTsumekakko#1#2{\ifx\@nil#2\mbox{\unless\ifnum\ltjgetparameter{direction}=3 \rlap{\CID{10233}}\shift@CID{#1}{9872}%
+ \else\CID{13268}\shift@CID{#1}{10185}\CID{13269}\fi}%
+ \expandafter\@gobble
+ \else\shift@CID{#1}{\unless\ifnum\ltjgetparameter{direction}=3 10152\else10174\fi}%
+ \expandafter\aj@Tsumekakko
+ \fi#2}
+\gdef\aj@Tsumekakko#1#2{\ifx\@nil#2\shift@CID{#1}{\unless\ifnum\ltjgetparameter{direction}=3 10162\else10196\fi}%
+ \expandafter\@gobble
+ \else\shift@CID{#1}{\unless\ifnum\ltjgetparameter{direction}=3 247\else10185\fi}%
+ \expandafter\aj@Tsumekakko
+ \fi#2}
+\gdef\ajNenrei#1{\ifcase#1\relax\expandafter\ajTsumekakko\or\expandafter\aj@NenreiTu
+ \or\expandafter\aj@NenreiSai\or\expandafter\aj@Nenrei@Tu
+ \or\expandafter\aj@Nenrei@Sai
+ \fi}
+\gdef\aj@NenreiTu#1{\aj@expand\@aj@NenreiTu#1\@nil}
+\gdef\@aj@NenreiTu#1#2{\shift@CID{#1}{\unless\ifnum\ltjgetparameter{direction}=3 10152\else10174\fi}%
+ \ifx\@nil#2\CID{\unless\ifnum\ltjgetparameter{direction}=3 10172\else10206\fi}\expandafter\@gobble
+ \else\expandafter\aj@Tsumekakko
+ \fi#2}
+\gdef\aj@NenreiSai#1{\aj@expand\@aj@NenreiSai#1\@nil}
+\gdef\@aj@NenreiSai#1{\shift@CID{#1}{\unless\ifnum\ltjgetparameter{direction}=3 10152\else10174\fi}\@aj@NenreiSai@}
+\gdef\@aj@NenreiSai@#1{\ifx\@nil#1\CID{\unless\ifnum\ltjgetparameter{direction}=3 10173\else10207\fi}%
+ \else\shift@CID{#1}{\unless\ifnum\ltjgetparameter{direction}=3 247\else10185\fi}%
+ \expandafter\@aj@NenreiSai@\fi}
+\gdef\aj@Nenrei@Tu#1{\ifnum#1<10 \shift@CID{#1}{10174}\CID{10206}%
+ \else\expandafter\@aj@Nenrei@Tu\number#1%
+ \fi}
+\gdef\@aj@Nenrei@Tu#1#2{\ifnum#2=\z@ \shift@CID{#1}{10174}\CID{10196}%
+ \else\ifnum#1<\tw@ \CID{10184}%
+ \else\shift@CID{#1}{10174}\CID{10195}%
+ \fi
+ \shift@CID{#2}{10196}%
+ \fi}
+\gdef\aj@Nenrei@Sai#1{\ifnum#1<10 \shift@CID{#1}{10174}%
+ \else\expandafter\@aj@Nenrei@Sai\number#1%
+ \fi\CID{10207}}
+\gdef\@aj@Nenrei@Sai#1#2{\ifnum#1<\tw@ \CID{10184}%
+ \else\shift@CID{#1}{10174}\CID{10195}%
+ \fi
+ \ifnum#2>\z@ \shift@CID{#2}{10185}%
+ \fi}
+\gdef\ajnenrei#1#2{\hskip\ltjgetparameter{kanjiskip}\hbox{\tate\ifnum#2<10
+ \shift@CID{#2}{10207}\CID{\ifcase#1\or10230\or10232\or10231\or10229\fi}%
+ \else\ifnum#2=10\CID{\ifodd#1 10208\else10217\fi}%
+ \CID{\ifcase#1\or10218\or10232\or10218\or10229\fi}%
+ \else\ifnum#2<20\CID{\ifodd#1 10208\else10217\fi}\shift@CID{#2}{10208}%
+ \else\expandafter\aj@nenrei\number#2{#1}%
+ \fi\fi\fi}}
+\gdef\aj@nenrei#1#2#3{\shift@CID{#1}{10207}%
+ \ifcase#2 \CID{\ifodd#3 10218\else10228\fi}%
+ \else\shift@CID{#2}{10218}%
+ \fi}
+\gdef\ajKosu{\ajnenrei4}
+%
+\gdef\ajLabel#1#2#{\ifx\\#2\\\aj@Label#1\else\@aj@Label#1#2\fi}
+\gdef\aj@Label#1\else#2\fi#3{\fi
+ \expandafter\protect
+ \expandafter#1%
+ \expandafter{\number\csname c@#3\endcsname}}
+\gdef\@aj@Label#1#2\fi#3{\fi
+ \expandafter\protect
+ \expandafter#1%
+ \expandafter#2%
+ \expandafter{\number\csname c@#3\endcsname}}
+%
+%
+\gdef\ajFrac{\@ifstar{\@aj@Frac}{\aj@Frac}}
+\gdef\@ajFrac#1#2{\ifcase#2\or
+ \or\ifcase#1\or9826\fi
+ \or\ifcase#1+9825\or9827\or9828\fi
+ \or\ifcase#1\or9829\or9826\or9830\fi
+ \or\ifcase#1\or9831\or9832\or9833\or9834\fi
+ \or\ifcase#1\or9835\or9827\or9826\or9828\or9836\fi
+ \or\ifcase#1\or9837\or9838\or9839\or9840\or9841\or9842\fi
+ \or\ifcase#1\or9843\or9829\or9844\or9826\or9845\or9830\or9846\fi
+ \or\ifcase#1\or9847\or9848\or9827\or9849\or9850\or9828\or9851\or9852\fi
+ \or\ifcase#1\or9853\or9831\or9854\or9832\or9826\or9833\or9855\or9834\or9856\fi
+ \or\ifcase#1\or9857\or9858\or9859\or9860\or9861\or9862\or9863\or9864\or9865\or9866\fi
+ \or\ifcase#1\or9867\or9835\or9829\or9827\or9868\or9826\or9869\or9828\or9830\or9836
+ \or9870\fi
+ \else\ifnum#2=100 \ifnum#1=1 9871\fi\fi
+ \fi}
+\gdef\@aj@Frac#1#2{\CID{\@ajFrac{#1}{#2}}}
+\gdef\aj@Frac#1#2{{\@tempcnta\@ajFrac{#1}{#2}%
+ \advance\@tempcnta-9825
+ \advance\@tempcnta\ifcase\@tempcnta9780\or8183\or9779\or9779\or8181\else9778\fi\relax
+ \CID{\@tempcnta}}}
+%1/4 161 8880 9604 13120
+%1/2 162 8881 9605 13121
+%3/4 163 8882 9606 13122
+%1/8 9371 12887 9691 13207
+%3/8 9372 12888 9692 13208
+%5/8 9373 12889 9693 13209
+%7/8 9374 12890 9694 13210
+%1/3 9375 12891 9695 13211
+%2/3 9376 12892 9696 13212
+%
+%
+\def\@aj半角def#1{\ifx\@nil#1\else
+ \expandafter\xdef\csname aj半角@#1\endcsname{\noexpand\CID
+ {\noexpand\unless\noexpand\ifnum\noexpand\ltjgetparameter\noexpand{direction\noexpand}=3 \number\@tempcnta\noexpand\else\number\@tempcntb\noexpand\fi}}%
+ \advance\@tempcnta\@ne\advance\@tempcntb\@ne
+ \expandafter\@aj半角def\fi}
+\@tempcnta326
+\@tempcntb9084
+\@aj半角def  。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜`ヰヱヮヵヶヴガギグゲゴザジズゼゾダヂヅデドバパビピブプベペボポ\@nil
+\@tempcnta516
+\@aj半角def をぁぃぅぇぉゃゅょっあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわんゐゑゎがぎぐげござじずぜぞだぢづでどばぱびぴぶぷべぺぼぽ\@nil
+\gdef\aj半角#1{\aj@半角#1\@nil}
+\gdef\aj@半角#1{\ifx\@nil#1\else
+ \expandafter\ifx\csname aj半角@#1\endcsname\relax
+ #1\else\csname aj半角@#1\endcsname\fi
+ \expandafter\aj@半角\fi}
+%
+%
+\def\@ajligdef#1#2{\expandafter\xdef\csname ajLig\@ajmojifam#1\endcsname{\noexpand\CID{#2}}}
+\def\@ajligaturedef#1{\ifx\@nil#1\else
+ \@ajligdef{#1}{\number\@tempcnta}\advance\@tempcnta\@ne
+ \expandafter\@ajligaturedef\fi}
+\def\@aj@ligdef#1#2#3{\expandafter\xdef\csname ajLig\@ajmojifam#1\endcsname
+ {\unexpanded{\unless\ifnum\ltjgetparameter{direction}=3 }%
+ \noexpand\CID{#2}\noexpand\else\noexpand\CID{#3}\noexpand\fi}}
+\def\@aj@ligaturedef#1{\ifx\@nil#1\else
+ \@aj@ligdef{#1}{\number\@tempcnta}{\number\@tempcntb}%
+ \advance\@tempcnta\@ne\advance\@tempcntb\@ne
+ \expandafter\@aj@ligaturedef\fi}
+%
+\let\@ajmojifam\@empty
+\@tempcnta12111
+\@ajligaturedef{!!}{!?}{!*}{!!*}{!?*}\@nil
+\@ajligdef{?!}{16279}
+\@ajligdef{??}{16278}
+%
+\let\@ajmojifam\@empty
+\@tempcnta7601
+\@ajligaturedef{mm}{cm}{km}{mg}{kg}{cc}{m2}\@nil
+\@tempcnta7610
+\@ajligaturedef{No.}{K.K.}{TEL}\@nil
+\@tempcnta8020
+\@ajligaturedef{cm2}{km2}{cm3}{m3}{dl}{l}{kl}{ms}{micros}{ns}{ps}{KB}{MB}{GB}{HP}{Hz}{mb}{ml}\@nil
+\@ajligdef{KK.}{8053}
+\@ajligdef{Tel}{8055}
+\@ajligdef{in}{8182}
+\@tempcnta8186
+\@ajligaturedef{mm2}{mm3}{km3}{sec}{min}\@nil
+\@tempcnta8192
+\@ajligaturedef{cal}{kcal}{dB}\@nil
+\@tempcnta8303
+\@ajligaturedef{m}{g}{F}{TB}{FAX}{JIS}\@nil
+\@ajligdef{euro}{9779}
+\@aj@ligdef{euro*}{9354}{12870}
+\@aj@ligdef{ohm*}{9355}{12871}
+\@ajligdef{mho}{16204}
+\@aj@ligdef{mho*}{15515}{16526}
+\@aj@ligdef{No*}{20321}{20965}%AJ1-6
+\@tempcnta11846
+\@ajligaturedef{AM}{KK}{No}{PH}{PM}{PR}{tel}{tm}{VS}{a/c}{a.m.}{c/c}{c.c.}{c/o}{dl*}{hPa}{kl*}{l*}{microg}{microm}{ml*}{m/m}{n/m}{pH}{p.m.}\@nil
+\@ajligdef{JAS}{12088}
+\@tempcnta20919
+\@ajligaturedef{ppb}{ppm}{'S}{H2}{O2}{Ox}{Nx}{Q2}{Jr.}{Dr.}\@nil%AJ1-6
+%
+\let\@ajmojifam\@empty
+\@tempcnta7621
+\@tempcntb12041
+\@aj@ligaturedef{明治}{大正}{昭和}\@nil
+\@tempcnta7585
+\@tempcntb7940
+\@aj@ligaturedef{ミリ}{キロ}{センチ*}{メートル}{グラム*}{トン}{アール*}{ヘクタール}{リットル}{ワット*}{カロリー}{ドル}{セント*}{パーセント}{ミリバール}{ページ*}\@nil
+\@aj@ligdef{センチ}{8038}{8329}
+\@aj@ligdef{キロメートル}{8039}{8330}
+\@aj@ligdef{グラム}{8040}{8339}
+\@aj@ligdef{キログラム}{8041}{8340}
+\@aj@ligdef{アール}{8042}{8338}
+\@aj@ligdef{セント}{8043}{8348}
+\@aj@ligdef{ワット}{8044}{8344}
+\@aj@ligdef{ホーン}{8045}{8347}
+\@aj@ligdef{ヘルツ}{8046}{8343}
+\@aj@ligdef{ページ}{8047}{8349}
+\@aj@ligdef{アパート}{8048}{8350}
+\@aj@ligdef{ビル}{8049}{8358}
+\@aj@ligdef{マンション}{8050}{8357}
+\@aj@ligdef{コーポ}{8051}{8353}
+\@aj@ligdef{ハイツ}{8052}{8356}
+\@aj@ligdef{株式会社}{8054}{8324}
+\@aj@ligdef{インチ}{8183}{8333}
+\@aj@ligdef{有限会社}{8321}{8325}
+\@aj@ligdef{財団法人}{8322}{8326}
+\@aj@ligdef{平成}{8323}{12044}
+\@aj@ligdef{フィート}{8327}{8334}
+\@aj@ligdef{ヤード}{8328}{8337}
+\@aj@ligdef{インチ*}{8331}{8332}
+\@aj@ligdef{ヤード*}{8335}{8336}
+\@aj@ligdef{ヘルツ*}{8341}{8342}
+\@aj@ligdef{ホーン*}{8345}{8346}
+\@aj@ligdef{コーポ*}{8351}{8352}
+\@aj@ligdef{ハイツ*}{8354}{8355}
+\@aj@ligdef{さじ}{11871}{11872}
+\@tempcnta11873
+\@tempcntb11957
+\@aj@ligaturedef{アト}{アルファ}{アンペア}{イニング}{ウォン}{ウルシ}{エーカー}{エクサ}{エスクード}{オーム}{オングストローム}{オンス}{オントロ}{カイリ}%
+{カップ}{カラット}{ガロン}{ガンマ}{ギガ}{ギニー}{キュリー}{ギルダー}{キロリットル}{キロワット}{グスーム}{グラムトン}{クルサード}{クルゼイロ}{クローネ}%
+{ケース}{コルナ}{サイクル}{サンチーム}{シリング}{ダース}{デカ}{デシ}{テラ}{ドラクマ}{ナノ}{ノット}{バーツ}{バーレル}{パスカル}{バレル}{ピアストル}{ピクル}%
+{ピコ}{ファラッド}{ファラド}{フェムト}{ブッシェル}{フラン}{ベータ}{ヘクト}{ヘクトパスカル}{ペセタ}{ペソ}{ペタ}{ペニヒ}{ペンス}{ポイント}{ホール}{ボルト}{ホン}%
+{ポンド}{マイクロ}{マイル}{マッハ}{マルク}{ミクロン}{メガ}{メガトン}{ヤール}{ユアン}{ユーロ}{ラド}{リラ}{ルーブル}{ルクス}{ルピア}{ルピー}{レム}{レントゲン}\@nil
+\@tempcnta12045
+\@tempcntb12054
+\@aj@ligaturedef{医療法人}{学校法人}{共同組合}{協同組合}{合資会社}{合名会社}{社団法人}{宗教法人}{郵便番号}\@nil
+\expandafter\gdef\csname ajLigオングストローム*\endcsname
+ {\mbox{\kern.05zw\ajLig{オントロ}\kern-.1zw\ajLig{グスーム}\kern.05zw}}
+\@tempcnta20929
+\@tempcntb20943
+\@aj@ligaturedef{ガル}{グレイ}{クローナ}{シーベルト}{シェケル}{ジュール}{デシベル}{ドット}{バイト}{ビット}{ベクレル}{ボー}{ランド}{リンギット}\@nil%AJ1-6
+\@ajligdef{より}{12181}
+\@ajligdef{升}{16194}
+\@ajligdef{コト}{16195}
+\@aj@ligdef{令和}{23058}{23059}%AJ1-7
+%
+\def\@ajmojifam{○}
+\@tempcnta7613
+\@ajligaturedef 上中下左右\@nil
+\@ajligdef{〒}{8057}
+\@tempcnta8152
+\@ajligaturedef 夜企医協名宗労学有株社監資財\@nil
+\@ajligdef{印}{8191}
+\@ajligdef{秘}{8223}
+\@tempcnta8317
+\@ajligaturedef 大小優控\@nil
+\@tempcnta10478
+\@ajligaturedef 調注副減標欠基禁項休女男正写祝出適特済増問答例電\@nil%
+\@ajligdef{年}{20553}%AJ1-6
+%
+\def\@ajmojifam#1{(#1)}
+\@ajligdef{株}{7618}
+\@ajligdef{有}{7619}
+\@ajligdef{代}{7620}
+\@tempcnta8138
+\@ajligaturedef 至企協名労社監自資財特学祭呼\@nil
+\@ajligdef{祝}{8204}
+\@ajligdef{休}{8205}
+\@tempcnta10146
+\@ajligaturedef 営合注問答例\@nil
+%
+\def\@ajmojifam{□}
+\@ajligdef{印}{8196}
+\@ajligdef{負}{11030}
+\@ajligdef{勝}{11031}
+\@tempcnta20497
+\@ajligaturedef{:A}{:B}{:C}{:D}{:E}{:F}{:終}\@nil%AJ1-6
+\@tempcnta20505
+\@ajligaturedef{:CL}{:KCL}{:BEL}{:AS}{:AM}{:段}{:ゴ}{:ミ}\@nil%AJ1-6
+%
+\def\@ajmojifam{◇}
+\@tempcnta20554
+\@ajligaturedef {News}天再新映声前後終立交{ほか}劇司解株気二多文手{PV}{MV}双{SS}{S1}{S2}{S3}デ{HV}\@nil%AJ1-6
+%
+\def\@ajmojifam{▽}
+\@ajligdef{〒}{12180}
+\@ajligdef{▽}{12193}
+%
+\def\@ajmojifam{△}
+\@ajligdef{!}{12192}
+%
+\def\@ajmojifam{■}
+\@ajligdef{◇}{12231}
+%
+\expandafter\chardef\csname offset●\endcsname\z@
+\expandafter\mathchardef\csname offset□\endcsname269
+\expandafter\mathchardef\csname offset■\endcsname268
+\expandafter\mathchardef\csname offset◇\endcsname267
+\expandafter\mathchardef\csname offset◆\endcsname266
+\@tempcnta10760
+\def\@ajmojidef#1{\ifx\@nil#1%
+ \else\advance\@tempcnta\csname offset#1\endcsname
+ \def\@ajmojifam{#1}%
+ \@ajligaturedef 問答例\@nil
+ \expandafter\@ajmojidef\fi}
+\@ajmojidef ●□■◇◆\@nil
+%
+\def\@ajkanadef#1#2#3#4#5#6#7{\expandafter\gdef\csname ajLig#1\endcsname
+ {\if@kana\def\reserved@a{ruby}%
+ \ifx\k@family\reserved@a
+ \unless\ifnum\ltjgetparameter{direction}=3 \CID{#6}\else\CID{#7}\fi
+ \else\unless\ifnum\ltjgetparameter{direction}=3 \CID{#4}\else\CID{#5}\fi
+ \fi
+ \else\unless\ifnum\ltjgetparameter{direction}=3 \CID{#2}\else\CID{#3}\fi
+ \fi}}
+\newcount\@tempcntc
+\newcount\@tempcntd
+\newcount\@tempcnte
+\newcount\@tempcntf
+\def\@aj@kanadef#1{\ifx\@nil#1%
+ \else\edef\reserved@b{\noexpand\@ajkanadef{#1}%
+ {\number\@tempcnta}{\number\@tempcntb}{\number\@tempcntc}%
+ {\number\@tempcntd}{\number\@tempcnte}{\number\@tempcntf}}\reserved@b
+ \advance\@tempcnta\@ne\advance\@tempcntb\@ne\advance\@tempcntc\@ne
+ \advance\@tempcntd\@ne\advance\@tempcnte\@ne\advance\@tempcntf\@ne
+ \expandafter\@aj@kanadef\fi}
+\@ajkanadef{う゛}{7958}{7958}{12361}{12544}{12756}{12756}
+\@tempcnta8313
+\@tempcntb8313
+\@tempcntc12452
+\@tempcntd12635
+\@tempcnte16444
+\@tempcntf16444
+\@aj@kanadef{ワ゛}{ヰ゛}{ヱ゛}{ヲ゛}\@nil
+\@tempcnta16209
+\@tempcntb16209
+\@tempcntc16352
+\@tempcntd16382
+\@tempcnte16414
+\@tempcntf16414
+\@aj@kanadef{か゜}{き゜}{く゜}{け゜}{こ゜}{カ゜}{キ゜}{ク゜}{ケ゜}{コ゜}{セ゜}{ツ゜}{ト゜}\@nil
+\@ajkanadef{小か}{7959}{8264}{12285}{12468}{12682}{12762}
+\@ajkanadef{小け}{7960}{8265}{12292}{12475}{12689}{12763}
+\@ajkanadef{小こ}{12269}{12270}{12295}{12478}{16448}{16467}
+\@ajkanadef{小コ}{12271}{12272}{12385}{12568}{16449}{16468}
+\@tempcnta16236
+\@tempcntb16333
+\@tempcntc16365
+\@tempcntd16395
+\@tempcnte16427
+\@tempcntf16450
+\@aj@kanadef{小ク}{小シ}{小ス}{小ト}{小ヌ}{小ハ}{小ヒ}{小フ}{小ヘ}{小ホ}{小プ}{小ム}{小ラ}{小リ}{小ル}{小レ}{小ロ}\@nil
+%
+\def\@aj@numberdef#1#2{\ifx\@nil#2\expandafter\@gobble
+ \else\expandafter\xdef\csname ajnumber#2\endcsname{{#1}{\number\@tempcnta}}%
+ \advance\@tempcnta\@ne
+ \expandafter\@aj@numberdef\fi{#1}}
+\@tempcnta\@ne
+\@aj@numberdef{alph}abcdefghijklmnopqrstuvwxyz\@nil
+\@tempcnta\@ne
+\@aj@numberdef{Alph}ABCDEFGHIJKLMNOPQRSTUVWXYZ\@nil
+\@tempcnta\@ne
+\@aj@numberdef{Hira}あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん\@nil
+\@tempcnta\@ne
+\@aj@numberdef{Kata}アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン\@nil
+\@tempcnta\@ne
+\@aj@numberdef{Yobi}日月火水木金土祝休\@nil
+\gdef\@ajnumber#1{\expandafter\expandafter\expandafter\aj@number\csname ajnumber#1\endcsname}
+\gdef\aj@number#1{\ifx\relax#1\expandafter\@gobbletwo\else\expandafter\@aj@number\fi{#1}}
+\gdef\@aj@number#1#2#3{\csname aj#3#1\endcsname{#2}}
+%
+\def\@aj@kakomidef#1#2{\expandafter\gdef\csname#1\endcsname##1%
+ {\expandafter\ifx\csname ajLig#1##1\endcsname\relax\@ajnumber{##1}{#2}%
+ \else\csname ajLig#1##1\endcsname\fi}}
+\@aj@kakomidef{○}{Maru}
+\@aj@kakomidef{●}{KuroMaru}
+\@aj@kakomidef{□}{Kaku}
+\@aj@kakomidef{■}{KuroKaku}
+\@aj@kakomidef{◇}{MaruKaku}
+\@aj@kakomidef{◆}{KuroMaruKaku}
+\gdef\△#1{\csname ajLig△#1\endcsname}
+\gdef\▽#1{\csname ajLig▽#1\endcsname}
+\gdef\(#1){\expandafter\ifx\csname ajLig(#1)\endcsname\relax\@ajnumber{#1}{Kakko}%
+ \else\csname ajLig(#1)\endcsname\fi}
+\gdef\゛#1{\csname ajLig#1゛\endcsname}
+\gdef\゜#1{\csname ajLig#1゜\endcsname}
+\gdef\!#1{\csname ajLig小#1\endcsname}
+\gdef\ajLig#1{\csname ajLig#1\endcsname}
+%
+%
+\def\@ajPICTdef#1#2{\expandafter\xdef\csname ajPICT#1\endcsname{\noexpand\CID{#2}}}
+\def\@aj@PICTdef#1{\ifx\@nil#1\else
+ \@ajPICTdef{#1}{\number\@tempcnta}\advance\@tempcnta\@ne
+ \expandafter\@aj@PICTdef\fi}
+\@tempcnta8016
+\@aj@PICTdef{Club}{Heart}{Spade}{Diamond}\@nil
+\@ajPICTdef{電話}{8056}
+\@ajPICTdef{〒}{8058}
+\@tempcnta8211
+\@aj@PICTdef{Spade*}{Heart*}{Club*}{Diamond*}\@nil
+\@tempcnta8215
+\@aj@PICTdef 晴曇雨雪→←↑↓\@nil
+\@ajPICTdef{野球}{12097}
+\@ajPICTdef{湯}{12098}
+\@ajPICTdef{花}{12228}
+\@ajPICTdef{花*}{12229}
+\@ajPICTdef{サッカー}{20957}%AJ1-6
+\gdef\ajPICT#1{\csname ajPICT#1\endcsname}
+\global\let\※\ajPICT
+%
+%
+\def\@ajArrowdef#1#2{\expandafter\xdef\csname ajArrow#1\endcsname{\noexpand\CID{#2}}}
+\def\@aj@Arrowdef#1{\ifx\@nil#1\else
+ \@ajArrowdef{#1}{\number\@tempcnta}\advance\@tempcnta\@ne
+ \expandafter\@aj@Arrowdef\fi}
+\@tempcnta8009
+\@aj@Arrowdef{LeftTriangle}{RightTriangle}{DOWN}{UP}{LEFT}{RIGHT}\@nil
+\@tempcnta8206
+\@aj@Arrowdef{RIGHT*}{LEFT*}{UP*}{DOWN*}\@nil
+\@tempcnta8219
+\@aj@Arrowdef{RightHand}{LeftHand}{UpHand}{DownHand}\@nil
+\@tempcnta8309
+\@aj@Arrowdef{Left/Right}{Right/Left}{Up/Down}{Down/Up}\@nil
+\@tempcnta12175
+\@aj@Arrowdef{LeftScissors}{RightScissors}{UpScissors}{DownScissors}\@nil
+\@tempcnta12194
+\@aj@Arrowdef
+{LeftTriangle*}{RightTriangle*}{Left}{Right}{Up}{Down}{LeftDouble}{LeftRight*}{RightDown}{LeftDown}{LeftUp}{RightUp}%
+{Right/Left*}{Left/Right*}{Right/Left+}{Down/Up+}{Left+}{Right+}{Up+}{Down+}{LeftRight+}{UpDown+}\@nil
+\@tempcnta12261
+\@aj@Arrowdef
+{LeftAngle}{RightAngle}{UpAngle}{DownAngle}{LeftAngle*}{RightAngle*}{UpAngle*}{DownAngle*}\@nil
+\@ajArrowdef{RightDouble}{15482}%752 16493
+\@ajArrowdef{LeftRightDouble}{15483}%753 16494
+%\@ajArrowdef{LeftRight}{15511}%12201 16522
+\@ajArrowdef{RightUp*}{16201}
+\@ajArrowdef{RightDown*}{16202}
+%\@ajArrowdef{DOWNLEFT*}{16273}
+\gdef\ajArrow#1{\csname ajArrow#1\endcsname}
+%
+%
+\def\@aj@kuntendef#1{\ifx\@nil#1%
+ \else\expandafter\xdef\csname aj訓点#1\endcsname
+ {\noexpand\CID{\number\@tempcnta}}%
+ \advance\@tempcnta\@ne
+ \expandafter\@aj@kuntendef
+ \fi}
+\@tempcnta16283
+\@aj@kuntendef |レ一二三四上中下甲乙丙丁天地人\@nil
+\gdef\aj@smallReten{{\@tempdimb\f@size pt\@tempskipa\f@baselineskip
+ \@tempdimb.94\@tempdimb
+ \@tempskipa.94\@tempskipa
+ \fontsize{\@tempdimb}{\@tempskipa}\selectfont\aj訓点レ}}
+\gdef\aj訓点一レ{\mbox{\tate\kern-.24zw\aj訓点一\kern-.65zw\raise.15zw\hbox{\aj@smallReten}}}
+\gdef\aj訓点上レ{\mbox{\tate\aj訓点上\kern-.3zw\raise.15zw\hbox{\aj@smallReten}}}
+\gdef\aj訓点甲レ{\mbox{\tate\aj訓点甲\kern-.25zw\raise.15zw\hbox{\aj@smallReten}}}
+\gdef\aj訓点天レ{\mbox{\tate\aj訓点天\kern-.4zw\raise.1zw\hbox{\aj@smallReten}}}
+\def\@ajongofudef#1{\ifx\@nil#1%
+ \else\expandafter\xdef\csname aj訓点#1|\endcsname
+ {\noexpand\mbox{\yoko\expandafter\noexpand\csname aj訓点#1\endcsname
+ \hbox to\z@{\hss\expandafter\noexpand\csname aj訓点|\endcsname\kern-.5zw}}}%
+ \expandafter\@ajongofudef\fi}
+\@ajongofudef 二三四中下乙丙丁地人\@nil
+\expandafter\gdef\csname aj訓点 |\endcsname{\mbox{\yoko{ }\hbox to\z@{\hss\csname aj訓点|\endcsname\kern-.5zw}}}
+\def\@ajkungofudef#1{\ifx\@nil#1%
+ \else\expandafter\xdef\csname aj訓点|#1\endcsname
+ {\noexpand\mbox{\yoko\hbox to\z@{\hss\expandafter\noexpand\csname aj訓点|\endcsname\kern-.5zw}%
+ \expandafter\noexpand\csname aj訓点#1\endcsname}}%
+ \expandafter\@ajkungofudef\fi}
+\@ajkungofudef 二三四中下乙丙丁地人\@nil
+\expandafter\gdef\csname aj訓点| \endcsname{\mbox{\yoko\hbox to\z@{\hss\csname aj訓点|\endcsname\kern-.5zw}{ }}}
+%
+\gdef\ajKunten#1{\csname aj訓点#1\endcsname}
+%
+\newtoks\@temptokenb
+\newtoks\@temptokenc
+\gdef\ajRedefine@KundokuMacros{\ifx\kokana\@undefined
+ \else\let\orig@kokana\kokana
+ \let\orig@retenform\retenform
+ \let\orig@reten\reten
+ \let\orig@retenkana\retenkana
+ \let\orig@kaeriten\kaeriten
+ \def\aj@kokana##1##2{\orig@kokana{\aj@kundokusize\if@kana\rubyfamily\fi##1}%
+ {\aj@kundokusize\ajKunten{##2}}}%
+ \def\aj@retenform{\aj@kundokusize\aj訓点レ}%
+ \def\aj@reten{\orig@kaeriten{\aj@kundokusize\aj訓点レ}}%
+ \def\aj@retenkana##1{\orig@retenkana{\aj@kundokusize\if@kana\rubyfamily\fi##1}}%
+ \def\aj@kaeriten##1{\orig@kaeriten{\aj@kundokusize\ajKunten{##1}}}%
+ \let\aj@kundokusize\tiny
+ \fi
+ \ifx\@k@nd@ku@\@undefined
+ \else{\global\let\orig@k@nd@ku@\@k@nd@ku@
+ \def\get@hbox##1\hbox##2##3\get@hbox
+ {\@temptokena{##1}\@temptokenb{##2}\@temptokenc{##3}}%
+ \expandafter\get@hbox
+ \@k@nd@ku@[##1]{##2}{##3}{##4}{\ajKunten{##5}}[\ajKunten{##6}]<##7>(##8)\get@hbox
+ \def\change@reten##1\def\temptopleft##2\def\tempbottomleft##3##4\change@reten
+ {\@temptokenb{##1\def\temptopleft{####6}\def\tempbottomleft{####5}##4}}%
+ \expandafter\change@reten\the\@temptokenb\change@reten
+ \edef\redefine@k@nd@ku@##1{\gdef\noexpand\aj@k@nd@ku@##1%
+ {\the\@temptokena\hbox{\the\@temptokenb}\the\@temptokenc}}%
+ \redefine@k@nd@ku@{[##1]##2##3##4##5[##6]<##7>(##8)}}%
+ \let\aj@kundokusize\kundokusize
+ \fi}
+\ifltj@in@latex
+ \@onlypreamble\ajRedefine@KundokuMacros
+ \AtBeginDocument{\ajRedefine@KundokuMacros}
+\fi
+\gdef\DeclareOriginalKundokuStyle{\@ifnextchar[%]
+ {\Declare@OriginalKundokuStyle}%
+ {\Declare@OriginalKundokuStyle[\aj@kundokusize]}}
+\gdef\Declare@OriginalKundokuStyle[#1]{\let\aj@kundokusize#1%
+ \ifx\orig@k@nd@ku@\@undefined
+ \else\let\@k@nd@ku@\orig@k@nd@ku@
+ \let\kundokusize\aj@kundokusize
+ \fi
+ \ifx\orig@kokana\@undefined
+ \else
+ \let\kokana\orig@kokana
+ \let\retenform\orig@retenform
+ \let\reten\orig@reten
+ \let\retenkana\orig@retenkana
+ \let\kaeriten\orig@kaeriten
+ \fi}
+\gdef\DeclareAJKundokuStyle{\@ifnextchar[%]
+ {\Declare@AJKundokuStyle}%
+ {\Declare@AJKundokuStyle[\aj@kundokusize]}}
+\gdef\Declare@AJKundokuStyle[#1]{\let\aj@kundokusize#1%
+ \ifx\aj@k@nd@ku@\@undefined
+ \else\let\@k@nd@ku@\aj@k@nd@ku@
+ \def\kundokusize{\aj@kundokusize\if@kana\rubyfamily\fi}%
+ \fi
+ \ifx\aj@kokana\@undefined
+ \else
+ \let\kokana\aj@kokana
+ \let\retenform\aj@retenform
+ \let\reten\aj@reten
+ \let\retenkana\aj@retenkana
+ \let\kaeriten\aj@kaeriten
+ \fi}
+%
+%
+\gdef\ajCIDVarDef{\aj@VarDef\CID}
+\gdef\ajUTFVarDef{\aj@VarDef\UTF}
+\gdef\aj@VarDef#1#2#3{\expandafter\xdef\csname ajVar#2\endcsname{\noexpand#1{#3}}}
+\gdef\ajCIDVarList#1{{\@ajCIDVarList#1\relax}}
+\gdef\@ajCIDVarList#1{\ifx\relax#1\else\def\reserved@a{#1}\expandafter\aj@CIDVarList\fi}
+\gdef\aj@CIDVarList{\afterassignment\@aj@CIDVarList\@tempcnta}
+\gdef\@aj@CIDVarList{\aj@VarDef\CID\reserved@a{\number\@tempcnta}\@ajCIDVarList}
+\gdef\ajUTFVarList#1{{\@ajUTFVarList#1 \relax}}
+\gdef\@ajUTFVarList#1{\ifx\relax#1\else\def\reserved@a{#1}\expandafter\aj@UTFVarList\fi}
+\gdef\aj@UTFVarList#1#2{\ifx=#1\expandafter\@aj@UTFVarList\else\expandafter\@aj@UTFVarList\expandafter#1\fi#2}
+\gdef\@aj@UTFVarList#1 {\aj@VarDef\UTF\reserved@a{#1}\@ajUTFVarList}
+\gdef\ajVar#1{\csname ajVar#1\endcsname}
+\ifltj@in@latex
+ \@onlypreamble\ajCIDVarDef
+ \@onlypreamble\ajUTFVarDef
+ \@onlypreamble\ajCIDVarList
+ \@onlypreamble\ajUTFVarList
+\fi
+%\ajCIDVarList{吉=13706 教=8471 高=8705 鴎=7646 崎=14290 碕=17009 第=13910 角=13682 浜=8531}
+\gdef\ajHashigoTaka{\CID{8705}}
+\gdef\ajTsuchiYoshi{\CID{13706}}
+\gdef\ajTatsuSaki{\CID{14290}}
+\gdef\ajMayuHama{\CID{8531}}
+%
+%
+%\gdef\ajRedefine@ajVar{\@ifpackageloaded{hyperref}{%
+% \let\aj@Var\ajVar
+% \def\ajVar##1{\ifHy@pdfstring
+% \expandafter\expandafter
+% \expandafter\check@UTF\csname ajVar##1\endcsname{##1}%
+% \else\aj@Var{##1}\fi}
+% \def\check@UTF##1##2##3{\ifx\UTF##1\0x##2\else##3\fi}}{}}
+\gdef\ajRedefine@ajCommands{\@ifpackageloaded{hyperref}{%
+ \let\hyperref@ajLabel\ajLabel
+ \def\ajLabel##1##{\ifHy@pdfstring\Hy@ReturnAfterElseFi\hyperref@ajLabel\@arabic\else\ltx@ReturnAfterFi\hyperref@ajLabel##1\fi}%
+ \ajRedefine@ajCommand\△{Lig△}\▽{Lig▽}\!{Lig小}\ajLig{Lig}\ajPICT{PICT}\※{PICT}\ajVar{Var}\@nil\@nil
+ \aj@Redefine@ajCommand○{Maru}●{KuroMaru}□{Kaku}■{KuroKaku}◇{MaruKaku}◆{KuroMaruKaku}\@nil\@nil
+ \def\(##1){\ifHy@pdfstring(##1)\else\expandafter\ifx\csname ajLig(##1)\endcsname\relax\@ajnumber{##1}{Kakko}%
+ \else\csname ajLig(##1)\endcsname\fi\fi}%
+ \def\゛##1{\ifHy@pdfstring##1゛\else\csname ajLig##1゛\endcsname\fi}%
+ \def\゜##1{\ifHy@pdfstring##1゜\else\csname ajLig##1゜\endcsname\fi}%
+ }{}}
+\gdef\ajRedefine@ajCommand#1#2{\ifx\@nil#1\else\def#1##1{\ifHy@pdfstring##1\else\csname aj#2##1\endcsname\fi}%
+ \expandafter\ajRedefine@ajCommand\fi}
+\gdef\aj@Redefine@ajCommand#1#2{\ifx\@nil#1\else\expandafter\def\csname#1\endcsname##1%
+ {\ifHy@pdfstring##1\else\expandafter\ifx\csname ajLig#1##1\endcsname\relax\@ajnumber{##1}{#2}\else
+ \csname ajLig#1##1\endcsname\fi\fi}%
+ \expandafter\aj@Redefine@ajCommand\fi}
+\ifltj@in@latex
+ \AtBeginDocument{\ajRedefine@ajCommands}
+\fi
+%
+%
+\gdef\ajLeader{\@ifnextchar[{\aj@Leader}{\aj@Leader[\z@ plus1fill]}}
+\gdef\aj@Leader[#1]#2{{\@tempcnta#2\multiply\@tempcnta\tw@
+ \advance\@tempcnta1221\ifhmode\unless\ifnum\ltjgetparameter{direction}=3 4\else5\fi\else\unless\ifnum\ltjgetparameter{direction}=3 5\else4\fi\fi
+ \leaders\hbox{\CID{\@tempcnta}}\ifhmode\hskip\else\vskip\fi#1}}
+%
+%
+\endlinechar=13
+\toks0{}\toks1{}\toks2{}\toks3{}
+\def\ajQuotedef#1 #2 #3 #4 {\ifx*#1\else
+ \toks0\expandafter{\the\toks0 \or#1}%
+ \toks1\expandafter{\the\toks1 \or#2}%
+ \toks2\expandafter{\the\toks2 \or#3}%
+ \toks3\expandafter{\the\toks3 \or#4}%
+ \expandafter\ajQuotedef\fi}
+\ajQuotedef
+670 671 12173 12174
+672 673 7956 7957
+674 675 7899 7900
+676 677 7901 7902
+678 679 7903 7904
+680 681 7905 7906
+682 683 7907 7908
+684 685 7909 7910
+686 687 7911 7912
+688 689 7913 7914
+690 691 7915 7916
+7608 7609 7956 7957
+12125 12126 12135 12136
+12127 12128 12137 12138
+12129 12130 12139 12140
+12131 12132 12141 12142
+12171 12172 12173 12174
+16197 16198 16329 16330
+* * * *
+\def\@removetop#1{\toks#1\expandafter\expandafter\expandafter{\expandafter\@gobble\the\toks#1}}
+\@removetop0\@removetop1\@removetop2\@removetop3
+\xdef\ajQuote#1#2{\noexpand\CID{\noexpand\unless\noexpand\ifnum\noexpand\ltjgetparameter\noexpand{direction\noexpand}=3 \noexpand\ifcase#1 \the\toks0
+ \noexpand\fi\noexpand\else\noexpand\ifcase#1 \the\toks2
+ \noexpand\fi\noexpand\fi}#2\inhibitglue\noexpand\CID{\noexpand\unless\noexpand\ifnum\noexpand\ltjgetparameter\noexpand{direction\noexpand}=3 \noexpand\ifcase#1 \the\toks1
+ \noexpand\fi\noexpand\else\noexpand\ifcase#1 \the\toks3
+ \noexpand\fi\noexpand\fi}}
+}
+\ifltj@in@latex\else
+ \ajRedefine@KundokuMacros
+\fi
+%%------------------ all done
+\ltj@ajmacros@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-25c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-25c.sty
new file mode 100644
index 0000000000..9c67b70358
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-25c.sty
@@ -0,0 +1,357 @@
+%
+% luatexja-fontspec-25c.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luatexja-fontspec-25c}[2019/05/14 fontspec support of LuaTeX-ja]
+\RequirePackage{l3keys2e}
+\ExplSyntaxOn
+
+%%%%%%%% Change Japanese font family by \rmfamily or not
+\cs_new:Npn \ltj_fontspec_match_cmd {
+ \renewcommand\jttdefault{\gtdefault}
+ \@ltj@match@familytrue
+ \DeclareDocumentCommand \setmonojfont { O{} m O{} } {
+ \ltj_fontspec_set_family:Nnn \jttdefault {##1,##3}{##2}
+ \normalfont
+ }
+}
+\bool_if:NT \__ltj_fontspec_match_bool \ltj_fontspec_match_cmd
+
+%%%%%%%% Messages
+\msg_new:nnn {luatexja-fontspec} {addjfontfeatures-ignored}
+{
+ \string\addjfontfeature (s)~ ignored;\\
+ it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec.
+}
+
+\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-norange}
+{
+ ignored~ sublist~ `#1'~ in~ AltFont~ (no~ range~ is~ specified).
+}
+
+\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly}
+{
+ ignored~ sublist~ `#1'~ in~ AltFont~ (only~ range~ is~ specified).
+}
+
+\cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx}
+
+%%%%%%%% Internal control sequences
+%% Each CS is ltj_fontspec version that corresponds to original CS of fontspec.
+\cs_new:Nn \ltj_fontspec_define_option:nn {
+ \__fontspec_keys_define_code:nnn {fontspec} {#1} {#2}
+}
+\cs_new:Nn \ltj_fontspec_define_preparse_external:nn {
+ \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {#1} {#2}
+}
+\cs_new:Nn \ltj_fontspec_define_altfont_option:nn {
+ \__fontspec_keys_define_code:nnn {fontspec-ltjaltfont} {#1} {#2}
+}
+
+%% Alternate Fonts
+%% Spec: AltFont = {
+%% ...
+%% { Range = <range>, <font features> },
+%% { Range = <range>, Font = <font name>, <font features> },
+%% { Range = <range>, Font = <font name> },
+%% ...
+%% }
+\tl_new:N \l_ltj_fontspec_altname_tl
+\tl_new:N \l_ltj_fontspec_altrange_tl
+\clist_new:N \l_ltj_fontspec_altfont_clist
+\clist_new:N \l_ltj_fontspec_altfont_leftover_clist
+\int_new:N \g_ltj_fontspec_altnumber_int
+
+\ltj_fontspec_define_altfont_option:nn {Range} {
+ \tl_set:Nn \l_ltj_fontspec_altrange_tl {#1}
+}
+\ltj_fontspec_define_altfont_option:nn {Font} {
+ \fontspec_complete_fontname:Nn \l_ltj_fontspec_altname_tl {#1}
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {AltFont} {
+ \clist_put_right:Nn \l_ltj_fontspec_altfont_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {YokoFeatures} {
+ \clist_put_right:Nn \l_ltj_fontspec_fontfeat_yoko_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFeatures} {
+ \clist_put_right:Nn \l_ltj_fontspec_fontfeat_tate_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFont} {
+ \tl_if_empty:nF {#1} {
+ \fontspec_complete_fontname:Nn \l_ltj_fontspec_fontname_tate_tl {#1}
+ }
+}
+%%
+\clist_new:N \l_ltj_fontspec_fontfeat_yoko_clist
+\clist_new:N \l_ltj_fontspec_fontfeat_tate_clist
+\tl_new:N \l_ltj_fontspec_fontname_tate_tl
+
+\cs_new:Npn \ltj_fontspec_DeclareFontFamily #1 #2 #3 {
+ \DeclareKanjiFamily {JY3} {#2} {#3}
+ \DeclareKanjiFamily {JT3} {#2} {#3}
+}
+
+\cs_set_eq:NN \__ltj_orig_fontspec_select_font_family:nn \__fontspec_select_font_family:nn
+\cs_new_protected:Nn \ltj_fontspec_select_font_family:nn {
+ \group_begin:
+ \ltj_fontspec_define_option:nn {NoEmbed} {}
+ \ltj_fontspec_define_option:nn {AltFont} {
+ \clist_put_right:Nn \l_ltj_fontspec_altfont_clist { ##1 }
+ }
+ \ltj_fontspec_define_option:nn {CID} {
+ \__fontspec_update_featstr:n {cid=##1}
+ }
+ \ltj_fontspec_define_option:nn {Kanjiskip} {
+ \str_if_eq_x:nnTF {false} { \str_lower_case:n { ##1 } }{
+ \__fontspec_update_featstr:n {-ltjksp}
+ } {
+ \__fontspec_update_featstr:n {+ltjksp}
+ }
+ }
+ \ltj_fontspec_define_option:nn {JFM} {
+ \__fontspec_update_featstr:n {jfm=##1}
+ }
+ % vary by shape
+ \ltj_fontspec_define_option:nn {YokoFeatures} {
+ \clist_put_right:Nn \l_ltj_fontspec_fontfeat_yoko_clist { ##1 }
+ }
+ \ltj_fontspec_define_option:nn {TateFeatures} {
+ \clist_put_right:Nn \l_ltj_fontspec_fontfeat_tate_clist { ##1 }
+ }
+ \ltj_fontspec_define_option:nn {TateFont}
+ {
+ \tl_if_empty:nF {##1} {
+ \fontspec_complete_fontname:Nn \l_ltj_fontspec_fontname_tate_tl {##1}
+ }
+ }
+ \ltj_fontspec_define_option:nn {JFM-var} {
+ \__fontspec_update_featstr:n {jfmvar=##1}
+ }
+ \ltj_fontspec_define_preparse_external:nn {NoEmbed} {
+ \cs_set:Npn \__fontspec_fontname_wrap:n ##1 {psft:##1}
+ }
+
+ %% Omit the warning message
+ %% "OpenType feature 'Kerning=Off' (-kern) not available ..."
+ \keys_define:nn {fontspec-opentype} {
+ Kerning/Off.code:n=\__fontspec_update_featstr:n {-kern}
+ }
+ \clist_set:Nx \g__fontspec_default_fontopts_clist {
+ YokoFeatures = { JFM=\ltj@stdyokojfm }, TateFeatures = { JFM=\ltj@stdtatejfm },
+ Scale=\Cjascale, Kerning=Off, Script=CJK,
+ \g__ltj_fontspec_default_fontopts_clist
+ }
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+ \cs_set_eq:NN \__fontspec_make_font_shapes:Nnnnn \ltj_fontspec_make_font_shapes:Nnnnn
+ \cs_set_eq:NN \DeclareFontFamily \ltj_fontspec_DeclareFontFamily
+ \tl_set:Nn \g_fontspec_encoding_tl {JY3}
+ \__ltj_orig_fontspec_select_font_family:nn{#1}{#2}
+ \group_end:
+}
+
+%% declare_shape
+
+\cs_new:Nn \ltj_fontspec_declare_shape_yoko:nnnn {
+ \ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JY3 } { \l_ltj_fontspec_fontfeat_yoko_clist }
+}
+\cs_new:Nn \ltj_fontspec_declare_shape_tate:nnnn {
+ \ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JT3 } { \l_ltj_fontspec_fontfeat_tate_clist }
+}
+\cs_new:Nn \ltj_fontspec_declare_shape:nnnn {
+ \ltj_fontspec_declare_shape_yoko:nnnn {#1} {#2} {#3} {#4}
+ \ltj_fontspec_declare_shape_tate:nnnn {#1} {#2} {#3} {#4}
+}
+\cs_generate_variant:Nn \ltj_fontspec_declare_shape:nnnn {nnxx}
+\cs_generate_variant:Nn \ltj_fontspec_declare_shape_yoko:nnnn {nnxx}
+\cs_generate_variant:Nn \ltj_fontspec_declare_shape_tate:nnnn {nnxx}
+
+\cs_new:Nn \ltj_fontspec_declare_shape_aux:nnnnnn
+ {
+ \tl_clear:N \l__fontspec_nfss_tl
+ \tl_clear:N \l__fontspec_nfss_sc_tl
+ \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl
+
+ \tl_set:Nn \g_fontspec_encoding_tl {#5}
+ \tl_set:Nn \l__fontspec_nfss_enc_tl {#5}
+ \exp_args:Nx \clist_map_inline:nn {#4}
+ {
+ \tl_clear:N \l__fontspec_size_tl
+ \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed
+
+ \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n ##1 }
+ \l__fontspec_sizing_leftover_clist
+ \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} }
+
+ \str_if_eq:nnTF { #5 } { JY3 } {
+ % "normal"
+ \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl}
+ } {
+ \tl_if_empty:NTF \l_ltj_fontspec_fontname_tate_tl
+ { \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl} }
+ { \__fontspec_load_fontname:n {\l_ltj_fontspec_fontname_tate_tl} }
+ }
+ \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#3} {#6} {}
+ }
+ \bool_set_true:N \l__fontspec_nosc_bool
+ \__fontspec_declare_shapes_normal:nn {#1} {#2}
+ \__fontspec_declare_shape_slanted:nn {#1} {#2}
+ }
+
+\cs_new:Nn \ltj_fontspec_set_family:Nnn {
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \ltj_fontspec_select_font_family:nn
+ \__ltj_orig_fontspec_set_family:Nnn #1 {#2} {#3}
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_orig_fontspec_select_font_family:nn
+}
+\cs_set_eq:NN \__ltj_orig_fontspec_set_family:Nnn \fontspec_set_family:Nnn
+\cs_set_eq:NN \__ltj_orig_fontspec_make_font_shapes:Nnnnn \__fontspec_make_font_shapes:Nnnnn
+\cs_set_eq:NN \__ltj_fontspec_orig_DeclareFontShape \DeclareFontShape
+
+\cs_new:Nn \ltj_fontspec_make_font_shapes:Nnnnn {
+ \group_begin:
+ %% 基底フォント
+ \cs_set_eq:NN \__fontspec_font_set:Nnn \use_none:nnn
+ \cs_set_eq:NN \__fontspec_font_if_null:NT \use_none:nn
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \ltj_fontspec_declare_shape:nnxx
+ \__ltj_orig_fontspec_make_font_shapes:Nnnnn {#1} {#2} {#3} {#4} {#5}
+ %%
+ \ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+ {#4, \l_ltj_fontspec_fontfeat_yoko_clist}{#5} {JY3 }
+ \ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+ {#4, \l_ltj_fontspec_fontfeat_tate_clist}{#5} {JT3}
+ \group_end:
+ }
+
+%%% Altfont 内部処理部
+\cs_new:Nn \ltj_fontspec_make_font_shapes_alt:Nnnnnn {
+ \group_begin:
+ \str_if_eq:nnTF { #6 } { JY3 } {
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \ltj_fontspec_declare_shape_yoko:nnxx
+ }{
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \ltj_fontspec_declare_shape_tate:nnxx
+ }
+ \keys_set_known:nn {fontspec-ltjaltfont-reparse} { #4 }
+ \clist_if_empty:NF \l_ltj_fontspec_altfont_clist {
+ \int_gzero:N \g_ltj_fontspec_altnumber_int
+ \clist_map_inline:Nn \l_ltj_fontspec_altfont_clist {
+ \tl_clear:N \l_ltj_fontspec_altrange_tl
+ \tl_set:Nn \l_ltj_fontspec_altname_tl { #1 }
+ \tl_set:Nn \l_tmpa_tl { #1 }
+
+ \keys_set_known:nxN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 }
+ \l_ltj_fontspec_altfont_leftover_clist
+ \keys_set_known:nn {fontspec-ltjaltfont-reparse} { \exp_after:wN \use:n ##1 }
+
+ \tl_if_empty:NT \l_ltj_fontspec_altrange_tl {
+ \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-norange} { ##1 }
+ } {
+ \bool_if:nTF {
+ \tl_if_eq_p:NN \l_ltj_fontspec_altname_tl \l_tmpa_tl
+ &&
+ \tl_if_empty_p:N \l_ltj_fontspec_altfont_leftover_clist
+ } {
+ \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} { ##1 }
+ } {
+ \__ltj_orig_fontspec_make_font_shapes:Nnnnn
+ { \l_ltj_fontspec_altname_tl } {#2}
+ {#3 _ alt \int_use:N \g_ltj_fontspec_altnumber_int }
+ {#4, \l_ltj_fontspec_altfont_leftover_clist }
+ {#5}
+ \DeclareAlternateKanjiFont
+ { #6 }{ \l_fontspec_family_tl }{#2}{#3}%
+ { #6 }{ \l_fontspec_family_tl }{#2}
+ { #3 _alt \int_use:N \g_ltj_fontspec_altnumber_int }
+ { \l_ltj_fontspec_altrange_tl }
+ \int_gincr:N \g_ltj_fontspec_altnumber_int
+ }
+ }
+ }
+ }
+ \group_end:
+}
+
+
+%%%%%%%% User commands
+\DeclareDocumentCommand \jfontspec { O{} m O{} } {
+ \ltj_fontspec_set_family:Nnn \k@family {#1,#3}{#2}
+ \selectfont
+ \ignorespaces
+}
+
+\DeclareDocumentCommand \setmainjfont { O{} m O{} } {
+ \ltj_fontspec_set_family:Nnn \mcdefault {#1,#3}{#2}
+ \unless\ifltj@disablejfam
+ \DeclareSymbolFont{mincho}{JY3}{\l_fontspec_family_tl}{\mddefault}{n}
+ \SetSymbolFont{mincho}{bold}{JY3}{\l_fontspec_family_tl}{\bfdefault}{n}
+ \fi
+ \normalfont
+}
+
+\DeclareDocumentCommand \setsansjfont { O{} m O{} } {
+ \ltj_fontspec_set_family:Nnn \gtdefault {#1,#3}{#2}
+ \unless\ifltj@disablejfam
+ \DeclareMathAlphabet{\mathgt}{JY3}{\l_fontspec_family_tl}{\mddefault}{n}
+ \fi
+ \normalfont
+}
+
+\DeclareDocumentCommand \newjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \ltj_fontspec_set_family:Nnn
+ \newfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+
+\DeclareDocumentCommand \newjfontface { m O{} m O{} } {
+ \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+
+\clist_new:N \g__ltj_fontspec_default_fontopts_clist
+\prop_new:N \g__ltj_fontspec_fontopts_prop
+\DeclareDocumentCommand \defaultjfontfeatures { t+ o m }
+ {
+ \IfNoValueTF {#2}
+ { \__ltj_fontspec_set_default_features:nn {#1} {#3} }
+ { \__ltj_fontspec_set_font_default_features:nnn {#1} {#2} {#3} }
+ \ignorespaces
+ }
+\cs_new:Nn \__ltj_fontspec_set_default_features:nn
+ {
+ \clist_set_eq:NN \l__ltj_fontspec_tmp_clist \g__fontspec_default_fontopts_clist
+ \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_default_fontopts_clist
+ \__fontspec_set_default_features:nn {#1} {#2}
+ \clist_set_eq:NN \g__ltj_fontspec_default_fontopts_clist \g__fontspec_default_fontopts_clist
+ \clist_set_eq:NN \g__fontspec_default_fontopts_clist \l__ltj_fontspec_tmp_clist
+ }
+\cs_new:Nn \__ltj_fontspec_set_font_default_features:nnn
+ {
+ \prop_set_eq:NN \l__ltj_fontspec_tmp_prop \g__fontspec_fontopts_prop
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+ \__fontspec_set_font_default_features:nnn {#1} {#2} {#3}
+ \prop_set_eq:NN \g__ltj_fontspec_fontopts_prop \g__fontspec_fontopts_prop
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \l__ltj_fontspec_tmp_prop
+ }
+
+\DeclareDocumentCommand \addjfontfeatures {m} {
+ \ltj_fontspec_if_fontspec_font:TF
+ {
+ \group_begin:
+ \tl_set_eq:NN \f@family \k@family
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \ltj_fontspec_select_font_family:nn
+ \addfontfeatures {#1}
+ \group_end:
+ \fontfamily\l_fontspec_family_tl\selectfont
+ }{
+ \msg_warning:nn {luatexja-fontspec} {addjfontfeatures-ignored}
+ }
+ \ignorespaces
+}
+
+\cs_set_eq:NN \addjfontfeature \addjfontfeatures
+
+\prg_new_conditional:Nnn \ltj_fontspec_if_fontspec_font: {TF,T,F}
+{
+ \cs_if_exist:cTF {g__fontspec_ \k@family _prop} \prg_return_true: \prg_return_false:
+}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-26h.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-26h.sty
new file mode 100644
index 0000000000..1472633bb0
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-26h.sty
@@ -0,0 +1,412 @@
+%
+% luatexja-fontspec-26h.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luatexja-fontspec-26h}[2019/05/14 fontspec support of LuaTeX-ja]
+\RequirePackage{l3keys2e}
+\ExplSyntaxOn
+
+%%%%%%%% Change Japanese font family by \rmfamily or not
+\cs_new:Npn \__ltj_fontspec_match_cmd {
+ \renewcommand\jttdefault{\gtdefault}
+ \@ltj@match@familytrue
+ \DeclareDocumentCommand \setmonojfont { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \jttdefault {##1,##3}{##2}
+ \normalfont
+ }
+}
+\bool_if:NT \__ltj_fontspec_match_bool \__ltj_fontspec_match_cmd
+
+%%%%%%%% Messages
+\msg_new:nnn {luatexja-fontspec} {addjfontfeatures-ignored}
+{
+ \string\addjfontfeature (s)~ ignored;\\
+ it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec.
+}
+
+\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-norange}
+{
+ ignored~ sublist~ `#1'~ in~ AltFont~ (no~ range~ is~ specified).
+}
+
+\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly}
+{
+ ignored~ sublist~ `#1'~ in~ AltFont~ (only~ range~ is~ specified).
+}
+
+\cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx}
+
+%%%%%%%% Internal control sequences
+%% Each CS is ltj_fontspec version that corresponds to original CS of fontspec.
+\cs_new:Nn \__ltj_fontspec_define_option:nn {
+ \__fontspec_keys_define_code:nnn {fontspec} {#1} {#2}
+}
+\cs_new:Nn \__ltj_fontspec_define_preparse_external:nn {
+ \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {#1} {#2}
+}
+\cs_new:Nn \__ltj_fontspec_define_altfont_option:nn {
+ \__fontspec_keys_define_code:nnn {fontspec-ltjaltfont} {#1} {#2}
+}
+
+%% Alternate Fonts
+%% Spec: AltFont = {
+%% ...
+%% { Range = <range>, <font features> },
+%% { Range = <range>, Font = <font name>, <font features> },
+%% { Range = <range>, Font = <font name> },
+%% ...
+%% }
+\tl_new:N \l__ltj_fontspec_altname_tl
+\tl_new:N \l__ltj_fontspec_altrange_tl
+\clist_new:N \l__ltj_fontspec_altfont_clist
+\clist_new:N \l__ltj_fontspec_altfont_leftover_clist
+\int_new:N \g__ltj_fontspec_altnumber_int
+
+\__ltj_fontspec_define_altfont_option:nn {Range} {
+ \tl_set:Nn \l__ltj_fontspec_altrange_tl {#1}
+}
+\__ltj_fontspec_define_altfont_option:nn {Font} {
+ \fontspec_complete_fontname:Nn \l__ltj_fontspec_altname_tl {#1}
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {AltFont} {
+ \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {YokoFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFont} {
+ \tl_if_empty:nF {#1} {
+ \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {#1}
+ }
+}
+%%
+\clist_new:N \l__ltj_fontspec_fontfeat_yoko_clist
+\clist_new:N \l__ltj_fontspec_fontfeat_tate_clist
+\tl_new:N \l__ltj_fontspec_fontname_tate_tl
+
+\cs_new:Npn \__ltj_fontspec_DeclareFontFamily #1 #2 #3 {
+ \DeclareKanjiFamily {JY3} {#2} {#3}
+ \DeclareKanjiFamily {JT3} {#2} {#3}
+}
+
+%% save and restore global variable
+\tl_new:N \g__ltj_fontspec_kanji_nfss_family_tl
+\tl_new:N \g__ltj_fontspec_orig_nfss_family_tl
+\seq_new:N \g__ltj_fontspec_kanji_bf_series_seq
+\seq_new:N \g__ltj_fontspec_orig_bf_series_seq
+\clist_new:N \g__ltj_fontspec_kanji_default_fontopts_clist
+\clist_new:N \g__ltj_fontspec_orig_default_fontopts_clist
+
+\cs_new:Nn \__ltj_set_global_variable_for_kanji: {
+ \tl_gset_eq:NN \g__ltj_fontspec_orig_nfss_family_tl \g__fontspec_nfss_family_tl
+ \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_kanji_nfss_family_tl
+ \seq_gset_eq:NN \g__ltj_fontspec_orig_bf_series_seq \g__fontspec_bf_series_seq
+ \seq_gset_eq:NN \g__fontspec_bf_series_seq \g__ltj_fontspec_kanji_bf_series_seq
+ %\seq_gclear:N \g__fontspec_bf_series_seq
+ \clist_set_eq:NN \g__ltj_fontspec_orig_default_fontopts_clist \g__fontspec_default_fontopts_clist
+ \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_kanji_default_fontopts_clist
+}
+
+\cs_new:Nn \__ltj_restore_global_variable: {
+ \tl_gset_eq:NN \g__ltj_fontspec_kanji_nfss_family_tl \g__fontspec_nfss_family_tl
+ \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_orig_nfss_family_tl
+ \seq_gset_eq:NN \g__ltj_fontspec_kanji_bf_series_seq \g__fontspec_bf_series_seq
+ \seq_gset_eq:NN \g__fontspec_bf_series_seq \g__ltj_fontspec_orig_bf_series_seq
+ \clist_set_eq:NN \g__ltj_fontspec_kanji_default_fontopts_clist \g__fontspec_default_fontopts_clist
+ \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_orig_default_fontopts_clist
+}
+
+\cs_set_eq:NN \__ltj_orig_fontspec_select_font_family:nn \__fontspec_select_font_family:nn
+\cs_new_protected:Nn \__ltj_fontspec_select_font_family:nn {
+ \group_begin:
+ \__ltj_fontspec_define_option:nn {NoEmbed} {}
+ \__ltj_fontspec_define_option:nn {AltFont} {
+ \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { ##1 }
+ }
+ \__ltj_fontspec_define_option:nn {CID} {
+ \__fontspec_update_featstr:n {cid=##1}
+ }
+ \__ltj_fontspec_define_option:nn {Kanjiskip} {
+ \str_if_eq_x:nnTF {false} { \str_lower_case:n { ##1 } }{
+ \__fontspec_update_featstr:n {-ltjksp}
+ } {
+ \__fontspec_update_featstr:n {+ltjksp}
+ }
+ }
+ \__ltj_fontspec_define_option:nn {JFM} {
+ \__fontspec_update_featstr:n {jfm=##1}
+ }
+ % vary by shape
+ \__ltj_fontspec_define_option:nn {YokoFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { ##1 }
+ }
+ \__ltj_fontspec_define_option:nn {TateFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { ##1 }
+ }
+ \__ltj_fontspec_define_option:nn {TateFont}
+ {
+ \tl_if_empty:nF {##1} {
+ \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {##1}
+ }
+ }
+ \__ltj_fontspec_define_option:nn {JFM-var} {
+ \__fontspec_update_featstr:n {jfmvar=##1}
+ }
+ \__ltj_fontspec_define_preparse_external:nn {NoEmbed} {
+ \cs_set:Npn \__fontspec_fontname_wrap:n ##1 {psft:##1}
+ }
+
+ %% Omit the warning message
+ %% "OpenType feature 'Kerning=Off' (-kern) not available ..."
+ \keys_define:nn {fontspec-opentype} {
+ Kerning/Off.code:n=\__fontspec_update_featstr:n {-kern}
+ }
+ \clist_set:Nx \g__fontspec_default_fontopts_clist {
+ YokoFeatures = { JFM=\ltj@stdyokojfm }, TateFeatures = { JFM=\ltj@stdtatejfm },
+ Scale=\Cjascale, Kerning=Off, Script=CJK,
+ \g__ltj_fontspec_kanji_default_fontopts_clist
+ }
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+ \cs_set_eq:NN \__fontspec_make_font_shapes:Nnnnn \__ltj_fontspec_make_font_shapes:Nnnnn
+ \cs_set_eq:NN \DeclareFontFamily \__ltj_fontspec_DeclareFontFamily
+ \tl_set:Nn \g_fontspec_encoding_tl {JY3}
+ \__ltj_orig_fontspec_select_font_family:nn{#1}{#2}
+
+ \cs_gset:Npx \__ltj_fontspec_aftergroup {
+ \exp_not:N \tl_set:Nn \exp_not:N \l_fontspec_family_tl { \l_fontspec_family_tl }
+ }
+ \aftergroup \__ltj_fontspec_aftergroup
+ \group_end:
+}
+
+%% declare_shape
+
+\cs_new:Nn \__ltj_fontspec_declare_shape_yoko:nnnn {
+ \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JY3 } { \l__ltj_fontspec_fontfeat_yoko_clist }
+}
+\cs_new:Nn \__ltj_fontspec_declare_shape_tate:nnnn {
+ \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JT3 } { \l__ltj_fontspec_fontfeat_tate_clist }
+}
+\cs_new:Nn \__ltj_fontspec_declare_shape:nnnn {
+ \__ltj_fontspec_declare_shape_yoko:nnnn {#1} {#2} {#3} {#4}
+ \__ltj_fontspec_declare_shape_tate:nnnn {#1} {#2} {#3} {#4}
+}
+\cs_generate_variant:Nn \__ltj_fontspec_declare_shape:nnnn {nnxx}
+\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_yoko:nnnn {nnxx}
+\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_tate:nnnn {nnxx}
+
+\cs_new:Nn \__ltj_fontspec_declare_shape_aux:nnnnnn
+ {
+ \tl_clear:N \l__fontspec_nfss_tl
+ \tl_clear:N \l__fontspec_nfss_sc_tl
+ \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl
+
+ \tl_set:Nn \g_fontspec_encoding_tl {#5}
+ \tl_set:Nn \g__fontspec_nfss_enc_tl {#5}
+ \exp_args:Nx \clist_map_inline:nn {#4}
+ {
+ \tl_clear:N \l__fontspec_size_tl
+ \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed
+
+ \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n ##1 }
+ \l__fontspec_sizing_leftover_clist
+ \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} }
+
+ \cs_if_exist:NTF \__fontspec_load_fontname:Nn
+ { %% >= v2.7
+ \str_if_eq:nnTF { #5 } { JY3 } {
+ % "normal"
+ \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl}
+ } {
+ \tl_if_empty:NTF \l__ltj_fontspec_fontname_tate_tl
+ { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} }
+ { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__ltj_fontspec_fontname_tate_tl} }
+ }
+ } { %% < v2.7
+ \str_if_eq:nnTF { #5 } { JY3 } {
+ % "normal"
+ \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl}
+ } {
+ \tl_if_empty:NTF \l__ltj_fontspec_fontname_tate_tl
+ { \__fontspec_load_fontname:n {\l__fontspec_sizedfont_tl} }
+ { \__fontspec_load_fontname:n {\l__ltj_fontspec_fontname_tate_tl} }
+ }
+ }
+ \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#3} {#6} {}
+ }
+ \bool_set_true:N \l__fontspec_nosc_bool
+ \__fontspec_declare_shapes_normal:nn {#1} {#2}
+ \__fontspec_declare_shape_slanted:nn {#1} {#2}
+ }
+
+\cs_new:Nn \__ltj_fontspec_set_family:Nnn {
+ \__ltj_set_global_variable_for_kanji:
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn
+ \__ltj_orig_fontspec_set_family:Nnn #1 {#2} {#3}
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_orig_fontspec_select_font_family:nn
+ \__ltj_restore_global_variable:
+}
+\cs_set_eq:NN \__ltj_orig_fontspec_set_family:Nnn \fontspec_set_family:Nnn
+\cs_set_eq:NN \__ltj_orig_fontspec_make_font_shapes:Nnnnn \__fontspec_make_font_shapes:Nnnnn
+\cs_set_eq:NN \__ltj_fontspec_orig_DeclareFontShape \DeclareFontShape
+
+\cs_new:Nn \__ltj_fontspec_make_font_shapes:Nnnnn {
+ \group_begin:
+ %% 基底フォント
+ \cs_set_eq:NN \__fontspec_font_set:Nnn \use_none:nnn
+ \cs_set_eq:NN \__fontspec_font_if_null:NT \use_none:nn
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape:nnxx
+ \__ltj_orig_fontspec_make_font_shapes:Nnnnn {#1} {#2} {#3} {#4} {#5}
+ %%
+ \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+ {#4, \l__ltj_fontspec_fontfeat_yoko_clist}{#5} {JY3 }
+ \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+ {#4, \l__ltj_fontspec_fontfeat_tate_clist}{#5} {JT3}
+ \group_end:
+ }
+
+%%% Altfont 内部処理部
+\cs_new:Nn \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {
+ \group_begin:
+ \str_if_eq:nnTF { #6 } { JY3 } {
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_yoko:nnxx
+ }{
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_tate:nnxx
+ }
+ \keys_set_known:nn {fontspec-ltjaltfont-reparse} { #4 }
+ \clist_if_empty:NF \l__ltj_fontspec_altfont_clist {
+ \int_gzero:N \g__ltj_fontspec_altnumber_int
+ \clist_map_inline:Nn \l__ltj_fontspec_altfont_clist {
+ \tl_clear:N \l__ltj_fontspec_altrange_tl
+ \tl_set:Nn \l__ltj_fontspec_altname_tl { #1 }
+ \tl_set:Nn \l_tmpa_tl { #1 }
+
+ \keys_set_known:nxN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 }
+ \l__ltj_fontspec_altfont_leftover_clist
+ \keys_set_known:nn {fontspec-ltjaltfont-reparse} { \exp_after:wN \use:n ##1 }
+
+ \tl_if_empty:NT \l__ltj_fontspec_altrange_tl {
+ \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-norange} { ##1 }
+ } {
+ \bool_if:nTF {
+ \tl_if_eq_p:NN \l__ltj_fontspec_altname_tl \l_tmpa_tl
+ &&
+ \tl_if_empty_p:N \l__ltj_fontspec_altfont_leftover_clist
+ } {
+ \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} { ##1 }
+ } {
+ \__ltj_orig_fontspec_make_font_shapes:Nnnnn
+ { \l__ltj_fontspec_altname_tl } {#2}
+ {#3 _ alt \int_use:N \g__ltj_fontspec_altnumber_int }
+ {#4, \l__ltj_fontspec_altfont_leftover_clist }
+ {#5}
+ \DeclareAlternateKanjiFont
+ { #6 }{ \g__fontspec_nfss_family_tl }{#2}{#3}%
+ { #6 }{ \g__fontspec_nfss_family_tl }{#2}
+ { #3 _alt \int_use:N \g__ltj_fontspec_altnumber_int }
+ { \l__ltj_fontspec_altrange_tl }
+ \int_gincr:N \g__ltj_fontspec_altnumber_int
+ }
+ }
+ }
+ }
+ \group_end:
+}
+
+
+%%%%%%%% User commands
+\DeclareDocumentCommand \jfontspec { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \k@family {#1,#3}{#2}
+ \selectfont
+ \ignorespaces
+}
+
+\DeclareDocumentCommand \setmainjfont { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \mcdefault {#1,#3}{#2}
+ \unless\ifltj@disablejfam
+ \DeclareSymbolFont{mincho}{JY3}{\mcdefault}{\mddefault}{n}
+ \SetSymbolFont{mincho}{bold}{JY3}{\mcdefault}{\bfdefault}{n}
+ \fi
+ \normalfont
+}
+
+\DeclareDocumentCommand \setsansjfont { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \gtdefault {#1,#3}{#2}
+ \unless\ifltj@disablejfam
+ \DeclareMathAlphabet{\mathgt}{JY3}{\gtdefault}{\mddefault}{n}
+ \fi
+ \normalfont
+}
+
+\DeclareDocumentCommand \newjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \newfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+\DeclareDocumentCommand \renewjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \renewfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+\DeclareDocumentCommand \setjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \setfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+
+\DeclareDocumentCommand \newjfontface { m O{} m O{} } {
+ \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+
+\prop_new:N \g__ltj_fontspec_fontopts_prop
+\DeclareDocumentCommand \defaultjfontfeatures { t+ o m }
+ {
+ \IfNoValueTF {#2}
+ { \__ltj_fontspec_set_default_features:nn {#1} {#3} }
+ { \__ltj_fontspec_set_font_default_features:nnn {#1} {#2} {#3} }
+ \ignorespaces
+ }
+\cs_new:Nn \__ltj_fontspec_set_default_features:nn
+ {
+ \__ltj_set_global_variable_for_kanji:
+ \__fontspec_set_default_features:nn {#1} {#2}
+ \__ltj_restore_global_variable:
+ }
+\cs_new:Nn \__ltj_fontspec_set_font_default_features:nnn
+ {
+ \prop_set_eq:NN \l__ltj_fontspec_tmp_prop \g__fontspec_fontopts_prop
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+ \__fontspec_set_font_default_features:nnn {#1} {#2} {#3}
+ \prop_set_eq:NN \g__ltj_fontspec_fontopts_prop \g__fontspec_fontopts_prop
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \l__ltj_fontspec_tmp_prop
+ }
+
+\DeclareDocumentCommand \addjfontfeatures {m} {
+ \__ltj_fontspec_if_fontspec_font:TF
+ {
+ \__ltj_set_global_variable_for_kanji:
+ \group_begin:
+ \tl_set_eq:NN \f@family \k@family
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn
+ \addfontfeatures {#1}
+ \group_end:
+ \kanjifamily\g__fontspec_nfss_family_tl\selectfont
+ \__ltj_restore_global_variable:
+ }{
+ \msg_warning:nn {luatexja-fontspec} {addjfontfeatures-ignored}
+ }
+ \ignorespaces
+}
+
+\cs_set_eq:NN \addjfontfeature \addjfontfeatures
+
+\prg_new_conditional:Nnn \__ltj_fontspec_if_fontspec_font: {TF,T,F}
+{
+ \cs_if_exist:cTF {g__fontspec_fontinfo_ \k@family _prop} \prg_return_true: \prg_return_false:
+}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty
new file mode 100644
index 0000000000..88d6b37b58
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec-27c.sty
@@ -0,0 +1,406 @@
+%
+% luatexja-fontspec-27c.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luatexja-fontspec-27c}[2019/05/14 fontspec support of LuaTeX-ja]
+\RequirePackage{l3keys2e}
+\ExplSyntaxOn
+
+%%%%%%%% Change Japanese font family by \rmfamily or not
+\cs_new:Npn \__ltj_fontspec_match_cmd {
+ \renewcommand\jttdefault{\gtdefault}
+ \@ltj@match@familytrue
+ \DeclareDocumentCommand \setmonojfont { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \jttdefault {##1,##3}{##2}
+ \normalfont
+ }
+}
+\bool_if:NT \__ltj_fontspec_match_bool \__ltj_fontspec_match_cmd
+
+%%%%%%%% Messages
+\msg_new:nnn {luatexja-fontspec} {addjfontfeatures-ignored}
+{
+ \string\addjfontfeature (s)~ ignored;\\
+ it~ cannot~ be~ used~ with~ a~ font~ that~ wasn't~ selected~ by~ luatexja-fontspec.
+}
+
+\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-norange}
+{
+ ignored~ sublist~ `#1'~ in~ AltFont~ (no~ range~ is~ specified).
+}
+
+\msg_new:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly}
+{
+ ignored~ sublist~ `#1'~ in~ AltFont~ (only~ range~ is~ specified).
+}
+
+\cs_generate_variant:Nn \prg_new_conditional:Nnn {Nnx}
+
+%%%%%%%% Internal control sequences
+%% Each CS is ltj_fontspec version that corresponds to original CS of fontspec.
+\cs_new:Nn \__ltj_fontspec_define_option:nn {
+ \__fontspec_keys_define_code:nnn {fontspec} {#1} {#2}
+}
+\cs_new:Nn \__ltj_fontspec_define_preparse_external:nn {
+ \__fontspec_keys_define_code:nnn {fontspec-preparse-external} {#1} {#2}
+}
+\cs_new:Nn \__ltj_fontspec_define_altfont_option:nn {
+ \__fontspec_keys_define_code:nnn {fontspec-ltjaltfont} {#1} {#2}
+}
+
+%% Alternate Fonts
+%% Spec: AltFont = {
+%% ...
+%% { Range = <range>, <font features> },
+%% { Range = <range>, Font = <font name>, <font features> },
+%% { Range = <range>, Font = <font name> },
+%% ...
+%% }
+\tl_new:N \l__ltj_fontspec_altname_tl
+\tl_new:N \l__ltj_fontspec_altrange_tl
+\clist_new:N \l__ltj_fontspec_altfont_clist
+\clist_new:N \l__ltj_fontspec_altfont_leftover_clist
+\int_new:N \g__ltj_fontspec_altnumber_int
+
+\__ltj_fontspec_define_altfont_option:nn {Range} {
+ \tl_set:Nn \l__ltj_fontspec_altrange_tl {#1}
+}
+\__ltj_fontspec_define_altfont_option:nn {Font} {
+ \fontspec_complete_fontname:Nn \l__ltj_fontspec_altname_tl {#1}
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {AltFont} {
+ \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {YokoFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { #1 }
+}
+\__fontspec_keys_define_code:nnn {fontspec-ltjaltfont-reparse} {TateFont} {
+ \tl_if_empty:nF {#1} {
+ \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {#1}
+ }
+}
+%%
+\clist_new:N \l__ltj_fontspec_fontfeat_yoko_clist
+\clist_new:N \l__ltj_fontspec_fontfeat_tate_clist
+\tl_new:N \l__ltj_fontspec_fontname_tate_tl
+
+\cs_new:Npn \__ltj_fontspec_DeclareFontFamily #1 #2 #3 {
+ \DeclareKanjiFamily {JY3} {#2} {#3}
+ \DeclareKanjiFamily {JT3} {#2} {#3}
+}
+
+%% save and restore global variable
+\tl_new:N \g__ltj_fontspec_kanji_nfss_family_tl
+\tl_new:N \g__ltj_fontspec_orig_nfss_family_tl
+\seq_new:N \g__ltj_fontspec_kanji_bf_series_seq
+\seq_new:N \g__ltj_fontspec_orig_bf_series_seq
+\clist_new:N \g__ltj_fontspec_kanji_default_fontopts_clist
+\clist_new:N \g__ltj_fontspec_orig_default_fontopts_clist
+
+\cs_new:Nn \__ltj_set_global_variable_for_kanji: {
+ \tl_gset_eq:NN \g__ltj_fontspec_orig_nfss_family_tl \g__fontspec_nfss_family_tl
+ \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_kanji_nfss_family_tl
+ \seq_gset_eq:NN \g__ltj_fontspec_orig_bf_series_seq \g__fontspec_bf_series_seq
+ \seq_gset_eq:NN \g__fontspec_bf_series_seq \g__ltj_fontspec_kanji_bf_series_seq
+ %\seq_gclear:N \g__fontspec_bf_series_seq
+ \clist_set_eq:NN \g__ltj_fontspec_orig_default_fontopts_clist \g__fontspec_default_fontopts_clist
+ \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_kanji_default_fontopts_clist
+}
+
+\cs_new:Nn \__ltj_restore_global_variable: {
+ \tl_gset_eq:NN \g__ltj_fontspec_kanji_nfss_family_tl \g__fontspec_nfss_family_tl
+ \tl_gset_eq:NN \g__fontspec_nfss_family_tl \g__ltj_fontspec_orig_nfss_family_tl
+ \seq_gset_eq:NN \g__ltj_fontspec_kanji_bf_series_seq \g__fontspec_bf_series_seq
+ \seq_gset_eq:NN \g__fontspec_bf_series_seq \g__ltj_fontspec_orig_bf_series_seq
+ \clist_set_eq:NN \g__ltj_fontspec_kanji_default_fontopts_clist \g__fontspec_default_fontopts_clist
+ \clist_set_eq:NN \g__fontspec_default_fontopts_clist \g__ltj_fontspec_orig_default_fontopts_clist
+}
+
+\cs_set_eq:NN \__ltj_orig_fontspec_select_font_family:nn \__fontspec_select_font_family:nn
+\cs_new_protected:Nn \__ltj_fontspec_select_font_family:nn {
+ \group_begin:
+ \__ltj_fontspec_define_option:nn {NoEmbed} {}
+ \__ltj_fontspec_define_option:nn {AltFont} {
+ \clist_put_right:Nn \l__ltj_fontspec_altfont_clist { ##1 }
+ }
+ \__ltj_fontspec_define_option:nn {CID} {
+ \__fontspec_update_featstr:n {cid=##1}
+ }
+ \__ltj_fontspec_define_option:nn {Kanjiskip} {
+ \str_if_eq_x:nnTF {false} { \str_lower_case:n { ##1 } }{
+ \__fontspec_update_featstr:n {-ltjksp}
+ } {
+ \__fontspec_update_featstr:n {+ltjksp}
+ }
+ }
+ \__ltj_fontspec_define_option:nn {JFM} {
+ \__fontspec_update_featstr:n {jfm=##1}
+ }
+ % vary by shape
+ \__ltj_fontspec_define_option:nn {YokoFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_yoko_clist { ##1 }
+ }
+ \__ltj_fontspec_define_option:nn {TateFeatures} {
+ \clist_put_right:Nn \l__ltj_fontspec_fontfeat_tate_clist { ##1 }
+ }
+ \__ltj_fontspec_define_option:nn {TateFont}
+ {
+ \tl_if_empty:nF {##1} {
+ \fontspec_complete_fontname:Nn \l__ltj_fontspec_fontname_tate_tl {##1}
+ }
+ }
+ \__ltj_fontspec_define_option:nn {JFM-var} {
+ \__fontspec_update_featstr:n {jfmvar=##1}
+ }
+ \__ltj_fontspec_define_preparse_external:nn {NoEmbed} {
+ \cs_set:Npn \__fontspec_fontname_wrap:n ##1 {psft:##1}
+ }
+
+ %% Omit the warning message
+ %% "OpenType feature 'Kerning=Off' (-kern) not available ..."
+ \keys_define:nn {fontspec-opentype} {
+ Kerning/Off.code:n=\__fontspec_update_featstr:n {-kern}
+ }
+ \clist_set:Nx \g__fontspec_default_fontopts_clist {
+ YokoFeatures = { JFM=\ltj@stdyokojfm }, TateFeatures = { JFM=\ltj@stdtatejfm },
+ Scale=\Cjascale, Kerning=Off, Script=CJK,
+ \g__ltj_fontspec_kanji_default_fontopts_clist
+ }
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+ \cs_set_eq:NN \__fontspec_make_font_shapes:Nnnnn \__ltj_fontspec_make_font_shapes:Nnnnn
+ \cs_set_eq:NN \DeclareFontFamily \__ltj_fontspec_DeclareFontFamily
+ \tl_set:Nn \g_fontspec_encoding_tl {JY3}
+ \__ltj_orig_fontspec_select_font_family:nn{#1}{#2}
+
+ \cs_gset:Npx \__ltj_fontspec_aftergroup {
+ \exp_not:N \tl_set:Nn \exp_not:N \l_fontspec_family_tl { \l_fontspec_family_tl }
+ }
+ \aftergroup \__ltj_fontspec_aftergroup
+ \group_end:
+}
+
+%% declare_shape
+
+\cs_new:Nn \__ltj_fontspec_declare_shape_yoko:nnnn {
+ \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JY3 } { \l__ltj_fontspec_fontfeat_yoko_clist }
+}
+\cs_new:Nn \__ltj_fontspec_declare_shape_tate:nnnn {
+ \__ltj_fontspec_declare_shape_aux:nnnnnn {#1} {#2} {#3} {#4} { JT3 } { \l__ltj_fontspec_fontfeat_tate_clist }
+}
+\cs_new:Nn \__ltj_fontspec_declare_shape:nnnn {
+ \__ltj_fontspec_declare_shape_yoko:nnnn {#1} {#2} {#3} {#4}
+ \__ltj_fontspec_declare_shape_tate:nnnn {#1} {#2} {#3} {#4}
+}
+\cs_generate_variant:Nn \__ltj_fontspec_declare_shape:nnnn {nnxx}
+\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_yoko:nnnn {nnxx}
+\cs_generate_variant:Nn \__ltj_fontspec_declare_shape_tate:nnnn {nnxx}
+
+\cs_new:Nn \__ltj_fontspec_declare_shape_aux:nnnnnn
+{
+ \tl_build_begin:N \l__fontspec_nfss_tl
+ \tl_build_begin:N \l__fontspec_nfss_sc_tl
+ \tl_set_eq:NN \l__fontspec_saved_fontname_tl \l_fontspec_fontname_tl
+
+ \tl_set:Nn \g_fontspec_encoding_tl {#5}
+ \tl_set:Nn \g__fontspec_nfss_enc_tl {#5}
+ \exp_args:Nx \clist_map_inline:nn {#4}
+ { \__ltj_fontspec_setup_single_size:nnn {#3} {#6} {##1} }
+ \tl_build_end:N \l__fontspec_nfss_tl
+ \tl_build_end:N \l__fontspec_nfss_sc_tl
+
+ \bool_set_true:N \l__fontspec_nosc_bool
+ \__fontspec_declare_shapes_normal:nn {#1} {#2}
+ \__fontspec_declare_shape_slanted:nn {#1} {#2}
+}
+
+\cs_new:Nn \__ltj_fontspec_setup_single_size:nnn
+{
+ \tl_clear:N \l__fontspec_size_tl
+ \tl_set_eq:NN \l__fontspec_sizedfont_tl \l__fontspec_saved_fontname_tl % in case not spec'ed
+
+ \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #3 }
+ \l__fontspec_sizing_leftover_clist
+ \tl_if_empty:NT \l__fontspec_size_tl { \__fontspec_error:n {no-size-info} }
+
+ \str_if_eq:nnTF { \g__fontspec_nfss_enc_tl } { JY3 } {
+ % "normal"
+ \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl}
+ } {
+ \tl_if_empty:NTF \l__ltj_fontspec_fontname_tate_tl
+ { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__fontspec_sizedfont_tl} }
+ { \__fontspec_load_fontname:Nn \l_fontspec_fontname_tl {\l__ltj_fontspec_fontname_tate_tl} }
+ }
+ \__fontspec_setup_nfss:Nnnn \l__fontspec_nfss_tl {#1} {#2} {}
+}
+
+\cs_new:Nn \__ltj_fontspec_set_family:Nnn {
+ \__ltj_set_global_variable_for_kanji:
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn
+ \__ltj_orig_fontspec_set_family:Nnn #1 {#2} {#3}
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_orig_fontspec_select_font_family:nn
+ \__ltj_restore_global_variable:
+}
+\cs_set_eq:NN \__ltj_orig_fontspec_set_family:Nnn \fontspec_set_family:Nnn
+\cs_set_eq:NN \__ltj_orig_fontspec_make_font_shapes:Nnnnn \__fontspec_make_font_shapes:Nnnnn
+\cs_set_eq:NN \__ltj_fontspec_orig_DeclareFontShape \DeclareFontShape
+
+\cs_new:Nn \__ltj_fontspec_make_font_shapes:Nnnnn {
+ \group_begin:
+ %% 基底フォント
+ \cs_set_eq:NN \__fontspec_font_set:Nnn \use_none:nnn
+ \cs_set_eq:NN \__fontspec_font_if_null:NT \use_none:nn
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape:nnxx
+ \__ltj_orig_fontspec_make_font_shapes:Nnnnn {#1} {#2} {#3} {#4} {#5}
+ %%
+ \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+ {#4, \l__ltj_fontspec_fontfeat_yoko_clist}{#5} {JY3 }
+ \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {#1}{#2}{#3}
+ {#4, \l__ltj_fontspec_fontfeat_tate_clist}{#5} {JT3}
+ \group_end:
+ }
+
+%%% Altfont 内部処理部
+\cs_new:Nn \__ltj_fontspec_make_font_shapes_alt:Nnnnnn {
+ \group_begin:
+ \str_if_eq:nnTF { #6 } { JY3 } {
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_yoko:nnxx
+ }{
+ \cs_set_eq:NN \__fontspec_declare_shape:nnxx \__ltj_fontspec_declare_shape_tate:nnxx
+ }
+ \keys_set_known:nn {fontspec-ltjaltfont-reparse} { #4 }
+ \clist_if_empty:NF \l__ltj_fontspec_altfont_clist {
+ \int_gzero:N \g__ltj_fontspec_altnumber_int
+ \clist_map_inline:Nn \l__ltj_fontspec_altfont_clist {
+ \tl_clear:N \l__ltj_fontspec_altrange_tl
+ \tl_set:Nn \l__ltj_fontspec_altname_tl { #1 }
+ \tl_set:Nn \l_tmpa_tl { #1 }
+
+ \keys_set_known:nxN {fontspec-ltjaltfont} { \exp_after:wN \use:n ##1 }
+ \l__ltj_fontspec_altfont_leftover_clist
+ \keys_set_known:nn {fontspec-ltjaltfont-reparse} { \exp_after:wN \use:n ##1 }
+
+ \tl_if_empty:NT \l__ltj_fontspec_altrange_tl {
+ \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-norange} { ##1 }
+ } {
+ \bool_if:nTF {
+ \tl_if_eq_p:NN \l__ltj_fontspec_altname_tl \l_tmpa_tl
+ &&
+ \tl_if_empty_p:N \l__ltj_fontspec_altfont_leftover_clist
+ } {
+ \msg_warning:nnn {luatexja-fontspec} {altfont-ignored-by-rangeonly} { ##1 }
+ } {
+ \__ltj_orig_fontspec_make_font_shapes:Nnnnn
+ { \l__ltj_fontspec_altname_tl } {#2}
+ {#3 _ alt \int_use:N \g__ltj_fontspec_altnumber_int }
+ {#4, \l__ltj_fontspec_altfont_leftover_clist }
+ {#5}
+ \DeclareAlternateKanjiFont
+ { #6 }{ \g__fontspec_nfss_family_tl }{#2}{#3}%
+ { #6 }{ \g__fontspec_nfss_family_tl }{#2}
+ { #3 _alt \int_use:N \g__ltj_fontspec_altnumber_int }
+ { \l__ltj_fontspec_altrange_tl }
+ \int_gincr:N \g__ltj_fontspec_altnumber_int
+ }
+ }
+ }
+ }
+ \group_end:
+}
+
+
+%%%%%%%% User commands
+\DeclareDocumentCommand \jfontspec { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \k@family {#1,#3}{#2}
+ \selectfont
+ \ignorespaces
+}
+
+\DeclareDocumentCommand \setmainjfont { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \mcdefault {#1,#3}{#2}
+ \unless\ifltj@disablejfam
+ \DeclareSymbolFont{mincho}{JY3}{\mcdefault}{\mddefault}{n}
+ \SetSymbolFont{mincho}{bold}{JY3}{\mcdefault}{\bfdefault}{n}
+ \fi
+ \normalfont
+}
+
+\DeclareDocumentCommand \setsansjfont { O{} m O{} } {
+ \__ltj_fontspec_set_family:Nnn \gtdefault {#1,#3}{#2}
+ \unless\ifltj@disablejfam
+ \DeclareMathAlphabet{\mathgt}{JY3}{\gtdefault}{\mddefault}{n}
+ \fi
+ \normalfont
+}
+
+\DeclareDocumentCommand \newjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \newfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+\DeclareDocumentCommand \renewjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \renewfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+\DeclareDocumentCommand \setjfontfamily { m O{} m O{} } {
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_fontspec_set_family:Nnn
+ \setfontfamily #1 [#2,#4] {#3}
+ \cs_set_eq:NN \fontspec_set_family:Nnn \__ltj_orig_fontspec_set_family:Nnn
+}
+
+\DeclareDocumentCommand \newjfontface { m O{} m O{} } {
+ \newjfontfamily #1 [ BoldFont={},ItalicFont={},SmallCapsFont={},#2,#4 ] {#3}
+}
+
+\prop_new:N \g__ltj_fontspec_fontopts_prop
+\DeclareDocumentCommand \defaultjfontfeatures { t+ o m }
+ {
+ \IfNoValueTF {#2}
+ { \__ltj_fontspec_set_default_features:nn {#1} {#3} }
+ { \__ltj_fontspec_set_font_default_features:nnn {#1} {#2} {#3} }
+ \ignorespaces
+ }
+\cs_new:Nn \__ltj_fontspec_set_default_features:nn
+ {
+ \__ltj_set_global_variable_for_kanji:
+ \__fontspec_set_default_features:nn {#1} {#2}
+ \__ltj_restore_global_variable:
+ }
+\cs_new:Nn \__ltj_fontspec_set_font_default_features:nnn
+ {
+ \prop_set_eq:NN \l__ltj_fontspec_tmp_prop \g__fontspec_fontopts_prop
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \g__ltj_fontspec_fontopts_prop
+ \__fontspec_set_font_default_features:nnn {#1} {#2} {#3}
+ \prop_set_eq:NN \g__ltj_fontspec_fontopts_prop \g__fontspec_fontopts_prop
+ \prop_set_eq:NN \g__fontspec_fontopts_prop \l__ltj_fontspec_tmp_prop
+ }
+
+\DeclareDocumentCommand \addjfontfeatures {m} {
+ \__ltj_fontspec_if_fontspec_font:TF
+ {
+ \__ltj_set_global_variable_for_kanji:
+ \group_begin:
+ \tl_set_eq:NN \f@family \k@family
+ \cs_set_eq:NN \__fontspec_select_font_family:nn \__ltj_fontspec_select_font_family:nn
+ \addfontfeatures {#1}
+ \group_end:
+ \kanjifamily\g__fontspec_nfss_family_tl\selectfont
+ \__ltj_restore_global_variable:
+ }{
+ \msg_warning:nn {luatexja-fontspec} {addjfontfeatures-ignored}
+ }
+ \ignorespaces
+}
+
+\cs_set_eq:NN \addjfontfeature \addjfontfeatures
+
+\prg_new_conditional:Nnn \__ltj_fontspec_if_fontspec_font: {TF,T,F}
+{
+ \cs_if_exist:cTF {g__fontspec_fontinfo_ \k@family _prop} \prg_return_true: \prg_return_false:
+}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty
new file mode 100644
index 0000000000..e98fbc7b95
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-fontspec.sty
@@ -0,0 +1,60 @@
+%
+% luatexja-fontspec.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luatexja-fontspec}[2019/03/20 fontspec support of LuaTeX-ja]
+\RequirePackage{l3keys2e,luatexja}
+\ExplSyntaxOn
+
+\cs_if_exist:NF \Cjascale {
+ %% Default scale value for jfont.
+ \group_begin:
+ \fontsize{16}{16}\selectfont
+ \cs_gset:Npx \Cjascale { \fp_to_decimal:n {\zw / 16} }
+ \group_end:
+}
+
+\bool_new:N \__ltj_fontspec_match_bool
+\keys_define:nn { luatexja-fontspec }
+ {
+ match .bool_set:N = \__ltj_fontspec_match_bool,
+ match .default:n = true,
+ pass .code:n = \PassOptionsToPackage{#1} {fontspec},
+ % 互換性のために残したオプション
+ scale .code:n = \gdef\Cjascale{#1},
+ unknown .code:n = \PassOptionsToPackage { \l_keys_key_tl } {fontspec},
+ }
+\ProcessKeysOptions{ luatexja-fontspec }
+
+\RequirePackage{fontspec}[2017/01/01]% v2.5c
+\@ifpackagelater{fontspec}{2018/07/29}%
+ {\@ifpackagelater{fontspec}{2019/03/15}%
+ {\RequirePackage{luatexja-fontspec-27c}} % v2.7c
+ {\RequirePackage{luatexja-fontspec-26h}}}% v2.6h
+ {\RequirePackage{luatexja-fontspec-25c}} % v2.5c
+
+\ExplSyntaxOff
+%%%%%%%% Now we completely ignore kanjifont definition file.
+\def\@ltj@use@fd{false}
+
+% We must redefine \try@load@fontshape to ignore kanjifont definitions at all.
+\def\try@load@fontshape{%
+ \expandafter
+ \ifx\csname \f@encoding+\f@family\endcsname\relax
+ \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}%
+\ifin@\else % Alphabetic font
+ \@font@info{Try loading font information for \f@encoding+\f@family}%
+ \global\expandafter\let
+ \csname\f@encoding+\f@family\endcsname\@empty
+ \nfss@catcodes
+ \let\nfss@catcodes\relax
+ \edef\reserved@a{%
+ \lowercase{%
+ \noexpand\InputIfFileExists{\f@encoding\f@family.fd}}}%
+ \reserved@a\relax
+ {\@input@{\f@encoding\f@family.fd}}%
+\fi
+ \fi}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-otf.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-otf.sty
new file mode 100644
index 0000000000..082468b97b
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-otf.sty
@@ -0,0 +1,205 @@
+%
+% luatexja-otf.sty
+%
+
+%% Avoid multiple loading.
+\csname\if11luatexjaotfLoaded\fi\endcsname
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode33=\the\catcode33%
+\catcode35=\the\catcode35%
+\catcode40=\the\catcode40%
+\catcode41=\the\catcode41%
+\catcode42=\the\catcode42%
+\catcode43=\the\catcode43%
+\catcode44=\the\catcode44%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode58=\the\catcode58%
+\catcode59=\the\catcode59%
+\catcode60=\the\catcode60%
+\catcode61=\the\catcode61%
+\catcode62=\the\catcode62%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\catcode94=\the\catcode94%
+\catcode95=\the\catcode95%
+\catcode126=\the\catcode126%
+\endlinechar=\the\endlinechar
+\relax}
+\catcode32=10 %< >
+\catcode33=12 %<">
+\catcode35=6 %<#>
+\catcode40=12 %<(>
+\catcode41=12 %<)>
+\catcode42=12 %<*>
+\catcode43=12 %<+>
+\catcode44=12 %<,>
+\catcode45=12 %<->
+\catcode46=12 %<.>
+\catcode58=12 %<:>
+\catcode59=12 %<;>
+\catcode60=12 %<<>
+\catcode61=12 %<=>
+\catcode62=12 %<>>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\catcode94=7 %<^>
+\catcode95=8 %<_>
+\catcode126=13 %<~>
+\endlinechar=-1 %
+
+\edef\ltj@otf@AtEnd{\x
+ \noexpand\let\noexpand\ltj@otf@AtEnd\relax}
+\def\luatexjaotfLoaded{\endinput}
+
+%% Check if LaTeX is used.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax %<*!LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iffalse\endcsname
+\else %<*LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iftrue\endcsname
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{luatexja-otf}[2017/05/20]
+\fi %</LaTeX>
+
+% Load core module if not yet.
+\ifx\luatexjacoreLoaded\@undefined
+ \ifltj@in@latex %<*LaTeX>
+ \RequirePackage{luatexja}
+ \else %<*!LaTeX>
+ \input luatexja.sty %
+ \fi %</LaTeX>
+\fi
+
+%% When environment check fails, exit now.
+\ifx\LuaTeXjaAvailable\@undefined
+ \ltj@otf@AtEnd
+\expandafter\endinput\fi\relax
+
+%%------------------
+%! Main part of luatexja-otf
+\RequireLuaTeXjaSubmodule{otf}
+
+\newcount\ltj@tempcnta
+
+\protected\def\CID#1{\ifvmode\leavevmode\fi\ltj@tempcnta#1\relax\directlua{luatexja.otf.cid(\the\ltj@tempcnta)}\relax}
+
+%% \UTF compatible with the OTF package for pLaTeX
+\protected\def\UTF#1{\ifvmode\leavevmode\fi\directlua{luatexja.otf.utf(0x#1)}}
+
+%% Load ajmacros
+\ifltj@in@latex %<*LaTeX>
+ \RequirePackage{luatexja-ajmacros}
+\else %<*!LaTeX>
+ \input luatexja-ajmacros.sty %
+ % \bou is defined in lltjext, \mbox is defined in LaTeX kernel
+ \def\boutenchar{\char\euc"A1A2}%"
+ \def\bou#1{\ifvmode\leavevmode\fi\@bou#1\end}
+ \def\@bou#1{%
+ \ifx#1\end \let\ltj@@next=\relax
+ \else
+ \ifnum\ltjgetparameter{direction}=3\relax
+ \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
+ \vss\moveleft0.2\zw\hbox{\yoko\boutenchar}\nointerlineskip
+ \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
+ \else
+ \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
+ \vss\moveleft-0.2\zw\hbox{\boutenchar}\nointerlineskip
+ \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
+ \fi
+ \let\ltj@@next=\@bou
+ \fi\ltj@@next}
+ \long\def\mbox#1{\leavevmode\hbox{#1}}
+\fi %</LaTeX>
+
+% macros from otf.sty
+%for literature
+\protected\def\ajKunoji{%
+ \ifnum\ltjgetparameter{direction}=3 \mbox{\UTF{3033}\UTF{3035}}\else
+ \@PackageError{luatexja-otf}{A TATE character in YOKO mode!}{Change a direction to TATE.}%2003/03/12
+ \fi}
+\protected\def\ajKunojiwithBou{%
+ \ifnum\ltjgetparameter{direction}=3 \mbox{\bou{\mbox{\UTF{3033}}}\bou{\mbox{\UTF{3035}}}}\else
+ \@PackageError{luatexja-otf}{A TATE character in YOKO mode!}{Change a direction to TATE.}%2003/03/12
+ \fi}
+\protected\def\ajDKunoji{%
+ \ifnum\ltjgetparameter{direction}=3 \mbox{\UTF{3034}\UTF{3035}}\else
+ \@PackageError{luatexja-otf}{A TATE character in YOKO mode!}{Change a direction to TATE.}%2003/03/12
+ \fi}
+\protected\def\ajDKunojiwithBou{%
+ \ifnum\ltjgetparameter{direction}=3 \mbox{\bou{\mbox{\UTF{3034}}}\bou{\mbox{\UTF{3035}}}}\else
+ \@PackageError{luatexja-otf}{A TATE character in YOKO mode!}{Change a direction to TATE.}%2003/03/12
+ \fi}
+\protected\def\ajNinoji{\CID{12106}}
+\protected\def\ajvarNinoji{%
+ \ifnum\ltjgetparameter{direction}=3 \CID{12107}\else
+ \@PackageError{luatexja-otf}{A TATE character in YOKO mode!}{Change a direction to TATE.}%2003/03/12
+ \fi}
+\protected\def\ajYusuriten{%
+ \ifnum\ltjgetparameter{direction}=3 \CID{16193}\else
+ \@PackageError{luatexja-otf}{A TATE character in YOKO mode!}{Change a direction to TATE.}%2003/03/12
+ \fi}
+\protected\def\ajMasu{\UTF{303c}}
+\protected\def\ajYori{\UTF{309f}}
+\protected\def\ajKoto{\UTF{30ff}}
+\protected\def\ajUta{\UTF{303d}}
+%dingbats
+\protected\def\ajCommandKey{\UTF{2318}}
+\protected\def\ajReturnKey{\UTF{23ce}}
+\protected\def\ajCheckmark{\UTF{2713}}
+\protected\def\ajVisibleSpace{\UTF{2423}}
+\protected\def\ajSenteMark{\UTF{2617}}
+\protected\def\ajGoteMark{\UTF{2616}}
+\protected\def\ajClub{\UTF{2663}}
+\protected\def\ajHeart{\UTF{2661}}
+\protected\def\ajSpade{\UTF{2660}}
+\protected\def\ajDiamond{\UTF{2662}}
+\protected\def\ajvarClub{\UTF{2667}}
+\protected\def\ajvarHeart{\UTF{2665}}
+\protected\def\ajvarSpade{\UTF{2664}}
+\protected\def\ajvarDiamond{\UTF{2666}}
+\protected\def\ajPhone{\UTF{260e}}
+\protected\def\ajPostal{\UTF{3020}}
+\protected\def\ajvarPostal{\UTF{3036}}
+\protected\def\ajSun{\UTF{2600}}
+\protected\def\ajCloud{\UTF{2601}}
+\protected\def\ajUmbrella{\UTF{2602}}
+\protected\def\ajSnowman{\UTF{2603}}
+\protected\def\ajJIS{\UTF{3004}}
+\protected\def\ajJAS{\CID{12088}}
+\protected\def\ajBall{\CID{12097}}
+\protected\def\ajHotSpring{\UTF{2668}}
+\protected\def\ajWhiteSesame{\UTF{fe46}}
+\protected\def\ajBlackSesame{\UTF{fe45}}
+\protected\def\ajWhiteFlorette{\UTF{2740}}
+\protected\def\ajBlackFlorette{\UTF{273f}}
+\protected\def\ajRightBArrow{\CID{8206}}
+\protected\def\ajLeftBArrow{\CID{8207}}
+\protected\def\ajUpBArrow{\CID{8208}}
+\protected\def\ajDownBArrow{\CID{8209}}
+\protected\def\ajRightHand{\CID{8219}}
+\protected\def\ajLeftHand{\CID{8220}}
+\protected\def\ajUpHand{\CID{8221}}
+\protected\def\ajDownHand{\CID{8222}}
+\protected\def\ajRightScissors{\CID{12176}}
+\protected\def\ajLeftScissors{\CID{12175}}
+\protected\def\ajUpScissors{\CID{12177}}
+\protected\def\ajDownScissors{\CID{12178}}
+\protected\def\ajRightWArrow{\CID{12197}}
+\protected\def\ajLeftWArrow{\CID{12196}}
+\protected\def\ajUpWArrow{\CID{12198}}
+\protected\def\ajDownWArrow{\CID{12199}}
+\protected\def\ajRightDownArrow{\CID{12202}}
+\protected\def\ajLeftDownArrow{\CID{12203}}
+\protected\def\ajLeftUpArrow{\CID{12204}}
+\protected\def\ajRightUpArrow{\CID{12205}}
+
+%%------------------ all done
+\ltj@otf@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty
new file mode 100644
index 0000000000..2eb38c8384
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-preset.sty
@@ -0,0 +1,706 @@
+% luatexja-preset.sty
+\ProvidesPackage{luatexja-preset}[2019/03/26 Japanese font presets]
+
+\RequirePackage{expl3,l3keys2e}
+\RequirePackage{luatexja}
+\ExplSyntaxOn
+
+%% messages
+\msg_new:nnn { luatexja-preset }{ ltj-fontspec }{
+ The~ luatexja-fontspec~ package~ is~ loaded~ already.~
+ Hence~ we~ ignore~ `nfssonly'~option.
+}
+\msg_new:nnn { luatexja-preset }{ no-font }{
+ Font~ #1~ (#2)~ is~ not~found.~ Hence~ I~ substitute~ #3~ (#4)~ for~ it.
+}
+\msg_new:nnn { luatexja-preset }{ scale }{
+ Japanese~fonts~will~be~scaled~by~#1.
+}
+
+\msg_new:nnn { luatexja-preset }{ exist-preset-nooverwrite }{
+ The~ preset~ `#1'~ is~ already~ defined.~
+ To~ redefine~ this~ preset,~ use~ \str_use:N \c_backslash_str ltjnewpreset*~ instead.
+}
+\msg_new:nnn { luatexja-preset }{ exist-preset-overwrite }{
+ The~ preset~ `#1'~ is~ redefined.
+}
+
+\msg_new:nnn { luatexja-preset }{ illegal-preset-name }{
+ The~ preset~ `#1'~ cannot~ be~ defined,~
+ since~ the~ luatexja-preset~ package~ an~ option~ with~ the~ same~ name.
+}
+
+\seq_new:N \g__ltjpreset_presets_seq
+
+\keys_define:nn { luatexja-preset }{
+ unknown .code:n =
+ \keys_set_known:noN { ltjpreset-presets } { \tl_use:N \l_keys_tl } \l_tmpa_tl
+ \tl_if_empty:NT \l_tmpa_tl {
+ \PassOptionsToPackage { \l_tmpa_tl } { luatexja-fontspec }
+ },
+ scale .code:n = \gdef\Cjascale{#1},
+ match .code: n =
+ \renewcommand\jttdefault{\gtdefault}\@ltj@match@familytrue
+ \PassOptionsToPackage { match } { luatexja-fontspec },
+ match .value_forbidden:n = true,
+ __custom .bool_set:N = \g__ltjpreset_custom_bool, __custom .groups:n = { preset },
+ __office .bool_set:N = \g__ltjpreset_office_bool, __office .groups:n = { preset },
+ __noembed .bool_set:N = \g__ltjpreset_noembed_bool, __noembed .groups:n = { preset },
+}
+\cs_new:Nn \__ltjpreset_declare_option:nn {
+ \keys_define:nn { luatexja-preset }{
+ #1 .code:n = { #2 },
+ #1 .value_forbidden:n = true
+ }
+}
+\cs_new:Nn \ltjpreset_declare_preset:nn {
+ \keys_define:nn { luatexja-preset }{
+ #1 .meta:n = { #2 },
+ #1 .value_forbidden:n = true, #1 .groups:n = { preset },
+ }
+ \seq_put_right:Nn \g__ltjpreset_presets_seq { #1 }
+}
+\cs_generate_variant:Nn \ltjpreset_declare_preset:nn {nx}
+\cs_new:Nn \__ltjpreset_declare_bool_option:nn {
+ \bool_new:c { g__ltjpreset_#1_bool }
+ \bool_set_false:c { g__ltjpreset_#1_bool }
+ \keys_define:nn { luatexja-preset }{
+ #1 .bool_set:c = { g__ltjpreset_#1_bool },
+ #2 .bool_set_inverse:c = { g__ltjpreset_#1_bool },
+ #1 .default:n = true, #2 .default:n = true,
+ }
+}
+
+%%%%%%%% bool options
+\__ltjpreset_declare_bool_option:nn { nfssonly }{ fontspec }
+\__ltjpreset_declare_bool_option:nn { bold }{ nobold }
+\__ltjpreset_declare_bool_option:nn { expert }{ noexpert }
+\__ltjpreset_declare_bool_option:nn { deluxe }{ nodeluxe }
+
+% JFM
+\tl_new:N \__ltjpreset_use_jfm_yoko_tl % 使用する JFM(横)
+\tl_set:Nn \__ltjpreset_use_jfm_yoko_tl {\ltj@stdyokojfm}
+\tl_new:N \__ltjpreset_use_jfm_tate_tl % 使用する JFM(縦)
+\tl_set:Nn \__ltjpreset_use_jfm_tate_tl {\ltj@stdtatejfm}
+\__ltjpreset_declare_option:nn{jis}{\tl_set:Nn \__ltjpreset_use_jfm_yoko_tl {jis}} % jis
+\__ltjpreset_declare_option:nn{ujis}{\tl_set:Nn \__ltjpreset_use_jfm_yoko_tl {ujis}} % ujis
+
+% 漢字字形
+\tl_new:N \l__ltjpreset_kanji_shape_tl
+\__ltjpreset_declare_option:nn{90jis}{ \tl_set:Nn \l__ltjpreset_kanji_shape_tl { , CJKShape=JIS1990 }} % 90jis
+\__ltjpreset_declare_option:nn{jis90}{ \tl_set:Nn \l__ltjpreset_kanji_shape_tl { , CJKShape=JIS1990 }} % 90jis
+\__ltjpreset_declare_option:nn{jis2004}{\tl_set:Nn \l__ltjpreset_kanji_shape_tl { , CJKShape=JIS2004 }} % jis2004
+\__ltjpreset_declare_option:nn{2004jis}{\tl_set:Nn \l__ltjpreset_kanji_shape_tl { , CJKShape=JIS2004 }} % jis2004
+
+% font preset
+\prop_new:N \g__ltjpreset_font_prop
+\keys_define:nn { luatexja-preset } {
+ mc .code:n =
+ \prop_put:Nnn \g__ltjpreset_font_prop { mc-l } {#1}
+ \prop_put:Nnn \g__ltjpreset_font_prop { mc-m } {#1}
+ \prop_put:Nnn \g__ltjpreset_font_prop { mc-bx } {#1},
+ mc .groups:n = { preset }, mc .value_required:n = true,
+ gt .code:n =
+ \prop_put:Nnn \g__ltjpreset_font_prop { gt-u } {#1}
+ \prop_put:Nnn \g__ltjpreset_font_prop { gt-d } {#1}
+ \prop_put:Nnn \g__ltjpreset_font_prop { gt-bx } {#1}
+ \prop_put:Nnn \g__ltjpreset_font_prop { gt-eb } {#1},
+ gt-m .code:n = % gtfamily , medium series
+ \prop_put:Nnn \g__ltjpreset_font_prop { gt-u } {#1}
+ \prop_put:Nnn \g__ltjpreset_font_prop { gt-d } {#1},
+ % gt-d, gt-u は隠し
+ gt .groups:n = { preset }, gt .value_required:n = true,
+ gt-m .groups:n = { preset }, gt-m .value_required:n = true,
+}
+\cs_set:Nn \ltjpreset_define_preset_prop:n {
+ \keys_define:nn { luatexja-preset } {
+ #1 .code:n = \prop_put:Non \g__ltjpreset_font_prop { #1 } { ##1 },
+ #1 .groups:n = { preset }, #1 .value_required:n = true,
+ }
+}
+\ltjpreset_define_preset_prop:n { mc-l }
+\ltjpreset_define_preset_prop:n { mc-m }
+\ltjpreset_define_preset_prop:n { mc-bx }
+\ltjpreset_define_preset_prop:n { gt-u }
+\ltjpreset_define_preset_prop:n { gt-d }
+\ltjpreset_define_preset_prop:n { gt-bx }
+\ltjpreset_define_preset_prop:n { gt-eb}
+\ltjpreset_define_preset_prop:n { mg-m }
+
+\cs_new:Nn \__ltjpreset_set_uni:nn {
+ mc = #1, gt = #2, mc-bx = #2, mg-m = #2,
+ __custom = false, __office = false, __noembed = false,
+}
+\cs_new:Npn \__ltjpreset_set_office:nn #1 #2{
+ mc = #1, mc-bx = HGMinchoE ,
+ gt-d = HGGothicM , gt-bx = HGGothicE ,
+ gt-u = #2 , gt-eb = HGSoeiKakugothicUB ,
+ mg-m = HGMaruGothicMPRO,
+ __custom = false, __office = true, __noembed = false,
+}
+
+%%%%%%%% プリセット達
+
+% カスタム指定
+ \keys_define:nn { luatexja-preset }{
+ custom .meta:n = { #1, __custom = true, },
+ custom .value_required:n = true,
+ jfm_yoko .tl_set:N = \__ltjpreset_use_jfm_yoko_tl,
+ jfm_tate .tl_set:N = \__ltjpreset_use_jfm_tate_tl,
+}
+
+% 小塚 (Adobe)
+%% Pro
+\ltjpreset_declare_preset:nx{kozuka-pro}{
+ mc-m = KozMinPro-Regular, mc-bx = KozMinPro-Bold,
+ gt-d = KozGoPro-Regular, gt-bx = KozGoPro-Bold,
+ gt-u = KozGoPro-Medium, gt-eb = KozGoPro-Heavy,
+ mg-m = KozGoPro-Heavy, mc-l = KozMinPro-Light,
+ __custom = false, __office = false, __noembed = false,
+}
+%% Pr6
+\ltjpreset_declare_preset:nx{kozuka-pr6}{
+ mc-m = KozMinProVI-Regular, mc-bx = KozMinProVI-Bold,
+ gt-d = KozGoProVI-Regular, gt-bx = KozGoProVI-Bold,
+ gt-u = KozGoProVI-Medium, gt-eb = KozGoProVI-Heavy,
+ mg-m = KozGoProVI-Heavy, mc-l = KozMinProVI-Light,
+ __custom = false, __office = false, __noembed = false,
+}
+%% Pr6N
+\ltjpreset_declare_preset:nx{kozuka-pr6n}{
+ mc-m = KozMinPr6N-Regular, mc-bx = KozMinPr6N-Bold,
+ gt-d = KozGoPr6N-Regular, gt-bx = KozGoPr6N-Bold,
+ gt-u = KozGoPr6N-Medium, gt-eb = KozGoPr6N-Heavy,
+ mg-m = KozGoPr6N-Heavy, mc-l = KozMinPr6N-Light,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% ヒラギノ (OSX)
+\ltjpreset_declare_preset:nx{hiragino-pro}{
+ mc-m = HiraMinPro-W3, mc-bx = HiraMinPro-W6,
+ gt-d = HiraKakuPro-W3, gt-bx = HiraKakuPro-W6,
+ gt-u = HiraKakuPro-W6, gt-eb = HiraKakuStd-W8,
+ mg-m = HiraMaruPro-W4, mc-l = HiraMinPro-W2,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{hiragino-pron}{
+ mc-m = HiraMinProN-W3, mc-bx = HiraMinProN-W6,
+ gt-d = HiraKakuProN-W3, gt-bx = HiraKakuProN-W6,
+ gt-u = HiraKakuProN-W6, gt-eb = HiraKakuStdN-W8,
+ mg-m = HiraMaruProN-W4, mc-l = HiraMinProN-W2,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% モリサワ
+\ltjpreset_declare_preset:nx{bizud}{
+ mc = BIZ-UDMinchoM.ttc,
+ gt-d = BIZ-UDGothicR.ttc, gt-bx = BIZ-UDGothicB.ttc,
+ gt-u = BIZ-UDGothicR.ttc, gt-eb = BIZ-UDGothicB.ttc,
+ mg-m = BIZ-UDGothicB.ttc,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{morisawa-pro}{
+ mc = A-OTF-RyuminPro-Light.otf, mc-bx = A-OTF-FutoMinA101Pro-Bold.otf,
+ gt-d = A-OTF-GothicBBBPro-Medium.otf , gt-bx = A-OTF-FutoGoB101Pro-Bold.otf,
+ gt-u = A-OTF-GothicBBBPro-Medium.otf , gt-eb = A-OTF-MidashiGoPro-MB31.otf,
+ mg-m = A-OTF-Jun101Pro-Light.otf,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{morisawa-pr6n}{
+ mc = A-OTF-RyuminPr6N-Light.otf, mc-bx = A-OTF-FutoMinA101Pr6N-Bold.otf,
+ gt-d = A-OTF-GothicBBBPr6N-Medium.otf , gt-bx = A-OTF-FutoGoB101Pr6N-Bold.otf,
+ gt-u = A-OTF-GothicBBBPr6N-Medium.otf , gt-eb = A-OTF-MidashiGoPr6N-MB31.otf,
+ mg-m = A-OTF-Jun101Pr6N-Light.otf,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% 游明朝/游ゴシック (Win8.1)
+\ltjpreset_declare_preset:nx{yu-win}{
+ mc-m = YuMincho-Regular, mc-bx = YuMincho-Demibold,
+ gt-d = YuGothic-Regular, gt-bx = YuGothic-Bold,
+ gt-u = YuGothic-Regular, gt-eb = YuGothic-Bold,
+ mg-m = YuGothic-Bold, mc-l = YuMincho-Light,
+ __custom = false, __office = false, __noembed = false,
+}
+% Win10
+\ltjpreset_declare_preset:nx{yu-win10}{
+ mc-m = YuMincho-Regular, mc-bx = YuMincho-Demibold,
+ gt-d = YuGothic-Regular, gt-bx = YuGothic-Bold,
+ gt-u = YuGothic-Medium, gt-eb = YuGothic-Bold,
+ mg-m = YuGothic-Bold, mc-l = YuMincho-Light,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% Yu fonts in OSX
+% according to http://support.apple.com/kb/HT5944
+\ltjpreset_declare_preset:nx{yu-osx}{
+ mc = YuMincho~Medium, mc-bx = YuMincho~Demibold,
+ gt-d = YuGothic~Medium, gt-u = YuGothic~Medium,
+ gt-bx = YuGothic~Bold, gt-eb = YuGothic~Bold,
+ mg-m = YuGothic~Bold,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% moga-mobo
+\ltjpreset_declare_preset:nx{moga-mobo}{
+ mc = Moga90Mincho, mc-bx = Moga90Mincho~Bold,
+ gt-d = Moga90Gothic, gt-bx = Moga90Gothic~Bold,
+ gt-u = Moga90Gothic, gt-eb = Moga90Gothic~Bold,
+ mg-m = Mobo90Gothic,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{moga-mobo-ex}{
+ mc = MogaEx90Mincho, mc-bx = MogaEx90Mincho~Bold,
+ gt-d = MogaEx90Gothic, gt-bx = MogaEx90Gothic~Bold,
+ gt-u = MogaEx90Gothic, gt-eb = MogaEx90Gothic~Bold,
+ mg-m = MoboEx90Gothic,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% Ume fones
+\ltjpreset_declare_preset:nx{ume}{
+ mc = Ume~Mincho,
+ gt-d = Ume~Gothic, gt-bx = Ume~Gothic~O5,
+ gt-u = Ume~Gothic~O5, gt-eb = Ume~Gothic~O5,
+ mg-m = Ume~Gothic~O4,
+ __custom = false, __office = false, __noembed = false,
+}
+
+% Source Han {Serif,Sans}
+\ltjpreset_declare_preset:nx{sourcehan}{
+ mc-m = Source~Han~Serif~Regular,
+ mc-bx = Source~Han~Serif~Bold,
+ gt-d = Source~Han~Sans~Regular,
+ gt-bx = Source~Han~Sans~Bold,
+ gt-u = Source~Han~Sans~Medium,
+ gt-eb = Source~Han~Sans~Heavy,
+ mg-m = Source~Han~Sans~Heavy,
+ mc-l = Source~Han~Serif~Light,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{sourcehan-jp}{
+ mc-m = Source~Han~Serif~JP~Regular,
+ mc-bx = Source~Han~Serif~JP~Bold,
+ gt-d = Source~Han~Sans~JP~Regular,
+ gt-bx = Source~Han~Sans~JP~Bold,
+ gt-u = Source~Han~Sans~JP~Medium,
+ gt-eb = Source~Han~Sans~JP~Heavy,
+ mg-m = Source~Han~Sans~JP~Heavy,
+ mc-l = Source~Han~Serif~JP~Light,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{noto-otc}{
+ mc-m = Noto~Serif~CJK~Regular,
+ mc-bx = Noto~Serif~CJK~Bold,
+ gt-d = Noto~Sans~CJK~Regular,
+ gt-bx = Noto~Sans~CJK~Bold,
+ gt-u = Noto~Sans~CJK~Medium,
+ gt-eb = Noto~Sans~CJK~Black,
+ mg-m = Noto~Sans~CJK~Black,
+ mc-l = Noto~Serif~CJK~Light,
+ __custom = false, __office = false, __noembed = false,
+}
+\ltjpreset_declare_preset:nx{noto-otf}{
+ mc-m = Noto~Serif~CJK~JP~Regular,
+ mc-bx = Noto~Serif~CJK~JP~Bold,
+ gt-d = Noto~Sans~CJK~JP~Regular,
+ gt-bx = Noto~Sans~CJK~JP~Bold,
+ gt-u = Noto~Sans~CJK~JP~Medium,
+ gt-eb = Noto~Sans~CJK~JP~Black,
+ mg-m = Noto~Sans~CJK~JP~Black,
+ mc-l = Noto~Serif~CJK~JP~Light,
+ __custom = false, __office = false, __noembed = false,
+}
+
+
+% ipa, ipaex, ms
+\ltjpreset_declare_preset:nx{ipa}{
+ \__ltjpreset_set_uni:nn { IPAMincho } { IPAGothic }
+}
+\ltjpreset_declare_preset:nx{ipaex}{
+ \__ltjpreset_set_uni:nn { IPAExMincho } { IPAExGothic }
+}
+\ltjpreset_declare_preset:nx{ms}{
+ \__ltjpreset_set_uni:nn { MS-Mincho } { MS-Gothic }
+}
+
+% {ipa,ipaex,ms}-dx % Office 付属フォントを利用
+\ltjpreset_declare_preset:nx{ipaex-hg}{
+ \__ltjpreset_set_office:nn { IPAExMincho } { IPAExGothic }
+}
+\ltjpreset_declare_preset:nx{ipa-hg}{
+ \__ltjpreset_set_office:nn { IPAMincho } { IPAGothic }
+}
+\ltjpreset_declare_preset:nx{ms-hg}{
+ \__ltjpreset_set_office:nn { MS-Mincho } { MS-Gothic }
+}
+
+
+% 非埋込
+\ltjpreset_declare_preset:nx{noembed}{
+ \__ltjpreset_set_uni:nn { Ryumin-Light } { GothicBBB-Medium },
+ __custom = false, __office = false, __noembed = true,
+}
+
+\keys_set:nn {luatexja-preset} { ipaex }
+\ProcessKeysOptions { luatexja-preset }
+\@ifpackageloaded{luatexja-fontspec}{
+ \bool_if:NT \g__ltjpreset_nfssonly_bool
+ { \msg_warning:nn { luatexja-preset }{ ltj-fontspec } }
+ \bool_set_false:N \g__ltjpreset_nfssonly_bool
+}{}
+
+%%%%%%%% main routine
+
+\cs_new:Nn \__ltjpreset_extract_fonts: {
+ %% MogaMincho の場合は 90 をつける/はずす
+ \bool_if:NF \g__ltjpreset_custom_bool {
+ \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
+ \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl {
+ \tl_set:Nx \l_tmpb_tl { \prop_item:Nn \g__ltjpreset_font_prop { mc-m } }
+ \tl_if_in:NnT \l_tmpb_tl { Moga90Mincho } {
+ \prop_clear:N \l_tmpa_prop
+ \prop_map_inline:Nn \g__ltjpreset_font_prop {
+ \tl_set:Nn \l_tmpb_tl { ##2 } \tl_remove_all:Nn \l_tmpb_tl {90}
+ \prop_put:Nnx \l_tmpa_prop { ##1 } { \tl_use:N \l_tmpb_tl }
+ }
+ \prop_set_eq:NN \g__ltjpreset_font_prop \l_tmpa_prop
+ }
+ \tl_if_in:NnT \l_tmpb_tl { MogaEx90Mincho } {
+ \prop_clear:N \l_tmpa_prop
+ \prop_map_inline:Nn \g__ltjpreset_font_prop {
+ \tl_set:Nn \l_tmpb_tl { ##2 } \tl_remove_all:Nn \l_tmpb_tl {90}
+ \prop_put:Nnx \l_tmpa_prop { ##1 } { \tl_use:N \l_tmpb_tl }
+ }
+ \prop_set_eq:NN \g__ltjpreset_font_prop \l_tmpa_prop
+ }
+ }
+ }
+ %%%% リストからの展開
+ \cs_set:Nx \__ltjpreset_font_mc_l: { \prop_item:Nn \g__ltjpreset_font_prop { mc-l } }
+ \cs_set:Nx \__ltjpreset_font_mc_m: { \prop_item:Nn \g__ltjpreset_font_prop { mc-m } }
+ \cs_set:Nx \__ltjpreset_font_mc_bx: { \prop_item:Nn \g__ltjpreset_font_prop { mc-bx } }
+ \cs_set:Nx \__ltjpreset_font_gt_m: { \prop_item:Nn \g__ltjpreset_font_prop { gt-d } }
+ \cs_set:Nx \__ltjpreset_font_gt_u: { \prop_item:Nn \g__ltjpreset_font_prop { gt-u } }
+ \cs_set:Nx \__ltjpreset_font_gt_bx: { \prop_item:Nn \g__ltjpreset_font_prop { gt-bx } }
+ \cs_set:Nx \__ltjpreset_font_gt_eb: { \prop_item:Nn \g__ltjpreset_font_prop { gt-eb } }
+ \cs_set:Nx \__ltjpreset_font_mg_m: { \prop_item:Nn \g__ltjpreset_font_prop { mg-m } }
+ %% HG 系フォント + JIS2004/90JIS のときはフォント名を置換
+ \bool_if:nT { !\g__ltjpreset_custom_bool && \g__ltjpreset_office_bool } {
+ \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
+ \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl {
+ \cs_set:Nx \__ltjpreset_font_mc_bx: { hgrme04.ttc }
+ \cs_set:Nx \__ltjpreset_font_gt_bx: { hgrge04.ttc }
+ \cs_set:Nx \__ltjpreset_font_gt_eb: { hgrsgu04.ttc }
+ \cs_set:Nx \__ltjpreset_font_mg_m: { hgrsmp04.ttf }
+ \cs_set_eq:NN \__ltjpreset_font_gt_m: \__ltjpreset_font_gt_u:
+ % HG ゴシックM のときはそうはいかないので 1 ウェイト時のゴシック体を使う
+ }
+ \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
+ \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl {
+ \cs_set:Nx \__ltjpreset_font_mc_bx: { hgrme.ttc }
+ \cs_set:Nx \__ltjpreset_font_gt_bx: { hgrge.ttc }
+ \cs_set:Nx \__ltjpreset_font_gt_eb: { hgrsgu.ttc }
+ \cs_set:Nx \__ltjpreset_font_mg_m: { hgrsmp.ttf }
+ }
+ }
+ % mc/l
+ \tl_set:Nx \l_tmpa_tl { \__ltjpreset_font_mc_l: }
+ \tl_if_empty:NT \l_tmpa_tl {\tl_set:Nn \l_tmpa_tl {~}}
+ \cs_set:Nx \__ltjpreset_font_mc_l: {
+ \tl_if_blank:nTF \l_tmpa_tl { \__ltjpreset_font_mc_m: } {\tl_use:N \l_tmpa_tl }
+ }
+ %% bold オプションの処理
+ \bool_if:NTF \g__ltjpreset_deluxe_bool {
+ \bool_if:NT \g__ltjpreset_bold_bool {
+ \cs_set_eq:NN \__ltjpreset_font_mc_bx: \__ltjpreset_font_gt_bx:
+ }
+ }{
+ \bool_if:NTF \g__ltjpreset_bold_bool
+ { \cs_set_eq:NN \__ltjpreset_font_gt_m: \__ltjpreset_font_gt_bx: }
+ { \cs_set_eq:NN \__ltjpreset_font_gt_m: \__ltjpreset_font_gt_u: }
+ \cs_set_eq:NN \__ltjpreset_font_gt_bx: \__ltjpreset_font_gt_m:
+ \cs_set_eq:NN \__ltjpreset_font_mc_bx: \__ltjpreset_font_gt_m:
+ }
+}
+
+%%%%%%%% フォント名を \l__ltjpreset_font_name: に格納
+\clist_new:N \l__ltjpreset_extensions_clist
+\clist_set:Nn \l__ltjpreset_extensions_clist {.otf,.ttf,.OTF,.TTF,.ttc,.TTC}
+\prg_new_conditional:Nnn \__ltjpreset_if_detect_external:n {TF} {
+ \clist_map_inline:Nn \l__ltjpreset_extensions_clist {
+ \bool_set_false:N \l_tmpa_bool
+ \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string}
+ { \bool_set_true:N \l_tmpa_bool \clist_map_break: }
+ }
+ \bool_if:NTF \l_tmpa_bool \prg_return_true: \prg_return_false:
+}
+\cs_new:Nn \__ltjpreset_wrap_fontname:n {
+ \__ltjpreset_if_detect_external:nTF { #1 }
+ { \cs_set:Nn \l__ltjpreset_font_name: { [#1] } }
+ { \cs_set:Nn \l__ltjpreset_font_name: { "#1" } }
+}
+\cs_generate_variant:Nn \__ltjpreset_wrap_fontname:n { e }
+
+%%%%%%%% 存在判定
+\cs_new:Nn \__ltjpreset_substitute:nnnn {
+ \group_begin:
+ \suppressfontnotfounderror=1
+ \cs_if_exist:cT {ltjpreset_font_#1_#2:} {
+ \__ltjpreset_wrap_fontname:e { \cs:w ltjpreset_font_#1_#2: \cs_end: }
+ \font \g__ltjpreset_font_test: = \l__preset_font_name:\relax
+ \ifx \g__ltjpreset_font_test: \nullfont
+ \msg_warning:nnxxxx { luatexja-preset }{ no-font }
+ { \cs:w ltjpreset_font_#1_#2: \cs_end: }{ #1/#2 }
+ { \cs:w ltjpreset_font_#3_#4: \cs_end: }{ #3/#4 }
+ \cs_gset_eq:cc { ltjpreset_font_#1_#2: } { ltjpreset_font_#3_#4: }
+ \fi
+ } { \cs_gset_eq:cc { ltjpreset_font_#1_#2: } { ltjpreset_font_#3_#4: } }
+ \group_end:
+}
+
+%%%%%%%% deluxe (\mgfamily はあとで定義)
+\bool_if:NTF \g__ltjpreset_deluxe_bool {
+ \cs_new:Nn \__ltjpreset_check_deluxe_existence: {
+ \__ltjpreset_substitute:nnnn { gt } { eb } { gt } { bx }
+ \__ltjpreset_substitute:nnnn { mg } { m } { gt } { bx }
+ \__ltjpreset_substitute:nnnn { mc } { l } { mc } { m }
+ }
+ \def\ltdefault{l}
+ \DeclareRobustCommand\ltseries { \not@math@alphabet\ltseries\relax\fontseries\ltdefault\selectfont }
+ \def\ebdefault{eb}
+ \DeclareRobustCommand\ebseries { \not@math@alphabet\ebseries\relax\fontseries\ebdefault\selectfont }
+ \DeclareRobustCommand\gtebfamily { \gtfamily\fontseries{\ebdefault}\selectfont }
+} {
+ \cs_set_eq:NN \__ltjpreset_check_deluxe_existence: \prg_do_nothing:
+}
+
+\int_new:N \g__ltjpreset_applycount_int
+
+\bool_if:NTF \g__ltjpreset_nfssonly_bool {
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%% nfss only
+ \cs_if_exist:NF \Cjascale {
+ \group_begin:
+ \fontsize{16}{16}\selectfont
+ \cs_gset:Npx \Cjascale { \fp_to_decimal:n {\zw / 16} }
+ \group_end:
+ }
+
+ \msg_warning:nnx { luatexja-preset }{ scale }{ \Cjascale }
+
+ % {1: encoding}{2: family}{3: series}{4: shape}{5: fontname}{6: feature}{7: scale}
+ \cs_new:Nn \__ltjpreset_declare_font_shape:nnnnnnn {
+ \DeclareFontShape{#1}{#2}{#3}{#4}{ <-> s*[#7]
+ \bool_if:NT \g__ltjpreset_noembed_bool {psft:} #5
+ ;-kern \tl_use:N \l__ltjpreset_kanji_shape_tl; #6 } {}
+ }
+ \cs_new:Nn \__ltjpreset_define_family:nnn {
+ \__ltjpreset_wrap_fontname:e { #3 }
+ \__ltjpreset_declare_font_shape:nnnnnnn { JY3 }
+ { ltjp #1 \int_to_arabic:n { \g__ltjpreset_applycount_int }} { #2 } { n }
+ { \l__ltjpreset_font_name: : jfm=\tl_use:N \__ltjpreset_use_jfm_yoko_tl }
+ { script=hani \bool_if:NT \g__ltjpreset_expert_bool { ;+hkna } }
+ { \Cjascale }
+ \__ltjpreset_declare_font_shape:nnnnnnn { JT3 }
+ { ltjp #1 \int_to_arabic:n { \g__ltjpreset_applycount_int }} { #2 } { n }
+ { \l__ltjpreset_font_name: : jfm=\tl_use:N \__ltjpreset_use_jfm_tate_tl }
+ { script=hani \bool_if:NT \g__ltjpreset_expert_bool { ;+vkna } }
+ { \Cjascale }
+ \bool_if:NT \g__ltjpreset_expert_bool {
+ \__ltjpreset_declare_font_shape:nnnnnnn { JY3 }
+ { ltjp #1 \int_to_arabic:n { \g__ltjpreset_applycount_int }} { #2 } { rb }
+ { \l__ltjpreset_font_name: : jfm=\tl_use:N \__ltjpreset_use_jfm_yoko_tl } { script=kana; +ruby }
+ { \Cjascale }
+ \__ltjpreset_declare_font_shape:nnnnnnn { JT3 }
+ { ltjp #1 \int_to_arabic:n { \g__ltjpreset_applycount_int }} { #2 } { rb }
+ { \l__ltjpreset_font_name: : jfm=\tl_use:N \__ltjpreset_use_jfm_tate_tl } { script=kana; +ruby }
+ { \Cjascale }
+ }
+ \cs_if_exist:NT \ltjpreset_define_family_hook_nfssonly:nnn
+ { \ltjpreset_define_family_hook_nfssonly:nnn { #1 } { #2 } { #3 } }
+ }
+ \bool_if:NT \g__ltjpreset_deluxe_bool {
+ \let\mgfamily\undefined
+ \DeclareRobustCommand\mgfamily {
+ \not@math@alphabet\mgfamily\relax
+ \kanjifamily{ltjpmg \int_to_arabic:n { \g__ltjpreset_applycount_int }}\selectfont
+ }
+ \DeclareTextFontCommand{\textmg}{\mgfamily}
+ }
+ \bool_if:NT \g__ltjpreset_expert_bool {
+ \DeclareRobustCommand\rubyfamily { \kanjishape{rb}\selectfont }
+ }
+ %
+ \cs_new:Nn \__ltjpreset_do_fontset: { \group_begin:
+ % ======
+ \xdef\mcdefault{ltjpmc \int_to_arabic:n { \g__ltjpreset_applycount_int }}
+ \xdef\gtdefault{ltjpgt \int_to_arabic:n { \g__ltjpreset_applycount_int }}
+ \DeclareKanjiFamily{JY3}{\mcdefault}{}
+ \DeclareKanjiFamily{JT3}{\mcdefault}{}
+ \DeclareKanjiFamily{JY3}{\gtdefault}{}
+ \DeclareKanjiFamily{JT3}{\gtdefault}{}
+ \unless\ifltj@disablejfam
+ \SetSymbolFont{mincho}{normal}{JY3}{\mcdefault}{m}{n}
+ \SetSymbolFont{mincho}{bold}{JY3}{\mcdefault}{bx}{n}
+ \DeclareMathAlphabet{\mathgt}{JY3}{\gtdefault}{m}{n}
+ \fi
+ \bool_if:NT \g__ltjpreset_deluxe_bool {
+ \DeclareKanjiFamily{JY3}{ltjpmg \int_to_arabic:n { \g__ltjpreset_applycount_int }}{}
+ \DeclareKanjiFamily{JT3}{ltjpmg \int_to_arabic:n { \g__ltjpreset_applycount_int }}{}
+ }
+ % ======
+ \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS1990 }
+ \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl {
+ \tl_set:Nn \l__ltjpreset_kanji_shape_tl { ;+jp90 }
+ }
+ \tl_set:Nn \l_tmpa_tl {, CJKShape=JIS2004 }
+ \tl_if_eq:NNT \l__ltjpreset_kanji_shape_tl \l_tmpa_tl {
+ \tl_set:Nx \l__ltjpreset_kanji_shape_tl { ;+jp04 }
+ }
+ \__ltjpreset_define_family:nnn {mc} {m} {\__ltjpreset_font_mc_m:}
+ \__ltjpreset_define_family:nnn {mc} {bx} {\__ltjpreset_font_mc_bx:}
+ \__ltjpreset_define_family:nnn {mc} {b} {\__ltjpreset_font_mc_bx:}
+ \__ltjpreset_define_family:nnn {gt} {m} {\__ltjpreset_font_gt_m:}
+ \__ltjpreset_define_family:nnn {gt} {bx} {\__ltjpreset_font_gt_bx:}
+ \__ltjpreset_define_family:nnn {gt} {b} {\__ltjpreset_font_gt_bx:}
+ \normalfont
+ \bool_if:NT \g__ltjpreset_deluxe_bool {
+ \__ltjpreset_define_family:nnn {mc} {l} {\__ltjpreset_font_mc_l:}
+ \__ltjpreset_define_family:nnn {gt} {eb} {\__ltjpreset_font_gt_eb:}
+ \__ltjpreset_define_family:nnn {mg} {m} {\__ltjpreset_font_mg_m:}
+ }
+ \group_end:
+ }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%% fontspec
+} {
+ \RequirePackage{luatexja-fontspec}
+ % scale
+ \msg_warning:nnx { luatexja-preset }{ scale }{ \Cjascale }
+ \tl_new:N \l__ltjpreset_add_features_tl
+
+ \bool_if:NT \g__ltjpreset_expert_bool {
+ \cs_set:Npn \rubyfamily { \addjfontfeatures {
+ Style=Ruby , YokoFeatures={RawFeature=-hkna} , TateFeatures={RawFeature=-vkna}
+ } }
+ }
+ \addjfontfeature{ Kerning=Off }
+ % 実際の fontspec の呼びだし
+ \cs_new:Nn \__ltjpreset_do_fontset: { \group_begin:
+ \tl_gset:Nx \l__ltjpreset_add_features_tl {
+ \tl_use:N \l__ltjpreset_kanji_shape_tl,
+ YokoFeatures = { JFM = \tl_use:N \__ltjpreset_use_jfm_yoko_tl },
+ TateFeatures = { JFM = \tl_use:N \__ltjpreset_use_jfm_tate_tl },
+ Script=CJK, \bool_if:NT \g__ltjpreset_noembed_bool { , NoEmbed }
+ }
+ \group_end:
+ \bool_if:NT \g__ltjpreset_expert_bool {
+ \tl_put_left:Nn \l__ltjpreset_add_features_tl {
+ , YokoFeatures = {Style = HorizontalKana}, TateFeatures = {Style = VerticalKana}
+ }
+ }
+ \setmainjfont [
+ \bool_if:NT \g__ltjpreset_deluxe_bool {
+ FontFace={l}{n}{ Font = \__ltjpreset_font_mc_l:,
+ \cs_if_exist:NT \ltjpreset_define_family_hook_fontspec:nnn {
+ \ltjpreset_define_family_hook_fontspec:nnn
+ { mc } { l } { \__ltjpreset_font_mc_l: }
+ }
+ },
+ }
+ BoldFont = \__ltjpreset_font_mc_bx: \tl_use:N \l__ltjpreset_add_features_tl,
+ \cs_if_exist:NT \ltjpreset_define_family_hook_fontspec:nnn {
+ UprightFeatures = { \ltjpreset_define_family_hook_fontspec:nnn
+ { mc } { m } { \__ltjpreset_font_mc_m: } },
+ BoldFeatures = { \ltjpreset_define_family_hook_fontspec:nnn
+ { mc } { bx } { \__ltjpreset_font_mc_bx: } },
+ }
+ ] { \__ltjpreset_font_mc_m: }
+ \setsansjfont [
+ \bool_if:NT \g__ltjpreset_deluxe_bool {
+ FontFace={eb}{n}{ Font = \__ltjpreset_font_gt_eb:,
+ \cs_if_exist:NT \ltjpreset_define_family_hook_fontspec:nnn {
+ \ltjpreset_define_family_hook_fontspec:nnn
+ { gt } { eb } { \__ltjpreset_font_gt_eb: }
+ }
+ },
+ }
+ BoldFont = \__ltjpreset_font_gt_bx: \tl_use:N \l__ltjpreset_add_features_tl,
+ \cs_if_exist:NT \ltjpreset_define_family_hook_fontspec:nnn {
+ UprightFeatures = { \ltjpreset_define_family_hook_fontspec:nnn
+ { gt } { m } { \__ltjpreset_font_gt_m: } },
+ BoldFeatures = { \ltjpreset_define_family_hook_fontspec:nnn
+ { gt } { bx } { \__ltjpreset_font_gt_bx: } },
+ }
+ ] { \__ltjpreset_font_gt_m: }
+ \bool_if:NT \g__ltjpreset_deluxe_bool {
+ %% mg
+ \bool_if_exist:NTF \setfontfamily {
+ \setjfontfamily \mgfamily [
+ BoldFont = \__ltjpreset_font_mg_m: \tl_use:N \l__ltjpreset_add_features_tl,
+ \cs_if_exist:NT \ltjpreset_define_family_hook_fontspec:nnn {
+ \ltjpreset_define_family_hook_fontspec:nnn
+ { mg } { m } { \__ltjpreset_font_mg_m: },
+ }
+ ] { \__ltjpreset_font_mg_m: }
+ } {
+ \newjfontfamily \mgfamily [
+ BoldFont = \__ltjpreset_font_mg_m: \tl_use:N \l__ltjpreset_add_features_tl,
+ \cs_if_exist:NT \ltjpreset_define_family_hook_fontspec:nnn {
+ \ltjpreset_define_family_hook_fontspec:nnn
+ { mg } { m } { \__ltjpreset_font_mg_m: },
+ }
+ ] { \__ltjpreset_font_mg_m: }
+ }
+ \DeclareTextFontCommand{\textmg}{\mgfamily}
+ }
+ }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+}
+
+\def\ltjnewpreset{
+ \@ifstar{\__ltjpreset_new_preset:nnn{ true }}{\__ltjpreset_new_preset:nnn{ false }}}
+\cs_set:Nn \__ltjpreset_new_preset:nnn {
+ \keys_if_exist:nnTF { luatexja-preset } { #2 } {
+ \seq_if_in:NnTF \g__ltjpreset_presets_seq { #2 } {
+ \bool_if:cTF { c_ #1 _bool } {
+ \msg_warning:nnn { luatexja-preset }{ exist-preset-overwrite } { #2 }
+ \keys_define:nn { luatexja-preset } {
+ #2 .meta:n = { #3, __custom = true, __noembed = false, __office = false, },
+ #2 .value_forbidden:n = true, #2 .groups:n = { preset },
+ }
+ } {
+ \msg_error:nnn { luatexja-preset }{ exist-preset-nooverwrite } { #2 }
+ }
+ } {
+ \msg_error:nnn { luatexja-preset }{ illegal-preset-name } { #2 }
+ }
+ } {
+ \keys_define:nn { luatexja-preset } {
+ #2 .meta:n = { #3, __custom = true, __noembed = false, __office = false, },
+ #2 .value_forbidden:n = true, #2 .groups:n = { preset },
+ }
+ \seq_put_right:Nn \g__ltjpreset_presets_seq { #2 }
+ }
+}
+
+
+\cs_set:Npn \ltjapplypreset #1 {
+ \int_gincr:N \g__ltjpreset_applycount_int
+ \keys_set_groups:nnn { luatexja-preset } { preset } { #1 }
+ % \prop_map_inline:Nn \g__ltjpreset_font_prop {\typeout{ [##1] = "##2" } }
+ \__ltjpreset_extract_fonts:
+ \__ltjpreset_check_deluxe_existence:
+ \__ltjpreset_do_fontset:
+ \normalfont
+}
+
+\ltjapplypreset {}
+
+\@onlypreamble\ltjnewpreset
+\@onlypreamble\ltjapplypreset
+
+\ExplSyntaxOff
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty
new file mode 100644
index 0000000000..813ab31a43
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-ruby.sty
@@ -0,0 +1,210 @@
+%
+% luatexja-ruby.sty
+%
+
+% LaTeX only!
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luatexja-ruby}[2017/05/05 v0.23]
+\RequirePackage{luatexja}
+
+%%------------------
+\newattribute\ltj@rubyattr
+\ltj@rubyattr=0
+\RequireLuaTeXjaSubmodule{ruby}
+
+% ltjset/getparameter への追加設定
+% これらは段落単位の設定.
+
+%% 引数:ルビ全角を単位とした実数
+%% この文字への pre-, post-intrusion の許容量
+\define@key[ltj]{japaram}{rubypreintrusion}{%
+ \ltj@@set@stack@real{RIPRE}{0}{0x7FFFFFFF}#1 }
+\define@key[ltj]{japaram}{rubypostintrusion}{%
+ \ltj@@set@stack@real{RIPOST}{0}{0x7FFFFFFF}#1 }
+\def\ltj@@set@stack@real#1#2#3{%
+ \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#1,
+ #2, #3, token.scan_word)}}
+
+% ルビ用のキー設定
+\def\ltj@@rkeydef#1{
+ \define@key[ltj]{ruby}{#1}{\expandafter\def\csname ltj@@rubyip@#1\endcsname{##1}}
+}
+%% attr_ruby_mode
+%% bit 0: intrusion を有効にするか(1: 有効)
+%% bit 1: 前後の intrusion 許容量を小さい方に揃える (1: yes)
+%% bit 2, 3: intrusion をどう使って親文字を配置するか
+%% 00: intrusion なしでとりあえず計算し,左右の突出分を進入に割り当てる
+%% 01: pre-intrusion でまかなえるだけまかない,無理なら post- も使う
+%% 10: post を優先
+%% 11: 2 min (pre,post) までは pre, post に均等配分しようとする
+%% >=01 で,intrusion で賄えきれなかった場合はいつものように伸長する.
+%% bit 4: 熟語ルビの際の処理方法(0: 常にグループ,1: 可能な限りブロックごとに)
+%% ↑bit 4 は今は無効
+\ltj@@rkeydef{mode}
+%% intrusion 量強制固定(bit 0, bit 1 より優先,負数で「自動」)
+%% attr は sp 単位だが,ユーザーはルビ全角単位で指定する
+%% attr_ruby_maxprep, attr_ruby_maxpostp
+\ltj@@rkeydef{pre}
+\ltj@@rkeydef{post}
+%% 親文字伸長の際の比,{0}{1}{1} などと0--7 の数 3 つで指定
+%% attr_ruby_stretch (bol left,middle,right)(eol)(middle) 27-bits
+\ltj@@rkeydef{stretchbol} % 行頭形
+\ltj@@rkeydef{stretcheol} % 行末形
+\ltj@@rkeydef{stretch} % 行中形
+%% ルビが伸長するときの比 {1}{2}{1} などと0--7 の数 3 つで指定
+%% attr_ruby_mode 上位部分
+\ltj@@rkeydef{stretchruby}
+%% ルビ<親のとき,ルビと親文字の端の最大値
+%% attr_ruby_maxmargin
+%% attr は sp 単位だが,ユーザーは親文字全角単位で指定
+\ltj@@rkeydef{maxmargin}
+%% ルビと親文字の垂直方向の空き
+%% attr_ruby_intergap
+%% attr は sp 単位だが,ユーザーは親文字全角単位で指定
+\ltj@@rkeydef{intergap}
+
+\ltj@@rkeydef{kenten}%% 圏点文字
+\ltj@@rkeydef{fontcmd}%% フォント
+\define@boolkey[ltj]{ruby}{rubysmash}[true]{}
+
+
+%%%%%%%% setkeys の別名
+\protected\def\ltjsetruby{\setkeys[ltj]{ruby}}
+
+% ここからは ruby マクロ内でなんとかされる事項
+%% ルビと親文字の大きさの比
+\ltj@@rkeydef{size}
+
+% 中つき用簡易設定.
+\define@key[ltj]{ruby}{naka}[none]{\setkeys[ltj]{ruby}{mode=1, stretch=121, stretchruby=121}}
+% 肩つき用簡易設定.
+\define@key[ltj]{ruby}{kata}[none]{\setkeys[ltj]{ruby}{mode=9, stretch=121, stretchruby=001}}
+
+%%%%%%%% 補助関数
+
+% Lua ソースに渡す table 生成
+\def\ltj@@ruby@create@table#1{% #1: ルビ全角
+ \string{
+ rubyzw = \ltj@safe@dimen{#1},
+ maxmargin = \ltj@safe@dimen{\ltj@@rubyip@maxmargin\zw},
+ pre = \ltj@safe@dimen{\ltj@@rubyip@pre#1},
+ post = \ltj@safe@dimen{\ltj@@rubyip@post#1},
+ intergap = \ltj@safe@dimen{\ltj@@rubyip@intergap\zw},
+ stretch
+ = 262144 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchbol
+ + 512 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretcheol
+ + \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretch,
+ mode
+ = 2097152 * \expandafter\ltj@@ruby@cts\ltj@@rubyip@stretchruby
+ + \ltj@safe@num{\ltj@@rubyip@mode}
+ + 1048576 * \ifltj@ruby@rubysmash1\else0\fi
+ \string}
+}
+%%%
+%%% 1098765432109876543210976543210
+%%% |st_ruby|! |--| ← mode
+\def\ltj@@ruby@cts#1#2#3{%
+ ((\ltj@safe@num{#1}) * 64 + (\ltj@safe@num{#2}) * 8 + \ltj@safe@num{#3})%
+}
+
+
+%%%%%%%% ZR さんの PXrubrica パッケージ中のコードから引用・改変
+% \pxrr@decompbar: a|bc -> \ltj@@ruby@mark{a}\ltj@@ruby@mark{bc}
+\let\pxrr@res\empty
+\def\pxrr@ifx#1{%
+ \ifx#1\expandafter\@firstoftwo
+ \else\expandafter\@secondoftwo
+ \fi
+}
+\def\pxrr@nil{\noexpand\pxrr@nil}
+\def\pxrr@end{\noexpand\pxrr@end}
+\def\pxrr@appto#1#2{%
+ \expandafter\def\expandafter#1\expandafter{#1#2}%
+}
+\def\pxrr@decompbar#1{%
+ \let\pxrr@res\@empty
+ \pxrr@decompbar@loopa\pxrr@nil#1|\pxrr@end|%
+}
+\def\pxrr@decompbar@loopa#1|{%
+ \expandafter\pxrr@decompbar@loopb\expandafter{\@gobble#1}%
+}
+\def\pxrr@decompbar@loopb#1{%
+ \pxrr@decompbar@loopc#1\relax\pxrr@nil{#1}%
+}
+\def\pxrr@decompbar@loopc#1#2\pxrr@nil#3{%
+ \pxrr@ifx{#1\pxrr@end}{}{%
+ \ifx\pxrr@res\@empty
+ \def\pxrr@res{\ltj@@ruby@mark}%
+ \else
+ \pxrr@appto\pxrr@res{\ltj@@ruby@mark}%
+ \fi
+ \pxrr@appto\pxrr@res{{#3}}%
+ \pxrr@decompbar@loopa\pxrr@nil
+ }%
+}
+%%%%%%%% ここまで
+
+%%%%%%%% TeX command
+\protected\def\ltjruby{\@ifnextchar[\ltj@@ruby{\ltj@@ruby[]}}%]
+\AtBeginDocument{%
+ \ifdefined\ruby\else\let\ruby=\ltjruby\fi
+ \directlua{luatexja.ruby.read_old_break_info()}%
+}
+\def\ltj@@ruby[#1]#2#3{{% #1: option #2: 親文字群,#3: ルビ文字列群,共に| 区切り
+ \setkeys[ltj]{ruby}{#1}%
+ \directlua{ruby_tmplist_r = \string{\string}; ruby_tmplist_p = \string{\string}}%
+ \leavevmode\dimen0=\f@size pt\dimen1=\ltj@@rubyip@size\dimen0%
+ % 引数展開,テーブルにセット
+ \pxrr@decompbar{#2}{\let\ltj@@ruby@mark\ltj@@ruby@sp\pxrr@res}%
+ \pxrr@decompbar{#3}{\let\ltj@@ruby@mark\ltj@@ruby@sr\pxrr@res}%
+ {\fontsize{\ltj@@rubyip@size\dimen0}\z@\selectfont\ltj@@rubyip@fontcmd\global\dimen1=\zw}%
+ \directlua{%
+ luatexja.ruby.texiface(\ltj@@ruby@create@table{\dimen1},
+ ruby_tmplist_r, ruby_tmplist_p)}%
+}}
+
+\def\ltj@@ruby@sr#1{%
+ \setbox0=\hbox{\fontsize{\dimen1}\z@\ltj@@rubyip@fontcmd\selectfont#1}%
+ \directlua{table.insert(ruby_tmplist_r, luatexja.ruby.cpbox())}%
+}
+\def\ltj@@ruby@sp#1{%
+ \setbox0=\hbox{\selectfont#1}%
+ \directlua{table.insert(ruby_tmplist_p, luatexja.ruby.cpbox())}%
+}
+
+\protected\def\ltjkenten{\@ifnextchar[\ltj@@kenten{\ltj@@kenten[]}}%]
+\let\kenten=\ltjkenten
+\def\ltj@@kenten[#1]#2{{%
+ \setkeys[ltj]{ruby}{#1, stretchruby=101}%
+ \@tfor\ltj@@kenten@temp:=#2\do{\ltj@@ruby[]{\ltj@@kenten@temp}{\ltj@@rubyip@kenten}}%
+}}
+
+% 初期値.要調整
+%% ひらがな
+\count@="3040\loop\relax\ifnum \count@<"30A0
+ \ltjsetparameter{rubypreintrusion={\the\count@,1},
+ rubypostintrusion={\the\count@,1}}
+ \advance\count@1\repeat
+%% 「」
+\ltjsetparameter{rubypreintrusion={`「,1},
+ rubypostintrusion={`」,1}}
+%% ,、
+\ltjsetparameter{rubypreintrusion={`,,1},
+ rubypostintrusion={`,,1}}
+\ltjsetparameter{rubypreintrusion={`、,1},
+ rubypostintrusion={`、,1}}
+%% ・
+\ltjsetparameter{rubypreintrusion={`・,1},
+ rubypostintrusion={`・,1}}
+%% 段落インデント部分
+\ltjsetparameter{rubypreintrusion={-1,1}}
+
+\setkeys[ltj]{ruby}{
+ pre=-1, post=-1, mode=1,
+ stretchruby={1}{2}{1}, stretch = {1}{2}{1},
+ stretchbol={0}{1}{1}, stretcheol={1}{1}{0},
+ maxmargin=0.5, size=0.5, intergap=0, rubysmash=false,
+ kenten=\ltjalchar`•, fontcmd=\relax
+}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/addons/luatexja-zhfonts.sty b/macros/luatex/generic/luatexja/src/addons/luatexja-zhfonts.sty
new file mode 100644
index 0000000000..8e215d3f6e
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/addons/luatexja-zhfonts.sty
@@ -0,0 +1,77 @@
+% luatexja-zhfonts.sty
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luatexja-zhfonts}[2013/09/10 Setting for Chinese fonts]
+\RequirePackage{luatexja-fontspec}
+
+% SinoType 华文字体
+\DeclareOption{SinoType}{
+\setmainjfont[BoldFont=STZhongsong]{STSong}
+\setsansjfont[BoldFont=STXihei]{STXihei}
+\newjfontface\kai{STKaiti}
+\newjfontface\fang{STFangsong}
+}
+
+% ZhongYi 中易字体
+\DeclareOption{ZhongYi}{
+\setmainjfont[BoldFont=SimHei]{SimSun}
+\setsansjfont[BoldFont=SimHei]{SimHei}
+\newjfontface\kai{KaiTi}
+\newjfontface\fang{FangSong}
+}
+
+% Adobe Adobe字体
+\DeclareOption{Adobe}{
+\setmainjfont[BoldFont=AdobeHeitiStd-Regular]{AdobeSongStd-Light}
+\setsansjfont[BoldFont=AdobeHeitiStd-Regular]{AdobeHeitiStd-Regular}
+\newjfontface\kai{AdobeKaitiStd-Regular}
+\newjfontface\fang{AdobeFangsongStd-Regular}
+}
+
+% Founder 方正字体
+\DeclareOption{Founder}{
+\setmainjfont[BoldFont=FZXiaoBiaoSong-B05]{FZShuSong-Z01}
+\setsansjfont[BoldFont=FZHei-B01]{FZHei-B01}
+\newjfontface\kai{FZKai-Z03}
+\newjfontface\fang{FZFangSong-Z02}
+}
+
+% HanYi-J 汉仪字体-文房字宝-简体
+% HanYi-F 汉仪字体-文房字宝-繁体
+% 书宋一简 HYA9GJM.ttf
+% 中宋简  HYA3GJM.ttf
+% 中黑简  HYB1GJM.ttf
+% 粗黑简  HYB9GJM.ttf
+% 楷体简  HYC1GJM.ttf
+% 仿宋简  HYD1GJM.ttf
+\DeclareOption{HanYi-J}{
+\setmainjfont[BoldFont=HYA9GJM.ttf]{HYA3GJM.ttf}
+\setsansjfont[BoldFont=HYB9GJM.ttf]{HYB1GJM.ttf}
+\newjfontface\kai{HYC1GJM.ttf}
+\newjfontface\fang{HYD1GJM.ttf}
+}
+
+\DeclareOption{HanYi-F}{
+\setmainjfont[BoldFont=HYA9GFM.ttf]{HYA3GFM.ttf}
+\setsansjfont[BoldFont=HYB9GFM.ttf]{HYB1GFM.ttf}
+\newjfontface\kai{HYC1GFM.ttf}
+\newjfontface\fang{HYD1GFM.ttf}
+}
+
+% cwTeX TrueType (in Debian/Ubuntu)
+\DeclareOption{cwttf}{
+\setmainjfont[BoldFont=cwTeXHeiBold]{cwTeXMing}
+\setsansjfont[BoldFont=cwTeXHeiBold]{cwTeXHeiBold}
+\newjfontface\kai{cwTeXKai}
+\newjfontface\fang{cwTeXFangSong}
+}
+
+% Fandol fonts http://fandol-doc.googlecode.com/files/fandol-fonts.7z
+\DeclareOption{Fandol}{
+\setmainjfont[BoldFont=FandolSong-Bold]{FandolSong-Regular}
+\setsansjfont[BoldFont=FandolHei-Bold]{FandolHei-Regular}
+\newjfontface\kai{FandolKai-Regular}
+\newjfontface\fang{FandolFang-Regular}
+}
+
+\ProcessOptions\relax
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/jfm-CCT.lua b/macros/luatex/generic/luatexja/src/jfm-CCT.lua
new file mode 100644
index 0000000000..c41f6da311
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-CCT.lua
@@ -0,0 +1,84 @@
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.25 , 0.0, 0.0 },
+ [3] = { 0.125, 0.0, 0.125 }
+ }
+ },
+
+ [1] = { -- fw. opening punctuations
+ chars = {
+ 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016,
+ 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [2] = { -- fw. closing/colon punctuations
+ chars = {
+ 0x2019, 0x201D, 0x3001, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
+ 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60,
+ 0xFF1A, 0xFF1B
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.25 , 0.0, 0.0 },
+ [3] = { 0.125, 0.0, 0.0 },
+ [5] = { 0.25 , 0.0, 0.25 }
+ }
+ },
+
+ [3] = { -- fw. middle dot punctuations
+ chars = {0x30FB, 0x00B7},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.125, 0.0, 0.125 },
+ [1] = { 0.125, 0.0, 0.125 },
+ [2] = { 0.125, 0.0, 0.125 },
+ [3] = { 0.5 , 0.0, 0.5 },
+ [4] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.25, 0.0, 0.25 },
+ }
+ },
+
+ [4] = { -- fw. stop punctuations
+ chars = {0x3002, 0xFF01, 0xFF0E, 0xFF1F},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5, 0.0, 0.0 },
+ [1] = { 0.5, 0.0, 0.0 },
+ [3] = { 0.5, 0.0, 0.0 },
+ [5] = { 0.5, 0.0, 0.0 }
+ }
+ },
+
+ [5] = { -- fw. dash punctuations
+ chars = { 0x2015, 0x2025, 0x2026, 0x2014, 0x301C, 0xFF5E },
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ },
+ kern = {
+ [5] = -0.1
+ }
+ },
+
+ [6] = { -- box end
+ chars = {'boxbdd'},
+ },
+
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-banjiao.lua b/macros/luatex/generic/luatexja/src/jfm-banjiao.lua
new file mode 100644
index 0000000000..783e836ba2
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-banjiao.lua
@@ -0,0 +1,98 @@
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ --[1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.125, 0.0, 0.125 }
+ }
+ },
+
+ [1] = { -- fw. opening punctuations
+ chars = {
+ 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016,
+ 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [2] = { -- fw. closing/colon/dot punctuations, except 4 & 7
+ chars = {
+ 0x2019, 0x201D, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
+ 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60,
+ 0xFF0E, 0xFF1A, 0xFF1B, 0xFF01, 0xFF1F
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ --[0] = { 0.5 , 0.0, 0.5 },
+ --[1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.125, 0.0, 0.125 },
+ [5] = { 0.5 , 0.0, 0.5 }
+ }
+ },
+
+ [3] = { -- fw. middle dot punctuations
+ chars = {0x30FB, 0x00B7},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.125, 0.0, 0.125 },
+ [1] = { 0.125, 0.0, 0.125 },
+ [2] = { 0.125, 0.0, 0.125 },
+ [3] = { 0.5 , 0.0, 0.5 },
+ [4] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.25, 0.0, 0.25 },
+ [7] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [4] = { -- ideographic full stop
+ chars = {0x3002},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ --[0] = { 0.5 , 0.0, 0.0 },
+ [1] = { 0.5 , 0.0, 0.0 },
+ [3] = { 0.75, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.0 }
+ }
+ },
+
+ [5] = { -- fw. dash punctuations
+ chars = { 0x2015, 0x2025, 0x2026, 0x2014, 0x301C, 0xFF5E },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ },
+ kern = {
+ [5] = 0.0
+ }
+ },
+
+ [6] = { -- box end
+ chars = {'boxbdd'},
+ },
+
+ [7] = { -- ideographic comma
+ chars = {0x3001},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.25 },
+ [1] = { 0.5 , 0.0, 0.25 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.25 }
+ }
+ },
+
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-jis.lua b/macros/luatex/generic/luatexja/src/jfm-jis.lua
new file mode 100644
index 0000000000..642a2475e5
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-jis.lua
@@ -0,0 +1,92 @@
+-- -*- coding: utf-8 -*-
+-- jfm-jis.lua: JISフォントメトリック互換
+-- Besed on ujis.tfm (a counterpart of jis.tfm for upTeX).
+-- * Do not confuse with jfm-ujis.lua.
+
+local vscale = 0.916443 / 0.962216
+local vht = 0.777588 / 0.962216
+local vdp = 0.138855 / 0.962216
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = vscale,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [1] = { -- 開き括弧類
+ chars = {
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [2] = { -- 閉じ括弧類
+ chars = {
+ '’', '”', '、', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ',', ']', '}', '⦆'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.5 },
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.5 },
+ }
+ },
+
+ [3] = { -- 中点類
+ chars = {'・', ':', ';'},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.25, 0.0, 0.25 },
+ [1] = { 0.25, 0.0, 0.25 },
+ [2] = { 0.25, 0.0, 0.25 },
+ [3] = { 0.5 , 0.0, 0.5 },
+ [4] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.25, 0.0, 0.25 },
+ }
+ },
+
+ [4] = { -- 句点類
+ chars = {'。', '.'},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.0 },
+ [1] = { 0.5 , 0.0, 0.0 },
+ [3] = { 0.75, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.0 },
+ }
+ },
+
+ [5] = { -- ダッシュ
+ chars = { '―', '‥', '…' },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ },
+ kern = {
+ [5] = 0.0
+ }
+ },
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd'},
+ },
+
+} \ No newline at end of file
diff --git a/macros/luatex/generic/luatexja/src/jfm-kaiming.lua b/macros/luatex/generic/luatexja/src/jfm-kaiming.lua
new file mode 100644
index 0000000000..cb166ec436
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-kaiming.lua
@@ -0,0 +1,98 @@
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ --[1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.125, 0.0, 0.125 }
+ }
+ },
+
+ [1] = { -- fw. opening punctuations
+ chars = {
+ 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016,
+ 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [2] = { -- fw. closing/colon/dot punctuations, except 4 & 7
+ chars = {
+ 0x2019, 0x201D, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
+ 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60,
+ 0xFF0E, 0xFF1A, 0xFF1B
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ --[0] = { 0.5 , 0.0, 0.5 },
+ --[1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.125, 0.0, 0.125 },
+ [5] = { 0.5 , 0.0, 0.5 }
+ }
+ },
+
+ [3] = { -- fw. middle dot punctuations
+ chars = {0x30FB, 0x00B7},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.125, 0.0, 0.125 },
+ [1] = { 0.125, 0.0, 0.125 },
+ [2] = { 0.125, 0.0, 0.125 },
+ [3] = { 0.5 , 0.0, 0.5 },
+ [4] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.25, 0.0, 0.25 },
+ [7] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [4] = { -- ideographic full stop
+ chars = {0x3002, 0xFF1F, 0xFF01},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.0 },
+ [1] = { 0.5 , 0.0, 0.0 },
+ [3] = { 0.75, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.0 }
+ }
+ },
+
+ [5] = { -- fw. dash punctuations
+ chars = { 0x2015, 0x2025, 0x2026, 0x2014, 0x301C, 0xFF5E },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ },
+ kern = {
+ [5] = 0.0
+ }
+ },
+
+ [6] = { -- box end
+ chars = {'boxbdd'},
+ },
+
+ [7] = { -- ideographic comma
+ chars = {0x3001},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.25 },
+ [1] = { 0.5 , 0.0, 0.25 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.25 }
+ }
+ },
+
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-min.lua b/macros/luatex/generic/luatexja/src/jfm-min.lua
new file mode 100644
index 0000000000..b59b5329c4
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-min.lua
@@ -0,0 +1,261 @@
+-- -*- coding: utf-8 -*-
+-- jfm-min.lua: min10 互換
+-- Based on umin10.tfm (a counterpart of min10.tfm for upTeX).
+
+local vscale = 0.916443 / 0.962216
+local vht = 0.777588 / 0.962216
+local vdp = 0.138855 / 0.962216
+
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = vscale,
+ kanjiskip = { 0.0, 0.091641/0.962216, 0.0 },
+ xkanjiskip = { 0.229101/0.962216, 0.183283/0.962216, 0.114551/0.962216 },
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [6] = { 0.476196, 0.0, 0.476196 },
+ }
+ },
+
+ [1] = {
+ chars = {
+ '〉', '》', '」', '』', '】', '〕', '〗', '〙', '〟', ')', ']', '}', '⦆ '
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.523804, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.476196, 0.0, 0.238097 },
+ [7] = { 0.476196, 0.0, 0.238097 },
+ [12] = { 0.476196, 0.0, 0.238097 },
+ [13] = { 0.476196, 0.0, 0.238097 },
+ [14] = { 0.476196, 0.0, 0.238097 },
+ [10] = { 0.238097, 0.238097, 0.238097 },
+ [2] = { 0.238097, 0.238097, 0.238097 },
+ [4] = { 0.238097, 0.238097, 0.238097 },
+ [5] = { 0.238097, 0.238097, 0.238097 },
+ [3] = { 0.476196, 0.0, 0.238097 },
+ [6] = { 0.476196, 0.0, 0.238097 },
+ [11] = { 0.0, 0.476196, 0.0 },
+ [1] = { 0.0, 0.476196, 0.0 },
+ }
+ },
+
+ [2] = {
+ chars = {
+ '゛', '゜'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.367552, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.632447, 0.0, 0.238097 },
+ [7] = { 0.632447, 0.0, 0.238097 },
+ [12] = { 0.632447, 0.0, 0.238097 },
+ [13] = { 0.632447, 0.0, 0.238097 },
+ [14] = { 0.632447, 0.0, 0.238097 },
+ [10] = { 0.0, 0.316224, 0.0 },
+ [2] = { 0.0, 0.316224, 0.0 },
+ [4] = { 0.476196, 0.0, 0.238097 },
+ [5] = { 0.476196, 0.0, 0.238097 },
+ [3] = { 0.476196, 0.0, 0.238097 },
+ [6] = { 0.238097, 0.238097, 0.238097 },
+ }
+ },
+ [3] = {
+ chars = {
+ '∴', '♀', '♂', '〃', '々', 'ぁ', 'ぃ', 'ぅ', 'ぇ', 'ぉ', 'っ', 'ゃ', 'ゅ ',
+ 'ょ', 'ゎ', 'ゕ', 'ゖ', 'ゞ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ッ', 'ャ', 'ュ', 'ョ',
+ 'ヮ', 'ヵ', 'ヶ', 'ㇰ', 'ㇱ', 'ㇲ', 'ㇳ', 'ㇴ', 'ㇵ', 'ㇶ', 'ㇷ', 'ㇸ', 'ㇹ', 'ㇺ',
+ 'ㇻ', 'ㇼ', 'ㇽ', 'ㇾ', 'ㇿ', '$', '¢', '£'
+ },
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.776784, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.111608, 0.0, 0.111608 },
+ [7] = { 0.111608, 0.0, 0.111608 },
+ [12] = { 0.111608, 0.0, 0.111608 },
+ [13] = { 0.111608, 0.0, 0.111608 },
+ [14] = { 0.111608, 0.0, 0.111608 },
+ [10] = { 0.0, 0.316224, 0.0},
+ [2] = { 0.0, 0.316224, 0.0},
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [6] = { 0.476196, 0.0, 0.476196 },
+ [11] = { 0.111608, 0.0, 0.111608 },
+ [1] = { 0.111608, 0.0, 0.111608 },
+ },
+ },
+ [4] = {
+ chars = {
+ '´', '‐', '‖', '‘', '’', '・', '!', ':', ';', '`', '|'
+ },
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.367552, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.316224, 0.0, 0.316224 },
+ [7] = { 0.316224, 0.0, 0.316224 },
+ [12] = { 0.316224, 0.0, 0.316224 },
+ [13] = { 0.316224, 0.0, 0.316224 },
+ [14] = { 0.316224, 0.0, 0.316224 },
+ [10] = { 0.0, 0.316224, 0.0 },
+ [2] = { 0.0, 0.316224, 0.0 },
+ [4] = { 0.0, 0.316224, 0.0 },
+ [5] = { 0.0, 0.316224, 0.0 },
+ [3] = { 0.316224, 0.0, 0.316224 },
+ [6] = { 0.238097, 0.238097, 0.238097 },
+ [11] = { 0.316224, 0.0, 0.316224 },
+ [1] = { 0.316224, 0.0, 0.316224 },
+ }
+ },
+ [5] = {
+ chars = {
+ '§', '¨', '°', '“', '”', '′', '″', 'ゝ', 'ヽ', '?', '^'
+ },
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.523804, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.238097, 0.0, 0.238097 },
+ [7] = { 0.238097, 0.0, 0.238097 },
+ [12] = { 0.238097, 0.0, 0.238097 },
+ [13] = { 0.238097, 0.0, 0.238097 },
+ [14] = { 0.238097, 0.0, 0.238097 },
+ [10] = { 0.0, 0.316224, 0.0 },
+ [2] = { 0.0, 0.316224, 0.0 },
+ [4] = { 0.0, 0.316224, 0.0 },
+ [5] = { 0.0, 0.316224, 0.0 },
+ [3] = { 0.238097, 0.0, 0.238097 },
+ [6] = { 0.238097, 0.238097, 0.238097 },
+ [11] = { 0.238097, 0.0, 0.238097 },
+ [1] = { 0.238097, 0.0, 0.238097 },
+ },
+ },
+ [6] = {
+ chars = {
+ '〈', '《', '「', '『', '【', '〔', '〖', '〘', '〝', '(', '[', '{', '⦅'
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.523804, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [6] = { 0.0, 0.476196, 0.0 },
+ },
+ },
+ [7] = {
+ chars = {
+ 'う', 'く', 'ぐ', 'け', 'げ', 'す', 'ず', 'り', 'テ', 'デ', 'ヤ'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [6] = { 0.476196, 0.0, 0.238097 },
+ },
+ kern = {
+ [10] = -0.05, [11] = -0.05
+ },
+ },
+
+ [10] = {
+ chars = {
+ ',', '.'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.367552, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.632447, 0.0, 0.238097 },
+ [7] = { 0.632447, 0.0, 0.238097 },
+ [12] = { 0.632447, 0.0, 0.238097 },
+ [13] = { 0.632447, 0.0, 0.238097 },
+ [14] = { 0.632447, 0.0, 0.238097 },
+ [10] = { 0.0, 0.316224, 0.0 },
+ [2] = { 0.0, 0.316224, 0.0 },
+ [4] = { 0.476196, 0.0, 0.238097 },
+ [5] = { 0.476196, 0.0, 0.238097 },
+ [3] = { 0.476196, 0.0, 0.238097 },
+ [6] = { 0.238097, 0.238097, 0.238097 },
+ }
+ },
+ [11] = {
+ chars = {
+ '、', '。 '
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.523804, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [0] = { 0.476196, 0.0, 0.238097 },
+ [7] = { 0.476196, 0.0, 0.238097 },
+ [12] = { 0.476196, 0.0, 0.238097 },
+ [13] = { 0.476196, 0.0, 0.238097 },
+ [14] = { 0.476196, 0.0, 0.238097 },
+ [10] = { 0.238097, 0.238097, 0.238097 },
+ [2] = { 0.238097, 0.238097, 0.238097 },
+ [4] = { 0.238097, 0.238097, 0.238097 },
+ [5] = { 0.238097, 0.238097, 0.238097 },
+ [3] = { 0.476196, 0.0, 0.238097 },
+ [6] = { 0.476196, 0.0, 0.238097 },
+ [11] = { 0.0, 0.476196, 0.0 },
+ [1] = { 0.0, 0.476196, 0.0 },
+ }
+ },
+ [12] = {
+ chars = {
+ 'ア', 'イ', 'ウ', 'オ', 'ケ', 'ゲ', 'サ', 'ザ', 'ソ', 'ゾ', 'チ', 'ヂ', 'ツ',
+ 'ヅ', 'ト', 'ド', 'ナ', 'フ', 'ブ', 'プ', 'ミ', 'メ', 'ラ', 'リ', 'ワ', 'ヲ'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [6] = { 0.476196, 0.0, 0.238097 },
+ },
+ kern = {
+ [10] = -0.1, [11] = -0.1
+ },
+ },
+ [13] = {
+ chars = {
+ 'ク', 'グ', 'タ', 'ダ'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [6] = { 0.476196, 0.0, 0.238097 },
+ },
+ kern = {
+ [10] = -0.15, [11] = -0.15
+ },
+ },
+ [14] = {
+ chars = {
+ 'ノ'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = vht, depth = vdp, italic=0.0,
+ glue = {
+ [4] = { 0.316224, 0.0, 0.316224 },
+ [5] = { 0.238097, 0.0, 0.238097 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [6] = { 0.476196, 0.0, 0.238097 },
+ },
+ kern = {
+ [10] = -0.2, [11] = -0.2
+ },
+ },
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd'},
+ },
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-mono.lua b/macros/luatex/generic/luatexja/src/jfm-mono.lua
new file mode 100644
index 0000000000..185e817182
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-mono.lua
@@ -0,0 +1,9 @@
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ }
+} \ No newline at end of file
diff --git a/macros/luatex/generic/luatexja/src/jfm-prop.lua b/macros/luatex/generic/luatexja/src/jfm-prop.lua
new file mode 100644
index 0000000000..71dc1ae694
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-prop.lua
@@ -0,0 +1,9 @@
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 'prop', height = 0.88, depth = 0.12, italic=0.0,
+ }
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-propv.lua b/macros/luatex/generic/luatexja/src/jfm-propv.lua
new file mode 100644
index 0000000000..320ed62648
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-propv.lua
@@ -0,0 +1,9 @@
+luatexja.jfont.define_jfm {
+ dir = 'tate',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 'prop', height = 0.50, depth = 0.50, italic=0.0,
+ }
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-quanjiao.lua b/macros/luatex/generic/luatexja/src/jfm-quanjiao.lua
new file mode 100644
index 0000000000..20590b6a96
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-quanjiao.lua
@@ -0,0 +1,98 @@
+luatexja.jfont.define_jfm {
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [1] = { -- fw. opening punctuations
+ chars = {
+ 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016,
+ 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [3] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [2] = { -- fw. closing/colon/dot punctuations, except 4 & 7
+ chars = {
+ 0x2019, 0x201D, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
+ 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60,
+ 0xFF0E, 0xFF1A, 0xFF1B, 0xFF01, 0xFF1F
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.5 },
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.5 }
+ }
+ },
+
+ [3] = { -- fw. middle dot punctuations
+ chars = {0x30FB},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.25, 0.0, 0.25 },
+ [1] = { 0.25, 0.0, 0.25 },
+ [2] = { 0.25, 0.0, 0.25 },
+ [3] = { 0.5 , 0.0, 0.5 },
+ [4] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.25, 0.0, 0.25 },
+ [7] = { 0.25, 0.0, 0.25 }
+ }
+ },
+
+ [4] = { -- ideographic full stop
+ chars = {0x3002},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.0 },
+ [1] = { 0.5 , 0.0, 0.0 },
+ [3] = { 0.75, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.0 }
+ }
+ },
+
+ [5] = { -- fw. dash punctuations
+ chars = { 0x2015, 0x2025, 0x2026, 0x2014, 0x301C, 0xFF5E },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5 },
+ [3] = { 0.25, 0.0, 0.25 }
+ },
+ kern = {
+ [5] = 0.0
+ }
+ },
+
+ [6] = { -- box end
+ chars = {'boxbdd'},
+ },
+
+ [7] = { -- ideographic comma
+ chars = {0x3001},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.25 },
+ [1] = { 0.5 , 0.0, 0.25 },
+ [3] = { 0.25, 0.0, 0.25 },
+ [5] = { 0.5 , 0.0, 0.25 }
+ }
+ },
+
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-tmin.lua b/macros/luatex/generic/luatexja/src/jfm-tmin.lua
new file mode 100644
index 0000000000..2d9f85b59f
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-tmin.lua
@@ -0,0 +1,189 @@
+-- -*- coding: utf-8 -*-
+-- jfm-tmin.lua: tmin10 互換
+-- Based on utmin10.tfm (a counterpart of tmin10.tfm for upTeX).
+
+local vscale = 0.916443 / 0.962216
+local vht = 0.458221 / 0.962216
+
+luatexja.jfont.define_jfm {
+ dir = 'tate',
+ zw = 1.0, zh = vscale,
+ kanjiskip = { 0.0, 0.091641/0.962216, 0.0 },
+ xkanjiskip = { 0.229101/0.962216, 0.183283/0.962216, 0.114551/0.962216 },
+ [0] = {
+ align = 'middle', left = 0.00, down = 0.00,
+ width = 1.0, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [5] = { 0, 0, 0 },
+ [6] = { 0.5, 0.190480, 0.5 },
+ [7] = { 0.25, 0.190480, 0.25 },
+ [10] = { 0, 0, 0 },
+ }
+ },
+
+ [1] = {
+ chars = {
+ ',', '.'
+ },
+ align = 'left', left = 0.00, down = 0.00,
+ width = 0.5, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = { 0.5, 0.190480, 0.5 },
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 0.5, 0.190480, 0.5 },
+ [4] = { 0, 0, 0 },
+ [5] = { 0.5, 0.190480, 0.5 },
+ [6] = { 0.5, 0.190480, 0.5 },
+ [7] = { 0.5, 0.190480, 0.5 },
+ [10] = { 0, 0, 0 },
+ }
+ },
+
+ [2] = {
+ chars = {
+ '、', '。'
+ },
+ align = 'left', left = 0.00, down = 0.00,
+ width = 0.5, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = { 0.5, 0.190480, 0.5 },
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 0.5, 0.190480, 0.5 },
+ [4] = { 0, 0, 0 },
+ [5] = { 0.5, 0.190480, 0.5 },
+ [6] = { 0.5, 0.190480, 0.5 },
+ [7] = { 0.5, 0.190480, 0.5 },
+ [10] = { 0, 0, 0 },
+ }
+ },
+
+ [3] = {
+ chars = {
+ '〃', '々', 'ぁ', 'ぃ', 'ぅ', 'ぇ', 'ぉ', 'っ', 'ゃ', 'ゅ',
+ 'ょ', 'ゎ', 'ゕ', 'ゖ', 'ゝ', 'ゞ', 'ァ', 'ィ', 'ゥ', 'ェ',
+ 'ォ', 'ッ', 'ャ', 'ュ', 'ョ', 'ヮ', 'ヵ', 'ヶ', 'ヽ', 'ヾ',
+ 'ㇰ', 'ㇱ', 'ㇲ', 'ㇳ', 'ㇴ', 'ㇵ', 'ㇶ', 'ㇷ', 'ㇸ', 'ㇹ',
+ 'ㇺ', 'ㇻ', 'ㇼ', 'ㇽ', 'ㇾ', 'ㇿ',
+ },
+ align = 'middle', left = 0.00, down = 0.00,
+ width = 0.776784, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = { 0.111608, 0.0, 0.111608 },
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [5] = { 0, 0, 0 },
+ [6] = { 0.5, 0.190480, 0.5 },
+ [7] = { 0.25, 0.190480, 0.25 },
+ [10] = { 0, 0, 0 },
+ }
+ },
+
+ [4] = {
+ chars = {
+ '!', '?'
+ },
+ align = 'middle', left = 0.00, down = 0.00,
+ width = 1.0, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = { 1.0, 0.0, 0.5 },
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 1.0, 0.0, 0.5 },
+ [5] = { 0, 0, 0 },
+ [6] = { 1.0, 0.0, 0.5 },
+ [7] = { 1.0, 0.0, 0.5 },
+ [10] = { 0, 0, 0 },
+ }
+ },
+
+ [5] = {
+ chars = {
+ '―', '‥', '…'
+ },
+ align = 'middle', left = 0.00, down = 0.00,
+ width = 1.0, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = { 0, 0, 0 },
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 0, 0, 0 },
+ [4] = { 0, 0, 0 },
+ [5] = { 0, 0, 0 },
+ [6] = { 0.25, 0.190480, 0.25 },
+ [7] = { 0.25, 0.190480, 0.25 },
+ [10] = { 0, 0, 0 },
+ }
+ },
+
+ [6] = { -- 開き括弧類
+ chars = {
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = {0, 0, 0},
+ [1] = {0, 0, 0},
+ [2] = {0, 0, 0},
+ [3] = {0, 0, 0},
+ [4] = {0, 0, 0},
+ [5] = {0, 0, 0},
+ [6] = {0, 0, 0},
+ [7] = { 0.25, 0.0, 0.25 },
+ [8] = {0, 0, 0},
+ [9] = {0, 0, 0},
+ }
+ },
+
+ [7] = {
+ chars = {
+ '‐', '‖', '・', '|'
+ },
+ align = 'middle', left = 0.00, down = 0.00,
+ width = 0.5, height = vht, depth = vht, italic=0.0,
+ glue = {
+ [0] = { 0.25, 0.190480, 0.25 },
+ [1] = { 0.25, 0, 0.25 },
+ [2] = { 0.25, 0, 0.25 },
+ [3] = { 0.111608, 0.0, 0.111608 },
+ [4] = { 0.25, 0.190480, 0.25 },
+ [5] = { 0.25, 0.190480, 0.25 },
+ [6] = { 0.25, 0.190480, 0.25 },
+ [7] = { 0, 0.190480, 0.0 },
+ [10] = { 0.25, 0, 0.25 },
+ }
+ },
+
+ [10] = { -- 閉じ括弧類
+ chars = {
+ '’', '”', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ']', '}', '⦆'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = vht, depth = vht, italic=0.0,
+ glue = {
+-- 3 は四分, 2, 4, 9 は0, あとは0.5
+ [0] = { 0.5 , 0.190480, 0.5 },
+ [1] = { 0, 0, 0 },
+ [2] = { 0, 0, 0 },
+ [3] = { 0.5 , 0.190480, 0.5 },
+ [4] = { 0, 0, 0 },
+ [5] = { 0.25 , 0.190480, 0.25 },
+ [6] = { 0.5 , 0.190480, 0.5 },
+ [7] = { 0.25 , 0.190480, 0.25 },
+ [10] = {0, 0, 0},
+ }
+ },
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd'},
+ },
+
+}
diff --git a/macros/luatex/generic/luatexja/src/jfm-ujis.lua b/macros/luatex/generic/luatexja/src/jfm-ujis.lua
new file mode 100644
index 0000000000..10b44d8103
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-ujis.lua
@@ -0,0 +1,304 @@
+-- -*- coding: utf-8 -*-
+-- jfm-ujis.lua: LuaTeX-ja 標準 JFM
+-- based on upnmlminr-h.tfm (a metric in UTF/OTF package used by upTeX).
+
+-- JIS X 4051:2004 では,行末の句読点や中点はベタなのでそれに従う
+-- kanjiskip: 0pt plus .25zw minus 0pt
+-- xkanjiskip: .25zw plus .25zw (or .0833zw) minus .125zw
+
+
+local t = {
+ version = 3,
+ dir = 'yoko',
+ zw = 1.0, zh = 1.0,
+ kanjiskip = { 0.0, 0.25, 0 },
+ xkanjiskip = { 0.25, 0.25, .125 },
+ [0] = {
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [007] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [107] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = { [307] = 0 },
+ },
+
+ [1] = { -- 開き括弧類
+ chars = {
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+-- 3 のみ四分,あとは0
+ [0] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [1] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1, kanjiskip_stretch=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [5] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [105] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [007] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [107] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [2] = { -- 閉じ括弧類
+ chars = {
+ '’', '”', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ',*'
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+-- 3 は四分, 2, 4, 9 は0, あとは0.5
+ [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1},
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ }
+ },
+
+ [3] = { -- 中点類
+ chars = {'・', ':', ';', '·'},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ --end_stretch = 0.25,
+ glue = {
+-- 3 のみ 0.5,あとは0.25
+ [0] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [1] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [2] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [3] = { 0.5 , 0.0, 0.5 , priority=1 },
+ [4] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [5] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [105] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [6] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [007] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [107] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [207] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [8] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ }
+ },
+
+ [4] = { -- 句点類
+ chars = {'。', '.'},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ -- 3 は.75, 2, 4 は0, あとは0.5
+ [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1./3, kanjiskip_stretch=1 },
+ [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [007] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ }
+ },
+
+ [5] = { -- 分離禁止文字
+ chars = { '—', '―', '‥', '…', '〳', '〴', '〵', },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [5] = 0.0,
+ [105] = 0.0
+ }
+ },
+
+ [105] = { -- 二分(二重)ダッシュ
+ chars = { '゠', '–' },
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [5] = 0.0,
+ [105] = 0.0
+ }
+ },
+
+ [6] = { -- 感嘆符・疑問符
+ chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [0] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [007] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [107] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [207] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [5] = 0.0,
+ [105] = 0.0
+ }
+ },
+
+ [007] = { -- 半角カナ,その他半角CID
+ chars = {
+ '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
+ 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
+ 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
+ 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
+ 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
+ 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
+ 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = { [307] = 0 },
+ },
+
+ [107] = { -- 1/3 角
+ chars = {},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1/3, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [107] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [207] = { -- 1/4 角
+ chars = {},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.25, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [307] = { -- 1/4 角
+ chars = { 0x3099, 0x309A },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [8] = { -- 罫線類.
+ chars = {
+ '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
+ '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
+ '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
+ '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
+ '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
+ '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
+ '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
+ '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
+ '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
+ '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
+ '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
+ '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
+ '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
+ '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
+ '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
+ '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.88, depth = 0.12, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [8] = 0.0
+ }
+ },
+
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd', 'glue'},
+ },
+
+}
+
+local ht = t[007].chars
+for i=231,632 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+for i=8718,8719 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+for i=12063,12087 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+local ht = t[107].chars
+for i=9758,9778 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+local ht = t[207].chars
+for i=9738,9757 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+
+t[100]=table.fastcopy(t[0])
+t[100].chars={'nox_alchar'}
+for i,v in pairs(t) do
+ if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
+ if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
+ if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
+ end
+end
+
+luatexja.jfont.define_jfm(t)
diff --git a/macros/luatex/generic/luatexja/src/jfm-ujisv.lua b/macros/luatex/generic/luatexja/src/jfm-ujisv.lua
new file mode 100644
index 0000000000..ccae212f88
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/jfm-ujisv.lua
@@ -0,0 +1,307 @@
+-- -*- coding: utf-8 -*-
+-- jfm-ujisv.lua: LuaTeX-ja 標準 JFM(縦組み用)
+-- based on upnmlminr-h.tfm (a metric in UTF/OTF package used by upTeX).
+
+-- JIS X 4051:2004 では,行末の句読点や中点はベタなのでそれに従う
+-- kanjiskip: 0pt plus .25zw minus 0pt
+-- xkanjiskip: .25zw plus .25zw (or .0833zw) minus .125zw
+
+
+local t = {
+ version = 3,
+ dir = 'tate',
+ zw = 1.0, zh = 1.0,
+ kanjiskip = { 0.0, 0.25, 0 },
+ xkanjiskip = { 0.25, 0.25, .125 },
+ [0] = {
+ align = 'middle', left = 0.00, down = 0.00,
+ width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [7] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [107] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = { [307] = 0 },
+ },
+
+ [1] = { -- 開き括弧類
+ chars = {
+ '‘', '“', '〈', '《', '「', '『', '【', '〔', '〖',
+ '〘', '〝', '(', '[', '{', '⦅'
+ },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+-- 3 のみ四分,あとは0
+ [0] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [1] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [2] = { 0, 0, 0, kanjiskip_stretch=1, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [5] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [105] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [7] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [107] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [2] = { -- 閉じ括弧類
+ chars = {
+ '’', '”', '〉', '》', '」', '』', '】', '〕',
+ '〗', '〙', '〟', ')', ']', '}', '⦆', '、', ','
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+-- 3 は四分, 2, 4, 9 は0, あとは0.5
+ [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [7] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ }
+ },
+
+ [3] = { -- 中点類
+ chars = {'・', ':', ';', '·'},
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
+ --end_stretch = 0.25,
+ glue = {
+-- 3 のみ 0.5,あとは0.25
+ [0] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [1] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [2] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [3] = { 0.5 , 0.0, 0.25, priority=1 },
+ [4] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [5] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [105] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [6] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [7] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [107] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [207] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [8] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ }
+ },
+
+ [4] = { -- 句点類
+ chars = {'。', '.'},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+-- 3 は.75, 2, 4 は0, あとは0.5
+ [0] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [1] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1./3, kanjiskip_stretch=1 },
+ [5] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [105] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [6] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [7] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [107] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [207] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ [8] = { 0.5 , 0.0, 0.5, ratio=0, kanjiskip_stretch=1 },
+ }
+ },
+
+ [5] = { -- 分離禁止文字
+ chars = { '—', '―', '‥', '…', '〳', '〴', '〵', },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [5] = 0.0,
+ [105] = 0.0,
+ }
+ },
+
+ [5] = { -- -- 二分(二重)ダッシュ
+ chars = { '゠', '–' },
+ align = 'middle', left = 0.0, down = 0.0,
+ width = 0.50, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [5] = 0.0,
+ [105] = 0.0
+ }
+ },
+
+ [6] = { -- 感嘆符・疑問符
+ chars = { '?', '!', '‼', '⁇', '⁈', '⁉', },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+ [0] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.75, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [7] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [107] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [207] = { 1.0 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [5] = 0.0,
+ [105] = 0.0,
+ }
+ },
+
+ [7] = { -- 半角カナ,その他半角CID
+ chars = {
+ '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ',
+ 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ',
+ 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ',
+ 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト',
+ 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ',
+ 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ',
+ 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚',
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 0.5, height = 0.5, depth = 0.5, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [7] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [107] = { -- 1/3 角
+ chars = {},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1/3, height = 0.5, depth = 0.5, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [107] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+ [207] = { -- 1/4 角
+ chars = {},
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1/4, height = 0.5, depth = 0.5, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [207] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+ [307] = { -- 合成用濁点・半濁点
+ chars = { 0x3099, 0x309A },
+ align = 'right', left = 0.0, down = 0.0,
+ width = 0, height = 0.5, depth = 0.5, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [8] = { 0, 0, 0, kanjiskip_shrink=1 },
+ }
+ },
+
+ [8] = { -- 罫線類.
+ chars = {
+ '─', '━', '│', '┃', '┄', '┅', '┆', '┇',
+ '┈', '┉', '┊', '┋', '┌', '┍', '┎', '┏',
+ '┐', '┑', '┒', '┓', '└', '┕', '┖', '┗',
+ '┘', '┙', '┚', '┛', '├', '┝', '┞', '┟',
+ '┠', '┡', '┢', '┣', '┤', '┥', '┦', '┧',
+ '┨', '┩', '┪', '┫', '┬', '┭', '┮', '┯',
+ '┰', '┱', '┲', '┳', '┴', '┵', '┶', '┷',
+ '┸', '┹', '┺', '┻', '┼', '┽', '┾', '┿',
+ '╀', '╁', '╂', '╃', '╄', '╅', '╆', '╇',
+ '╈', '╉', '╊', '╋', '╌', '╍', '╎', '╏',
+ '═', '║', '╒', '╓', '╔', '╕', '╖', '╗',
+ '╘', '╙', '╚', '╛', '╜', '╝', '╞', '╟',
+ '╠', '╡', '╢', '╣', '╤', '╥', '╦', '╧',
+ '╨', '╩', '╪', '╫', '╬', '╭', '╮', '╯',
+ '╰', '╱', '╲', '╳', '╴', '╵', '╶', '╷',
+ '╸', '╹', '╺', '╻', '╼', '╽', '╾', '╿',
+ },
+ align = 'left', left = 0.0, down = 0.0,
+ width = 1.0, height = 0.50, depth = 0.50, italic=0.0,
+ glue = {
+ [1] = { 0.5 , 0.0, 0.5, ratio=1, kanjiskip_stretch=1 },
+ [2] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [3] = { 0.25, 0.0, 0.25, priority=1, ratio=1 },
+ [4] = { 0, 0, 0, kanjiskip_shrink=1 },
+ [6] = { 0, 0, 0, kanjiskip_shrink=1 },
+ },
+ kern = {
+ [8] = 0.0
+ }
+ },
+
+ [99] = { -- box末尾
+ chars = {'boxbdd', 'parbdd', 'glue'},
+ },
+
+}
+local ht = t[007].chars
+for i=8950,9353 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+for i=10185,10195 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+local ht = t[107].chars
+for i=13274,13294 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+local ht = t[207].chars
+for i=13254,13273 do ht[#ht+1] = 'AJ1-' .. tostring(i) end
+
+t[100]=table.fastcopy(t[0])
+t[100].chars={'nox_alchar'}
+for i,v in pairs(t) do
+ if i~=6 and type(i)=='number' and type(v)=='table' then -- 感嘆符以外
+ if v.glue and v.glue[0] then v.glue[100] = v.glue[0] end
+ if v.kern and v.kern[0] then v.kern[100] = v.kern[0] end
+ end
+end
+t[200]=table.fastcopy(t[0])
+t[200].chars={'〱', '〲'}
+t[200].width = 2.0
+for i,v in pairs(t) do
+ if type(v)=='table' then
+ if v.glue and v.glue[0] then v.glue[200] = v.glue[0] end
+ if v.kern and v.kern[0] then v.kern[200] = v.kern[0] end
+ end
+end
+
+luatexja.jfont.define_jfm(t)
diff --git a/macros/luatex/generic/luatexja/src/lltjext.sty b/macros/luatex/generic/luatexja/src/lltjext.sty
new file mode 100644
index 0000000000..eb1087ad6b
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/lltjext.sty
@@ -0,0 +1,758 @@
+%
+% lltjext.sty: derived from plext.sty in pLaTeX.
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjext}[2018/10/07 v1.2k-ltj-10 Macros for vertical writing]
+\RequirePackage{luatexja}
+\newcount\ltj@ext@dir
+\let\ltj@lltjext@orig@tabular=\tabular
+\let\ltj@lltjext@orig@array=\array
+
+%%% array and tabular
+\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
+ \let\@classiv\@arrayclassiv
+ \let\\\@arraycr\let\@halignto\@empty
+ \ltj@ext@dir=\ltjgetparameter{direction}\relax\X@tabarray}
+\def\tabular{\let\@halignto\@empty\X@tabular}
+\@namedef{tabular*}{\@ifnextchar<%>
+ {\p@stabular}{\p@stabular<Z>}}
+{\catcode`\*=11
+\global\let\ltj@lltjext@orig@tabularS=\tabular*
+}%
+\def\X@tabarray{\@ifnextchar<%>
+ {\p@tabarray}{\p@tabarray<Z>}}
+\def\X@tabular{\@ifnextchar<%>
+ {\p@tabular}{\p@tabular<Z>}}
+\def\p@stabular<#1>#2{%
+ \setlength\dimen@{#2}%
+ \edef\@halignto{to\the\dimen@}\p@tabular<#1>}
+\def\p@tabular<#1>{\leavevmode \hbox \bgroup
+ \ltj@ext@dir=\ltjgetparameter{direction}
+ $\let\@acol\@tabacol
+ \let\@classz\@tabclassz
+ \let\@classiv\@tabclassiv \let\\\@tabularcr\p@tabarray<#1>}
+\def\p@tabarray<#1>{\m@th\@ifnextchar[%]
+ {\p@array<#1>}{\p@array<#1>[c]}}
+
+\def\p@array<#1>[#2]#3{%
+ \let\box@dir\relax
+ \if #1z\relax
+ \ifnum\ltj@ext@dir=3\relax
+ \let\box@dir\utod\@tempcnta=\zstrutbox
+ \fi
+ \else
+ \if #1y\relax
+ \let\box@dir\yoko\@tempcnta=\ystrutbox
+ \else\if #1t\relax
+ \let\box@dir\tate\@tempcnta=\tstrutbox
+ \else\if #1d\relax
+ \let\box@dir\dtou\@tempcnta=\dstrutbox
+ \else\if #1u\relax
+ \let\box@dir\utod\@tempcnta=\zstrutbox
+ \fi\fi\fi\fi
+ \fi
+ \ifx\box@dir\relax
+ \ifcase\ltj@ext@dir
+ \or \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou
+ \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate
+ \or \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko
+ \else \let\box@dir\utod\@tempcnta=\zstrutbox% utod
+ \fi
+ \fi
+ \fork@array@option<#1>[#2]\@begin@alignbox
+ \bgroup\box@dir\adjustbaseline
+ \setbox\@arstrutbox\hbox{%
+ \box@dir
+ \vrule\@height\arraystretch\ltjgetht\@tempcnta
+ \@depth\arraystretch\ltjgetdp\@tempcnta \@width\z@}%
+ \@mkpream{#3}\edef\@preamble{\ialign \noexpand\@halignto
+ \bgroup\@arstrut \@preamble \tabskip\z@skip \cr}%
+ \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
+ \let\tabularnewline\\%
+ \let\par\@empty
+ \let\@sharp##%
+ \set@typeset@protect
+ \lineskip\z@skip\baselineskip\z@skip
+ \ifhmode \@preamerr\z@ \@@par\fi
+ \@preamble}
+\def\endarray{\crcr\egroup\egroup\@end@alignbox}
+\def\endtabular{\endarray$\egroup}
+\expandafter \let \csname endtabular*\endcsname = \endtabular
+% ↓中身\周囲→ yoko tate utod dtou
+% yoko A* B* B B
+% tate B* A* D C
+% utod B D* A C
+% dtou B C C A
+% A: 周囲と中身の組方向が一致.そのまま \vtop/\vcenter/\vbox
+% B: 周囲と中身が90度ずれ.上端/下端がベースラインに揃うように
+% C: 周囲と中身が180度ずれ.\vtop, \vbox 入れ替え
+% D: 欧文ベースライン同士を揃えるようにする
+
+\def\fork@array@option@@A#1{%
+ \let\@end@alignbox\relax
+ \if #1t\relax \let\@begin@alignbox\vtop
+ \else\if #1b\relax\let\@begin@alignbox\vbox
+ \else \let\@begin@alignbox\vcenter
+ \fi\fi}
+\def\fork@array@option@@B#1{%
+ \if #1t\relax
+ \def\@begin@alignbox{\vtop\bgroup\kern\z@\vbox}%
+ \let\@end@alignbox\egroup
+ \else\if #1b\relax
+ \def\@begin@alignbox{\vbox\bgroup\vbox}%
+ \def\@end@alignbox{\kern\z@\egroup}%
+ \else
+ \let\@begin@alignbox\vcenter
+ \let\@end@alignbox\relax
+ \fi\fi}
+\def\fork@array@option@@C#1{%
+ \let\@end@alignbox\relax
+ \if #1t\relax \let\@begin@alignbox\vbox
+ \else\if #1b\relax\let\@begin@alignbox\vtop
+ \else \let\@begin@alignbox\vcenter
+ \fi\fi}
+\def\fork@array@option<#1>[#2]{%
+\ifnum\ltj@ext@dir=4 % yoko
+ \ifx\box@dir\yoko \fork@array@option@@A{#2}%
+ \else \fork@array@option@@B{#2}%
+ \fi
+\else\ifnum\ltj@ext@dir=1 % dtou
+ \ifx\box@dir\yoko \fork@array@option@@B{#2}%
+ \else\ifx\box@dir\dtou \fork@array@option@@A{#2}%
+ \else \fork@array@option@@C{#2}%
+ \fi\fi
+\else\ifnum\ltj@ext@dir=3 % tate
+ \ifx\box@dir\yoko \fork@array@option@@B{#2}%
+ \else\ifx\box@dir\tate \fork@array@option@@A{#2}%
+ \else\ifx\box@dir\dtou \fork@array@option@@C{#2}%
+ \else
+ \if #2t\relax
+ \def\@begin@alignbox{\lower\dimexpr
+ \ltjgetparameter{talbaselineshift}-\ltjgetparameter{yalbaselineshift}\vtop}
+ \let\@end@alignbox\relax
+ \else\if #2b\relax
+ \def\@begin@alignbox{\lower\dimexpr
+ \ltjgetparameter{talbaselineshift}-\ltjgetparameter{yalbaselineshift}\vbox}
+ \let\@end@alignbox\relax
+ \else
+ \let\@begin@alignbox\vcenter
+ \let\@end@alignbox\relax
+ \fi\fi
+ \fi\fi\fi
+\else % utod
+ \ifx\box@dir\yoko \fork@array@option@@B{#2}%
+ \else\ifx\box@dir\utod \fork@array@option@@A{#2}%
+ \else\ifx\box@dir\dtou \fork@array@option@@C{#2}%
+ \else
+ \if #2t\relax
+ \def\@begin@alignbox{\lower\dimexpr
+ \ltjgetparameter{yalbaselineshift}-\ltjgetparameter{talbaselineshift}\vtop}
+ \let\@end@alignbox\relax
+ \else\if #2b\relax
+ \def\@begin@alignbox{\lower\dimexpr
+ \ltjgetparameter{yalbaselineshift}-\ltjgetparameter{talbaselineshift}\vbox}
+ \let\@end@alignbox\relax
+ \else
+ \let\@begin@alignbox\vcenter
+ \let\@end@alignbox\relax
+ \fi\fi
+ \fi\fi\fi
+\fi\fi\fi}
+
+%%% caption
+\newbox\@floatbox
+\newdimen\floatwidth
+\newdimen\floatheight
+\newdimen\floatruletick \floatruletick=0.4pt
+\newdimen\captionfloatsep \captionfloatsep=10pt
+\def\caption@dir{Z}
+\let\captiondir\relax
+\newdimen\captionwidth \captionwidth\z@
+\def\caption@posa{Z}
+\def\caption@posb{Z}
+\newbox\@captionbox
+\def\captionfontsetup{\normalfont\normalsize}
+\def\layoutfloat{\@ifnextchar(%)
+ {\X@layoutfloat}{\X@layoutfloat(-5\p@,-5\p@)}}
+\def\X@layoutfloat(#1,#2){\@ifnextchar[%]
+ {\@layoutfloat(#1,#2)}{\@layoutfloat(#1,#2)[c]}}
+\long\def\@layoutfloat(#1,#2)[#3]#4{%
+ \setbox\z@\hbox{#4}%
+ \floatwidth=#1 \floatheight=#2 \edef\float@pos{#3}%
+ \ifdim\floatwidth<\z@
+ \floatwidth\ltjgetwd\z@\floatruletick\z@
+ \fi
+ \ifdim\floatheight<\z@
+ \floatheight\ltjgetht\z@\advance\floatheight\ltjgetdp\z@\relax
+ \floatruletick\z@
+ \fi
+ \setbox\@floatbox\vbox to\floatheight{\offinterlineskip
+ \hrule width\floatwidth height\floatruletick depth\z@
+ \vss\hbox to\floatwidth{%
+ \vrule width\floatruletick height\floatheight depth\z@
+ \hss\vbox to\floatheight{\hsize\floatwidth\vss#4\vss}\hss
+ \vrule width\floatruletick height\floatheight depth\z@
+ }\hrule width\floatwidth height\floatruletick depth\z@}}
+\def\DeclareLayoutCaption#1<#2>(#3)[#4#5]{%
+ \expandafter
+ \ifx\csname #1@layoutc@ption\endcsname\relax \else
+ \@latex@info{Redeclaring capiton layout setting of '#1'}%
+ \fi
+ \expandafter
+ \gdef\csname #1@layoutc@ption\endcsname{%
+ \if Z\caption@dir\def\caption@dir{#2}\fi
+ \ifdim\captionwidth=\z@ \captionwidth=#3\relax\fi
+ \if Z\caption@posa\def\caption@posa{#4}\fi
+ \if Z\caption@posb\def\caption@posb{#5}\fi}}
+\@onlypreamble\DeclareLayoutCaption
+\DeclareLayoutCaption{figure}<n>(.8\linewidth)[cd]
+\DeclareLayoutCaption{table}<n>(.8\linewidth)[cu]
+\def\layoutcaption{\def\caption@dir{Z}\captionwidth\z@
+ \def\caption@posa{Z}\def\caption@posb{Z}%
+ \@ifnextchar<\X@layoutcaption{%
+ \@ifnextchar(\@ilayoutcaption{%
+ \@ifnextchar[\@iilayoutcaption\relax}}}
+\def\X@layoutcaption<#1>{\def\caption@dir{#1}%
+ \@ifnextchar(\@ilayoutcaption{%
+ \@ifnextchar[\@iilayoutcaption\relax}}
+\def\@ilayoutcaption(#1){\setlength\captionwidth{#1}%
+ \@ifnextchar[{\@iilayoutcaption}{\relax}}
+\def\@iilayoutcaption[#1#2]{%
+ \def\caption@posa{#1}\def\caption@posb{#2}}
+\def\pcaption{%
+ \ifx\@captype\@undefined
+ \@latex@error{\noexpand\pcaption outside float}\@ehd
+ \expandafter\@gobble
+ \else
+ \refstepcounter\@captype
+ \expandafter\@firstofone
+ \fi
+ {\@dblarg{\@pcaption\@captype}}%
+}
+\long\def\@pcaption#1[#2]#3{%
+ \addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces#2}}%
+ \ifvoid\@floatbox
+ \@latex@error{Use \noexpand\pcaption with `\protect\layoutfloat'}\@eha
+ \fi
+ \make@pcaptionbox{#3}%
+ \@pboxswfalse
+ \setbox\@tempboxa\vbox{\hbox to\hsize{\if l\float@pos\else\hss\fi
+ \if l\caption@posb\box\@captionbox\kern\captionfloatsep\fi
+ \if t\caption@posa\vtop
+ \else\if b\caption@posa\vbox
+ \else\@pboxswtrue $\vcenter \fi\fi
+ {\if u\caption@posb\box\@captionbox\kern\captionfloatsep\fi
+ \unvbox\@floatbox
+ \if d\caption@posb\kern\captionfloatsep\box\@captionbox\fi}%
+ \if@pboxsw \m@th$\fi
+ \if r\caption@posb\kern\captionfloatsep\box\@captionbox\fi
+ \if r\float@pos\else\hss\fi}}%
+ \par\vskip.25\baselineskip
+ \box\@tempboxa}
+\def\make@pcaptionbox#1{%
+ \expandafter
+ \ifx\csname\@captype @layoutc@ption\endcsname\relax
+ \@latex@warning{Default caption layout of `\@captype' unknown.}%
+ \def\caption@dir{Z}\captionwidth\z@
+ \def\caption@posa{Z}\def\caption@posb{Z}%
+ \else
+ \csname \@captype @layoutc@ption\endcsname
+ \fi
+ \@tempswafalse
+ % \@tempswa: 基本組の組方向とキャプションの組方向が直交するか?
+ \if y\caption@dir \let\captiondir\yoko
+ \ifodd\ltjgetparameter{direction}\relax\@tempswatrue\fi
+ \else\if z\caption@dir \let\captiondir\relax
+ \ifnum\ltjgetparameter{direction}=3\relax\let\captiondir\utod\fi
+ \else\if d\caption@dir \let\captiondir\dtou
+ \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
+ \else\if u\caption@dir \let\captiondir\utod
+ \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
+ \else\if t\caption@dir \let\captiondir\tate
+ \ifodd\ltjgetparameter{direction}\else\@tempswatrue\fi
+ \fi\fi\fi\fi\fi
+ \setbox0\hbox{\hbox{\captiondir
+ \captionfontsetup\parindent\z@\inhibitglue
+ \csname fnum@\@captype\endcsname  #1}}%"
+ \if@tempswa\@tempdima\ltjgetht0 \advance\@tempdima\ltjgetdp0
+ \else\@tempdima\ltjgetwd0 \fi
+ \ifdim\@tempdima>\captionwidth \@tempdima\captionwidth \fi
+ \@pboxswfalse
+ \setbox0\hbox{%
+ \if u\caption@posb\vbox
+ \else\if d\caption@posb\vbox
+ \else\if t\caption@posa\vtop
+ \else\if b\caption@posa\vbox
+ \else\ifmmode\vcenter\else\@pboxswtrue $\vcenter\fi
+ \fi\fi\fi\fi
+ {\hsize\@tempdima\kern\z@
+ \vbox{\captiondir\hsize\@tempdima
+ \captionfontsetup\parindent\z@\inhibitglue
+ \csname fnum@\@captype\endcsname  #1}\kern\z@
+ }\if@pboxsw \m@th$\fi}%
+ \let\to@captionboxwidth\relax
+ \if l\caption@posb \else\if r\caption@posb\else
+ \def\to@captionboxwidth{to\floatwidth}\fi\fi
+ \setbox\@captionbox\hbox\to@captionboxwidth{%
+ \if t\caption@posa\else\hss\fi
+ \unhbox0\relax
+ \if b\caption@posa\else\hss\fi}}
+
+%%% minipage and parbox
+\def\minipage{\@ifnextchar<%>
+ {\X@minipage}{\X@minipage<Z>}}
+\def\X@minipage<#1>{\@ifnextchar[%]
+ {\@iminipage<#1>}{\@iiiminipage<#1>{c}\relax[s]}}
+\def\@iminipage<#1>[#2]{\@ifnextchar[%]
+ {\@iiminipage<#1>{#2}}{\@iiiminipage<#1>{#2}\relax[s]}}
+\def\@iiminipage<#1>#2[#3]{\@ifnextchar[%]
+ {\@iiiminipage<#1>{#2}{#3}}{\@iiiminipage<#1>{#2}{#3}[#2]}}
+\def\@iiiminipage<#1>#2#3[#4]#5{%
+ \leavevmode\bgroup
+ \setlength\@tempdima{#5}%
+ \def\@mpargs{<#1>{#2}{#3}[#4]{#5}}%
+ \let\box@dir\relax
+ \if #1z\relax
+ \ifnum\ltjgetparameter{direction}=3\relax
+ \let\box@dir\utod
+ \fi
+ \else
+ \if #1y\relax \let\box@dir\yoko
+ \else\if #1t\relax\let\box@dir\tate
+ \else\if #1d\relax\let\box@dir\dtou
+ \else\if #1u\relax\let\box@dir\utod
+ \fi\fi\fi\fi
+ \fi
+ \ifx\box@dir\relax
+ \ifcase\ltjgetparameter{direction}\relax
+ \or \let\box@dir\dtou
+ \or\or\let\box@dir\tate
+ \or \let\box@dir\yoko
+ \else \let\box@dir\utod
+ \fi
+ \fi
+ \setbox\@tempboxa\vbox\bgroup\box@dir
+ \adjustbaseline
+ \color@begingroup
+ \hsize\@tempdima
+ \textwidth\hsize \columnwidth\hsize
+ \@parboxrestore
+ \def\@mpfn{mpfootnote}\def\thempfn{\thempfootnote}%
+ \c@mpfootnote\z@
+ \let\@footnotetext\@mpfootnotetext
+ \let\@listdepth\@mplistdepth \@mplistdepth\z@
+ \@minipagerestore
+ \@setminipage}
+\def\endminipage{%
+ \par
+ \unskip
+ \ifvoid\@mpfootins\else
+ \vskip\skip\@mpfootins
+ \normalcolor
+ \footnoterule
+ \unvbox\@mpfootins
+ \fi
+ \@minipagefalse %% added 24 May 89
+ \color@endgroup
+ \egroup
+ \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}\egroup}
+\DeclareRobustCommand\parbox{\@ifnextchar<%>
+ {\X@parbox}{\X@parbox<Z>}}
+\def\X@parbox<#1>{\@ifnextchar[%]
+ {\@iparbox<#1>}{\@iiiparbox<#1>{c}\relax[s]}}
+\def\@iparbox<#1>[#2]{\@ifnextchar[%]
+ {\@iiparbox<#1>{#2}}{\@iiiparbox<#1>{#2}\relax[s]}}
+\def\@iiparbox<#1>#2[#3]{\@ifnextchar[%]%
+ {\@iiiparbox<#1>{#2}{#3}}{\@iiiparbox<#1>{#2}{#3}[#2]}}
+\long\def\@iiiparbox<#1>#2#3[#4]#5#6{%
+ \leavevmode
+ \setlength\@tempdima{#5}%
+ \fork@parbox@option<#1>[#2]%
+ \@begin@tempboxa\vbox{\box@dir
+ \hsize\@tempdima\@parboxrestore\adjustbaseline#6\@@par}%
+ \ifx\relax#3\else
+ \setlength\@tempdimb{#3}%
+ \edef\@parboxto{to\the\@tempdimb}%
+ \fi
+ \@begin@parbox\@parboxto{\box@dir\adjustbaseline
+ \let\hss\vss\let\unhbox\unvbox
+ \csname bm@#4\endcsname}\@end@parbox
+ \@end@tempboxa}
+
+
+% ↓中身\周囲→ yoko tate utod dtou
+% yoko A* B* B B
+% tate B* A* D C
+% utod B D* A C
+% dtou B C C A
+% A: 周囲と中身の組方向が一致.そのまま \vtop/\vcenter/\vbox
+% B: 周囲と中身が90度ずれ.上端が和文の高さ or 下端が和文の深さに揃うように
+% C: 周囲と中身が180度ずれ.(コードは B のものを流用)
+% D: 上端が和文の高さ or 下端が和文の深さに揃うように(コードは B のものを流用)
+
+\def\fork@parbox@option@@A#1{%
+ \let\@end@parbox\relax
+ \if #1t\relax \let\@begin@parbox\vtop
+ \else\if #1b\relax\let\@begin@parbox\vbox
+ \else
+ \ifmmode
+ \let\@begin@parbox\vcenter\let\@end@parbox\relax
+ \else
+ \def\@begin@parbox{\null$\vcenter}%
+ \def\@end@parbox{\m@th$\null}%
+ \fi
+ \fi\fi}
+\def\lltjext@getjablshift{%
+ \ifnum\ltj@ext@dir=3 \ltjgetparameter{tjabaselineshift}\else
+ \ltjgetparameter{yjabaselineshift}\fi}
+\def\fork@parbox@option@@B#1{%
+ \if #1t\relax
+ \def\@begin@parbox{\raise\dimexpr\cht-\lltjext@getjablshift\vtop\bgroup\kern\z@\vbox}%
+ \let\@end@parbox\egroup
+ \else\if #1b\relax
+ \def\@begin@parbox{\lower\dimexpr\cdp+\lltjext@getjablshift\vbox\bgroup\vbox}%
+ \def\@end@parbox{\kern\z@\egroup}%
+ \else
+ \ifmmode
+ \let\@begin@parbox\vcenter\let\@end@parbox\relax
+ \else
+ \def\@begin@parbox{\null$\vcenter}%
+ \def\@end@parbox{\m@th$\null}%
+ \fi
+ \fi\fi}
+\let\fork@parbox@option@@C=\fork@parbox@option@@B
+\def\fork@parbox@option<#1>[#2]{%
+ \let\box@dir\relax \ltj@ext@dir=\ltjgetparameter{direction}\relax
+ \if #1z\relax
+ \ifnum\ltj@ext@dir=3\relax
+ \let\box@dir\utod
+ \fi
+ \else
+ \if #1y\relax \let\box@dir\yoko
+ \else\if #1t\relax\let\box@dir\tate
+ \else\if #1d\relax\let\box@dir\dtou
+ \else\if #1u\relax\let\box@dir\utod
+ \fi\fi\fi\fi
+ \fi
+ \ifx\box@dir\relax
+ \ifcase\ltj@ext@dir
+ \or \let\box@dir\dtou
+ \or\or\let\box@dir\tate
+ \or \let\box@dir\yoko
+ \else \let\box@dir\utod
+ \fi
+ \fi
+\ifnum\ltj@ext@dir=4 % yoko
+ \ifx\box@dir\yoko \fork@parbox@option@@A{#2}%
+ \else \fork@parbox@option@@B{#2}%
+ \fi
+\else\ifnum\ltj@ext@dir=1 % dtou
+ \ifx\box@dir\yoko \fork@parbox@option@@B{#2}%
+ \else\ifx\box@dir\dtou \fork@parbox@option@@A{#2}%
+ \else \fork@parbox@option@@C{#2}%
+ \fi\fi
+\else\ifnum\ltj@ext@dir=3 % tate
+ \ifx\box@dir\yoko \fork@parbox@option@@B{#2}%
+ \else\ifx\box@dir\tate \fork@parbox@option@@A{#2}%
+ \else\ifx\box@dir\dtou \fork@parbox@option@@C{#2}%
+ \else \fork@parbox@option@@B{#2}% D
+ \fi\fi\fi
+\else % utod
+ \ifx\box@dir\yoko \fork@parbox@option@@B{#2}%
+ \else\ifx\box@dir\utod \fork@parbox@option@@A{#2}%
+ \else\ifx\box@dir\dtou \fork@parbox@option@@C{#2}%
+ \else \fork@parbox@option@@B{#2}% D
+ \fi\fi\fi
+\fi\fi\fi}
+
+%%% pbox
+\DeclareRobustCommand\pbox{\leavevmode\@ifnextchar<{\X@makePbox}{\X@makePbox<Z>}}
+\def\X@makePbox<#1>{%
+ \@ifnextchar[{\@imakePbox<#1>}{\@imakePbox<#1>[-5\p@]}}
+\def\@imakePbox<#1>[#2]{\@ifnextchar[%]
+ {\@iimakePbox<#1>{#2}}{\@iimakePbox<#1>{#2}[c]}}
+\def\@iimakePbox<#1>#2[#3]#4{%
+ \bgroup\let\box@dir\relax
+ \if #1z\relax
+ \ifnum\ltjgetparameter{direction}=3 \relax
+ \let\box@dir\utod
+ \fi
+ \else
+ \if #1y\relax \let\box@dir\yoko
+ \else\if #1t\relax\let\box@dir\tate
+ \else\if #1d\relax\let\box@dir\dtou
+ \else\if #1u\relax\let\box@dir\utod
+ \fi\fi\fi\fi
+ \fi
+ \ifx\box@dir\relax
+ \ifcase\ltjgetparameter{direction}
+ \or \let\box@dir\dtou
+ \or\or\let\box@dir\tate
+ \or \let\box@dir\yoko
+ \else \let\box@dir\utod
+ \fi
+ \fi
+ \setlength{\@tempdima}{#2}%
+ \ifdim\@tempdima<\z@ \hbox{\box@dir#4}\else
+ \hb@xt@\@tempdima{\box@dir
+ \if #3l\relax\else\hss\fi
+ #4\relax
+ \if #3r\relax\else\hss\fi}\fi\egroup}
+
+%%% picture
+\def\picture{\@ifnextchar<%>
+ {\X@picture}{\X@picture<Z>}}
+\def\X@picture<#1>(#2,#3){\@ifnextchar(%)
+ {\@@picture<#1>(#2,#3)}{\@@picture<#1>(#2,#3)(0,0)}}
+\newdimen\@picwd
+\def\ltj@@pic@reset@blshift{%
+ \ltj@yablshift\z@\ltj@ykblshift\z@
+ \ltj@tablshift\z@\ltj@tkblshift\z@
+}%
+\def\@@picture<#1>(#2,#3)(#4,#5){%
+ \edef\ltj@@pic@save@blshift{%
+ \noexpand\ltj@yablshift\the\ltj@yablshift\noexpand\relax
+ \noexpand\ltj@ykblshift\the\ltj@ykblshift\noexpand\relax
+ \noexpand\ltj@tablshift\the\ltj@tablshift\noexpand\relax
+ \noexpand\ltj@tkblshift\the\ltj@tkblshift\noexpand\relax
+ }%
+ \bgroup\let\box@dir\relax
+ \if #1z\relax
+ \ifnum\ltjgetparameter{direction}=3 \relax
+ \let\box@dir\utod
+ \fi
+ \else
+ \if #1y\relax \let\box@dir\yoko
+ \else\if #1t\relax\let\box@dir\tate
+ \else\if #1d\relax\let\box@dir\dtou
+ \else\if #1u\relax\let\box@dir\utod
+ \fi\fi\fi\fi
+ \fi
+ \ifx\box@dir\relax
+ \ifcase\ltjgetparameter{direction}
+ \or \let\box@dir\dtou
+ \or\or\let\box@dir\tate
+ \or \let\box@dir\yoko
+ \else \let\box@dir\utod
+ \fi
+ \fi
+ \@picwd=#2\unitlength \@picht=#3\unitlength
+ \setbox\@picbox\hbox to\@picwd\bgroup\box@dir
+ \hskip-#4\unitlength\lower#5\unitlength\hbox\bgroup
+ \ltj@@pic@reset@blshift
+ \ignorespaces}
+\def\endpicture{%
+ \egroup\hss\egroup
+ \setbox0=\hbox{\box@dir%
+ \ltjsetht\@picbox\@picht \ltjsetdp\@picbox\z@
+ }%
+ \@tempswafalse
+ \ifnum\ltjgetparameter{direction}=3 \@tempswatrue\fi
+ \ifnum\ltjgetparameter{direction}=11 \@tempswatrue\fi
+ \if@tempswa
+ \ifx\box@dir\yoko % この場合だけ垂直位置補正が必要
+ \ltjsetht\@picbox\dimexpr\ltjgetht\@picbox+\ltjgetdp\@picbox\relax
+ \ltjsetdp\@picbox\z@
+ \fi
+ \fi
+ \mbox{\box\@picbox}%
+ \egroup\ltj@@pic@save@blshift}
+\let\org@put\put
+\def\put{\ltj@@pic@reset@blshift\org@put}
+\let\org@line\line
+\def\line{\ltj@@pic@reset@blshift\org@line}
+\let\org@vector\vector
+\def\vector{\ltj@@pic@reset@blshift\org@vector}
+\let\org@dashbox\dashbox
+\def\dashbox{\ltj@@pic@reset@blshift\org@dashbox}
+\let\org@oval\oval
+\def\oval{\ltj@@pic@reset@blshift\org@oval}
+\let\org@circle\circle
+\def\circle{\ltj@@pic@reset@blshift\org@circle}
+
+%%% rensuji
+\newif\ifnot@advanceline
+\newskip\rensujiskip
+\rensujiskip=0.25\chs plus.25\zw minus.25\zw
+\DeclareRobustCommand\rensuji{%
+ \@ifstar{\not@advancelinetrue\@rensuji}{\@rensuji}}
+\def\@rensuji{\@ifnextchar[{\@@rensuji}{\@@rensuji[c]}}
+\def\@@rensuji[#1]#2{%
+ \ifvmode\leavevmode\fi
+ \ifnum\ltjgetparameter{direction}=4\relax\hbox{#2}\else
+ \hskip\rensujiskip
+ \setbox\tw@\hbox{漢}% 「あ」では仮名書体使用時がまずそう
+ \@tempdimb\ltjgetht\tw@ \advance\@tempdimb\ltjgetdp\tw@
+ \ifnot@advanceline\not@advancelinefalse\else
+ \setbox\z@\hbox{\yoko#2}%
+ \@tempdima\ltjgetht\z@ \advance\@tempdima\ltjgetdp\z@
+ \ifnum\ltjgetparameter{direction}=1\relax
+ % 周囲が dtou の場合には,高さ \ltjgetht\tw@, 深さ \ltjgetdp\tw@ のボックスを基準としている.
+ \if #1c\relax\vrule \@width \z@ \@height\dimexpr.5\@tempdima+.5\ltjgetht\tw@-.5\ltjgetdp\tw@
+ \@depth\dimexpr.5\@tempdima-.5\ltjgetht\tw@+.5\ltjgetdp\tw@
+ \else\if #1l\relax\vrule\@width \z@\@height\ltjgetht\tw@ \@depth\dimexpr\@tempdima-\ltjgetht\tw@
+ \else\vrule\@width \z@ \@height\dimexpr\@tempdima-\ltjgetdp\tw@ \@depth\ltjgetdp\tw@
+ \fi\fi
+ \else
+ % 周囲が tate, utod の場合も同じ
+ \if #1c\relax\vrule \@width \z@ \@height\dimexpr.5\@tempdima+.5\ltjgetht\tw@-.5\ltjgetdp\tw@
+ \@depth\dimexpr.5\@tempdima-.5\ltjgetht\tw@+.5\ltjgetdp\tw@
+ \else\if #1r\relax\vrule\@width \z@\@height\ltjgetht\tw@ \@depth\dimexpr\@tempdima-\ltjgetht\tw@
+ \else\vrule\@width \z@ \@height\dimexpr\@tempdima-\ltjgetdp\tw@ \@depth\ltjgetdp\tw@
+ \fi\fi
+ \fi
+ \fi
+ \ifnum\ltjgetparameter{direction}=1\relax
+ \if #1c\relax\hbox to\@tempdimb{\yoko\hss#2\hss\kern-\ltjgetdp\tw@}%
+ \else\if #1r\relax\vbox{\hbox to\@tempdimb{\yoko\hss#2\kern-\ltjgetdp\tw@}}%
+ \else\lower\ltjgetdp\tw@\vtop{\hbox to\@tempdimb{\yoko#2\hss}}%
+ \fi\fi
+ \else
+ \if #1c\relax\raise\dimexpr.5\@tempdimb-\ltjgetdp\tw@
+ \hbox to\@tempdimb{\yoko \hss#2\hss}%
+ \else\if #1r\relax\raise\dimexpr.5\@tempdimb-\ltjgetdp\tw@
+ \vbox{\hbox to\@tempdimb{\yoko\hss#2}}%
+ \else\raise\dimexpr.5\@tempdimb-\ltjgetdp\tw@
+ \vtop{\hbox to\@tempdimb{\yoko #2\hss}}%
+ \fi\fi
+ \fi
+ \hskip\rensujiskip
+\fi}
+\let\Rensuji\rensuji
+\let\prensuji\rensuji
+
+%%% kanji
+\def\Kanji#1{\expandafter\@Kanji\csname c@#1\endcsname}
+\def\@Kanji#1{\kansuji #1}
+\def\kanji{\ifnum\ltjgetparameter{direction}=3 \expandafter\kansuji\fi}
+
+%%% bou
+%%%
+\def\boutenchar{\char\euc"A1A2}%"
+\def\bou#1{\ifvmode\leavevmode\fi\@bou#1\end}
+\def\@bou#1{%
+ \ifx#1\end \let\ltj@@next=\relax
+ \else
+ \ifnum\ltjgetparameter{direction}=3\relax
+ \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
+ \vss\moveleft0.2\zw\hbox{\yoko\boutenchar}\nointerlineskip
+ \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
+ \else
+ \hbox to\z@{\vbox to\z@{\boxmaxdepth\maxdimen
+ \vss\moveleft-0.2\zw\hbox{\boutenchar}\nointerlineskip
+ \hbox{\char\euc"A1A1}}\hss}\nobreak#1\relax
+ \fi
+ \let\ltj@@next=\@bou
+ \fi\ltj@@next}
+
+%%% kasen
+\def\kasen#1{%
+ \ifnum\ltjgetparameter{direction}=3\relax
+ \setbox\z@\hbox{#1}\leavevmode\raise.7\zw
+ \hbox to\z@{\vrule\@width\wd\z@ \@depth\z@ \@height.4\p@\hss}%
+ \box\z@
+ \else\underline{#1}\fi}
+
+%%% references
+\def\@eqnnum{{\reset@font\rmfamily \normalcolor
+ \ifnum\ltjgetparameter{direction}=11\raise.25\zh\hbox{\yoko(\theequation)}%
+ \else (\theequation)\fi}}
+\def\@thecounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
+\def\@thmcounter#1{\noexpand\rensuji{\noexpand\arabic{#1}}}
+
+%% Compatibility with array package
+
+\def\ltj@lltjext@patch@array{%
+ \patchcmd{\@tabular}{\hbox\bgroup}{%
+ \hbox\bgroup\ltj@ext@dir=\ltjgetparameter{direction}}{}{}
+ \pretocmd{\array}%
+ {\ltj@ext@dir=\ltjgetparameter{direction}\relax}{}{}
+ \expandafter\let\csname tabular*\endcsname=\ltj@lltjext@orig@tabularS
+ \patchcmd{\p@stabular}{\p@tabular}{\@tabular}{}{}
+ \@ifpackagelater{array}{2018/09/13}
+ {\expandafter\@firstoftwo}
+ {\expandafter\@secondoftwo}
+ {% = for 2018/09/13 v2.4i or newer
+ \def\@startpbox##1{\bgroup
+ \color@begingroup
+ \box@dir\adjustbaseline%%% これを追加
+ \setlength\hsize{##1}\@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ltjgetht\@arstrutbox \@width \z@
+ \everypar{}}%
+ }%
+ }{ % = for 2018/04/30 v2.4h or older
+ \def\@startpbox##1{\bgroup
+ \box@dir\adjustbaseline%%% これを追加
+ \setlength\hsize{##1}\@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ltjgetht\@arstrutbox \@width \z@
+ \everypar{}}%
+ }%
+ }%
+ \def\@tabarray{\@ifnextchar<\p@tabarray{\p@tabarray<z>}}
+ \def\p@array<##1>[##2]##3{%
+ \let\box@dir\relax
+ \if ##1z\relax
+ \ifnum\ltj@ext@dir=3\relax
+ \let\box@dir\utod\@tempcnta=\zstrutbox
+ \fi
+ \else
+ \if ##1y\relax
+ \let\box@dir\yoko\@tempcnta=\ystrutbox
+ \else\if ##1t\relax
+ \let\box@dir\tate\@tempcnta=\tstrutbox
+ \else\if ##1d\relax
+ \let\box@dir\dtou\@tempcnta=\dstrutbox
+ \else\if ##1u\relax
+ \let\box@dir\utod\@tempcnta=\zstrutbox
+ \fi\fi\fi\fi
+ \fi
+ \ifx\box@dir\relax
+ \ifcase\ltj@ext@dir
+ \or \let\box@dir\dtou\@tempcnta=\dstrutbox% dtou
+ \or\or\let\box@dir\tate\@tempcnta=\tstrutbox% tate
+ \or \let\box@dir\yoko\@tempcnta=\ystrutbox% yoko
+ \else \let\box@dir\utod\@tempcnta=\zstrutbox% utod
+ \fi
+ \fi
+ \setbox \@arstrutbox \hbox{\box@dir\vrule
+ \@height \arraystretch
+ \dimexpr \ltjgetht\@tempcnta+\extrarowheight\relax
+ \@depth \arraystretch \ltjgetdp \@tempcnta
+ \@width \z@}%
+ \fork@array@option<##1>[##2]%
+ \begingroup
+ \@mkpream{##3}%
+ \xdef\@preamble{\ialign \noexpand \@halignto
+ \bgroup \tabskip \z@skip \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \@begin@alignbox\bgroup\box@dir\adjustbaseline
+ \let\par\@empty
+ \let\@sharp####\let\protect\relax
+ \let\\\@arraycr\let\tabularnewline\\\let\par\@empty
+ \lineskip\z@skip\baselineskip\z@skip\@preamble}
+ \def\endarray{\crcr\egroup\egroup\@end@alignbox\@arrayright}
+}
+
+\@ifpackageloaded{array}{%
+ \let\tabular=\ltj@lltjext@orig@tabular
+ \let\array=\ltj@lltjext@orig@array
+ \ltj@lltjext@patch@array
+}{%
+ \let\ltj@lltjext@orig@tabular\relax
+ \let\ltj@lltjext@orig@array\relax
+ \RequirePackage{filehook,etoolbox}
+ \AtEndOfPackageFile{array}{\ltj@lltjext@patch@array}
+}
+
+%%%%%%%%%%%%%%%% LuaTeX-ja original
+
+%%\define@key[ltj]{japaram}{autouprightnum}{% %COUNT
+%% \ltj@@set@stack{AURN}{0}{10000}\z@#1 }
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/ltj-adjust.lua b/macros/luatex/generic/luatexja/src/ltj-adjust.lua
new file mode 100644
index 0000000000..3d7e31e0c4
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-adjust.lua
@@ -0,0 +1,551 @@
+--
+-- ltj-adjust.lua
+--
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('jfmglue'); local ltjj = luatexja.jfmglue
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+luatexja.load_module('lineskip'); local ltjl = luatexja.lineskip
+luatexja.adjust = luatexja.adjust or {}
+
+local to_node = node.direct.tonode
+local to_direct = node.direct.todirect
+
+local setfield = node.direct.setfield
+local setglue = luatexja.setglue
+local getfield = node.direct.getfield
+local getlist = node.direct.getlist
+local getid = node.direct.getid
+local getfont = node.direct.getfont
+local getsubtype = node.direct.getsubtype
+
+local node_traverse_id = node.direct.traverse_id
+local node_new = node.direct.new
+local node_next = node.direct.getnext
+local node_free = node.direct.free
+local node_prev = node.direct.getprev
+local node_tail = node.direct.tail
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local insert_after = node.direct.insert_after
+
+local id_glyph = node.id('glyph')
+local id_kern = node.id('kern')
+local id_hlist = node.id('hlist')
+local id_glue = node.id('glue')
+local id_whatsit = node.id('whatsit')
+local id_penalty = node.id('penalty')
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+local lang_ja = luatexja.lang_ja
+
+local ltjf_font_metric_table = ltjf.font_metric_table
+local ipairs, pairs = ipairs, pairs
+
+local PACKED = luatexja.icflag_table.PACKED
+local LINEEND = luatexja.icflag_table.LINEEND
+local FROM_JFM = luatexja.icflag_table.FROM_JFM
+local KANJI_SKIP = luatexja.icflag_table.KANJI_SKIP
+local KANJI_SKIP_JFM = luatexja.icflag_table.KANJI_SKIP_JFM
+local XKANJI_SKIP = luatexja.icflag_table.XKANJI_SKIP
+local XKANJI_SKIP_JFM = luatexja.icflag_table.XKANJI_SKIP_JFM
+
+local get_attr_icflag
+do
+ local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
+ get_attr_icflag = function(p)
+ return (has_attr(p, attr_icflag) or 0) % PROCESSED_BEGIN_FLAG
+ end
+end
+
+local priority_num = { 0, 0 }
+local at2pr = { {}, {} }
+local at2pr_st, at2pr_sh = at2pr[1], at2pr[2]
+do
+ local priority_table = {{},{}}
+ luatexja.adjust.priority_table = priority_table
+ local tmp = {}
+ local function cmp(a,b) return a[1]>b[1] end -- 大きいほうが先!
+ local function make_priority_table(glue_sign)
+ for i,_ in pairs(tmp) do tmp[i]=nil end
+ if glue_sign==2 then -- shrink
+ for i=0,63 do tmp[#tmp+1] = { (i%8)-4, FROM_JFM+i } end
+ else -- stretch
+ for i=0,63 do tmp[#tmp+1] = { math.floor(i/8)-4, FROM_JFM+i } end
+ end
+ local pt = priority_table[glue_sign]
+ tmp[#tmp+1] = { pt[2]/10, XKANJI_SKIP }
+ tmp[#tmp+1] = { pt[2]/10, XKANJI_SKIP_JFM }
+ tmp[#tmp+1] = { pt[1]/10, KANJI_SKIP }
+ tmp[#tmp+1] = { pt[1]/10, KANJI_SKIP_JFM }
+ tmp[#tmp+1] = { pt[3]/10, -1 }
+ table.sort(tmp, cmp)
+ local a, m, n = at2pr[glue_sign], 10000000, 0
+ for i=1,#tmp do
+ if tmp[i][1]<m then n,m = n+1,tmp[i][1] end
+ a[tmp[i][2]] = n
+ end
+ local o = a[-1]
+ priority_num[glue_sign] = n
+ setmetatable(a, {__index = function () return o end })
+ end
+ luatexja.adjust.make_priority_table = make_priority_table
+end
+
+-- box 内で伸縮された glue の合計値を計算
+
+local total_stsh = {{},{}}
+local total_st, total_sh = total_stsh[1], total_stsh[2]
+local get_total_stretched
+do
+local dimensions = node.direct.dimensions
+function get_total_stretched(p)
+-- return value: <補正値(sp)>
+ local ph = getlist(p)
+ if not ph then return 0 end
+ for i,_ in pairs(total_st) do total_st[i]=nil; total_sh[i]=nil end
+ for i=1,priority_num[1] do total_st[i]=0 end
+ for i=1,priority_num[2] do total_sh[i]=0 end
+ for i=0,4 do total_st[i*65536]=0; total_sh[i*65536]=0 end
+ for q in node_traverse_id(id_glue, ph) do
+ local a = getfield(q, 'stretch_order')
+ if a==0 then
+ local b = at2pr_st[get_attr_icflag(q)];
+ total_st[b] = total_st[b]+getfield(q, 'stretch')
+ end
+ total_st[a*65536] = total_st[a]+getfield(q, 'stretch')
+ local a = getfield(q, 'shrink_order')
+ if a==0 then
+ local b = at2pr_sh[get_attr_icflag(q)];
+ total_sh[b] = total_sh[b]+getfield(q, 'shrink')
+ end
+ total_sh[a*65536] = total_sh[a]+getfield(q, 'shrink')
+ end
+ for i=4,1,-1 do if total_st[i*65536]~=0 then total_st.order=i; break end; end
+ if not total_st.order then
+ total_st.order, total_st[-65536] = -1,0.1 -- dummy
+ end
+ for i=4,1,-1 do if total_sh[i*65536]~=0 then total_sh.order=i; break end; end
+ if not total_sh.order then
+ total_sh.order, total_sh[-65536] = -1,0.1 -- dummy
+ end
+ return getfield(p,'width') - dimensions(ph)
+end
+end
+
+-- step 1: 行末に kern を挿入(句読点,中点用)
+local abs = math.abs
+local ltjd_glyph_from_packed = ltjd.glyph_from_packed
+local function aw_step1(p, total)
+ local head = getlist(p)
+ local x = node_tail(head); if not x then return total, false end
+ -- x: \rightskip
+ x = node_prev(x); if not x then return total, false end
+ local xi, xc = getid(x)
+ -- x may be penalty
+ while xi==id_penalty do
+ x = node_prev(x); if not x then return total, false end
+ xi = getid(x)
+ end
+ if (total>0 and total_st.order>0) or (total<0 and total_sh.order>0) then
+ -- 無限大のグルーで処理が行われているときは処理中止.
+ return total, false
+ end
+ if xi == id_glyph and getfield(x, 'lang')==lang_ja then
+ -- 和文文字
+ xc = x
+ elseif xi == id_hlist and get_attr_icflag(x) == PACKED then
+ -- packed JAchar
+ xc = ltjd_glyph_from_packed(x)
+ while getid(xc) == id_whatsit do xc = node_next(xc) end -- これはなんのために?
+ else
+ return total, false-- それ以外は対象外.
+ end
+ local eadt = ltjf_font_metric_table[getfont(xc)]
+ .char_type[has_attr(xc, attr_jchar_class) or 0].end_adjust
+ if not eadt then
+ return total, false
+ end
+ local eadt_ratio = {}
+ for i, v in ipairs(eadt) do
+ local t = total - v
+ if t>0 then
+ eadt_ratio[i] = {i, t/total_st[65536*total_st.order], t, v}
+ else
+ eadt_ratio[i] = {i, t/total_sh[65536*total_sh.order], t, v}
+ end
+ end
+ table.sort(eadt_ratio,
+ function (a,b)
+ for i=2,4 do
+ local at, bt = abs(a[i]), abs(b[i])
+ if at~=bt then return at<bt end
+ end
+ return a[4]<b[4]
+ end)
+ if eadt[eadt_ratio[1][1]]~=0 then
+ local kn = node_new(id_kern, 1)
+ setfield(kn, 'kern', eadt[eadt_ratio[1][1]]); set_attr(kn, attr_icflag, LINEEND)
+ insert_after(head, x, kn)
+ return eadt_ratio[1][3], true
+ else
+ return total, false
+ end
+end
+
+-- step 1 最終行用
+local min, max = math.min, math.max
+local function aw_step1_last(p, total)
+ local head = getlist(p)
+ local x = node_tail(head); if not x then return total, false end
+ -- x: \rightskip
+ pf = node_prev(x); if not x then return total, false end
+ if getid(pf) ~= id_glue or getsubtype(pf) ~= 15 then return total, false end
+ x = node_prev(node_prev(pf)); xi = getid(x)
+ local xi, xc = getid(x)
+ if xi == id_glyph and getfield(x, 'lang')==lang_ja then
+ -- 和文文字
+ xc = x
+ elseif xi == id_hlist and get_attr_icflag(x) == PACKED then
+ -- packed JAchar
+ xc = ltjd_glyph_from_packed(x)
+ while getid(xc) == id_whatsit do xc = node_next(xc) end -- これはなんのために?
+ else
+ return total, false-- それ以外は対象外.
+ end
+ -- 続行条件1:無限の伸縮度を持つグルーは \parfillskipのみ
+ if total>0 and total_st.order>0 then
+ if total_st.order ~= getfield(pf, 'stretch_order') then return total, false end
+ if total_st[total_st.order*65536] ~= getfield(pf, 'stretch') then return total, false end
+ for i=total_st.order-1, 1, -1 do
+ if total_st[i*65536] ~= 0 then return total, false end
+ end
+ end
+ if total<0 and total_sh.order>0 then
+ if total_sh.order ~= getfield(pf, 'shrink_order') then return total, false end
+ if total_sh[total_sh.order*65536] ~= getfield(pf, 'shrink') then return total, false end
+ for i=total_sh.order-1, 1, -1 do
+ if total_sh[i*65536] ~= 0 then return total, false end
+ end
+ end
+ local eadt = ltjf_font_metric_table[getfont(xc)]
+ .char_type[has_attr(xc, attr_jchar_class) or 0].end_adjust
+ if not eadt then
+ return total, false
+ end
+ -- 続行条件2: min(eadt[1], 0)<= \parfillskip <= max(eadt[#eadt], 0)
+ local pfw = getfield(pf, 'width')
+ + (total>0 and getfield(pf, 'stretch') or -getfield(pf, 'shrink')) *getfield(p, 'glue_set')
+ if pfw<min(0,eadt[1]) or max(0,eadt[#eadt])<pfw then return total, false end
+ -- \parfillskip を 0 にする
+ total = total + getfield(pf, 'width')
+ total_st.order, total_sh.order = 0, 0
+ if getfield(pf, 'stretch_order')==0 then
+ local i = at2pr_st[-1]
+ total_st[0] = total_st[0] - getfield(pf, 'stretch')
+ total_st[i] = total_st[i] - getfield(pf, 'stretch')
+ total_st.order = (total_st[0]==0) and -1 or 0
+ end
+ if getfield(pf, 'shrink_order')==0 then
+ local i = at2pr_sh[-1]
+ total_sh[0] = total_sh[0] - getfield(pf, 'shrink')
+ total_sh[i] = total_sh[i] - getfield(pf, 'shrink')
+ total_sh.order = (total_sh[0]==0) and -1 or 0
+ end
+ setfield(pf, 'subtype', 1); setglue(pf)
+ local eadt_ratio = {}
+ for i, v in ipairs(eadt) do
+ local t = total - v
+ if t>0 then
+ eadt_ratio[i] = {i, t/total_st[65536*total_st.order], t, v}
+ else
+ eadt_ratio[i] = {i, t/total_sh[65536*total_sh.order], t, v}
+ end
+ end
+ table.sort(eadt_ratio,
+ function (a,b)
+ for i=2,4 do
+ local at, bt = abs(a[i]), abs(b[i])
+ if at~=bt then return at<bt end
+ end
+ return a[4]<b[4]
+ end)
+ if eadt[eadt_ratio[1][1]]~=0 then
+ local kn = node_new(id_kern, 1)
+ setfield(kn, 'kern', eadt[eadt_ratio[1][1]]); set_attr(kn, attr_icflag, LINEEND)
+ insert_after(head, x, kn)
+ return eadt_ratio[1][3], true
+ else
+ return total, false
+ end
+end
+
+
+-- step 2: 行中の glue を変える
+local aw_step2, aw_step2_dummy
+do
+local node_hpack = node.direct.hpack
+local function repack(p)
+ 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
+function aw_step2_dummy(p, _, added_flag)
+ if added_flag then return repack(p) end
+end
+
+local function clear_stretch(p, ind, ap, name)
+ for q in node_traverse_id(id_glue, getlist(p)) do
+ local f = ap[get_attr_icflag(q)]
+ if f == ind then
+ setfield(q, name..'_order', 0)
+ setfield(q, name, 0)
+ end
+ end
+end
+
+local function set_stretch(p, after, before, ind, ap, name)
+ if before > 0 then
+ local ratio = after/before
+ for q in node_traverse_id(id_glue, getlist(p)) do
+ local f = ap[get_attr_icflag(q)]
+ if (f==ind) and getfield(q, name..'_order')==0 then
+ setfield(q, name, getfield(q, name)*ratio)
+ end
+ end
+ end
+end
+
+function aw_step2(p, total, added_flag)
+ local name = (total>0) and 'stretch' or 'shrink'
+ local id = (total>0) and 1 or 2
+ local res = total_stsh[id]
+ local pnum = priority_num[id]
+ if total==0 or res.order > 0 then
+ -- もともと伸縮の必要なしか,残りの伸縮量は無限大
+ if added_flag then return repack(p) end
+ end
+ total = abs(total)
+ for i = 1, pnum do
+ if total <= res[i] then
+ local a = at2pr[id]
+ for j = i+1,pnum do
+ clear_stretch(p, j, a, name)
+ end
+ set_stretch(p, total, res[i], i, a, name); break
+ end
+ total = total - res[i]
+ end
+ return repack(p)
+end
+end
+
+-- step 1': lineend=extended の場合(行分割時に考慮))
+local insert_lineend_kern
+do
+ local insert_before = node.direct.insert_before
+ local KINSOKU = luatexja.icflag_table.KINSOKU
+ function insert_lineend_kern(head, nq, np, Bp)
+ if nq.met then
+ local eadt = nq.met.char_type[nq.class].end_adjust
+ if not eadt then return end
+ if eadt[1]~=0 then
+ local x = node_new(id_kern, 1)
+ setfield(x, 'kern', eadt[1]); set_attr(x, attr_icflag, LINEEND)
+ insert_before(head, np.first, x)
+ end
+ local eadt_num = #eadt
+ for i=2,eadt_num do
+ local x = node_new(id_penalty)
+ setfield(x, 'penalty', 0); set_attr(x, attr_icflag, KINSOKU)
+ insert_before(head, np.first, x); Bp[#Bp+1] = x
+ local x = node_new(id_kern, 1)
+ setfield(x, 'kern', eadt[i]-eadt[i-1]); set_attr(x, attr_icflag, LINEEND)
+ insert_before(head, np.first, x)
+ end
+ if eadt_num>1 or eadt[1]~=0 then
+ local x = node_new(id_penalty)
+ setfield(x, 'penalty', 0); set_attr(x, attr_icflag, KINSOKU)
+ insert_before(head, np.first, x); Bp[#Bp+1] = x
+ local x = node_new(id_kern, 1)
+ setfield(x, 'kern', -eadt[eadt_num]); set_attr(x, attr_icflag, LINEEND)
+ insert_before(head, np.first, x)
+ local x = node_new(id_penalty)
+ setfield(x, 'penalty', 10000); set_attr(x, attr_icflag, KINSOKU)
+ insert_before(head, np.first, x); Bp[#Bp+1] = x
+ end
+ end
+ end
+end
+
+local adjust_width
+do
+ local myaw_atep1, myaw_step2, myaw_step1_last
+ local dummy = function(p,t,n) return t, false end
+ local ltjs_fast_get_stack_skip = ltjs.fast_get_stack_skip
+ function adjust_width(head)
+ if not head then return head end
+ local last_p
+ for p in node_traverse_id(id_hlist, to_direct(head)) do
+ if last_p then
+ myaw_step2(last_p, myaw_step1(last_p, get_total_stretched(last_p)))
+ end
+ last_p = p
+ end
+ if last_p then
+ myaw_step2(last_p, myaw_step1_last(last_p, get_total_stretched(last_p)))
+ end
+ return to_node(head)
+ end
+ local is_reg = false
+ function enable_cb(status_le, status_pr, status_lp, status_ls)
+ if (status_le>0 or status_pr>0) and (not is_reg) then
+ ltjb.add_to_callback('post_linebreak_filter',
+ adjust_width, 'Adjust width',
+ luatexbase.priority_in_callback('post_linebreak_filter', 'ltj.lineskip')-1)
+ is_reg = true
+ elseif is_reg and (status_le==0 and status_pr==0) then
+ luatexbase.remove_from_callback('post_linebreak_filter', 'Adjust width')
+ is_reg = false
+ end
+ if status_le==2 then
+ if not luatexbase.in_callback('luatexja.adjust_jfmglue', 'luatexja.adjust') then
+ ltjb.add_to_callback('luatexja.adjust_jfmglue', insert_lineend_kern, 'luatexja.adjust')
+ end
+ myaw_step1, myaw_step1_last = dummy, aw_step1_last
+ else
+ if status_le==0 then
+ myaw_step1, myaw_step1_last = dummy, dummy
+ else
+ myaw_step1, myaw_step1_last = aw_step1, aw_step1_last
+ end
+ if luatexbase.in_callback('luatexja.adjust_jfmglue', 'luatexja.adjust') then
+ luatexbase.remove_from_callback('luatexja.adjust_jfmglue', 'luatexja.adjust')
+ end
+ end
+ myaw_step2 = (status_pr>0) and aw_step2 or aw_step2_dummy
+ luatexja.lineskip.setting(
+ status_lp>0 and 'profile' or 'dummy',
+ status_ls>0 and 'step' or 'dummy'
+ )
+ end
+ function disable_cb() -- only for compatibility
+ enable_cs(0,0,0,0)
+ end
+ luatexja.adjust.enable_cb=enable_cb
+ luatexja.adjust.disable_cb=disable_cb
+end
+
+luatexja.unary_pars.adjust = function(t)
+ return is_reg and 1 or 0
+end
+
+-- ----------------------------------
+do
+ local max, ins, sort = math.max, table.insert, table.sort
+ local function insert(package, ind, d, b, e)
+ local bound = package[2]
+ bound[b], bound[e]=true, true
+ ins(package[1], {b,e,[ind]=d})
+ end
+ local function flatten(package)
+ local bd={} for i,_ in pairs(package[2]) do ins(bd,{i}) end
+ sort(bd, function (a,b) return a[1]<b[1] end)
+ local bdc=#bd; local t = package[1]
+ sort(t, function (a,b) return a[1]<b[1] end)
+ local bdi =1
+ for i=1,#t do
+ while bd[bdi][1]<t[i][1] do bdi=bdi+1 end
+ local j = bdi
+ while j<bdc and bd[j+1][1]<=t[i][2] do
+ for k,w in pairs(t[i]) do
+ if k>=3 then
+ bd[j][k]=bd[j][k] and max(bd[j][k],w) or w
+ end
+ end
+ j=j+1
+ end
+ end
+ package[2]=nil; package[1]=nil; package.flatten, package.insert=nil, nil
+ bd[#bd]=nil
+ return bd
+ end
+ function init_range()
+ return {{},{}, insert=insert, flatten=flatten}
+ end
+end
+
+-- -----------------------------------
+luatexja.adjust.step_factor = 0.5
+luatexja.unary_pars.linestep_factor = function(t)
+ return luatexja.adjust.step_factor
+end
+luatexja.adjust.profile_hgap_factor = 1
+luatexja.unary_pars.profile_hgap_factor = function(t)
+ return luatexja.adjust.profile_hgap_factor
+end
+do
+ local insert = table.insert
+ local rangedimensions, max = node.direct.rangedimensions, math.max
+ local function profile_inner(box, range, ind, vmirrored, adj)
+ local w_acc, d_before = getfield(box,'shift'), 0
+ local x = getlist(box); local xn = node_next(x)
+ while x do
+ local w, h, d
+ if xn then w, h, d= rangedimensions(box,x,xn)
+ else w, h, d= rangedimensions(box,x) end
+ if vmirrored then h=d end
+ local w_new = w_acc + w
+ if w>=0 then
+ range:insert(ind, h, w_acc-adj, w_new)
+ else
+ range:insert(ind, h, w_new-adj, w_acc)
+ end
+ w_acc = w_new; x = xn; if x then xn = node_next(x) end
+ end
+ end
+ function ltjl.p_profile(before, after, mirrored, bw)
+ local range, tls
+ = init_range(), luatexja.adjust.profile_hgap_factor*tex.lineskip.width
+ profile_inner(before, range, 3, true, tls)
+ profile_inner(after, range, 4, mirrored, tls)
+ range = range:flatten()
+ do
+ local dmax, d, hmax, h, lmin = 0, 0, 0, 0, 1/0
+ for i,v in ipairs(range) do
+ d, h = (v[3] or 0), (v[4] or 0)
+ if d>dmax then dmax=d end
+ if h>hmax then hmax=h end
+ if bw-h-d<lmin then lmin=bw-h-d end
+ end
+ if lmin==1/0 then lmin = bw end
+ return lmin,
+ bw - lmin - getfield(before, 'depth')
+ - getfield(after, mirrored and 'depth' or 'height')
+ end
+ end
+end
+
+do
+ local ltja = luatexja.adjust
+ local copy_glue = ltjl.copy_glue
+ local floor, max = math.floor, math.max
+ function ltjl.l_step(dist, g, adj, normal, bw, loc)
+ if loc=='alignment' then
+ return ltjl.l_dummy(dist, g, adj, normal, bw, loc)
+ end
+ if dist < tex.lineskiplimit then
+ local f = max(1, bw*ltja.step_factor)
+ copy_glue(g, tex.baselineskip, 1, normal - f * floor((dist-tex.lineskip.width)/f))
+ else
+ copy_glue(g, tex.baselineskip, 2, normal)
+ end
+ end
+end
+
+
diff --git a/macros/luatex/generic/luatexja/src/ltj-base.lua b/macros/luatex/generic/luatexja/src/ltj-base.lua
new file mode 100644
index 0000000000..4182a603c3
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-base.lua
@@ -0,0 +1,403 @@
+--
+-- luatexja/ltj-base.lua
+--
+local ltb = luatexbase
+local tostring = tostring
+local node, table, tex, token = node, table, tex, token
+
+local cat_lp = luatexbase.catcodetables['latex-package']
+
+--------------------
+local ltjb = {}
+luatexja.base = ltjb
+
+local public_name = 'luatexja'
+local public_version = 'alpha'
+ltjb.public_name = public_name
+ltjb.public_version = public_version
+
+
+-------------------- Fully-expandable error messaging
+local _error_set_break, _error_set_message, _error_show
+local generic_error, _generic_warn_info
+local generic_warning, generic_warning_no_line
+local generic_info, generic_info_no_line
+local package_error, package_warning, package_warning_no_line
+local package_info, package_info_no_line
+local ltj_error, ltj_warning_no_line
+
+do
+--! LaTeX 形式のエラーメッセージ(\PackageError 等)を
+--! Lua 関数の呼び出しで行う.
+
+ local LF = "\n"
+ local err_break = ""
+ local err_main = ""
+ local err_help = ""
+
+ local function message_cont(str, c)
+ return str:gsub(err_break, LF .. c)
+ end
+ local function into_lines(str)
+ return str:gsub(err_break, LF):explode(LF)
+ end
+
+ _error_set_break = function (str)
+ err_break = str
+ end
+
+ _error_set_message = function (msgcont, main, help)
+ err_main = message_cont(main, msgcont)
+ err_help = into_lines(help)
+ end
+
+ _error_show = function (escchar)
+ local escapechar = tex.escapechar
+ local newlinechar = tex.newlinechar
+ local errorcontextlines = tex.errorcontextlines
+ if not escchar then tex.escapechar = -1 end
+ tex.newlinechar = 10
+ tex.errorcontextlines = -1
+ tex.error(err_main, err_help)
+ tex.escapechar = escapechar
+ tex.newlinechar = newlinechar
+ tex.errorcontextlines = errorcontextlines
+ end
+
+ local message_a = "Type H <return> for immediate help"
+
+ generic_error = function (msgcont, main, ref, help)
+ local mainref = main..".\n\n"..ref.."\n"..message_a
+ _error_set_message(msgcont, mainref, help)
+ _error_show(true)
+ end
+
+ _generic_warn_info = function (msgcont, main, warn, line)
+ local mainc = message_cont(main, msgcont)
+ local br = warn and "\n" or ""
+ local out = warn and "term and log" or "log"
+ local on_line = line and (" on input line "..tex.inputlineno) or ""
+ local newlinechar = tex.newlinechar
+ tex.newlinechar = -1
+ texio.write_nl(out, br..main..on_line.."."..br)
+ tex.newlinechar = newlinechar
+ end
+
+ generic_warning = function (msgcont, main)
+ _generic_warn_info(msgcont, main, true, true)
+ end
+ generic_warning_no_line = function (msgcont, main)
+ _generic_warn_info(msgcont, main, true, false)
+ end
+ generic_info = function (msgcont, main)
+ _generic_warn_info(msgcont, main, false, true)
+ end
+ generic_info_no_line = function (msgcont, main)
+ _generic_warn_info(msgcont, main, false, false)
+ end
+
+ package_error = function (pkgname, main, help)
+ generic_error("("..pkgname.." ",
+ "Package "..pkgname.." Error: "..main,
+ "See the "..pkgname.." package documentation for explanation.",
+ help)
+ end
+ package_warning = function (pkgname, main)
+ generic_warning("("..pkgname.." ",
+ "Package "..pkgname.." Warning: "..main)
+ end
+ package_warning_no_line = function (pkgname, main)
+ generic_warning_no_line("("..pkgname.." ",
+ "Package "..pkgname.." Warning: "..main)
+ end
+ package_info = function (pkgname, main)
+ generic_info("("..pkgname.." ",
+ "Package "..pkgname.." Info: "..main)
+ end
+ package_info_no_line = function (pkgname, main)
+ generic_info_no_line("("..pkgname.." ",
+ "Package "..pkgname.." Info: "..main)
+ end
+
+ ltj_error = function (main, help)
+ package_error(public_name, main, help)
+ end
+ ltj_warning_no_line = function (main)
+ package_warning_no_line(public_name, main, help)
+ end
+
+end
+-------------------- TeX stream I/O
+--! ixbase.print() と同じ
+--- Extension to tex.print(). Each argument string may contain
+-- newline characters, in which case the string is output (to
+-- TeX input stream) as multiple lines.
+-- @param ... (string) string to output
+local function mprint(...)
+ local arg = {...}
+ local lines = {}
+ if type(arg[1]) == "number" then
+ table.insert(lines, arg[1])
+ table.remove(arg, 1)
+ end
+ for _, cnk in ipairs(arg) do
+ local ls = cnk:explode("\n")
+ if ls[#ls] == "" then
+ table.remove(ls, #ls)
+ end
+ for _, l in ipairs(ls) do
+ table.insert(lines, l)
+ end
+ end
+ return tex.print(unpack(lines))
+end
+ltjb.mprint = mprint
+
+-------------------- Handling of TeX values
+do
+
+--! ixbase.to_dimen() と同じ
+ local function to_dimen(val)
+ if val == nil then
+ return 0
+ elseif type(val) == "number" then
+ return val
+ else
+ return tex.sp(tostring(val))
+ end
+ end
+
+ local function parse_dimen(val)
+ val = tostring(val):lower()
+ local r, fil = val:match("([-.%d]+)fi(l*)")
+ if r then
+ val, fil = r.."pt", fil:len() + 1
+ else
+ fil = 0
+ end
+ return tex.sp(val), fil
+ end
+
+ ltjb.to_dimen = to_dimen
+end
+
+-------------------- Virtual table for LaTeX counters
+-- not used in current LuaTeX-ja
+do
+--! ixbase.counter と同じ
+ counter = {}
+ local mt_counter = {}
+ setmetatable(counter, mt_counter)
+
+ function mt_counter.__index(tbl, key)
+ return tex.count['c@'..key]
+ end
+ function mt_counter.__newindex(tbl, key, val)
+ tex.count['c@'..key] = val
+ end
+ ltjb.counter = counter
+
+--! ixbase.length は tex.skip と全く同じなので不要.
+end
+
+-------------------- common error message
+do
+ local function in_unicode(c, admit_math)
+ local low = admit_math and -1 or 0
+ if type(c)~='number' or c<low or c>0x10FFFF then
+ local s = 'A character number must be between ' .. tostring(low)
+ .. ' and 0x10ffff.\n'
+ .. (admit_math and "(-1 is used for denoting `math boundary')\n" or '')
+ .. 'So I changed this one to zero.'
+ package_error('luatexja',
+ 'bad character code (' .. tostring(c) .. ')', s)
+ c=0
+ end
+ return c
+ end
+ ltjb.in_unicode = in_unicode
+end
+
+-------------------- cache management
+-- load_cache (filename, outdate)
+-- * filename: without suffix '.lua'
+-- * outdate(t): return true iff the cache is outdated
+-- * return value: non-nil iff the cache is up-to-date
+-- save_cache (filename, t): no return value
+-- save_cache_luc (filename, t): no return value
+-- save_cache always calls save_cache_luc.
+-- But sometimes we want to create only the precompiled cache,
+-- when its 'text' version is already present in LuaTeX-ja distribution.
+
+require('lualibs-lpeg') -- string.split
+require('lualibs-os') -- os.type
+
+do
+ local kpse_var_value = kpse.var_value
+ local path, pathtmp = kpse_var_value("TEXMFVAR")
+ pathtmp = kpse_var_value("TEXMFSYSVAR")
+ if pathtmp then path = (path and path .. ';' or '') .. pathtmp end
+ pathtmp = kpse_var_value("TEXMFCACHE")
+ if pathtmp then path = (path and path .. ';' or '') .. pathtmp end
+
+ if os.type~='windows' then path = string.gsub(path, ':', ';') end
+ path = table.unique(string.split(path, ';'))
+
+ local cache_dir = '/luatexja'
+ local find_file = kpse.find_file
+ local join, isreadable = file.join, file.isreadable
+ local tofile, serialize = table.tofile, table.serialize
+ local luc_suffix = jit and '.lub' or '.luc'
+
+ -- determine save path
+ local savepath = ''
+ for _,v in pairs(path) do
+ local testpath = join(v, cache_dir)
+ if not lfs.isdir(testpath) then dir.mkdirs(testpath) end
+ if lfs.isdir(testpath) then savepath = testpath; break end
+ end
+
+ local function save_cache_luc(filename, t, serialized)
+ local fullpath = savepath .. '/' .. filename .. luc_suffix
+ local s = serialized or serialize(t, 'return', false)
+ if s then
+ local sa = load(s)
+ local f = io.open(fullpath, 'wb')
+ if f and sa then
+ f:write(string.dump(sa, true))
+ texio.write('(save cache: ' .. fullpath .. ')')
+ end
+ f:close()
+ end
+ end
+
+ local function save_cache(filename, t)
+ local fullpath = savepath .. '/' .. filename .. '.lua'
+ local s = serialize(t, 'return', false)
+ if s then
+ local f = io.open(fullpath, 'w')
+ if f then
+ f:write(s)
+ texio.write('(save cache: ' .. fullpath .. ')')
+ end
+ f:close()
+ save_cache_luc(filename, t, s)
+ end
+ end
+
+ local function load_cache_a(filename, outdate)
+ local result
+ for _,v in pairs(path) do
+ local fn = join(v, cache_dir, filename)
+ if isreadable(fn) then
+ texio.write('(load cache: ' .. fn .. ')')
+ result = loadfile(fn)
+ result = result and result(); break
+ end
+ end
+ if (not result) or outdate(result) then
+ return nil
+ else
+ return result
+ end
+ end
+
+ local function load_cache(filename, outdate)
+ local r = load_cache_a(filename .. luc_suffix, outdate)
+ if r then
+ return r
+ else
+ local r = load_cache_a(filename .. '.lua', outdate)
+ if r then save_cache_luc(filename, r) end -- update the precompiled cache
+ return r
+ end
+ end
+
+ local function remove_file_if_exist(name)
+ if os.rename(name,name) then os.remove(name) end
+ end
+ local function remove_cache (filename)
+ local fullpath_wo_ext = savepath .. '/' .. filename .. '.lu'
+ remove_file_if_exist(fullpath_wo_ext .. 'a')
+ remove_file_if_exist(fullpath_wo_ext .. 'b')
+ remove_file_if_exist(fullpath_wo_ext .. 'c')
+ end
+
+ ltjb.remove_cache = remove_cache
+ ltjb.load_cache = load_cache
+ ltjb.save_cache_luc = save_cache_luc
+ ltjb.save_cache = save_cache
+end
+
+----
+do
+ local tex_set_attr, tex_get_attr = tex.setattribute, tex.getattribute
+ function ltjb.ensure_tex_attr(a, v)
+ if tex_get_attr(a)~=v then
+ tex_set_attr(a, v)
+ end
+ end
+end
+----
+
+ltjb._error_set_break = _error_set_break
+ltjb._error_set_message = _error_set_message
+ltjb._error_show = _error_show
+ltjb._generic_warn_info = _generic_warn_info
+
+ltjb.package_error = package_error
+ltjb.package_warning = package_warning
+ltjb.package_warning_no_line = package_warning_no_line
+ltjb.package_info = package_info
+ltjb.package_info_no_line = package_info_no_line
+
+ltjb.generic_error = generic_error
+ltjb.generic_warning = generic_warning
+ltjb.generic_warning_no_line = generic_warning_no_line
+ltjb.generic_info = generic_info
+ltjb.generic_info_no_line = generic_info_no_line
+
+ltjb.ltj_warning_no_line = ltj_warning_no_line
+ltjb.ltj_error = ltj_error
+
+---- deterministic version of luatexbase.add_to_callback
+function ltjb.add_to_callback(name,fun,description,priority)
+ local priority= priority
+ if priority==nil then
+ priority=#luatexbase.callback_descriptions(name)+1
+ end
+ if(luatexbase.callbacktypes[name] == 3 and
+ priority == 1 and
+ #luatexbase.callback_descriptions(name)==1) then
+ luatexbase.module_warning("luatexbase",
+ "resetting exclusive callback: " .. name)
+ luatexbase.reset_callback(name)
+ end
+ local saved_callback={},ff,dd
+ for k,v in ipairs(luatexbase.callback_descriptions(name)) do
+ if k >= priority then
+ ff,dd= luatexbase.remove_from_callback(name, v)
+ saved_callback[#saved_callback+1]={ff,dd}
+ end
+ end
+ luatexbase.base_add_to_callback(name,fun,description)
+ for _,v in ipairs(saved_callback) do
+ luatexbase.base_add_to_callback(name,v[1],v[2])
+ end
+ return
+end
+
+-------------------- mock of debug logger
+if not ltjb.out_debug then
+ local function no_op() end
+ ltjb.start_time_measure = no_op
+ ltjb.stop_time_measure = no_op
+ ltjb.out_debug = no_op
+ ltjb.package_debug = no_op
+ ltjb.debug_logger = function() return no_op end
+ ltjb.show_term = no_op
+ ltjb.show_log = no_op
+end
+
+-------------------- all done
+-- EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-base.sty b/macros/luatex/generic/luatexja/src/ltj-base.sty
new file mode 100644
index 0000000000..717105e3a5
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-base.sty
@@ -0,0 +1,472 @@
+%
+% ltj-base.sty
+%
+
+%! これは外から読まれない
+%% Avoid multiple loading.
+\csname luatexjabaseLoaded\endcsname
+\edef\ltj@base@AtEnd{%
+\endlinechar=\the\endlinechar
+\relax}
+\endlinechar=-1 %
+\def\luatexjabaseLoaded{\endinput}
+
+\ifltj@in@latex %<*LaTeX>
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{ltj-base}[2017/05/05]
+\fi %</LaTeX>
+
+%%------------------ Tiny helpers
+
+%% Registers
+%\newcount\ltj@tempcnta % defined at luatexja-core.sty
+\newcount\ltj@tempcntb
+\newcount\ltj@tempcntc
+\newdimen\ltj@tempdima
+% \newskip\ltj@tempskipa unused
+% \newtoks\ltj@temptoks unused
+
+\countdef\ltj@@count@zero=0 %
+\luatexattributedef\ltj@@attr@zero=0 %
+\dimendef\ltj@@dimen@zero=0 %
+\skipdef\ltj@@skip@zero=0 %
+
+%% Quarks
+%! ただ expl3 の quark とは異なり展開されるとエラーになる.
+%% \ltj@q@stop
+\protected\def\ltj@q@stop{\ltj@q@stop@}
+%% \ltj@q@nil
+\protected\def\ltj@q@nil{\ltj@q@nil@}
+%% \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
+}
+
+%% \ltj@csletcs
+\protected\def\ltj@csletcs#1#2{
+ \expandafter\let\csname#1\expandafter\endcsname
+ \csname#2\endcsname
+}
+
+%% \ltj@ifx{<sutff>}{<yes>}{<no>}
+%! LaTeX 形式の \ifx. この形式の利点は自動的に条件ネストからの
+%! 脱出が可能であること.
+% Does \ifx<stuff> test in LaTeX style.
+\long\def\ltj@ifx#1{
+ \ifx#1\expandafter\ltx@firstoftwo
+ \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>}
+%! <stuff> が空または空白文字からなるか.
+% Checks if <stuff> is either empty or consisting only of spaces.
+\def\ltj@if@blank#1{
+ \ltj@@if@blankA#1\ltj@@q@empty\ltj@@q@empty
+ \ltx@secondoftwo\ltx@firstoftwo\ltj@q@nil
+}
+\long\def\ltj@@if@blankA#1#2\ltj@@q@empty#3#4#5\ltj@q@nil{
+ #4
+}
+
+%%------------------ LaTeX vs plain
+\ifltj@in@latex %<*LaTeX>
+
+%% \ifltj@in@latex
+%! LaTeX であるか.
+%(Defined in luatexja-core.sty.)
+
+%% \ifltj@in@plain
+%! 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
+\ifnum\pdf@strcmp{\fmtname}{plain}=0 %
+ \ltj@csletcs{ifltj@in@plain}{iftrue}
+\else
+ \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
+
+%% helper stuffs
+
+%% \ltj@gobble@num <number>
+%! 次に続く整数を(2 回展開で)読み捨てる.
+\def\ltj@gobble@num{
+ \directlua{token.scan_int()}
+}
+
+%% \ltj@gobble@glue <glue>
+%! 次に続くグルー値を(2 回展開で)読み捨てる.
+\def\ltj@gobble@glue{
+ \directlua{token.scan_glue()}
+}
+
+%% \ltj@gobble@dimen <dimen>
+%! 次に続く寸法値を(2 回展開で)読み捨てる.
+\def\ltj@gobble@dimen{
+ \directlua{token.scan_dimen()}
+}
+
+%% \ltj@grab@num <number>
+%! 次に続く整数を読み取って, それと等しい整数を表すトークン列
+%! (必ずしも整数表記とは限らない)を { } に入れたものに(2 回で)
+%! 展開する.
+%! ただし, 整数は以下の形式のいずれかでなければならない.
+%! - 整数表記(10 進, 8 進, 16 進, 文字)
+%! - chardef トークン
+%! - 内部整数パラメタ, countdef トークン
+%! (command_name が "assign_int" であるトークン).
+%! (注意: まだ文字表記(`A)に対応していません.)
+\def\ltj@grab@num{
+ \directlua{tex.sprint('{' .. token.scan_int() .. '}')}
+}
+
+%%------------------ Safe passing
+
+% These macros convert a token sequence denoting a TeX value to its
+% suitable notation in Lua, and when the argument is malformed then
+% 'nil' is returned. They are all fully-expandable.
+%! TeX の値を Lua 上の表記に変換する. 不正形式だと nil にする.
+
+\def\ltj@@safe@end{\noexpand\ltj@@safe@end}
+ % behaves same as \relax but is distinct from it
+
+%% \ltj@safe@invalid
+% The value passed to lua instead of malformed value tokens.
+\def\ltj@safe@invalid{(nil)}
+
+%% \ltj@safe@num{<number>}
+%! 整数.
+% For a number (integer).
+\def\ltj@safe@num{
+ \ltj@safe@num@or\ltj@safe@invalid
+}
+\def\ltj@safe@num@or#1#2{
+ \expandafter\expandafter\expandafter\ltj@@safe@numA
+ \ltj@gobble@num#2\ltj@@safe@end{#2}{#1}
+}
+\def\ltj@@safe@numA#1\ltj@@safe@end#2#3{
+ \ltj@if@blank{#1}{
+ (\number#2)
+ }{
+ #3
+ }
+}
+
+%% \ltj@safe@dimen{<dimen>}
+%! 寸法値.
+% For a dimension. The result is a scaled-point value.
+\def\ltj@safe@dimen{
+ \ltj@safe@dimen@or\ltj@safe@invalid
+}
+\def\ltj@safe@dimen@or#1#2{
+ \expandafter\expandafter\expandafter\ltj@@safe@dimenA
+ \ltj@gobble@dimen#2\ltj@@safe@end{#2}{#1}
+}
+\def\ltj@@safe@dimenA#1\ltj@@safe@end#2#3{
+ \ltj@if@blank{#1}{
+ (\number\dimexpr#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
+
+%% \ltj@safe@str{<text>}
+%! 文字列. (トークン列を非トークン化)
+% Converts a token sequence to Lua string notation.
+\def\ltj@safe@str#1{
+ "\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
+
+%% Load Lua module
+\RequireLuaModule{luatexja.debug}
+
+%% \ltj@debug{<format>}{<arg>,...}
+\def\ltj@debug#1#2{
+ \directlua{
+ luatexja.base.debug(\ltj@safe@str{#1}
+ \ltj@if@blank{#2}{}{, }
+ #2)
+ }
+}
+
+%% \ltj@package@debug{<package>}{<format>}{<arg>,...}
+\def\ltj@package@debug#1#2#3{
+ \directlua{
+ luatexja.base.package_debug(\ltj@safe@str{#1},
+ \ltj@safe@str{#2}
+ \ltj@if@blank{#3}{}{, }
+ #3)
+ }
+}
+
+\else
+
+\def\ltj@debug#1#2{}
+\def\ltj@package@debug#1#2#3{}
+
+\fi
+
+%% \ltj@debug@logger\CS{<package>}
+\def\ltj@debug@logger#1#2{
+ \def#1{\ltj@package@debug{#2}}
+}
+
+%% \ltj@afterbox <token><box>
+%% -> \setbox\ltj@afbox<box><token>
+%% from Sonja Maus, ``Looking Ahead for a <box>'',
+%% TUGBoat, 11, No. 4, 1990.
+\newbox\ltj@afbox
+\protected\def\ltj@afterbox#1{%
+ \def\ltj@afb@xarg{#1}%
+ \afterassignment\ltj@afb@x
+ \chardef\ltj@@next`.}
+\def\ltj@afb@x{\futurelet\ltj@@next\ltj@afb@xtest}
+\def\ltj@afb@xtest{%
+ \ifcase\ifx\ltj@@next\hbox\tw@\fi
+ \ifx\ltj@@next\vbox\tw@\fi
+ \ifx\ltj@@next\vtop\tw@\fi
+ \ifx\ltj@@next\box\@ne\fi
+ \ifx\ltj@@next\copy\@ne\fi
+ \ifx\ltj@@next\vsplit\@ne\fi
+ \ifx\ltj@@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@afb@xagarg{\aftergroup\ltj@afb@xarg}
+
+
+%%------------------ all done
+\ltj@base@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-charrange.lua b/macros/luatex/generic/luatexja/src/ltj-charrange.lua
new file mode 100644
index 0000000000..96fbd885ab
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-charrange.lua
@@ -0,0 +1,112 @@
+--
+-- luatexja/charrange.lua
+--
+luatexbase.provides_module({
+ name = 'luatexja.charrange',
+ date = '2019/04/01',
+ description = 'Handling the range of Japanese characters',
+})
+luatexja.charrange = {}
+luatexja.load_module('base'); local ltjb = luatexja.base
+
+local getchar = node.direct.getchar
+local has_attr = node.direct.has_attribute
+local has_attr_node = node.has_attribute
+local tex_getattr = tex.getattribute
+
+local ATTR_RANGE = 7
+luatexja.charrange.ATTR_RANGE = ATTR_RANGE
+local jcr_cjk, jcr_noncjk = 0, 1
+local floor = math.floor
+local kcat_attr_table = {}
+local pow_table = {}
+local fn_table = {} -- used in is_ucs_in_japanese_char_direct
+local nfn_table = {} -- used in is_ucs_in_japanese_char_node
+for i = 0, 31*ATTR_RANGE-1 do
+ local ka, pw = luatexbase.attributes['ltj@kcat'..floor(i/31)], 1/(2^(i%31))
+ local jcr_noncjk = jcr_noncjk
+ kcat_attr_table[i], pow_table[i] = ka, 2^(i%31)
+ fn_table[i] = function(p) return floor(has_attr(p, ka)*pw)%2 ~= jcr_noncjk end
+ nfn_table[i] = function(p) return floor(has_attr_node(p, ka)*pw)%2 ~= jcr_noncjk end
+end
+fn_table[-1] = function() return false end -- for char --U+007F
+nfn_table[-1] = function() return false end -- for char --U+007F
+pow_table[31*ATTR_RANGE] = 2^31
+
+-- jcr_table_main[chr_code] = index
+-- index : internal 0, 1, 2, ..., 216 0: 'other'
+-- external 217, 1 2 216, 217 and (out of range): 'other'
+
+-- initialize
+local jcr_table_main = {}
+local ucs_out = 0x110000
+
+for i=0x0 ,0x7F do jcr_table_main[i]=-1 end
+for i=0x80 ,0xFF do jcr_table_main[i]=1 end
+for i=0x100,ucs_out-1 do jcr_table_main[i]=0 end
+
+-- EXT: add characters to a range
+function luatexja.charrange.add_char_range(b,e,ind) -- ind: external range number
+ if not ind or ind<0 or ind>31*ATTR_RANGE then -- 0 はエラーにしない(隠し)
+ ltjb.package_error('luatexja',
+ "invalid character range number (" .. ind .. ")",
+ "A character range number should be in the range 1.."
+ .. 31*ATTR_RANGE .. ",\n" ..
+ "ignored.")
+ return
+ elseif b<0x80 or e>=ucs_out then
+ ltjb.package_warning('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ elseif b>e then
+ local j=b; e=b; b=j
+ end
+ if ind == 31*ATTR_RANGE then ind=0 end
+ for i=math.max(0x80,b),math.min(ucs_out-1,e) do
+ jcr_table_main[i]=ind
+ end
+end
+
+function luatexja.charrange.char_to_range(c) -- return the external range number
+ local r = jcr_table_main[ltjb.in_unicode(c, false)] or 217
+ return (r~=0) and r or 217
+end
+
+local function get_range_setting(i) -- i: internal range number
+ return floor(tex_getattr(kcat_attr_table[i])/pow_table[i])%2
+end
+
+-- glyph_node p は和文文字か?
+function luatexja.charrange.is_ucs_in_japanese_char(p)
+ return nfn_table[jcr_table_main[c or p.char]](p)
+end
+
+function luatexja.charrange.is_ucs_in_japanese_char_direct(p ,c)
+ return fn_table[jcr_table_main[c or getchar(p)]](p)
+end
+
+function luatexja.charrange.is_japanese_char_curlist(c) -- assume that c>=0x80
+ return get_range_setting(jcr_table_main[c])~= jcr_noncjk
+end
+
+-- EXT
+function luatexja.charrange.toggle_char_range(g, i) -- i: external range number
+ if type(i)~='number' then
+ ltjb.package_error('luatexja',
+ "invalid character range number (" .. tostring(i).. ")",
+ "A character range number must be a number, ignored.")
+ elseif i==0 then return
+ else
+ local kc
+ if i>0 then kc=0 else kc=1; i=-i end
+ if i>=7*ATTR_RANGE then i=0 end
+ local attr = kcat_attr_table[i]
+ local a = tex_getattr(attr)
+ tex.setattribute(g, attr,
+ (floor(a/pow_table[i+1])*2+kc)*pow_table[i]+a%pow_table[i])
+ end
+end
+
+luatexja.charrange.get_range_setting=get_range_setting
+
+-- EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-compat.lua b/macros/luatex/generic/luatexja/src/ltj-compat.lua
new file mode 100644
index 0000000000..bd798545f3
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-compat.lua
@@ -0,0 +1,140 @@
+--
+-- luatexja/ltj-compat.lua
+--
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+local stack_table_index = luatexja.stack_table_index
+
+-- load jisx0208 table
+local cache_ver = 2
+
+local cache_outdate_fn = function (t) return t.version~=cache_ver end
+local jisx0208 = ltjb.load_cache('ltj-jisx0208',cache_outdate_fn)
+if not jisx0208 then -- make cache
+ jisx0208 = require('ltj-jisx0208.lua')
+ ltjb.save_cache_luc('ltj-jisx0208', jisx0208)
+end
+
+
+-- \kuten, \jis, \euc, \sjis, \ucs, \kansuji
+local utfchar=utf.char
+local function to_kansuji(num)
+ if not num then num=0; return
+ elseif num<0 then
+ num = -num; tex.write('-')
+ end
+ local s = ""
+ while num~=0 do
+ s = utfchar(
+ ltjs.get_stack_table(luatexja.stack_table_index.KSJ + num%10,
+ '', tex.getcount('ltj@@stack'))) .. s
+ num=math.floor(num/10)
+ end
+ tex.write(s)
+end
+
+-- \ucs: 単なる identity
+local function from_ucs(i)
+ if type(i)~='number' then
+ ltjb.package_error('luatexja',
+ "invalid character code (".. tostring(i) .. ")",
+ "I'm going to use 0 instead of that illegal character code.")
+ i=0
+ end
+ tex.write(i)
+end
+
+-- \kuten: 面区点 (それぞれで16進2桁を使用)=> Unicode 符号位置
+local function from_kuten(i)
+ if type(i)~='number' then
+ ltjb.package_error('luatexja',
+ "invalid character code (".. tostring(i) .. ")",
+ "I'm going to use 0 instead of that illegal character code.")
+ i=0
+ end
+ tex.write(tostring(jisx0208.table_jisx0208_uptex[i] or 0))
+end
+
+-- \euc: EUC-JP による符号位置 => Unicode 符号位置
+local function from_euc(i)
+ if type(i)~='number' then
+ ltjb.package_error('luatexja',
+ "invalid character code (".. tostring(i) .. ")",
+ "I'm going to use 0 instead of that illegal character code.")
+ i=0
+ elseif i>=0x10000 or i<0xa0a0 then
+ i=0
+ end
+ from_kuten(i-0xa0a0)
+end
+
+-- \jis: ISO-2022-JP による符号位置 => Unicode 符号位置
+local function from_jis(i)
+ if (type(i)~='number') or i>=0x10000 or i<0 then
+ ltjb.package_error('luatexja',
+ "invalid character code (".. tostring(i) .. ")",
+ "I'm going to use 0 instead of that illegal character code.")
+ i=0
+ end
+ from_kuten(i-0x2020)
+end
+
+-- \sjis: Shift_JIS による符号位置 => Unicode 符号位置
+local function from_sjis(i)
+ if (type(i)~='number') or i>=0x10000 or i<0 then
+ ltjb.package_error('luatexja',
+ "invalid character code (".. tostring(i) .. ")",
+ "I'm going to use 0 instead of that illegal character code.")
+ tex.write('0'); return
+ end
+ local c2 = math.floor(i/256)
+ local c1 = i%256
+ local shift_jisx0213_s1a3_table = {
+ { [false]= 1, [true]= 8},
+ { [false]= 3, [true]= 4},
+ { [false]= 5, [true]=12},
+ { [false]=13, [true]=14},
+ { [false]=15 } }
+ if c2 >= 0x81 then
+ if c2 >= 0xF0 then -- this if block won't be true
+ if (c2 <= 0xF3 or (c2 == 0xF4 and c1 < 0x9F)) then
+ c2 = 0x100 + shift_jisx0213_s1a3_table[c2 - 0xF0 + 1][(0x9E < c1)];
+ else -- 78<=k<=94
+ c2 = c2 * 2 - 413 + 0x100; if 0x9E < c1 then c2=c2+1 end
+ end
+ else
+ if c2<=0x9f then i=0x101 else i=0x181 end
+ c2 = c2 + c2 - i; if 0x9E < c1 then c2=c2+1 end
+ end
+ if c1 < 0x9F then
+ if c1>0x7f then i=0x40 else i=0x3f end
+ c1 = c1 - i
+ else
+ c1 = c1 - 0x9e
+ end
+ from_kuten(c2*256+c1)
+ end
+end
+
+luatexja.binary_pars.kansujichar = function(c, t)
+ if type(c)~='number' or c<0 or c>9 then
+ ltjb.package_error('luatexja',
+ 'Invalid KANSUJI number (' .. tostring(c) .. ')',
+ 'A KANSUJI number should be in the range 0..9.\n'..
+ 'So I changed this one to zero.')
+ c=0
+ end
+ return ltjs.get_stack_table(stack_table_index.KSJ + c, 0, t)
+end
+
+
+local t = {
+ from_euc = from_euc,
+ from_kuten = from_kuten,
+ from_jis = from_jis,
+ from_sjis = from_sjis,
+ from_ucs = from_ucs,
+ to_kansuji = to_kansuji,
+}
+luatexja.compat = t
diff --git a/macros/luatex/generic/luatexja/src/ltj-debug.lua b/macros/luatex/generic/luatexja/src/ltj-debug.lua
new file mode 100644
index 0000000000..ac517500e8
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-debug.lua
@@ -0,0 +1,187 @@
+--
+-- luatexja/debug.lua
+--
+local ltjdbg = {}
+luatexja.debug = ltjdbg
+local table, string = table, string
+
+-------------------- pretty-print
+
+local function get_serialize_param()
+ return table.serialize_functions,
+ table.serialize_compact,
+ table.serialize_inline
+end
+local function set_serialize_param(s_f, s_c, s_i)
+ table.serialize_functions = s_f
+ table.serialize_compact = s_c
+ table.serialize_inline = s_i
+end
+
+local function normal_serialize(t)
+ local s_f, s_c, s_i = get_serialize_param()
+ set_serialize_param(true, true, true)
+ local ret = table.serialize(t, false, false, true)
+ set_serialize_param(s_f, s_c, s_i)
+ return ret
+end
+
+local function table_tosource(t)
+ if not next(t) then return "{}" end
+ local res_n = "\127"..normal_serialize({t}).."\127"
+ local s, e, cap = res_n:find("\127{\n ({ .* }),\n}\127")
+ if s == 1 and e == res_n:len() then return cap
+ else return normal_serialize(t)
+ end
+end
+ltjdbg.table_tosource = table_tosource
+
+local function function_tosource(f)
+ local res = normal_serialize({f})
+ return res:sub(4, res:len() - 3)
+end
+ltjdbg.function_tosource = function_tosource
+
+--! 値 v をそれを表すソース文字列に変換する.
+--! lualibs の table.serialize() の処理を利用している.
+local function tosource(v)
+ local tv = type(v)
+ if tv == "function" then return function_tosource(v)
+ elseif tv == "table" then return table_tosource(v)
+ elseif tv == "string" then return string.format('%q', v)
+ else return tostring(v)
+ end
+end
+ltjdbg.tosource = tosource
+
+local function coerce(f, v)
+ if f == "q" then return "s", tosource(v)
+ elseif f == "s" then return f, tostring(v)
+ else return f, tonumber(v) or 0
+ end
+end
+
+local function do_pformat(fmt, ...)
+ fmt = fmt:gsub("``", "\127"):gsub("`", "%%"):gsub("\127", "`")
+ local i, na, a = 0, {}, {...}
+ local function proc(p, f)
+ i = i + 1; f, na[i] = coerce(f, a[i])
+ return p..f
+ end
+ fmt = fmt:gsub("(%%[-+#]?[%d%.]*)([a-zA-Z])", proc)
+ return fmt:format(unpack(na))
+end
+
+--! string.format() の拡張版. 以下の点が異なる.
+--! - %q は全ての型について tosource() に変換
+--! - <%> の代わりに <`> も使える (TeX での使用のため)
+--! - %d, %s 等でキャストを行う
+local function pformat(fmt, ...)
+ if type(fmt) == "string" then
+ return do_pformat(fmt, ...)
+ else
+ return tosource(fmt)
+ end
+end
+ltjdbg.pformat = pformat
+
+-------------------- 所要時間合計
+require("socket")
+do
+ local max = math.max
+ local gettime = socket.gettime
+ local time_stat = {}
+ local function start_time_measure(n)
+ if not time_stat[n] then
+ time_stat[n] = {1, -gettime()}
+ else
+ local t = time_stat[n]
+ t[1], t[2] = t[1]+1, t[2]-gettime()
+ end
+ end
+ local function stop_time_measure(n)
+ local t = time_stat[n]
+ t[2] = t[2] + gettime()
+ end
+
+ local function print_measure()
+ stop_time_measure('RUN')
+ local temp = {}
+ for i,v in pairs(time_stat) do
+ temp[#temp+1] = { i, v[1], v[2], v[2]/v[1] }
+ end
+ table.sort(temp, function (a,b) return (a[4]>b[4]) end)
+ print()
+ print('desc', 'ave. (us)', 'times', 'total (ms)')
+ for _,v in ipairs(temp) do
+ print ((v[1] .. ' '):sub(1,16), 1000000*v[4], v[2], 1000*v[3])
+ end
+ end
+ if luatexja.base then
+ luatexja.base.start_time_measure = start_time_measure
+ luatexja.base.stop_time_measure = stop_time_measure
+ luatexbase.add_to_callback('stop_run', print_measure, 'luatexja.time_measure', 1)
+ luatexbase.add_to_callback('pre_linebreak_filter',
+ function(p)
+ start_time_measure('tex_linebreak'); return p
+ end,
+ 'measure_tex_linebreak', 20000)
+ end
+end
+
+-------------------- debug logging
+do
+local debug_show_term = true
+local debug_show_log = true
+--! デバッグログを端末に出力するか
+local function show_term(v)
+ debug_show_term = v
+end
+ltjdbg.show_term = show_term
+--! デバッグログをログファイルに出力するか
+function show_log(v)
+ debug_show_log = v
+end
+ltjdbg.show_log = show_log
+
+local function write_debug_log(s)
+ local target
+ if debug_show_term and debug_show_log then
+ texio.write_nl("term and log", s)
+ elseif debug_show_term and not debug_show_log then
+ texio.write_nl("term", s)
+ elseif not debug_show_term and debug_show_log then
+ texio.write_nl("log", s)
+ end
+end
+
+--! デバッグログ出力. 引数は pformat() と同じ.
+local function out_debug(...)
+ if debug_show_term or debug_show_log then
+ write_debug_log("%DEBUG:"..pformat(...))
+ end
+end
+
+--! デバッグログ出力, パッケージ名付き.
+local function package_debug(pkg, ...)
+ if debug_show_term or debug_show_log then
+ write_debug_log("%DEBUG("..pkg.."):"..pformat(...))
+ end
+end
+
+--! パッケージ名付きデバッグログ出力器を得る.
+local function debug_logger(pkg)
+ return function(...) package_debug(pkg, ...) end
+end
+
+if luatexja.base then
+ luatexja.base.out_debug = out_debug
+ luatexja.base.package_debug = package_debug
+ luatexja.base.debug_logger = debug_logger
+ luatexja.base.show_term = show_term
+ luatexja.base.show_log = show_log
+end
+end
+
+-------------------- all done
+-- EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-direction.lua b/macros/luatex/generic/luatexja/src/ltj-direction.lua
new file mode 100644
index 0000000000..107d27a897
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-direction.lua
@@ -0,0 +1,1147 @@
+--
+-- src/ltj-direction.lua
+--
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.direction = {}
+
+local attr_dir = luatexbase.attributes['ltj@dir']
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+
+local cat_lp = luatexbase.catcodetables['latex-package']
+local to_node = node.direct.tonode
+local to_direct = node.direct.todirect
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local insert_before = node.direct.insert_before
+local insert_after = node.direct.insert_after
+local getid = node.direct.getid
+local getsubtype = node.direct.getsubtype
+local getlist = node.direct.getlist
+local setfield = node.direct.setfield
+local getfield = node.direct.getfield
+local node_new = node.direct.new
+local node_tail = node.direct.tail
+local node_free = node.direct.free
+local node_remove = node.direct.remove
+local node_next = node.direct.getnext
+local traverse = node.direct.traverse
+local traverse_id = node.direct.traverse_id
+local start_time_measure, stop_time_measure
+ = ltjb.start_time_measure, ltjb.stop_time_measure
+local abs = math.abs
+
+local id_kern = node.id('kern')
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_whatsit = node.id('whatsit')
+local sid_save = node.subtype('pdf_save')
+local sid_restore = node.subtype('pdf_restore')
+local sid_matrix = node.subtype('pdf_setmatrix')
+local sid_user = node.subtype('user_defined')
+
+local tex_nest = tex.nest
+local tex_getcount = tex.getcount
+local ensure_tex_attr = ltjb.ensure_tex_attr
+local PROCESSED = luatexja.icflag_table.PROCESSED
+local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
+local PACKED = luatexja.icflag_table.PACKED
+local DIR = luatexja.userid_table.DIR
+local dir_tate = luatexja.dir_table.dir_tate
+local dir_yoko = luatexja.dir_table.dir_yoko
+local dir_dtou = luatexja.dir_table.dir_dtou
+local dir_utod = luatexja.dir_table.dir_utod
+local dir_math_mod = luatexja.dir_table.dir_math_mod
+local dir_node_auto = luatexja.dir_table.dir_node_auto
+local dir_node_manual = luatexja.dir_table.dir_node_manual
+local function get_attr_icflag(p)
+ return (has_attr(p, attr_icflag) or 0) % PROCESSED_BEGIN_FLAG
+end
+
+local page_direction
+--
+local dir_pool
+do
+ local node_copy = node.direct.copy
+ dir_pool = {}
+ for _,i in pairs({dir_tate, dir_yoko, dir_dtou, dir_utod}) do
+ local w = node_new(id_whatsit, sid_user)
+ set_attr(w, attr_dir, i)
+ setfield(w, 'user_id', DIR)
+ setfield(w, 'type', 110)
+ setfield(w, 'next', nil)
+ dir_pool[i] = function () return node_copy(w) end
+ end
+end
+
+--
+local function adjust_badness(hd)
+ if not node_next(hd) and getid(hd)==id_whatsit and getsubtype(hd)==sid_user
+ and getfield(hd, 'user_id')==DIR then
+ -- avoid double whatsit
+ luatexja.global_temp=tex.globaldefs; tex.globaldefs=0
+ luatexja.hbadness_temp=tex.hbadness; tex.hbadness=10000
+ luatexja.vbadness_temp=tex.vbadness; tex.vbadness=10000
+ else
+ luatexja.global_temp = nil
+ luatexja.hbadness_temp=nil
+ luatexja.vbadness_temp=nil
+ end
+end
+
+local get_dir_count, get_adjust_dir_count
+do
+ local function get_dir_count_inner(h)
+ if h then
+ if h.id==id_whatsit and h.subtype==sid_user and h.user_id==DIR then
+ local ic = node.has_attribute(h, attr_icflag) or 0
+ return (ic<PROCESSED_BEGIN_FLAG)
+ and (node.has_attribute(h,attr_dir)%dir_node_auto) or 0
+ else
+ return 0
+ end
+ else
+ return 0
+ end
+ end
+ function get_dir_count()
+ for i=tex_nest.ptr, 1, -1 do
+ local h = tex_nest[i].head.next
+ if h then
+ local t = get_dir_count_inner(h)
+ if t~=0 then return t end
+ end
+ end
+ return page_direction
+ end
+ function get_adjust_dir_count()
+ for i=tex_nest.ptr, 1, -1 do
+ local v = tex_nest[i]
+ local h, m = v.head.next, v.mode
+ if abs(m)== ltjs.vmode and h then
+ local t = get_dir_count_inner(h)
+ if t~=0 then return t end
+ end
+ end
+ return page_direction
+ end
+ luatexja.direction.get_dir_count = get_dir_count
+ luatexja.direction.get_adjust_dir_count = get_adjust_dir_count
+end
+
+
+-- \tate, \yoko,\dtou, \utod
+do
+ local node_next = node.next
+ local node_set_attr = node.set_attribute
+ local node_traverse = node.traverse
+ local STCK = luatexja.userid_table.STCK
+ local IHB = luatexja.userid_table.IHB
+ local id_local = node.id('local_par')
+
+ local function test_list(h, lv)
+ if not h then
+ return 2 -- need to create dir_whatsit
+ else
+ local flag = 2 -- need to create dir_whatsit
+ local w
+ for p in node_traverse(h) do
+ if p.id==id_whatsit then
+ local ps = p.subtype
+ if ps==sid_user then
+ local uid= p.user_id
+ if uid==DIR then
+ flag = 1; w = w or p -- found
+ elseif not(uid==IHB or uid==STCK) then
+ flag = 0; break -- error
+ end
+ end
+ elseif p.id~=id_local then
+ flag = 0; break
+ end
+ end
+ if flag==1 then -- dir_whatsit already exists
+ return 1,w
+ else
+ return flag
+ end
+ end
+ end
+ local node_next_node, node_tail_node = node.next, node.tail
+ local insert_after_node = node.insert_after
+ function luatexja.direction.set_list_direction_hook(v)
+ local lv = tex_nest.ptr -- must be >= 1
+ if not v then
+ v = get_dir_count()
+ if abs(tex_nest[lv-1].mode) == ltjs.mmode and v == dir_tate then
+ v = dir_utod
+ end
+ elseif v=='adj' then
+ v = get_adjust_dir_count()
+ end
+ local h = tex_nest[lv].head
+ local hn = node.next(h)
+ hn = (hn and hn.id==id_local) and hn or h
+ local w = to_node(dir_pool[v]())
+ insert_after_node(h, hn, w)
+ tex_nest[lv].tail = node_tail_node(w)
+ ensure_tex_attr(attr_icflag, 0)
+ ensure_tex_attr(attr_dir, 0)
+ end
+
+ local function set_list_direction(v, name)
+ local lv = tex_nest.ptr
+ if not v then
+ v,name = get_dir_count(), nil
+ if lv>=1 and abs(tex_nest[lv-1].mode) == ltjs.mmode and v == dir_tate then
+ v = dir_utod
+ end
+ elseif v=='adj' then
+ v,name = get_adjust_dir_count(), nil
+ end
+ local current_nest = tex_nest[lv]
+ if tex.currentgrouptype==6 then
+ ltjb.package_error(
+ 'luatexja',
+ "You can't use `\\" .. name .. "' in an align",
+ "To change the direction in an align, \n"
+ .. "you shold use \\hbox or \\vbox.")
+ elseif current_nest.mode == ltjs.hmode or abs(current_nest.mode) == ltjs.mmode then
+ ltjb.package_error(
+ 'luatexja',
+ "Improper `\\" .. name .. "'",
+ 'You cannot change the direction in unrestricted horizontal mode \n'
+ .. 'nor math modes.')
+ else
+ local h = (lv==0) and tex.lists.page_head or current_nest.head.next
+ local flag,w = test_list(h,lv)
+ if flag==0 then
+ if lv==0 and not page_direction then
+ page_direction = v -- for first call of \yoko (in luatexja-core.sty)
+ else
+ ltjb.package_error(
+ 'luatexja',
+ "Use `\\" .. tostring(name) .. "' at top of list",
+ 'Direction change command by LuaTeX-ja is available\n'
+ .. 'only when the current list is null.')
+ end
+ elseif flag==1 then
+ node_set_attr(w, attr_dir, v)
+ if lv==0 then page_direction = v end
+ elseif lv==0 then
+ page_direction = v
+ else -- flag == 2: need to create dir whatsit.
+ local h = current_nest.head
+ local hn = node.next(h)
+ hn = (hn and hn.id==id_local) and hn or h
+ local w = to_node(dir_pool[v]())
+ insert_after_node(h,hn,w)
+ current_nest.tail = node_tail_node(w)
+ end
+ ensure_tex_attr(attr_icflag, 0)
+ end
+ ensure_tex_attr(attr_dir, 0)
+ end
+ luatexja.direction.set_list_direction = set_list_direction
+end
+
+-- ボックスに dir whatsit を追加
+local function create_dir_whatsit(hd, gc, new_dir)
+ if getid(hd)==id_whatsit and
+ getsubtype(hd)==sid_user and getfield(hd, 'user_id')==DIR then
+ set_attr(hd, attr_icflag,
+ get_attr_icflag(hd) + PROCESSED_BEGIN_FLAG)
+ local n =node_next(hd)
+ if n then
+ set_attr(n, attr_icflag,
+ get_attr_icflag(n) + PROCESSED_BEGIN_FLAG)
+ end
+ ensure_tex_attr(attr_icflag, 0)
+ return hd
+ else
+ local w = dir_pool[new_dir]()
+ setfield(w, 'next', hd)
+ set_attr(w, attr_icflag, PROCESSED_BEGIN_FLAG)
+ set_attr(hd, attr_icflag,
+ get_attr_icflag(hd) + PROCESSED_BEGIN_FLAG)
+ ensure_tex_attr(attr_icflag, 0)
+ ensure_tex_attr(attr_dir, 0)
+ return w
+ end
+end
+
+-- hpack_filter, vpack_filter, post_line_break_filter
+-- の結果を組方向を明示するため,先頭に dir_node を設置
+local get_box_dir
+do
+ local function create_dir_whatsit_hpack(h, gc)
+ local hd = to_direct(h)
+ if gc=='fin_row' then
+ if hd then
+ for p in traverse_id(15, hd) do -- unset
+ if get_box_dir(p, 0)==0 then
+ setfield(p, 'head', create_dir_whatsit(getlist(p), 'fin_row', ltjs.list_dir))
+ end
+ end
+ set_attr(hd, attr_icflag, PROCESSED_BEGIN_FLAG)
+ ensure_tex_attr(attr_icflag, 0)
+ end
+ return h
+ elseif gc == 'preamble' then
+ else
+ adjust_badness(hd)
+ return to_node(create_dir_whatsit(hd, gc, ltjs.list_dir))
+ end
+ end
+
+ ltjb.add_to_callback('hpack_filter',
+ create_dir_whatsit_hpack, 'ltj.create_dir_whatsit', 10000)
+end
+
+do
+ local function create_dir_whatsit_parbox(h, gc)
+ stop_time_measure('tex_linebreak');
+ -- start 側は ltj-debug.lua に
+ local new_dir = ltjs.list_dir
+ for line in traverse_id(id_hlist, to_direct(h)) do
+ setfield(line, 'head', create_dir_whatsit(getlist(line), gc, new_dir) )
+ end
+ ensure_tex_attr(attr_dir, 0)
+ return h
+ end
+ ltjb.add_to_callback('post_linebreak_filter',
+ create_dir_whatsit_parbox, 'ltj.create_dir_whatsit', 10000)
+end
+
+local create_dir_whatsit_vbox
+do
+ local wh = {}
+ local id_glue, sid_parskip = node.id('glue'), 3
+ create_dir_whatsit_vbox = function (hd, gc)
+ ltjs.list_dir = get_dir_count()
+ -- remove dir whatsit
+ for x in traverse_id(id_whatsit, hd) do
+ if getsubtype(x)==sid_user and getfield(x, 'user_id')==DIR then
+ wh[#wh+1]=x
+ end
+ end
+ if hd==wh[1] then
+ ltjs.list_dir =has_attr(hd,attr_dir)
+ local x = node_next(hd)
+ if getid(x)==id_glue and getsubtype(x)==sid_parskip then
+ node_remove(hd,x); node_free(x)
+ end
+ end
+ for i=1,#wh do
+ hd = node_remove(hd, wh[i]); node_free(wh[i]); wh[i] = nil
+ end
+ if gc=='fin_row' then -- gc == 'preamble' case is treated in dir_adjust_vpack
+ if hd then
+ set_attr(hd, attr_icflag, PROCESSED_BEGIN_FLAG)
+ ensure_tex_attr(attr_icflag, 0)
+ end
+ return hd
+ else
+ local n =node_next(hd)
+ if gc=='vtop' then
+ local w = create_dir_whatsit(hd, gc, ltjs.list_dir)
+ -- move dir whatsit after hd
+ setfield(hd, 'next', w); setfield(w, 'next', n)
+ return hd
+ else
+ hd = create_dir_whatsit(hd, gc, ltjs.list_dir)
+ return hd
+ end
+ end
+ end
+end
+
+-- dir_node に包む方法を書いたテーブル
+local dir_node_aux
+do
+ local floor = math.floor
+ local get_h =function (w,h,d) return h end
+ local get_d =function (w,h,d) return d end
+ local get_h_d =function (w,h,d) return h+d end
+ local get_h_d_neg =function (w,h,d) return -h-d end
+ local get_d_neg =function (w,h,d) return -d end
+ local get_w_half =function (w,h,d) return floor(0.5*w) end
+ local get_w_half_rem =function (w,h,d) return w-floor(0.5*w) end
+ local get_w_neg =function (w,h,d) return -w end
+ local get_w =function (w,h,d) return w end
+ local zero = function() return 0 end
+ dir_node_aux = {
+ [dir_yoko] = { -- yoko を
+ [dir_tate] = { -- tate 中で組む
+ width = get_h_d,
+ height = get_w_half,
+ depth = get_w_half_rem,
+ [id_hlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 1 -1 0' },
+ { 'kern', function(w,h,d,nw,nh,nd) return -nd end },
+ { 'box' , get_h},
+ { 'kern', function(w,h,d,nw,nh,nd) return nd-w end },
+ { 'whatsit', sid_restore },
+ },
+ [id_vlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 1 -1 0' },
+ { 'kern' , zero },
+ { 'box' , function(w,h,d,nw,nh,nd) return -nh-nd end },
+ { 'kern', get_h_d_neg},
+ { 'whatsit', sid_restore },
+ },
+ },
+ [dir_dtou] = { -- dtou 中で組む
+ width = get_h_d,
+ height = get_w,
+ depth = zero,
+ [id_hlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 -1 1 0' },
+ { 'kern', function(w,h,d,nw,nh,nd) return -nh end },
+ { 'box', get_d_neg },
+ { 'kern', function(w,h,d,nw,nh,nd) return nh-w end },
+ { 'whatsit', sid_restore },
+ },
+ [id_vlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 -1 1 0' },
+ { 'kern', get_h_d_neg },
+ { 'box', zero },
+ { 'whatsit', sid_restore },
+ },
+ },
+ },
+ [dir_tate] = { -- tate を
+ [dir_yoko] = { -- yoko 中で組む
+ width = get_h_d,
+ height = get_w,
+ depth = zero,
+ [id_hlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 -1 1 0' },
+ { 'kern', function (w,h,d,nw,nh,nd) return -nh end },
+ { 'box' , get_d_neg },
+ { 'kern', function (w,h,d,nw,nh,nd) return nh-w end },
+ { 'whatsit', sid_restore },
+ },
+ [id_vlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 -1 1 0' },
+ { 'kern', get_h_d_neg },
+ { 'box', zero },
+ { 'whatsit', sid_restore },
+ },
+ },
+ [dir_dtou] = { -- dtou 中で組む
+ width = get_w,
+ height = get_d,
+ depth = get_h,
+ [id_hlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '-1 0 0 -1' },
+ { 'kern', get_w_neg },
+ { 'box', function (w,h,d,nw,nh,nd) return h-nd end },
+ { 'whatsit', sid_restore },
+ },
+ [id_vlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '-1 0 0 -1' },
+ { 'kern', get_h_d_neg },
+ { 'box', get_w_neg },
+ { 'whatsit', sid_restore },
+ },
+ },
+ },
+ [dir_dtou] = { -- dtou を
+ [dir_yoko] = { -- yoko 中で組む
+ width = get_h_d,
+ height = get_w,
+ depth = zero,
+ [id_hlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '0 1 -1 0' },
+ { 'kern', function (w,h,d,nw,nh,nd) return -nd end },
+ { 'box', get_h },
+ { 'kern', function (w,h,d,nw,nh,nd) return nd-w end },
+ { 'whatsit', sid_restore },
+ },
+ [id_vlist] = {
+ { 'kern', zero },
+ { 'whatsit', sid_save },
+ { 'rotate', '0 1 -1 0' },
+ { 'box', function (w,h,d,nw,nh,nd) return -nd-nh end },
+ { 'kern', get_h_d_neg },
+ { 'whatsit', sid_restore },
+ },
+ },
+ [dir_tate] = { -- tate 中で組む
+ width = get_w,
+ height = get_d,
+ depth = get_h,
+ [id_hlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', '-1 0 0 -1' },
+ { 'kern', get_w_neg },
+ { 'box', function (w,h,d,nw,nh,nd) return h-nd end },
+ { 'whatsit', sid_restore },
+ },
+ [id_vlist] = {
+ { 'whatsit', sid_save },
+ { 'rotate', ' -1 0 0 -1' },
+ { 'kern', function (w,h,d,nw,nh,nd) return -nh-nd end },
+ { 'box', get_w_neg },
+ { 'kern', function (w,h,d,nw,nh,nd) return nh+nd-h-d end },
+ { 'whatsit', sid_restore },
+ },
+ },
+ },
+ }
+end
+
+-- 1st ret val: b の組方向
+-- 2nd ret val はその DIR whatsit
+function get_box_dir(b, default)
+ start_time_measure('get_box_dir')
+ local dir = has_attr(b, attr_dir) or 0
+ local bh = getfield(b,'head')
+ -- b は insert node となりうるので getlist() は使えない
+ local c
+ if bh~=0 then -- bh != nil
+ for bh in traverse_id(id_whatsit, bh) do
+ if getsubtype(bh)==sid_user and getfield(bh, 'user_id')==DIR then
+ c = bh
+ dir = (dir==0) and has_attr(bh, attr_dir) or dir
+ end
+ end
+ end
+ -- for i=1,2 do
+ -- if bh and getid(bh)==id_whatsit
+ -- and getsubtype(bh)==sid_user and getfield(bh, 'user_id')==DIR then
+ -- c = bh
+ -- dir = (dir==0) and has_attr(bh, attr_dir) or dir
+ -- end
+ -- bh = node_next(bh)
+ -- end
+ stop_time_measure('get_box_dir')
+ return (dir==0 and default or dir), c
+end
+
+do
+ local getbox = tex.getbox
+ local dir_backup
+ function luatexja.direction.unbox_check_dir(is_copy)
+ start_time_measure('box_primitive_hook')
+ local list_dir = get_dir_count()%dir_math_mod
+ local b = getbox(tex_getcount('ltj@tempcnta'))
+ if b and getlist(to_direct(b)) then
+ local box_dir = get_box_dir(to_direct(b), dir_yoko)
+ if box_dir%dir_math_mod ~= list_dir then
+ ltjb.package_error(
+ 'luatexja',
+ "Incompatible direction list can't be unboxed",
+ 'I refuse to unbox a box in differrent direction.')
+ tex.sprint(cat_lp, '\\@gobbletwo')
+ else
+ dir_backup = nil
+ local bd = to_direct(b)
+ local hd = getlist(bd)
+ local nh = hd
+ while hd do
+ if getid(hd)==id_whatsit and getsubtype(hd)==sid_user
+ and getfield(hd, 'user_id')==DIR then
+ local d = hd
+ nh, hd = node_remove(nh, hd)
+ if is_copy and (not dir_backup) then
+ dir_backup = d
+ setfield(dir_backup, 'next', nil)
+ else
+ node_free(d)
+ end
+ else
+ hd = node_next(hd)
+ end
+ end
+ setfield(bd, 'head', nh)
+ end
+ end
+ if luatexja.global_temp and tex.globaldefs~=luatexja.global_temp then
+ tex.globaldefs = luatexja.global_temp
+ end
+ stop_time_measure('box_primitive_hook')
+ end
+ function luatexja.direction.uncopy_restore_whatsit()
+ local b = getbox(tex_getcount('ltj@tempcnta'))
+ if b then
+ local bd = to_direct(b)
+ if dir_backup then
+ setfield(dir_backup, 'next', getlist(bd))
+ setfield(bd, 'head', dir_backup)
+ dir_backup = nil
+ end
+ end
+ end
+end
+
+-- dir_node に包まれている「本来の中身」を取り出し,
+-- dir_node を全部消去
+local function unwrap_dir_node(b, head, box_dir)
+ -- b: dir_node, head: the head of list, box_dir:
+ -- return values are (new head), (next of b), (contents), (dir of contents)
+ local bh = getlist(b)
+ local nh, nb
+ if head then
+ nh = insert_before(head, b, bh)
+ nh, nb = node_remove(nh, b)
+ setfield(b, 'next', nil)
+ node_free(b)
+ end
+ local shift_old, b_dir, wh = nil, get_box_dir(bh, 0)
+ if wh then
+ node.direct.flush_list(getfield(wh, 'value'))
+ setfield(wh, 'value', nil)
+ end
+ return nh, nb, bh, b_dir
+end
+
+-- is_manual: 寸法変更に伴うものか?
+local function create_dir_node(b, b_dir, new_dir, is_manual)
+ local info = dir_node_aux[b_dir%dir_math_mod][new_dir%dir_math_mod]
+ local w = getfield(b, 'width')
+ local h = getfield(b, 'height')
+ local d = getfield(b, 'depth')
+ local db = node_new(getid(b)) -- dir_node
+ set_attr(db, attr_dir,
+ new_dir + (is_manual and dir_node_manual or dir_node_auto))
+ set_attr(db, attr_icflag, PROCESSED)
+ set_attr(b, attr_icflag, PROCESSED)
+ ensure_tex_attr(attr_dir, 0)
+ ensure_tex_attr(attr_icflag, 0)
+ setfield(db, 'dir', getfield(b, 'dir'))
+ setfield(db, 'shift', 0)
+ setfield(db, 'width', info.width(w,h,d))
+ setfield(db, 'height', info.height(w,h,d))
+ setfield(db, 'depth', info.depth(w,h,d))
+ return db
+end
+
+-- 異方向のボックスの処理
+local make_dir_whatsit, process_dir_node
+do
+ make_dir_whatsit = function (head, b, new_dir, origin)
+ new_dir = new_dir%dir_math_mod
+ -- head: list head, b: box
+ -- origin: コール元 (for debug)
+ -- return value: (new head), (next of b), (new b), (is_b_dir_node)
+ -- (new b): b か dir_node に被せられた b
+ local bh = getlist(b)
+ local box_dir, dn = get_box_dir(b, ltjs.list_dir)
+ -- 既に b の中身にあるwhatsit
+ if (box_dir<dir_node_auto) and (not dn) then
+ bh = create_dir_whatsit(bh, 'make_dir_whatsit', dir_yoko)
+ dn = bh; setfield(b, 'head', bh)
+ end
+ if box_dir%dir_math_mod==new_dir then
+ if box_dir>=dir_node_auto then
+ -- dir_node としてカプセル化されている
+ local _, dnc = get_box_dir(b, 0)
+ if dnc then -- free all other dir_node
+ node.direct.flush_list(getfield(dnc, 'value'))
+ setfield(dnc, 'value', nil)
+ end
+ set_attr(b, attr_dir, box_dir%dir_math_mod + dir_node_auto)
+ return head, node_next(b), b, true
+ else
+ -- 組方向が一緒 (up to math dir) のボックスなので,何もしなくて良い
+ return head, node_next(b), b, false
+ end
+ else
+ -- 組方向を合わせる必要あり
+ local nh, nb, ret, flag
+ if box_dir>= dir_node_auto then -- unwrap
+ local b_dir
+ head, nb, b, b_dir = unwrap_dir_node(b, head, box_dir)
+ bh = getlist(b)
+ if b_dir%dir_math_mod==new_dir then
+ -- dir_node の中身が周囲の組方向とあっている
+ return head, nb, b, false
+ else box_dir = b_dir end
+ end
+ box_dir = box_dir%dir_math_mod
+ local db
+ local dnh = getfield(dn, 'value')
+ for x in traverse(dnh) do
+ if has_attr(x, attr_dir)%dir_math_mod == new_dir then
+ setfield(dn, 'value', to_node(node_remove(dnh, x)))
+ db=x; break
+ end
+ end
+ node.direct.flush_list(getfield(dn, 'value'))
+ setfield(dn, 'value', nil)
+ db = db or create_dir_node(b, box_dir, new_dir, false)
+ local w = getfield(b, 'width')
+ local h = getfield(b, 'height')
+ local d = getfield(b, 'depth')
+ local dn_w = getfield(db, 'width')
+ local dn_h = getfield(db, 'height')
+ local dn_d = getfield(db, 'depth')
+ nh, nb = insert_before(head, b, db), nil
+ nh, nb = node_remove(nh, b)
+ setfield(b, 'next', nil); setfield(db, 'head', b)
+ ret, flag = db, true
+ return nh, nb, ret, flag
+ end
+ end
+ process_dir_node = function (hd, gc)
+ local x, new_dir = hd, ltjs.list_dir or dir_yoko
+ while x do
+ local xid = getid(x)
+ if (xid==id_hlist and get_attr_icflag(x)~=PACKED)
+ or xid==id_vlist then
+ hd, x = make_dir_whatsit(hd, x, new_dir, 'process_dir_node:' .. gc)
+ else
+ x = node_next(x)
+ end
+ end
+ return hd
+ end
+
+ -- lastbox
+ local node_prev = (node.direct~=node) and node.direct.getprev or node.prev
+ local id_glue = node.id('glue')
+ local function lastbox_hook()
+ start_time_measure('box_primitive_hook')
+ local bn = tex_nest[tex_nest.ptr].tail
+ if bn then
+ local b, head = to_direct(bn), to_direct(tex_nest[tex_nest.ptr].head)
+ local bid = getid(b)
+ if bid==id_hlist or bid==id_vlist then
+ local p = getlist(b)
+ -- alignment の各行の中身が入ったボックス
+ if p and getid(p)==id_glue and getsubtype(p)==12 then -- tabskip
+ local np = node_next(p); local npid = getid(np)
+ if npid==id_hlist or npid==id_vlist then
+ setfield(b, 'head', create_dir_whatsit(p, 'align', get_box_dir(np, 0)))
+ end
+ end
+ local box_dir = get_box_dir(b, 0)
+ if box_dir>= dir_node_auto then -- unwrap dir_node
+ local p = node_prev(b)
+ local dummy1, dummy2, nb = unwrap_dir_node(b, nil, box_dir)
+ setfield(p, 'next', nb); tex_nest[tex_nest.ptr].tail = to_node(nb)
+ setfield(b, 'next', nil); setfield(b, 'head', nil)
+ node_free(b); b = nb
+ end
+ local _, wh = get_box_dir(b, 0) -- clean dir_node attached to the box
+ if wh then
+ node.direct.flush_list(getfield('value', wh))
+ setfield(wh, 'value', nil)
+ end
+ end
+ end
+ stop_time_measure('box_primitive_hook')
+ end
+
+ luatexja.direction.make_dir_whatsit = make_dir_whatsit
+ luatexja.direction.lastbox_hook = lastbox_hook
+end
+
+-- \wd, \ht, \dp の代わり
+do
+ local getbox, setdimen = tex.getbox, tex.setdimen
+ local function get_box_dim_common(key, s, l_dir)
+ -- s: not dir_node.
+ local s_dir, wh = get_box_dir(s, dir_yoko)
+ s_dir = s_dir%dir_math_mod
+ if s_dir ~= l_dir then
+ local not_found = true
+ for x in traverse(getfield(wh, 'value')) do
+ if l_dir == has_attr(x, attr_dir)%dir_node_auto then
+ setdimen('ltj@tempdima', getfield(x, key))
+ not_found = false; break
+ end
+ end
+ if not_found then
+ local w = getfield(s, 'width')
+ local h = getfield(s, 'height')
+ local d = getfield(s, 'depth')
+ setdimen('ltj@tempdima',
+ dir_node_aux[s_dir][l_dir][key](w,h,d))
+ end
+ else
+ setdimen('ltj@tempdima', getfield(s, key))
+ end
+ end
+ local function get_box_dim(key, n)
+ local gt = tex.globaldefs; tex.globaldefs = 0
+ local s = getbox(n)
+ if s then
+ local l_dir = (get_dir_count())%dir_math_mod
+ s = to_direct(s)
+ local b_dir = get_box_dir(s,dir_yoko)
+ if b_dir<dir_node_auto then
+ get_box_dim_common(key, s, l_dir)
+ elseif b_dir%dir_math_mod==l_dir then
+ setdimen('ltj@tempdima', getfield(s, key))
+ else
+ get_box_dim_common(key, getlist(s), l_dir)
+ end
+ else
+ setdimen('ltj@tempdima', 0)
+ end
+ tex.sprint(cat_lp, '\\ltj@tempdima')
+ tex.globaldefs = gt
+ end
+ luatexja.direction.get_box_dim = get_box_dim
+
+ -- return value: (changed dimen of box itself?)
+ local scan_dimen, scan_int = token.scan_dimen, token.scan_int
+ local scan_keyword = token.scan_keyword
+ local function set_box_dim_common(key, s, l_dir)
+ local s_dir, wh = get_box_dir(s, dir_yoko)
+ s_dir = s_dir%dir_math_mod
+ if s_dir ~= l_dir then
+ if not wh then
+ wh = create_dir_whatsit(getlist(s), 'set_box_dim', s_dir)
+ setfield(s, 'head', wh)
+ end
+ local db
+ local dnh = getfield(wh, 'value')
+ for x in traverse(dnh) do
+ if has_attr(x, attr_dir)%dir_node_auto==l_dir then
+ db = x; break
+ end
+ end
+ if not db then
+ db = create_dir_node(s, s_dir, l_dir, true)
+ setfield(db, 'next', dnh)
+ setfield(wh, 'value',to_node(db))
+ end
+ setfield(db, key, scan_dimen())
+ return false
+ else
+ setfield(s, key, scan_dimen())
+ if wh then
+ -- change dimension of dir_nodes which are created "automatically"
+ local bw, bh, bd
+ = getfield(s,'width'), getfield(s, 'height'), getfield(s, 'depth')
+ for x in traverse(getfield(wh, 'value')) do
+ local x_dir = has_attr(x, attr_dir)
+ if x_dir<dir_node_manual then
+ local info = dir_node_aux[s_dir][x_dir%dir_node_auto]
+ setfield(x, 'width', info.width(bw,bh,bd))
+ setfield(x, 'height', info.height(bw,bh,bd))
+ setfield(x, 'depth', info.depth(bw,bh,bd))
+ end
+ end
+ end
+ return true
+ end
+ end
+ local function set_box_dim(key)
+ local s = getbox(scan_int()); scan_keyword('=')
+ if s then
+ local l_dir = (get_dir_count())%dir_math_mod
+ s = to_direct(s)
+ local b_dir = get_box_dir(s,dir_yoko)
+ if b_dir<dir_node_auto then
+ set_box_dim_common(key, s, l_dir)
+ elseif b_dir%dir_math_mod == l_dir then
+ -- s is dir_node
+ setfield(s, key, scan_dimen())
+ if b_dir<dir_node_manual then
+ set_attr(s, attr_dir, b_dir%dir_node_auto + dir_node_manual)
+ end
+ else
+ local sid, b = getid(s), getlist(s)
+ local info = dir_node_aux[get_box_dir(b,dir_yoko)%dir_math_mod][b_dir%dir_node_auto]
+ local bw, bh, bd
+ = getfield(b,'width'), getfield(b, 'height'), getfield(b, 'depth')
+ local sw, sh, sd
+ = getfield(s,'width'), getfield(s, 'height'), getfield(s, 'depth')
+ if set_box_dim_common(key, b, l_dir) and b_dir<dir_node_manual then
+ -- re-calculate dimension of s, if s is created "automatically"
+ if b_dir<dir_node_manual then
+ setfield(s, 'width', info.width(bw,bh,bd))
+ setfield(s, 'height', info.height(bw,bh,bd))
+ setfield(s, 'depth', info.depth(bw,bh,bd))
+ end
+ end
+ end
+ end
+ end
+ luatexja.direction.set_box_dim = set_box_dim
+end
+
+do
+ local getbox = tex.getbox
+ local function get_register_dir(n)
+ local s = getbox(n)
+ if s then
+ s = to_direct(s)
+ local b_dir = get_box_dir(s, dir_yoko)
+ if b_dir<dir_node_auto then
+ return b_dir
+ else
+ local b_dir = get_box_dir(
+ node_next(node_next(node_next(getlist(s)))), dir_yoko)
+ return b_dir
+ end
+ else
+ return 0
+ end
+ end
+ luatexja.direction.get_register_dir = get_register_dir
+end
+
+do
+ local getbox, setbox, copy_list = tex.getbox, tex.setbox, node.direct.copy_list
+ -- raise, lower
+ function luatexja.direction.raise_box()
+ start_time_measure('box_primitive_hook')
+ local list_dir = get_dir_count()
+ local s = getbox('ltj@afbox')
+ if s then
+ local sd = to_direct(s)
+ local box_dir = get_box_dir(sd, dir_yoko)
+ if box_dir%dir_math_mod ~= list_dir then
+ setbox(
+ 'ltj@afbox',
+ to_node(copy_list(make_dir_whatsit(sd, sd, list_dir, 'box_move')))
+ -- copy_list しないとリストの整合性が崩れる……?
+ )
+ end
+ end
+ stop_time_measure('box_primitive_hook')
+ end
+end
+
+-- PACKED の hbox から文字を取り出す
+-- luatexja.jfmglue.check_box などで使用
+do
+ local function glyph_from_packed(h)
+ local b = getlist(h)
+ return (getid(b)==id_kern or (getid(b)==id_whatsit and getsubtype(b)==sid_save) )
+ and node_next(node_next(node_next(b))) or b
+ end
+ luatexja.direction.glyph_from_packed = glyph_from_packed
+end
+
+-- adjust
+do
+ local id_adjust = node.id('adjust')
+ function luatexja.direction.check_adjust_direction()
+ start_time_measure('box_primitive_hook')
+ local list_dir = get_adjust_dir_count()
+ local a = tex_nest[tex_nest.ptr].tail
+ local ad = to_direct(a)
+ if a and getid(ad)==id_adjust then
+ local adj_dir = get_box_dir(ad)
+ if list_dir~=adj_dir then
+ ltjb.package_error(
+ 'luatexja',
+ 'Direction Incompatible',
+ "\\vadjust's argument and outer vlist must have same direction.")
+ node.direct.last_node()
+ end
+ end
+ stop_time_measure('box_primitive_hook')
+ end
+end
+
+-- insert
+do
+ local id_ins = node.id('ins')
+ local id_rule = node.id('rule')
+ function luatexja.direction.populate_insertion_dir_whatsit()
+ start_time_measure('box_primitive_hook')
+ local list_dir = get_dir_count()
+ local a = tex_nest[tex_nest.ptr].tail
+ local ad = to_direct(a)
+ if (not a) or getid(ad)~=id_ins then
+ a = node.tail(tex.lists.page_head); ad = to_direct(a)
+ end
+ if a and getid(ad)==id_ins then
+ local h = getfield(ad, 'head')
+ if getid(h)==id_whatsit and
+ getsubtype(h)==sid_user and getfield(h, 'user_id')==DIR then
+ local n = h; h = node_remove(h,h)
+ node_free(n)
+ end
+ for box_rule in traverse(h) do
+ if getid(box_rule)<id_rule then
+ h = insert_before(h, box_rule, dir_pool[list_dir]())
+ end
+ end
+ ensure_tex_attr(attr_dir, 0)
+ setfield(ad, 'head', h)
+ end
+ stop_time_measure('box_primitive_hook')
+ end
+end
+
+-- vsplit
+do
+ local split_dir_whatsit, split_dir_head
+ local cat_lp = luatexbase.catcodetables['latex-package']
+ local sprint, scan_int, tex_getbox = tex.sprint, token.scan_int, tex.getbox
+ function luatexja.direction.vsplit()
+ local n = scan_int();
+ local p = to_direct(tex_getbox(n))
+ split_dir_head = nil
+ if p then
+ local bh = getlist(p)
+ if getid(bh)==id_whatsit and getsubtype(bh)==sid_user and getfield(bh, 'user_id')==DIR
+ and node_next(bh) then
+ ltjs.list_dir = has_attr(bh, attr_dir)
+ local q = node_next(p)
+ setfield(p, 'head', node_remove(bh,bh,bh))
+ split_dir_head = bh
+ end
+ end
+ sprint(cat_lp, '\\ltj@@orig@vsplit' .. tostring(n))
+ end
+ local function dir_adjust_vpack(h, gc)
+ start_time_measure('direction_vpack')
+ local hd = to_direct(h)
+ if gc=='split_keep' then
+ -- supply dir_whatsit
+ hd = create_dir_whatsit_vbox(hd, gc)
+ split_dir_whatsit = hd
+ elseif gc=='split_off' then
+ if split_dir_head then
+ list_dir = has_attr(split_dir_head, attr_dir)
+ hd = insert_before(hd, hd, split_dir_head)
+ split_dir_head=nil
+ end
+ if split_dir_whatsit then
+ -- adjust direction of 'split_keep'
+ set_attr(split_dir_whatsit, attr_dir, ltjs.list_dir)
+ end
+ split_dir_whatsit=nil
+ elseif gc=='preamble' then
+ split_dir_whatsit=nil
+ else
+ adjust_badness(hd)
+ -- hd = process_dir_node(create_dir_whatsit_vbox(hd, gc), gc)
+ -- done in append_to_vpack callback
+ hd = create_dir_whatsit_vbox(hd, gc)
+ split_dir_whatsit=nil
+ end
+ stop_time_measure('direction_vpack')
+ return to_node(hd)
+ end
+ ltjb.add_to_callback('vpack_filter',
+ dir_adjust_vpack,
+ 'ltj.direction', 10000)
+end
+
+do
+ -- supply direction whatsit to the main vertical list "of the next page"
+ local function dir_adjust_pre_output(h, gc)
+ return to_node(create_dir_whatsit_vbox(to_direct(h), gc))
+ end
+ ltjb.add_to_callback('pre_output_filter',
+ dir_adjust_pre_output,
+ 'ltj.direction', 10000)
+
+ function luatexja.direction.remove_end_whatsit()
+ local h=tex.lists.page_head
+ if h and (not h.next) and
+ h.id==id_whatsit and h.subtype==sid_user and
+ h.user_id == DIR then
+ tex.lists.page_head = nil
+ node.free(h)
+ end
+ end
+end
+
+-- append_to_vlist filter: done in ltj-lineskip.lua
+
+-- finalize (executed just before \shipout)
+-- we supply correct pdfsavematrix nodes etc. inside dir_node
+do
+ local finalize_inner
+ local function finalize_dir_node(db,new_dir)
+ local b = getlist(db)
+ if getid(b)==id_whatsit and getsubtype(b)==sid_user
+ and getfield(b, 'user_id')==DIR then
+ local ob = b; b = node_remove(b,b); setfield(db, 'head', b);
+ node_free(ob)
+ end
+ finalize_inner(b)
+ local w = getfield(b, 'width')
+ local h = getfield(b, 'height')
+ local d = getfield(b, 'depth')
+ local dn_w = getfield(db, 'width')
+ local dn_h = getfield(db, 'height')
+ local dn_d = getfield(db, 'depth')
+ local db_head, db_tail
+ local t = dir_node_aux[get_box_dir(b, dir_yoko)%dir_math_mod][new_dir]
+ t = t and t[getid(b)]; if not t then return end
+ for _,v in ipairs(t) do
+ local cmd, arg, nn = v[1], v[2]
+ if cmd=='kern' then
+ nn = node_new(id_kern, 1)
+ setfield(nn, 'kern', arg(w, h, d, dn_w, dn_h, dn_d))
+ elseif cmd=='whatsit' then
+ nn = node_new(id_whatsit, arg)
+ elseif cmd=='rotate' then
+ nn = node_new(id_whatsit, sid_matrix)
+ setfield(nn, 'data', arg)
+ elseif cmd=='box' then
+ nn = b; setfield(b, 'next', nil)
+ setfield(nn, 'shift', arg(w, h, d, dn_w, dn_h, dn_d))
+ end
+ if db_head then
+ insert_after(db_head, db_tail, nn)
+ db_tail = nn
+ else
+ setfield(db, 'head', nn)
+ db_head, db_tail = nn, nn
+ end
+ end
+ end
+
+ tex.setattribute(attr_dir, dir_yoko)
+ local shipout_temp = node_new(id_hlist)
+ tex.setattribute(attr_dir, 0)
+
+ finalize_inner = function (box)
+ for n in traverse(getlist(box)) do
+ local nid = getid(n)
+ if (nid==id_hlist or nid==id_vlist) then
+ local ndir = get_box_dir(n, dir_yoko)
+ if ndir>=dir_node_auto then -- n is dir_node
+ finalize_dir_node(n, ndir%dir_math_mod)
+ else
+ finalize_inner(n)
+ end
+ end
+ end
+ end
+ local getbox = tex.getbox
+ local setbox, copy = node.direct.setbox, node.direct.copy
+ local lua_mem_kb = 0
+ function luatexja.direction.finalize()
+ local a = to_direct(tex.getbox("AtBeginShipoutBox"))
+ local a_dir = get_box_dir(a, dir_yoko)
+ if a_dir~=dir_yoko then
+ local b = create_dir_node(a, a_dir, dir_yoko, false)
+ setfield(b, 'head', a); a = b
+ end
+ setfield(shipout_temp, 'head', a)
+ finalize_inner(shipout_temp)
+ setbox('global', "AtBeginShipoutBox", copy(getlist(shipout_temp)))
+ setfield(shipout_temp, 'head',nil)
+ -- garbage collect
+ --local m = collectgarbage('count')
+ --if m>lua_mem_kb+20480 then
+ -- collectgarbage(); lua_mem_kb = collectgarbage('count')
+ --end
+ --print('Lua Memory Usage', lua_mem_kb)
+ end
+end
diff --git a/macros/luatex/generic/luatexja/src/ltj-inputbuf.lua b/macros/luatex/generic/luatexja/src/ltj-inputbuf.lua
new file mode 100644
index 0000000000..e901d43891
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-inputbuf.lua
@@ -0,0 +1,53 @@
+--
+-- luatexja/ltj-inputbuf.lua
+--
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('charrange'); local ltjc = luatexja.charrange
+
+require("unicode")
+local utflen = utf.len
+local utfbyte = utf.byte
+local utfchar = utf.char
+local node_new = node.new
+local node_free = node.free
+local id_glyph = node.id('glyph')
+local getcatcode, getcount = tex.getcatcode, tex.getcount
+local ltjc_is_japanese_char_curlist = ltjc.is_japanese_char_curlist
+
+--- the following function is modified from jafontspec.lua (by K. Maeda).
+--- Instead of "%", we use U+FFFFF for suppressing spaces.
+--DEBUG require"socket"
+local time_line = 0
+local start_time_measure, stop_time_measure
+ = ltjb.start_time_measure, ltjb.stop_time_measure
+local function add_comment(buffer)
+ start_time_measure('inputbuf')
+ local i = utflen(buffer)
+ while (i>0) and (getcatcode(utfbyte(buffer, i))==1
+ or getcatcode(utfbyte(buffer, i))==2) do
+ i=i-1
+ end
+ if i>0 then
+ local c = utfbyte(buffer, i)
+ if c>=0x80 then
+ local ct = getcatcode(c)
+ local te = tex.endlinechar
+ local ctl = (te ~= -1) and (getcatcode(te)==5) and (getcatcode(getcount('ltjlineendcomment'))==14)
+ -- Is the catcode of endline character is 5 (end-of-line)?
+ -- Is the catcode of \ltjlineendcomment (new comment char) is 14 (comment)?
+ if ((ct==11) or (ct==12)) and ctl then
+ if ltjc_is_japanese_char_curlist(c) then
+ buffer = buffer .. utfchar(getcount('ltjlineendcomment'))
+ end
+ end
+ end
+ end
+ stop_time_measure('inputbuf')
+ return buffer
+end
+
+luatexbase.add_to_callback('process_input_buffer',
+ add_comment,'ltj.process_input_buffer')
+
+--EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua b/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua
new file mode 100644
index 0000000000..424b1ef472
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-ivd_aj1.lua
@@ -0,0 +1,23096 @@
+return {
+version = 2,
+table_ivd_aj1 = {
+-- # IVD_Sequences
+-- #
+-- # History:
+-- #
+-- # 2017-12-12 Registration of additional sequences in the Adobe-Japan1
+-- # collection. Combined registration of the KRName collection
+-- # and of sequences in that collection. Registration of
+-- # additional sequences in the Moji_Joho collection.
+-- #
+-- # 2016-08-15 Combined registration of the MSARG collection and of
+-- # sequences in that collection.
+-- #
+-- # 2014-05-16 Combined registration of the Moji_Joho collection and of
+-- # sequences in that collection.
+-- #
+-- # 2012-07-02 File restored due to corruption on the server.
+-- #
+-- # 2012-03-02 Registration of additional sequences in the Adobe-Japan1
+-- # collection. Registration of additional sequences in the
+-- # Hanyo-Denshi collection.
+-- #
+-- # 2010-11-14 Combined registration of the Hanyo-Denshi collection and
+-- # of sequences in that collection.
+-- #
+-- # 2007-12-14 Combined registration of the Adobe-Japan1 collection and
+-- # of sequences in that collection.
+-- #
+-- # This file is part of the Unicode Ideographic Variation Database (IVD).
+-- # For more details on the IVD, see UTS #37:
+-- # http://www.unicode.org/reports/tr37/
+-- #
+-- # Copyright 2006-2017 Unicode, Inc.
+-- # For terms of use, see: http://www.unicode.org/terms_of_use.html
+-- #
+-- # EOF
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 2117341,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 2117276,
+ 2118934,
+ 2120195,
+ 2135615,
+ 2118848,
+ 2122011,
+ 2122536,
+ 2120182,
+ 2134050,
+ 2131061,
+ 2130716,
+ 2128464,
+ 2121898,
+ 2122721,
+ 2125349,
+ 2123245,
+ 2131046,
+ 2130598,
+ 2137077,
+ 2123923,
+ 2119463,
+ 2123169,
+ 2122353,
+ 2120603,
+ 2120144,
+ 2131579,
+ 2136308,
+ 2129250,
+ 2129342,
+ 2136974,
+ 2122262,
+ 2129055,
+ 2132151,
+ 2120585,
+ 2121397,
+ 2122505,
+ 2123415,
+ 2123848,
+ 2135495,
+ 2135949,
+ 2123599,
+ 2117349,
+ 2117386,
+ 2117453,
+ 2117533,
+ 2117705,
+ 2119410,
+ 2119991,
+ 2120148,
+ 2120193,
+ 2120713,
+ 2121951,
+ 2121999,
+ 2122096,
+ 2123283,
+ 2124037,
+ 2126010,
+ 2127183,
+ 2127216,
+ 2128379,
+ 2129325,
+ 2129391,
+ 2130115,
+ 2130958,
+ 2132067,
+ 2132738,
+ 2134101,
+ 2134138,
+ 2118459,
+ 2117269,
+ 2117285,
+ 2119647,
+ 2130098,
+ 2134209,
+ 2128111,
+ 2117120,
+ 2119921,
+ 2125474,
+ 2134072,
+ 2128434,
+ 2130728,
+ 2130571,
+ 2137135,
+ 2117953,
+ 2118512,
+ 2118845,
+ 2118881,
+ 2119392,
+ 2120187,
+ 2121493,
+ 2136306,
+ 2125291,
+ 2130148,
+ 2131245,
+ 2135650,
+ 2135664,
+ 2135712,
+ 2136059,
+ 2118667,
+ 2118643,
+ 2120583,
+ 2126031,
+ 4227005,
+ 2133954,
+ 2135784,
+ 2118511,
+ 2137436,
+ 2128570,
+ 2117137,
+ 2128019,
+ 2130428,
+ 2125350,
+ 2119192,
+ 2118916,
+ 2124573,
+ 2131226,
+ 2137147,
+ 2120165,
+ 2118569,
+ 2125158,
+ 2127068,
+ 2135439,
+ 2119234,
+ 2117265,
+ 2134091,
+ 2135794,
+ 2130767,
+ 2136332,
+ 2118625,
+ 2119094,
+ 2120496,
+ 2121585,
+ 2123296,
+ 2123507,
+ 2123780,
+ 2124856,
+ 2125043,
+ 2125097,
+ 2126939,
+ 2127560,
+ 2128462,
+ 2136116,
+ 2130673,
+ 2132059,
+ 2132576,
+ 2134765,
+ 2125234,
+ 2127275,
+ 2127562,
+ 2136517,
+ 2121894,
+ 4229889,
+ 2133386,
+ 2135474,
+ 2124174,
+ 2118573,
+ 2118022,
+ 2119442,
+ 2119728,
+ 2120004,
+ 2120628,
+ 2121462,
+ 2121768,
+ 2122665,
+ 2122740,
+ 4222143,
+ 2125588,
+ 2125966,
+ 2126100,
+ 2126169,
+ 2126293,
+ 2126655,
+ 2129409,
+ 2130550,
+ 2130641,
+ 2131351,
+ 2134112,
+ 2134619,
+ 2137371,
+ 2119785,
+ 2123196,
+ 2124890,
+ 2127141,
+ 2118137,
+ 2119982,
+ 2120037,
+ 2121600,
+ 2121692,
+ 2122428,
+ 2123258,
+ 2124330,
+ 2124583,
+ 2124724,
+ 2126731,
+ 2129857,
+ 2132310,
+ 2137388,
+ 2137358,
+ 2137796,
+ 2120865,
+ 2124950,
+ 2130811,
+ 2117892,
+ 2120779,
+ 2122166,
+ 2130374,
+ 2123894,
+ 2126433,
+ 2117209,
+ 2117626,
+ 2118520,
+ 2121833,
+ 2125353,
+ 2128463,
+ 2136051,
+ 2117131,
+ 2118422,
+ 2117358,
+ 2117461,
+ 2117437,
+ 2117537,
+ 2117491,
+ 2118304,
+ 2118639,
+ 2119177,
+ 2119951,
+ 2120385,
+ 2120630,
+ 2120673,
+ 2128337,
+ 2123399,
+ 2123676,
+ 2123702,
+ 2124620,
+ 2124979,
+ 2125931,
+ 2126786,
+ 4225421,
+ 2128318,
+ 2128444,
+ 2128775,
+ 2130609,
+ 2130651,
+ 2130692,
+ 2130807,
+ 2130927,
+ 2130899,
+ 2131814,
+ 2132658,
+ 2119209,
+ 2133160,
+ 2133990,
+ 2134094,
+ 2135838,
+ 2131594,
+ 2117572,
+ 2120936,
+ 2122257,
+ 2126425,
+ 2127163,
+ 2130405,
+ 4227773,
+ 2131710,
+ 2133184,
+ 2135749,
+ 2136339,
+ 2136533,
+ 2117323,
+ 2117402,
+ 2132451,
+ 2119390,
+ 2119754,
+ 2119882,
+ 2121467,
+ 2121707,
+ 2121770,
+ 4219028,
+ 2121826,
+ 2122192,
+ 2122258,
+ 2122448,
+ 2123065,
+ 2136897,
+ 2123366,
+ 2123952,
+ 4222327,
+ 2125936,
+ 2127180,
+ 2127494,
+ 2129269,
+ 2130597,
+ 2131961,
+ 2135435,
+ 2135694,
+ 2133149,
+ 2118129,
+ 2118334,
+ 2119958,
+ 2118835,
+ 2120627,
+ 2120982,
+ 2122088,
+ 2124162,
+ 2125231,
+ 2128013,
+ 2131147,
+ 2132055,
+ 2132594,
+ 2134951,
+ 2136760,
+ 2125164,
+ 2136488,
+ 2131673,
+ 2119587,
+ 2123775,
+ 2131662,
+ 2134542,
+ 2118275,
+ 2119303,
+ 2118660,
+ 2121427,
+ 2122465,
+ 2122937,
+ 2123836,
+ 2123832,
+ 2124731,
+ 2126706,
+ 2128058,
+ 2128491,
+ 2132378,
+ 4229586,
+ 2133355,
+ 2133763,
+ 2134253,
+ 2135459,
+ 2135700,
+ 2135913,
+ 2120550,
+ 2120883,
+ 2124157,
+ 2136141,
+ 2136142,
+ 2122651,
+ 2128672,
+ 2124331,
+ 2124415,
+ 2123958,
+ 2137101,
+ 2125663,
+ 4215410,
+ 2119069,
+ 2121840,
+ 2122476,
+ 2125115,
+ 2125319,
+ 2125521,
+ 2131035,
+ 2132240,
+ 2133828,
+ 2117140,
+ 2137145,
+ 2118646,
+ 2124059,
+ 2124346,
+ 2135940,
+ 2123818,
+ 2117980,
+ 2128579,
+ 2131122,
+ 2134492,
+ 2134924,
+ 2119259,
+ 2137384,
+ 2123810,
+ 2130693,
+ 2130993,
+ 2129061,
+ 2118152,
+ 2130629,
+ 2127078,
+ 2117246,
+ 2117507,
+ 2118048,
+ 2120658,
+ 2118154,
+ 2118360,
+ 2118375,
+ 2121211,
+ 2119066,
+ 2119722,
+ 2120166,
+ 2120588,
+ 2120600,
+ 2120667,
+ 2121330,
+ 2121337,
+ 2121891,
+ 2122015,
+ 2122083,
+ 2122174,
+ 2122715,
+ 2123106,
+ 2123729,
+ 2123859,
+ 2124026,
+ 2124606,
+ 2124627,
+ 2124887,
+ 2125602,
+ 2125719,
+ 2125637,
+ 2127024,
+ 2127128,
+ 2127587,
+ 2127627,
+ 2128639,
+ 2128801,
+ 2128929,
+ 2129385,
+ 2129718,
+ 2129904,
+ 2130077,
+ 2130534,
+ 2130846,
+ 2132403,
+ 2132684,
+ 2133163,
+ 2134148,
+ 2135121,
+ 2135443,
+ 2135441,
+ 2135458,
+ 2135653,
+ 2136019,
+ 2136360,
+ 2130456,
+ 2117176,
+ 2118699,
+ 2120888,
+ 2121164,
+ 2126761,
+ 2127436,
+ 2127676,
+ 2120873,
+ 2129899,
+ 2133259,
+ 2135745,
+ 2136081,
+ 2136148,
+ 2136152,
+ 2117377,
+ 2117390,
+ 2118513,
+ 2119068,
+ 2119272,
+ 2119674,
+ 2120007,
+ 2120457,
+ 2120644,
+ 2120848,
+ 2121228,
+ 2121342,
+ 2121676,
+ 2122734,
+ 2123578,
+ 2123223,
+ 4220386,
+ 2123551,
+ 2123979,
+ 2123972,
+ 2124383,
+ 2121264,
+ 2124741,
+ 2124823,
+ 2124925,
+ 2127231,
+ 4225352,
+ 2120547,
+ 2128384,
+ 2129152,
+ 2121661,
+ 2132367,
+ 2132504,
+ 2133172,
+ 2133367,
+ 2133708,
+ 2133789,
+ 2136290,
+ 2136590,
+ 2136892,
+ 2117248,
+ 2117757,
+ 2117888,
+ 2120083,
+ 2120604,
+ 2122287,
+ 2122368,
+ 2122988,
+ 2124602,
+ 2126496,
+ 2127249,
+ 2128199,
+ 2129833,
+ 2131963,
+ 2132668,
+ 2132848,
+ 2122668,
+ 2130890,
+ 2135968,
+ 2118665,
+ 2118659,
+ 2119083,
+ 2123860,
+ 2124376,
+ 2132592,
+ 2127911,
+ 2123637,
+ 2137805,
+ 2118516,
+ 2120610,
+ 2130202,
+ 2131536,
+ 2134022,
+ 2117144,
+ 2117189,
+ 2117319,
+ 2117393,
+ 2118602,
+ 2118712,
+ 2120622,
+ 2121491,
+ 2121765,
+ 2123089,
+ 2123581,
+ 2124866,
+ 2124914,
+ 2125027,
+ 2125944,
+ 2126851,
+ 2128502,
+ 2128558,
+ 2128648,
+ 2129178,
+ 2129150,
+ 2129254,
+ 2123239,
+ 2126427,
+ 2118587,
+ 2120773,
+ 2121192,
+ 2122450,
+ 2122464,
+ 2122521,
+ 2125344,
+ 2131546,
+ 2132529,
+ 2133469,
+ 2134776,
+ 2125569,
+ 2128294,
+ 2136922,
+ 2117288,
+ 2117291,
+ 2117292,
+ 2117531,
+ 2117536,
+ 2117841,
+ 2117959,
+ 2128630,
+ 2118001,
+ 2118134,
+ 2118484,
+ 2118433,
+ 4215679,
+ 2118635,
+ 2119084,
+ 2119811,
+ 2120929,
+ 2121527,
+ 2121546,
+ 2121775,
+ 2121808,
+ 2121837,
+ 2122527,
+ 2123097,
+ 2124363,
+ 2124993,
+ 2126530,
+ 2126573,
+ 2127855,
+ 2130168,
+ 2130181,
+ 2130440,
+ 2131278,
+ 2134263,
+ 2135009,
+ 2136063,
+ 2136407,
+ 2136666,
+ 2117360,
+ 2118109,
+ 2120749,
+ 2123393,
+ 2124141,
+ 2120768,
+ 2123506,
+ 2124149,
+ 2126729,
+ 2123856,
+ 2129025,
+ 2117829,
+ 2118372,
+ 2119495,
+ 2121214,
+ 2134822,
+ 2123172,
+ 2124579,
+ 2124605,
+ 2126900,
+ 2128257,
+ 2128317,
+ 2128715,
+ 2129354,
+ 2130617,
+ 2130892,
+ 2132095,
+ 2132319,
+ 4229945,
+ 2133969,
+ 2134481,
+ 2118687,
+ 2134656,
+ 2117213,
+ 2117686,
+ 2118629,
+ 2118458,
+ 2126551,
+ 2126742,
+ 2127849,
+ 2130662,
+ 2133679,
+ 2136518,
+ 2136520,
+ 2136530,
+ 2118007,
+ 2122010,
+ 2131550,
+ 2119088,
+ 2128506,
+ 2117750,
+ 2120659,
+ 2134087,
+ 2135685,
+ 2117170,
+ 4221659,
+ 2134503,
+ 2120785,
+ 2120776,
+ 2122648,
+ 2128543,
+ 2124947,
+ 2135924,
+ 2133857,
+ 2128554,
+ 2126218,
+ 2135688,
+ 2129026,
+ 2123799,
+ 2129520,
+ 2123857,
+ 2134892,
+ 2118386,
+ 2118683,
+ 2131371,
+ 2132499,
+ 2129828,
+ 2133709,
+ 2134241,
+ 2118502,
+ 2132104,
+ 2128193,
+ 2117570,
+ 2117822,
+ 2118161,
+ 2117956,
+ 2118995,
+ 2119469,
+ 2126826,
+ 2119563,
+ 2120017,
+ 2121570,
+ 2121604,
+ 2121845,
+ 2122102,
+ 2122087,
+ 2122153,
+ 2122674,
+ 2122810,
+ 2123116,
+ 2123375,
+ 2123842,
+ 2125331,
+ 2127206,
+ 2128445,
+ 2129147,
+ 2129228,
+ 2129305,
+ 2129483,
+ 2129771,
+ 2130702,
+ 2130762,
+ 2131661,
+ 2132488,
+ 2132579,
+ 2132838,
+ 2133757,
+ 2136090,
+ 2137487,
+ 2130616,
+ 2133966,
+ 2137064,
+ 2118279,
+ 2122271,
+ 2122883,
+ 2125760,
+ 2135705,
+ 2123841,
+ 2117777,
+ 2124576,
+ 2124922,
+ 2125652,
+ 2128500,
+ 2129232,
+ 2132032,
+ 2132515,
+ 2123528,
+ 2117366,
+ 2117689,
+ 2117670,
+ 2117733,
+ 2118012,
+ 2118200,
+ 2118243,
+ 2119079,
+ 2119439,
+ 2119685,
+ 2120396,
+ 2121466,
+ 2122162,
+ 2122232,
+ 2122483,
+ 2122610,
+ 2124060,
+ 2124329,
+ 2126461,
+ 2126508,
+ 2126638,
+ 2127892,
+ 2127983,
+ 2129273,
+ 2127628,
+ 2130089,
+ 2132363,
+ 2132761,
+ 2133218,
+ 2133714,
+ 2134115,
+ 2134901,
+ 2135674,
+ 2136149,
+ 2136595,
+ 2137720,
+ 2117955,
+ 2118559,
+ 2118579,
+ 2121339,
+ 2121510,
+ 2125339,
+ 2125456,
+ 2126724,
+ 2126846,
+ 2129219,
+ 2130487,
+ 2132480,
+ 2132730,
+ 2135632,
+ 2117198,
+ 2117643,
+ 2118628,
+ 2118780,
+ 2119418,
+ 2120145,
+ 2120548,
+ 2121201,
+ 2121387,
+ 2121511,
+ 2122296,
+ 2123077,
+ 2123695,
+ 2125398,
+ 2126544,
+ 2129098,
+ 2132148,
+ 2130081,
+ 2130145,
+ 2130928,
+ 2131534,
+ 2132615,
+ 2133480,
+ 2134583,
+ 2135751,
+ 2136167,
+ 2137875,
+ 2117268,
+ 2117266,
+ 2117389,
+ 2118472,
+ 2118729,
+ 2118718,
+ 2120239,
+ 2121612,
+ 2121633,
+ 2121887,
+ 2123943,
+ 2124430,
+ 2126938,
+ 2128001,
+ 2132638,
+ 2132644,
+ 2132855,
+ 2134416,
+ 2117214,
+ 2137033,
+ 2117284,
+ 2117500,
+ 2117551,
+ 2117657,
+ 2117654,
+ 2117961,
+ 2117996,
+ 2118303,
+ 2118329,
+ 2118398,
+ 2118554,
+ 2118627,
+ 2118673,
+ 2118670,
+ 2119049,
+ 2119505,
+ 2119586,
+ 2120061,
+ 2120532,
+ 2120541,
+ 2120591,
+ 2121189,
+ 2121191,
+ 2121207,
+ 2121336,
+ 2121347,
+ 2121370,
+ 2121399,
+ 2121496,
+ 2121810,
+ 2122060,
+ 2122391,
+ 2122456,
+ 2122663,
+ 2123067,
+ 2123266,
+ 2123331,
+ 2123508,
+ 2123629,
+ 2123809,
+ 2123927,
+ 2124235,
+ 2124895,
+ 2125098,
+ 2125161,
+ 2125359,
+ 2125469,
+ 2127154,
+ 2127495,
+ 2127980,
+ 2128447,
+ 2129120,
+ 2129157,
+ 2129176,
+ 2129246,
+ 2129329,
+ 2129941,
+ 2129923,
+ 2130095,
+ 2130097,
+ 2130260,
+ 2130319,
+ 2130474,
+ 2130770,
+ 2132044,
+ 2132065,
+ 2132763,
+ 2133154,
+ 2133244,
+ 2134218,
+ 2134389,
+ 2134641,
+ 2127935,
+ 2134780,
+ 2135460,
+ 2135629,
+ 2136069,
+ 2136473,
+ 2136792,
+ 2137403,
+ 2118235,
+ 2118315,
+ 2118647,
+ 2118664,
+ 2119893,
+ 2122487,
+ 2125792,
+ 2133098,
+ 2133855,
+ 2137785,
+ 2117963,
+ 2118203,
+ 2118730,
+ 2119421,
+ 4225600,
+ 2134391,
+ 2137440,
+ 2137810,
+ 2126660,
+ 2125577,
+ 2130288,
+ 2127121,
+ 2121725,
+ 2121946,
+ 2136744,
+ 2126555,
+ 2133948,
+ 2124644,
+ 2136067,
+ 2117322,
+ 2119408,
+ 2119524,
+ 2119870,
+ 2120282,
+ 2121832,
+ 2122183,
+ 2123279,
+ 2123270,
+ 2123833,
+ 2123953,
+ 2125303,
+ 2127317,
+ 2129210,
+ 2130542,
+ 2136898,
+ 2117275,
+ 2117456,
+ 2118601,
+ 2118918,
+ 2121071,
+ 2121190,
+ 2121198,
+ 2123771,
+ 2124953,
+ 2126963,
+ 2127874,
+ 2132560,
+ 2134934,
+ 2132191,
+ 2119504,
+ 2121383,
+ 2122539,
+ 2117813,
+ 2117804,
+ 4215181,
+ 2123520,
+ 2118857,
+ 2119774,
+ 2120123,
+ 2120624,
+ 2121577,
+ 2122317,
+ 2122657,
+ 2123837,
+ 2124659,
+ 2125320,
+ 2125949,
+ 2134471,
+ 2126464,
+ 2127893,
+ 2127910,
+ 2128237,
+ 2123150,
+ 2129200,
+ 2130908,
+ 2132161,
+ 2133769,
+ 2135707,
+ 2118244,
+ 2119464,
+ 2123600,
+ 2129770,
+ 2133153,
+ 2118068,
+ 2119490,
+ 2135594,
+ 2119738,
+ 2124170,
+ 2130100,
+ 2118834,
+ 2120974,
+ 2119676,
+ 2128021,
+ 2137594,
+ 2117468,
+ 2118218,
+ 2118795,
+ 2122814,
+ 2123304,
+ 2123540,
+ 2123765,
+ 2128516,
+ 2128726,
+ 2129186,
+ 2134831,
+ 2123868,
+ 2137005,
+ 2128697,
+ 2118425,
+ 2118026,
+ 2118199,
+ 2120671,
+ 2122486,
+ 2122926,
+ 2122982,
+ 2123565,
+ 4221882,
+ 2131369,
+ 2135761,
+ 2127504,
+ 2137046,
+ 2122572,
+ 2134790,
+ 2137003,
+ 2127551,
+ 2123346,
+ 2117129,
+ 2117784,
+ 2118594,
+ 2120817,
+ 2121960,
+ 2122898,
+ 2123107,
+ 2123871,
+ 2126310,
+ 2126794,
+ 2127139,
+ 2128791,
+ 2129538,
+ 2131605,
+ 2132867,
+ 2133211,
+ 2134392,
+ 2136336,
+ 2123180,
+ 2123435,
+ 2124683,
+ 2117333,
+ 2117332,
+ 2117434,
+ 2117503,
+ 2118202,
+ 2118648,
+ 2118642,
+ 2119139,
+ 2119387,
+ 2119915,
+ 2120139,
+ 2120137,
+ 2120191,
+ 2120528,
+ 2120781,
+ 2121218,
+ 2121259,
+ 2121687,
+ 2121757,
+ 2122503,
+ 2123055,
+ 2120540,
+ 2123183,
+ 2123197,
+ 2123240,
+ 2123677,
+ 2124642,
+ 2124667,
+ 2124815,
+ 2126661,
+ 2128201,
+ 2128321,
+ 2129144,
+ 2129177,
+ 2129195,
+ 2130082,
+ 2130178,
+ 2130419,
+ 2132374,
+ 2132574,
+ 2132585,
+ 2132582,
+ 2132620,
+ 2132718,
+ 2133191,
+ 2133212,
+ 2135756,
+ 2136316,
+ 2124655,
+ 2117259,
+ 2117436,
+ 2117517,
+ 2117968,
+ 2120535,
+ 2120698,
+ 2122056,
+ 2122497,
+ 2123330,
+ 2124577,
+ 2125515,
+ 2124987,
+ 2126398,
+ 2127037,
+ 2127316,
+ 2128065,
+ 4225338,
+ 2129932,
+ 2129971,
+ 2130410,
+ 2131092,
+ 2133918,
+ 2124880,
+ 2137727,
+ 2121487,
+ 2132824,
+ 2137387,
+ 2128634,
+ 2133752,
+ 2120589,
+ 2135787,
+ 2117123,
+ 2118641,
+ 2119671,
+ 2119985,
+ 2120393,
+ 2120612,
+ 2121865,
+ 2125439,
+ 2125574,
+ 2127294,
+ 2133226,
+ 2120607,
+ 2131200,
+ 2128864,
+ 2117746,
+ 2123764,
+ 2130589,
+ 2120801,
+ 2131274,
+ 2129438,
+ 2130446,
+ 2118041,
+ 2120708,
+ 2122600,
+ 2133350,
+ 2123164,
+ 4223342,
+ 2128190,
+ 2129175,
+ 2129925,
+ 2132765,
+ 2133706,
+ 2134126,
+ 2131655,
+ 2134186,
+ 2117663,
+ 4215546,
+ 2120762,
+ 2123603,
+ 2125948,
+ 4223541,
+ 2134348,
+ 2134472,
+ 2134827,
+ 2130661,
+ 2120642,
+ 2121521,
+ 2121977,
+ 2117179,
+ 2118614,
+ 2120584,
+ 2122315,
+ 2123569,
+ 2124682,
+ 2126569,
+ 2126816,
+ 2128430,
+ 2130283,
+ 2133411,
+ 2134354,
+ 2136470,
+ 2117906,
+ 2118615,
+ 2118762,
+ 2120703,
+ 2122632,
+ 2124345,
+ 2129324,
+ 2135808,
+ 2119386,
+ 2118606,
+ 4215912,
+ 2120599,
+ 2120753,
+ 2121182,
+ 2117614,
+ 2121985,
+ 2122494,
+ 2125106,
+ 2128320,
+ 2128331,
+ 2129218,
+ 2129485,
+ 2129874,
+ 2130413,
+ 2130463,
+ 2131088,
+ 2132038,
+ 2132338,
+ 2132880,
+ 2133620,
+ 2133807,
+ 2134065,
+ 2134347,
+ 2134380,
+ 2135750,
+ 2134428,
+ 2117312,
+ 2117455,
+ 2117957,
+ 2118465,
+ 2121619,
+ 2122254,
+ 2123732,
+ 2124865,
+ 2125323,
+ 2126691,
+ 2129446,
+ 2134477,
+ 2134659,
+ 2118612,
+ 2119961,
+ 2120639,
+ 2125265,
+ 4225373,
+ 2129454,
+ 2129051,
+ 2119806,
+ 2126239,
+ 2118138,
+ 2132051,
+ 2134000,
+ 2117578,
+ 2120955,
+ 2123301,
+ 2127788,
+ 2128611,
+ 2130460,
+ 2136575,
+ 2118086,
+ 2121642,
+ 2123244,
+ 2124143,
+ 2124681,
+ 2125299,
+ 2125462,
+ 2125668,
+ 2127614,
+ 2129172,
+ 2121185,
+ 2134133,
+ 2134407,
+ 2136070,
+ 2118118,
+ 2118173,
+ 2122304,
+ 2123409,
+ 2123481,
+ 4222490,
+ 2121398,
+ 2129362,
+ 4226930,
+ 2123512,
+ 2131375,
+ 2131447,
+ 4229880,
+ 2118313,
+ 2118617,
+ 2120051,
+ 2121359,
+ 2121616,
+ 2121813,
+ 2134756,
+ 2135652,
+ 2117815,
+ 2117919,
+ 2118365,
+ 2118432,
+ 2118471,
+ 2118636,
+ 2118888,
+ 2118982,
+ 2118961,
+ 2119191,
+ 2120040,
+ 2120126,
+ 2120252,
+ 2120629,
+ 4217862,
+ 2120719,
+ 2120721,
+ 2120730,
+ 2121348,
+ 2121354,
+ 2121440,
+ 2121584,
+ 2122367,
+ 2122372,
+ 2122459,
+ 2122636,
+ 2122615,
+ 2123271,
+ 2123276,
+ 2123309,
+ 2123382,
+ 2123646,
+ 2123938,
+ 2124319,
+ 2124341,
+ 2124988,
+ 2125192,
+ 2125321,
+ 2125400,
+ 2126140,
+ 2126118,
+ 2126183,
+ 2127303,
+ 2127617,
+ 2127965,
+ 2128129,
+ 4225381,
+ 2128368,
+ 2128608,
+ 2128657,
+ 2129063,
+ 2129209,
+ 2130070,
+ 2130902,
+ 2131083,
+ 2131273,
+ 2132061,
+ 2132211,
+ 2132511,
+ 2132540,
+ 2132564,
+ 2132595,
+ 2133089,
+ 2133214,
+ 2134436,
+ 2134630,
+ 2134910,
+ 2135064,
+ 2135708,
+ 2135960,
+ 2117130,
+ 2117128,
+ 2117150,
+ 2117207,
+ 2118039,
+ 2118256,
+ 4216782,
+ 2119732,
+ 2119884,
+ 2120482,
+ 2121272,
+ 2121925,
+ 2123006,
+ 2123617,
+ 2123606,
+ 2125124,
+ 2126518,
+ 2127219,
+ 2128483,
+ 2131128,
+ 2132850,
+ 2134456,
+ 2134816,
+ 2119217,
+ 2119668,
+ 2136318,
+ 2122477,
+ 2124045,
+ 2124694,
+ 2126317,
+ 2129492,
+ 2130039,
+ 2130546,
+ 2132454,
+ 2136287,
+ 2131797,
+ 2133937,
+ 2120763,
+ 2117432,
+ 2117601,
+ 2117557,
+ 2118919,
+ 2120224,
+ 2120669,
+ 2120681,
+ 2121667,
+ 2122062,
+ 2122543,
+ 2123184,
+ 2123339,
+ 2124014,
+ 2124187,
+ 2125176,
+ 2125297,
+ 2127155,
+ 2127289,
+ 2127647,
+ 4225374,
+ 2128358,
+ 2129203,
+ 2130403,
+ 2130607,
+ 2131370,
+ 2132394,
+ 2132538,
+ 2133675,
+ 2133915,
+ 2134066,
+ 2134493,
+ 2135815,
+ 2117306,
+ 2117313,
+ 2118147,
+ 2119797,
+ 2119916,
+ 2120715,
+ 2127130,
+ 2120765,
+ 2130254,
+ 2132490,
+ 2133957,
+ 2135651,
+ 2135917,
+ 2128677,
+ 2132687,
+ 2136072,
+ 2134370,
+ 2119411,
+ 2118568,
+ 2134039,
+ 2118713,
+ 2119554,
+ 2121253,
+ 2122664,
+ 2124852,
+ 2125962,
+ 2127713,
+ 2129035,
+ 2129888,
+ 2132080,
+ 2134082,
+ 2134356,
+ 2134800,
+ 2134808,
+ 2135695,
+ 2126942,
+ 2136772,
+ 2120967,
+ 2121065,
+ 2123120,
+ 2123682,
+ 2133416,
+ 2135771,
+ 2122606,
+ 2123593,
+ 2124057,
+ 2130885,
+ 2136087,
+ 2135744,
+ 2132222,
+ 2125700,
+ 2122874,
+ 2120696,
+ 2117142,
+ 2125868,
+ 2127197,
+ 2123311,
+ 2118084,
+ 2118198,
+ 2118370,
+ 2120147,
+ 2121601,
+ 2121767,
+ 2122256,
+ 2123071,
+ 2123124,
+ 2123295,
+ 4220532,
+ 2124018,
+ 2123798,
+ 2124643,
+ 2125317,
+ 2126450,
+ 2127135,
+ 2127579,
+ 4226238,
+ 2130006,
+ 2119920,
+ 2132221,
+ 2132351,
+ 2132640,
+ 2132627,
+ 2132683,
+ 2134045,
+ 2134418,
+ 2135890,
+ 2135897,
+ 2123145,
+ 2128398,
+ 2130182,
+ 2135739,
+ 2121261,
+ 2121948,
+ 2122266,
+ 2123173,
+ 2123284,
+ 2123664,
+ 2127859,
+ 2128461,
+ 2128973,
+ 2129470,
+ 2130186,
+ 2133164,
+ 2133348,
+ 2133473,
+ 2133599,
+ 2128041,
+ 2118151,
+ 2122457,
+ 2122661,
+ 2122818,
+ 2122392,
+ 2132525,
+ 2128515,
+ 2128832,
+ 2132652,
+ 2135786,
+ 2129270,
+ 2130444,
+ 2131785,
+ 2117337,
+ 2117960,
+ 2118467,
+ 2118496,
+ 2120611,
+ 2120706,
+ 2120726,
+ 2121181,
+ 2122278,
+ 2122311,
+ 2122928,
+ 2123795,
+ 2123828,
+ 2125001,
+ 2125125,
+ 2125079,
+ 2123731,
+ 2125660,
+ 2126158,
+ 2126205,
+ 2123211,
+ 2128511,
+ 2128813,
+ 2129370,
+ 2129482,
+ 2129832,
+ 2130298,
+ 2130459,
+ 2130489,
+ 2131366,
+ 2132590,
+ 2133198,
+ 2133493,
+ 2134136,
+ 2134135,
+ 2134701,
+ 2134673,
+ 2135427,
+ 2137006,
+ 2118221,
+ 2119044,
+ 2125624,
+ 2126134,
+ 2117992,
+ 2128261,
+ 2129493,
+ 2130355,
+ 2129102,
+ 2119244,
+ 2119761,
+ 2120872,
+ 2122666,
+ 2123518,
+ 2123517,
+ 2124122,
+ 2126553,
+ 2127247,
+ 2127246,
+ 2128142,
+ 2128214,
+ 2128351,
+ 2129047,
+ 2129184,
+ 2129220,
+ 2131463,
+ 2132532,
+ 2135611,
+ 2134113,
+ 2137888,
+ 2117863,
+ 2118261,
+ 2118604,
+ 2118626,
+ 2117641,
+ 2119082,
+ 2119918,
+ 2120015,
+ 2126397,
+ 2120587,
+ 2120804,
+ 2118429,
+ 2121955,
+ 2121971,
+ 2122588,
+ 2122627,
+ 2122559,
+ 2122683,
+ 2122957,
+ 2123241,
+ 2123513,
+ 2121187,
+ 2124237,
+ 2124285,
+ 2125589,
+ 2126309,
+ 2117257,
+ 2127337,
+ 2127608,
+ 2128531,
+ 2129119,
+ 2129359,
+ 2129308,
+ 2130017,
+ 2130761,
+ 2130776,
+ 2131052,
+ 2131132,
+ 2131451,
+ 2132165,
+ 2133360,
+ 2134017,
+ 2134125,
+ 2134935,
+ 2135836,
+ 2136594,
+ 2117839,
+ 2119831,
+ 4219278,
+ 2130387,
+ 2131253,
+ 2133256,
+ 2134048,
+ 2117571,
+ 2117748,
+ 2118215,
+ 2118515,
+ 2121839,
+ 2122569,
+ 2123615,
+ 2125356,
+ 2133427,
+ 2134047,
+ 2117591,
+ 2120798,
+ 2133194,
+ 2123215,
+ 2129306,
+ 2118482,
+ 2132118,
+ 2118006,
+ 2122691,
+ 2120536,
+ 2120555,
+ 2120714,
+ 2122765,
+ 2123601,
+ 2134108,
+ 2117334,
+ 2119962,
+ 2119978,
+ 2124912,
+ 2132561,
+ 2118974,
+ 2119701,
+ 2120101,
+ 2121968,
+ 2122323,
+ 2123713,
+ 2130485,
+ 2124117,
+ 2135616,
+ 2136516,
+ 2136616,
+ 2117459,
+ 2119686,
+ 2120702,
+ 2129936,
+ 2120881,
+ 2121263,
+ 2121605,
+ 2121760,
+ 2122059,
+ 2122292,
+ 2123519,
+ 2125040,
+ 2125534,
+ 2130126,
+ 2130303,
+ 2130644,
+ 2132107,
+ 2133176,
+ 2134016,
+ 2134062,
+ 2135690,
+ 2137819,
+ 2137051,
+ 2117347,
+ 2118640,
+ 2119975,
+ 2128684,
+ 2134413,
+ 2136140,
+ 2137593,
+ 2125533,
+ 2125863,
+ 2118483,
+ 2118980,
+ 2120581,
+ 2122328,
+ 2122398,
+ 2122451,
+ 2124962,
+ 2125807,
+ 4224034,
+ 2132503,
+ 2135096,
+ 2125761,
+ 2132734,
+ 2130744,
+ 2118119,
+ 2131704,
+ 2118634,
+ 2118633,
+ 2117446,
+ 2134100,
+ 2133936,
+ 2120042,
+ 2130225,
+ 4218365,
+ 2128618,
+ 2133951,
+ 2123994,
+ 2133047,
+ 2126584,
+ 2137160,
+ 2124349,
+ 2132656,
+ 2117177,
+ 2118488,
+ 4216326,
+ 2119526,
+ 2122437,
+ 2122658,
+ 2123238,
+ 2124622,
+ 2125281,
+ 2125403,
+ 2125997,
+ 2127853,
+ 2128623,
+ 2128810,
+ 2129339,
+ 2129981,
+ 2130118,
+ 2131659,
+ 2132629,
+ 2134875,
+ 2119395,
+ 2119879,
+ 2121534,
+ 2123181,
+ 2123414,
+ 2124416,
+ 2124725,
+ 2127159,
+ 2132679,
+ 2117668,
+ 2127845,
+ 2119472,
+ 2121499,
+ 2121829,
+ 2123386,
+ 2124896,
+ 2127348,
+ 2128410,
+ 2129774,
+ 2130420,
+ 2131736,
+ 2134085,
+ 2136499,
+ 2128841,
+ 2127196,
+ 2128633,
+ 2128721,
+ 2131140,
+ 2134032,
+ 2128361,
+ 2128530,
+ 2130742,
+ 2120417,
+ 2127680,
+ 2117165,
+ 2117362,
+ 2120601,
+ 2121696,
+ 2122429,
+ 2123324,
+ 2123761,
+ 2125032,
+ 2131563,
+ 2132087,
+ 2132539,
+ 2134350,
+ 2134771,
+ 2136528,
+ 2124311,
+ 2125862,
+ 4223786,
+ 2130663,
+ 2131031,
+ 2133167,
+ 2117121,
+ 2117958,
+ 2118091,
+ 2119051,
+ 2120693,
+ 2121238,
+ 2121267,
+ 2121345,
+ 2121492,
+ 2121525,
+ 2121579,
+ 2121652,
+ 2122226,
+ 2122513,
+ 2123426,
+ 2123549,
+ 4222830,
+ 2126418,
+ 2127162,
+ 2127674,
+ 2130036,
+ 2130233,
+ 2130296,
+ 2131830,
+ 2132671,
+ 2132700,
+ 2133381,
+ 2133491,
+ 2134682,
+ 2135415,
+ 2136066,
+ 2137317,
+ 2118341,
+ 2122583,
+ 2127604,
+ 2123541,
+ 2124936,
+ 2126797,
+ 2133187,
+ 2134958,
+ 2135667,
+ 2125093,
+ 2119836,
+ 2124046,
+ 2124236,
+ 2134013,
+ 2134938,
+ 2127323,
+ 2134042,
+ 2119770,
+ 2123778,
+ 2122676,
+ 2124283,
+ 2117443,
+ 2125612,
+ 2123736,
+ 2133947,
+ 2131238,
+ 2129332,
+ 2134868,
+ 2124095,
+ 2125680,
+ 2119530,
+ 2119927,
+ 2120492,
+ 2129196,
+ 2126378,
+ 2118666,
+ 2134499,
+ 4234676,
+ 2117293,
+ 2117454,
+ 2117724,
+ 2117749,
+ 2118211,
+ 2133150,
+ 2118728,
+ 2119716,
+ 2120602,
+ 2121245,
+ 2121365,
+ 2121389,
+ 2121463,
+ 2121503,
+ 2121868,
+ 2122421,
+ 2122554,
+ 2122704,
+ 2123951,
+ 2124864,
+ 2128007,
+ 2128270,
+ 2128395,
+ 2129376,
+ 2130503,
+ 2132482,
+ 2132710,
+ 2133572,
+ 2134035,
+ 2134200,
+ 2134317,
+ 2134488,
+ 2137870,
+ 2125029,
+ 2122840,
+ 2122978,
+ 2123125,
+ 2125556,
+ 2127492,
+ 2128667,
+ 2134121,
+ 2134993,
+ 2125498,
+ 2118898,
+ 2121657,
+ 2122916,
+ 2133837,
+ 2133997,
+ 2134596,
+ 2118008,
+ 2119787,
+ 2119977,
+ 2120789,
+ 2121367,
+ 2125307,
+ 2129551,
+ 2127132,
+ 2133180,
+ 2133730,
+ 2136155,
+ 2126009,
+ 2117405,
+ 2124735,
+ 2125745,
+ 2127152,
+ 2135803,
+ 2117966,
+ 2118672,
+ 2119733,
+ 2119767,
+ 2120108,
+ 2120800,
+ 2121618,
+ 2123159,
+ 2123612,
+ 2125345,
+ 2127483,
+ 2130911,
+ 2133229,
+ 2134036,
+ 4231421,
+ 2134861,
+ 2127909,
+ 2127930,
+ 2118314,
+ 2121382,
+ 2119455,
+ 2120052,
+ 2121746,
+ 2117650,
+ 2117978,
+ 4215212,
+ 2118093,
+ 2118144,
+ 2118928,
+ 2119764,
+ 2119768,
+ 2120023,
+ 2120597,
+ 2120950,
+ 2121099,
+ 2121916,
+ 2122389,
+ 2122797,
+ 2123633,
+ 2123843,
+ 2123964,
+ 2123999,
+ 2127575,
+ 2125272,
+ 2125423,
+ 2125211,
+ 2125935,
+ 2126280,
+ 2121555,
+ 2127320,
+ 2128247,
+ 2128713,
+ 2128724,
+ 2128722,
+ 4226262,
+ 2129265,
+ 2118192,
+ 2131043,
+ 2131305,
+ 2131428,
+ 2132494,
+ 2132740,
+ 2133062,
+ 2133519,
+ 2134019,
+ 2134031,
+ 2135065,
+ 2135670,
+ 2136109,
+ 2136624,
+ 2135512,
+ 2117837,
+ 2118357,
+ 2118668,
+ 2119682,
+ 2120718,
+ 2122151,
+ 2122910,
+ 2125086,
+ 2127795,
+ 2128613,
+ 2130164,
+ 2130948,
+ 2134099,
+ 2134661,
+ 2120928,
+ 2137351,
+ 2118463,
+ 2121623,
+ 2121651,
+ 2125212,
+ 2126457,
+ 2127715,
+ 2128319,
+ 2128868,
+ 2124754,
+ 2126572,
+ 2132653,
+ 2123779,
+ 2124385,
+ 2118136,
+ 2128513,
+ 2124084,
+ 2120778,
+ 2137334,
+ 2130667,
+ 2120645,
+ 2134345,
+ 2125854,
+ 2119288,
+ 2120815,
+ 2121927,
+ 2123110,
+ 2124940,
+ 2133082,
+ 2134081,
+ 2136083,
+ 2118737,
+ 2123463,
+ 2134541,
+ 2120008,
+ 2134179,
+ 2118021,
+ 2117197,
+ 2118122,
+ 2131353,
+ 2132750,
+ 2125912,
+ 2122618,
+ 2134859,
+ 2124130,
+ 2136500,
+ 2129412,
+ 2127223,
+ 2118487,
+ 2124128,
+ 2133727,
+ 4232931,
+ 2124893,
+ 2117260,
+ 2120764,
+ 2121488,
+ 2133993,
+ 2118402,
+ 2133201,
+ 2130057,
+ 2131577,
+ 2121471,
+ 2123237,
+ 2117235,
+ 2117989,
+ 2120066,
+ 2120767,
+ 2136046,
+ 2117371,
+ 2120074,
+ 2121677,
+ 2132621,
+ 2125793,
+ 2128304,
+ 2128226,
+ 4217831,
+ 2131057,
+ 2126635,
+ 2126257,
+ 2121332,
+ 2121717,
+ 2122619,
+ 2122906,
+ 2126275,
+ 2129048,
+ 2117187,
+ 2121468,
+ 2117195,
+ 2119644,
+ 2119330,
+ 2121897,
+ 2125763,
+ 2129165,
+ 2130173,
+ 2130227,
+ 2130367,
+ 2133938,
+ 2132375,
+ 2131620,
+ 2121204,
+ 2122378,
+ 2122925,
+ 2132359,
+ 2123639,
+ 2125026,
+ 2125118,
+ 2126902,
+ 2127924,
+ 2120262,
+ 2129781,
+ 2130605,
+ 2136492,
+ 2117619,
+ 2121411,
+ 2122461,
+ 2122642,
+ 2123095,
+ 2123631,
+ 2127555,
+ 2126412,
+ 2130124,
+ 2130106,
+ 2133801,
+ 2134349,
+ 2117645,
+ 2119673,
+ 2120338,
+ 4221061,
+ 2124147,
+ 2126180,
+ 2126589,
+ 2133175,
+ 2119922,
+ 2133216,
+ 2135658,
+ 2134041,
+ 2131839,
+ 2128356,
+ 2127847,
+ 2130985,
+ 2117423,
+ 2118245,
+ 2118490,
+ 2122445,
+ 2123727,
+ 2125002,
+ 2127485,
+ 2128788,
+ 2129045,
+ 2130486,
+ 2131332,
+ 2133995,
+ 2123485,
+ 2125600,
+ 2126342,
+ 2129435,
+ 2130859,
+ 2136513,
+ 2137766,
+ 2118141,
+ 2128817,
+ 2127986,
+ 2128824,
+ 2130055,
+ 2128712,
+ 2124520,
+ 2121313,
+ 2130060,
+ 2127185,
+ 2127200,
+ 2117995,
+ 2134626,
+ 2125452,
+ 2127482,
+ 2134423,
+ 2136810,
+ 2117392,
+ 2129776,
+ 2122396,
+ 2128719,
+ 2135461,
+ 2137321,
+ 2119290,
+ 2119769,
+ 2131684,
+ 2135740,
+ 2117428,
+ 2118180,
+ 2118474,
+ 2118605,
+ 2118619,
+ 2121222,
+ 2122796,
+ 2123153,
+ 2123647,
+ 2124862,
+ 2124878,
+ 2126408,
+ 2126511,
+ 2126829,
+ 2127188,
+ 2129473,
+ 2130476,
+ 2131433,
+ 2133161,
+ 2128836,
+ 2134470,
+ 2126185,
+ 2136082,
+ 4233455,
+ 2122557,
+ 2123369,
+ 2127210,
+ 2127588,
+ 2128080,
+ 2131267,
+ 2131694,
+ 2118442,
+ 4215633,
+ 2118694,
+ 2120067,
+ 2121351,
+ 2121596,
+ 2121906,
+ 2122313,
+ 2122361,
+ 2122411,
+ 2123152,
+ 2124756,
+ 2125004,
+ 2127282,
+ 2127534,
+ 4225169,
+ 2128344,
+ 2129355,
+ 2129783,
+ 2130085,
+ 2132139,
+ 2132665,
+ 2133179,
+ 2134143,
+ 2135902,
+ 2136283,
+ 2124299,
+ 2128952,
+ 2117785,
+ 2120766,
+ 2121646,
+ 2123655,
+ 2124760,
+ 2126901,
+ 2127625,
+ 2129806,
+ 2137915,
+ 2123722,
+ 2128407,
+ 2118457,
+ 2127243,
+ 2136813,
+ 2121574,
+ 2130333,
+ 2130929,
+ 2130072,
+ 2121532,
+ 2121669,
+ 2127202,
+ 2128710,
+ 2134076,
+ 2123879,
+ 2120171,
+ 2120347,
+ 2129168,
+ 2127486,
+ 2132780,
+ 2117621,
+ 2121578,
+ 2124313,
+ 2124855,
+ 2125570,
+ 2127074,
+ 2128232,
+ 2132072,
+ 2132565,
+ 2133113,
+ 2121439,
+ 2122703,
+ 2127301,
+ 2128338,
+ 2130647,
+ 2134824,
+ 2134770,
+ 2131100,
+ 2131693,
+ 2137133,
+ 2118849,
+ 2121580,
+ 2123148,
+ 2125148,
+ 2125845,
+ 2133159,
+ 4230355,
+ 4233275,
+ 4220239,
+ 2127094,
+ 2117133,
+ 2117336,
+ 2119648,
+ 2119979,
+ 2120294,
+ 2120652,
+ 2118056,
+ 2121219,
+ 2121372,
+ 2121750,
+ 2122358,
+ 2123127,
+ 2123175,
+ 2123374,
+ 2125166,
+ 2126390,
+ 2128678,
+ 2130256,
+ 2130330,
+ 2130585,
+ 2132828,
+ 2133152,
+ 2133222,
+ 2133364,
+ 2135580,
+ 2135620,
+ 2117550,
+ 2122923,
+ 2124646,
+ 2130462,
+ 2131041,
+ 2131306,
+ 2134248,
+ 2120705,
+ 2124115,
+ 2136232,
+ 2131066,
+ 2131287,
+ 2117391,
+ 2118255,
+ 2121641,
+ 2121285,
+ 2123533,
+ 2128271,
+ 2130297,
+ 2132231,
+ 2132358,
+ 2125301,
+ 2121495,
+ 2122325,
+ 2124984,
+ 2117327,
+ 2126441,
+ 2136978,
+ 2118150,
+ 2118715,
+ 2119284,
+ 2119859,
+ 2122148,
+ 2122350,
+ 2126106,
+ 2120046,
+ 2129033,
+ 2129118,
+ 2129179,
+ 2135792,
+ 2123143,
+ 2130014,
+ 2117145,
+ 2117493,
+ 2118005,
+ 2119744,
+ 2121315,
+ 2121331,
+ 2121482,
+ 2123716,
+ 2117158,
+ 2131261,
+ 2135433,
+ 2135643,
+ 2129011,
+ 2136065,
+ 2117883,
+ 2119873,
+ 2127446,
+ 2128039,
+ 2118181,
+ 2127781,
+ 2131217,
+ 2128774,
+ 2117711,
+ 2119945,
+ 2126407,
+ 2128839,
+ 2129384,
+ 2133946,
+ 2133972,
+ 2134093,
+ 2117567,
+ 4215497,
+ 2120233,
+ 2121473,
+ 2135981,
+ 2117597,
+ 2130455,
+ 2134762,
+ 2119427,
+ 2122581,
+ 2124649,
+ 2127147,
+ 2132188,
+ 2133780,
+ 2128450,
+ 2118367,
+ 2119827,
+ 2122069,
+ 2122250,
+ 2123438,
+ 2124749,
+ 2128959,
+ 2130921,
+ 2117667,
+ 2117624,
+ 2118405,
+ 2118726,
+ 2119729,
+ 2120009,
+ 2120605,
+ 2120944,
+ 2120943,
+ 2121001,
+ 2121366,
+ 2122417,
+ 2122599,
+ 2123070,
+ 2123193,
+ 2123531,
+ 2125013,
+ 2125025,
+ 2126073,
+ 2127922,
+ 2129451,
+ 2130142,
+ 2130611,
+ 2130956,
+ 2131180,
+ 2131714,
+ 2132242,
+ 2132522,
+ 2133066,
+ 2134182,
+ 2134738,
+ 2136317,
+ 2137331,
+ 2137452,
+ 2117199,
+ 2117281,
+ 2117773,
+ 2118230,
+ 2119498,
+ 2120104,
+ 2121277,
+ 2121688,
+ 2121689,
+ 2122303,
+ 2123444,
+ 2123547,
+ 2123728,
+ 2123986,
+ 2118034,
+ 2129185,
+ 2130090,
+ 2130344,
+ 2132736,
+ 2133132,
+ 2133183,
+ 2134654,
+ 2135602,
+ 2118688,
+ 2136108,
+ 2118423,
+ 2117845,
+ 2118492,
+ 4217000,
+ 2122930,
+ 2123572,
+ 2126439,
+ 2127718,
+ 2128454,
+ 2134502,
+ 2118339,
+ 2124961,
+ 2124678,
+ 2119680,
+ 2121292,
+ 2120020,
+ 2123564,
+ 2129915,
+ 2118113,
+ 2127558,
+ 2122857,
+ 2128104,
+ 2136916,
+ 2137787,
+ 2119627,
+ 2120121,
+ 2123303,
+ 2123674,
+ 2124750,
+ 2118889,
+ 2124249,
+ 2121301,
+ 2130332,
+ 2123669,
+ 2137002,
+ 2123774,
+ 2137170,
+ 2123869,
+ 2117286,
+ 2117603,
+ 2118600,
+ 2122425,
+ 2123563,
+ 2124971,
+ 2133956,
+ 2117549,
+ 2129517,
+ 2137791,
+ 2117127,
+ 2122082,
+ 2125440,
+ 2125611,
+ 2131219,
+ 2118771,
+ 2123562,
+ 2136901,
+ 2121203,
+ 2128789,
+ 2120876,
+ 2120646,
+ 2131740,
+ 2125386,
+ 2131153,
+ 2128404,
+ 2130184,
+ 2120089,
+ 2129037,
+ 2124817,
+ 2127648,
+ 2118361,
+ 2119970,
+ 2126113,
+ 2126431,
+ 2127835,
+ 2135847,
+ 2137441,
+ 2124043,
+ 2120319,
+ 2120216,
+ 2118053,
+ 2118669,
+ 2118781,
+ 2123278,
+ 2127583,
+ 2134007,
+ 2134680,
+ 2137332,
+ 2120170,
+ 2126429,
+ 2125509,
+ 2117965,
+ 2123977,
+ 2129343,
+ 2129388,
+ 2135906,
+ 2137786,
+ 2122872,
+ 2124321,
+ 2130690,
+ 2120068,
+ 2120543,
+ 2124763,
+ 2126619,
+ 2127602,
+ 2129330,
+ 2129943,
+ 2131097,
+ 2117938,
+ 2123560,
+ 2137817,
+ 2127598,
+ 2123618,
+ 2118399,
+ 2136325,
+ 2120740,
+ 2122299,
+ 2129022,
+ 2133168,
+ 2118991,
+ 2121910,
+ 2129163,
+ 2135424,
+ 2118401,
+ 2117215,
+ 2118070,
+ 2119964,
+ 2126394,
+ 2129974,
+ 2134478,
+ 2121509,
+ 2127842,
+ 2118532,
+ 2121593,
+ 2129156,
+ 2131372,
+ 2132531,
+ 2133645,
+ 2135894,
+ 2123763,
+ 2131374,
+ 2135123,
+ 2121993,
+ 2121992,
+ 2124985,
+ 2127442,
+ 4229869,
+ 2133816,
+ 2118959,
+ 2117457,
+ 2117930,
+ 2118343,
+ 2118603,
+ 2120613,
+ 2121341,
+ 2121888,
+ 2122114,
+ 2122710,
+ 2123529,
+ 2123738,
+ 2125415,
+ 2125196,
+ 2126646,
+ 2126647,
+ 2127153,
+ 4225360,
+ 2132181,
+ 2132632,
+ 2134090,
+ 2134161,
+ 2134261,
+ 2135748,
+ 2131853,
+ 2119957,
+ 2117256,
+ 2117465,
+ 2117134,
+ 2132617,
+ 2133823,
+ 2136080,
+ 2117805,
+ 2121340,
+ 2120086,
+ 2120633,
+ 2121400,
+ 2122714,
+ 2122746,
+ 2122945,
+ 2123484,
+ 2124106,
+ 2124248,
+ 2125067,
+ 2125494,
+ 2126228,
+ 2127144,
+ 2128559,
+ 4226954,
+ 2129920,
+ 2131017,
+ 2131145,
+ 2132353,
+ 2132769,
+ 2133514,
+ 2134117,
+ 2135677,
+ 2136330,
+ 2122110,
+ 2122385,
+ 2124594,
+ 2124931,
+ 2125172,
+ 2129868,
+ 2129916,
+ 2125248,
+ 2129797,
+ 2131898,
+ 2132216,
+ 2123621,
+ 2130865,
+ 2136124,
+ 2135799,
+ 2125083,
+ 2129249,
+ 2131005,
+ 2134378,
+ 2117233,
+ 2118517,
+ 2121040,
+ 4221700,
+ 2125803,
+ 2131405,
+ 2131501,
+ 2132391,
+ 2118185,
+ 2118671,
+ 2120805,
+ 2123598,
+ 2123944,
+ 2126854,
+ 2126979,
+ 2127330,
+ 2132175,
+ 2132193,
+ 2134476,
+ 2135778,
+ 2135672,
+ 2121611,
+ 2126727,
+ 2128587,
+ 2131022,
+ 2122656,
+ 2127205,
+ 2118281,
+ 2125121,
+ 2125468,
+ 2126857,
+ 2127193,
+ 2127979,
+ 2129042,
+ 2135686,
+ 2128604,
+ 2137997,
+ 2117558,
+ 2122094,
+ 2123205,
+ 4228700,
+ 2117254,
+ 2117294,
+ 2117850,
+ 2117153,
+ 2118092,
+ 2120686,
+ 2123161,
+ 2123905,
+ 2125244,
+ 2126623,
+ 2127426,
+ 2127789,
+ 2128412,
+ 2129127,
+ 2130543,
+ 2132690,
+ 2134140,
+ 2134479,
+ 2135669,
+ 2136088,
+ 2118299,
+ 2129361,
+ 2117675,
+ 2118552,
+ 2123671,
+ 2125259,
+ 2126288,
+ 2126899,
+ 2130408,
+ 2133802,
+ 2135715,
+ 2137175,
+ 2137759,
+ 2126944,
+ 2119745,
+ 2125209,
+ 2129199,
+ 4233310,
+ 2117348,
+ 2117430,
+ 2117515,
+ 2118071,
+ 2118321,
+ 2121146,
+ 2121756,
+ 2126770,
+ 2128188,
+ 2130643,
+ 2134580,
+ 2135735,
+ 2135798,
+ 2135818,
+ 2137751,
+ 2137954,
+ 2123430,
+ 2124660,
+ 2118167,
+ 2118307,
+ 2126024,
+ 2132162,
+ 4218569,
+ 2121803,
+ 2122128,
+ 4222755,
+ 4223305,
+ 2128958,
+ 4226548,
+ 2130031,
+ 4228334,
+ 4231203,
+ 2134828,
+ 2118722,
+ 2136943,
+ 2124499,
+ 2125961,
+ 2133186,
+ 2133487,
+ 2135858,
+ 2118324,
+ 2120257,
+ 2121418,
+ 2121476,
+ 4220695,
+ 2124156,
+ 2124180,
+ 2125162,
+ 2125583,
+ 2126434,
+ 2126588,
+ 2128877,
+ 2129921,
+ 2130046,
+ 2131787,
+ 2134222,
+ 2117997,
+ 2137747,
+ 2128260,
+ 2130059,
+ 2134834,
+ 2132694,
+ 2117677,
+ 2118796,
+ 2132593,
+ 2124650,
+ 2133188,
+ 2130183,
+ 2121937,
+ 2123680,
+ 2137586,
+ 2117273,
+ 2117272,
+ 2137104,
+ 2132587,
+ 2131393,
+ 2131304,
+ 2124032,
+ 2125438,
+ 2128023,
+ 2130261,
+ 2121484,
+ 2117136,
+ 2117141,
+ 2117162,
+ 2117169,
+ 2117174,
+ 2117180,
+ 2117183,
+ 2117186,
+ 2117206,
+ 2117208,
+ 2117250,
+ 2117253,
+ 2133099,
+ 2117258,
+ 2130450,
+ 2121485,
+ 2117262,
+ 2117278,
+ 2117279,
+ 2117280,
+ 2117282,
+ 2117296,
+ 2117299,
+ 2117302,
+ 2117326,
+ 2117325,
+ 2117316,
+ 2117318,
+ 2117314,
+ 2117335,
+ 2117342,
+ 2117357,
+ 2117343,
+ 2117367,
+ 2117385,
+ 2117466,
+ 2117424,
+ 2117467,
+ 2117469,
+ 2117463,
+ 2117447,
+ 2117494,
+ 2117512,
+ 2117519,
+ 2117528,
+ 2117499,
+ 2117481,
+ 2117488,
+ 2117521,
+ 2117487,
+ 2117510,
+ 2117526,
+ 2117912,
+ 2117588,
+ 2117599,
+ 2117582,
+ 2117592,
+ 2117595,
+ 2117585,
+ 2117594,
+ 2117584,
+ 2117604,
+ 2117605,
+ 2117658,
+ 2117672,
+ 2117652,
+ 2117674,
+ 2117669,
+ 2117637,
+ 2117404,
+ 2117622,
+ 2117665,
+ 2117673,
+ 2117676,
+ 2117630,
+ 2117615,
+ 2117649,
+ 2117638,
+ 2117699,
+ 2117703,
+ 2123523,
+ 2117717,
+ 2117712,
+ 2117704,
+ 2117722,
+ 2117718,
+ 2117740,
+ 2117752,
+ 2117760,
+ 2117786,
+ 2117765,
+ 2117812,
+ 2117810,
+ 2117833,
+ 2117834,
+ 2117811,
+ 2117826,
+ 2117846,
+ 2117854,
+ 2117861,
+ 2117869,
+ 2117859,
+ 2117870,
+ 2117881,
+ 2117877,
+ 2117897,
+ 2117889,
+ 2117890,
+ 2117910,
+ 2117909,
+ 2117908,
+ 2117914,
+ 2117921,
+ 2117946,
+ 2117943,
+ 2117948,
+ 2117947,
+ 2117951,
+ 2117952,
+ 2117970,
+ 2117964,
+ 4215124,
+ 2117986,
+ 2128632,
+ 2117993,
+ 2117994,
+ 2117998,
+ 2118016,
+ 2118018,
+ 2119384,
+ 2118028,
+ 2118025,
+ 2118031,
+ 2118033,
+ 2118035,
+ 4215189,
+ 2118038,
+ 2118052,
+ 2118054,
+ 2118050,
+ 2118057,
+ 2118058,
+ 2118059,
+ 2118067,
+ 2118065,
+ 2118066,
+ 2118064,
+ 2118069,
+ 2118077,
+ 2118085,
+ 2118089,
+ 2118107,
+ 2118112,
+ 2131541,
+ 2118121,
+ 2118125,
+ 2118128,
+ 2118133,
+ 2118142,
+ 2118148,
+ 2118155,
+ 2118164,
+ 2118158,
+ 2118183,
+ 2118186,
+ 2118190,
+ 2118195,
+ 2118201,
+ 2118223,
+ 2118212,
+ 2118219,
+ 2118220,
+ 2118238,
+ 2118228,
+ 2118250,
+ 2118260,
+ 2118249,
+ 2118259,
+ 2118271,
+ 2118269,
+ 2118285,
+ 2118292,
+ 2118290,
+ 2118257,
+ 2118280,
+ 2118289,
+ 2133928,
+ 2133927,
+ 2118316,
+ 2118317,
+ 2118332,
+ 2118325,
+ 2118337,
+ 2118349,
+ 2118359,
+ 2118366,
+ 2118371,
+ 2118374,
+ 2136301,
+ 2118368,
+ 2118387,
+ 2118389,
+ 2118392,
+ 2118393,
+ 2118406,
+ 2118408,
+ 2127160,
+ 2118413,
+ 2118416,
+ 2118415,
+ 2118421,
+ 2118426,
+ 2118435,
+ 2118447,
+ 2118449,
+ 2118451,
+ 2118456,
+ 2118464,
+ 2118470,
+ 2118469,
+ 2117143,
+ 2118473,
+ 2118477,
+ 2118102,
+ 2118494,
+ 2118505,
+ 2118510,
+ 2119960,
+ 2118523,
+ 2118519,
+ 2118530,
+ 2118550,
+ 2118560,
+ 2118566,
+ 2118565,
+ 2118574,
+ 2118576,
+ 2118582,
+ 2118595,
+ 2128914,
+ 2135769,
+ 2118623,
+ 2123516,
+ 2126318,
+ 2118638,
+ 2118632,
+ 2118637,
+ 2118650,
+ 2118657,
+ 2118717,
+ 2118720,
+ 2118700,
+ 2118701,
+ 2118716,
+ 2118702,
+ 2118710,
+ 2118697,
+ 2118685,
+ 2118734,
+ 2118799,
+ 2118773,
+ 2118798,
+ 2118751,
+ 2118769,
+ 2118775,
+ 2118768,
+ 2118802,
+ 2118779,
+ 2118784,
+ 2118774,
+ 2118788,
+ 2118800,
+ 2118790,
+ 2118855,
+ 2118818,
+ 2118840,
+ 2118821,
+ 2118828,
+ 2118852,
+ 2118856,
+ 2118824,
+ 2118827,
+ 2118850,
+ 2118820,
+ 2118846,
+ 2118844,
+ 2118872,
+ 2118885,
+ 2118886,
+ 2118927,
+ 2118932,
+ 2118909,
+ 2118894,
+ 2118893,
+ 2118906,
+ 2118882,
+ 2118969,
+ 2118976,
+ 2119011,
+ 2118988,
+ 2118958,
+ 2119004,
+ 2118981,
+ 2118998,
+ 2118999,
+ 2118968,
+ 2118963,
+ 2119005,
+ 2119065,
+ 2119040,
+ 2118831,
+ 2119050,
+ 2119071,
+ 2119035,
+ 2119038,
+ 2119064,
+ 2119070,
+ 2119086,
+ 2119036,
+ 2119043,
+ 2119081,
+ 2119047,
+ 2119080,
+ 2119130,
+ 2119109,
+ 2119135,
+ 2119108,
+ 2119132,
+ 2119140,
+ 2119124,
+ 2119188,
+ 2119159,
+ 2119190,
+ 2119166,
+ 2119165,
+ 2119195,
+ 2119161,
+ 2119246,
+ 2119248,
+ 2126303,
+ 2119220,
+ 2119222,
+ 2119218,
+ 2119224,
+ 2119275,
+ 2119268,
+ 2119215,
+ 2119276,
+ 2119274,
+ 2119302,
+ 2119296,
+ 2119306,
+ 2119328,
+ 2119316,
+ 2119311,
+ 2119333,
+ 2119342,
+ 2119350,
+ 2119348,
+ 2119362,
+ 2119356,
+ 2119361,
+ 2119363,
+ 2119360,
+ 2119368,
+ 2119374,
+ 2119377,
+ 2119379,
+ 2119383,
+ 2119406,
+ 2119417,
+ 2119424,
+ 2119423,
+ 2119428,
+ 2119433,
+ 2119432,
+ 2119435,
+ 2119437,
+ 2119443,
+ 2119448,
+ 2119446,
+ 2119111,
+ 2119452,
+ 2119462,
+ 2119479,
+ 2119480,
+ 2119502,
+ 2119483,
+ 2119488,
+ 2119503,
+ 2119529,
+ 2119616,
+ 2119560,
+ 2119521,
+ 2119551,
+ 2119561,
+ 2119571,
+ 2119584,
+ 2119603,
+ 2119588,
+ 2119594,
+ 2119600,
+ 2119619,
+ 2119622,
+ 2119636,
+ 2119634,
+ 2119635,
+ 2119690,
+ 2119638,
+ 2119651,
+ 2119691,
+ 2119705,
+ 2119709,
+ 2119794,
+ 2119713,
+ 2119778,
+ 2119755,
+ 2119792,
+ 2124736,
+ 2119762,
+ 2119741,
+ 2119801,
+ 2119813,
+ 2119865,
+ 2119839,
+ 2119851,
+ 2119866,
+ 2119902,
+ 2119867,
+ 2119864,
+ 2119854,
+ 2119877,
+ 2119891,
+ 2119889,
+ 2119895,
+ 2119897,
+ 2119896,
+ 2119909,
+ 2119900,
+ 2119908,
+ 2119903,
+ 2119919,
+ 2119930,
+ 2119929,
+ 2119931,
+ 2119932,
+ 2119933,
+ 2119938,
+ 2119946,
+ 2119952,
+ 2119963,
+ 2123942,
+ 2119973,
+ 2119980,
+ 2119981,
+ 2119986,
+ 2119992,
+ 2119998,
+ 2128594,
+ 2120021,
+ 2120016,
+ 2120014,
+ 2120026,
+ 2120024,
+ 2120034,
+ 2120032,
+ 2120039,
+ 2120044,
+ 2120041,
+ 2120056,
+ 2120065,
+ 2120093,
+ 2117470,
+ 2117547,
+ 2120099,
+ 2120114,
+ 2120134,
+ 2120168,
+ 2120156,
+ 2120077,
+ 2120153,
+ 2120154,
+ 2120229,
+ 2120223,
+ 2120209,
+ 2120220,
+ 2120201,
+ 2120218,
+ 2120256,
+ 2120300,
+ 2120265,
+ 2120245,
+ 2120246,
+ 2120290,
+ 2120298,
+ 2120346,
+ 2120380,
+ 2120382,
+ 2120395,
+ 2120386,
+ 2120381,
+ 2120419,
+ 2120407,
+ 2120422,
+ 2120425,
+ 2120406,
+ 2120442,
+ 2120443,
+ 2120460,
+ 2120459,
+ 2120470,
+ 2120498,
+ 2120400,
+ 2120490,
+ 2120502,
+ 2120510,
+ 2120515,
+ 2120517,
+ 2120512,
+ 2120529,
+ 2120533,
+ 2120538,
+ 2120539,
+ 2120549,
+ 2120553,
+ 2120560,
+ 2120563,
+ 2120565,
+ 2120568,
+ 2123144,
+ 2120570,
+ 2120576,
+ 2120579,
+ 2120614,
+ 2120632,
+ 2120643,
+ 2120647,
+ 2120649,
+ 2120660,
+ 2120656,
+ 2120676,
+ 2120678,
+ 2120674,
+ 2120670,
+ 2120677,
+ 2120683,
+ 2120688,
+ 2120694,
+ 2120691,
+ 2120709,
+ 2120711,
+ 2120712,
+ 2120717,
+ 2120723,
+ 2120736,
+ 2120738,
+ 2120744,
+ 2120760,
+ 2120761,
+ 2120769,
+ 2120774,
+ 2120782,
+ 2120787,
+ 2120784,
+ 2120783,
+ 2120561,
+ 2120812,
+ 4217966,
+ 2117218,
+ 2120822,
+ 2120825,
+ 2120844,
+ 2120849,
+ 2120852,
+ 2120091,
+ 2120875,
+ 2120891,
+ 2120886,
+ 2120892,
+ 2120887,
+ 2120901,
+ 2120894,
+ 2120903,
+ 2120921,
+ 2120937,
+ 2120957,
+ 2120954,
+ 2120941,
+ 2121100,
+ 2120938,
+ 2120971,
+ 2120981,
+ 2120983,
+ 2121052,
+ 2120991,
+ 2120987,
+ 2120977,
+ 2120980,
+ 2120994,
+ 2120986,
+ 2120985,
+ 2120984,
+ 2121036,
+ 2121042,
+ 2121038,
+ 2121035,
+ 2121068,
+ 2121075,
+ 2121078,
+ 2121095,
+ 2121092,
+ 2121090,
+ 2121122,
+ 2121117,
+ 2121132,
+ 2121134,
+ 2121149,
+ 2121104,
+ 2121143,
+ 2121148,
+ 2121161,
+ 2121165,
+ 2121171,
+ 2121170,
+ 2121174,
+ 2121179,
+ 2121195,
+ 2121202,
+ 2121205,
+ 2121227,
+ 2121242,
+ 2121241,
+ 2121233,
+ 2121243,
+ 2121270,
+ 2121271,
+ 2121284,
+ 2121283,
+ 2121280,
+ 2121294,
+ 2121303,
+ 2121300,
+ 2121311,
+ 2121314,
+ 2121316,
+ 2121287,
+ 2121333,
+ 2121334,
+ 2121338,
+ 2137788,
+ 2121343,
+ 2121376,
+ 2121409,
+ 2121410,
+ 2121416,
+ 2121424,
+ 2121423,
+ 2121430,
+ 2121443,
+ 2121437,
+ 2121434,
+ 2121435,
+ 2121442,
+ 2121441,
+ 2121448,
+ 2121449,
+ 2121452,
+ 2121457,
+ 2121459,
+ 2121456,
+ 2121460,
+ 2121464,
+ 2121470,
+ 2121475,
+ 2121481,
+ 2121565,
+ 2121564,
+ 2121483,
+ 2121489,
+ 2121494,
+ 2121513,
+ 2121517,
+ 2121528,
+ 2121537,
+ 2121544,
+ 2121548,
+ 2121550,
+ 2121519,
+ 2121553,
+ 2121558,
+ 2121559,
+ 2121561,
+ 2121569,
+ 2121581,
+ 2121587,
+ 2121591,
+ 2121603,
+ 2121602,
+ 2121599,
+ 2121610,
+ 2121608,
+ 2121617,
+ 2121607,
+ 2121630,
+ 2121625,
+ 2121624,
+ 2121632,
+ 2121640,
+ 2121645,
+ 2121660,
+ 2121686,
+ 2121723,
+ 2121700,
+ 2121720,
+ 2121713,
+ 2121693,
+ 2121907,
+ 2121727,
+ 2121761,
+ 2121824,
+ 2121753,
+ 2121744,
+ 2121769,
+ 2121742,
+ 2121777,
+ 2121755,
+ 2121749,
+ 2121771,
+ 2121766,
+ 2121743,
+ 2121786,
+ 2121818,
+ 2121793,
+ 2121834,
+ 2121847,
+ 2121823,
+ 2121802,
+ 2121798,
+ 2121805,
+ 2121827,
+ 2121795,
+ 2121828,
+ 2121794,
+ 2121836,
+ 2121835,
+ 2121817,
+ 2121857,
+ 2121869,
+ 2121959,
+ 2121859,
+ 2121882,
+ 2121860,
+ 2121883,
+ 2121878,
+ 2121879,
+ 2121874,
+ 2121895,
+ 2121867,
+ 2121953,
+ 2121912,
+ 2121952,
+ 2121939,
+ 2121908,
+ 2121712,
+ 2121917,
+ 2121926,
+ 2121909,
+ 2121944,
+ 2122061,
+ 2122005,
+ 2121990,
+ 2121974,
+ 2121975,
+ 2121984,
+ 2121972,
+ 2121978,
+ 2121987,
+ 2122017,
+ 2121979,
+ 2121969,
+ 2121997,
+ 2121998,
+ 2122055,
+ 2122046,
+ 2122024,
+ 2122023,
+ 2122058,
+ 2122047,
+ 2122044,
+ 2122028,
+ 2122036,
+ 2122045,
+ 2122050,
+ 2122052,
+ 2122099,
+ 2122103,
+ 2122072,
+ 2122073,
+ 2122074,
+ 2122091,
+ 2122100,
+ 2122095,
+ 2122085,
+ 2122097,
+ 2122079,
+ 2122077,
+ 2122067,
+ 2122101,
+ 2122137,
+ 2122134,
+ 2122119,
+ 2122156,
+ 2122132,
+ 2122138,
+ 2122122,
+ 2122129,
+ 2122155,
+ 2122158,
+ 2122188,
+ 2122186,
+ 2122185,
+ 2122231,
+ 2122184,
+ 2122179,
+ 2122182,
+ 2122170,
+ 2122187,
+ 2129785,
+ 2122189,
+ 2122214,
+ 2122211,
+ 2122230,
+ 2122234,
+ 2122228,
+ 2122239,
+ 2122237,
+ 2122236,
+ 2122238,
+ 2122240,
+ 2122248,
+ 2122249,
+ 2122253,
+ 2122252,
+ 2122260,
+ 2122267,
+ 2122270,
+ 2122273,
+ 2122282,
+ 2122286,
+ 2122288,
+ 2122290,
+ 2122291,
+ 2122305,
+ 2122318,
+ 2122334,
+ 2122339,
+ 2122331,
+ 2122336,
+ 2122344,
+ 2122364,
+ 2122370,
+ 2122377,
+ 2122366,
+ 2122386,
+ 2122387,
+ 2122390,
+ 4219604,
+ 2122371,
+ 2122388,
+ 2122455,
+ 2122449,
+ 2122427,
+ 2122447,
+ 2122495,
+ 2122438,
+ 2122964,
+ 2122440,
+ 2122460,
+ 2122444,
+ 2122442,
+ 2122434,
+ 2122439,
+ 2122395,
+ 2122441,
+ 2122508,
+ 2122478,
+ 2122481,
+ 2122535,
+ 2122498,
+ 2122504,
+ 2122479,
+ 2122485,
+ 2122576,
+ 2122558,
+ 2122573,
+ 2122780,
+ 2122575,
+ 2122646,
+ 2122638,
+ 2122624,
+ 2122667,
+ 2122614,
+ 2122659,
+ 2122639,
+ 2122633,
+ 2122655,
+ 2122677,
+ 2122603,
+ 2122601,
+ 2122686,
+ 2122729,
+ 2122688,
+ 2122694,
+ 2122723,
+ 2122697,
+ 2122706,
+ 2122742,
+ 2122692,
+ 2122774,
+ 2122804,
+ 2122758,
+ 2122771,
+ 2122790,
+ 2122806,
+ 2123037,
+ 2122775,
+ 2122792,
+ 2122767,
+ 2122855,
+ 2122863,
+ 2122870,
+ 2122830,
+ 2123050,
+ 2122901,
+ 2122899,
+ 2122917,
+ 2122921,
+ 2122888,
+ 2122940,
+ 2122970,
+ 2122962,
+ 2122949,
+ 2122951,
+ 2122939,
+ 2122968,
+ 2122946,
+ 2122993,
+ 2122983,
+ 2130441,
+ 2122976,
+ 2122977,
+ 2122412,
+ 2122979,
+ 2122991,
+ 2123052,
+ 2122998,
+ 2122996,
+ 2122994,
+ 2123002,
+ 2123008,
+ 2123005,
+ 2123032,
+ 2123036,
+ 2123013,
+ 2123044,
+ 2123043,
+ 2123051,
+ 2123060,
+ 2123061,
+ 2123063,
+ 2123062,
+ 2123064,
+ 2127179,
+ 2123080,
+ 2123094,
+ 2123093,
+ 2123085,
+ 2123096,
+ 2123102,
+ 2123101,
+ 2123122,
+ 2123128,
+ 2123138,
+ 2123139,
+ 2132874,
+ 2123163,
+ 2123167,
+ 2123179,
+ 2123191,
+ 2123203,
+ 2123206,
+ 2123201,
+ 2123204,
+ 2123212,
+ 2123218,
+ 2123227,
+ 2123225,
+ 2123232,
+ 2123233,
+ 2123249,
+ 2123634,
+ 2123274,
+ 2123267,
+ 2123259,
+ 2123635,
+ 2123317,
+ 2123318,
+ 2123316,
+ 2123292,
+ 2123343,
+ 2123332,
+ 2123337,
+ 2123329,
+ 2123358,
+ 2123357,
+ 2123364,
+ 2123367,
+ 2123368,
+ 2123359,
+ 2123362,
+ 2123376,
+ 2123395,
+ 2123400,
+ 2123406,
+ 2123401,
+ 2123396,
+ 2123416,
+ 2123421,
+ 2123457,
+ 2123449,
+ 2123465,
+ 2123454,
+ 2123452,
+ 2123460,
+ 2123448,
+ 2123478,
+ 2123482,
+ 2123488,
+ 2123327,
+ 2123494,
+ 2123497,
+ 2123504,
+ 2123509,
+ 2123511,
+ 2123535,
+ 2123542,
+ 2123550,
+ 2123558,
+ 2123559,
+ 2135864,
+ 2123566,
+ 2123583,
+ 2123574,
+ 2123585,
+ 2123576,
+ 2123575,
+ 2123590,
+ 2123614,
+ 2123616,
+ 2123609,
+ 2123619,
+ 2123620,
+ 2123657,
+ 2123632,
+ 2123689,
+ 2123644,
+ 2123626,
+ 2123660,
+ 2123659,
+ 2123686,
+ 2123681,
+ 2123653,
+ 2123703,
+ 2123759,
+ 2123700,
+ 2123756,
+ 2123699,
+ 2123753,
+ 2123704,
+ 2123748,
+ 2123742,
+ 2123741,
+ 2123746,
+ 2123758,
+ 2123705,
+ 2123726,
+ 2123718,
+ 2123751,
+ 2124444,
+ 2123806,
+ 2123846,
+ 2123817,
+ 2123840,
+ 2123853,
+ 2123826,
+ 2123854,
+ 2123955,
+ 2123819,
+ 2123865,
+ 2123875,
+ 2123895,
+ 2123903,
+ 2123935,
+ 2123919,
+ 2123949,
+ 2123924,
+ 2123933,
+ 2123931,
+ 2123907,
+ 2124462,
+ 2123961,
+ 2123892,
+ 2123957,
+ 2123936,
+ 2123962,
+ 2124047,
+ 2123917,
+ 2123902,
+ 2124033,
+ 2123978,
+ 2124040,
+ 2123992,
+ 2124066,
+ 2124070,
+ 2124001,
+ 2124044,
+ 2123981,
+ 2123988,
+ 2124007,
+ 2123989,
+ 2124086,
+ 2124050,
+ 2124036,
+ 2123991,
+ 2124003,
+ 2124069,
+ 2124025,
+ 2124000,
+ 2124015,
+ 2124072,
+ 2124074,
+ 2124058,
+ 2124067,
+ 2124065,
+ 2123974,
+ 2124153,
+ 2124151,
+ 2124124,
+ 2124152,
+ 2124139,
+ 2124116,
+ 2124158,
+ 2124142,
+ 2124089,
+ 2124148,
+ 2124093,
+ 2124121,
+ 2124080,
+ 2124129,
+ 2124126,
+ 2124125,
+ 2124161,
+ 2124138,
+ 2124210,
+ 2124206,
+ 2124240,
+ 2124223,
+ 2124225,
+ 2124243,
+ 2124222,
+ 2124238,
+ 2120680,
+ 2124234,
+ 2124253,
+ 2124219,
+ 2124227,
+ 2124199,
+ 2124334,
+ 2124177,
+ 2124192,
+ 2124188,
+ 2124181,
+ 2124212,
+ 2124254,
+ 2124264,
+ 2124290,
+ 2124315,
+ 2124287,
+ 2124554,
+ 2124281,
+ 2124274,
+ 2124263,
+ 2124293,
+ 2124209,
+ 2124318,
+ 2124269,
+ 2124308,
+ 2124267,
+ 2124298,
+ 2124306,
+ 2124481,
+ 2124323,
+ 2124307,
+ 2124356,
+ 2124300,
+ 2124402,
+ 2124342,
+ 2124408,
+ 2124359,
+ 2124386,
+ 2124377,
+ 2124390,
+ 2124360,
+ 2124344,
+ 2124322,
+ 2124432,
+ 2124429,
+ 2124448,
+ 2124420,
+ 2124450,
+ 2124451,
+ 2124439,
+ 2131479,
+ 2124475,
+ 2124483,
+ 2124482,
+ 2124472,
+ 2124467,
+ 2124460,
+ 2124510,
+ 2124497,
+ 2124511,
+ 2124458,
+ 2124506,
+ 2124522,
+ 2124539,
+ 2124549,
+ 2131478,
+ 2124538,
+ 2124562,
+ 2124566,
+ 2136881,
+ 2124575,
+ 2124600,
+ 2124599,
+ 2127580,
+ 2124601,
+ 2136302,
+ 2124615,
+ 2124611,
+ 2124617,
+ 2124624,
+ 2124633,
+ 2124628,
+ 2124635,
+ 2124639,
+ 2124641,
+ 2124664,
+ 2124665,
+ 2124671,
+ 2124672,
+ 2124676,
+ 2124675,
+ 2124685,
+ 2124696,
+ 2124693,
+ 2124702,
+ 2124708,
+ 2124714,
+ 2124715,
+ 2124719,
+ 2124722,
+ 2124721,
+ 2124723,
+ 2124727,
+ 2124732,
+ 2124742,
+ 2124747,
+ 2124755,
+ 2124767,
+ 2124780,
+ 2124779,
+ 2124787,
+ 2124783,
+ 2137790,
+ 2124808,
+ 2124819,
+ 2124820,
+ 2124827,
+ 2124836,
+ 2124835,
+ 2124894,
+ 2124885,
+ 2124898,
+ 2124906,
+ 2124930,
+ 2124941,
+ 2124954,
+ 2124929,
+ 2124955,
+ 2124926,
+ 2124904,
+ 2124915,
+ 2124946,
+ 2124944,
+ 2124996,
+ 2125041,
+ 2125011,
+ 2124989,
+ 2125015,
+ 2124997,
+ 2125021,
+ 2124974,
+ 2124977,
+ 2124990,
+ 2124986,
+ 2125019,
+ 2125039,
+ 2125017,
+ 2125034,
+ 2125087,
+ 2132045,
+ 2125110,
+ 2125099,
+ 2125117,
+ 2125112,
+ 2125081,
+ 2125109,
+ 2125107,
+ 2125074,
+ 2125068,
+ 2125155,
+ 2125203,
+ 2125156,
+ 2125146,
+ 2125177,
+ 2125145,
+ 2125198,
+ 2125205,
+ 2125796,
+ 2125189,
+ 2125305,
+ 2125333,
+ 2125322,
+ 2125237,
+ 2125255,
+ 2125286,
+ 2125240,
+ 2125254,
+ 2125292,
+ 2125278,
+ 2125260,
+ 2125288,
+ 2125266,
+ 2125253,
+ 2125306,
+ 2125273,
+ 2125284,
+ 2125269,
+ 2125290,
+ 2125294,
+ 2125357,
+ 2125422,
+ 2125358,
+ 2125337,
+ 2125426,
+ 2125407,
+ 2125374,
+ 2125347,
+ 2125419,
+ 2125355,
+ 2125430,
+ 2125389,
+ 2125343,
+ 2125379,
+ 2125370,
+ 2125390,
+ 2125348,
+ 2125567,
+ 2125341,
+ 2125368,
+ 2125442,
+ 2125482,
+ 2125464,
+ 2125513,
+ 2125495,
+ 2125523,
+ 2125501,
+ 2125487,
+ 2125508,
+ 2125490,
+ 2125524,
+ 2125525,
+ 2125455,
+ 2125477,
+ 2125506,
+ 2125471,
+ 2125633,
+ 2125585,
+ 2125900,
+ 2125548,
+ 2125560,
+ 2125566,
+ 2125631,
+ 2125554,
+ 2125617,
+ 2125551,
+ 2125618,
+ 2125516,
+ 2125630,
+ 2125587,
+ 2125559,
+ 2125702,
+ 2125690,
+ 2125688,
+ 2125697,
+ 2125696,
+ 2125679,
+ 2125659,
+ 2125811,
+ 2125677,
+ 2125698,
+ 2125692,
+ 2125656,
+ 2125710,
+ 2125713,
+ 2125762,
+ 2125670,
+ 2125747,
+ 2125731,
+ 2125729,
+ 2125732,
+ 2125753,
+ 2125766,
+ 2125738,
+ 2125791,
+ 2125781,
+ 2125804,
+ 2125780,
+ 2125784,
+ 2125809,
+ 2125806,
+ 2125787,
+ 2125833,
+ 2125835,
+ 2125818,
+ 2125841,
+ 2125825,
+ 2125839,
+ 2125822,
+ 2125851,
+ 2125850,
+ 2125684,
+ 2125853,
+ 2125848,
+ 2125855,
+ 2125872,
+ 2125886,
+ 2125874,
+ 2125905,
+ 2125923,
+ 2125977,
+ 2125970,
+ 2125999,
+ 2126065,
+ 2125996,
+ 2126008,
+ 2126003,
+ 2125998,
+ 2126047,
+ 2126027,
+ 2126045,
+ 2126041,
+ 2126089,
+ 2126077,
+ 2126108,
+ 2126105,
+ 2126181,
+ 2126165,
+ 2126216,
+ 2126182,
+ 2126178,
+ 2126156,
+ 2126166,
+ 2126188,
+ 2126223,
+ 2126331,
+ 2126212,
+ 2126229,
+ 2126248,
+ 2126252,
+ 2126295,
+ 2126265,
+ 2126270,
+ 2126290,
+ 2126281,
+ 2126292,
+ 2126286,
+ 2126304,
+ 2126316,
+ 2126311,
+ 2126325,
+ 2126332,
+ 2126329,
+ 2126335,
+ 2126349,
+ 2126352,
+ 2126363,
+ 4223528,
+ 2126381,
+ 2126380,
+ 2126384,
+ 2126386,
+ 2126395,
+ 2126396,
+ 2126399,
+ 2126400,
+ 2126406,
+ 2126411,
+ 2126424,
+ 2126452,
+ 2126462,
+ 2126466,
+ 2126465,
+ 2126471,
+ 2126482,
+ 2126486,
+ 2126498,
+ 2126503,
+ 2126521,
+ 2126514,
+ 2126531,
+ 2126534,
+ 2126532,
+ 2126542,
+ 2126546,
+ 2126562,
+ 2126560,
+ 2126561,
+ 2126585,
+ 2126583,
+ 2117647,
+ 2126615,
+ 2126602,
+ 2126620,
+ 2126614,
+ 2126621,
+ 2126644,
+ 2126639,
+ 2126633,
+ 2126629,
+ 2126654,
+ 2126670,
+ 2126671,
+ 2137816,
+ 2126679,
+ 2126698,
+ 2126696,
+ 2126704,
+ 2126712,
+ 2126709,
+ 2126715,
+ 2126714,
+ 2126792,
+ 2126771,
+ 2126798,
+ 2126779,
+ 2126784,
+ 2126821,
+ 2126830,
+ 2126814,
+ 2127010,
+ 2126853,
+ 2126959,
+ 2126885,
+ 2126840,
+ 2126898,
+ 2126906,
+ 2126933,
+ 2126911,
+ 2126943,
+ 2126937,
+ 2126913,
+ 2126940,
+ 2126953,
+ 2126960,
+ 2126947,
+ 2126954,
+ 2126966,
+ 2126974,
+ 2126987,
+ 2127006,
+ 2127015,
+ 2127050,
+ 2127055,
+ 2127060,
+ 2126833,
+ 2127072,
+ 2127075,
+ 2127079,
+ 2127081,
+ 2127086,
+ 2127090,
+ 2127088,
+ 2127089,
+ 2127096,
+ 2127095,
+ 2127108,
+ 2127107,
+ 2127109,
+ 2127116,
+ 2127118,
+ 2127117,
+ 2127125,
+ 2127123,
+ 2127134,
+ 2127142,
+ 2127148,
+ 2127164,
+ 2127172,
+ 2127181,
+ 2127178,
+ 2127177,
+ 2127195,
+ 2127174,
+ 2127194,
+ 2127209,
+ 2127204,
+ 2127207,
+ 2127211,
+ 2127213,
+ 2127224,
+ 2127222,
+ 2127238,
+ 2127239,
+ 2127220,
+ 2127242,
+ 2127241,
+ 2127234,
+ 2127252,
+ 2127258,
+ 2127261,
+ 2127269,
+ 2127267,
+ 2127298,
+ 2127283,
+ 2127299,
+ 2127285,
+ 2127293,
+ 2127288,
+ 2127292,
+ 2127281,
+ 2127309,
+ 2127306,
+ 2127314,
+ 2127321,
+ 2127331,
+ 2127326,
+ 2127358,
+ 2127359,
+ 2127356,
+ 2127361,
+ 2127344,
+ 2127354,
+ 2127346,
+ 2127347,
+ 2127371,
+ 2127373,
+ 2127369,
+ 2127391,
+ 2127399,
+ 2127392,
+ 2127393,
+ 2127394,
+ 2127396,
+ 2127412,
+ 2127408,
+ 2127419,
+ 2127431,
+ 2127432,
+ 2127430,
+ 2127452,
+ 2127448,
+ 2127457,
+ 2127458,
+ 2127464,
+ 2127465,
+ 2127466,
+ 2127463,
+ 2127468,
+ 2127472,
+ 2127474,
+ 2127478,
+ 2127480,
+ 2127484,
+ 2127488,
+ 2127491,
+ 2127496,
+ 2127499,
+ 2127502,
+ 2127510,
+ 2127507,
+ 2127513,
+ 2127514,
+ 2127536,
+ 2127540,
+ 2127544,
+ 2127545,
+ 2127546,
+ 2127554,
+ 2127565,
+ 2127574,
+ 2127570,
+ 2127582,
+ 2127585,
+ 2127589,
+ 2127591,
+ 2127594,
+ 2131503,
+ 2127611,
+ 2127624,
+ 2127623,
+ 2127620,
+ 2127657,
+ 2127652,
+ 4224798,
+ 2127653,
+ 2127654,
+ 2127643,
+ 2127671,
+ 2127672,
+ 2127687,
+ 2127706,
+ 2127720,
+ 2127723,
+ 2127707,
+ 2127717,
+ 2127743,
+ 2127742,
+ 2127737,
+ 2127758,
+ 2127755,
+ 2127761,
+ 2127776,
+ 2127774,
+ 2127792,
+ 2127798,
+ 2127801,
+ 2127807,
+ 2127804,
+ 2127805,
+ 2127803,
+ 2127815,
+ 2127821,
+ 2127831,
+ 2127834,
+ 2127836,
+ 2127843,
+ 2127854,
+ 2127868,
+ 2127884,
+ 2127890,
+ 2128166,
+ 2127904,
+ 2128170,
+ 2127941,
+ 2128014,
+ 2127988,
+ 2128006,
+ 2127996,
+ 2128026,
+ 2128012,
+ 2128035,
+ 2128053,
+ 2128042,
+ 2128047,
+ 2128081,
+ 2128070,
+ 2128075,
+ 2128084,
+ 2128062,
+ 2128060,
+ 2128069,
+ 2128074,
+ 2128108,
+ 2128103,
+ 2128090,
+ 2128125,
+ 2128116,
+ 2128135,
+ 2128146,
+ 2128145,
+ 2128153,
+ 2128172,
+ 2128171,
+ 2128192,
+ 2128224,
+ 2128215,
+ 2128223,
+ 2128218,
+ 2128213,
+ 2128211,
+ 2128250,
+ 2128255,
+ 2128266,
+ 2128285,
+ 2128295,
+ 2137931,
+ 2128298,
+ 2128302,
+ 2128307,
+ 2128313,
+ 2128314,
+ 2128329,
+ 2128341,
+ 2128359,
+ 2128364,
+ 2128353,
+ 2128355,
+ 2128392,
+ 2128397,
+ 2128408,
+ 2128409,
+ 2128416,
+ 2128415,
+ 2128256,
+ 2128433,
+ 2128443,
+ 2128446,
+ 2128439,
+ 2128451,
+ 2128471,
+ 2128457,
+ 2128481,
+ 2128482,
+ 2128489,
+ 2138013,
+ 2128496,
+ 2128505,
+ 2128509,
+ 2128520,
+ 2128535,
+ 2128533,
+ 2128536,
+ 2128534,
+ 2128553,
+ 2128584,
+ 2128560,
+ 2128566,
+ 2128581,
+ 2128580,
+ 2128575,
+ 2134147,
+ 2128583,
+ 2128586,
+ 2128589,
+ 2128591,
+ 2128597,
+ 2128595,
+ 2128601,
+ 2128602,
+ 2128605,
+ 2128609,
+ 2128610,
+ 2128614,
+ 2128621,
+ 2128624,
+ 2128642,
+ 2128655,
+ 2128650,
+ 2128646,
+ 2128691,
+ 2128664,
+ 2128665,
+ 2128670,
+ 2128693,
+ 2128680,
+ 2128694,
+ 2128720,
+ 2128762,
+ 2128644,
+ 2128717,
+ 2128651,
+ 2128716,
+ 2128709,
+ 2128757,
+ 2128741,
+ 2128756,
+ 2128743,
+ 2128752,
+ 2128753,
+ 2128748,
+ 2128750,
+ 2128797,
+ 2128792,
+ 2128799,
+ 2128781,
+ 2128796,
+ 2128794,
+ 2128779,
+ 2128786,
+ 2128783,
+ 2128733,
+ 2128793,
+ 2128843,
+ 2128833,
+ 2128844,
+ 2128847,
+ 2128820,
+ 2128838,
+ 2128861,
+ 2128873,
+ 2128913,
+ 2128916,
+ 2128870,
+ 2128869,
+ 2128992,
+ 2128896,
+ 2128903,
+ 2128915,
+ 2128883,
+ 2128887,
+ 2128919,
+ 2128909,
+ 2128886,
+ 2128931,
+ 2128935,
+ 2128938,
+ 2128927,
+ 2128951,
+ 2128939,
+ 2128957,
+ 2128972,
+ 2128963,
+ 2128980,
+ 2128975,
+ 2128960,
+ 2128976,
+ 2128984,
+ 2128991,
+ 2128996,
+ 2128982,
+ 2128997,
+ 2129004,
+ 2129013,
+ 2129027,
+ 2129040,
+ 2129060,
+ 2129069,
+ 2129058,
+ 2129067,
+ 2129057,
+ 2129064,
+ 2129075,
+ 2129074,
+ 2129073,
+ 2129070,
+ 2129081,
+ 2129085,
+ 2129088,
+ 2129093,
+ 2129090,
+ 2129112,
+ 2129106,
+ 2129116,
+ 2129122,
+ 2136891,
+ 2129135,
+ 2129138,
+ 2129140,
+ 2129142,
+ 2129146,
+ 2129158,
+ 2129154,
+ 2129180,
+ 2129173,
+ 2129162,
+ 2129221,
+ 2129227,
+ 2129198,
+ 2129202,
+ 2129215,
+ 2129205,
+ 2129222,
+ 2129267,
+ 2129238,
+ 2129230,
+ 2129266,
+ 2129256,
+ 2129262,
+ 2129231,
+ 2129251,
+ 2129299,
+ 2129289,
+ 2129243,
+ 2129295,
+ 2129277,
+ 2129307,
+ 2129338,
+ 2129326,
+ 2129315,
+ 2129333,
+ 2129351,
+ 2129341,
+ 2129323,
+ 2129469,
+ 2129314,
+ 2129327,
+ 2129372,
+ 2129336,
+ 2129311,
+ 2129328,
+ 2129368,
+ 2129373,
+ 2129380,
+ 2129374,
+ 2129403,
+ 2129394,
+ 2129377,
+ 2129413,
+ 2129418,
+ 2129443,
+ 2129441,
+ 2129426,
+ 2129457,
+ 2129439,
+ 2129417,
+ 2129419,
+ 2129442,
+ 2129478,
+ 2129510,
+ 2129467,
+ 2129461,
+ 2129465,
+ 2129475,
+ 2129463,
+ 2129458,
+ 2129466,
+ 2129511,
+ 2129501,
+ 2129494,
+ 2129502,
+ 2129497,
+ 2129498,
+ 2129529,
+ 2129514,
+ 2129513,
+ 2129532,
+ 2129531,
+ 2129539,
+ 2129365,
+ 2129533,
+ 2133934,
+ 2129535,
+ 2129544,
+ 2129545,
+ 2129548,
+ 2129554,
+ 2129552,
+ 2129555,
+ 2129556,
+ 2129558,
+ 2129550,
+ 2129563,
+ 2129564,
+ 2129720,
+ 2129722,
+ 2129733,
+ 2129740,
+ 2129741,
+ 2129742,
+ 2129744,
+ 2129745,
+ 2129749,
+ 2129748,
+ 2129752,
+ 2129759,
+ 2129760,
+ 2129768,
+ 2129769,
+ 2129767,
+ 2129784,
+ 2129794,
+ 2129798,
+ 2129795,
+ 2129800,
+ 2129799,
+ 2129804,
+ 2129812,
+ 2129822,
+ 2129821,
+ 2129818,
+ 2129827,
+ 2129839,
+ 2129842,
+ 2129849,
+ 2129838,
+ 2129846,
+ 2129848,
+ 2132849,
+ 2129861,
+ 2129862,
+ 2129866,
+ 2129877,
+ 2129876,
+ 2129889,
+ 2129894,
+ 2129897,
+ 2129907,
+ 2129913,
+ 2136284,
+ 2129926,
+ 2129924,
+ 2129931,
+ 2129938,
+ 2129944,
+ 2129945,
+ 2129948,
+ 2129953,
+ 2129960,
+ 2129983,
+ 2129979,
+ 2129994,
+ 2129990,
+ 2130002,
+ 2130008,
+ 2130010,
+ 2130015,
+ 2130018,
+ 2130024,
+ 2130035,
+ 2130034,
+ 2130032,
+ 2130038,
+ 2130041,
+ 2130045,
+ 2130047,
+ 2130052,
+ 2130054,
+ 2130053,
+ 2130075,
+ 2130067,
+ 2130074,
+ 2130093,
+ 2118032,
+ 2130092,
+ 2130139,
+ 2130149,
+ 2130137,
+ 2130141,
+ 2130116,
+ 2130138,
+ 2130134,
+ 2130185,
+ 2130159,
+ 2130161,
+ 2130203,
+ 2130217,
+ 2130211,
+ 2130223,
+ 2130251,
+ 2135691,
+ 2130246,
+ 2130238,
+ 2130259,
+ 2130257,
+ 2130172,
+ 2130289,
+ 2130286,
+ 2130277,
+ 2130278,
+ 2130292,
+ 2130307,
+ 2130312,
+ 2130314,
+ 2130304,
+ 2130306,
+ 2130336,
+ 2130325,
+ 2130340,
+ 2130339,
+ 2130271,
+ 2130323,
+ 2130345,
+ 2130352,
+ 2130357,
+ 2130366,
+ 2130360,
+ 2130365,
+ 2130368,
+ 2130370,
+ 2130362,
+ 2130377,
+ 2130381,
+ 2130385,
+ 2130393,
+ 2130392,
+ 2130376,
+ 2130394,
+ 2130399,
+ 2130400,
+ 2130407,
+ 2130426,
+ 2130427,
+ 2130430,
+ 2130433,
+ 2130434,
+ 2130437,
+ 2130439,
+ 2130442,
+ 2130445,
+ 2130448,
+ 2130454,
+ 2130473,
+ 2130475,
+ 2130488,
+ 2130483,
+ 2130496,
+ 2130521,
+ 2130520,
+ 2130525,
+ 2130522,
+ 2130527,
+ 2130532,
+ 2130530,
+ 2130536,
+ 2130538,
+ 2130539,
+ 2130478,
+ 2130545,
+ 2130551,
+ 2130552,
+ 2130558,
+ 2130573,
+ 2130578,
+ 2130603,
+ 2130591,
+ 2130619,
+ 2130604,
+ 2130657,
+ 2130659,
+ 2130655,
+ 2130642,
+ 2130676,
+ 2130675,
+ 2130682,
+ 2130835,
+ 2130691,
+ 2130683,
+ 2130681,
+ 2130654,
+ 2130694,
+ 2130652,
+ 2130697,
+ 2130649,
+ 2130741,
+ 2130740,
+ 2130710,
+ 2130738,
+ 2130737,
+ 2130752,
+ 2130745,
+ 2130768,
+ 2130757,
+ 2130735,
+ 2130731,
+ 2130711,
+ 2130712,
+ 2130821,
+ 2130842,
+ 2130858,
+ 2130847,
+ 2130850,
+ 2130838,
+ 2130723,
+ 2130830,
+ 2130823,
+ 2130826,
+ 2130812,
+ 2130869,
+ 2130803,
+ 2130805,
+ 2130848,
+ 2130825,
+ 2130856,
+ 2130932,
+ 2130963,
+ 2130923,
+ 2130894,
+ 2130941,
+ 2130947,
+ 2130904,
+ 2130955,
+ 2130881,
+ 2130935,
+ 2130951,
+ 2130912,
+ 2130930,
+ 2130957,
+ 2130978,
+ 2130976,
+ 2130877,
+ 2131000,
+ 2131206,
+ 2130939,
+ 2131053,
+ 2130986,
+ 2131004,
+ 2131290,
+ 2131076,
+ 2131063,
+ 2131051,
+ 2131117,
+ 2131054,
+ 2131074,
+ 2131049,
+ 2131014,
+ 2130988,
+ 2131055,
+ 2131065,
+ 2130997,
+ 2131146,
+ 2131042,
+ 2131129,
+ 2131135,
+ 2131103,
+ 2131161,
+ 2131149,
+ 2131131,
+ 2131162,
+ 2131152,
+ 2131137,
+ 2131142,
+ 2131158,
+ 2131105,
+ 2131233,
+ 2131199,
+ 2131188,
+ 2131223,
+ 2131224,
+ 2131244,
+ 2131231,
+ 2131221,
+ 2131220,
+ 2131196,
+ 2131264,
+ 2131299,
+ 2131288,
+ 2131272,
+ 2131265,
+ 2131458,
+ 2131275,
+ 2131285,
+ 2131328,
+ 2131364,
+ 2131336,
+ 2131345,
+ 2131338,
+ 2131368,
+ 2131309,
+ 2131348,
+ 2131355,
+ 2131434,
+ 2131335,
+ 2131356,
+ 2131319,
+ 2131326,
+ 2131344,
+ 2131401,
+ 2131386,
+ 2131407,
+ 2131385,
+ 2131408,
+ 2131413,
+ 2131421,
+ 2131429,
+ 2131420,
+ 2131449,
+ 2131466,
+ 2131475,
+ 2131467,
+ 2131454,
+ 2131450,
+ 2131462,
+ 2131490,
+ 2131482,
+ 2131504,
+ 2131519,
+ 2131533,
+ 2117205,
+ 2131540,
+ 2131551,
+ 2131559,
+ 2131569,
+ 2131603,
+ 2131619,
+ 2131625,
+ 2131626,
+ 2131595,
+ 2131596,
+ 2131638,
+ 2131631,
+ 2131652,
+ 2131654,
+ 2131632,
+ 2131657,
+ 2132003,
+ 2131627,
+ 2131668,
+ 2131678,
+ 2131689,
+ 2131692,
+ 2131679,
+ 2131675,
+ 2131695,
+ 2131730,
+ 2131718,
+ 2131720,
+ 2131712,
+ 2131715,
+ 2131707,
+ 2131729,
+ 2131721,
+ 2131725,
+ 2131705,
+ 2131722,
+ 2131764,
+ 2131775,
+ 2131767,
+ 2131771,
+ 2131749,
+ 2131753,
+ 2131738,
+ 2131808,
+ 2131807,
+ 2131832,
+ 2131788,
+ 2131790,
+ 2131828,
+ 2131799,
+ 2131816,
+ 2131822,
+ 2131801,
+ 2131795,
+ 2131811,
+ 2131818,
+ 2131973,
+ 2131874,
+ 2131871,
+ 2131842,
+ 2131887,
+ 2131915,
+ 2131901,
+ 2131904,
+ 2131920,
+ 2135766,
+ 2131883,
+ 2131908,
+ 2131891,
+ 2131911,
+ 2131910,
+ 2131899,
+ 2131951,
+ 2131954,
+ 2131936,
+ 2131983,
+ 2131981,
+ 2131966,
+ 2131958,
+ 2131959,
+ 2131982,
+ 2131922,
+ 2131985,
+ 2131990,
+ 2131989,
+ 2132002,
+ 2132001,
+ 2132017,
+ 2132022,
+ 2132025,
+ 2132007,
+ 2132027,
+ 2132036,
+ 2132034,
+ 2132050,
+ 2132057,
+ 2132062,
+ 2132066,
+ 2132075,
+ 2132097,
+ 2132094,
+ 2132126,
+ 2132085,
+ 2132093,
+ 2132149,
+ 2132082,
+ 2132098,
+ 2132119,
+ 2132114,
+ 2132142,
+ 2132121,
+ 2132130,
+ 2132109,
+ 2132132,
+ 2132144,
+ 2132159,
+ 2132145,
+ 2132163,
+ 2132164,
+ 2132180,
+ 2132184,
+ 2132185,
+ 2132189,
+ 2132217,
+ 2132226,
+ 2132220,
+ 2132212,
+ 2132200,
+ 2132210,
+ 2132228,
+ 2132236,
+ 2132234,
+ 2132243,
+ 2132291,
+ 2132254,
+ 2132261,
+ 2132266,
+ 2132267,
+ 2132289,
+ 2132292,
+ 2132283,
+ 2132278,
+ 2132280,
+ 2132300,
+ 2132253,
+ 2132320,
+ 2132318,
+ 2132326,
+ 2132324,
+ 2132333,
+ 2132330,
+ 2132335,
+ 2132340,
+ 2132343,
+ 2132350,
+ 2132355,
+ 2132360,
+ 2132362,
+ 2132371,
+ 2132376,
+ 2132385,
+ 2132393,
+ 2132390,
+ 2132396,
+ 2132399,
+ 2132402,
+ 2132410,
+ 2132413,
+ 2132415,
+ 2132416,
+ 2132442,
+ 2132444,
+ 2132445,
+ 2132455,
+ 2132468,
+ 2132472,
+ 2132483,
+ 2132502,
+ 2132496,
+ 2132492,
+ 2132507,
+ 2132509,
+ 2132517,
+ 2132534,
+ 2132545,
+ 2132571,
+ 2132562,
+ 2132550,
+ 2132552,
+ 2132604,
+ 2132589,
+ 2132588,
+ 2132578,
+ 2132613,
+ 2132610,
+ 2132612,
+ 2132648,
+ 2132641,
+ 2132625,
+ 2132645,
+ 2132646,
+ 2132634,
+ 2132643,
+ 2132676,
+ 2132685,
+ 2132674,
+ 2132698,
+ 2132715,
+ 2132723,
+ 2132711,
+ 2132708,
+ 2132721,
+ 2132756,
+ 2132704,
+ 2132706,
+ 2132727,
+ 2132702,
+ 2132699,
+ 2132748,
+ 2132743,
+ 2132762,
+ 2132705,
+ 2132758,
+ 2132752,
+ 2132759,
+ 2132768,
+ 2132787,
+ 2135979,
+ 2132774,
+ 2132779,
+ 2132798,
+ 2132776,
+ 2132801,
+ 2132812,
+ 2132815,
+ 2132814,
+ 2132809,
+ 2132822,
+ 2132827,
+ 2132826,
+ 2132843,
+ 2132831,
+ 2132844,
+ 2132847,
+ 2132852,
+ 2132861,
+ 2132864,
+ 2132876,
+ 2132878,
+ 2132882,
+ 2132883,
+ 2132886,
+ 2132889,
+ 2132890,
+ 2133050,
+ 2133057,
+ 2133055,
+ 2133064,
+ 2133068,
+ 2133070,
+ 2133072,
+ 2133077,
+ 2133090,
+ 2133100,
+ 2133112,
+ 2133114,
+ 2133122,
+ 2133129,
+ 2133125,
+ 2133130,
+ 2133133,
+ 2133134,
+ 2133140,
+ 2133116,
+ 2133144,
+ 2122269,
+ 2133165,
+ 2133162,
+ 2133181,
+ 2133170,
+ 2133171,
+ 2133166,
+ 2133174,
+ 2133192,
+ 2133185,
+ 2133220,
+ 2133219,
+ 2133210,
+ 2133245,
+ 2133242,
+ 2133243,
+ 2133252,
+ 2133253,
+ 2133258,
+ 2133255,
+ 2133263,
+ 2133261,
+ 2133264,
+ 2137934,
+ 2133267,
+ 2133197,
+ 2133268,
+ 2133270,
+ 2133351,
+ 2133357,
+ 2133361,
+ 2133363,
+ 2133377,
+ 2133401,
+ 2133442,
+ 2133438,
+ 2133434,
+ 2133455,
+ 2133466,
+ 2133462,
+ 2133452,
+ 2133467,
+ 2133451,
+ 2133482,
+ 2133483,
+ 2133471,
+ 2133475,
+ 2133500,
+ 2133512,
+ 2133513,
+ 2133503,
+ 2133533,
+ 2133534,
+ 2133520,
+ 2133535,
+ 2133570,
+ 2133557,
+ 2133552,
+ 2133556,
+ 2133578,
+ 2133575,
+ 2133577,
+ 2133580,
+ 2133584,
+ 2133576,
+ 2133593,
+ 2133604,
+ 2133600,
+ 2133546,
+ 2133603,
+ 2133589,
+ 2133622,
+ 2133618,
+ 2133628,
+ 2133633,
+ 2133639,
+ 2133637,
+ 2133636,
+ 2133643,
+ 2133642,
+ 2133651,
+ 2133649,
+ 2133652,
+ 2133657,
+ 2133674,
+ 2133665,
+ 2133676,
+ 2133680,
+ 2133702,
+ 2133681,
+ 2133694,
+ 2133701,
+ 2133704,
+ 2133707,
+ 2133723,
+ 2133731,
+ 2133756,
+ 2133755,
+ 2133739,
+ 2133758,
+ 2133770,
+ 2133765,
+ 2133781,
+ 2133778,
+ 2133785,
+ 2133779,
+ 2133788,
+ 2133791,
+ 2133787,
+ 2133772,
+ 2133798,
+ 2133811,
+ 2133819,
+ 2133817,
+ 2133829,
+ 2133826,
+ 2133822,
+ 2133836,
+ 2133833,
+ 2133830,
+ 2133838,
+ 2133847,
+ 2133852,
+ 2133858,
+ 2133859,
+ 2133860,
+ 2133916,
+ 2133919,
+ 2133923,
+ 2133933,
+ 2133935,
+ 2133943,
+ 2133978,
+ 2133989,
+ 2133986,
+ 2133994,
+ 2133999,
+ 2134151,
+ 2134004,
+ 2134021,
+ 2134009,
+ 2134010,
+ 2134033,
+ 2134037,
+ 2134049,
+ 2134029,
+ 2134046,
+ 2134038,
+ 2134027,
+ 2134055,
+ 2134070,
+ 2134069,
+ 2134073,
+ 2134008,
+ 2134095,
+ 2134096,
+ 2134097,
+ 2134098,
+ 2134030,
+ 2134089,
+ 2134078,
+ 2134102,
+ 2134104,
+ 2134110,
+ 2134120,
+ 2134127,
+ 2134134,
+ 2135720,
+ 2134130,
+ 2134146,
+ 2134141,
+ 2134145,
+ 2134144,
+ 2134154,
+ 2134153,
+ 2134159,
+ 2134184,
+ 2134191,
+ 2134193,
+ 2134197,
+ 2134242,
+ 2134244,
+ 2122312,
+ 2134235,
+ 2134274,
+ 2134290,
+ 2134297,
+ 2134322,
+ 2134320,
+ 2134346,
+ 2134358,
+ 2134360,
+ 2134371,
+ 2134373,
+ 2134377,
+ 2134387,
+ 2134386,
+ 2134411,
+ 2134409,
+ 2134402,
+ 2134434,
+ 2134443,
+ 2134447,
+ 2134442,
+ 2134453,
+ 2134452,
+ 2134458,
+ 2134464,
+ 2134465,
+ 2134473,
+ 2134475,
+ 2134480,
+ 2134486,
+ 2134495,
+ 2134497,
+ 2134491,
+ 2134524,
+ 2134517,
+ 2134518,
+ 2134558,
+ 2134527,
+ 2134548,
+ 2134572,
+ 2134549,
+ 2134545,
+ 2134622,
+ 2134615,
+ 2134597,
+ 2134601,
+ 2134628,
+ 2134600,
+ 2134677,
+ 2134591,
+ 2134603,
+ 2134608,
+ 2134684,
+ 2134678,
+ 2134675,
+ 2134683,
+ 2134618,
+ 2134735,
+ 2134713,
+ 2134711,
+ 2134761,
+ 2134799,
+ 2134778,
+ 2134852,
+ 2134830,
+ 2134809,
+ 2134818,
+ 2134810,
+ 2134819,
+ 2134842,
+ 2134837,
+ 2134843,
+ 2134876,
+ 2134880,
+ 2134908,
+ 2134894,
+ 2134870,
+ 2134960,
+ 2134956,
+ 2134957,
+ 2134932,
+ 2134969,
+ 2134998,
+ 2134999,
+ 2135016,
+ 2135013,
+ 2135000,
+ 2134979,
+ 2135005,
+ 2134992,
+ 2134984,
+ 2135012,
+ 2135066,
+ 2135060,
+ 2135059,
+ 2135043,
+ 2135047,
+ 2135056,
+ 2135094,
+ 2135083,
+ 2135093,
+ 2135073,
+ 2135098,
+ 2135105,
+ 2135122,
+ 2135108,
+ 2135131,
+ 2135136,
+ 2135138,
+ 2135134,
+ 2135146,
+ 2134569,
+ 2135152,
+ 2135157,
+ 2135159,
+ 2135165,
+ 2135130,
+ 2135164,
+ 2135166,
+ 2135169,
+ 2135167,
+ 2135426,
+ 2135431,
+ 2135434,
+ 2135444,
+ 2135446,
+ 2135448,
+ 2135449,
+ 2135456,
+ 2135464,
+ 2135463,
+ 2135469,
+ 2135484,
+ 2135483,
+ 2135481,
+ 2135486,
+ 2135498,
+ 2125814,
+ 2135491,
+ 2135501,
+ 2135500,
+ 2135509,
+ 2135508,
+ 2135510,
+ 2135516,
+ 2135521,
+ 2135525,
+ 2135522,
+ 2135585,
+ 2135592,
+ 2135598,
+ 2135599,
+ 2135618,
+ 2135628,
+ 2135631,
+ 2135627,
+ 2135671,
+ 2135644,
+ 2135646,
+ 2135645,
+ 2135647,
+ 2135654,
+ 2135666,
+ 2135660,
+ 2135693,
+ 2135704,
+ 2135701,
+ 2135703,
+ 2135722,
+ 2135719,
+ 2135729,
+ 2135730,
+ 2135728,
+ 2135732,
+ 2135734,
+ 2135736,
+ 2135737,
+ 2135758,
+ 2135755,
+ 2135753,
+ 2135757,
+ 2132301,
+ 2135772,
+ 2135821,
+ 2135765,
+ 2135801,
+ 2135812,
+ 2135814,
+ 2135816,
+ 2135827,
+ 2135822,
+ 2135825,
+ 2135823,
+ 2135830,
+ 2135833,
+ 2135844,
+ 2135850,
+ 2135856,
+ 2135865,
+ 2135869,
+ 2135870,
+ 2135876,
+ 2135878,
+ 2135880,
+ 2135874,
+ 2135881,
+ 2135900,
+ 2135904,
+ 2135908,
+ 2135910,
+ 2135912,
+ 2118354,
+ 2135915,
+ 2135921,
+ 2135929,
+ 2135941,
+ 2135932,
+ 2135937,
+ 2135930,
+ 2135942,
+ 2135947,
+ 2135951,
+ 2135952,
+ 2135964,
+ 2135976,
+ 2135974,
+ 2135971,
+ 2135987,
+ 2135988,
+ 2136003,
+ 2136006,
+ 2136008,
+ 2136011,
+ 2136028,
+ 2136045,
+ 2137935,
+ 2136050,
+ 2128607,
+ 2136054,
+ 2136053,
+ 2136079,
+ 2136076,
+ 2136120,
+ 2136100,
+ 2136097,
+ 2136119,
+ 2136125,
+ 2136134,
+ 2136143,
+ 2136139,
+ 2136171,
+ 2136175,
+ 2136176,
+ 2136177,
+ 2136180,
+ 2136179,
+ 2136234,
+ 2136239,
+ 2136241,
+ 2136246,
+ 2136260,
+ 2136259,
+ 2136262,
+ 2136297,
+ 2136299,
+ 2136323,
+ 2136329,
+ 2136338,
+ 2136340,
+ 2136344,
+ 2136353,
+ 2136349,
+ 2136350,
+ 2136356,
+ 2136352,
+ 2136364,
+ 2136366,
+ 2136381,
+ 2136382,
+ 2136386,
+ 2136393,
+ 2136389,
+ 2136400,
+ 2136395,
+ 2136401,
+ 2136402,
+ 2136396,
+ 2136405,
+ 2136471,
+ 2136472,
+ 2136485,
+ 2136493,
+ 2136494,
+ 2136508,
+ 2136543,
+ 2136539,
+ 2136541,
+ 2136536,
+ 2136529,
+ 2136557,
+ 2136558,
+ 2136561,
+ 2136562,
+ 2136571,
+ 2136568,
+ 2136577,
+ 2136591,
+ 2136581,
+ 2136546,
+ 2136601,
+ 2136619,
+ 2136631,
+ 2136645,
+ 2136642,
+ 2136640,
+ 2136643,
+ 2136638,
+ 2136661,
+ 2136653,
+ 2136667,
+ 2136663,
+ 2136671,
+ 2136674,
+ 2136677,
+ 2136676,
+ 2136681,
+ 2136683,
+ 2136682,
+ 2136749,
+ 2136752,
+ 2136764,
+ 2136768,
+ 2136783,
+ 2136785,
+ 2136787,
+ 2136788,
+ 2136798,
+ 2136799,
+ 2136802,
+ 2136803,
+ 2136806,
+ 2136815,
+ 2136811,
+ 2136814,
+ 2136820,
+ 2136817,
+ 2136823,
+ 2136827,
+ 2136838,
+ 2136856,
+ 2136858,
+ 2136863,
+ 2136866,
+ 2136867,
+ 2136869,
+ 2136871,
+ 2136872,
+ 2136873,
+ 2136874,
+ 2136878,
+ 2136879,
+ 2136882,
+ 2136900,
+ 2136899,
+ 2136911,
+ 2136909,
+ 2136910,
+ 2136913,
+ 2136920,
+ 2136948,
+ 2136979,
+ 2136963,
+ 2136977,
+ 2136982,
+ 2136983,
+ 2136991,
+ 2136992,
+ 2137000,
+ 2137012,
+ 2137024,
+ 2137034,
+ 2137017,
+ 2137030,
+ 2137039,
+ 2137041,
+ 2137042,
+ 2137059,
+ 2137058,
+ 2137060,
+ 2137044,
+ 2137057,
+ 2137146,
+ 2137074,
+ 2137073,
+ 2137072,
+ 2137109,
+ 2137108,
+ 2137097,
+ 2137107,
+ 2137100,
+ 2137094,
+ 2137096,
+ 2137106,
+ 2137098,
+ 2137092,
+ 2137134,
+ 2137115,
+ 2137125,
+ 2137124,
+ 2137121,
+ 2137136,
+ 2137159,
+ 2137138,
+ 2137158,
+ 2137150,
+ 2137178,
+ 2137184,
+ 2137191,
+ 2137206,
+ 2137208,
+ 2137319,
+ 2137324,
+ 2137328,
+ 2137353,
+ 2137352,
+ 2137323,
+ 2137347,
+ 2137350,
+ 2137386,
+ 2137382,
+ 2137519,
+ 2137379,
+ 2137375,
+ 2137412,
+ 2137365,
+ 2137362,
+ 2137409,
+ 2137407,
+ 2137406,
+ 2137414,
+ 2137416,
+ 2137437,
+ 2137438,
+ 2137444,
+ 2137425,
+ 2137424,
+ 2137433,
+ 2137458,
+ 2137481,
+ 2137479,
+ 2137515,
+ 2137455,
+ 2137466,
+ 2137498,
+ 2137508,
+ 2137513,
+ 2137522,
+ 2137540,
+ 2137537,
+ 2137531,
+ 2137528,
+ 2137530,
+ 2137542,
+ 2137551,
+ 2137538,
+ 2137561,
+ 2137555,
+ 2137592,
+ 2137574,
+ 2137581,
+ 2137583,
+ 2137597,
+ 2137626,
+ 2137627,
+ 2137630,
+ 2137717,
+ 2137721,
+ 2137725,
+ 2137729,
+ 2137736,
+ 2137739,
+ 2137740,
+ 2137746,
+ 2137749,
+ 2137745,
+ 2137757,
+ 2137765,
+ 2137769,
+ 2137784,
+ 2137770,
+ 2137773,
+ 2135905,
+ 2137804,
+ 2137806,
+ 2137807,
+ 2137808,
+ 2137812,
+ 2137820,
+ 2137822,
+ 2137821,
+ 2137824,
+ 2137829,
+ 2137832,
+ 2137839,
+ 2137844,
+ 2137846,
+ 2137847,
+ 2137849,
+ 2137851,
+ 2137852,
+ 2137853,
+ 2137863,
+ 2137864,
+ 2127543,
+ 2137877,
+ 2137889,
+ 2137900,
+ 2137918,
+ 2137930,
+ 2137938,
+ 2137940,
+ 2137955,
+ 2137951,
+ 2137952,
+ 2137953,
+ 2137958,
+ 2137959,
+ 2137964,
+ 2137962,
+ 2137975,
+ 2137970,
+ 2137974,
+ 2138005,
+ 2138012,
+ 2138016,
+ 2119727,
+ 2124231,
+ 2134105,
+ 2126948,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 2119006,
+ 4233460,
+ 4222626,
+ 4234287,
+ 4222443,
+ 4231106,
+ 4221725,
+ 4215721,
+ 2264285,
+ 4216386,
+ 4233484,
+ 2126128,
+ 4229462,
+ 2137559,
+ 4231142,
+ 4218978,
+ 4219600,
+ 4220518,
+ 4216221,
+ 4228187,
+ 4233092,
+ 2119321,
+ 2112846,
+ 4227056,
+ 4227051,
+ 4218813,
+ 4225351,
+ 2117600,
+ 6312831,
+ 4214981,
+ 2133696,
+ 4216240,
+ 2124507,
+ 4217937,
+ 4233076,
+ 4225345,
+ 4219239,
+ 2250868,
+ 2129515,
+ 2130758,
+ 2264822,
+ 4214822,
+ 4217548,
+ 4219762,
+ 2137724,
+ 4229882,
+ 4218359,
+ 2123323,
+ 4222621,
+ 2137780,
+ 4234592,
+ 4224273,
+ 4231623,
+ 4221322,
+ 2123781,
+ 4228521,
+ 4234198,
+ 4231942,
+ 4223946,
+ 4215793,
+ 2120802,
+ 4231278,
+ 4220755,
+ 4223100,
+ 2129505,
+ 4231499,
+ 4220633,
+ 2125338,
+ 4228527,
+ 4228599,
+ 4216040,
+ 4218592,
+ 4221090,
+ 2131235,
+ 2134444,
+ 4233112,
+ 4228949,
+ 4233073,
+ 4231191,
+ 4227040,
+ 4220026,
+ 4231197,
+ 2131948,
+ 4220080,
+ 4220947,
+ 4223310,
+ 4223357,
+ 4229742,
+ 4216396,
+ 4231265,
+ 4215413,
+ 2122772,
+ 4224550,
+ 4231260,
+ 2136658,
+ 4227455,
+ 4234971,
+ 4216132,
+ 4222959,
+ 2126882,
+ 4228856,
+ 2121213,
+ 4231103,
+ 4221146,
+ 4234312,
+ 4221501,
+ 2128926,
+ 4229691,
+ 4223014,
+ 4215243,
+ 4219735,
+ 4221388,
+ 4232090,
+ 4216922,
+ 2122833,
+ 4231469,
+ 4220130,
+ 4222650,
+ 2119777,
+ 2136154,
+ 4216885,
+ 4217952,
+ 4228063,
+ 4230381,
+ 4216920,
+ 2128305,
+ 4234503,
+ 2125830,
+ 4223006,
+ 4216440,
+ 4231233,
+ 4233235,
+ 4231331,
+ 4229902,
+ 4223064,
+ 4221282,
+ 4225456,
+ 2119370,
+ 4223564,
+ 4231193,
+ 4225508,
+ 2118237,
+ 4225976,
+ 2125649,
+ 2134449,
+ 4219709,
+ 4219465,
+ 4221451,
+ 4220874,
+ 4225559,
+ 4231228,
+ 4217499,
+ 4229932,
+ 4218591,
+ 4222997,
+ 2136123,
+ 4228413,
+ 4224933,
+ 4217385,
+ 4218518,
+ 4222177,
+ 4228332,
+ 2136112,
+ 4234322,
+ 2137781,
+ 4215090,
+ 4233477,
+ 4226174,
+ 4232275,
+ 4219144,
+ 4224594,
+ 4223799,
+ 4223380,
+ 4227072,
+ 2130954,
+ 4231292,
+ 2125603,
+ 2126153,
+ 2131182,
+ 4221332,
+ 2131999,
+ 2117972,
+ 4215177,
+ 2118037,
+ 4215204,
+ 4216121,
+ 4216115,
+ 4216292,
+ 4216370,
+ 4216485,
+ 4216843,
+ 4217534,
+ 2234906,
+ 2120795,
+ 4218468,
+ 4219031,
+ 4219753,
+ 4219910,
+ 2123042,
+ 4220291,
+ 4220838,
+ 2123770,
+ 4221083,
+ 2123918,
+ 4222574,
+ 2245584,
+ 2126376,
+ 4223950,
+ 4224260,
+ 4224269,
+ 4224277,
+ 4224659,
+ 4225148,
+ 4225585,
+ 4235165,
+ 4225945,
+ 4226192,
+ 4226222,
+ 4226459,
+ 4226478,
+ 4226463,
+ 4227028,
+ 4227630,
+ 4227725,
+ 4227794,
+ 4227875,
+ 4227957,
+ 4228375,
+ 2131262,
+ 4228994,
+ 4229074,
+ 4229386,
+ 4229551,
+ 4229854,
+ 4229953,
+ 4230618,
+ 4230665,
+ 4230931,
+ 4231146,
+ 4231145,
+ 4231256,
+ 4219464,
+ 4231617,
+ 4232635,
+ 2127714,
+ 4232996,
+ 4233056,
+ 4233069,
+ 4233252,
+ 4234030,
+ 4234135,
+ 4234226,
+ 4234922,
+ 4235164,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 4227750,
+ 4227880,
+ 2119251,
+ 6312873,
+ 4223577,
+ 4222066,
+ 4225800,
+ 4233559,
+ 4219635,
+ 4233488,
+ 6330221,
+ 6320509,
+ 4225663,
+ 4225965,
+ 4219843,
+ 6325215,
+ 4225378,
+ 4215771,
+ 4225991,
+ 4231108,
+ 4226110,
+ 4214986,
+ 4215573,
+ 4216233,
+ 4216494,
+ 4216857,
+ 4217115,
+ 4217896,
+ 4218576,
+ 4218575,
+ 4219457,
+ 4220609,
+ 4221960,
+ 4222499,
+ 4222700,
+ 4225687,
+ 4226013,
+ 4227049,
+ 4228130,
+ 4228953,
+ 4229134,
+ 6326226,
+ 4233753,
+ 4234925,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 4231202,
+ 4231099,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 2118108,
+ 2126233,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 2129546,
+ 2132252,
+ 2134856,
+ 2134664,
+ 2131164,
+ 2117577,
+ 2126011,
+ 2123313,
+ 2123976,
+ 2134777,
+ 2123515,
+ 2121541,
+ 2117160,
+ 2117345,
+ 2117372,
+ 2117376,
+ 2117379,
+ 2117433,
+ 2117462,
+ 2117522,
+ 2117514,
+ 2117530,
+ 2117524,
+ 2117581,
+ 2117696,
+ 2117666,
+ 2117631,
+ 2117662,
+ 2117702,
+ 2117744,
+ 2117698,
+ 2117780,
+ 2117876,
+ 2117848,
+ 2117962,
+ 2117988,
+ 2118045,
+ 2118078,
+ 2118124,
+ 2118165,
+ 2118300,
+ 2118310,
+ 2118336,
+ 2118363,
+ 2118400,
+ 4215559,
+ 2118436,
+ 2118514,
+ 2118547,
+ 2118578,
+ 2118621,
+ 2161166,
+ 2118812,
+ 2118794,
+ 2118825,
+ 2118911,
+ 2119046,
+ 2119513,
+ 2119525,
+ 2119596,
+ 2119624,
+ 2119623,
+ 2161167,
+ 6314074,
+ 2119838,
+ 2119858,
+ 2119947,
+ 2120019,
+ 2120027,
+ 2120029,
+ 2120035,
+ 2120100,
+ 2120122,
+ 2120534,
+ 2120640,
+ 2127151,
+ 2120664,
+ 4217819,
+ 2120734,
+ 2120870,
+ 2120890,
+ 2120949,
+ 2120999,
+ 2121043,
+ 4258321,
+ 2121026,
+ 2121069,
+ 2121144,
+ 2121145,
+ 2121168,
+ 2121505,
+ 2121524,
+ 2121575,
+ 2121655,
+ 2121694,
+ 2121821,
+ 2121861,
+ 2121866,
+ 2121950,
+ 2121941,
+ 2122016,
+ 2121970,
+ 2122001,
+ 2122039,
+ 2122032,
+ 2122136,
+ 2122259,
+ 2122406,
+ 2122741,
+ 2122848,
+ 2122909,
+ 2122958,
+ 2123086,
+ 2123264,
+ 2123285,
+ 2123273,
+ 2123310,
+ 4220446,
+ 2123300,
+ 2123365,
+ 2123351,
+ 2123353,
+ 2123380,
+ 2123379,
+ 2123417,
+ 2123424,
+ 2123442,
+ 2123455,
+ 2123514,
+ 2123534,
+ 6317847,
+ 2123622,
+ 2123707,
+ 4221010,
+ 2123712,
+ 4220929,
+ 2123844,
+ 2123983,
+ 2161171,
+ 2124136,
+ 2161172,
+ 2124184,
+ 2124258,
+ 2124336,
+ 2124395,
+ 2124358,
+ 2124403,
+ 2124414,
+ 2124514,
+ 2124516,
+ 2124758,
+ 2124863,
+ 2124892,
+ 2124934,
+ 2124911,
+ 2125018,
+ 2125060,
+ 2125191,
+ 2125167,
+ 2125206,
+ 2125228,
+ 2125263,
+ 2125304,
+ 2125298,
+ 2125308,
+ 2125369,
+ 2125404,
+ 2125351,
+ 2125372,
+ 2125503,
+ 2125704,
+ 2125749,
+ 2125813,
+ 2125829,
+ 2125831,
+ 2125864,
+ 2125957,
+ 2125995,
+ 2126095,
+ 2126084,
+ 2126172,
+ 2126150,
+ 2126151,
+ 10506718,
+ 2126273,
+ 2126334,
+ 2126513,
+ 2126526,
+ 2126628,
+ 2126634,
+ 2126711,
+ 2126781,
+ 2126793,
+ 2126806,
+ 2126819,
+ 2126802,
+ 2126855,
+ 2126837,
+ 2126886,
+ 2126890,
+ 2126889,
+ 2126894,
+ 4224098,
+ 2126985,
+ 2127007,
+ 2127105,
+ 2127215,
+ 2127490,
+ 2127516,
+ 2127518,
+ 2127515,
+ 2127526,
+ 4224714,
+ 2127686,
+ 2118319,
+ 2127905,
+ 2127950,
+ 2127972,
+ 2127994,
+ 2128176,
+ 4225340,
+ 2128222,
+ 2128229,
+ 2128276,
+ 4225423,
+ 2128283,
+ 2128593,
+ 2128615,
+ 4233046,
+ 2128619,
+ 2128798,
+ 2129086,
+ 2129224,
+ 4226396,
+ 2129335,
+ 2129312,
+ 2129366,
+ 2129490,
+ 2129735,
+ 2129825,
+ 2129853,
+ 2130689,
+ 2130786,
+ 2130815,
+ 2130887,
+ 2130934,
+ 2131016,
+ 2131124,
+ 2131283,
+ 2131289,
+ 2131307,
+ 2161183,
+ 2131376,
+ 4228626,
+ 2161185,
+ 2131975,
+ 2132213,
+ 2132498,
+ 2132535,
+ 2132601,
+ 2132647,
+ 2132670,
+ 2132703,
+ 2132728,
+ 2132726,
+ 2132819,
+ 2132863,
+ 2133232,
+ 2133236,
+ 2133266,
+ 2133366,
+ 2161187,
+ 2133711,
+ 4258340,
+ 6328376,
+ 2134119,
+ 2134238,
+ 2134269,
+ 2134293,
+ 2134311,
+ 2134490,
+ 2134487,
+ 2134494,
+ 2134509,
+ 2134510,
+ 2134500,
+ 2134501,
+ 2134534,
+ 2134544,
+ 2134538,
+ 2134586,
+ 2134592,
+ 2134588,
+ 2134606,
+ 2134617,
+ 2134609,
+ 2134585,
+ 2134631,
+ 2134695,
+ 2134647,
+ 2134648,
+ 2134759,
+ 2134743,
+ 2134745,
+ 2134736,
+ 2161191,
+ 2134741,
+ 2134752,
+ 2134739,
+ 2134821,
+ 2134817,
+ 2134779,
+ 2161192,
+ 2134814,
+ 2134783,
+ 2134813,
+ 2134786,
+ 2134896,
+ 2134871,
+ 2134948,
+ 2134982,
+ 2135006,
+ 2135032,
+ 2135089,
+ 2135109,
+ 2135112,
+ 2135442,
+ 6329990,
+ 2161193,
+ 2135709,
+ 2135727,
+ 2135859,
+ 2135867,
+ 2135875,
+ 2135885,
+ 2135887,
+ 2135889,
+ 4233045,
+ 2136151,
+ 2136165,
+ 2136303,
+ 4233468,
+ 2136359,
+ 4233512,
+ 2136478,
+ 2136654,
+ 2136793,
+ 2136796,
+ 2136949,
+ 2136946,
+ 2136975,
+ 2137009,
+ 2137019,
+ 2137088,
+ 2137456,
+ 2137451,
+ 2137524,
+ 2137625,
+ 2137809,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 6319336,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 4231224,
+ 2132737,
+ 2129379,
+ 2137795,
+ 2125483,
+ 2128269,
+ 2121876,
+ 2125175,
+ 4219240,
+ 2124266,
+ 2125364,
+ 4229392,
+ 4222754,
+ 4216424,
+ 2123234,
+ 2128200,
+ 2131547,
+ 4233215,
+ 4215524,
+ 2132793,
+ 2122733,
+ 2122954,
+ 2127951,
+ 2128448,
+ 2124730,
+ 4225353,
+ 4229526,
+ 2126190,
+ 4225342,
+ 4227077,
+ 4227565,
+ 2128221,
+ 4220561,
+ 2129778,
+ 2125193,
+ 2126528,
+ 4219214,
+ 2127646,
+ 4225984,
+ 4225366,
+ 4215015,
+ 4217956,
+ 2121186,
+ 2122126,
+ 4230408,
+ 2118525,
+ 2119174,
+ 4228183,
+ 2121653,
+ 4219378,
+ 4232110,
+ 4225422,
+ 4234029,
+ 4225665,
+ 2135779,
+ 2123909,
+ 4226625,
+ 2123354,
+ 2118481,
+ 2128017,
+ 2133203,
+ 2123087,
+ 4214702,
+ 4214645,
+ 4216896,
+ 2118345,
+ 2124645,
+ 2119848,
+ 2124751,
+ 4215117,
+ 2122302,
+ 2128208,
+ 2124548,
+ 4232838,
+ 2131548,
+ 2125274,
+ 2136158,
+ 2123462,
+ 2124663,
+ 2129396,
+ 2134858,
+ 6315722,
+ 2134788,
+ 4221314,
+ 4215220,
+ 4219724,
+ 4228827,
+ 4231305,
+ 6328354,
+ 4214857,
+ 4226543,
+ 4231253,
+ 8410025,
+ 6330636,
+ 4229211,
+ 4218614,
+ 6319295,
+ 4231771,
+ 4227009,
+ 6324925,
+ 4232901,
+ 4217779,
+ 6316392,
+ 6318466,
+ 4221883,
+ 4220258,
+ 4230315,
+ 4218316,
+ 4233233,
+ 4218416,
+ 4230860,
+ 4225710,
+ 4216647,
+ 4214929,
+ 4225652,
+ 4214885,
+ 4218618,
+ 4231735,
+ 4221582,
+ 4214436,
+ 4215148,
+ 4220660,
+ 4220961,
+ 4225132,
+ 4226398,
+ 4227075,
+ 4230396,
+ 4232781,
+ 4219639,
+ 4226922,
+ 4214655,
+ 4215794,
+ 4217289,
+ 4229917,
+ 4231338,
+ 4215758,
+ 4230959,
+ 4220884,
+ 4224940,
+ 4227612,
+ 4221295,
+ 4220798,
+ 4229663,
+ 4214280,
+ 4216820,
+ 4221197,
+ 4227191,
+ 4229546,
+ 4231234,
+ 4219758,
+ 4219970,
+ 4227641,
+ 4226511,
+ 4227169,
+ 4214991,
+ 4229781,
+ 4218981,
+ 4215110,
+ 4224826,
+ 4227188,
+ 4230643,
+ 4218541,
+ 4218615,
+ 4227655,
+ 4220995,
+ 4231171,
+ 4222270,
+ 4219794,
+ 4230953,
+ 4223981,
+ 4233234,
+ 4219058,
+ 6316617,
+ 4220304,
+ 4226507,
+ 4229817,
+ 4230311,
+ 4223542,
+ 4228218,
+ 4215302,
+ 4216436,
+ 4219300,
+ 4226185,
+ 4226331,
+ 4232944,
+ 6325565,
+ 4214719,
+ 4219751,
+ 4224710,
+ 4221021,
+ 4227336,
+ 4227126,
+ 4227068,
+ 4215823,
+ 4232867,
+ 4234911,
+ 4234903,
+ 4227183,
+ 4227198,
+ 4222590,
+ 4214917,
+ 4215187,
+ 4215259,
+ 2230542,
+ 4215616,
+ 4232921,
+ 6313385,
+ 4216513,
+ 4216589,
+ 4217003,
+ 4217306,
+ 4217398,
+ 6314686,
+ 4218190,
+ 4218247,
+ 4218313,
+ 4218323,
+ 4218669,
+ 4218776,
+ 4219096,
+ 4219197,
+ 4219390,
+ 4219496,
+ 4219599,
+ 4220189,
+ 4219919,
+ 4220146,
+ 4220253,
+ 4220511,
+ 4220841,
+ 4220903,
+ 4221291,
+ 4221232,
+ 4221351,
+ 4221508,
+ 4221584,
+ 6319112,
+ 4221971,
+ 6319651,
+ 4222737,
+ 4222718,
+ 4222782,
+ 4223487,
+ 4223973,
+ 4224050,
+ 4224095,
+ 4224224,
+ 4224268,
+ 4224626,
+ 4225322,
+ 4225236,
+ 4225466,
+ 4225561,
+ 4225685,
+ 4226290,
+ 4226419,
+ 4226525,
+ 4226613,
+ 4226990,
+ 4227041,
+ 4227162,
+ 4227167,
+ 4227187,
+ 4227184,
+ 4227190,
+ 4227411,
+ 4227466,
+ 4227509,
+ 4227533,
+ 4228082,
+ 4228437,
+ 4228565,
+ 4228890,
+ 4229174,
+ 4229278,
+ 4229336,
+ 4229364,
+ 4229419,
+ 4229435,
+ 4229482,
+ 4229487,
+ 4229661,
+ 4230405,
+ 4230415,
+ 4235086,
+ 4230801,
+ 4230817,
+ 4231250,
+ 4231182,
+ 4231472,
+ 4231510,
+ 4231512,
+ 4231525,
+ 4231539,
+ 4231538,
+ 4231586,
+ 4231599,
+ 4231594,
+ 4231604,
+ 4231610,
+ 4232311,
+ 4232856,
+ 4233021,
+ 6330208,
+ 6330225,
+ 4233228,
+ 4233331,
+ 4233411,
+ 4233797,
+ 4234061,
+ 4234072,
+ 4234182,
+ 4234209,
+ 4234225,
+ 4234568,
+ 4234703,
+ 4235016,
+ 4219505,
+ 4220567,
+ 4219151,
+ 4229219,
+ 6328405,
+ 4231290,
+ 4225263,
+ 2133151,
+ 4232936,
+ 2255185,
+ 10507177,
+ 4224220,
+ 4231243,
+ 8427788,
+ 2275288,
+ 2134707,
+ 2135473,
+ 6315766,
+ 4219892,
+ 2124991,
+ 4223321,
+ 4231264,
+ 6328923,
+ 4220348,
+ 4218752,
+ 6324161,
+ 4215672,
+ 4233203,
+ 4215574,
+ 4227761,
+ 4228051,
+ 4230312,
+ 4231246,
+ 2130621,
+ 6330053,
+ 4233491,
+ 4218619,
+ 4223088,
+ 6314931,
+ 8413544,
+ 10510696,
+ 12607848,
+ 4221418,
+ 8415618,
+ 2123630,
+ 2132434,
+ 4232852,
+ 2118258,
+ 4230980,
+ 4232076,
+ 4227781,
+ 4217810,
+ 4224176,
+ 4226537,
+ 2253346,
+ 4231300,
+ 4232594,
+ 4233171,
+ 4227608,
+ 4215665,
+ 4207618,
+ 2110466,
+ 6304770,
+ 4218494,
+ 2123235,
+ 4220703,
+ 4221535,
+ 4230519,
+ 4233442,
+ 2231223,
+ 4216235,
+ 4228688,
+ 4231174,
+ 4215754,
+ 4215864,
+ 4218917,
+ 4226330,
+ 4218344,
+ 4219602,
+ 4230621,
+ 2268491,
+ 4365643,
+ 2118527,
+ 2121530,
+ 4218960,
+ 4221377,
+ 4339258,
+ 2275214,
+ 4231415,
+ 6330367,
+ 6330711,
+ 4220545,
+ 4223883,
+ 4231121,
+ 2117617,
+ 4225001,
+ 4215159,
+ 4228702,
+ 4225658,
+ 4231239,
+ 6318811,
+ 4216147,
+ 4217169,
+ 4218997,
+ 6316391,
+ 4231118,
+ 6312081,
+ 4222804,
+ 6322804,
+ 4220680,
+ 4227615,
+ 4215164,
+ 4215352,
+ 4219314,
+ 2123587,
+ 4227241,
+ 4229913,
+ 4231267,
+ 2230884,
+ 2132481,
+ 2122294,
+ 4232903,
+ 4233319,
+ 2118707,
+ 2120219,
+ 4229796,
+ 4218341,
+ 4219212,
+ 2122373,
+ 4219815,
+ 4221387,
+ 4222313,
+ 4222511,
+ 4227093,
+ 4227412,
+ 4227922,
+ 4229915,
+ 6327548,
+ 2118719,
+ 4231543,
+ 4227440,
+ 6321425,
+ 4231100,
+ 2275142,
+ 4232086,
+ 2275191,
+ 4218729,
+ 4219809,
+ 2124658,
+ 4228060,
+ 6312372,
+ 4215986,
+ 4215370,
+ 2127138,
+ 2116408,
+ 4217343,
+ 6314495,
+ 2121215,
+ 4229870,
+ 6327022,
+ 4230343,
+ 6327495,
+ 4221729,
+ 6318881,
+ 4222667,
+ 2126778,
+ 2231199,
+ 4219752,
+ 4220316,
+ 6328490,
+ 2118394,
+ 6320693,
+ 2126389,
+ 4231500,
+ 4218673,
+ 4214331,
+ 4215767,
+ 4219784,
+ 2118760,
+ 4226370,
+ 4227026,
+ 4229190,
+ 4231217,
+ 4214607,
+ 4229203,
+ 4231152,
+ 4218337,
+ 4231285,
+ 6328437,
+ 4219456,
+ 4220664,
+ 4217203,
+ 4215517,
+ 4216134,
+ 4217781,
+ 2120710,
+ 4217871,
+ 2282820,
+ 2120729,
+ 4222344,
+ 4225117,
+ 4227222,
+ 2228235,
+ 2120578,
+ 2119630,
+ 4219077,
+ 6313972,
+ 4233470,
+ 6318349,
+ 4221846,
+ 4233439,
+ 2136288,
+ 2266751,
+ 2111373,
+ 4214709,
+ 2111738,
+ 4222328,
+ 4224799,
+ 4231218,
+ 2117307,
+ 2228642,
+ 4215299,
+ 4217867,
+ 4229642,
+ 6326794,
+ 4231109,
+ 2286953,
+ 6328386,
+ 2110751,
+ 2275153,
+ 4219408,
+ 4224731,
+ 4227158,
+ 2132352,
+ 4229792,
+ 4229835,
+ 4233052,
+ 6330204,
+ 2128389,
+ 4227334,
+ 4232891,
+ 4226125,
+ 6323136,
+ 2132650,
+ 4232938,
+ 2129237,
+ 4219463,
+ 2125720,
+ 4226977,
+ 6324793,
+ 4231288,
+ 4231287,
+ 4215373,
+ 4215144,
+ 4219779,
+ 2122743,
+ 2127398,
+ 4230512,
+ 4231169,
+ 4231277,
+ 4231200,
+ 2260919,
+ 4231199,
+ 4230346,
+ 4217866,
+ 6315018,
+ 4217253,
+ 2243838,
+ 4231168,
+ 4231214,
+ 4232842,
+ 4234203,
+ 4217127,
+ 2110503,
+ 4223015,
+ 4231252,
+ 2130219,
+ 4214329,
+ 4221774,
+ 4223149,
+ 6326933,
+ 4220566,
+ 4214820,
+ 4226926,
+ 4225993,
+ 2251479,
+ 4225873,
+ 4231184,
+ 4220913,
+ 4222184,
+ 4233680,
+ 4218731,
+ 4218805,
+ 6316530,
+ 4220701,
+ 2125678,
+ 4229823,
+ 4224756,
+ 4220693,
+ 6317845,
+ 4216988,
+ 4231165,
+ 4231194,
+ 4216682,
+ 4231651,
+ 4215880,
+ 4218397,
+ 4225547,
+ 4224644,
+ 4231273,
+ 4231149,
+ 4222459,
+ 4215118,
+ 4231188,
+ 4225082,
+ 2119457,
+ 2232893,
+ 2118060,
+ 4216080,
+ 2129110,
+ 4228580,
+ 4229892,
+ 6328323,
+ 4231183,
+ 4233776,
+ 4217870,
+ 4231251,
+ 2118686,
+ 2112392,
+ 2117991,
+ 4227209,
+ 4214387,
+ 4218829,
+ 4229773,
+ 2120679,
+ 4226317,
+ 4229511,
+ 6319422,
+ 4227258,
+ 4215642,
+ 4228484,
+ 4231147,
+ 4226587,
+ 4227207,
+ 2117175,
+ 4222801,
+ 4231601,
+ 4214580,
+ 4215332,
+ 4215626,
+ 4218374,
+ 4224340,
+ 4220521,
+ 4228419,
+ 4231295,
+ 4218798,
+ 4235067,
+ 4215609,
+ 2247956,
+ 2121573,
+ 2120172,
+ 4217324,
+ 4229717,
+ 2121369,
+ 4224453,
+ 4217446,
+ 4220279,
+ 4222318,
+ 4230304,
+ 6327456,
+ 4220685,
+ 4229510,
+ 4214297,
+ 4218467,
+ 4218483,
+ 4218634,
+ 4228369,
+ 4214863,
+ 4226536,
+ 4231124,
+ 4231245,
+ 4226111,
+ 4215557,
+ 4218153,
+ 4219569,
+ 4220683,
+ 4225074,
+ 4226603,
+ 4227294,
+ 4228108,
+ 4231334,
+ 6328486,
+ 4233469,
+ 4234604,
+ 4214433,
+ 4218429,
+ 4218840,
+ 4218841,
+ 4219455,
+ 4220699,
+ 6317851,
+ 4215186,
+ 4220009,
+ 4227067,
+ 4215265,
+ 4225256,
+ 4234068,
+ 4234939,
+ 4221401,
+ 6318173,
+ 2110568,
+ 2138036,
+ 4226669,
+ 4234943,
+ 6324488,
+ 4220430,
+ 4224735,
+ 4231159,
+ 4217220,
+ 2118352,
+ 4224754,
+ 4227095,
+ 4219451,
+ 4226315,
+ 2135528,
+ 4226308,
+ 4230797,
+ 2275209,
+ 6318202,
+ 2123777,
+ 4219145,
+ 2132717,
+ 4230968,
+ 4215495,
+ 4220681,
+ 4223798,
+ 6320950,
+ 6320951,
+ 2250367,
+ 4231242,
+ 4220636,
+ 2129802,
+ 4229505,
+ 4233482,
+ 4227020,
+ 6324220,
+ 2133686,
+ 4228653,
+ 4223879,
+ 4235149,
+ 6332301,
+ 4220357,
+ 2138052,
+ 4223440,
+ 6330019,
+ 4234327,
+ 6332063,
+ 2129019,
+ 2121417,
+ 4219280,
+ 2134051,
+ 8414999,
+ 2129922,
+ 2254512,
+ 6312138,
+ 4215066,
+ 6312276,
+ 6312341,
+ 2229800,
+ 4215437,
+ 4215511,
+ 2228362,
+ 2230660,
+ 2110782,
+ 4215775,
+ 4220668,
+ 6313267,
+ 6313444,
+ 2118741,
+ 4216512,
+ 2119993,
+ 4217372,
+ 4217538,
+ 2120566,
+ 4217795,
+ 2120724,
+ 2111458,
+ 2120934,
+ 4218452,
+ 2117192,
+ 4218595,
+ 6316183,
+ 2122452,
+ 4219596,
+ 4219932,
+ 4219846,
+ 4219944,
+ 2255257,
+ 2122523,
+ 6317663,
+ 8414815,
+ 2123363,
+ 4220661,
+ 2241484,
+ 4221085,
+ 4221069,
+ 2124278,
+ 2124166,
+ 2271718,
+ 4217832,
+ 4221371,
+ 2124748,
+ 6319889,
+ 2125335,
+ 4222872,
+ 4222122,
+ 2124970,
+ 4223003,
+ 4223330,
+ 4223547,
+ 2117164,
+ 4223772,
+ 4224202,
+ 2127087,
+ 2127221,
+ 2127340,
+ 2127438,
+ 2113457,
+ 2127722,
+ 2127785,
+ 4225344,
+ 2138054,
+ 6322515,
+ 4235083,
+ 4225454,
+ 4231299,
+ 2128723,
+ 2275261,
+ 4226068,
+ 2114148,
+ 4226128,
+ 4226136,
+ 4226374,
+ 4226403,
+ 4226594,
+ 6323746,
+ 2129480,
+ 6323765,
+ 4226627,
+ 4226700,
+ 2286200,
+ 2229567,
+ 2253418,
+ 4350576,
+ 4227013,
+ 4227014,
+ 6324201,
+ 2130241,
+ 2114643,
+ 4227672,
+ 2130553,
+ 6324857,
+ 4227705,
+ 4227811,
+ 2118009,
+ 2130778,
+ 4228128,
+ 4228029,
+ 4228340,
+ 2114853,
+ 4228487,
+ 2131444,
+ 2228400,
+ 4228919,
+ 4228923,
+ 4229125,
+ 4229053,
+ 2131581,
+ 6326326,
+ 2110510,
+ 2132166,
+ 4229565,
+ 4229851,
+ 4229950,
+ 4229978,
+ 4230515,
+ 4230553,
+ 2115558,
+ 4230708,
+ 2287338,
+ 4231151,
+ 4231303,
+ 4231162,
+ 4231198,
+ 4231221,
+ 4231248,
+ 2133960,
+ 4231297,
+ 4231306,
+ 6328458,
+ 8425610,
+ 10522762,
+ 12619914,
+ 14717066,
+ 6328457,
+ 8425609,
+ 10522761,
+ 12619913,
+ 14717065,
+ 16814217,
+ 18911369,
+ 21008521,
+ 23105673,
+ 25202825,
+ 27299977,
+ 29397129,
+ 2263431,
+ 4232157,
+ 4232636,
+ 2264599,
+ 4232882,
+ 4233049,
+ 2136121,
+ 4233451,
+ 4233475,
+ 4233481,
+ 4233541,
+ 6330693,
+ 4233547,
+ 2136584,
+ 4233823,
+ 4233829,
+ 4233967,
+ 4234008,
+ 2137055,
+ 4234505,
+ 4234504,
+ 4234917,
+ 4234956,
+ 6332168,
+ 4235082,
+ 2275354,
+ 4235111,
+ 4367898,
+ 4342510,
+ 2245358,
+ 4229404,
+ 4221128,
+ 4220667,
+ 4218693,
+ 4215552,
+ 2118537,
+ 4217171,
+ 2161169,
+ 2123858,
+ 4221555,
+ 2243774,
+ 2229777,
+ 4229650,
+ 2117124,
+ 2117125,
+ 2117151,
+ 2117163,
+ 2117167,
+ 2117168,
+ 2117184,
+ 2117185,
+ 2117188,
+ 2117210,
+ 2117247,
+ 2117261,
+ 2117270,
+ 2117305,
+ 2117328,
+ 2117344,
+ 2117373,
+ 2117375,
+ 2117387,
+ 2117397,
+ 2117472,
+ 2117435,
+ 2117449,
+ 2117460,
+ 2117498,
+ 2117501,
+ 2117502,
+ 2117527,
+ 2117566,
+ 2117583,
+ 2117629,
+ 2117632,
+ 2117633,
+ 2117648,
+ 2117659,
+ 2117671,
+ 2117678,
+ 2117719,
+ 2117734,
+ 2117738,
+ 2117691,
+ 2117775,
+ 2117782,
+ 2117788,
+ 2117836,
+ 2117862,
+ 2117865,
+ 2117871,
+ 2117896,
+ 2117899,
+ 2117904,
+ 2117915,
+ 2117918,
+ 2117983,
+ 2118049,
+ 2118076,
+ 6312414,
+ 2118126,
+ 2118132,
+ 2118145,
+ 2118146,
+ 2118163,
+ 2118217,
+ 2118241,
+ 2118246,
+ 2118291,
+ 2118344,
+ 2118384,
+ 2118410,
+ 2118411,
+ 2118462,
+ 2118476,
+ 2118475,
+ 2118497,
+ 2118508,
+ 2118571,
+ 2118618,
+ 2118630,
+ 2118645,
+ 2118695,
+ 2118733,
+ 2118758,
+ 2118763,
+ 2118772,
+ 2118797,
+ 2118806,
+ 2118817,
+ 2118829,
+ 2118841,
+ 2118847,
+ 2118854,
+ 2118861,
+ 2118926,
+ 2118955,
+ 2118965,
+ 2118986,
+ 2119008,
+ 4216161,
+ 2119048,
+ 2119054,
+ 2119176,
+ 2119182,
+ 2119183,
+ 2119223,
+ 2119231,
+ 2119241,
+ 2119243,
+ 2119247,
+ 2119270,
+ 2119273,
+ 2119279,
+ 2119281,
+ 2119282,
+ 2119317,
+ 2119322,
+ 2119340,
+ 2119341,
+ 2119345,
+ 2119369,
+ 2119389,
+ 2119396,
+ 2119434,
+ 2119445,
+ 2119459,
+ 2119471,
+ 2119475,
+ 2119476,
+ 2119500,
+ 2119536,
+ 2119564,
+ 2119580,
+ 2119608,
+ 2119654,
+ 2119661,
+ 2119669,
+ 2119670,
+ 2119679,
+ 2119689,
+ 2119712,
+ 2119730,
+ 2119804,
+ 2119808,
+ 2119849,
+ 2119886,
+ 2119888,
+ 2119892,
+ 2119898,
+ 2119913,
+ 2119948,
+ 2119972,
+ 2119983,
+ 2120033,
+ 2120045,
+ 2120138,
+ 2120146,
+ 2120157,
+ 2120163,
+ 2120164,
+ 2120196,
+ 2120204,
+ 2120227,
+ 2120263,
+ 2120277,
+ 2120291,
+ 2120301,
+ 2120318,
+ 2120350,
+ 2120359,
+ 2120364,
+ 2120371,
+ 2120416,
+ 2120448,
+ 2120473,
+ 2120485,
+ 2120493,
+ 2120513,
+ 2120572,
+ 2120574,
+ 2120575,
+ 2120586,
+ 2120739,
+ 2120747,
+ 2120752,
+ 2120803,
+ 2120809,
+ 2120828,
+ 2120907,
+ 2120914,
+ 2120948,
+ 2120996,
+ 2120998,
+ 2121027,
+ 2121030,
+ 2121034,
+ 2121106,
+ 2121108,
+ 2121113,
+ 2121120,
+ 2121176,
+ 2121184,
+ 2121208,
+ 2121216,
+ 2121234,
+ 2121236,
+ 2121237,
+ 2121240,
+ 2121262,
+ 2121304,
+ 2121323,
+ 2121324,
+ 2121384,
+ 2121386,
+ 2121406,
+ 2121407,
+ 4218571,
+ 2121426,
+ 2121479,
+ 2121486,
+ 2121500,
+ 2121501,
+ 2121506,
+ 2121512,
+ 2121526,
+ 2121531,
+ 2121536,
+ 2121552,
+ 2121560,
+ 2121572,
+ 2121609,
+ 2121628,
+ 2121639,
+ 2121636,
+ 2121647,
+ 2121656,
+ 2121668,
+ 2121673,
+ 2121697,
+ 2121705,
+ 2121709,
+ 2121724,
+ 2121751,
+ 2121754,
+ 2121779,
+ 2121825,
+ 2121855,
+ 2121886,
+ 2121892,
+ 2121904,
+ 2121931,
+ 2121947,
+ 2121976,
+ 2122002,
+ 2122003,
+ 2122004,
+ 2122012,
+ 2122108,
+ 2122125,
+ 2122143,
+ 2122152,
+ 2122178,
+ 2122207,
+ 2122261,
+ 2122281,
+ 2122307,
+ 2122310,
+ 2122316,
+ 2122321,
+ 2122326,
+ 2122436,
+ 2122492,
+ 2122506,
+ 2122509,
+ 2122520,
+ 2122553,
+ 2122562,
+ 2122563,
+ 2122597,
+ 2122612,
+ 2122621,
+ 2122628,
+ 2122631,
+ 2122640,
+ 2122654,
+ 2122705,
+ 2122716,
+ 2122761,
+ 2122768,
+ 2122786,
+ 2122836,
+ 2122843,
+ 2122861,
+ 2122875,
+ 2122942,
+ 2122943,
+ 2122981,
+ 2122999,
+ 2123003,
+ 2123012,
+ 2123030,
+ 2123033,
+ 2123079,
+ 2123111,
+ 2123137,
+ 2123141,
+ 2123202,
+ 2123248,
+ 2123250,
+ 2123308,
+ 2123340,
+ 2123355,
+ 2123356,
+ 2123361,
+ 2123371,
+ 4220535,
+ 2123428,
+ 2123464,
+ 2123500,
+ 2123525,
+ 2123539,
+ 2123571,
+ 2123592,
+ 2123596,
+ 2123638,
+ 2123643,
+ 2123696,
+ 2123698,
+ 2123769,
+ 2123735,
+ 2123737,
+ 2123760,
+ 2123820,
+ 2123824,
+ 2123825,
+ 2123867,
+ 2123890,
+ 2123893,
+ 2123898,
+ 2123908,
+ 2123941,
+ 2123954,
+ 2123984,
+ 2123990,
+ 2124008,
+ 2124013,
+ 2124016,
+ 2124017,
+ 2124028,
+ 2124049,
+ 2124051,
+ 2124085,
+ 2124091,
+ 2124119,
+ 2124131,
+ 2124146,
+ 2124159,
+ 2124160,
+ 2124198,
+ 2124205,
+ 2124215,
+ 2124246,
+ 2124247,
+ 2124289,
+ 2124303,
+ 2124309,
+ 2124328,
+ 2124340,
+ 2124350,
+ 2124357,
+ 2124368,
+ 2124369,
+ 2124374,
+ 2124379,
+ 2124419,
+ 2124425,
+ 2124433,
+ 2124445,
+ 2124446,
+ 2124447,
+ 2124508,
+ 2124519,
+ 2124524,
+ 2124574,
+ 2124580,
+ 2124597,
+ 2124614,
+ 2124630,
+ 2124640,
+ 2124674,
+ 2124734,
+ 2124769,
+ 2124785,
+ 2124816,
+ 2124851,
+ 2124853,
+ 4222010,
+ 2124889,
+ 2124918,
+ 2124923,
+ 2124933,
+ 2124949,
+ 2124956,
+ 2125008,
+ 2125012,
+ 2125014,
+ 2125024,
+ 2125035,
+ 2125036,
+ 2125038,
+ 2125066,
+ 2125070,
+ 2125073,
+ 2125102,
+ 2125143,
+ 2125150,
+ 2125157,
+ 2125186,
+ 2125247,
+ 2125252,
+ 2125258,
+ 2125270,
+ 2125289,
+ 2125346,
+ 2125393,
+ 2125511,
+ 2125514,
+ 2125518,
+ 2125565,
+ 2125594,
+ 2125610,
+ 2125615,
+ 2125619,
+ 2125658,
+ 2125662,
+ 2125666,
+ 2125693,
+ 2125707,
+ 2125709,
+ 2125714,
+ 2125716,
+ 2125722,
+ 2125735,
+ 2125736,
+ 2125750,
+ 2125786,
+ 2125790,
+ 4222969,
+ 2125881,
+ 2125884,
+ 4223050,
+ 2125908,
+ 2125917,
+ 2125918,
+ 2125924,
+ 2125932,
+ 2125950,
+ 2125953,
+ 2125973,
+ 2126007,
+ 2126035,
+ 2126036,
+ 2126040,
+ 2126044,
+ 2126087,
+ 2126112,
+ 2126129,
+ 2126154,
+ 2126162,
+ 2126176,
+ 2126201,
+ 2126226,
+ 4223411,
+ 2126283,
+ 2126291,
+ 2126294,
+ 2126336,
+ 2126365,
+ 2126379,
+ 2126392,
+ 2126401,
+ 2126419,
+ 2126421,
+ 2126422,
+ 2126428,
+ 2126477,
+ 2126509,
+ 2126516,
+ 2126535,
+ 2126587,
+ 2126596,
+ 2126597,
+ 2126632,
+ 2126641,
+ 2126659,
+ 2126700,
+ 2126716,
+ 2126723,
+ 2126725,
+ 2126726,
+ 2126741,
+ 2126750,
+ 2126751,
+ 2126752,
+ 2126758,
+ 2126763,
+ 2126773,
+ 2126775,
+ 2126780,
+ 2126799,
+ 2126809,
+ 2126825,
+ 2126836,
+ 2126845,
+ 2126852,
+ 2126858,
+ 2126874,
+ 2126875,
+ 2126884,
+ 2126888,
+ 2126892,
+ 2126895,
+ 2126896,
+ 2126897,
+ 2126905,
+ 2126916,
+ 2126919,
+ 2126923,
+ 2126925,
+ 2126929,
+ 2126935,
+ 2126950,
+ 2126955,
+ 2126961,
+ 2126976,
+ 2126981,
+ 2126982,
+ 2126983,
+ 2126992,
+ 2127000,
+ 2127004,
+ 2127008,
+ 2127011,
+ 2127016,
+ 2127019,
+ 2127029,
+ 2127039,
+ 2127048,
+ 2127066,
+ 2127070,
+ 2127182,
+ 2127225,
+ 2127233,
+ 2127248,
+ 2127250,
+ 2127251,
+ 2127284,
+ 2127332,
+ 2127353,
+ 2127360,
+ 2127370,
+ 2127381,
+ 2127382,
+ 2127385,
+ 2127390,
+ 2127405,
+ 2127413,
+ 2127427,
+ 2127435,
+ 2127461,
+ 2127469,
+ 2127471,
+ 2127473,
+ 2127476,
+ 2127524,
+ 2127525,
+ 2127557,
+ 2127564,
+ 2127596,
+ 2127612,
+ 2127668,
+ 2127670,
+ 2127708,
+ 2127711,
+ 2127712,
+ 2127730,
+ 2127741,
+ 2127765,
+ 2127786,
+ 2127846,
+ 2127856,
+ 2127860,
+ 2127878,
+ 2127906,
+ 2127917,
+ 2127918,
+ 2127920,
+ 2127925,
+ 2127976,
+ 2128030,
+ 2128072,
+ 2128076,
+ 2128078,
+ 2128100,
+ 2128096,
+ 2128097,
+ 2128114,
+ 2128119,
+ 2128123,
+ 2128177,
+ 4225332,
+ 2128187,
+ 2128189,
+ 2128197,
+ 2128219,
+ 2128220,
+ 2128267,
+ 2128278,
+ 2128280,
+ 2128312,
+ 2128315,
+ 2128330,
+ 2128346,
+ 2128387,
+ 2128393,
+ 2128401,
+ 2128414,
+ 2128429,
+ 2128441,
+ 2128453,
+ 2128460,
+ 2128477,
+ 4225632,
+ 2128493,
+ 2128504,
+ 2128544,
+ 2128547,
+ 2128563,
+ 2128571,
+ 2128572,
+ 2128582,
+ 2128647,
+ 2128660,
+ 2128679,
+ 2128689,
+ 2128711,
+ 2128718,
+ 2128736,
+ 2128745,
+ 2128749,
+ 2128754,
+ 2128785,
+ 2128815,
+ 2128855,
+ 2128857,
+ 2128907,
+ 2128911,
+ 2128928,
+ 2128934,
+ 2128945,
+ 2128950,
+ 2128977,
+ 2128985,
+ 2128999,
+ 2129006,
+ 2129008,
+ 2129084,
+ 2129087,
+ 2129096,
+ 2129097,
+ 2129111,
+ 2129113,
+ 2129117,
+ 2129131,
+ 2129159,
+ 2129160,
+ 2129161,
+ 2129171,
+ 2129181,
+ 2129187,
+ 2129217,
+ 2129235,
+ 2129241,
+ 2129245,
+ 2129274,
+ 2129286,
+ 2129291,
+ 2129292,
+ 2129356,
+ 2129387,
+ 2129393,
+ 2129401,
+ 2129416,
+ 2129425,
+ 2129429,
+ 2129440,
+ 2129479,
+ 2129506,
+ 2129518,
+ 2129523,
+ 2129549,
+ 2129553,
+ 2129560,
+ 2129732,
+ 2129743,
+ 2129746,
+ 2129747,
+ 2129761,
+ 2129809,
+ 2129855,
+ 2129870,
+ 2129887,
+ 2129893,
+ 2129900,
+ 2129902,
+ 2129903,
+ 2129914,
+ 2129934,
+ 2129937,
+ 2129940,
+ 2129956,
+ 2129958,
+ 2129978,
+ 2129980,
+ 2130016,
+ 2130033,
+ 2130037,
+ 2130078,
+ 2130086,
+ 2130091,
+ 2130135,
+ 2130136,
+ 2130198,
+ 2130200,
+ 2130234,
+ 2130250,
+ 2130252,
+ 2130305,
+ 2130308,
+ 2130356,
+ 2130383,
+ 2130425,
+ 2130435,
+ 2130465,
+ 2130482,
+ 2130484,
+ 2130502,
+ 2130507,
+ 2130511,
+ 2130574,
+ 2130606,
+ 2130615,
+ 2130622,
+ 2130630,
+ 2130686,
+ 2130755,
+ 2130769,
+ 2130773,
+ 2130822,
+ 2130829,
+ 2130834,
+ 2130840,
+ 2130857,
+ 2130879,
+ 2130880,
+ 2130922,
+ 2130959,
+ 2130961,
+ 2131018,
+ 2131062,
+ 2131112,
+ 2131119,
+ 2131136,
+ 2131138,
+ 2131184,
+ 2131197,
+ 2131212,
+ 2131252,
+ 2131294,
+ 2131343,
+ 2131383,
+ 2131406,
+ 2131373,
+ 2131474,
+ 2131497,
+ 2131538,
+ 2131555,
+ 2131564,
+ 2131567,
+ 2131578,
+ 2131597,
+ 2131601,
+ 2131608,
+ 2131623,
+ 2131624,
+ 2131706,
+ 2131709,
+ 2131723,
+ 2131731,
+ 2131737,
+ 2131742,
+ 2131752,
+ 2131774,
+ 2131825,
+ 2131848,
+ 2131865,
+ 2131884,
+ 2131885,
+ 2131893,
+ 2131926,
+ 2131947,
+ 2131949,
+ 2131969,
+ 4229123,
+ 2131974,
+ 2131979,
+ 2131988,
+ 2131996,
+ 2132054,
+ 2132063,
+ 2132068,
+ 2132120,
+ 2132138,
+ 2132157,
+ 2132158,
+ 2132170,
+ 2132178,
+ 2132187,
+ 2132208,
+ 2132209,
+ 2132230,
+ 2132248,
+ 2132249,
+ 2132250,
+ 2132263,
+ 2132272,
+ 2132286,
+ 2132347,
+ 2132436,
+ 2132438,
+ 2132453,
+ 2132465,
+ 2132487,
+ 2132495,
+ 2132501,
+ 2132514,
+ 2132558,
+ 2132607,
+ 2132724,
+ 2132767,
+ 2132791,
+ 2132803,
+ 2132804,
+ 2132820,
+ 2132892,
+ 2132894,
+ 2133063,
+ 2133076,
+ 2133107,
+ 2133156,
+ 2133209,
+ 2133217,
+ 2133240,
+ 2133246,
+ 2133275,
+ 2133353,
+ 2133356,
+ 2133380,
+ 2133389,
+ 2133397,
+ 2133414,
+ 2133446,
+ 2133454,
+ 2133476,
+ 2133484,
+ 2133536,
+ 2133579,
+ 2133612,
+ 2133616,
+ 2133626,
+ 2133650,
+ 2133678,
+ 2133683,
+ 2133713,
+ 4230868,
+ 2133753,
+ 2133783,
+ 2133814,
+ 2133926,
+ 2133941,
+ 2133942,
+ 4231110,
+ 2133984,
+ 2133988,
+ 2134006,
+ 2134018,
+ 2134060,
+ 2134084,
+ 2134152,
+ 2134165,
+ 2134169,
+ 2134171,
+ 2134178,
+ 2134196,
+ 2134231,
+ 2134237,
+ 2134260,
+ 2134295,
+ 2134300,
+ 2134321,
+ 2134330,
+ 2134333,
+ 2134344,
+ 2134363,
+ 2134369,
+ 2134372,
+ 2134414,
+ 2134430,
+ 2134440,
+ 2134445,
+ 2134446,
+ 2134450,
+ 2134460,
+ 2134512,
+ 2134519,
+ 2134523,
+ 2134535,
+ 2134568,
+ 2134579,
+ 2134584,
+ 2134595,
+ 2134599,
+ 2134607,
+ 2134624,
+ 2134722,
+ 2134731,
+ 2134732,
+ 2134751,
+ 2134797,
+ 2134805,
+ 2134815,
+ 2134823,
+ 2134855,
+ 2134866,
+ 4232037,
+ 2134890,
+ 2134893,
+ 2134939,
+ 2134970,
+ 2134953,
+ 2134977,
+ 2134986,
+ 2135010,
+ 2135034,
+ 2135037,
+ 2135055,
+ 2135092,
+ 2135103,
+ 2135125,
+ 2135147,
+ 2135154,
+ 2135416,
+ 2135462,
+ 2135465,
+ 4232619,
+ 2135476,
+ 2135485,
+ 2135514,
+ 2135581,
+ 2135617,
+ 2135640,
+ 2135684,
+ 2135716,
+ 2135721,
+ 2135762,
+ 2121138,
+ 2135774,
+ 2135785,
+ 2135793,
+ 2135810,
+ 2135817,
+ 2135898,
+ 2135907,
+ 2135918,
+ 2135923,
+ 2135962,
+ 2135970,
+ 2135989,
+ 2135990,
+ 2136025,
+ 2136030,
+ 2136052,
+ 2136074,
+ 2136078,
+ 2136094,
+ 2136099,
+ 2136107,
+ 2136126,
+ 2136146,
+ 2136147,
+ 2136153,
+ 2136172,
+ 2136248,
+ 2136250,
+ 2136255,
+ 2136264,
+ 2136293,
+ 2136370,
+ 2136371,
+ 2136384,
+ 2136397,
+ 2136412,
+ 2136415,
+ 2136497,
+ 2136505,
+ 2136506,
+ 2136521,
+ 2136578,
+ 2136598,
+ 2136612,
+ 2136615,
+ 2136621,
+ 2136622,
+ 2136630,
+ 2136632,
+ 2136650,
+ 2136662,
+ 2136757,
+ 2136758,
+ 2136825,
+ 2136835,
+ 2136864,
+ 2136883,
+ 2136884,
+ 2136947,
+ 2136953,
+ 2136999,
+ 2137025,
+ 2137031,
+ 2137047,
+ 2137063,
+ 2137067,
+ 2137079,
+ 2137082,
+ 2137085,
+ 2137099,
+ 2137127,
+ 2137130,
+ 2137142,
+ 2137153,
+ 2137171,
+ 2137187,
+ 2137200,
+ 2137207,
+ 2137346,
+ 2137410,
+ 2137415,
+ 2137443,
+ 2137449,
+ 2137468,
+ 2137470,
+ 2137485,
+ 2137521,
+ 2137539,
+ 2137543,
+ 2137558,
+ 2137567,
+ 2137579,
+ 2137588,
+ 2137621,
+ 2137629,
+ 2137764,
+ 2137768,
+ 2137772,
+ 2137831,
+ 2137838,
+ 2137872,
+ 2137874,
+ 2137879,
+ 2137881,
+ 2137903,
+ 2137911,
+ 2137913,
+ 2137921,
+ 2137925,
+ 2137943,
+ 2137960,
+ 2137969,
+ 2137973,
+ 2138000,
+ 2138004,
+ 2138018,
+ 4214320,
+ 2110469,
+ 4214624,
+ 2119200,
+ 2121419,
+ 4218704,
+ 4219044,
+ 2242106,
+ 4221732,
+ 2125817,
+ 2125542,
+ 2126259,
+ 4223531,
+ 4225734,
+ 4226913,
+ 4227185,
+ 4227230,
+ 4231094,
+ 4231676,
+ 4218290,
+ 4233182,
+ 2117587,
+ 2117849,
+ 2117872,
+ 2118083,
+ 2119286,
+ 2124372,
+ 2125057,
+ 2125264,
+ 2125378,
+ 2125529,
+ 2126820,
+ 2126881,
+ 2127212,
+ 2127953,
+ 2131957,
+ 2241534,
+ 2126760,
+ 2112243,
+ 2110683,
+ 2114572,
+ 2113162,
+ 4339140,
+ 2138045,
+ 2116584,
+ 2138044,
+ 2113242,
+ 2112290,
+ 2138046,
+ 2114938,
+ 2113683,
+ 4365885,
+ 2115173,
+ 2113795,
+ 2114195,
+ 2115246,
+ 2110600,
+ 2237961,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 2117448,
+ 2117471,
+ 2117482,
+ 2117484,
+ 2117646,
+ 2117656,
+ 2117697,
+ 2117874,
+ 2117840,
+ 2117894,
+ 2117891,
+ 2117941,
+ 2117973,
+ 2117975,
+ 2110645,
+ 2118090,
+ 2118114,
+ 2118231,
+ 2118348,
+ 2118358,
+ 2118395,
+ 2118428,
+ 2118499,
+ 2118557,
+ 2118674,
+ 2118783,
+ 2118792,
+ 2118992,
+ 2119041,
+ 2119085,
+ 2119118,
+ 2119227,
+ 2119326,
+ 2119337,
+ 2119347,
+ 2119543,
+ 2119548,
+ 2233115,
+ 2119631,
+ 2119652,
+ 2119780,
+ 2119817,
+ 2233454,
+ 2119890,
+ 2119904,
+ 2131521,
+ 2120075,
+ 2120082,
+ 2120131,
+ 2120211,
+ 2120295,
+ 2120311,
+ 2120324,
+ 2120388,
+ 2234557,
+ 2120573,
+ 2120595,
+ 2120722,
+ 2120814,
+ 2234036,
+ 2120826,
+ 2120847,
+ 2120863,
+ 2120867,
+ 2120874,
+ 2120912,
+ 2235956,
+ 2120973,
+ 2121031,
+ 2121089,
+ 2121124,
+ 2121127,
+ 2121163,
+ 2121310,
+ 2121465,
+ 2121472,
+ 2121474,
+ 2121507,
+ 2121533,
+ 2121556,
+ 2121597,
+ 2121741,
+ 2121748,
+ 2121752,
+ 2121781,
+ 2121799,
+ 2121885,
+ 2121940,
+ 2121949,
+ 2122027,
+ 2122172,
+ 2122169,
+ 2122274,
+ 2122330,
+ 2122351,
+ 2122454,
+ 2122620,
+ 2122725,
+ 2122873,
+ 2122948,
+ 2122960,
+ 2123049,
+ 2123165,
+ 2123322,
+ 2123298,
+ 2123307,
+ 2123312,
+ 2123315,
+ 2123336,
+ 2240964,
+ 2123383,
+ 2123384,
+ 2123405,
+ 2123451,
+ 2123483,
+ 2123496,
+ 2123591,
+ 2123649,
+ 2123667,
+ 2123672,
+ 2123675,
+ 2123772,
+ 2123805,
+ 2123939,
+ 2124042,
+ 2124105,
+ 2241988,
+ 2124098,
+ 2124132,
+ 2124197,
+ 2124239,
+ 2112438,
+ 2112451,
+ 2124265,
+ 2124277,
+ 2242367,
+ 2124347,
+ 2242403,
+ 2124436,
+ 2124453,
+ 2112527,
+ 2124571,
+ 2124588,
+ 2124647,
+ 2124713,
+ 2124717,
+ 2124759,
+ 2124799,
+ 2124805,
+ 2124916,
+ 2124952,
+ 2125051,
+ 2124998,
+ 2125105,
+ 2125113,
+ 2125119,
+ 2125144,
+ 2125204,
+ 2125226,
+ 2125275,
+ 2125277,
+ 2125380,
+ 2125406,
+ 2125489,
+ 2125505,
+ 2125584,
+ 2125657,
+ 2125665,
+ 2125694,
+ 2125708,
+ 2125728,
+ 2125756,
+ 2125767,
+ 2125770,
+ 2125808,
+ 2125902,
+ 2125941,
+ 2125988,
+ 2126052,
+ 2126123,
+ 2126110,
+ 2126126,
+ 2126161,
+ 2126184,
+ 2126213,
+ 2126215,
+ 2126266,
+ 2126276,
+ 2126357,
+ 2113087,
+ 2126491,
+ 2246641,
+ 2126631,
+ 2126672,
+ 2126694,
+ 2126754,
+ 2126891,
+ 2126918,
+ 2126946,
+ 2126957,
+ 2127014,
+ 2127017,
+ 2127049,
+ 2127103,
+ 2127127,
+ 2113394,
+ 2127310,
+ 2127362,
+ 2127368,
+ 2127460,
+ 2127489,
+ 2127517,
+ 2127530,
+ 2127542,
+ 2127566,
+ 2127572,
+ 2127590,
+ 2127601,
+ 2127626,
+ 2127641,
+ 2127693,
+ 2127694,
+ 2127738,
+ 2127744,
+ 2127764,
+ 2127840,
+ 2249870,
+ 2127939,
+ 2127982,
+ 2128048,
+ 2249998,
+ 2128045,
+ 2128128,
+ 2128156,
+ 2128174,
+ 2128180,
+ 2128198,
+ 2128249,
+ 2128328,
+ 2250609,
+ 2128340,
+ 2128350,
+ 2128363,
+ 2128365,
+ 2128517,
+ 2251204,
+ 2128590,
+ 2128637,
+ 2128658,
+ 2128685,
+ 2128699,
+ 2128751,
+ 2128897,
+ 2128947,
+ 2252193,
+ 2129005,
+ 2129017,
+ 2129039,
+ 2129044,
+ 2129056,
+ 2129109,
+ 2129201,
+ 2129244,
+ 2129283,
+ 2129318,
+ 2129346,
+ 2129448,
+ 2129815,
+ 2129883,
+ 2129973,
+ 2129975,
+ 2130122,
+ 2130144,
+ 2130163,
+ 2130272,
+ 2130279,
+ 2130280,
+ 2130285,
+ 2130363,
+ 2130378,
+ 2130391,
+ 2114651,
+ 2130528,
+ 2130548,
+ 2255615,
+ 2130593,
+ 2130595,
+ 2130596,
+ 2130601,
+ 2130623,
+ 2130645,
+ 2130685,
+ 2130688,
+ 2130722,
+ 2130733,
+ 2130746,
+ 2130759,
+ 2130813,
+ 2130855,
+ 2130895,
+ 2130897,
+ 2130913,
+ 2130945,
+ 2130950,
+ 2131039,
+ 2131056,
+ 2131059,
+ 2131077,
+ 2131102,
+ 2131130,
+ 2256448,
+ 2131250,
+ 2131230,
+ 2131247,
+ 2131300,
+ 2131322,
+ 2131340,
+ 2131362,
+ 2131403,
+ 2131437,
+ 2131455,
+ 2131460,
+ 2131461,
+ 2131472,
+ 2257140,
+ 2131480,
+ 2131512,
+ 2131543,
+ 2131554,
+ 2114973,
+ 2131573,
+ 2131640,
+ 2131708,
+ 2131847,
+ 2115050,
+ 2131978,
+ 2131984,
+ 2132174,
+ 2258564,
+ 2132274,
+ 2132281,
+ 2132288,
+ 2132372,
+ 2132470,
+ 2132551,
+ 2132573,
+ 2132577,
+ 2132597,
+ 2132688,
+ 2132806,
+ 2132825,
+ 2132841,
+ 2132893,
+ 2133065,
+ 2133096,
+ 2133423,
+ 2133457,
+ 2133463,
+ 2133539,
+ 2133565,
+ 2133627,
+ 2261623,
+ 2115652,
+ 2133754,
+ 2133790,
+ 2133805,
+ 2133844,
+ 2261965,
+ 2133992,
+ 2133998,
+ 2134024,
+ 2134061,
+ 2134167,
+ 2134195,
+ 2134206,
+ 2134212,
+ 2134213,
+ 2134215,
+ 2134255,
+ 2134292,
+ 2134294,
+ 2134306,
+ 2134307,
+ 2134319,
+ 2134324,
+ 2134403,
+ 2134513,
+ 2134857,
+ 2134884,
+ 2134885,
+ 2134947,
+ 2135007,
+ 2135044,
+ 2135091,
+ 2135114,
+ 2135139,
+ 2135153,
+ 2135438,
+ 2135455,
+ 2135468,
+ 2135478,
+ 2135499,
+ 2135504,
+ 2135507,
+ 2116016,
+ 2135518,
+ 2135717,
+ 2135791,
+ 2135886,
+ 2135957,
+ 2135982,
+ 2135994,
+ 2136001,
+ 2136009,
+ 2136027,
+ 2136150,
+ 2136295,
+ 2136408,
+ 2136579,
+ 2136769,
+ 2136771,
+ 2136782,
+ 2136790,
+ 2136834,
+ 2136840,
+ 2116631,
+ 2136877,
+ 2136926,
+ 2136934,
+ 2136964,
+ 2136970,
+ 2136990,
+ 2137038,
+ 2137061,
+ 2137080,
+ 2137123,
+ 2137167,
+ 2137168,
+ 2137189,
+ 2137373,
+ 2137374,
+ 2137411,
+ 2137426,
+ 2137482,
+ 2137494,
+ 2137536,
+ 2137516,
+ 2137532,
+ 2269584,
+ 2137575,
+ 2137607,
+ 2137758,
+ 2137775,
+ 2138007,
+ 2228361,
+ 2117122,
+ 2117135,
+ 2117138,
+ 2117161,
+ 2117166,
+ 2117191,
+ 2228386,
+ 2117201,
+ 2110470,
+ 2228388,
+ 2117225,
+ 2117277,
+ 2110508,
+ 2117308,
+ 2117315,
+ 2117320,
+ 2117355,
+ 2117338,
+ 2117361,
+ 2117365,
+ 2117398,
+ 2117476,
+ 2117431,
+ 2117438,
+ 2117464,
+ 2228755,
+ 2117495,
+ 2117496,
+ 2117506,
+ 2117509,
+ 2117606,
+ 2117554,
+ 2117573,
+ 2117579,
+ 2117586,
+ 2110570,
+ 2117618,
+ 2117651,
+ 2117660,
+ 2117710,
+ 2117715,
+ 2117731,
+ 2117795,
+ 2117768,
+ 2117778,
+ 2117779,
+ 2117781,
+ 2117802,
+ 2229035,
+ 2117809,
+ 2117818,
+ 2117819,
+ 2117828,
+ 2117831,
+ 2117875,
+ 2229121,
+ 2117838,
+ 2229105,
+ 2117844,
+ 2117857,
+ 2110610,
+ 2229241,
+ 2117911,
+ 2229322,
+ 2117984,
+ 2229513,
+ 2118003,
+ 2118019,
+ 2118027,
+ 2110652,
+ 2118040,
+ 2118051,
+ 2118061,
+ 2110663,
+ 2229718,
+ 2118131,
+ 2118162,
+ 2118166,
+ 2230095,
+ 2118229,
+ 2118236,
+ 2118252,
+ 2118263,
+ 2118276,
+ 2118274,
+ 2230279,
+ 2118296,
+ 2230330,
+ 2118308,
+ 2118330,
+ 2118331,
+ 2118346,
+ 2118353,
+ 2230457,
+ 2118391,
+ 2118453,
+ 2118466,
+ 2230652,
+ 2230685,
+ 2118503,
+ 2118522,
+ 2118564,
+ 2118580,
+ 2230995,
+ 2118583,
+ 2118592,
+ 2231069,
+ 2110813,
+ 2110814,
+ 2118613,
+ 2110819,
+ 2118644,
+ 2118692,
+ 2118696,
+ 2110830,
+ 2118723,
+ 2118754,
+ 2118764,
+ 2118805,
+ 2118816,
+ 2118822,
+ 2118830,
+ 2118839,
+ 2118842,
+ 2118851,
+ 2231621,
+ 2118892,
+ 2118895,
+ 2118897,
+ 2118899,
+ 2118912,
+ 2118913,
+ 2118921,
+ 2118972,
+ 2118977,
+ 2110886,
+ 2118983,
+ 2110888,
+ 2119012,
+ 2231777,
+ 2119037,
+ 2119042,
+ 2119057,
+ 2110917,
+ 2119122,
+ 2231957,
+ 2231917,
+ 2119103,
+ 2119113,
+ 2119116,
+ 2119121,
+ 2119133,
+ 2110938,
+ 2119138,
+ 2231908,
+ 2119145,
+ 2119208,
+ 2232159,
+ 2119175,
+ 2119184,
+ 2119216,
+ 2110964,
+ 2119229,
+ 2119232,
+ 2119239,
+ 2119262,
+ 2119264,
+ 2119277,
+ 2110981,
+ 2119304,
+ 2119308,
+ 2119325,
+ 2119336,
+ 2119346,
+ 2119365,
+ 2119373,
+ 2119391,
+ 2119400,
+ 2119414,
+ 2119415,
+ 2232833,
+ 2232917,
+ 2119465,
+ 2232955,
+ 2119493,
+ 2119494,
+ 2119501,
+ 2232948,
+ 2119528,
+ 2119535,
+ 2119539,
+ 2119540,
+ 2119541,
+ 2119547,
+ 2233060,
+ 2233047,
+ 2119578,
+ 2119581,
+ 2119582,
+ 2119592,
+ 2119639,
+ 2233085,
+ 2119628,
+ 2233142,
+ 2233156,
+ 2119646,
+ 2119664,
+ 2111050,
+ 2119672,
+ 2119675,
+ 2119677,
+ 2119684,
+ 2119710,
+ 2119719,
+ 2119737,
+ 2233284,
+ 2119753,
+ 2119756,
+ 2119783,
+ 2119818,
+ 2119819,
+ 2119821,
+ 2119823,
+ 2119824,
+ 2119828,
+ 2119837,
+ 2119850,
+ 2119857,
+ 2233453,
+ 2119875,
+ 2119885,
+ 2119906,
+ 2119923,
+ 2119924,
+ 2119941,
+ 2119942,
+ 2119949,
+ 2119956,
+ 2233815,
+ 2111121,
+ 2119997,
+ 2111129,
+ 2120006,
+ 2111126,
+ 2255913,
+ 2120031,
+ 2233927,
+ 2120053,
+ 2120054,
+ 2120060,
+ 2120095,
+ 2120110,
+ 2120124,
+ 2120136,
+ 2120141,
+ 2120158,
+ 2120167,
+ 2120174,
+ 2234118,
+ 2234178,
+ 2111183,
+ 2120205,
+ 2120215,
+ 2120231,
+ 2120237,
+ 2120293,
+ 2120314,
+ 2120331,
+ 2120348,
+ 2120351,
+ 2120352,
+ 2120354,
+ 2120369,
+ 2120373,
+ 2120378,
+ 2120383,
+ 2120410,
+ 2120412,
+ 2120421,
+ 2120432,
+ 2120430,
+ 2120437,
+ 2120456,
+ 2120471,
+ 2120500,
+ 2120524,
+ 2120530,
+ 2120552,
+ 2120559,
+ 2120577,
+ 2120580,
+ 2234819,
+ 2120598,
+ 2120620,
+ 2111329,
+ 2111330,
+ 2120654,
+ 2120662,
+ 2111340,
+ 2111339,
+ 2120689,
+ 2120701,
+ 2111349,
+ 2120707,
+ 2120745,
+ 2235478,
+ 2120799,
+ 2120807,
+ 2120808,
+ 2120816,
+ 2235693,
+ 2235717,
+ 2235768,
+ 2235746,
+ 2120840,
+ 2120842,
+ 2111425,
+ 2235809,
+ 2235804,
+ 2120864,
+ 2120866,
+ 2120871,
+ 2235794,
+ 2120877,
+ 2120885,
+ 2235831,
+ 2120905,
+ 2235872,
+ 2235955,
+ 2120966,
+ 2120976,
+ 2121003,
+ 2120989,
+ 2120992,
+ 2121009,
+ 2121017,
+ 2111464,
+ 2121057,
+ 2121066,
+ 2111476,
+ 2121072,
+ 2236190,
+ 2111485,
+ 2121096,
+ 2111488,
+ 2121111,
+ 2121136,
+ 2121140,
+ 2236278,
+ 2121169,
+ 2121175,
+ 2236410,
+ 2121188,
+ 2121193,
+ 2111535,
+ 2111542,
+ 2111552,
+ 2121247,
+ 2121278,
+ 2121289,
+ 2111580,
+ 2121302,
+ 2111585,
+ 2121325,
+ 2121326,
+ 2236795,
+ 2121381,
+ 2121388,
+ 2121401,
+ 2121414,
+ 2121433,
+ 2237214,
+ 2121469,
+ 2121480,
+ 2237357,
+ 2121502,
+ 2121543,
+ 2121571,
+ 2121586,
+ 2121598,
+ 2121615,
+ 2121634,
+ 2121671,
+ 2121675,
+ 2121682,
+ 2121683,
+ 2121684,
+ 2121698,
+ 2121710,
+ 2121711,
+ 2121715,
+ 2111767,
+ 2121762,
+ 2121764,
+ 2111770,
+ 2121804,
+ 2121877,
+ 2121896,
+ 2238195,
+ 2121905,
+ 2121918,
+ 2121928,
+ 2121945,
+ 2121966,
+ 2121973,
+ 2122000,
+ 2122009,
+ 2122014,
+ 2122042,
+ 2111855,
+ 2122049,
+ 2122054,
+ 2122080,
+ 2238555,
+ 2122130,
+ 2122131,
+ 2122135,
+ 2122149,
+ 2122157,
+ 2238635,
+ 2122197,
+ 2122205,
+ 2122229,
+ 2238863,
+ 2122275,
+ 2122322,
+ 2122337,
+ 2122340,
+ 2122363,
+ 2122349,
+ 2122355,
+ 2122393,
+ 2122453,
+ 2239160,
+ 2122493,
+ 2122499,
+ 2122512,
+ 2239311,
+ 2239312,
+ 2122546,
+ 2122549,
+ 2122555,
+ 2122556,
+ 2122561,
+ 2122564,
+ 2122574,
+ 2239302,
+ 2122585,
+ 2239517,
+ 2239398,
+ 2122604,
+ 2122649,
+ 2239524,
+ 2122644,
+ 2122685,
+ 2122708,
+ 2122709,
+ 2122720,
+ 2122731,
+ 2122732,
+ 2122738,
+ 2122782,
+ 2122789,
+ 2122793,
+ 2122799,
+ 2122842,
+ 2122845,
+ 2122867,
+ 2122877,
+ 2122887,
+ 2122897,
+ 2122911,
+ 2122955,
+ 2122956,
+ 2122965,
+ 2122967,
+ 2239969,
+ 2122980,
+ 2123007,
+ 2112110,
+ 2123023,
+ 2123028,
+ 2112115,
+ 2123038,
+ 2123058,
+ 2123076,
+ 2123092,
+ 2123115,
+ 2123130,
+ 2123140,
+ 2123146,
+ 2123186,
+ 2123189,
+ 2123192,
+ 2123199,
+ 2123209,
+ 2123220,
+ 2112214,
+ 2123257,
+ 2123260,
+ 2123268,
+ 2123272,
+ 2123297,
+ 2123306,
+ 2123333,
+ 2123345,
+ 2123342,
+ 2112234,
+ 2240963,
+ 2241013,
+ 2240950,
+ 2123370,
+ 2123372,
+ 2123373,
+ 2123387,
+ 2123392,
+ 2123408,
+ 2123410,
+ 2112270,
+ 2123437,
+ 2123441,
+ 2123445,
+ 2112282,
+ 2112284,
+ 2112215,
+ 2123521,
+ 2123538,
+ 2241394,
+ 2123545,
+ 2241491,
+ 2241490,
+ 2123597,
+ 2123604,
+ 2123613,
+ 2241488,
+ 2241508,
+ 2241493,
+ 2123636,
+ 2241498,
+ 2123666,
+ 2241503,
+ 2130787,
+ 2123792,
+ 2123715,
+ 2123720,
+ 2123730,
+ 2123739,
+ 2123767,
+ 2241610,
+ 2241617,
+ 2241611,
+ 2123800,
+ 2123807,
+ 2123821,
+ 2241637,
+ 2123827,
+ 2123835,
+ 2123838,
+ 2123845,
+ 2123849,
+ 2123852,
+ 2123861,
+ 2123863,
+ 2112375,
+ 2123883,
+ 2123886,
+ 2123900,
+ 2123906,
+ 2123920,
+ 2123926,
+ 2112365,
+ 2123928,
+ 2123929,
+ 2123930,
+ 2123932,
+ 2123946,
+ 2123947,
+ 2123956,
+ 2123963,
+ 2124027,
+ 2241764,
+ 2241882,
+ 2123971,
+ 2123973,
+ 2123980,
+ 2123993,
+ 2124004,
+ 2124005,
+ 2124012,
+ 2124023,
+ 2124035,
+ 2124039,
+ 2112391,
+ 2241940,
+ 2112397,
+ 2124102,
+ 2124137,
+ 2124140,
+ 2124154,
+ 2124178,
+ 2112420,
+ 2124182,
+ 2124208,
+ 2124218,
+ 2124220,
+ 2124224,
+ 2124241,
+ 2242105,
+ 2242119,
+ 2242104,
+ 2124259,
+ 2124270,
+ 2124271,
+ 2124275,
+ 2112461,
+ 2124276,
+ 2124286,
+ 2124305,
+ 2124314,
+ 2124317,
+ 2242332,
+ 2124338,
+ 2124339,
+ 2124351,
+ 2124361,
+ 2124410,
+ 2124366,
+ 2124370,
+ 2124388,
+ 2242316,
+ 2124427,
+ 2112496,
+ 2124449,
+ 2242404,
+ 2124459,
+ 2124477,
+ 2124486,
+ 2124500,
+ 2124496,
+ 2124509,
+ 2242559,
+ 2242535,
+ 2124529,
+ 2124530,
+ 2124531,
+ 2124541,
+ 2242596,
+ 2124555,
+ 2124559,
+ 2124560,
+ 2124561,
+ 2242621,
+ 2124567,
+ 2112550,
+ 2124591,
+ 2124618,
+ 2124632,
+ 2124652,
+ 2124661,
+ 2124666,
+ 2124673,
+ 2124699,
+ 2124718,
+ 2243224,
+ 2124733,
+ 2124743,
+ 2124744,
+ 2124745,
+ 2124762,
+ 2124774,
+ 2124775,
+ 2124782,
+ 2124802,
+ 2124810,
+ 2124814,
+ 2124854,
+ 2243711,
+ 2124877,
+ 2124891,
+ 2124909,
+ 2124932,
+ 2124937,
+ 2112707,
+ 2124948,
+ 2124951,
+ 2124973,
+ 2124994,
+ 2112722,
+ 2125020,
+ 2125033,
+ 2125037,
+ 2243840,
+ 2125056,
+ 2125092,
+ 2125094,
+ 2125095,
+ 2124903,
+ 2125103,
+ 2125116,
+ 2125147,
+ 2125152,
+ 2125168,
+ 2125184,
+ 2125185,
+ 2125194,
+ 2125197,
+ 2125201,
+ 2125208,
+ 2243904,
+ 2244090,
+ 2244089,
+ 2244051,
+ 2125227,
+ 2125230,
+ 2125236,
+ 2125250,
+ 2125108,
+ 2125256,
+ 2125262,
+ 2125279,
+ 2125302,
+ 2125366,
+ 2125342,
+ 2112785,
+ 2125362,
+ 2125384,
+ 2125385,
+ 2125387,
+ 2125388,
+ 2125391,
+ 2125395,
+ 2125396,
+ 2125399,
+ 2125411,
+ 2112798,
+ 2125459,
+ 2125479,
+ 2125492,
+ 2125507,
+ 2125621,
+ 2125547,
+ 2125561,
+ 2125563,
+ 2125578,
+ 2125580,
+ 2125592,
+ 2125605,
+ 2125622,
+ 2125628,
+ 2244478,
+ 2125650,
+ 2125655,
+ 2125664,
+ 2125672,
+ 2125712,
+ 2125718,
+ 2125758,
+ 2125727,
+ 2125733,
+ 2125743,
+ 2112868,
+ 2125768,
+ 2125769,
+ 2125801,
+ 2244758,
+ 2125820,
+ 2125824,
+ 2125834,
+ 2125859,
+ 2244867,
+ 2125882,
+ 2125891,
+ 2125895,
+ 2125899,
+ 2112922,
+ 2125925,
+ 2125929,
+ 2125934,
+ 2125942,
+ 2125958,
+ 2125975,
+ 2245062,
+ 2125983,
+ 2126001,
+ 2245118,
+ 2126060,
+ 2126026,
+ 2126033,
+ 2126083,
+ 2126086,
+ 2126088,
+ 2126092,
+ 2112960,
+ 2126127,
+ 2126160,
+ 2126163,
+ 2126174,
+ 2112980,
+ 2126230,
+ 2126208,
+ 2126235,
+ 2126240,
+ 2126242,
+ 2126254,
+ 2126255,
+ 2245564,
+ 2126297,
+ 2126300,
+ 2126343,
+ 2113029,
+ 2126388,
+ 2126393,
+ 2126402,
+ 2126423,
+ 2126435,
+ 2246185,
+ 2126446,
+ 2126447,
+ 2126456,
+ 2126463,
+ 2126478,
+ 2246309,
+ 2126510,
+ 2126512,
+ 2126529,
+ 2113120,
+ 2126540,
+ 2113126,
+ 2113128,
+ 2126579,
+ 2126586,
+ 2126599,
+ 2126610,
+ 2126616,
+ 2126617,
+ 2113155,
+ 2126649,
+ 2126636,
+ 2126643,
+ 2126653,
+ 2126674,
+ 2113172,
+ 2126699,
+ 2246806,
+ 2126702,
+ 2126703,
+ 2126705,
+ 2126721,
+ 2126730,
+ 2126740,
+ 2126744,
+ 2126748,
+ 2126757,
+ 2126777,
+ 2126783,
+ 2126789,
+ 2126795,
+ 2126817,
+ 2126823,
+ 2126841,
+ 2126867,
+ 2126842,
+ 2126849,
+ 2126931,
+ 2126912,
+ 2126915,
+ 2126930,
+ 2126941,
+ 2126977,
+ 2126984,
+ 2247245,
+ 2126994,
+ 2126999,
+ 2127001,
+ 2127009,
+ 2127013,
+ 2127018,
+ 2127033,
+ 2127035,
+ 2127034,
+ 2127062,
+ 2127064,
+ 2127083,
+ 2247510,
+ 2127098,
+ 2247535,
+ 2127136,
+ 2127140,
+ 2127146,
+ 2113367,
+ 2247702,
+ 2127165,
+ 2127166,
+ 2127168,
+ 2127176,
+ 2127184,
+ 2127186,
+ 2127218,
+ 2127217,
+ 2127226,
+ 2127229,
+ 2127230,
+ 2127244,
+ 2113397,
+ 2127266,
+ 2113399,
+ 2127280,
+ 2127287,
+ 2127295,
+ 2127296,
+ 2127302,
+ 2127311,
+ 2127315,
+ 2127325,
+ 2127327,
+ 2127328,
+ 2127335,
+ 2127342,
+ 2127345,
+ 2127363,
+ 2127384,
+ 2127367,
+ 2127375,
+ 2113454,
+ 2248206,
+ 2127379,
+ 2127387,
+ 2127388,
+ 2248247,
+ 2127397,
+ 2127400,
+ 2127420,
+ 2127411,
+ 2248298,
+ 2113481,
+ 2127425,
+ 2248331,
+ 2127433,
+ 2127445,
+ 2113495,
+ 2127470,
+ 2127509,
+ 2127521,
+ 2127520,
+ 2127527,
+ 2127528,
+ 2127535,
+ 2248778,
+ 2127561,
+ 2248789,
+ 2127592,
+ 2248994,
+ 2127639,
+ 2127642,
+ 2127661,
+ 2127669,
+ 2249129,
+ 2113593,
+ 2249189,
+ 2249165,
+ 2127704,
+ 2249246,
+ 2127740,
+ 2249292,
+ 2113624,
+ 2127770,
+ 2127775,
+ 2127778,
+ 2127780,
+ 2127838,
+ 2127839,
+ 2127844,
+ 2127850,
+ 2127852,
+ 2127867,
+ 2249774,
+ 2127877,
+ 2127881,
+ 2127885,
+ 2127897,
+ 2127916,
+ 2127943,
+ 2127978,
+ 2249945,
+ 2128010,
+ 2128020,
+ 2128036,
+ 2128029,
+ 2128031,
+ 2128059,
+ 2128085,
+ 2128102,
+ 2128121,
+ 2128122,
+ 2128126,
+ 2250151,
+ 2128144,
+ 2128155,
+ 2128165,
+ 2128202,
+ 2128216,
+ 2113797,
+ 2128231,
+ 2128242,
+ 2128277,
+ 2128289,
+ 2128297,
+ 2128308,
+ 2128322,
+ 2128327,
+ 2128332,
+ 2128333,
+ 2128342,
+ 2113864,
+ 2250665,
+ 2250676,
+ 2113871,
+ 2128394,
+ 2128405,
+ 2128411,
+ 2113891,
+ 2128440,
+ 2128455,
+ 2128470,
+ 2128473,
+ 2128476,
+ 2128479,
+ 2128487,
+ 2128490,
+ 2128501,
+ 2128514,
+ 2128522,
+ 2128528,
+ 2128556,
+ 2251220,
+ 2113972,
+ 2128569,
+ 2128574,
+ 2113983,
+ 2128588,
+ 2128616,
+ 2128628,
+ 2251492,
+ 2251491,
+ 2251505,
+ 2128701,
+ 2128682,
+ 2128686,
+ 2128687,
+ 2114022,
+ 2114035,
+ 2128767,
+ 2128705,
+ 2114030,
+ 2128725,
+ 2128761,
+ 2128740,
+ 2128742,
+ 2128755,
+ 2251698,
+ 2114055,
+ 2128784,
+ 2128795,
+ 2114062,
+ 2128821,
+ 2128828,
+ 2128837,
+ 2128842,
+ 2251851,
+ 2251876,
+ 2128852,
+ 2128854,
+ 2128858,
+ 2128874,
+ 2128880,
+ 2128899,
+ 2128910,
+ 2128965,
+ 2128970,
+ 2128983,
+ 2128990,
+ 2128993,
+ 2129001,
+ 2129007,
+ 2252334,
+ 2252374,
+ 2252389,
+ 2129062,
+ 2252386,
+ 2129078,
+ 2129079,
+ 2252504,
+ 2129092,
+ 2252482,
+ 2129101,
+ 2252520,
+ 2252579,
+ 2129126,
+ 2252636,
+ 2129141,
+ 2129155,
+ 2114246,
+ 2129170,
+ 2129182,
+ 2252768,
+ 2252756,
+ 2129213,
+ 2129214,
+ 2129216,
+ 2129223,
+ 2252812,
+ 2252795,
+ 2114262,
+ 2129242,
+ 2129258,
+ 2129264,
+ 2114269,
+ 2129279,
+ 2252823,
+ 2129288,
+ 2129303,
+ 2252896,
+ 2129309,
+ 2129319,
+ 2129322,
+ 2129334,
+ 2129344,
+ 2129367,
+ 2129369,
+ 2129382,
+ 2114306,
+ 2253037,
+ 4226569,
+ 2129424,
+ 2129431,
+ 2129437,
+ 2129447,
+ 2129452,
+ 2129477,
+ 2129525,
+ 2129534,
+ 2129542,
+ 2129543,
+ 2114347,
+ 2129562,
+ 2114371,
+ 2129724,
+ 2129723,
+ 2129726,
+ 2129731,
+ 2110657,
+ 2253424,
+ 2253446,
+ 2129763,
+ 2129764,
+ 2129773,
+ 2129789,
+ 2129790,
+ 2129808,
+ 2118011,
+ 2243854,
+ 2129814,
+ 2129820,
+ 2129837,
+ 2253826,
+ 2129859,
+ 2129871,
+ 2129891,
+ 2129906,
+ 2129930,
+ 2129928,
+ 2129942,
+ 2129964,
+ 2129968,
+ 2129987,
+ 2130022,
+ 2130043,
+ 2130073,
+ 2130076,
+ 2130084,
+ 2130087,
+ 2130104,
+ 2254462,
+ 2130117,
+ 2130133,
+ 2130150,
+ 2130189,
+ 2130165,
+ 2130171,
+ 2114542,
+ 2130229,
+ 2130206,
+ 2114544,
+ 2130212,
+ 2130215,
+ 2130220,
+ 2254621,
+ 2130237,
+ 2114568,
+ 2130281,
+ 2114583,
+ 2114588,
+ 2130309,
+ 2114594,
+ 2130328,
+ 2130354,
+ 2130369,
+ 2130371,
+ 2130390,
+ 2130395,
+ 2255069,
+ 2130404,
+ 2255082,
+ 2130412,
+ 2130429,
+ 2130431,
+ 2255215,
+ 2130436,
+ 2255325,
+ 2130457,
+ 2130466,
+ 2255390,
+ 2130492,
+ 2130505,
+ 2130501,
+ 2255448,
+ 2114678,
+ 2114682,
+ 2130519,
+ 2255500,
+ 2130524,
+ 2130531,
+ 2255543,
+ 2114705,
+ 2130557,
+ 2130559,
+ 2130563,
+ 2130570,
+ 2130579,
+ 2130599,
+ 2130600,
+ 2130610,
+ 2130612,
+ 2130618,
+ 2130620,
+ 2130658,
+ 2130664,
+ 2130679,
+ 2130695,
+ 2130696,
+ 2130700,
+ 2130772,
+ 2130715,
+ 2130717,
+ 2130736,
+ 2130748,
+ 2130756,
+ 2130775,
+ 2114750,
+ 2114772,
+ 2114739,
+ 2130836,
+ 2130837,
+ 2130843,
+ 2130845,
+ 2130889,
+ 2130896,
+ 2130900,
+ 2130909,
+ 2130917,
+ 2130937,
+ 2130965,
+ 2255987,
+ 2130967,
+ 2131001,
+ 2131023,
+ 2131025,
+ 2131026,
+ 2131033,
+ 2131034,
+ 2131036,
+ 2256093,
+ 2131045,
+ 2131064,
+ 2131068,
+ 2131073,
+ 2114829,
+ 2131095,
+ 2131110,
+ 2131134,
+ 2114824,
+ 2131150,
+ 2131151,
+ 2131155,
+ 2256485,
+ 2131175,
+ 2131178,
+ 2131183,
+ 2131185,
+ 2131194,
+ 2131227,
+ 2131236,
+ 2131237,
+ 2131243,
+ 2131279,
+ 2131311,
+ 2114883,
+ 2131281,
+ 2131297,
+ 2131298,
+ 2256788,
+ 2131323,
+ 2131325,
+ 2131327,
+ 2131329,
+ 2131334,
+ 2131347,
+ 2131357,
+ 2131359,
+ 2256888,
+ 2256886,
+ 2256887,
+ 2131388,
+ 2131399,
+ 2131402,
+ 2131416,
+ 2131417,
+ 2131423,
+ 2131425,
+ 2131430,
+ 2131446,
+ 2131456,
+ 2131473,
+ 2131486,
+ 2131489,
+ 2131492,
+ 2131495,
+ 2257165,
+ 2131513,
+ 2131516,
+ 2257209,
+ 2131520,
+ 2131539,
+ 2131542,
+ 2131575,
+ 2131591,
+ 2131593,
+ 2131612,
+ 2131613,
+ 2131633,
+ 2131635,
+ 2131649,
+ 2131651,
+ 2131665,
+ 2131669,
+ 2131671,
+ 2131683,
+ 2131686,
+ 2115000,
+ 2131717,
+ 2131719,
+ 2131726,
+ 2131728,
+ 2131743,
+ 2131745,
+ 2131747,
+ 2131761,
+ 2131770,
+ 2131776,
+ 2131779,
+ 2131793,
+ 2131800,
+ 2131812,
+ 2131813,
+ 2131826,
+ 2131836,
+ 2257883,
+ 2257882,
+ 2131879,
+ 2131849,
+ 2131851,
+ 2131859,
+ 2131872,
+ 2257918,
+ 2115045,
+ 2131902,
+ 2257936,
+ 2131905,
+ 2131918,
+ 2131935,
+ 2257993,
+ 2131939,
+ 2131941,
+ 2131942,
+ 2131946,
+ 2131987,
+ 2132008,
+ 2132014,
+ 2132018,
+ 2132028,
+ 2115087,
+ 2132042,
+ 2132056,
+ 2258453,
+ 2258452,
+ 2132073,
+ 2258481,
+ 2132079,
+ 2132128,
+ 2132156,
+ 2132160,
+ 2258579,
+ 2132177,
+ 2132179,
+ 2115137,
+ 2132225,
+ 2258702,
+ 2132279,
+ 2258723,
+ 2132290,
+ 2132293,
+ 2132297,
+ 2258770,
+ 2132322,
+ 2132361,
+ 2132368,
+ 2132383,
+ 2132400,
+ 2132407,
+ 2132440,
+ 2132459,
+ 2115233,
+ 2132467,
+ 2132477,
+ 2132479,
+ 2115247,
+ 2132497,
+ 2132500,
+ 2259333,
+ 2132513,
+ 2132533,
+ 2132542,
+ 2132549,
+ 2132557,
+ 2132568,
+ 2132654,
+ 2132624,
+ 2132663,
+ 2132695,
+ 2132732,
+ 2259588,
+ 2132746,
+ 2132741,
+ 2132749,
+ 2132764,
+ 2132781,
+ 2115340,
+ 2132817,
+ 2132830,
+ 2132854,
+ 2132865,
+ 2132875,
+ 2132884,
+ 2132885,
+ 2133049,
+ 2259891,
+ 2133053,
+ 2259902,
+ 2259911,
+ 2133061,
+ 2133071,
+ 2133079,
+ 2133097,
+ 2133101,
+ 2260152,
+ 2133139,
+ 2133138,
+ 2133145,
+ 2115428,
+ 2133147,
+ 2133206,
+ 2133205,
+ 2260384,
+ 2133233,
+ 2260496,
+ 2133257,
+ 2133262,
+ 2133448,
+ 2133465,
+ 2133516,
+ 2115581,
+ 2133501,
+ 2133510,
+ 2261130,
+ 2133524,
+ 2133526,
+ 2133537,
+ 2133538,
+ 2133543,
+ 2261179,
+ 2115606,
+ 2133558,
+ 2133561,
+ 2133588,
+ 2133602,
+ 2133613,
+ 2133615,
+ 2133656,
+ 2133662,
+ 2133685,
+ 2133691,
+ 2261634,
+ 2115662,
+ 2261747,
+ 2133760,
+ 2133768,
+ 2133803,
+ 2133824,
+ 2133834,
+ 2133848,
+ 2262028,
+ 2133924,
+ 2133940,
+ 2262101,
+ 2133953,
+ 2133958,
+ 2161188,
+ 2133962,
+ 2133965,
+ 2133971,
+ 2133973,
+ 2134001,
+ 2134005,
+ 2134011,
+ 2134028,
+ 2134071,
+ 2262379,
+ 2134083,
+ 2134109,
+ 2262472,
+ 2262473,
+ 2134149,
+ 2134156,
+ 2134160,
+ 2134177,
+ 2115765,
+ 2134192,
+ 2134198,
+ 2134211,
+ 2134216,
+ 2262743,
+ 2134236,
+ 2134239,
+ 2262778,
+ 2134262,
+ 2134258,
+ 2134272,
+ 2134251,
+ 2134270,
+ 2134271,
+ 2134276,
+ 2134278,
+ 2134296,
+ 2134302,
+ 2134327,
+ 2134329,
+ 2134342,
+ 2134343,
+ 2134359,
+ 2134361,
+ 2134388,
+ 2134393,
+ 2134405,
+ 2134451,
+ 2134454,
+ 2134467,
+ 2134468,
+ 2263369,
+ 2263366,
+ 2134508,
+ 2134529,
+ 2134550,
+ 2134551,
+ 2263403,
+ 2134594,
+ 2134602,
+ 2134614,
+ 2134625,
+ 2134629,
+ 2134632,
+ 2263432,
+ 2134652,
+ 2134653,
+ 2134655,
+ 2134665,
+ 2134669,
+ 2134679,
+ 2134681,
+ 2134687,
+ 2134699,
+ 2263482,
+ 2263483,
+ 2134706,
+ 2134719,
+ 2134720,
+ 2134726,
+ 2134734,
+ 2134757,
+ 2134801,
+ 2263582,
+ 2263593,
+ 2134775,
+ 2134825,
+ 2263665,
+ 2263619,
+ 2134865,
+ 2134874,
+ 2134891,
+ 2134897,
+ 2134899,
+ 2134945,
+ 2263705,
+ 2263757,
+ 2134920,
+ 2134923,
+ 2134927,
+ 2134942,
+ 2135029,
+ 2263780,
+ 2263773,
+ 2135025,
+ 2134983,
+ 2135004,
+ 2135015,
+ 2135049,
+ 2135062,
+ 2135063,
+ 2135035,
+ 2135090,
+ 2135099,
+ 2264001,
+ 2264047,
+ 2135149,
+ 2135151,
+ 2135417,
+ 2135430,
+ 2135436,
+ 2135437,
+ 2264336,
+ 2264433,
+ 2135496,
+ 2264571,
+ 2264607,
+ 2135596,
+ 2135603,
+ 2135604,
+ 2264630,
+ 2135612,
+ 2135649,
+ 2264713,
+ 2135682,
+ 2264811,
+ 2135706,
+ 2264882,
+ 2116071,
+ 2135731,
+ 2135738,
+ 2135741,
+ 2116090,
+ 2265080,
+ 2135768,
+ 2135770,
+ 2135773,
+ 2116100,
+ 2135828,
+ 2135843,
+ 2116137,
+ 2135862,
+ 2135873,
+ 2135879,
+ 2135895,
+ 2135899,
+ 2135914,
+ 2265760,
+ 2265777,
+ 2135958,
+ 2135966,
+ 2135985,
+ 2135986,
+ 2135998,
+ 2136012,
+ 2136017,
+ 2136020,
+ 2136024,
+ 2136033,
+ 2136049,
+ 2136068,
+ 2136077,
+ 2136084,
+ 2136086,
+ 2116284,
+ 2266256,
+ 2136114,
+ 2136115,
+ 2136101,
+ 2136135,
+ 2136166,
+ 2136235,
+ 2136237,
+ 2136240,
+ 2266575,
+ 2136247,
+ 2136251,
+ 2136252,
+ 2136258,
+ 2136263,
+ 2136267,
+ 2136289,
+ 2136291,
+ 2136298,
+ 2136304,
+ 2136305,
+ 2136307,
+ 2136328,
+ 2116411,
+ 2266864,
+ 2136342,
+ 2136343,
+ 2266905,
+ 2136346,
+ 2136347,
+ 2136348,
+ 2266960,
+ 2136369,
+ 2136378,
+ 2136379,
+ 2136380,
+ 2136385,
+ 2136390,
+ 2136398,
+ 2136416,
+ 2136483,
+ 2136486,
+ 2136509,
+ 2136511,
+ 2136515,
+ 2136532,
+ 2136537,
+ 2136542,
+ 2267334,
+ 2136560,
+ 2136569,
+ 2136572,
+ 2136586,
+ 2136593,
+ 2136602,
+ 2136608,
+ 2136625,
+ 2136644,
+ 2136652,
+ 2136664,
+ 2116546,
+ 2136751,
+ 2116554,
+ 2136759,
+ 2116562,
+ 2136761,
+ 2267762,
+ 2136774,
+ 2136784,
+ 2136786,
+ 2136789,
+ 2136800,
+ 2136805,
+ 2136809,
+ 2136844,
+ 2136848,
+ 2136850,
+ 2136854,
+ 2136860,
+ 2136875,
+ 2136893,
+ 2116640,
+ 2136907,
+ 2136931,
+ 2136933,
+ 2136939,
+ 2136940,
+ 2136950,
+ 2136951,
+ 2136998,
+ 2137004,
+ 2268635,
+ 2137010,
+ 2137016,
+ 2137022,
+ 2137075,
+ 2137048,
+ 2137053,
+ 2137066,
+ 2137071,
+ 2137070,
+ 2268693,
+ 2268810,
+ 2268745,
+ 2137110,
+ 2137112,
+ 2137113,
+ 2137114,
+ 2137117,
+ 2137122,
+ 2137129,
+ 2268868,
+ 2137137,
+ 2137143,
+ 2137157,
+ 2137180,
+ 2268905,
+ 2137161,
+ 2137162,
+ 2268891,
+ 2137172,
+ 2137176,
+ 2137179,
+ 2137181,
+ 2137183,
+ 2137193,
+ 2137194,
+ 2137195,
+ 2137197,
+ 2137198,
+ 2137202,
+ 2137205,
+ 2137210,
+ 2137318,
+ 2137330,
+ 2137355,
+ 2269143,
+ 2137361,
+ 2137367,
+ 2137368,
+ 2269231,
+ 2116804,
+ 2269210,
+ 2137394,
+ 2116817,
+ 2137418,
+ 2137439,
+ 2137442,
+ 2269433,
+ 2269314,
+ 2137459,
+ 2137462,
+ 2137463,
+ 2137476,
+ 2137497,
+ 2137505,
+ 2137535,
+ 2137525,
+ 2137529,
+ 2137533,
+ 2137545,
+ 2137562,
+ 2137568,
+ 2137571,
+ 2116871,
+ 2137610,
+ 2137602,
+ 2137613,
+ 2137628,
+ 2137723,
+ 2236952,
+ 2137728,
+ 2137733,
+ 2137755,
+ 2270092,
+ 2137789,
+ 2270263,
+ 2137823,
+ 2137855,
+ 2137858,
+ 2116983,
+ 2137859,
+ 2137914,
+ 2137917,
+ 2137926,
+ 2137939,
+ 2137941,
+ 2137944,
+ 2270705,
+ 2137949,
+ 2270722,
+ 2137961,
+ 2137965,
+ 2137968,
+ 2270898,
+ 2128186,
+ 2110996,
+ 2111661,
+ 2112972,
+ 2113500,
+ 2115006,
+ 2115088,
+ 2116478,
+ 2116664,
+ 2116833,
+ 2117132,
+ 2117155,
+ 2117156,
+ 2117241,
+ 2117363,
+ 2117388,
+ 2117401,
+ 2117419,
+ 2117422,
+ 2117425,
+ 2117508,
+ 2117534,
+ 2117559,
+ 2117636,
+ 2117644,
+ 2117708,
+ 2117727,
+ 2117730,
+ 2117751,
+ 2117774,
+ 2117790,
+ 2117794,
+ 2117827,
+ 2117864,
+ 2117873,
+ 2117886,
+ 2117895,
+ 2117900,
+ 2117901,
+ 2117902,
+ 2117939,
+ 2117944,
+ 2118004,
+ 2118020,
+ 2118072,
+ 2118074,
+ 2118088,
+ 2118095,
+ 2118097,
+ 2118099,
+ 2118100,
+ 2118104,
+ 2118111,
+ 2118149,
+ 2118182,
+ 2118184,
+ 2118187,
+ 2118193,
+ 2118194,
+ 2118197,
+ 2118204,
+ 2118234,
+ 2118240,
+ 2118254,
+ 2118264,
+ 2118265,
+ 2118282,
+ 2118284,
+ 2118369,
+ 2118377,
+ 2118385,
+ 2118403,
+ 2118417,
+ 2118431,
+ 2118445,
+ 2118450,
+ 2118461,
+ 2118501,
+ 2118509,
+ 2118521,
+ 2118526,
+ 2118548,
+ 2118553,
+ 2118570,
+ 2118575,
+ 2118586,
+ 2118593,
+ 2118596,
+ 2118597,
+ 2118624,
+ 2118675,
+ 2118698,
+ 2118705,
+ 2118708,
+ 2118709,
+ 2118732,
+ 2118823,
+ 2118826,
+ 2118833,
+ 2118843,
+ 2118862,
+ 2118890,
+ 2118908,
+ 2118917,
+ 2118920,
+ 2118933,
+ 2118951,
+ 2118954,
+ 2118966,
+ 2118993,
+ 2119014,
+ 2119055,
+ 2119058,
+ 2119060,
+ 2119076,
+ 2119090,
+ 2119107,
+ 2119110,
+ 2119123,
+ 2119131,
+ 2119148,
+ 2119150,
+ 2119153,
+ 2119158,
+ 2119160,
+ 2119173,
+ 2119181,
+ 2119185,
+ 2119186,
+ 2119212,
+ 2119221,
+ 2119225,
+ 2119245,
+ 2119252,
+ 2119301,
+ 2119327,
+ 2119334,
+ 2119351,
+ 2119372,
+ 2119375,
+ 2119385,
+ 2119393,
+ 2119403,
+ 2119405,
+ 2119409,
+ 2119431,
+ 2119436,
+ 2119450,
+ 2119451,
+ 2119453,
+ 2119468,
+ 2119470,
+ 2119485,
+ 2119486,
+ 2119519,
+ 2119531,
+ 2119533,
+ 2119546,
+ 2119555,
+ 2119575,
+ 2119598,
+ 2119637,
+ 2119655,
+ 2119693,
+ 2119718,
+ 2119757,
+ 2119759,
+ 2119775,
+ 2119789,
+ 2119807,
+ 2119809,
+ 2119832,
+ 2119868,
+ 2119967,
+ 2119971,
+ 2120025,
+ 2120057,
+ 2120087,
+ 2120111,
+ 2120115,
+ 2120159,
+ 2120177,
+ 2120184,
+ 2120370,
+ 2120376,
+ 2120426,
+ 2120438,
+ 2120475,
+ 2120477,
+ 2120481,
+ 2120504,
+ 2120631,
+ 2120663,
+ 2120672,
+ 2120735,
+ 2120746,
+ 2120748,
+ 2120758,
+ 2120793,
+ 2120796,
+ 2120813,
+ 2120925,
+ 2120961,
+ 2121012,
+ 2121021,
+ 2121049,
+ 2121086,
+ 2121091,
+ 2121159,
+ 2121209,
+ 2121256,
+ 2121266,
+ 2121269,
+ 2121307,
+ 2121320,
+ 2121322,
+ 2121335,
+ 2121344,
+ 2121355,
+ 2121395,
+ 2121405,
+ 2121425,
+ 2121428,
+ 2121429,
+ 2121549,
+ 2121644,
+ 2121706,
+ 2121735,
+ 2121801,
+ 2121812,
+ 2121831,
+ 2121915,
+ 2121924,
+ 2121981,
+ 2121994,
+ 2122006,
+ 2122026,
+ 2122038,
+ 2122078,
+ 2122084,
+ 2122107,
+ 2122109,
+ 2122111,
+ 2122141,
+ 2122168,
+ 2122204,
+ 2122210,
+ 2122213,
+ 2122216,
+ 2122244,
+ 2122247,
+ 2122289,
+ 2122297,
+ 2122301,
+ 2122362,
+ 2122384,
+ 2122408,
+ 2122458,
+ 2122484,
+ 2122518,
+ 2122538,
+ 2122550,
+ 2122566,
+ 2122571,
+ 2122579,
+ 2122609,
+ 2122613,
+ 2122623,
+ 2122626,
+ 2122634,
+ 2122670,
+ 2122671,
+ 2122730,
+ 2122744,
+ 2122745,
+ 2122770,
+ 2122776,
+ 2122784,
+ 2122788,
+ 2122794,
+ 2122805,
+ 2122813,
+ 2122815,
+ 2122834,
+ 2122847,
+ 2122868,
+ 2122896,
+ 2122904,
+ 2122905,
+ 2122924,
+ 2122931,
+ 2122989,
+ 2122992,
+ 2123035,
+ 2123039,
+ 2123054,
+ 2123081,
+ 2123104,
+ 2123154,
+ 2123157,
+ 2123188,
+ 2123198,
+ 2123208,
+ 2123214,
+ 2123216,
+ 2123231,
+ 2123390,
+ 2123403,
+ 2123404,
+ 2123443,
+ 2123456,
+ 2123471,
+ 2123557,
+ 2123573,
+ 2123605,
+ 2123648,
+ 2123663,
+ 2123665,
+ 2123684,
+ 2123697,
+ 2123701,
+ 2123710,
+ 2123816,
+ 2123910,
+ 2124011,
+ 2124021,
+ 2124055,
+ 2124083,
+ 2124088,
+ 2124123,
+ 2124133,
+ 2124200,
+ 2124203,
+ 2124207,
+ 2124261,
+ 2124273,
+ 2124362,
+ 2124373,
+ 2124391,
+ 2124401,
+ 2124463,
+ 2124488,
+ 2124489,
+ 2124547,
+ 2124603,
+ 2124607,
+ 2124669,
+ 2124670,
+ 2124720,
+ 2124791,
+ 2124793,
+ 2124804,
+ 2124809,
+ 2124813,
+ 2124844,
+ 2124874,
+ 2124882,
+ 2124884,
+ 2124921,
+ 2124972,
+ 2124980,
+ 2125010,
+ 2125153,
+ 2125180,
+ 2125241,
+ 2125296,
+ 2125381,
+ 2125427,
+ 2125435,
+ 2125437,
+ 2125449,
+ 2125500,
+ 2125530,
+ 2125531,
+ 2125606,
+ 2125609,
+ 2125616,
+ 2125703,
+ 2125725,
+ 2125742,
+ 2125751,
+ 2125837,
+ 2125856,
+ 2125897,
+ 2125976,
+ 2126000,
+ 2126037,
+ 2126038,
+ 2126149,
+ 2126258,
+ 2126324,
+ 2126359,
+ 2126367,
+ 2126403,
+ 2126415,
+ 2126416,
+ 2126426,
+ 2126432,
+ 2126440,
+ 2126455,
+ 2126468,
+ 2126537,
+ 2126565,
+ 2126580,
+ 2126594,
+ 2126603,
+ 2126622,
+ 2126626,
+ 2126650,
+ 2126651,
+ 2126669,
+ 2126680,
+ 2126695,
+ 2126962,
+ 2127023,
+ 2127071,
+ 2127076,
+ 2127092,
+ 2127099,
+ 2127126,
+ 2127137,
+ 2127167,
+ 2127198,
+ 2127257,
+ 2127268,
+ 2127297,
+ 2127300,
+ 2127308,
+ 2127319,
+ 2127324,
+ 2127329,
+ 2127343,
+ 2127364,
+ 2127372,
+ 2127389,
+ 2127410,
+ 2127416,
+ 2127429,
+ 2127434,
+ 2127455,
+ 2127533,
+ 2127549,
+ 2127577,
+ 2127595,
+ 2127600,
+ 2127609,
+ 2127616,
+ 2127630,
+ 2127650,
+ 2127656,
+ 2127663,
+ 2127673,
+ 2127678,
+ 2127685,
+ 2127690,
+ 2127695,
+ 2127710,
+ 2127716,
+ 2127719,
+ 2127724,
+ 2127748,
+ 2127756,
+ 2127757,
+ 2127766,
+ 2127783,
+ 2127791,
+ 2127799,
+ 2127806,
+ 2127817,
+ 2127825,
+ 2127833,
+ 2127857,
+ 2127927,
+ 2127964,
+ 2127998,
+ 2128024,
+ 2128033,
+ 2128049,
+ 2128051,
+ 2128073,
+ 2128083,
+ 2128140,
+ 2128159,
+ 2128167,
+ 2128168,
+ 2128191,
+ 2128194,
+ 2128212,
+ 2128235,
+ 2128252,
+ 2128299,
+ 2128324,
+ 2128362,
+ 2128386,
+ 2128396,
+ 2128432,
+ 2128442,
+ 2128452,
+ 2128512,
+ 2128518,
+ 2128532,
+ 2128565,
+ 2128573,
+ 2128638,
+ 2128683,
+ 2128759,
+ 2128800,
+ 2128812,
+ 2128816,
+ 2128872,
+ 2128882,
+ 2128888,
+ 2128892,
+ 2128894,
+ 2128905,
+ 2128936,
+ 2128943,
+ 2128962,
+ 2128978,
+ 2128979,
+ 2128987,
+ 2128988,
+ 2128989,
+ 2129010,
+ 2129021,
+ 2129031,
+ 2129054,
+ 2129082,
+ 2129095,
+ 2129107,
+ 2129114,
+ 2129212,
+ 2129229,
+ 2129282,
+ 2129285,
+ 2129293,
+ 2129297,
+ 2129310,
+ 2129331,
+ 2129337,
+ 2129360,
+ 2129381,
+ 2129397,
+ 2129398,
+ 2129455,
+ 2129462,
+ 2129476,
+ 2129519,
+ 2129528,
+ 2129537,
+ 2129725,
+ 2129755,
+ 2129757,
+ 2129765,
+ 2129777,
+ 2129791,
+ 2129792,
+ 2129803,
+ 2129826,
+ 2129917,
+ 2129918,
+ 2129919,
+ 2129927,
+ 2129933,
+ 2129950,
+ 2129977,
+ 2130056,
+ 2130062,
+ 2130127,
+ 2130132,
+ 2130157,
+ 2130160,
+ 2130167,
+ 2130170,
+ 2130174,
+ 2130179,
+ 2130199,
+ 2130224,
+ 2130263,
+ 2130287,
+ 2130291,
+ 2130315,
+ 2130320,
+ 2130331,
+ 2130334,
+ 2130379,
+ 2130389,
+ 2130397,
+ 2130398,
+ 2130401,
+ 2130415,
+ 2130422,
+ 2130432,
+ 2130443,
+ 2130451,
+ 2130452,
+ 2130458,
+ 2130490,
+ 2130500,
+ 2130541,
+ 2130564,
+ 2130569,
+ 2130577,
+ 2130602,
+ 2130608,
+ 2130640,
+ 2130666,
+ 2130671,
+ 2130678,
+ 2130774,
+ 2130808,
+ 2130936,
+ 2130940,
+ 2131032,
+ 2131091,
+ 2131121,
+ 2131133,
+ 2131195,
+ 2131270,
+ 2131286,
+ 2131293,
+ 2131333,
+ 2131352,
+ 2131522,
+ 2131526,
+ 2131648,
+ 2131732,
+ 2131746,
+ 2131758,
+ 2131769,
+ 2131805,
+ 2131835,
+ 2131852,
+ 2131854,
+ 2131863,
+ 2131864,
+ 2131870,
+ 2131875,
+ 2131886,
+ 2131903,
+ 2131913,
+ 2131930,
+ 2131992,
+ 2131995,
+ 2132013,
+ 2132026,
+ 2132037,
+ 2132043,
+ 2132046,
+ 2132053,
+ 2132058,
+ 2132078,
+ 2132122,
+ 2132123,
+ 2132124,
+ 2132173,
+ 2132192,
+ 2132207,
+ 2132238,
+ 2132239,
+ 2132262,
+ 2132277,
+ 2132314,
+ 2132316,
+ 2132331,
+ 2132336,
+ 2132348,
+ 2132389,
+ 2132405,
+ 2132412,
+ 2132437,
+ 2132553,
+ 2132567,
+ 2132583,
+ 2132606,
+ 2132614,
+ 2132630,
+ 2132662,
+ 2132681,
+ 2132689,
+ 2132701,
+ 2132716,
+ 2132725,
+ 2132742,
+ 2132751,
+ 2132753,
+ 2132805,
+ 2132818,
+ 2132845,
+ 2132856,
+ 2132860,
+ 2132862,
+ 2132869,
+ 2132895,
+ 2133067,
+ 2133075,
+ 2133115,
+ 2133178,
+ 2133189,
+ 2133193,
+ 2133202,
+ 2133228,
+ 2133237,
+ 2133239,
+ 2133249,
+ 2133251,
+ 2133271,
+ 2133276,
+ 2133358,
+ 2133393,
+ 2133407,
+ 2133419,
+ 2133426,
+ 2133461,
+ 2133479,
+ 2133489,
+ 2133490,
+ 2133492,
+ 2133505,
+ 2133515,
+ 2133542,
+ 2133553,
+ 2133568,
+ 2133569,
+ 2133581,
+ 2133583,
+ 2133596,
+ 2133601,
+ 2133609,
+ 2133617,
+ 2133621,
+ 2133623,
+ 2133641,
+ 2133648,
+ 2133653,
+ 2133658,
+ 2133671,
+ 2133673,
+ 2133677,
+ 2133736,
+ 2133744,
+ 2133767,
+ 2133784,
+ 2133797,
+ 2133799,
+ 2133804,
+ 2133813,
+ 2133818,
+ 2133827,
+ 2133831,
+ 2133841,
+ 2133845,
+ 2133920,
+ 2133921,
+ 2133922,
+ 2133925,
+ 2134020,
+ 2134043,
+ 2134063,
+ 2134092,
+ 2134107,
+ 2134128,
+ 2134132,
+ 2134137,
+ 2134155,
+ 2134168,
+ 2134176,
+ 2134194,
+ 2134205,
+ 2134217,
+ 2134256,
+ 2134277,
+ 2134309,
+ 2134362,
+ 2134375,
+ 2134394,
+ 2134410,
+ 2134417,
+ 2134421,
+ 2134448,
+ 2134459,
+ 2134461,
+ 2134466,
+ 2134469,
+ 2134528,
+ 2134537,
+ 2134563,
+ 2134646,
+ 2134670,
+ 2134703,
+ 2134715,
+ 2134716,
+ 2134721,
+ 2134723,
+ 2134725,
+ 2134728,
+ 2134804,
+ 2134835,
+ 2134838,
+ 2134872,
+ 2134911,
+ 2134914,
+ 2134922,
+ 2134971,
+ 2134988,
+ 2135014,
+ 2135033,
+ 2135042,
+ 2135053,
+ 2135054,
+ 2135086,
+ 2135116,
+ 2135432,
+ 2135457,
+ 2135487,
+ 2135494,
+ 2135497,
+ 2135505,
+ 2135506,
+ 2135520,
+ 2135524,
+ 2135526,
+ 2135588,
+ 2135601,
+ 2135608,
+ 2135613,
+ 2135636,
+ 2135668,
+ 2135675,
+ 2135679,
+ 2135681,
+ 2135683,
+ 2135689,
+ 2135702,
+ 2135726,
+ 2135811,
+ 2135835,
+ 2135841,
+ 2135842,
+ 2135848,
+ 2135857,
+ 2135911,
+ 2135926,
+ 2135933,
+ 2135935,
+ 2135961,
+ 2135967,
+ 2135980,
+ 2135993,
+ 2136013,
+ 2136032,
+ 2136047,
+ 2136071,
+ 2136102,
+ 2136110,
+ 2136162,
+ 2136163,
+ 2136244,
+ 2136261,
+ 2136322,
+ 2136337,
+ 2136341,
+ 2136373,
+ 2136392,
+ 2136404,
+ 2136414,
+ 2136545,
+ 2136588,
+ 2136592,
+ 2136611,
+ 2136641,
+ 2136657,
+ 2136765,
+ 2136766,
+ 2136833,
+ 2136841,
+ 2136843,
+ 2136845,
+ 2136846,
+ 2136857,
+ 2136885,
+ 2136904,
+ 2136917,
+ 2136936,
+ 2136960,
+ 2136966,
+ 2136976,
+ 2136989,
+ 2137008,
+ 2137023,
+ 2137032,
+ 2137087,
+ 2137090,
+ 2137116,
+ 2137141,
+ 2137156,
+ 2137174,
+ 2137185,
+ 2137192,
+ 2137392,
+ 2137405,
+ 2137450,
+ 2137467,
+ 2137573,
+ 2137577,
+ 2137587,
+ 2137722,
+ 2137730,
+ 2137731,
+ 2137732,
+ 2137776,
+ 2137828,
+ 2137840,
+ 2137842,
+ 2137865,
+ 2137871,
+ 2137876,
+ 2137883,
+ 2137890,
+ 2137894,
+ 2137898,
+ 2137899,
+ 2137908,
+ 2137946,
+ 2137967,
+ 2138014,
+ 2138021,
+ 2228469,
+ 2248196,
+ 2248690,
+ 2260339,
+ 2118029,
+ 4216196,
+ 4218722,
+ 4219208,
+ 4220959,
+ 2133716,
+ 2110942,
+ 2138047,
+ 2138048,
+ 2138049,
+ 2138050,
+ 2269874,
+ 4214286,
+ 4214310,
+ 2228568,
+ 4214643,
+ 4214870,
+ 4215021,
+ 4215147,
+ 2229681,
+ 8409566,
+ 4215293,
+ 2229996,
+ 4215396,
+ 4215409,
+ 6312562,
+ 4215615,
+ 2275155,
+ 4215872,
+ 2231640,
+ 4216220,
+ 6313387,
+ 4216329,
+ 6313646,
+ 8410798,
+ 2275162,
+ 2275164,
+ 4216526,
+ 4216558,
+ 4216790,
+ 4216893,
+ 4216921,
+ 4217167,
+ 6314321,
+ 4217184,
+ 4217186,
+ 4217562,
+ 4217690,
+ 4217715,
+ 4217724,
+ 8412083,
+ 2251212,
+ 4218435,
+ 2275190,
+ 6315747,
+ 4218680,
+ 4218785,
+ 4218845,
+ 4219234,
+ 6316466,
+ 4219384,
+ 2111908,
+ 2111928,
+ 2240066,
+ 2275196,
+ 4220150,
+ 2112092,
+ 2230216,
+ 4220254,
+ 2240491,
+ 4220295,
+ 4220297,
+ 2259380,
+ 4220302,
+ 2112196,
+ 2112203,
+ 4220385,
+ 4220519,
+ 4220526,
+ 6317761,
+ 2275202,
+ 2112133,
+ 4220672,
+ 4220769,
+ 4220868,
+ 4220930,
+ 4221245,
+ 4221278,
+ 2275211,
+ 4221596,
+ 2112499,
+ 2242545,
+ 2275220,
+ 4222008,
+ 6319274,
+ 2138060,
+ 4222436,
+ 2112817,
+ 4222472,
+ 4222578,
+ 6319819,
+ 4222677,
+ 4222683,
+ 4222811,
+ 6319963,
+ 4222820,
+ 4222836,
+ 2244683,
+ 4223550,
+ 2113088,
+ 2111649,
+ 6321098,
+ 4224189,
+ 4224349,
+ 4224444,
+ 2275244,
+ 4224520,
+ 4224612,
+ 4224617,
+ 2275247,
+ 4224823,
+ 4224894,
+ 4225447,
+ 4225457,
+ 4225726,
+ 4226016,
+ 6323280,
+ 4226313,
+ 4226482,
+ 6323634,
+ 4226878,
+ 6324193,
+ 4227090,
+ 2275273,
+ 4227286,
+ 4227337,
+ 4227369,
+ 4227596,
+ 4227611,
+ 4227648,
+ 2275279,
+ 4228052,
+ 4228111,
+ 2275282,
+ 4228330,
+ 2256030,
+ 4228433,
+ 4228451,
+ 4228559,
+ 4228686,
+ 4228706,
+ 4228746,
+ 4229186,
+ 4229239,
+ 4229441,
+ 4229974,
+ 6327126,
+ 4229980,
+ 2115359,
+ 2260028,
+ 4230250,
+ 4230265,
+ 6327498,
+ 4230503,
+ 2115614,
+ 4230915,
+ 6328132,
+ 6328261,
+ 6328276,
+ 4231158,
+ 6328439,
+ 8425591,
+ 31494281,
+ 16814218,
+ 4231336,
+ 4231501,
+ 4231913,
+ 4231989,
+ 4232075,
+ 2275312,
+ 4232653,
+ 4232746,
+ 6330008,
+ 4232871,
+ 8427519,
+ 10524671,
+ 2275173,
+ 4233505,
+ 8427863,
+ 4234152,
+ 4234158,
+ 4234169,
+ 4234248,
+ 4234276,
+ 4234299,
+ 2275341,
+ 4234470,
+ 4234688,
+ 4234690,
+ 2275351,
+ 6330607,
+ 4339773,
+ 6322952,
+ 4220015,
+ 6323262,
+ 4225909,
+ 6321429,
+ 6326813,
+ 6316130,
+ 4223096,
+ 12604329,
+ 4226178,
+ 4232857,
+ 4228692,
+ 4227441,
+ 4232053,
+ 4215980,
+ 4223713,
+ 4221079,
+ 4234155,
+ 4215753,
+ 4220758,
+ 4224294,
+ 8418577,
+ 4225736,
+ 4219706,
+ 6328385,
+ 4233665,
+ 4220327,
+ 4231644,
+ 4233133,
+ 4227730,
+ 6323326,
+ 4223546,
+ 6326277,
+ 4228867,
+ 2136861,
+ 2136876,
+ 2117634,
+ 2118110,
+ 2118407,
+ 2120684,
+ 4218570,
+ 2123294,
+ 2123543,
+ 2125898,
+ 4215262,
+ 2119009,
+ 2124858,
+ 2128480,
+ 2253644,
+ 2131971,
+ 2135467,
+ 2135893,
+ 2268733,
+ 2270746,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ 6319778,
+ 8413682,
+ 6325778,
+ 4230015,
+ 2117173,
+ 2117212,
+ 2117219,
+ 2117224,
+ 2117236,
+ 2117237,
+ 2117271,
+ 2117295,
+ 2117339,
+ 2117346,
+ 2117352,
+ 2117359,
+ 2117374,
+ 2117378,
+ 2117384,
+ 2117394,
+ 2117399,
+ 2117427,
+ 2117429,
+ 2117440,
+ 2117442,
+ 2117451,
+ 2117452,
+ 2117458,
+ 2117475,
+ 2117486,
+ 2117489,
+ 2117497,
+ 2117505,
+ 2117513,
+ 2117516,
+ 2117518,
+ 2117520,
+ 2117523,
+ 2117529,
+ 2117535,
+ 2117561,
+ 2117563,
+ 2117564,
+ 2117565,
+ 2117568,
+ 2117569,
+ 2117574,
+ 2117576,
+ 2117580,
+ 2117596,
+ 2117602,
+ 2117616,
+ 2117628,
+ 2117639,
+ 2117642,
+ 2117655,
+ 2117661,
+ 2117680,
+ 2117682,
+ 2117683,
+ 2117685,
+ 2117701,
+ 2117706,
+ 2117713,
+ 2117714,
+ 2117721,
+ 2117728,
+ 2117735,
+ 2117741,
+ 2117745,
+ 2117761,
+ 2117763,
+ 2117764,
+ 2117766,
+ 2117770,
+ 2117776,
+ 2117787,
+ 2117791,
+ 2117792,
+ 2117793,
+ 2117807,
+ 2117808,
+ 2117817,
+ 2117821,
+ 2117824,
+ 2117843,
+ 2117852,
+ 2117853,
+ 2117855,
+ 2117858,
+ 2117860,
+ 2117878,
+ 2117882,
+ 4215026,
+ 2117913,
+ 2117916,
+ 2117917,
+ 2117923,
+ 2117927,
+ 2117928,
+ 2117932,
+ 2117933,
+ 2117935,
+ 2117937,
+ 2117940,
+ 2117945,
+ 2117954,
+ 2117967,
+ 2117971,
+ 2117976,
+ 2117990,
+ 2118014,
+ 2118030,
+ 2118079,
+ 2118082,
+ 2118098,
+ 2118101,
+ 2118117,
+ 2118130,
+ 2118135,
+ 2118168,
+ 2118178,
+ 2118213,
+ 2118232,
+ 2118239,
+ 2118272,
+ 2118277,
+ 2118293,
+ 2118294,
+ 2118295,
+ 2118298,
+ 2118309,
+ 2118311,
+ 2118320,
+ 2118326,
+ 2118327,
+ 2118328,
+ 2118333,
+ 2118340,
+ 2118342,
+ 2118351,
+ 2118356,
+ 2118364,
+ 2118373,
+ 2118376,
+ 2118378,
+ 2118380,
+ 2118388,
+ 2118390,
+ 2118412,
+ 2118419,
+ 2118424,
+ 2118427,
+ 2118430,
+ 2118437,
+ 2118439,
+ 2118440,
+ 2118441,
+ 2118443,
+ 2118444,
+ 2118448,
+ 2118460,
+ 2118489,
+ 2118491,
+ 4215653,
+ 2118531,
+ 2118535,
+ 2118536,
+ 2118542,
+ 2118561,
+ 2118581,
+ 2118584,
+ 2118589,
+ 2118607,
+ 2118610,
+ 2118611,
+ 2118622,
+ 4215776,
+ 2118631,
+ 2118658,
+ 2118682,
+ 2118689,
+ 2118703,
+ 2118724,
+ 2118727,
+ 2118735,
+ 2118750,
+ 2118756,
+ 2118759,
+ 2118761,
+ 2118765,
+ 2118766,
+ 2118785,
+ 2118787,
+ 2118789,
+ 2118793,
+ 2118801,
+ 2118815,
+ 2118858,
+ 2118880,
+ 2118902,
+ 2118910,
+ 2118924,
+ 2118925,
+ 2118962,
+ 2118971,
+ 2118973,
+ 2118985,
+ 2118989,
+ 2119000,
+ 2119002,
+ 2119003,
+ 2119039,
+ 2119059,
+ 2119063,
+ 2119075,
+ 2119105,
+ 2119115,
+ 2119127,
+ 2119128,
+ 2119134,
+ 2119167,
+ 4216325,
+ 2119178,
+ 2119193,
+ 2119219,
+ 2119228,
+ 2119233,
+ 2119235,
+ 2119236,
+ 2119238,
+ 2119265,
+ 2119266,
+ 2119267,
+ 2119285,
+ 2119300,
+ 2119307,
+ 2119335,
+ 2119339,
+ 2119358,
+ 2119371,
+ 2119376,
+ 2119388,
+ 2119397,
+ 2119398,
+ 2119399,
+ 2119425,
+ 2119426,
+ 2119441,
+ 2119456,
+ 2119458,
+ 2119460,
+ 2119461,
+ 2119466,
+ 2119487,
+ 2119506,
+ 2119522,
+ 2119527,
+ 2119534,
+ 2119537,
+ 2119545,
+ 2119550,
+ 2119553,
+ 2119572,
+ 2119577,
+ 2119583,
+ 2119585,
+ 2119573,
+ 2119591,
+ 2119593,
+ 2119613,
+ 2119645,
+ 2119657,
+ 2119678,
+ 2119683,
+ 2119688,
+ 2119649,
+ 2119692,
+ 2119707,
+ 2119711,
+ 2119725,
+ 2119743,
+ 2119760,
+ 2119765,
+ 2119784,
+ 2119800,
+ 2119815,
+ 2119816,
+ 2119820,
+ 2119830,
+ 2119840,
+ 2119841,
+ 2119842,
+ 2119846,
+ 2119876,
+ 2119874,
+ 2119880,
+ 2119894,
+ 2119901,
+ 2119905,
+ 4217094,
+ 2119954,
+ 2119955,
+ 2119965,
+ 2119969,
+ 2119976,
+ 2119984,
+ 2119987,
+ 2119989,
+ 2119990,
+ 2119999,
+ 2120003,
+ 2120018,
+ 2120030,
+ 2120043,
+ 2120047,
+ 2120050,
+ 2120059,
+ 2120076,
+ 2120078,
+ 2120085,
+ 2120103,
+ 2120109,
+ 2120112,
+ 2120119,
+ 2120129,
+ 2120132,
+ 2120175,
+ 2120178,
+ 2120180,
+ 2120183,
+ 2120192,
+ 2120206,
+ 2120210,
+ 2120222,
+ 2120228,
+ 2120232,
+ 2120234,
+ 2120240,
+ 2120260,
+ 2120261,
+ 2120264,
+ 2120268,
+ 2120272,
+ 2120286,
+ 2120315,
+ 2120336,
+ 2120339,
+ 2120342,
+ 2120345,
+ 2120379,
+ 2120390,
+ 2120392,
+ 2120399,
+ 2120445,
+ 2120449,
+ 2120523,
+ 2120542,
+ 2120558,
+ 2120582,
+ 2120590,
+ 2120592,
+ 2120593,
+ 2120596,
+ 2120616,
+ 2120617,
+ 2120621,
+ 2120623,
+ 2120625,
+ 2120626,
+ 2120634,
+ 2120636,
+ 2120641,
+ 2120653,
+ 2120655,
+ 2120665,
+ 2120666,
+ 2120687,
+ 2120692,
+ 2120716,
+ 2120727,
+ 2120742,
+ 2120750,
+ 2120754,
+ 2120757,
+ 2120794,
+ 2120820,
+ 2120821,
+ 2120827,
+ 2120829,
+ 2120839,
+ 2120850,
+ 2120861,
+ 2120882,
+ 2120884,
+ 2120919,
+ 2120942,
+ 2120945,
+ 2120946,
+ 2120978,
+ 2120995,
+ 2121023,
+ 2121032,
+ 2121045,
+ 2121041,
+ 2121055,
+ 2121056,
+ 2121058,
+ 2121060,
+ 2121081,
+ 2121082,
+ 2121087,
+ 2121098,
+ 2121107,
+ 2121109,
+ 2121115,
+ 2121119,
+ 2121131,
+ 2121155,
+ 2121166,
+ 2121177,
+ 2121223,
+ 2121229,
+ 2121248,
+ 2121291,
+ 2121296,
+ 2121297,
+ 2121308,
+ 2121328,
+ 2121358,
+ 2121378,
+ 2121380,
+ 2121393,
+ 2121420,
+ 2121422,
+ 2121436,
+ 2121438,
+ 2121445,
+ 2121451,
+ 2121478,
+ 2121497,
+ 2121508,
+ 2121515,
+ 2121516,
+ 2121518,
+ 2121520,
+ 2121535,
+ 2121540,
+ 2121563,
+ 2121568,
+ 2121583,
+ 2121588,
+ 2121589,
+ 2121592,
+ 2121594,
+ 2121613,
+ 2121622,
+ 2121629,
+ 2121643,
+ 2121648,
+ 2121649,
+ 2121672,
+ 2121680,
+ 2121681,
+ 2121704,
+ 2121708,
+ 2121714,
+ 2121718,
+ 2121722,
+ 2121738,
+ 2121747,
+ 2121759,
+ 2121773,
+ 2121792,
+ 2121800,
+ 2121809,
+ 2121814,
+ 2121815,
+ 2121841,
+ 2121854,
+ 2121858,
+ 2121862,
+ 2121864,
+ 2121870,
+ 2121873,
+ 2121875,
+ 2121880,
+ 4219038,
+ 2121890,
+ 2121893,
+ 2121911,
+ 2121922,
+ 2121929,
+ 2121930,
+ 2121934,
+ 2121935,
+ 2121954,
+ 2121957,
+ 2121980,
+ 2121986,
+ 2121991,
+ 2121996,
+ 2122007,
+ 2122018,
+ 2122033,
+ 2122037,
+ 2122041,
+ 2122053,
+ 2122057,
+ 2122092,
+ 2122098,
+ 2122104,
+ 2122112,
+ 2122113,
+ 2122115,
+ 2122116,
+ 2122123,
+ 2122140,
+ 2122144,
+ 2122154,
+ 2122176,
+ 2122177,
+ 2122190,
+ 2122191,
+ 2122206,
+ 2122209,
+ 2122215,
+ 2122217,
+ 2122220,
+ 2122221,
+ 2122223,
+ 2122241,
+ 2122243,
+ 2122268,
+ 2122272,
+ 2122279,
+ 2122283,
+ 2122306,
+ 2122308,
+ 2122320,
+ 2122324,
+ 2122332,
+ 2122365,
+ 2122381,
+ 2122382,
+ 2122383,
+ 2122419,
+ 2122422,
+ 2122423,
+ 2122426,
+ 2122430,
+ 2122431,
+ 2122446,
+ 2122474,
+ 2122482,
+ 2122500,
+ 2122507,
+ 2122515,
+ 2122537,
+ 2122541,
+ 2122570,
+ 2122578,
+ 2122580,
+ 2122584,
+ 2122587,
+ 2122598,
+ 2122605,
+ 2122616,
+ 2122645,
+ 2122650,
+ 2122660,
+ 2122662,
+ 2122669,
+ 2122689,
+ 2122693,
+ 2122696,
+ 2122702,
+ 2122707,
+ 2122739,
+ 2122762,
+ 2122800,
+ 2122827,
+ 2122831,
+ 2122835,
+ 2122844,
+ 2122849,
+ 2122851,
+ 2122885,
+ 2122895,
+ 2122907,
+ 2122913,
+ 2122915,
+ 2122918,
+ 2122920,
+ 2122941,
+ 2122953,
+ 2122961,
+ 2122985,
+ 2122986,
+ 2122997,
+ 2123009,
+ 2123016,
+ 2123017,
+ 2123018,
+ 2123027,
+ 2123046,
+ 2123057,
+ 2123066,
+ 2123068,
+ 2123069,
+ 2123075,
+ 2123088,
+ 2123090,
+ 2123103,
+ 2123133,
+ 2123160,
+ 2123168,
+ 2123171,
+ 2123174,
+ 2123182,
+ 2123187,
+ 2123222,
+ 2123224,
+ 4220383,
+ 2123252,
+ 2123253,
+ 2123262,
+ 2123263,
+ 2123277,
+ 2123281,
+ 2123282,
+ 2123286,
+ 2123293,
+ 2123299,
+ 2123302,
+ 2123305,
+ 2123321,
+ 2123319,
+ 2123328,
+ 2123334,
+ 2123338,
+ 2123352,
+ 2123360,
+ 2123381,
+ 2123391,
+ 2123385,
+ 2123388,
+ 2123418,
+ 2123419,
+ 2123420,
+ 2123423,
+ 4220597,
+ 2123458,
+ 2123459,
+ 2123468,
+ 2123470,
+ 2123476,
+ 2123487,
+ 2123499,
+ 2123502,
+ 2123527,
+ 2123548,
+ 2123552,
+ 2123554,
+ 2123582,
+ 2123589,
+ 2123628,
+ 2123652,
+ 2123662,
+ 2123670,
+ 2123673,
+ 2123708,
+ 2123709,
+ 2123714,
+ 2123717,
+ 2123721,
+ 2123740,
+ 2123745,
+ 2123750,
+ 2123762,
+ 2123766,
+ 2123796,
+ 2123801,
+ 2123815,
+ 2123823,
+ 2123839,
+ 2123850,
+ 2123864,
+ 2123887,
+ 2123888,
+ 2123889,
+ 2123897,
+ 2123899,
+ 2123912,
+ 2123937,
+ 2123945,
+ 2123950,
+ 2123985,
+ 2123987,
+ 2123996,
+ 2123997,
+ 2124010,
+ 2124022,
+ 2124029,
+ 2124038,
+ 2124041,
+ 2124048,
+ 2124054,
+ 2124081,
+ 2124101,
+ 2124110,
+ 2124134,
+ 2124144,
+ 2124145,
+ 2124155,
+ 2124173,
+ 2124193,
+ 2124216,
+ 2124229,
+ 2124232,
+ 4221438,
+ 2124288,
+ 2124291,
+ 2124320,
+ 2124324,
+ 2124343,
+ 4221525,
+ 2124394,
+ 2124417,
+ 2124422,
+ 2124423,
+ 2124443,
+ 2124464,
+ 2124465,
+ 2124468,
+ 2124478,
+ 2124479,
+ 2124492,
+ 2124501,
+ 2124502,
+ 2124528,
+ 2124540,
+ 2124546,
+ 2124550,
+ 2124551,
+ 2124553,
+ 2124584,
+ 2124587,
+ 2124598,
+ 2124621,
+ 2124626,
+ 2124637,
+ 2124651,
+ 2124654,
+ 2124656,
+ 2124677,
+ 2124695,
+ 2124703,
+ 2124704,
+ 2124706,
+ 2124707,
+ 2124712,
+ 2124716,
+ 2124728,
+ 2124729,
+ 2124739,
+ 2124740,
+ 2124771,
+ 2124818,
+ 2124825,
+ 2124831,
+ 2124838,
+ 2124839,
+ 2124840,
+ 2124846,
+ 2124859,
+ 2124875,
+ 2124879,
+ 2124907,
+ 2124920,
+ 2124935,
+ 2124959,
+ 2124976,
+ 2124978,
+ 2125005,
+ 2125007,
+ 2125009,
+ 2125031,
+ 2125042,
+ 2125044,
+ 2125063,
+ 2125071,
+ 2125075,
+ 2125082,
+ 2125096,
+ 2125151,
+ 2125159,
+ 2125202,
+ 2125207,
+ 2125239,
+ 2125245,
+ 2125280,
+ 2125282,
+ 2125285,
+ 2125295,
+ 2125300,
+ 2125312,
+ 2125316,
+ 2125371,
+ 2125394,
+ 2125405,
+ 2125410,
+ 2125416,
+ 2125453,
+ 2125465,
+ 2125472,
+ 2125485,
+ 2125486,
+ 2125491,
+ 2125499,
+ 2125504,
+ 2125512,
+ 2125517,
+ 2125519,
+ 2125549,
+ 2125550,
+ 2125572,
+ 2125576,
+ 2125581,
+ 2125590,
+ 2125595,
+ 2125627,
+ 2125613,
+ 2125647,
+ 2125651,
+ 2125661,
+ 2125676,
+ 2125699,
+ 2125715,
+ 2125734,
+ 2125744,
+ 2125765,
+ 2125800,
+ 2125821,
+ 2125847,
+ 2125871,
+ 2125876,
+ 2125879,
+ 2125892,
+ 2125896,
+ 2125909,
+ 2125972,
+ 2125974,
+ 2125979,
+ 2126004,
+ 2126074,
+ 2126085,
+ 2126091,
+ 2126125,
+ 2126136,
+ 2126145,
+ 2126155,
+ 4223314,
+ 2126167,
+ 2126170,
+ 2126220,
+ 2126234,
+ 2126256,
+ 2126271,
+ 2126272,
+ 2126284,
+ 2126298,
+ 2126328,
+ 2126344,
+ 2126345,
+ 2126355,
+ 2126362,
+ 2126372,
+ 2126383,
+ 2126405,
+ 2126414,
+ 2126430,
+ 2126443,
+ 2126449,
+ 2126459,
+ 2126460,
+ 2126473,
+ 2126483,
+ 2126504,
+ 2126549,
+ 2126550,
+ 2126552,
+ 2126559,
+ 2126590,
+ 2126605,
+ 2126611,
+ 2126642,
+ 2126645,
+ 2126678,
+ 2126685,
+ 2126686,
+ 2126687,
+ 2126688,
+ 2126697,
+ 2126713,
+ 2126720,
+ 2126734,
+ 2126736,
+ 2126739,
+ 2126743,
+ 2126762,
+ 2126765,
+ 2126790,
+ 2126796,
+ 2126803,
+ 2126813,
+ 2126822,
+ 2126839,
+ 2126843,
+ 2126847,
+ 2126848,
+ 2126865,
+ 2126893,
+ 2126951,
+ 2126952,
+ 2126958,
+ 2126991,
+ 2126993,
+ 2127002,
+ 2127022,
+ 2127025,
+ 2127026,
+ 2127052,
+ 2127056,
+ 2127059,
+ 4224216,
+ 2127067,
+ 2127080,
+ 2127082,
+ 4224239,
+ 2127100,
+ 2127110,
+ 2127122,
+ 2127143,
+ 2127145,
+ 2127158,
+ 2127161,
+ 2127171,
+ 2127175,
+ 2127191,
+ 2127199,
+ 2127201,
+ 2127227,
+ 2127228,
+ 2127237,
+ 2127253,
+ 2127260,
+ 2127290,
+ 2127378,
+ 2127395,
+ 2127401,
+ 2127417,
+ 2127418,
+ 2127424,
+ 2127428,
+ 2127449,
+ 2127493,
+ 2127500,
+ 2127501,
+ 2127519,
+ 2127522,
+ 2127523,
+ 2127553,
+ 2127563,
+ 4224724,
+ 2127584,
+ 2127606,
+ 2127622,
+ 2127634,
+ 2127636,
+ 2127637,
+ 2127644,
+ 2127662,
+ 2127677,
+ 2127682,
+ 2127698,
+ 2127702,
+ 2127703,
+ 2127728,
+ 2127731,
+ 2127732,
+ 4224909,
+ 4224930,
+ 2127790,
+ 2127793,
+ 2127797,
+ 2127811,
+ 2127826,
+ 2127829,
+ 2127864,
+ 2127886,
+ 2127889,
+ 2127901,
+ 2127907,
+ 2127940,
+ 2127944,
+ 2127948,
+ 2127954,
+ 2127966,
+ 2127968,
+ 2127969,
+ 2127971,
+ 2128015,
+ 2128040,
+ 2128044,
+ 2128050,
+ 2128061,
+ 2128063,
+ 2128071,
+ 2128082,
+ 2128086,
+ 2128091,
+ 2128095,
+ 2128106,
+ 2128115,
+ 2128118,
+ 2128127,
+ 2128134,
+ 2128154,
+ 2128158,
+ 2128160,
+ 2128169,
+ 2128173,
+ 2128181,
+ 2128196,
+ 2128203,
+ 2128207,
+ 2128209,
+ 2128233,
+ 2128251,
+ 2128254,
+ 2128268,
+ 2128273,
+ 2128275,
+ 2128284,
+ 2128296,
+ 2128303,
+ 2128335,
+ 2128349,
+ 2128352,
+ 2128354,
+ 2128357,
+ 2128369,
+ 2128376,
+ 2128380,
+ 2128391,
+ 2128417,
+ 2128423,
+ 2128427,
+ 2128431,
+ 2128436,
+ 2128437,
+ 2128456,
+ 2128469,
+ 2128485,
+ 2128510,
+ 2128523,
+ 2128529,
+ 2128542,
+ 2128585,
+ 2128603,
+ 2128617,
+ 2128620,
+ 2128625,
+ 2128635,
+ 2128671,
+ 2128675,
+ 2128681,
+ 2128688,
+ 2128692,
+ 2128703,
+ 2128704,
+ 2128746,
+ 2128772,
+ 2128777,
+ 2128782,
+ 2128790,
+ 2128805,
+ 2128818,
+ 2128822,
+ 2128826,
+ 2128827,
+ 2128829,
+ 2128834,
+ 2128840,
+ 2128859,
+ 2128884,
+ 2128885,
+ 2128889,
+ 2128890,
+ 2128898,
+ 2128900,
+ 2128902,
+ 2128908,
+ 2128921,
+ 2128923,
+ 2128933,
+ 2128940,
+ 2128948,
+ 2128953,
+ 2128954,
+ 2128966,
+ 2128981,
+ 2128986,
+ 2128995,
+ 4226153,
+ 2129020,
+ 2129030,
+ 2129072,
+ 2129083,
+ 2129103,
+ 2129108,
+ 2129129,
+ 2129167,
+ 2129169,
+ 2129174,
+ 2129190,
+ 2129194,
+ 2129197,
+ 2129233,
+ 2129239,
+ 2129253,
+ 2129255,
+ 2129272,
+ 2129275,
+ 2129281,
+ 2129302,
+ 2129347,
+ 2129348,
+ 2129349,
+ 2129350,
+ 2129357,
+ 2129358,
+ 2129408,
+ 2129378,
+ 2129386,
+ 2129389,
+ 2129402,
+ 2129436,
+ 2129453,
+ 2129459,
+ 2129471,
+ 2129486,
+ 2129488,
+ 2129496,
+ 2129503,
+ 2129509,
+ 2129557,
+ 2129565,
+ 2129566,
+ 2129727,
+ 2129756,
+ 2129766,
+ 4226944,
+ 2129805,
+ 2129807,
+ 2129830,
+ 2129834,
+ 2129844,
+ 2129852,
+ 2129856,
+ 2129864,
+ 2129896,
+ 2129935,
+ 2129939,
+ 2129949,
+ 2129951,
+ 2129952,
+ 2129966,
+ 2129972,
+ 2129982,
+ 2129984,
+ 2129988,
+ 2130020,
+ 2130029,
+ 2130049,
+ 2130105,
+ 2130120,
+ 2130125,
+ 2130130,
+ 2130158,
+ 2130162,
+ 2130166,
+ 2130169,
+ 2130187,
+ 2130204,
+ 2130208,
+ 2130236,
+ 2130245,
+ 2130247,
+ 2130258,
+ 2130273,
+ 2130295,
+ 2130310,
+ 2130318,
+ 2130326,
+ 2130338,
+ 2130350,
+ 2130373,
+ 2130382,
+ 2130411,
+ 2130416,
+ 2130417,
+ 2130418,
+ 2130421,
+ 2130424,
+ 4227584,
+ 2130447,
+ 2130461,
+ 2130472,
+ 2130499,
+ 2130510,
+ 2130513,
+ 2130518,
+ 2130535,
+ 2130555,
+ 2130560,
+ 2130561,
+ 2130567,
+ 2130580,
+ 2130582,
+ 2130584,
+ 2130586,
+ 2130587,
+ 2130592,
+ 2130650,
+ 2130656,
+ 2130660,
+ 2130669,
+ 2130698,
+ 2130699,
+ 2130718,
+ 2130719,
+ 2130721,
+ 2130732,
+ 2130734,
+ 2130739,
+ 2130743,
+ 2130749,
+ 2130754,
+ 2130765,
+ 2130766,
+ 2130800,
+ 2130816,
+ 2130818,
+ 2130820,
+ 2130841,
+ 2130844,
+ 2130854,
+ 2130860,
+ 2130878,
+ 2130771,
+ 2130920,
+ 2130969,
+ 2130861,
+ 2130991,
+ 2131013,
+ 2131015,
+ 2131021,
+ 2131030,
+ 4228188,
+ 2131040,
+ 2131044,
+ 2131047,
+ 2131050,
+ 2131060,
+ 2131069,
+ 2131090,
+ 2131093,
+ 2131113,
+ 2131114,
+ 2131143,
+ 2131144,
+ 2131148,
+ 2131186,
+ 2131191,
+ 2131202,
+ 2131203,
+ 2131207,
+ 2131214,
+ 2131216,
+ 2131228,
+ 2131234,
+ 2131239,
+ 2131242,
+ 2131251,
+ 2131254,
+ 2131263,
+ 2131280,
+ 2131282,
+ 2131292,
+ 4228445,
+ 2131295,
+ 2131296,
+ 2131321,
+ 2131337,
+ 2131339,
+ 2131360,
+ 2131365,
+ 2131367,
+ 2131380,
+ 2131382,
+ 2131384,
+ 2131389,
+ 2131390,
+ 2131391,
+ 2131394,
+ 2131418,
+ 2131424,
+ 2131432,
+ 2131443,
+ 2131452,
+ 2131469,
+ 2131470,
+ 2131481,
+ 2131483,
+ 2131510,
+ 2131514,
+ 2131517,
+ 2131544,
+ 2131545,
+ 2131549,
+ 2131552,
+ 2131553,
+ 2131556,
+ 2131561,
+ 2131574,
+ 2131606,
+ 2131610,
+ 2131617,
+ 2131622,
+ 2131629,
+ 2131636,
+ 2131637,
+ 2131639,
+ 2131641,
+ 2131647,
+ 2131653,
+ 2131666,
+ 2131674,
+ 2131676,
+ 2131680,
+ 2131685,
+ 2131687,
+ 2131592,
+ 2131716,
+ 2131727,
+ 2131759,
+ 2131762,
+ 2131772,
+ 2131773,
+ 2131781,
+ 2131789,
+ 2131809,
+ 2131823,
+ 2131843,
+ 2131844,
+ 2131845,
+ 2131846,
+ 2131856,
+ 2131861,
+ 4229027,
+ 2131889,
+ 2131912,
+ 2131914,
+ 2131925,
+ 2131929,
+ 2131932,
+ 2131938,
+ 2131940,
+ 2131953,
+ 2131955,
+ 2131960,
+ 2131962,
+ 2131967,
+ 2131977,
+ 2131993,
+ 2131986,
+ 2131994,
+ 2131998,
+ 2132016,
+ 2132021,
+ 2132033,
+ 2132035,
+ 2132040,
+ 2132041,
+ 4229195,
+ 2132049,
+ 2132060,
+ 2132064,
+ 2132081,
+ 2132089,
+ 2132091,
+ 2132096,
+ 2132127,
+ 2132136,
+ 2132154,
+ 2132171,
+ 2132172,
+ 2132190,
+ 2132199,
+ 2132215,
+ 2132237,
+ 2132245,
+ 2132246,
+ 2132256,
+ 2132264,
+ 2132273,
+ 2132282,
+ 2132294,
+ 2132303,
+ 2132306,
+ 2132311,
+ 2132315,
+ 2132321,
+ 2132323,
+ 2132334,
+ 2132339,
+ 2132341,
+ 2132346,
+ 2132349,
+ 2132365,
+ 2132373,
+ 2132379,
+ 2132380,
+ 2132384,
+ 2132404,
+ 2132406,
+ 2132439,
+ 2132457,
+ 2132461,
+ 2132473,
+ 2132484,
+ 2132485,
+ 2132510,
+ 2132512,
+ 2132516,
+ 2132518,
+ 2132523,
+ 2132524,
+ 2132527,
+ 2132541,
+ 2132544,
+ 2132547,
+ 2132563,
+ 2132566,
+ 2132572,
+ 2132581,
+ 2132598,
+ 2132599,
+ 2132602,
+ 2132603,
+ 2132608,
+ 2132611,
+ 2132619,
+ 2132623,
+ 2132626,
+ 2132631,
+ 2132633,
+ 2132639,
+ 2132649,
+ 2132655,
+ 2132659,
+ 2132667,
+ 2132675,
+ 2132678,
+ 2132680,
+ 2132682,
+ 2132691,
+ 2132692,
+ 2132693,
+ 2132720,
+ 2132735,
+ 2132747,
+ 2132766,
+ 2132784,
+ 2132796,
+ 2132802,
+ 2132808,
+ 2132813,
+ 2132835,
+ 2132857,
+ 2132868,
+ 2132877,
+ 2132879,
+ 2133048,
+ 2133054,
+ 2133073,
+ 2133080,
+ 2133083,
+ 2133085,
+ 2133081,
+ 2133091,
+ 2133092,
+ 2133094,
+ 2133109,
+ 2133110,
+ 2133118,
+ 2133126,
+ 2133127,
+ 2133131,
+ 2133136,
+ 4230299,
+ 2133148,
+ 2133177,
+ 2133190,
+ 2133195,
+ 2133199,
+ 2133213,
+ 2133224,
+ 2133231,
+ 2133234,
+ 2133247,
+ 2133349,
+ 2133375,
+ 2133378,
+ 2133384,
+ 2133392,
+ 2133406,
+ 2133408,
+ 2133420,
+ 2133429,
+ 2133431,
+ 2133433,
+ 2133435,
+ 2133440,
+ 2133445,
+ 2133447,
+ 2133450,
+ 2133460,
+ 2133477,
+ 2133488,
+ 2133436,
+ 2133508,
+ 2133509,
+ 2133521,
+ 2133555,
+ 2133559,
+ 2133560,
+ 2133582,
+ 2133595,
+ 2133597,
+ 2133598,
+ 2133625,
+ 2133634,
+ 2133635,
+ 2133659,
+ 2133661,
+ 2133666,
+ 2133690,
+ 2133697,
+ 2133699,
+ 2133700,
+ 2133703,
+ 2133724,
+ 2133742,
+ 2133745,
+ 2133751,
+ 2133741,
+ 2133762,
+ 2133775,
+ 2133776,
+ 2133782,
+ 2133792,
+ 2133793,
+ 2133795,
+ 2133800,
+ 2133806,
+ 2133812,
+ 2133815,
+ 2133825,
+ 2133839,
+ 2133842,
+ 2133843,
+ 2133853,
+ 2133854,
+ 2133861,
+ 2133917,
+ 2133944,
+ 2133950,
+ 2133952,
+ 2133963,
+ 2133968,
+ 2133970,
+ 2133987,
+ 2134014,
+ 2134040,
+ 2134056,
+ 2134057,
+ 2134058,
+ 2134067,
+ 2134068,
+ 2134079,
+ 2134114,
+ 2134118,
+ 2134124,
+ 2134158,
+ 2134181,
+ 2134220,
+ 2134229,
+ 2134232,
+ 2134233,
+ 2134245,
+ 2134226,
+ 2134280,
+ 2134285,
+ 2134288,
+ 2134298,
+ 2134304,
+ 2134313,
+ 2134318,
+ 2134326,
+ 2134332,
+ 2134339,
+ 2134351,
+ 2134355,
+ 2134381,
+ 2134395,
+ 2134401,
+ 2134406,
+ 2134419,
+ 2134420,
+ 2134424,
+ 2134433,
+ 2134438,
+ 2134463,
+ 2134483,
+ 2134484,
+ 2134489,
+ 2134505,
+ 2134506,
+ 2134511,
+ 2134521,
+ 2134525,
+ 2134532,
+ 2134533,
+ 2134540,
+ 2134546,
+ 2134547,
+ 2134552,
+ 2134556,
+ 2134557,
+ 2134564,
+ 2134565,
+ 2134566,
+ 2134574,
+ 2134575,
+ 2134576,
+ 2134581,
+ 2134582,
+ 2134590,
+ 2134598,
+ 2134605,
+ 2134616,
+ 2134620,
+ 2134621,
+ 2134633,
+ 2134638,
+ 2134639,
+ 2134640,
+ 2134645,
+ 2134649,
+ 2134651,
+ 2134666,
+ 2134674,
+ 2134688,
+ 2134692,
+ 2134693,
+ 2134696,
+ 2134710,
+ 2134712,
+ 2134714,
+ 2134717,
+ 2134727,
+ 2134733,
+ 2134744,
+ 2134748,
+ 2134749,
+ 2134753,
+ 2134755,
+ 2134760,
+ 2134764,
+ 2134766,
+ 2134768,
+ 2134784,
+ 2134792,
+ 2134812,
+ 2134820,
+ 2134826,
+ 2134836,
+ 2134839,
+ 2134864,
+ 2134869,
+ 2134878,
+ 2134887,
+ 2134889,
+ 2134895,
+ 2134900,
+ 2134902,
+ 2134906,
+ 2134909,
+ 2134912,
+ 2134913,
+ 2134925,
+ 2134930,
+ 2134933,
+ 2134936,
+ 4232097,
+ 2134950,
+ 2134952,
+ 2134955,
+ 2134964,
+ 2134965,
+ 2134966,
+ 2134980,
+ 2134981,
+ 2134985,
+ 2134987,
+ 2134989,
+ 2134995,
+ 2135001,
+ 2135031,
+ 2135041,
+ 2135048,
+ 2135061,
+ 2135071,
+ 2135087,
+ 2135101,
+ 2135107,
+ 2135129,
+ 2135132,
+ 2135135,
+ 2135137,
+ 2135144,
+ 2135150,
+ 2135172,
+ 2135171,
+ 2135422,
+ 2135428,
+ 2135453,
+ 2135454,
+ 2135482,
+ 2135513,
+ 2135517,
+ 2135519,
+ 2135582,
+ 2135586,
+ 2135589,
+ 2135590,
+ 2135607,
+ 2135609,
+ 2135610,
+ 2135634,
+ 2135638,
+ 2135639,
+ 2135662,
+ 2135676,
+ 2135678,
+ 2135697,
+ 2135711,
+ 2135718,
+ 2135754,
+ 4232922,
+ 2135775,
+ 2135802,
+ 2135813,
+ 2135834,
+ 2135837,
+ 4232993,
+ 2135882,
+ 2135896,
+ 2135927,
+ 2135928,
+ 2135931,
+ 2135936,
+ 2135945,
+ 2135959,
+ 2135992,
+ 2135996,
+ 2135999,
+ 2136004,
+ 2136005,
+ 2136007,
+ 2136010,
+ 2136014,
+ 2136016,
+ 2136023,
+ 2136029,
+ 2136036,
+ 2136055,
+ 2136056,
+ 2136058,
+ 2136089,
+ 2136092,
+ 2136096,
+ 2136111,
+ 2136117,
+ 2136132,
+ 2136138,
+ 2136145,
+ 2136170,
+ 2136238,
+ 2136268,
+ 2136294,
+ 2136310,
+ 2136327,
+ 2136351,
+ 2136354,
+ 2136358,
+ 2136363,
+ 2136372,
+ 2136377,
+ 2136391,
+ 2136409,
+ 2136411,
+ 2136475,
+ 2136477,
+ 2136479,
+ 2136496,
+ 2136498,
+ 2136501,
+ 2136531,
+ 2136538,
+ 2136540,
+ 2136551,
+ 2136554,
+ 2136555,
+ 2136556,
+ 2136564,
+ 2136565,
+ 2136573,
+ 2136574,
+ 2136580,
+ 2136587,
+ 2136606,
+ 2136610,
+ 2136627,
+ 2136629,
+ 2136647,
+ 4233802,
+ 2136651,
+ 2136660,
+ 2136669,
+ 2136746,
+ 2136748,
+ 2136750,
+ 2136754,
+ 2136756,
+ 2136763,
+ 2136767,
+ 2136776,
+ 2136791,
+ 2136795,
+ 2136804,
+ 2136807,
+ 2136812,
+ 2136818,
+ 2136819,
+ 2136821,
+ 2136826,
+ 2136829,
+ 2136831,
+ 2136832,
+ 2136836,
+ 2136837,
+ 2136859,
+ 2136870,
+ 4234037,
+ 2136887,
+ 2136889,
+ 2136890,
+ 2136908,
+ 2136918,
+ 2136919,
+ 2136923,
+ 2136929,
+ 2136938,
+ 2136941,
+ 2136942,
+ 2136952,
+ 2136959,
+ 2136965,
+ 2136967,
+ 2136969,
+ 2136971,
+ 2136973,
+ 2136980,
+ 2136986,
+ 2137001,
+ 2137015,
+ 2137020,
+ 2137040,
+ 2137081,
+ 2137103,
+ 2137105,
+ 2137118,
+ 2137126,
+ 2137128,
+ 2137149,
+ 2137155,
+ 2137166,
+ 2137182,
+ 2137211,
+ 2137335,
+ 2137337,
+ 2137372,
+ 2137391,
+ 2137395,
+ 2137396,
+ 2137402,
+ 2137404,
+ 2137413,
+ 2137427,
+ 2137428,
+ 2137445,
+ 2137475,
+ 2137478,
+ 2137486,
+ 2137490,
+ 2137491,
+ 2137493,
+ 2137495,
+ 2137496,
+ 2137514,
+ 2137518,
+ 4234687,
+ 2137546,
+ 2137556,
+ 2137557,
+ 2137566,
+ 2137582,
+ 2137584,
+ 2137598,
+ 2137614,
+ 2137616,
+ 2137617,
+ 2137618,
+ 2137622,
+ 2137735,
+ 2137742,
+ 2137743,
+ 2137750,
+ 2137752,
+ 2137774,
+ 2137779,
+ 2137798,
+ 2137800,
+ 2137803,
+ 2137813,
+ 2137836,
+ 2137837,
+ 2137841,
+ 2137845,
+ 2137848,
+ 2137873,
+ 2137878,
+ 2137882,
+ 2137887,
+ 2137905,
+ 2137906,
+ 2137916,
+ 2137919,
+ 2137923,
+ 2137924,
+ 2137927,
+ 2137942,
+ 2137950,
+ 2137966,
+ 2137971,
+ 2137978,
+ 2137981,
+ 2137999,
+ 2138001,
+ 2138002,
+ 2138006,
+ 2138017,
+ 2138019,
+}}
diff --git a/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua b/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua
new file mode 100644
index 0000000000..f94b028452
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-jfmglue.lua
@@ -0,0 +1,1375 @@
+--
+-- luatexja/ltj-jfmglue.lua
+--
+luatexbase.provides_module({
+ name = 'luatexja.jfmglue',
+ date = '2019/07/26',
+ description = 'Insertion process of JFM glues, [x]kanjiskip and others',
+})
+luatexja.jfmglue = luatexja.jfmglue or {}
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+luatexja.load_module('setwidth'); local ltjw = luatexja.setwidth
+local pairs = pairs
+
+--local to_node = node.direct.tonode
+--local to_direct = node.direct.todirect
+
+local setfield = node.direct.setfield
+local setglue = luatexja.setglue
+local getfield = node.direct.getfield
+local getid = node.direct.getid
+local getfont = node.direct.getfont
+local getlist = node.direct.getlist
+local getchar = node.direct.getchar
+local getsubtype = node.direct.getsubtype
+local if_lang_ja
+do
+ local lang_ja = luatexja.lang_ja
+ local getlang = node.direct.getlang
+ if_lang_ja = getlang
+ and function (n) return getlang(n)==lang_ja end
+ or function (n) return getfield(n,'lang')==lang_ja end
+end
+
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local insert_before = node.direct.insert_before
+local insert_after = node.direct.insert_after
+local node_next = node.direct.getnext
+local ltjd_make_dir_whatsit = ltjd.make_dir_whatsit
+local ltjf_font_metric_table = ltjf.font_metric_table
+local ltjf_find_char_class = ltjf.find_char_class
+local node_new = node.direct.new
+local node_copy = node.direct.copy
+local node_tail = node.direct.tail
+local node_free = node.direct.free
+local node_remove = node.direct.remove
+
+local id_glyph = node.id('glyph')
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_rule = node.id('rule')
+local id_ins = node.id('ins')
+local id_mark = node.id('mark')
+local id_adjust = node.id('adjust')
+local id_disc = node.id('disc')
+local id_whatsit = node.id('whatsit')
+local id_math = node.id('math')
+local id_glue = node.id('glue')
+local id_kern = node.id('kern')
+local id_penalty = node.id('penalty')
+
+local id_jglyph = 512 -- Japanese character
+local id_box_like = 256 -- vbox, shifted hbox
+local id_pbox = 257 -- already processed nodes (by \unhbox)
+local id_pbox_w = 258 -- cluster which consists of a whatsit
+local sid_user = node.subtype('user_defined')
+
+local ITALIC = luatexja.icflag_table.ITALIC
+local PACKED = luatexja.icflag_table.PACKED
+local KINSOKU = luatexja.icflag_table.KINSOKU
+local FROM_JFM = luatexja.icflag_table.FROM_JFM
+local PROCESSED = luatexja.icflag_table.PROCESSED
+local IC_PROCESSED = luatexja.icflag_table.IC_PROCESSED
+local BOXBDD = luatexja.icflag_table.BOXBDD
+local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
+
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local kanji_skip
+local xkanji_skip
+local table_current_stack
+local list_dir
+local capsule_glyph
+local tex_dir
+local attr_ablshift
+local set_np_xspc_jachar, set_np_xspc_alchar
+local set_np_xspc_jachar_hbox
+
+local ltjs_orig_char_table = ltjs.orig_char_table
+
+local function get_attr_icflag(p)
+ return (has_attr(p, attr_icflag) or 0)%PROCESSED_BEGIN_FLAG
+end
+
+-------------------- Helper functions
+
+-- This function is called only for acquiring `special' characters.
+local function fast_find_char_class(c,m)
+ return m.chars[c] or 0
+end
+
+-- 文字クラスの決定
+local slow_find_char_class
+do
+ local start_time_measure = ltjb.start_time_measure
+ local stop_time_measure = ltjb.stop_time_measure
+ slow_find_char_class = function (c, m, oc)
+ local cls = ltjf_find_char_class(oc, m)
+ if oc~=c and c and cls==0 then
+ return ltjf_find_char_class(c, m)
+ else
+ return cls
+ end
+ end
+end
+
+local function skip_table_to_glue(n)
+ local g, st = node_new(id_glue), ltjs.fast_get_stack_skip(n)
+ setglue(g, st.width, st.stretch, st.shrink, st.stretch_order, st.shrink_order)
+ return g, (st.width==1073741823)
+end
+
+
+-- penalty 値の計算
+local add_penalty
+do
+local setpenalty = node.direct.setpenalty or function(n, a) setfield(n,'penalty',a) end
+local getpenalty = node.direct.getpenalty or function(n) return getfield(n,'penalty') end
+function add_penalty(p,e)
+ local pp = getpenalty(p)
+ if (pp>-10000) and (pp<10000) then
+ if e>=10000 then setpenalty(p, 10000)
+ elseif e<=-10000 then setpenalty(p, -10000)
+ else
+ pp = pp + e
+ if pp>=10000 then setpenalty(p, 10000)
+ elseif pp<=-10000 then setpenalty(p, -10000)
+ else setpenalty(p, pp) end
+ end
+ end
+end
+end
+
+-- 「異なる JFM」の間の調整方法
+luatexja.jfmglue.diffmet_rule = math.two_paverage
+function math.two_add(a,b) return a+b end
+function math.two_average(a,b) return (a+b)*0.5 end
+function math.two_paverage(a,b) return (a+b)/2 end
+function math.two_pleft(a,b) return a end
+function math.two_pright(a,b) return b end
+
+local head -- the head of current list
+
+local Np, Nq, Bp
+local widow_Bp, widow_Np -- \jcharwidowpenalty 挿入位置管理用
+
+local non_ihb_flag -- JFM グルー挿入抑止用 flag
+-- false: \inhibitglue 指定時 true: それ以外
+
+-------------------- hlist 内の文字の検索
+
+local first_char, last_char, find_first_char
+local check_box_high
+do
+local ltjd_glyph_from_packed = ltjd.glyph_from_packed
+local function check_box(box_ptr, box_end)
+ local p = box_ptr; local found_visible_node = false
+ if not p then
+ find_first_char = false; last_char = nil
+ return true
+ end
+ while p and p~=box_end do
+ local pid = getid(p)
+ if pid==id_kern and getsubtype(p)==2 then
+ p = node_next(node_next(node_next(p))); pid = getid(p) -- p must be glyph_node
+ end
+ if pid==id_glyph then
+ repeat
+ if find_first_char then
+ first_char = p; find_first_char = false
+ end
+ last_char = p; found_visible_node = true; p=node_next(p)
+ if (not p) or p==box_end then
+ return found_visible_node
+ end
+ until getid(p)~=id_glyph
+ pid = getid(p) -- p must be non-nil
+ end
+ if pid==id_kern then
+ local pa = get_attr_icflag(p)
+ if pa==IC_PROCESSED then
+ -- do nothing
+ elseif getsubtype(p)==2 then
+ p = node_next(node_next(p));
+ -- Note that another node_next will be executed outside this if-statement.
+ else
+ found_visible_node = true
+ find_first_char = false; last_char = nil
+ end
+ elseif pid==id_hlist then
+ if PACKED == get_attr_icflag(p) then
+ local s = ltjd_glyph_from_packed(p)
+ if find_first_char then
+ first_char = s; find_first_char = false
+ end
+ last_char = s; found_visible_node = true
+ else
+ if getfield(p, 'shift')==0 then
+ last_char = nil
+ if check_box(getlist(p), nil) then found_visible_node = true end
+ find_first_char = false
+ else
+ find_first_char = false; last_char = nil
+ end
+ end
+ elseif pid==id_math then
+ if find_first_char then
+ first_char = p; find_first_char = false
+ end
+ last_char = p; found_visible_node = true
+ elseif pid==id_rule and get_attr_icflag(p)==PACKED then
+ -- do nothing
+ elseif not (pid==id_ins or pid==id_mark
+ or pid==id_adjust or pid==id_whatsit
+ or pid==id_penalty) then
+ found_visible_node = true
+ find_first_char = false; last_char = nil
+ end
+ p = node_next(p)
+ end
+ return found_visible_node
+end
+
+check_box_high = function (Nx, box_ptr, box_end)
+ first_char = nil; last_char = nil; find_first_char = true
+ if check_box(box_ptr, box_end) then
+ local first_char = first_char
+ if first_char then
+ if getid(first_char)==id_glyph then
+ if if_lang_ja(first_char) then
+ set_np_xspc_jachar_hbox(Nx, first_char)
+ else
+ set_np_xspc_alchar(Nx, getchar(first_char),first_char, 1)
+ end
+ else -- math_node
+ set_np_xspc_alchar(Nx, -1,first_char)
+ end
+ end
+ end
+ return last_char
+end
+end
+-------------------- Np の計算と情報取得
+
+luatexbase.create_callback("luatexja.jfmglue.whatsit_getinfo", "data",
+ function (Np, lp, Nq)
+ if Np.nuc then return Np
+ else
+ return Np -- your code
+ end
+ end)
+luatexbase.create_callback("luatexja.jfmglue.whatsit_after", "data",
+ function (stat, Nq, Np) return false end)
+
+-- calc next Np
+local calc_np
+do -- 001 -----------------------------------------------
+
+local traverse = node.direct.traverse
+local function check_next_ickern(lp)
+ local lx = Np.nuc
+ while lp and getid(lp) == id_kern and ( getsubtype(lp)==0 or
+ getsubtype(lp)==3 or ITALIC == get_attr_icflag(lp)) do
+ set_attr(lp, attr_icflag, IC_PROCESSED);
+ lx, lp = lp, node_next(lp)
+ end
+ Np.last = lx; return lp
+end
+
+local function calc_np_pbox(lp, last)
+ local first, nc = (not Np.first), nil
+ --local lpa = get_attr_icflag(lp)==PACKED and PACKED or KINSOKU -- KINSOKU: dummy
+ local lpa = get_attr_icflag(lp)
+ Np.first = Np.first or lp; Np.id = id_pbox
+ set_attr(lp, attr_icflag, get_attr_icflag(lp));
+ while lp ~=last and (lpa>=PACKED) and (lpa<BOXBDD) do
+ local lpi = getid(lp)
+ if lpa==PACKED then
+ if lpi==id_rule then lp = node_next(lp) end
+ nc, lp = lp, node_next(lp)
+ elseif lpi==id_hlist or lpi==id_vlist then
+ head, lp, nc = ltjd_make_dir_whatsit(head, lp, list_dir, 'jfm pbox')
+ Np.first = first and nc or Np.first
+ else
+ nc, lp = lp, node_next(lp)
+ end
+ first, lpa = false, (lp and has_attr(lp, attr_icflag) or 0)
+ -- get_attr_icflag() ではいけない!
+ end
+ Np.nuc = nc
+ lp = check_next_ickern(lp)
+ Np.last_char = check_box_high(Np, Np.first, lp)
+ return lp
+end
+
+local calc_np_aux_glyph_common
+do -- 002 ---------------------------------------
+ local min, max = math.min, math.max
+ local getwhd = node.direct.getwhd
+ local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+ local attr_jchar_code = luatexbase.attributes['ltj@charcode']
+ local identifiers = fonts.hashes.identifiers
+ local function calc_np_notdef(lp)
+ local ident = identifiers[getfont(lp)]
+ if not ident.descriptions[getchar(lp)] then
+ local ln = node_next(lp)
+ if (ident.shared and ident.shared.features and ident.shared.features.notdef)
+ and ln and getid(ln)==id_glyph then
+ set_attr(lp, attr_icflag, PROCESSED)
+ set_attr(ln, attr_jchar_code, has_attr(lp, attr_jchar_code) or getchar(lp))
+ set_attr(ln, attr_jchar_class, has_attr(lp, attr_jchar_class) or 0)
+ Np.nuc, lp = ln, ln
+ end
+ end
+ return lp
+ end
+function calc_np_aux_glyph_common(lp, acc_flag)
+ Np.nuc, Np.first = lp, (Np.first or lp)
+ if if_lang_ja(lp) then -- JAchar
+ Np.id = id_jglyph
+ local m, mc, cls = set_np_xspc_jachar(Np, lp)
+ local npi, npf
+ local w, h, d = getwhd(lp)
+ if w==0 and h==0 and d==0 then lp = calc_np_notdef(lp) end
+ lp, head, npi, npf = capsule_glyph(lp, m, mc[cls], head, tex_dir)
+ Np.first = (Np.first~=Np.nuc) and Np.first or npf or npi
+ Np.nuc = npi
+ return true, check_next_ickern(lp);
+ else --ALchar
+ Np.id = id_glyph
+ set_np_xspc_alchar(Np, getchar(lp), lp, 1)
+ -- loop
+ local first_glyph, last_glyph = lp
+ set_attr(lp, attr_icflag, PROCESSED); Np.last = lp
+ local y_adjust = has_attr(lp,attr_ablshift) or 0
+ local node_depth = getfield(lp, 'depth') + min(y_adjust, 0)
+ local adj_depth = (y_adjust>0) and (getfield(lp, 'depth') + y_adjust) or 0
+ setfield(lp, 'yoffset', getfield(lp, 'yoffset') - y_adjust)
+ lp = node_next(lp)
+ for lx in traverse(lp) do
+ local lai = get_attr_icflag(lx)
+ if lx==last or lai>=PACKED then
+ lp=lx; break
+ else
+ local lid = getid(lx)
+ if lid==id_glyph and not if_lang_ja(lx) then
+ -- 欧文文字
+ last_glyph = lx; set_attr(lx, attr_icflag, PROCESSED); Np.last = lx
+ y_adjust = has_attr(lx,attr_ablshift) or 0
+ node_depth = max(getfield(lx, 'depth') + min(y_adjust, 0), node_depth)
+ adj_depth = (y_adjust>0) and max(getfield(lx, 'depth') + y_adjust, adj_depth) or adj_depth
+ setfield(lx, 'yoffset', getfield(lx, 'yoffset') - y_adjust)
+ elseif lid==id_kern then
+ local ls = getsubtype(lx)
+ if ls==2 then -- アクセント用の kern
+ set_attr(lx, attr_icflag, PROCESSED)
+ lx = node_next(lx) -- lx: アクセント本体
+ if getid(lx)==id_glyph then
+ setfield(lx, 'yoffset', getfield(lx, 'yoffset') - (has_attr(lx,attr_ablshift) or 0))
+ else -- アクセントは上下にシフトされている
+ setfield(lx, 'shift', getfield(lx, 'shift') + (has_attr(lx,attr_ablshift) or 0))
+ end
+ lx = node_next(node_next(lx))
+ elseif ls==0 then
+ Np.last = lx
+ elseif (ls==3) or (lai==ITALIC) then
+ Np.last = lx; set_attr(lx, attr_icflag, IC_PROCESSED)
+ else
+ lp=lx; break
+ end
+ else
+ lp=lx; break
+ end
+ end
+ end
+ local r
+ if adj_depth>node_depth then
+ r = node_new(id_rule,3)
+ setfield(r, 'width', 0); setfield(r, 'height', 0)
+ setfield(r, 'depth',adj_depth); setfield(r, 'dir', tex_dir)
+ set_attr(r, attr_icflag, PROCESSED)
+ end
+ if last_glyph then
+ Np.last_char = last_glyph
+ if r then insert_after(head, first_glyph, r) end
+ else
+ local npn = Np.nuc
+ Np.last_char = npn
+ if r then
+ local nf, nc = getfont(npn), getchar(npn)
+ local ct = (font.getfont(nf) or font.fonts[nf] ).characters[nc]
+ if not ct then -- variation selector
+ node_free(r)
+ elseif (ct.left_protruding or 0) == 0 then
+ head = insert_before(head, npn, r)
+ Np.first = acc_flag and Np.first or ((Np.first==npn) and r or npn)
+ elseif (ct.right_protruding or 0) == 0 then
+ insert_after(head, npn, r); Np.last, lp = r, r
+ else
+ ltjb.package_warning_no_line(
+ 'luatexja',
+ 'Check depth of glyph node ' .. tostring(npn) .. '(font=' .. nf
+ .. ', char=' .. nc .. '), because its \\lpcode is ' .. tostring(ct.left_protruding)
+ .. ' and its \\rpcode is ' .. tostring(ct.right_protruding)
+ ); node_free(r)
+ end
+ end
+ end
+ return true, lp
+ end
+end
+end -- 002 ---------------------------------------
+local calc_np_auxtable
+do -- 002 ---------------------------------------
+local ltjw_apply_ashift_math = ltjw.apply_ashift_math
+local ltjw_apply_ashift_disc = ltjw.apply_ashift_disc
+local node_end_of_math = node.direct.end_of_math
+local dir_tate = luatexja.dir_table.dir_tate
+local sid_start_link = node.subtype('pdf_start_link')
+local sid_start_thread = node.subtype('pdf_start_thread')
+local sid_end_link = node.subtype('pdf_end_link')
+local sid_end_thread = node.subtype('pdf_end_thread')
+calc_np_auxtable = {
+ [id_glyph] = calc_np_aux_glyph_common,
+ [id_hlist] = function(lp)
+ local op, flag
+ head, lp, op, flag = ltjd_make_dir_whatsit(head, lp, list_dir, 'jfm hlist')
+ set_attr(op, attr_icflag, PROCESSED)
+ Np.first = Np.first or op; Np.last = op; Np.nuc = op;
+ if (flag or getfield(op, 'shift')~=0) then
+ Np.id = id_box_like
+ else
+ Np.id = id_hlist
+ Np.last_char = check_box_high(Np, getlist(op), nil)
+ end
+ return true, lp
+ end,
+ [id_vlist] = function(lp)
+ local op
+ head, lp, op = ltjd_make_dir_whatsit(head, lp, list_dir, 'jfm:' .. getid(lp))
+ Np.first = Np.first or op; Np.last = op; Np.nuc = op;
+ Np.id = id_box_like;
+ return true, lp
+ end,
+ box_like = function(lp)
+ Np.first = Np.first or lp; Np.last = lp; Np.nuc = lp;
+ Np.id = id_box_like;
+ return true, node_next(lp)
+ end,
+ [id_whatsit] = function(lp)
+ local lps = getsubtype(lp)
+ if lps==sid_user then
+ if getfield(lp, 'user_id')==luatexja.userid_table.IHB then
+ local lq = node_next(lp);
+ head = node_remove(head, lp); node_free(lp); non_ihb_flag = false
+ return false, lq;
+ elseif getfield(lp, 'user_id')==luatexja.userid_table.JA_AL_BDD then
+ local lq = node_next(lp);
+ head = node_remove(head, lp); node_free(lp)
+ return false, lq;
+ else
+ set_attr(lp, attr_icflag, PROCESSED)
+ luatexbase.call_callback("luatexja.jfmglue.whatsit_getinfo",
+ Np, lp, Nq)
+ if Np.nuc then
+ Np.id = id_pbox_w; Np.first = Np.nuc; Np.last = Np.nuc;
+ return true, node_next(lp)
+ else
+ return false, node_next(lp)
+ end
+ end
+ else
+ -- we do special treatment for these whatsit nodes.
+ if lps == sid_start_link or lps == sid_start_thread then
+ Np.first = lp
+ elseif lps == sid_end_link or lps == sid_end_thread then
+ Np.first, Nq.last = nil, lp;
+ end
+ set_attr(lp, attr_icflag, PROCESSED)
+ return false, node_next(lp)
+ end
+ end,
+ [id_math] = function(lp)
+ Np.first, Np.nuc = (Np.first or lp), lp;
+ set_attr(lp, attr_icflag, PROCESSED)
+ set_np_xspc_alchar(Np, -1, lp)
+ local end_math = node_end_of_math(lp)
+ ltjw_apply_ashift_math(lp, end_math, attr_ablshift)
+ set_attr(end_math, attr_icflag, PROCESSED)
+ Np.last, Np.id = end_math, id_math;
+ return true, node_next(end_math);
+ end,
+ [id_glue] = function(lp)
+ Np.first, Np.nuc, Np.last = (Np.first or lp), lp, lp;
+ Np.id = getid(lp); set_attr(lp, attr_icflag, PROCESSED)
+ return true, node_next(lp)
+ end,
+ [id_disc] = function(lp)
+ Np.first, Np.nuc, Np.last = (Np.first or lp), lp, lp;
+ Np.id = getid(lp); set_attr(lp, attr_icflag, PROCESSED)
+ ltjw_apply_ashift_disc(lp, (list_dir==dir_tate), tex_dir)
+ Np.last_char = check_box_high(Np, getfield(lp, 'replace'), nil)
+ return true, node_next(lp)
+ end,
+ [id_kern] = function(lp)
+ if getsubtype(lp)==2 then
+ Np.first = Np.first or lp
+ set_attr(lp, attr_icflag, PROCESSED); lp = node_next(lp)
+ if getid(lp)==id_glyph then -- アクセント本体
+ setfield(lp, 'yoffset', getfield(lp, 'yoffset') - (has_attr(lp,attr_ablshift) or 0))
+ else -- アクセントは上下にシフトされている
+ setfield(lp, 'shift', getfield(lp, 'shift') + (has_attr(lp,attr_ablshift) or 0))
+ end
+ set_attr(lp, attr_icflag, PROCESSED); lp = node_next(lp)
+ set_attr(lp, attr_icflag, PROCESSED); lp = node_next(lp)
+ set_attr(lp, attr_icflag, PROCESSED);
+ return calc_np_aux_glyph_common(lp, true)
+ else
+ Np.first = Np.first or lp
+ Np.id = id_kern; set_attr(lp, attr_icflag, PROCESSED)
+ Np.last = lp; return true, node_next(lp)
+ end
+ end,
+ [id_penalty] = function(lp)
+ Bp[#Bp+1] = lp; set_attr(lp, attr_icflag, PROCESSED)
+ return false, node_next(lp)
+ end,
+}
+end -- 002 ---------------------------------------
+calc_np_auxtable[id_rule] = calc_np_auxtable.box_like
+calc_np_auxtable[15] = calc_np_auxtable.box_like
+
+local function calc_np_aux_skip (lp)
+ set_attr(lp, attr_icflag, PROCESSED)
+ return false, node_next(lp)
+end
+
+function calc_np(last, lp)
+ local k
+ -- We assume lp = node_next(Np.last)
+ Np, Nq, non_ihb_flag = Nq, Np, true
+ -- We clear `predefined' entries of Np before pairs() loop,
+ -- because using only pairs() loop is slower.
+ Np.post, Np.pre, Np.xspc = nil, nil, nil
+ Np.first, Np.id, Np.last, Np.met, Np.class= nil, nil, nil, nil
+ Np.auto_kspc, Np.auto_xspc, Np.char, Np.nuc = nil, nil, nil, nil
+ for k in pairs(Np) do Np[k] = nil end
+
+ for k = 1,#Bp do Bp[k] = nil end
+ while lp ~= last do
+ local lpa = has_attr(lp, attr_icflag) or 0
+ -- unbox 由来ノードの検出
+ if lpa>=PACKED then
+ if lpa%PROCESSED_BEGIN_FLAG == BOXBDD then
+ local lq = node_next(lp)
+ head = node_remove(head, lp); node_free(lp); lp = lq
+ else
+ return calc_np_pbox(lp, last)
+ end -- id_pbox
+ else
+ k, lp = (calc_np_auxtable[getid(lp)] or calc_np_aux_skip)(lp)
+ if k then return lp end
+ end
+ end
+ Np=nil
+end
+end -- 001 -----------------------------------------------
+
+-- extract informations from Np
+-- We think that "Np is a Japanese character" if Np.met~=nil,
+-- "Np is an alphabetic character" if Np.pre~=nil,
+-- "Np is not a character" otherwise.
+local after_hlist = nil -- global
+local after_alchar, extract_np
+do
+ local PRE = luatexja.stack_table_index.PRE
+ local POST = luatexja.stack_table_index.POST
+ local KCAT = luatexja.stack_table_index.KCAT
+ local XSP = luatexja.stack_table_index.XSP
+ local dir_tate = luatexja.dir_table.dir_tate
+
+-- 和文文字のデータを取得
+ local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+ local attr_jchar_code = luatexbase.attributes['ltj@charcode']
+ local attr_autospc = luatexbase.attributes['ltj@autospc']
+ local attr_autoxspc = luatexbase.attributes['ltj@autoxspc']
+ local getcomponents = node.direct.getcomponents
+ --local ltjf_get_vert_glyph = ltjf.get_vert_glyph
+ function set_np_xspc_jachar(Nx, x)
+ local m = ltjf_font_metric_table[getfont(x)]
+ local c, c_glyph = (not getcomponents(x) and ltjs_orig_char_table[x]), getchar(x)
+ if c and c~=c_glyph then set_attr(x, attr_jchar_code, c) end
+ c = c or c_glyph
+ local cls = slow_find_char_class(c, m, c_glyph)
+ Nx.met, Nx.class, Nx.char = m, cls, c;
+ local mc = m.char_type; Nx.char_type = mc
+ if cls~=0 then set_attr(x, attr_jchar_class, cls) end
+ Nx.pre = table_current_stack[PRE + c] or 0
+ Nx.post = table_current_stack[POST + c] or 0
+ Nx.xspc = table_current_stack[XSP + c] or 3
+ Nx.kcat = table_current_stack[KCAT + c] or 0
+ Nx.auto_kspc, Nx.auto_xspc = (has_attr(x, attr_autospc)==1), (has_attr(x, attr_autoxspc)==1)
+ return m, mc, cls
+ end
+ function set_np_xspc_jachar_hbox(Nx, x)
+ local m = ltjf_font_metric_table[getfont(x)]
+ local c = has_attr(x, attr_jchar_code) or getchar(x)
+ Nx.met, Nx.char = m, c; Nx.class = has_attr(x, attr_jchar_class) or 0;
+ local mc = m.char_type; Nx.char_type = mc
+ Nx.pre = table_current_stack[PRE + c] or 0
+ Nx.post = table_current_stack[POST + c] or 0
+ Nx.xspc = table_current_stack[XSP + c] or 3
+ Nx.kcat = table_current_stack[KCAT + c] or 0
+ Nx.auto_kspc, Nx.auto_xspc = (has_attr(x, attr_autospc)==1), (has_attr(x, attr_autoxspc)==1)
+ end
+
+-- 欧文文字のデータを取得
+ local floor = math.floor
+ local nullfunc = function(n) return n end
+ function set_np_xspc_alchar(Nx, c,x, lig)
+ if c~=-1 then
+ local f = (lig ==1) and nullfunc or node_tail
+ local xc, xs = getcomponents(x), getsubtype(x)
+ while xc and xs and xs%4>=2 do
+ x = f(xc);
+ if getid(x)==id_disc then x, xc, xs = nil, getfield(x,'replace'), 2
+ else xc, xs = getcomponents(x), getsubtype(x) end
+ end
+ c = x and getchar(x) or c
+ Nx.pre = table_current_stack[PRE + c] or 0
+ Nx.post = table_current_stack[POST + c] or 0
+ else
+ Nx.pre, Nx.post = 0, 0
+ end
+ Nx.met = nil
+ Nx.xspc = table_current_stack[XSP + c] or 3
+ Nx.auto_xspc = (has_attr(x, attr_autoxspc)==1)
+ end
+ local set_np_xspc_alchar = set_np_xspc_alchar
+
+ -- change the information for the next loop
+ -- (will be done if Nx is an alphabetic character or a hlist)
+ after_hlist = function (Nx)
+ local s = Nx.last_char
+ if s then
+ if getid(s)==id_glyph then
+ if if_lang_ja(s) then
+ set_np_xspc_jachar_hbox(Nx, s)
+ else
+ set_np_xspc_alchar(Nx, getchar(s), s, 2)
+ end
+ else
+ set_np_xspc_alchar(Nx, -1, s)
+ end
+ else
+ Nx.pre, Nx.met = nil, nil
+ end
+ end
+
+ after_alchar = function (Nx)
+ local x = Nx.last_char
+ return set_np_xspc_alchar(Nx, getchar(x), x, 2)
+ end
+
+end
+
+-------------------- 最下層の処理
+
+luatexbase.create_callback('luatexja.adjust_jfmglue', 'simple', function(n) return n end)
+
+-- change penalties (or create a new penalty, if needed)
+local function handle_penalty_normal(post, pre, g)
+ luatexbase.call_callback('luatexja.adjust_jfmglue', head, Nq, Np, Bp)
+ local a = (pre or 0) + (post or 0)
+ if #Bp == 0 then
+ if (a~=0 and not(g and getid(g)==id_kern)) then
+ local p = node_new(id_penalty)
+ if a<-10000 then a = -10000 elseif a>10000 then a = 10000 end
+ setfield(p, 'penalty', a)
+ head = insert_before(head, Np.first, p)
+ Bp[1]=p;
+ set_attr(p, attr_icflag, KINSOKU)
+ end
+ else for _, v in pairs(Bp) do add_penalty(v,a) end
+ end
+end
+
+local function handle_penalty_always(post, pre, g)
+ luatexbase.call_callback('luatexja.adjust_jfmglue', head, Nq, Np, Bp)
+ local a = (pre or 0) + (post or 0)
+ if #Bp == 0 then
+ if not (g and getid(g)==id_glue) or a~=0 then
+ local p = node_new(id_penalty)
+ if a<-10000 then a = -10000 elseif a>10000 then a = 10000 end
+ setfield(p, 'penalty', a)
+ head = insert_before(head, Np.first, p)
+ Bp[1]=p
+ set_attr(p, attr_icflag, KINSOKU)
+ end
+ else for _, v in pairs(Bp) do add_penalty(v,a) end
+ end
+end
+
+local function handle_penalty_suppress(post, pre, g)
+ luatexbase.call_callback('luatexja.adjust_jfmglue', head, Nq, Np, Bp)
+ if #Bp == 0 then
+ if g and getid(g)==id_glue then
+ local p = node_new(id_penalty)
+ setfield(p, 'penalty', 10000); head = insert_before(head, Np.first, p)
+ Bp[1]=p
+ set_attr(p, attr_icflag, KINSOKU)
+ end
+ else
+ local a = (pre or 0) + (post or 0)
+ for _, v in pairs(Bp) do add_penalty(v,a) end
+ end
+end
+
+local function handle_penalty_jwp()
+ local a = table_current_stack[luatexja.stack_table_index.JWP]
+ if #widow_Bp == 0 then
+ if a~=0 then
+ local p = node_new(id_penalty)
+ if a<-10000 then a = -10000 elseif a>10000 then a = 10000 end
+ setfield(p, 'penalty', a)
+ head = insert_before(head, widow_Np.first, p)
+ widow_Bp[1]=p;
+ set_attr(p, attr_icflag, KINSOKU)
+ end
+ else for _, v in pairs(widow_Bp) do add_penalty(v,a) end
+ end
+end
+
+-- 和文文字間の JFM glue を node 化
+local function new_jfm_glue(mc, bc, ac)
+-- bc, ac: char classes
+ local g = mc[bc][ac]
+ if g then
+ if g[1] then
+ return node_copy(g[1]), g.ratio, false, false, false
+ else
+ local f = node_new(id_glue)
+ set_attr(f, attr_icflag, g.priority)
+ setglue(f, g.width, g.stretch, g.shrink)
+ return f, g.ratio, g.kanjiskip_natural, g.kanjiskip_stretch, g.kanjiskip_shrink
+ end
+ end
+ return false, 0
+end
+
+-- Nq.last (kern w) .... (glue/kern g) Np.first
+local function real_insert(g)
+ if g then
+ head = insert_before(head, Np.first, g)
+ Np.first = g
+ end
+end
+
+
+-------------------- 和文文字間空白量の決定
+local calc_ja_ja_aux
+do
+ local round = tex.round
+ local bg_ag = 2*id_glue - id_glue
+ local bg_ak = 2*id_glue - id_kern
+ local bk_ag = 2*id_kern - id_glue
+ local bk_ak = 2*id_kern - id_kern
+
+ local function blend_diffmet(b, a, rb, ra)
+ return round(luatexja.jfmglue.diffmet_rule((1-rb)*b+rb*a, (1-ra)*b+ra*a))
+ end
+ calc_ja_ja_aux = function (gb, ga, db, da)
+ if luatexja.jfmglue.diffmet_rule ~= math.two_pleft and diffmet_rule ~= math.two_pright
+ and luatexja.jfmglue.diffmet_rule ~= math.two_paverage then
+ db, da = 0, 1
+ end
+ if not gb then
+ if ga then
+ gb = node_new(id_kern, 1); setfield(gb, 'kern', 0)
+ else return nil end
+ elseif not ga then
+ ga = node_new(id_kern, 1); setfield(ga, 'kern', 0)
+ end
+
+ local k = 2*getid(gb) - getid(ga)
+ if k == bg_ag then
+ -- 両方とも glue.
+ setglue(gb, blend_diffmet(
+ getfield(gb, 'width'), getfield(ga, 'width'), db, da),
+ blend_diffmet(
+ getfield(gb, 'stretch'), getfield(ga, 'stretch'), db, da),
+ -blend_diffmet(
+ -getfield(gb, 'shrink'), -getfield(ga, 'shrink'), db, da))
+ node_free(ga)
+ return gb
+ elseif k == bk_ak then
+ -- 両方とも kern.
+ setfield(gb, 'kern', blend_diffmet(
+ getfield(gb, 'kern'), getfield(ga, 'kern'), db, da))
+ node_free(ga)
+ return gb
+ elseif k == bk_ag then
+ -- gb: kern, ga: glue
+ setglue(ga, blend_diffmet(
+ getfield(gb, 'kern'), getfield(ga, 'width'), db, da),
+ blend_diffmet(
+ 0, getfield(ga, 'stretch'), db, da),
+ -blend_diffmet(
+ 0, -getfield(ga, 'shrink'), db, da))
+ node_free(gb)
+ return ga, 0, 0, 0
+ else
+ -- gb: glue, ga: kern
+ setglue(gb, blend_diffmet(
+ getfield(gb, 'width'), getfield(ga, 'kern'), db, da),
+ blend_diffmet(
+ getfield(gb, 'stretch'), 0, db, da),
+ -blend_diffmet(
+ -getfield(gb, 'shrink'), 0, db, da))
+ node_free(ga)
+ return gb
+ end
+ end
+end
+
+local null_skip_table = {0, 0, 0}
+-- get kanjiskip
+local get_kanjiskip, kanjiskip_jfm_flag
+local get_kanjiskip_low
+local calc_ja_ja_glue
+do
+ local KANJI_SKIP = luatexja.icflag_table.KANJI_SKIP
+ local KANJI_SKIP_JFM = luatexja.icflag_table.KANJI_SKIP_JFM
+
+ get_kanjiskip_low = function(flag, qm, bn, bp, bh)
+ if flag or (qm.with_kanjiskip and (bn or bp or bh)) then
+ if kanjiskip_jfm_flag then
+ local g = node_new(id_glue);
+ local bk = qm.kanjiskip or null_skip_table
+ setglue(g, bn and (bn*bk[1]) or 0,
+ bp and (bp*bk[2]) or 0,
+ bh and (bh*bk[3]) or 0, 0, 0)
+ set_attr(g, attr_icflag, KANJI_SKIP_JFM)
+ return g
+ elseif flag then
+ return node_copy(kanji_skip)
+ else
+ local g = node_new(id_glue);
+ setglue(g,
+ bn and (bn*getfield(kanji_skip, 'width')) or 0,
+ bp and (bp*getfield(kanji_skip, 'stretch')) or 0,
+ bh and (bh*getfield(kanji_skip, 'shrink')) or 0,
+ 0, 0)
+ set_attr(g, attr_icflag, KANJI_SKIP_JFM)
+ return g
+ end
+ end
+ end
+
+ get_kanjiskip = function()
+ if Np.auto_kspc==0 or Nq.auto_kspc==0 then
+ return nil
+ elseif Np.auto_kspc or Nq.auto_kspc then
+ local pm, qm = Np.met, Nq.met
+ if (pm.char_type==qm.char_type) and (qm.var==pm.var) then
+ return get_kanjiskip_low(true, qm, 1, 1, 1)
+ else
+ local gb = get_kanjiskip_low(true, qm, 1, 1, 1)
+ local ga = get_kanjiskip_low(true, pm, 1, 1, 1)
+ return calc_ja_ja_aux(gb, ga, 0, 1)
+ end
+ else
+ local g = node_new(id_glue)
+ set_attr(g, attr_icflag, kanjiskip_jfm_flag and KANJI_SKIP_JFM or KANJI_SKIP)
+ return g
+ end
+ end
+
+ calc_ja_ja_glue = function ()
+ local qm, pm = Nq.met, Np.met
+ local qmc, pmc = qm.char_type, pm.char_type
+ if (qmc==pmc) and (qm.var==pm.var) then
+ local g, _, kn, kp, kh = new_jfm_glue(qmc, Nq.class, Np.class)
+ return g, (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(false, qm, kn, kp, kh)
+ else
+ local npn, nqn = Np.nuc, Nq.nuc
+ local gb, db, bn, bp, bh
+ = new_jfm_glue(qmc, Nq.class,
+ slow_find_char_class(Np.char,
+ qm, getchar(npn)))
+ local ga, da, an, ap, ah
+ = new_jfm_glue(pmc,
+ slow_find_char_class(Nq.char,
+ pm, getchar(nqn)),
+ Np.class)
+ local g = calc_ja_ja_aux(gb, ga, db, da)
+ local k
+ if (pmc==qmc) and (qm.var==pm.var) then
+ gb = get_kanjiskip_low(false, qm, bn, bp, bh)
+ ga = get_kanjiskip_low(false, pm, an, ap, ah)
+ k = calc_ja_ja_aux(gb, ga, db, da)
+ end
+ return g, k
+ end
+ end
+end
+
+-------------------- 和欧文間空白量の決定
+
+-- get xkanjiskip
+local get_xkanjiskip, xkanjiskip_jfm_flag
+local get_xkanjiskip_normal, get_xkanjiskip_jfm
+local get_xkanjiskip_low
+do
+ local XKANJI_SKIP = luatexja.icflag_table.XKANJI_SKIP
+ local XKANJI_SKIP_JFM = luatexja.icflag_table.XKANJI_SKIP_JFM
+
+ get_xkanjiskip_low = function(flag, qm, bn, bp, bh)
+ if flag or (qm.with_kanjiskip and (bn or bp or bh)) then
+ if xkanjiskip_jfm_flag then
+ local g = node_new(id_glue);
+ local bk = qm.xkanjiskip or null_skip_table
+ setglue(g, bn and bk[1] or 0,
+ bp and bk[2] or 0,
+ bh and bk[3] or 0, 0, 0)
+ set_attr(g, attr_icflag, XKANJI_SKIP_JFM)
+ return g
+ elseif flag then
+ return node_copy(xkanji_skip)
+ else
+ local g = node_new(id_glue);
+ setglue(g,
+ bn and (bn*getfield(xkanji_skip, 'width')) or 0,
+ bp and (bp*getfield(xkanji_skip, 'stretch')) or 0,
+ bh and (bh*getfield(xkanji_skip, 'shrink')) or 0,
+ 0, 0)
+ set_attr(g, attr_icflag, XKANJI_SKIP_JFM)
+ return g
+ end
+ end
+ end
+
+ get_xkanjiskip = function(Nn)
+ if Np.auto_xspc==0 or Nq.auto_xspc==0 then
+ return nil
+ elseif (Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc) then
+ return get_xkanjiskip_low(true, Nn.met, 1, 1, 1)
+ else
+ local g = node_new(id_glue)
+ set_attr(g, attr_icflag, xkanjiskip_jfm_flag and XKANJI_SKIP_JFM or XKANJI_SKIP)
+ return g
+ end
+ end
+end
+
+-------------------- 隣接した「塊」間の処理
+
+local function combine_spc(name)
+ return (Np[name] or Nq[name]) and ((Np[name]~=0) and (Nq[name]~=0))
+end
+
+-- NA, NB: alchar or math
+local function get_NA_skip()
+ local pm = Np.met
+ local g, _, kn, kp, kh = new_jfm_glue(
+ pm.char_type,
+ fast_find_char_class(
+ (Nq.id == id_math and -1 or (Nq.xspc>=2 and 'alchar' or 'nox_alchar')), pm),
+ Np.class)
+ local k = ((Nq.xspc>=2) and (Np.xspc%2==1) and combine_spc('auto_xspc'))
+ and get_xkanjiskip_low(false, pm, kn, kp, kh)
+ return g, k
+end
+local function get_NB_skip()
+ local qm = Nq.met
+ local g, _, kn, kp, kh = new_jfm_glue(
+ qm.char_type, Nq.class,
+ fast_find_char_class(
+ (Np.id == id_math and -1 or (Np.xspc%2==1 and 'alchar' or 'nox_alchar')), qm)
+ )
+ local k = ((Nq.xspc>=2) and (Np.xspc%2==1) and combine_spc('auto_xspc'))
+ and get_xkanjiskip_low(false, qm, kn, kp, kh)
+ return g, k
+end
+
+local function get_OA_skip(is_kanji)
+ local pm = Np.met
+ local g, _, kn, kp, kh = new_jfm_glue(
+ pm.char_type,
+ fast_find_char_class(
+ (((Nq.id==id_glue)or(Nq.id==id_kern)) and 'glue' or 'jcharbdd'), pm),
+ Np.class)
+ local k
+ if is_kanji==0 then
+ k = combine_spc('auto_kspc') and get_kanjiskip_low(false, pm, kn, kp, kh)
+ end
+ return g, k
+end
+local function get_OB_skip(is_kanji)
+ local qm = Nq.met
+ local g, _, kn, kp, kh = new_jfm_glue(
+ qm.char_type, Nq.class,
+ fast_find_char_class(
+ (((Np.id==id_glue)or(Np.id==id_kern)) and 'glue' or 'jcharbdd'), qm))
+ local k
+ if is_kanji==0 then
+ k = combine_spc('auto_kspc') and get_kanjiskip_low(false, qm, kn, kp, kh)
+ end
+ return g, k
+end
+
+-- (anything) .. jachar
+local function handle_np_jachar(mode)
+ local qid = Nq.id
+ if qid==id_jglyph or ((qid==id_pbox or qid==id_pbox_w) and Nq.met) then
+ local g, k
+ if non_ihb_flag then g, k = calc_ja_ja_glue() end -- M->K
+ if not g then g = get_kanjiskip() end
+ handle_penalty_normal(Nq.post, Np.pre, g);
+ real_insert(g); real_insert(k)
+ elseif Nq.met then -- qid==id_hlist
+ local g, k
+ if non_ihb_flag then g, k = get_OA_skip(0) end -- O_A->K
+ if not g then g = get_kanjiskip() end
+ handle_penalty_normal(0, Np.pre, g); real_insert(g); real_insert(k)
+ elseif Nq.pre then
+ local g, k
+ if non_ihb_flag then g, k = get_NA_skip() end -- N_A->X
+ if not g then g = get_xkanjiskip(Np) end
+ handle_penalty_normal((qid==id_hlist and 0 or Nq.post), Np.pre, g);
+ real_insert(g); real_insert(k)
+ else
+ local g = non_ihb_flag and (get_OA_skip()) -- O_A
+ if qid==id_glue then handle_penalty_normal(0, Np.pre, g)
+ elseif qid==id_kern then handle_penalty_suppress(0, Np.pre, g)
+ else handle_penalty_always(0, Np.pre, g)
+ end
+ real_insert(g)
+ end
+ if mode and Np.kcat%2~=1 then
+ widow_Np.first, widow_Bp, Bp = Np.first, Bp, widow_Bp
+ end
+end
+
+
+-- jachar .. (anything)
+local function handle_nq_jachar()
+ if Np.pre then
+ local g = non_ihb_flag and get_NB_skip() or get_xkanjiskip(Nq) -- N_B->X
+ handle_penalty_normal(Nq.post, (Np.id==id_hlist and 0 or Np.pre), g); real_insert(g)
+ else
+ local g =non_ihb_flag and (get_OB_skip()) -- O_B
+ if Np.id==id_glue then handle_penalty_normal(Nq.post, 0, g)
+ elseif Np.id==id_kern then handle_penalty_suppress(Nq.post, 0, g)
+ else handle_penalty_always(Nq.post, 0, g)
+ end
+ real_insert(g)
+ end
+end
+
+-- (anything) .. (和文文字で始まる hlist)
+local function handle_np_ja_hlist()
+ local qid = Nq.id
+ if qid==id_jglyph or ((qid==id_pbox or qid == id_pbox_w) and Nq.met) then
+ local g = non_ihb_flag and get_OB_skip(0) or get_kanjiskip() -- O_B->K
+ handle_penalty_normal(Nq.post, 0, g); real_insert(g)
+ elseif Nq.met then -- Nq.id==id_hlist
+ local g = get_kanjiskip() -- K
+ handle_penalty_suppress(0, 0, g); real_insert(g)
+ elseif Nq.pre then
+ local g = get_xkanjiskip(Np) -- X
+ handle_penalty_suppress(0, 0, g); real_insert(g)
+ end
+end
+
+-- (和文文字で終わる hlist) .. (anything)
+local function handle_nq_ja_hlist()
+ if Np.pre then
+ local g = get_xkanjiskip(Nq) -- X
+ handle_penalty_suppress(0, 0, g); real_insert(g)
+ end
+end
+
+
+-- Nq が前側のクラスタとなることによる修正
+local adjust_nq
+do
+ local adjust_nq_aux = {
+ [id_glyph] = function() after_alchar(Nq) end, -- after_alchar(Nq)
+ [id_hlist] = function() after_hlist(Nq) end,
+ [id_pbox] = function() after_hlist(Nq) end,
+ [id_disc] = function() after_hlist(Nq) end,
+ [id_pbox_w] = function()
+ luatexbase.call_callback("luatexja.jfmglue.whatsit_after",
+ false, Nq, Np)
+ end,
+ }
+
+ adjust_nq=function()
+ local x = adjust_nq_aux[Nq.id]
+ if x then x() end
+ end
+end
+
+
+-------------------- 開始・終了時の処理
+do
+local node_prev = node.direct.getprev
+-- リスト末尾の処理
+local function handle_list_tail(mode, last)
+ adjust_nq()
+ if mode then
+ -- the current list is to be line-breaked.
+ -- Insert \jcharwidowpenalty
+ if widow_Np.first then handle_penalty_jwp() end
+ else
+ Np=Nq
+ -- the current list is the contents of a hbox
+ local npi, pm = Np.id, Np.met
+ if npi == id_jglyph or (npi==id_pbox and pm) then
+ local g = new_jfm_glue(pm.char_type, Np.class, fast_find_char_class('boxbdd', pm))
+ if g then
+ set_attr(g, attr_icflag, BOXBDD)
+ head = insert_after(head, Np.last, g)
+ end
+ end
+ end
+end
+
+-- リスト先頭の処理
+local function handle_list_head(par_indented)
+ local npi, pm = Np.id, Np.met
+ if npi == id_jglyph or (npi==id_pbox and pm) then
+ if non_ihb_flag then
+ local g = new_jfm_glue(pm.char_type, fast_find_char_class(par_indented, pm), Np.class)
+ if g then
+ set_attr(g, attr_icflag, BOXBDD)
+ if getid(g)==id_glue and #Bp==0 then
+ local h = node_new(id_penalty)
+ setfield(h, 'penalty', 10000); set_attr(h, attr_icflag, BOXBDD)
+ end
+ head = insert_before(head, Np.first, g)
+ end
+ end
+ end
+end
+
+-- initialize
+-- return value: (the initial cursor lp), (last node)
+local init_var
+do
+ local id_local = node.id('local_par')
+ local KANJI_SKIP = luatexja.icflag_table.KANJI_SKIP
+ local XKANJI_SKIP = luatexja.icflag_table.XKANJI_SKIP
+ local KSK = luatexja.stack_table_index.KSK
+ local XSK = luatexja.stack_table_index.XSK
+ local dir_yoko = luatexja.dir_table.dir_yoko
+ local dir_tate = luatexja.dir_table.dir_tate
+ local attr_yablshift = luatexbase.attributes['ltj@yablshift']
+ local attr_tablshift = luatexbase.attributes['ltj@tablshift']
+ local table_pool = {
+ {}, {}, {first=nil},
+ { auto_kspc=nil, auto_xspc=nil, char=nil, class=nil,
+ first=nil, id=nil, last=nil, met=nil, nuc=nil,
+ post=nil, pre=nil, xspc=nil, },
+ { auto_kspc=nil, auto_xspc=nil, char=nil, class=nil,
+ first=nil, id=nil, last=nil, met=nil, nuc=nil,
+ post=nil, pre=nil, xspc=nil, },
+ }
+ init_var = function (mode,dir)
+ -- 1073741823: max_dimen
+ Bp, widow_Bp, widow_Np, Np, Nq
+ = table_pool[1], table_pool[2], table_pool[3], table_pool[4], table_pool[5]
+ for i=1,5 do for j,_ in pairs(table_pool[i]) do table_pool[i][j]=nil end end
+ table_current_stack = ltjs.table_current_stack
+
+ list_dir, tex_dir = (ltjs.list_dir or dir_yoko), (dir or 'TLT')
+ local is_dir_tate = list_dir==dir_tate
+ capsule_glyph = is_dir_tate and ltjw.capsule_glyph_tate or ltjw.capsule_glyph_yoko
+ attr_ablshift = is_dir_tate and attr_tablshift or attr_yablshift
+ local TEMP = node_new(id_glue)
+ -- TEMP is a dummy node, which will be freed at the end of the callback.
+ -- ithout this node, set_attr(kanji_skip, ...) somehow creates an "orphaned" attribute list.
+
+ do
+ kanji_skip, kanjiskip_jfm_flag = skip_table_to_glue(KSK)
+ set_attr(kanji_skip, attr_icflag, KANJI_SKIP)
+ end
+
+ do
+ xkanji_skip, xkanjiskip_jfm_flag = skip_table_to_glue(XSK)
+ set_attr(xkanji_skip, attr_icflag, XKANJI_SKIP)
+ end
+
+ if mode then
+ -- the current list is to be line-breaked:
+ -- hbox from \parindent is skipped.
+ local lp, par_indented, lpi, lps = head, 'boxbdd', getid(head), getsubtype(head)
+ while lp and
+ ((lpi==id_whatsit and lps~=sid_user)
+ or ((lpi==id_hlist) and (lps==3))
+ or (lpi==id_local)) do
+ if (lpi==id_hlist) and (lps==3) then
+ Np.char, par_indented = 'parbdd', 'parbdd'
+ Np.width = getfield(lp, 'width')
+ end
+ lp=node_next(lp); lpi, lps = getid(lp), getsubtype(lp) end
+ return lp, node_tail(head), par_indented, TEMP
+ else
+ return head, nil, 'boxbdd', TEMP
+ end
+ end
+end
+
+local ensure_tex_attr = ltjb.ensure_tex_attr
+local function cleanup(mode, TEMP)
+ -- luatexja.ext_show_node_list(to_node(head), '> ', print)
+ -- adjust attr_icflag for avoiding error
+ if tex.getattribute(attr_icflag)~=0 then ensure_tex_attr(attr_icflag, 0) end
+ node_free(kanji_skip);
+ node_free(xkanji_skip); node_free(TEMP)
+
+ if mode then
+ local h = node_next(head)
+ if getid(h) == id_penalty and getfield(h, 'penalty') == 10000 then
+ h = node_next(h)
+ if getid(h) == id_glue and getsubtype(h) == 15 and not node_next(h) then
+ return false
+ end
+ end
+ end
+ return head
+end
+-------------------- 外部から呼ばれる関数
+
+-- main interface
+function luatexja.jfmglue.main(ahead, mode, dir)
+ if not ahead then return ahead end
+ --luatexja.ext_show_node_list(to_node(ahead ), '>B ', print)
+ --print()
+ head = ahead;
+ local lp, last, par_indented, TEMP = init_var(mode,dir)
+ lp = calc_np(last, lp)
+ if Np then
+ handle_list_head(par_indented)
+ lp = calc_np(last,lp);
+ while Np do
+ adjust_nq();
+ local pid, pm = Np.id, Np.met
+ -- 挿入部
+ if pid == id_jglyph then
+ handle_np_jachar(mode)
+ elseif pm then
+ if pid==id_hlist then handle_np_ja_hlist()
+ else handle_np_jachar() end
+ elseif Nq.met then
+ if Nq.id==id_hlist then handle_nq_ja_hlist()
+ else handle_nq_jachar() end
+ end
+ lp = calc_np(last,lp)
+ end
+ handle_list_tail(mode, last)
+ end
+ --luatexja.ext_show_node_list(to_node(ahead ), '>A ', print)
+ --print()
+ return cleanup(mode, TEMP)
+end
+end
+
+do
+ local IHB = luatexja.userid_table.IHB
+ local BPAR = luatexja.userid_table.BPAR
+ local BOXB = luatexja.userid_table.BOXB
+ local node_prev = node.direct.getprev
+ local node_write = node.direct.write
+
+ -- \inhibitglue
+ function luatexja.jfmglue.create_inhibitglue_node()
+ local tn = node_new(id_whatsit, sid_user)
+ setfield(tn, 'user_id', IHB)
+ setfield(tn, 'type', 100)
+ setfield(tn, 'value', 1)
+ node_write(tn)
+ end
+
+ -- Node for indicating beginning of a paragraph
+ -- (for ltjsclasses)
+ function luatexja.jfmglue.create_beginpar_node()
+ local tn = node_new(id_whatsit, sid_user)
+ setfield(tn, 'user_id', BPAR)
+ setfield(tn, 'type', 100)
+ setfield(tn, 'value', 1)
+ node_write(tn)
+ end
+
+ -- Node for indicating a head/end of a box
+ function luatexja.jfmglue.create_boxbdd_node()
+ local tn = node_new(id_whatsit, sid_user)
+ setfield(tn, 'user_id', BOXB)
+ setfield(tn, 'type', 100)
+ setfield(tn, 'value', 1)
+ node_write(tn)
+ end
+
+ local function whatsit_callback(Np, lp, Nq)
+ if Np and Np.nuc then return Np
+ elseif Np and getfield(lp, 'user_id') == BPAR then
+ Np.first = lp; Np.nuc = lp; Np.last = lp
+ return Np
+ elseif Np and getfield(lp, 'user_id') == BOXB then
+ Np.first = lp; Np.nuc = lp; Np.last = lp
+ if Nq then
+ if Nq.met then
+ Np.class = fast_find_char_class('boxbdd', Nq.met)
+ end
+ Np.met = Nq.met; Np.pre = 0; Np.post = 0; Np.xspc = 0
+ Np.auto_xspc, Np.auto_kspc = 0, 0
+ end
+ return Np
+ else
+ return Np
+ end
+ end
+
+ local function whatsit_after_callback(s, Nq, Np)
+ if not s and getfield(Nq.nuc, 'user_id') == BPAR then
+ local x, y = node_prev(Nq.nuc), Nq.nuc
+ Nq.first, Nq.nuc, Nq.last = x, x, x
+ if Np then
+ if Np.met then
+ Nq.class = fast_find_char_class('parbdd', Np.met)
+ end
+ Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0
+ Nq.auto_xspc, Nq.auto_kspc = 0, 0
+ end
+ head = node_remove(head, y)
+ node_free(y)
+ elseif not s and getfield(Nq.nuc, 'user_id') == BOXB then
+ local x, y = node_prev(Nq.nuc), Nq.nuc
+ Nq.first, Nq.nuc, Nq.last = x, x, x
+ if Np then
+ if Np.met then
+ Nq.class = fast_find_char_class('boxbdd', Np.met)
+ end
+ Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0
+ Nq.auto_xspc, Nq.auto_kspc = 0, 0
+ end
+ head = node_remove(head, y)
+ node_free(y)
+ end
+ return s
+ end
+
+ luatexbase.add_to_callback("luatexja.jfmglue.whatsit_getinfo", whatsit_callback,
+ "luatexja.beginpar.np_info", 1)
+ luatexbase.add_to_callback("luatexja.jfmglue.whatsit_after", whatsit_after_callback,
+ "luatexja.beginpar.np_info_after", 1)
+
+end
+
+luatexja.jfmglue.after_hlist = after_hlist
+luatexja.jfmglue.check_box_high = check_box_high
diff --git a/macros/luatex/generic/luatexja/src/ltj-jfont.lua b/macros/luatex/generic/luatexja/src/ltj-jfont.lua
new file mode 100644
index 0000000000..82e2808e5a
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-jfont.lua
@@ -0,0 +1,1028 @@
+--
+-- luatexja/jfont.lua
+--
+luatexbase.provides_module({
+ name = 'luatexja.jfont',
+ date = '2019/07/08',
+ description = 'Loader for Japanese fonts',
+})
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('charrange'); local ltjc = luatexja.charrange
+luatexja.load_module('rmlgbm'); local ltjr = luatexja.rmlgbm
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+
+local setfield = node.direct.setfield
+local getid = node.direct.getid
+local to_direct = node.direct.todirect
+
+local node_new = node.direct.new
+local node_free = node.direct.free
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local round = tex.round
+local font_getfont = font.getfont
+
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+local attr_curtfnt = luatexbase.attributes['ltj@curtfnt']
+local id_glyph = node.id('glyph')
+local id_kern = node.id('kern')
+local cat_lp = luatexbase.catcodetables['latex-package']
+local FROM_JFM = luatexja.icflag_table.FROM_JFM
+
+luatexja.jfont = luatexja.jfont or {}
+------------------------------------------------------------------------
+-- LOADING JFM
+------------------------------------------------------------------------
+
+local metrics={} -- this table stores all metric informations
+local font_metric_table={} -- [font number] -> jfm_name, jfm_var, size
+
+luatexbase.create_callback("luatexja.load_jfm", "data", function (ft, jn) return ft end)
+
+local jfm_file_name, jfm_var, jfm_ksp
+local defjfm_res
+local jfm_dir, is_def_jfont, vert_activated, auto_enable_vrt2
+
+local function norm_val(a)
+ if (not a) or (a==0.) then
+ return nil
+ elseif a==true then
+ return 1
+ else
+ return a
+ end
+end
+
+local fastcopy=table.fastcopy
+function luatexja.jfont.define_jfm(to)
+ local t = fastcopy(to)
+ local real_char -- Does current character class have the 'real' character?
+ if t.dir~=jfm_dir then
+ defjfm_res= nil; return
+ elseif type(t.zw)~='number' or type(t.zh)~='number' then
+ defjfm_res= nil; return
+ end
+ t.version = (type(t.version)=='number') and t.version or 1
+ t.char_type = {}; t.chars = {}
+ for i,v in pairs(t) do
+ if type(i) == 'number' then -- char_type
+ if not v.chars then
+ if i ~= 0 then defjfm_res= nil; return end
+ else
+ for j,w in pairs(v.chars) do
+ if type(w) == 'number' and w~=-1 then
+ elseif type(w) == 'string' and utf.len(w)==1 then
+ w = utf.byte(w)
+ elseif type(w) == 'string' and utf.len(w)==2 and utf.sub(w,2) == '*' then
+ w = utf.byte(utf.sub(w,1,1))
+ end
+ if not t.chars[w] then
+ t.chars[w] = i
+ else
+ defjfm_res= nil; return
+ end
+ end
+ v.chars = nil
+ end
+ if type(v.align)~='string' then
+ v.align = 'left' -- left
+ end
+ if type(v.width)~='number' then
+ v.width = nil
+ end
+ if type(v.height)~='number' then
+ v.height = (jfm_dir=='tate') and 0.0
+ end
+ if type(v.depth)~='number' then
+ v.depth = (jfm_dir=='tate') and 0.0
+ end
+ if type(v.italic)~='number' then
+ v.italic = 0.0
+ end
+ if type(v.left)~='number' then
+ v.left = 0.0
+ end
+ if type(v.down)~='number' then
+ v.down = 0.0
+ end
+ if t.version>=2 then
+ if v.end_stretch then defjfm_res= nil; return end
+ if v.end_shrink then defjfm_res= nil; return end
+ if v.end_adjust then
+ if type(v.end_adjust)~='table' then
+ v.end_adjust = nil
+ elseif #(v.end_adjust)==0 then
+ v.end_adjust = nil
+ else
+ table.sort(v.end_adjust)
+ end
+ end
+ else
+ v.end_adjust = nil
+ if v.end_stretch and v.end_stretch~=0.0 then
+ v.end_adjust = (v.end_adjust or {})
+ v.end_adjust[#(v.end_adjust)+1] = v.end_stretch
+ end
+ if v.end_shrink and v.end_ahrink~=0.0 then
+ v.end_adjust = (v.end_adjust or {})
+ v.end_adjust[#(v.end_adjust)+1] = -v.end_shrink
+ end
+ if v.end_adjust then v.end_adjust[#(v.end_adjust)+1] = 0.0 end
+ end
+ v.kern = v.kern or {}; v.glue = v.glue or {}
+ for j,x in pairs(v.glue) do
+ if v.kern[j] then defjfm_res= nil; return end
+ x.ratio, x[5] = (x.ratio or (x[5] and 0.5*(1+x[5]) or 0.5)), nil
+ do
+ local xp
+ xp, x[4] = (x.priority or x[4]), nil
+ if type(xp)=='table' and t.version>=2 then
+ if type(xp[1])~='number' or xp[1]<-4 or xp[1]>3 then defjfm_res=nil end -- stretch
+ if type(xp[2])~='number' or xp[2]<-4 or xp[2]>3 then defjfm_res=nil end -- shrink
+ xp = (xp[1]+4)*8+(xp[2]+4)
+ elseif xp and type(xp)~='number' then
+ defjfm_res = nil
+ else
+ xp = (xp or 0)*9+36
+ if xp<0 or xp>=64 then defjfm_res=nil end
+ end
+ x.priority = xp
+ end
+ x.kanjiskip_natural = norm_val(x.kanjiskip_natural)
+ x.kanjiskip_stretch = norm_val(x.kanjiskip_stretch)
+ x.kanjiskip_shrink = norm_val(x.kanjiskip_shrink)
+ end
+ for j,x in pairs(v.kern) do
+ if type(x)=='number' then
+ v.kern[j] = {x, 0.5}
+ elseif type(x)=='table' then
+ v.kern[j] = { x[1], (x.ratio or (x[2] and 0.5*(1+x[2]) or 0.5)) }
+ end
+ end
+ t.char_type[i] = v
+ t[i] = nil
+ end
+ end
+ if t.version<3 then
+ -- In version 3, 'jcharbdd' is divided into
+ -- 'alchar': ALchar (or math boundary)
+ -- 'nox_alchar': ALchar (or math boundary), where xkanjiskip won't inserted
+ -- 'glue': glue/kern, 'jcharbdd': other cases (和文B, rule, ...)
+ t.chars.alchar = t.chars.jcharbdd
+ t.chars.nox_alchar = t.chars.jcharbdd
+ t.chars.glue = t.chars.jcharbdd
+ end
+ t = luatexbase.call_callback("luatexja.load_jfm", t, jfm_file_name)
+ t.size_cache = {}
+ defjfm_res = t
+end
+
+local update_jfm_cache
+do
+ local floor = math.floor
+ local function myround(a) return floor(a+0.5) end
+ local function mult_table(old,scale) -- modified from table.fastcopy
+ if old then
+ local new = { }
+ for k,v in next, old do
+ if type(v) == "table" then
+ new[k] = mult_table(v,scale)
+ elseif type(v) == "number" then
+ new[k] = myround(v*scale)
+ else
+ new[k] = v
+ end
+ end
+ return new
+ else return nil end
+ end
+ local size_cache_num = 1
+ update_jfm_cache = function (j,sz)
+ if metrics[j].size_cache[sz] then return metrics[j].size_cache[sz].index end
+ local t = {}
+ metrics[j].size_cache[sz] = t
+ t.chars = metrics[j].chars
+ t.char_type = mult_table(metrics[j].char_type, sz)
+ for i,v in pairs(t.char_type) do
+ v.align = (v.align=='left') and 0 or
+ ((v.align=='right') and 1 or 0.5)
+ if type(i) == 'number' then -- char_type
+ for k,w in pairs(v.glue) do
+ v[k] = {
+ nil,
+ ratio=w.ratio/sz,
+ priority=FROM_JFM + w.priority/sz,
+ width = w[1], stretch = w[2], shrink = w[3],
+ kanjiskip_natural = w.kanjiskip_natural and w.kanjiskip_natural/sz,
+ kanjiskip_stretch = w.kanjiskip_stretch and w.kanjiskip_stretch/sz,
+ kanjiskip_shrink = w.kanjiskip_shrink and w.kanjiskip_shrink/sz,
+ }
+ end
+ for k,w in pairs(v.kern) do
+ local g = node_new(id_kern, 1)
+ setfield(g, 'kern', w[1])
+ set_attr(g, attr_icflag, FROM_JFM)
+ v[k] = {g, ratio=w[2]/sz}
+ end
+ end
+ v.glue, v.kern = nil, nil
+ end
+ t.kanjiskip = mult_table(metrics[j].kanjiskip, sz)
+ t.xkanjiskip = mult_table(metrics[j].xkanjiskip,sz)
+ t.zw = round(metrics[j].zw*sz)
+ t.zh = round(metrics[j].zh*sz)
+ t.size = sz
+ size_cache_num = size_cache_num + 1
+ t.index = size_cache_num
+ return size_cache_num
+ end
+end
+
+luatexbase.create_callback("luatexja.find_char_class", "data",
+ function (arg, fmtable, char)
+ return 0
+ end)
+local find_char_class
+do
+ local start_time_measure = ltjb.start_time_measure
+ local stop_time_measure = ltjb.stop_time_measure
+ local fcc_temp = { chars_cbcache = {} }
+ setmetatable(
+ fcc_temp.chars_cbcache,
+ {
+ __index = function () return 0 end,
+ })
+ function find_char_class(c,m)
+ -- c: character code, m:
+ local r = (m or fcc_temp).chars_cbcache[c]
+ if not r then
+ r = m.chars[c] or
+ luatexbase.call_callback("luatexja.find_char_class", 0, m, c)
+ m.chars_cbcache[c or 0] = r
+ end
+ return r
+ end
+end
+
+
+------------------------------------------------------------------------
+-- LOADING JAPANESE FONTS
+------------------------------------------------------------------------
+
+local load_jfont_metric
+do
+ local cstemp
+ local global_flag -- true if \globaljfont, false if \jfont
+ load_jfont_metric = function()
+ if jfm_file_name=='' then
+ ltjb.package_error('luatexja',
+ 'no JFM specified',
+ 'To load and define a Japanese font, a JFM must be specified.'..
+ "The JFM 'ujis' will be used for now.")
+ jfm_file_name='ujis'
+ end
+ for j,v in ipairs(metrics) do
+ if v.name==jfm_file_name then return j end
+ end
+ luatexja.load_lua('jfm-' .. jfm_file_name .. '.lua')
+ if defjfm_res then
+ defjfm_res.name = jfm_file_name
+ table.insert(metrics, defjfm_res)
+ return #metrics
+ else
+ return nil
+ end
+ end
+
+-- EXT
+ local utfbyte = utf.byte
+ function luatexja.jfont.jfontdefX(g, dir, csname)
+ jfm_dir, is_def_jfont = dir, true
+ cstemp = csname:sub( (utfbyte(csname,1,1) == tex.escapechar) and 2 or 1, -1)
+ cstemp = cstemp:sub(1, ((cstemp:sub(-1,-1)==' ') and (cstemp:len()>=2)) and -2 or -1)
+ global_flag = g and '\\global' or ''
+ tex.sprint(cat_lp, '\\expandafter\\font\\csname ',
+ (cstemp==' ') and '\\space' or cstemp, '\\endcsname')
+ end
+
+ luatexbase.create_callback("luatexja.define_jfont", "data", function (ft, fn) return ft end)
+
+-- EXT
+ local identifiers = fonts.hashes.identifiers
+ local provides_feature = luaotfload.aux.provides_feature
+ function luatexja.jfont.jfontdefY()
+ local j = load_jfont_metric(jfm_dir)
+ local fn = font.id(cstemp)
+ local f = font_getfont(fn)
+ if not j then
+ ltjb.package_error('luatexja',
+ "bad JFM `" .. jfm_file_name .. "'",
+ 'The JFM file you specified is not valid JFM file.\n'..
+ 'So defining Japanese font is cancelled.')
+ tex.sprint(cat_lp, global_flag, '\\expandafter\\let\\csname ',
+ (cstemp==' ') and '\\space' or cstemp,
+ '\\endcsname=\\relax')
+ return
+ end
+ if not f then return end
+ update_jfm_cache(j, f.size)
+ local ad = identifiers[fn].parameters
+ local sz = metrics[j].size_cache[f.size]
+ local fmtable = { jfm = j, size = f.size, var = jfm_var,
+ with_kanjiskip = jfm_ksp,
+ zw = sz.zw, zh = sz.zh,
+ ascent = ad.ascender,
+ descent = ad.descender,
+ chars = sz.chars, char_type = sz.char_type,
+ kanjiskip = sz.kanjiskip, xkanjiskip = sz.xkanjiskip,
+ chars_cbcache = {},
+ vert_activated = vert_activated,
+ }
+ local t = identifiers[fn]
+ if auto_enable_vrt2 then
+ local lang, scr = t.properties.language, t.properties.script
+ local vrt2_exist = provides_feature(
+ fn, t.properties.script, t.properties.language, 'vrt2'
+ )
+ t.shared.features[vrt2_exist and 'vrt2' or 'vert'] = true
+ end
+
+ --texio.write_nl('term and log',
+ --'JFNT\t' .. identifiers[fn].name .. '\t' .. identifiers[fn].size .. '\t' .. fn, '')
+
+ fmtable = luatexbase.call_callback("luatexja.define_jfont", fmtable, fn)
+ font_metric_table[fn]=fmtable
+ tex.sprint(cat_lp, global_flag, '\\protected\\expandafter\\def\\csname ',
+ (cstemp==' ') and '\\space' or cstemp, '\\endcsname{\\ltj@cur'..
+ (jfm_dir == 'yoko' and 'j' or 't') .. 'fnt', fn, '\\relax}')
+ jfm_file_name = nil
+ end
+end
+
+do
+ local get_dir_count = ltjd.get_dir_count
+ local dir_tate = luatexja.dir_table.dir_tate
+ local tex_get_attr = tex.getattribute
+ -- PUBLIC function
+ function luatexja.jfont.get_zw()
+ local a = font_metric_table[
+ tex_get_attr((get_dir_count()==dir_tate) and attr_curtfnt or attr_curjfnt)]
+ return a and a.zw or 0
+ end
+ function luatexja.jfont.get_zh()
+ local a = font_metric_table[
+ tex_get_attr((get_dir_count()==dir_tate) and attr_curtfnt or attr_curjfnt)]
+ return a and a.zw or 0
+ end
+end
+
+do
+ local gmatch = string.gmatch
+ -- extract jfm_file_name and jfm_var
+ -- normalize position of 'jfm=' and 'jfmvar=' keys
+ local function extract_metric(name)
+ do
+ local nametemp
+ nametemp = name:match('^{(.*)}$')
+ if nametemp then name = nametemp
+ else
+ nametemp = name:match('^"(.*)"$')
+ name = nametemp or name
+ end
+ end
+ jfm_file_name = ''; jfm_var = ''; jfm_ksp = true
+ local tmp, index = name:sub(1, 5), 1
+ if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then
+ index = 6
+ end
+ local p = name:find(":", index); index = p and (p+1) or index
+ while index do
+ local l = name:len()+1
+ local q = name:find(";", index) or l
+ if name:sub(index, index+3)=='jfm=' and q>index+4 then
+ jfm_file_name = name:sub(index+4, q-1)
+ if l~=q then
+ name = name:sub(1,index-1) .. name:sub(q+1)
+ else
+ name = name:sub(1,index-1)
+ index = nil
+ end
+ elseif name:sub(index, index+6)=='jfmvar=' and q>index+6 then
+ jfm_var = name:sub(index+7, q-1)
+ if l~=q then
+ name = name:sub(1,index-1) .. name:sub(q+1)
+ else
+ name = name:sub(1,index-1)
+ index = nil
+ end
+ else
+ index = (l~=q) and (q+1) or nil
+ end
+ end
+ if jfm_file_name~='' then
+ local l = name:sub(-1)
+ name = name
+ .. ((l==':' or l==';') and '' or ';')
+ .. 'jfm=' .. jfm_file_name
+ if jfm_var~='' then
+ name = name .. ';jfmvar=' .. jfm_var
+ end
+ end
+ for x in gmatch (name, "[:;]([+%%-]?)ltjks") do
+ jfm_ksp = not (x=='-')
+ end
+ if jfm_dir == 'tate' then
+ vert_activated = (not name:match('[:;]%-vert')) and (not name:match('[:;]%-vrt2'))
+ auto_enable_vrt2
+ = (not name:match('[:;][+%-]?vert')) and (not name:match('[:;][+%-]?vrt2'))
+ else
+ vert_activated, auto_enable_vrt2 = nil, nil
+ end
+ return name
+ end
+
+ -- define_font callback
+ local otfl_fdr
+ local ltjr_font_callback = ltjr.font_callback
+ function luatexja.font_callback(name, size, id)
+ local new_name = is_def_jfont and extract_metric(name) or name
+ is_def_jfont = false
+ local res = ltjr_font_callback(new_name, size, id, otfl_fdr)
+ luatexbase.call_callback('luatexja.define_font', res, new_name, size, id)
+ -- this callback processes variation selector, so we execute it always
+ return res
+ end
+ luatexbase.create_callback('luatexja.define_font', 'simple', function (n) return n end)
+ otfl_fdr= luatexbase.remove_from_callback('define_font', 'luaotfload.define_font')
+ luatexbase.add_to_callback('define_font',luatexja.font_callback,"luatexja.font_callback", 1)
+
+ local match, sp = string.match, tex.sp
+ local function load_jfmonly(spec, dir)
+ local spec, size = match(spec,'(.+)%s+at%s*([%.%w]*)')
+ size = sp(size); extract_metric(spec)
+ jfm_dir = dir
+ local i = load_jfont_metric()
+ local j = -update_jfm_cache(i, size)
+ font_metric_table[j]=metrics[i].size_cache[s]
+ tex.sprint(cat_lp, '\\ltj@cur' .. (dir=='yoko' and 'j' or 't') .. 'fnt' .. tostring(j) .. '\\relax')
+ end
+ luatexja.jfont.load_jfmonly = load_jfmonly
+end
+
+------------------------------------------------------------------------
+-- LATEX INTERFACE
+------------------------------------------------------------------------
+do
+ -- these function are called from ltj-latex.sty
+ local fenc_list, kyenc_list, ktenc_list = {}, {}, {}
+ function luatexja.jfont.add_fenc_list(enc) fenc_list[enc] = 'true ' end
+ function luatexja.jfont.add_kyenc_list(enc) kyenc_list[enc] = 'true ' end
+ function luatexja.jfont.add_ktenc_list(enc) ktenc_list[enc] = 'true ' end
+ function luatexja.jfont.is_kyenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+ end
+ function luatexja.jfont.is_ktenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (ktenc_list[enc] or 'false '))
+ end
+ function luatexja.jfont.is_kenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (kyenc_list[enc] or ktenc_list[enc] or 'false '))
+ end
+
+ local kfam_list, Nkfam_list = {}, {}
+ function luatexja.jfont.add_kfam(fam)
+ kfam_list[fam]=true
+ end
+ function luatexja.jfont.search_kfam(fam, use_fd)
+ if kfam_list[fam] then
+ tex.sprint(cat_lp, '\\let\\ifin@\\iftrue '); return
+ elseif Nkfam_list[fam] then
+ tex.sprint(cat_lp, '\\let\\ifin@\\iffalse '); return
+ elseif use_fd then
+ for i,_ in pairs(kyenc_list) do
+ if kpse.find_file(string.lower(i)..fam..'.fd') then
+ tex.sprint(cat_lp, '\\let\\ifin@\\iftrue '); return
+ end
+ end
+ for i,_ in pairs(ktenc_list) do
+ if kpse.find_file(string.lower(i)..fam..'.fd') then
+ tex.sprint(cat_lp, '\\let\\ifin@\\iftrue '); return
+ end
+ end
+ Nkfam_list[fam]=true; tex.sprint(cat_lp, '\\let\\ifin@\\iffalse '); return
+ else
+ tex.sprint(cat_lp, '\\let\\ifin@\\iffalse '); return
+ end
+ end
+ local ffam_list, Nffam_list = {}, {}
+ function luatexja.jfont.is_ffam(fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (ffam_list[fam] or 'false '))
+ end
+ function luatexja.jfont.add_ffam(fam)
+ ffam_list[fam]='true '
+ end
+ function luatexja.jfont.search_ffam_declared()
+ local s = ''
+ for i,_ in pairs(fenc_list) do
+ s = s .. '\\cdp@elt{' .. i .. '}'
+ end
+ tex.sprint(cat_lp, s)
+ end
+ function luatexja.jfont.search_ffam_fd(fam)
+ if Nffam_list[fam] then
+ tex.sprint(cat_lp, '\\let\\ifin@\\iffalse '); return
+ else
+ for i,_ in pairs(fenc_list) do
+ if kpse.find_file(string.lower(i)..fam..'.fd') then
+ tex.sprint(cat_lp, '\\let\\ifin@\\iftrue '); return
+ end
+ end
+ Nffam_list[fam]=true; tex.sprint(cat_lp, '\\let\\ifin@\\iffalse '); return
+ end
+ end
+
+end
+------------------------------------------------------------------------
+-- ALTERNATE FONTS
+------------------------------------------------------------------------
+local alt_font_table = {}
+local attr_curaltfnt = {}
+local ucs_out = 0x110000
+
+------ for TeX interface
+-- EXT
+function luatexja.jfont.set_alt_font(b,e,ind,bfnt)
+ -- ind: 新フォント, bfnt: 基底フォント
+ if b>e then b, e = e, b end
+ if b*e<=0 then
+ ltjb.package_error('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ b, e = math.max(0x80,b),math.min(ucs_out-1,e)
+ elseif e<0 then -- b<e<0
+ -- do nothing
+ elseif b<0x80 or e>=ucs_out then
+ ltjb.package_warning('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ b, e = math.max(0x80,b), math.min(ucs_out-1,e)
+ end
+ if not alt_font_table[bfnt] then alt_font_table[bfnt]={} end
+ local t = alt_font_table[bfnt]
+ local ac = font_getfont(ind).characters
+ if bfnt==ind then ind = nil end -- ind == bfnt の場合はテーブルから削除
+ if e>=0 then -- character range
+ for i=b, e do
+ if ac[i]then t[i]=ind end
+ end
+ else
+ b, e = -e, -b
+ local tx = font_metric_table[bfnt].chars
+ for i,v in pairs(tx) do
+ if b<=v and v<=e and ac[i] then t[i]=ind end
+ end
+ end
+end
+
+-- EXT
+function luatexja.jfont.clear_alt_font(bfnt)
+ if alt_font_table[bfnt] then
+ local t = alt_font_table[bfnt]
+ for i,_ in pairs(t) do t[i]=nil; end
+ end
+end
+
+------ used in ltjp.suppress_hyphenate_ja callback
+function luatexja.jfont.replace_altfont(pf, pc)
+ local a = alt_font_table[pf]
+ return a and a[pc] or pf
+end
+
+------ for LaTeX interface
+
+local alt_font_table_latex = {}
+
+-- EXT
+function luatexja.jfont.clear_alt_font_latex(bbase)
+ local t = alt_font_table_latex[bbase]
+ if t then
+ for j,v in pairs(t) do t[j] = nil end
+ end
+end
+
+-- EXT
+function luatexja.jfont.set_alt_font_latex(b,e,ind,bbase)
+ -- ind: Alt font の enc/fam/ser/shape, bbase: 基底フォントの enc/fam/ser/shape
+ if b>e then b, e = e, b end
+ if b*e<=0 then
+ ltjb.package_error('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ b, e = math.max(0x80,b),math.min(ucs_out-1,e)
+ elseif e<0 then -- b<e<0
+ -- do nothing
+ elseif b<0x80 or e>=ucs_out then
+ ltjb.package_warning('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ b, e = math.max(0x80,b), math.min(ucs_out-1,e)
+ end
+
+ if not alt_font_table_latex[bbase] then alt_font_table_latex[bbase]={} end
+ local t = alt_font_table_latex[bbase]
+ if not t[ind] then t[ind] = {} end
+ for i=b, e do
+ for j,v in pairs(t) do
+ if v[i] then -- remove old entry
+ if j~=ind then v[i]=nil end; break
+ end
+ end
+ t[ind][i]=true
+ end
+ -- remove the empty tables
+ for j,v in pairs(t) do
+ local flag_clear = true
+ for k,_ in pairs(v) do flag_clear = false; break end
+ if flag_clear then t[j]=nil end
+ end
+ if ind==bbase then t[bbase] = nil end
+end
+
+-- ここから先は 新 \selectfont の内部でしか実行されない
+do
+ local alt_font_base, alt_font_base_num
+ local aftl_base
+ -- EXT
+ function luatexja.jfont.does_alt_set(bbase)
+ aftl_base = alt_font_table_latex[bbase]
+ tex.sprint(cat_lp, aftl_base and '\\@firstofone' or '\\@gobble')
+ end
+ -- EXT
+ function luatexja.jfont.print_aftl_address()
+ return ';ltjaltfont' .. tostring(aftl_base):sub(8)
+ end
+
+-- EXT
+ function luatexja.jfont.output_alt_font_cmd(dir, bbase)
+ alt_font_base = bbase
+ if dir == 't' then
+ alt_font_base_num = tex.getattribute(attr_curtfnt)
+ else
+ alt_font_base_num = tex.getattribute(attr_curjfnt)
+ end
+ local t = alt_font_table[alt_font_base_num]
+ if t then
+ for i,_ in pairs(t) do t[i]=nil end
+ end
+ t = alt_font_table_latex[bbase]
+ if t then
+ for i,_ in pairs(t) do
+ tex.sprint(cat_lp, '\\ltj@pickup@altfont@aux' .. dir .. '{' .. i .. '}')
+ end
+ end
+ end
+
+-- EXT
+ function luatexja.jfont.pickup_alt_font_a(size_str)
+ local t = alt_font_table_latex[alt_font_base]
+ if t then
+ for i,v in pairs(t) do
+ tex.sprint(cat_lp, '\\expandafter\\ltj@pickup@altfont@copy'
+ .. '\\csname ' .. i .. '/' .. size_str .. '\\endcsname{' .. i .. '}')
+ end
+ end
+ end
+
+ local function pickup_alt_font_class(class, afnt_num, afnt_chars)
+ local t = alt_font_table[alt_font_base_num]
+ local tx = font_metric_table[alt_font_base_num].chars
+ for i,v in pairs(tx) do
+ if v==class and afnt_chars[i] then t[i]=afnt_num end
+ end
+ end
+
+-- EXT
+ function luatexja.jfont.pickup_alt_font_b(afnt_num, afnt_base)
+ local t = alt_font_table[alt_font_base_num]
+ local ac = font_getfont(afnt_num).characters
+ if not t then t = {}; alt_font_table[alt_font_base_num] = t end
+ for i,v in pairs(alt_font_table_latex[alt_font_base]) do
+ if i == afnt_base then
+ for j,_ in pairs(v) do
+ if j>=0 then
+ if ac[j] then t[j]=afnt_num end
+ else -- -n (n>=1) means that the character class n,
+ -- which is defined in the JFM
+ pickup_alt_font_class(-j, afnt_num, ac)
+ end
+ end
+ return
+ end
+ end
+ end
+
+end
+------------------------------------------------------------------------
+-- 終了時に各種ノードを破棄
+------------------------------------------------------------------------
+do
+ function luatexja.jfont.cleanup_size_cache()
+ --local gs, ke = 0, 0
+ for _,n in pairs(metrics) do
+ for i,t in pairs(n.size_cache) do
+ for _,v in pairs(t.char_type) do
+ for k,w in pairs(v) do
+ if type(k)=='number' then
+ --if w[1] then gs = gs + 1 else ke = ke + 1 end
+ if w[1] then node_free(w[1]) end
+ end
+ end
+ end
+ n.size_cache[i]=nil
+ end
+ end
+ end
+end
+
+------------------------------------------------------------------------
+-- 追加のフォント情報
+------------------------------------------------------------------------
+local font_extra_info = {}
+luatexja.jfont.font_extra_info= font_extra_info -- key: fontnumber
+local font_extra_basename = {} -- key: basename
+
+local list_rotate_glyphs
+do
+ -- output of function_uax50.lua
+ -- UAX#50 for Unicode 12.1.0
+ -- t[0] = true
+ local t={ 0, 167, 168, 169, 170, 174, 175, 177, 178, 188, 191, 215, 216, 247, 248, 746, 748, 888, 890, 896, 900, 907, 908, 909, 910, 930, 931, 1328, 1329, 1367, 1369, 1419, 1421, 1424, 1425, 1480, 1488, 1515, 1519, 1525, 1536, 1565, 1566, 1806, 1807, 1867, 1869, 1970, 1984, 2043, 2045, 2094, 2096, 2111, 2112, 2140, 2142, 2143, 2144, 2155, 2208, 2229, 2230, 2238, 2259, 2436, 2437, 2445, 2447, 2449, 2451, 2473, 2474, 2481, 2482, 2483, 2486, 2490, 2492, 2501, 2503, 2505, 2507, 2511, 2519, 2520, 2524, 2526, 2527, 2532, 2534, 2559, 2561, 2564, 2565, 2571, 2575, 2577, 2579, 2601, 2602, 2609, 2610, 2612, 2613, 2615, 2616, 2618, 2620, 2621, 2622, 2627, 2631, 2633, 2635, 2638, 2641, 2642, 2649, 2653, 2654, 2655, 2662, 2679, 2689, 2692, 2693, 2702, 2703, 2706, 2707, 2729, 2730, 2737, 2738, 2740, 2741, 2746, 2748, 2758, 2759, 2762, 2763, 2766, 2768, 2769, 2784, 2788, 2790, 2802, 2809, 2816, 2817, 2820, 2821, 2829, 2831, 2833, 2835, 2857, 2858, 2865, 2866, 2868, 2869, 2874, 2876, 2885, 2887, 2889, 2891, 2894, 2902, 2904, 2908, 2910, 2911, 2916, 2918, 2936, 2946, 2948, 2949, 2955, 2958, 2961, 2962, 2966, 2969, 2971, 2972, 2973, 2974, 2976, 2979, 2981, 2984, 2987, 2990, 3002, 3006, 3011, 3014, 3017, 3018, 3022, 3024, 3025, 3031, 3032, 3046, 3067, 3072, 3085, 3086, 3089, 3090, 3113, 3114, 3130, 3133, 3141, 3142, 3145, 3146, 3150, 3157, 3159, 3160, 3163, 3168, 3172, 3174, 3184, 3191, 3213, 3214, 3217, 3218, 3241, 3242, 3252, 3253, 3258, 3260, 3269, 3270, 3273, 3274, 3278, 3285, 3287, 3294, 3295, 3296, 3300, 3302, 3312, 3313, 3315, 3328, 3332, 3333, 3341, 3342, 3345, 3346, 3397, 3398, 3401, 3402, 3408, 3412, 3428, 3430, 3456, 3458, 3460, 3461, 3479, 3482, 3506, 3507, 3516, 3517, 3518, 3520, 3527, 3530, 3531, 3535, 3541, 3542, 3543, 3544, 3552, 3558, 3568, 3570, 3573, 3585, 3643, 3647, 3676, 3713, 3715, 3716, 3717, 3718, 3723, 3724, 3748, 3749, 3750, 3751, 3774, 3776, 3781, 3782, 3783, 3784, 3790, 3792, 3802, 3804, 3808, 3840, 3912, 3913, 3949, 3953, 3992, 3993, 4029, 4030, 4045, 4046, 4059, 4096, 4294, 4295, 4296, 4301, 4302, 4304, 4352, 4608, 4681, 4682, 4686, 4688, 4695, 4696, 4697, 4698, 4702, 4704, 4745, 4746, 4750, 4752, 4785, 4786, 4790, 4792, 4799, 4800, 4801, 4802, 4806, 4808, 4823, 4824, 4881, 4882, 4886, 4888, 4955, 4957, 4989, 4992, 5018, 5024, 5110, 5112, 5118, 5120, 5121, 5760, 5789, 5792, 5881, 5888, 5901, 5902, 5909, 5920, 5943, 5952, 5972, 5984, 5997, 5998, 6001, 6002, 6004, 6016, 6110, 6112, 6122, 6128, 6138, 6144, 6159, 6160, 6170, 6176, 6265, 6272, 6315, 6400, 6431, 6432, 6444, 6448, 6460, 6464, 6465, 6468, 6510, 6512, 6517, 6528, 6572, 6576, 6602, 6608, 6619, 6622, 6684, 6686, 6751, 6752, 6781, 6783, 6794, 6800, 6810, 6816, 6830, 6832, 6847, 6912, 6988, 6992, 7037, 7040, 7156, 7164, 7224, 7227, 7242, 7245, 7305, 7312, 7355, 7357, 7368, 7376, 7419, 7424, 7674, 7675, 7958, 7960, 7966, 7968, 8006, 8008, 8014, 8016, 8024, 8025, 8026, 8027, 8028, 8029, 8030, 8031, 8062, 8064, 8117, 8118, 8133, 8134, 8148, 8150, 8156, 8157, 8176, 8178, 8181, 8182, 8191, 8192, 8214, 8215, 8224, 8226, 8240, 8242, 8251, 8253, 8258, 8259, 8263, 8266, 8273, 8274, 8293, 8294, 8306, 8308, 8335, 8336, 8349, 8352, 8384, 8400, 8413, 8417, 8418, 8421, 8433, 8450, 8451, 8458, 8463, 8464, 8467, 8469, 8470, 8472, 8478, 8484, 8485, 8486, 8487, 8488, 8489, 8490, 8494, 8495, 8501, 8512, 8517, 8523, 8524, 8526, 8527, 8586, 8588, 8592, 8734, 8735, 8756, 8758, 8960, 8968, 8972, 8992, 8996, 9001, 9003, 9004, 9085, 9115, 9150, 9166, 9167, 9168, 9169, 9180, 9186, 9251, 9252, 9472, 9632, 9754, 9760, 10088, 10102, 10132, 11026, 11056, 11088, 11098, 11124, 11126, 11158, 11160, 11192, 11218, 11219, 11244, 11248, 11264, 11311, 11312, 11359, 11360, 11508, 11513, 11558, 11559, 11560, 11565, 11566, 11568, 11624, 11631, 11633, 11647, 11671, 11680, 11687, 11688, 11695, 11696, 11703, 11704, 11711, 11712, 11719, 11720, 11727, 11728, 11735, 11736, 11743, 11744, 11856, 12296, 12306, 12308, 12320, 12336, 12337, 12448, 12449, 12540, 12541, 42192, 42540, 42560, 42744, 42752, 42944, 42946, 42951, 42999, 43052, 43056, 43066, 43072, 43128, 43136, 43206, 43214, 43226, 43232, 43348, 43359, 43360, 43392, 43470, 43471, 43482, 43486, 43519, 43520, 43575, 43584, 43598, 43600, 43610, 43612, 43715, 43739, 43767, 43777, 43783, 43785, 43791, 43793, 43799, 43808, 43815, 43816, 43823, 43824, 43880, 43888, 44014, 44016, 44026, 55296, 57344, 64256, 64263, 64275, 64280, 64285, 64311, 64312, 64317, 64318, 64319, 64320, 64322, 64323, 64325, 64326, 64450, 64467, 64832, 64848, 64912, 64914, 64968, 65008, 65022, 65024, 65040, 65056, 65072, 65097, 65104, 65112, 65119, 65123, 65127, 65136, 65141, 65142, 65277, 65279, 65280, 65288, 65290, 65293, 65294, 65306, 65311, 65339, 65340, 65341, 65342, 65343, 65344, 65371, 65471, 65474, 65480, 65482, 65488, 65490, 65496, 65498, 65501, 65507, 65508, 65512, 65519, 65529, 65532, 65536, 65548, 65549, 65575, 65576, 65595, 65596, 65598, 65599, 65614, 65616, 65630, 65664, 65787, 65792, 65795, 65799, 65844, 65847, 65935, 65936, 65948, 65952, 65953, 66000, 66046, 66176, 66205, 66208, 66257, 66272, 66300, 66304, 66340, 66349, 66379, 66384, 66427, 66432, 66462, 66463, 66500, 66504, 66518, 66560, 66718, 66720, 66730, 66736, 66772, 66776, 66812, 66816, 66856, 66864, 66916, 66927, 66928, 67072, 67383, 67392, 67414, 67424, 67432, 67584, 67590, 67592, 67593, 67594, 67638, 67639, 67641, 67644, 67645, 67647, 67670, 67671, 67743, 67751, 67760, 67808, 67827, 67828, 67830, 67835, 67868, 67871, 67898, 67903, 67904, 68000, 68024, 68028, 68048, 68050, 68100, 68101, 68103, 68108, 68116, 68117, 68120, 68121, 68150, 68152, 68155, 68159, 68169, 68176, 68185, 68192, 68256, 68288, 68327, 68331, 68343, 68352, 68406, 68409, 68438, 68440, 68467, 68472, 68498, 68505, 68509, 68521, 68528, 68608, 68681, 68736, 68787, 68800, 68851, 68858, 68904, 68912, 68922, 69216, 69247, 69376, 69416, 69424, 69466, 69600, 69623, 69632, 69710, 69714, 69744, 69759, 69826, 69837, 69838, 69840, 69865, 69872, 69882, 69888, 69941, 69942, 69959, 69968, 70007, 70016, 70094, 70096, 70112, 70113, 70133, 70144, 70162, 70163, 70207, 70272, 70279, 70280, 70281, 70282, 70286, 70287, 70302, 70303, 70314, 70320, 70379, 70384, 70394, 70400, 70404, 70405, 70413, 70415, 70417, 70419, 70441, 70442, 70449, 70450, 70452, 70453, 70458, 70459, 70469, 70471, 70473, 70475, 70478, 70480, 70481, 70487, 70488, 70493, 70500, 70502, 70509, 70512, 70517, 70656, 70746, 70747, 70748, 70749, 70752, 70784, 70856, 70864, 70874, 71168, 71237, 71248, 71258, 71264, 71277, 71296, 71353, 71360, 71370, 71424, 71451, 71453, 71468, 71472, 71488, 71680, 71740, 71840, 71923, 71935, 71936, 72096, 72104, 72106, 72152, 72154, 72165, 72384, 72441, 72704, 72713, 72714, 72759, 72760, 72774, 72784, 72813, 72816, 72848, 72850, 72872, 72873, 72887, 72960, 72967, 72968, 72970, 72971, 73015, 73018, 73019, 73020, 73022, 73023, 73032, 73040, 73050, 73056, 73062, 73063, 73065, 73066, 73103, 73104, 73106, 73107, 73113, 73120, 73130, 73440, 73465, 73664, 73714, 73727, 74650, 74752, 74863, 74864, 74869, 74880, 75076, 92160, 92729, 92736, 92767, 92768, 92778, 92782, 92784, 92880, 92910, 92912, 92918, 92928, 92998, 93008, 93018, 93019, 93026, 93027, 93048, 93053, 93072, 93760, 93851, 93952, 94027, 94031, 94088, 94095, 94112, 113664, 113771, 113776, 113789, 113792, 113801, 113808, 113818, 113820, 113828, 119296, 119366, 119808, 119893, 119894, 119965, 119966, 119968, 119970, 119971, 119973, 119975, 119977, 119981, 119982, 119994, 119995, 119996, 119997, 120004, 120005, 120070, 120071, 120075, 120077, 120085, 120086, 120093, 120094, 120122, 120123, 120127, 120128, 120133, 120134, 120135, 120138, 120145, 120146, 120486, 120488, 120780, 120782, 120832, 122880, 122887, 122888, 122905, 122907, 122914, 122915, 122917, 122918, 122923, 123136, 123181, 123184, 123198, 123200, 123210, 123214, 123216, 123584, 123642, 123647, 123648, 124928, 125125, 125127, 125143, 125184, 125260, 125264, 125274, 125278, 125280, 126065, 126133, 126209, 126270, 126464, 126468, 126469, 126496, 126497, 126499, 126500, 126501, 126503, 126504, 126505, 126515, 126516, 126520, 126521, 126522, 126523, 126524, 126530, 126531, 126535, 126536, 126537, 126538, 126539, 126540, 126541, 126544, 126545, 126547, 126548, 126549, 126551, 126552, 126553, 126554, 126555, 126556, 126557, 126558, 126559, 126560, 126561, 126563, 126564, 126565, 126567, 126571, 126572, 126579, 126580, 126584, 126585, 126589, 126590, 126591, 126592, 126602, 126603, 126620, 126625, 126628, 126629, 126634, 126635, 126652, 126704, 126706, 129024, 129036, 129040, 129096, 129104, 129114, 129120, 129160, 129168, 129198, 917505, 917506, 917536, 917632, 917760, 918000 }
+ local function rotate_in_uax50(i)
+ local lo, hi = 1, #t
+ while lo < hi do
+ local mi = math.ceil((lo+hi)/2)
+ if t[mi]<=i then lo=mi else hi=mi-1 end
+ end
+ return lo%2==1
+ end
+ list_rotate_glyphs = function (dest, id)
+ if id.specification and id.resources then
+ local rot = {}
+ for i,_ in pairs(id.characters) do
+ if rotate_in_uax50(i) then rot[i] = true end
+ end
+ if id.resources.sequences then
+ for _,i in pairs(id.resources.sequences) do
+ if i.order[1]== 'vert' and i.type == 'gsub_single' and i.steps then
+ for _,j in pairs(i.steps) do
+ if type(j)=='table' then
+ if type(j.coverage)=='table' then
+ for i,_ in pairs(j.coverage) do rot[i]=nil end
+ end
+ end
+ end
+ end
+ end; end
+ -- コードポイントが共有されているグリフについて
+ if id.resources.duplicates then
+ for i,v in pairs(id.resources.duplicates) do
+ local f = rot[i]
+ for j,_ in pairs(v) do f = f and rot[j] end
+ rot[i]=f
+ for j,_ in pairs(v) do rot[j] = f end
+ end; end
+
+ for i,_ in pairs(rot) do
+ dest = dest or {}
+ dest.rotation = dest.rotation or {}
+ dest.rotation[i] = true
+ end
+ end
+ return dest
+ end
+end
+
+-- vertical metrics
+local prepare_fl_data
+do
+ local sort = table.sort
+ prepare_fl_data = function (dest, id)
+ local ascent = id.shared.rawdata.metadata.ascender
+ local t_vorigin, t_ind_to_uni = {}, {}
+ for i,v in pairs(id.shared.rawdata.descriptions) do
+ t_ind_to_uni[v.index] = i
+ if v.tsb then
+ local j = v.boundingbox[4] + v.tsb
+ if j~=ascent then t_vorigin[i]=j end
+ end
+ end
+ dest = dest or {}
+ dest.ind_to_uni = t_ind_to_uni
+ dest.vorigin = t_vorigin
+ return dest
+ end
+end
+
+--
+do
+ local function prepare_extra_data_base(id)
+ if (not id) or (not id.filename) then return end
+ local bname = id.psname or file.nameonly(id.filename)
+ if not font_extra_basename[bname] then
+ ltjb.remove_cache("extra_" .. string.lower(bname)) -- remove cache
+ local dat = prepare_fl_data(dat, id)
+ dat = list_rotate_glyphs(dat, id)
+ font_extra_basename[bname] = dat or {}
+ return bname
+ end
+ end
+ local function prepare_extra_data_font(id, res)
+ if type(res)=='table' and res.shared and (res.psname or res.filename) then
+ font_extra_info[id] = font_extra_basename[res.psname or file.nameonly(res.filename)]
+ end
+ end
+ luatexbase.add_to_callback(
+ 'luaotfload.patch_font',
+ function (tfmdata)
+ -- these function is executed one time per one fontfile
+ prepare_extra_data_base(tfmdata); return tfmdata
+ end,
+ 'ltj.prepare_extra_data', 1)
+ luatexbase.add_to_callback(
+ 'luatexja.define_font',
+ function (res, name, size, id)
+ prepare_extra_data_font(id, res)
+ end,
+ 'ltj.prepare_extra_data', 1)
+
+ local nulltable = {} -- dummy
+ ltjr.vert_addfunc = function (n) font_extra_info[n] = nulltable end
+
+ local identifiers = fonts.hashes.identifiers
+ for i=1,font.nextid()-1 do
+ if identifiers[i] then
+ prepare_extra_data_base(identifiers[i])
+ prepare_extra_data_font(i,identifiers[i])
+ end
+ end
+end
+
+------------------------------------------------------------------------
+-- make table of vertical glyphs which does not covered by vert feature
+-- nor UTR#50
+------------------------------------------------------------------------
+do
+------------------------------------------------------------------------
+-- VERT VARIANT TABLE
+------------------------------------------------------------------------
+ local provides_feature = luaotfload.aux.provides_feature
+ local vert_form_table = {
+ [0x3001]=0xFE11, [0x3002]=0xFE12, [0x3016]=0xFE17, [0x3017]=0xFE18,
+ [0x2026]=0xFE19,
+ [0x2025]=0xFE30, [0x2014]=0xFE31, [0x2013]=0xFE32, [0xFF3F]=0xFE33,
+ [0xFF08]=0xFE35, [0xFF09]=0xFE36, [0xFF5B]=0xFE37, [0xFF5D]=0xFE38,
+ [0x3014]=0xFE39, [0x3015]=0xFE3A, [0x3010]=0xFE3B, [0x3011]=0xFE3C,
+ [0x300A]=0xFE3D, [0x300B]=0xFE3E, [0x3008]=0xFE3F, [0x3009]=0xFE40,
+ [0x300C]=0xFE41, [0x300D]=0xFE42, [0x300E]=0xFE43, [0x300F]=0xFE44,
+ [0xFF3B]=0xFE47, [0xFF3D]=0xFE48,
+ }
+ local vert_jpotf_table = {}
+ local function add_vform(coverage, vform, ft, add_vert, jpotf_vert)
+ if type(coverage)~='table' then return end
+ for i,v in pairs(vert_form_table) do
+ if not coverage[i] and ft.characters[v] then vform[i] = v end
+ end
+ if jpotf_vert then
+ for i,v in pairs(vert_jpotf_table) do
+ if ft.characters[v] then vform[i] = coverage[v] or vform[v] or v end
+ end
+ end
+ if add_vert then -- vert feature が有効にならない場合
+ for i,v in pairs(coverage) do vform[i] = vform[i] or v end
+ end
+ end
+
+ local utfbyte, utfsub = utf.byte, utf.sub
+ luatexja.jfont.register_vert_replace = function(t)
+ for i,v in pairs(t) do
+ local ic = (type(i)=='number') and i or
+ ((type(i)=='string') and utfbyte(utfsub(i,1,1)) or nil)
+ if ic then
+ vert_jpotf_table[ic] = (type(v)=='number') and v or
+ ((type(v)=='string') and utfbyte(utfsub(v,1,1)) or nil)
+ end
+ end
+ end
+
+luatexbase.add_to_callback(
+ "luatexja.define_jfont",
+ function (fmtable, fnum)
+ local vform = {}; fmtable.vform = vform
+ local t = font_getfont(fnum)
+ if t.specification and t.resources then
+ local add_vert
+ = not (provides_feature(fnum, t.properties.script, t.properties.language, 'vert'))
+ and not (provides_feature(fnum, t.properties.script, t.properties.language, 'vrt2'))
+ local jpotf_vert = t.shared.features.jpotf
+ -- 現在の language, script で vert もvrt2 も有効にできない場合,強制的に vert 適用
+ for _,i in pairs(t.resources.sequences) do
+ if i.order[1]== 'vert' and i.type == 'gsub_single' and i.steps then
+ for _,j in pairs(i.steps) do
+ if type(j)=='table' then
+ add_vform(j.coverage,vform, t, add_vert, jpotf_vert)
+ end
+ end
+ end
+ end
+ end
+ return fmtable
+ end, 'ltj.get_vert_form', 1
+)
+end
+
+------------------------------------------------------------------------
+-- supply tounicode entries
+------------------------------------------------------------------------
+do
+ local ltjr_prepare_cid_font = ltjr.prepare_cid_font
+ luatexbase.add_to_callback(
+ 'luaotfload.patch_font',
+ function (tfmdata)
+ local cidinfo = tfmdata.cidinfo or tfmdata.resources.cidinfo
+ if cidinfo and cidinfo.registry and cidinfo.ordering then
+ local rd = ltjr_prepare_cid_font(cidinfo.registry, cidinfo.ordering)
+ if rd then
+ local ru, rc = rd.resources.unicodes, rd.characters
+ for i,v in pairs(tfmdata.characters) do
+ local w = ru["Japan1." .. tostring(v.index)]
+ if w then
+ v.tounicode = v.tounicode or rc[w]. tounicode
+ end
+ end
+ end
+ end
+
+ return tfmdata
+ end,
+ 'ltj.supply_tounicode', 1)
+end
+
+
+------------------------------------------------------------------------
+-- MISC
+------------------------------------------------------------------------
+do
+ local getfont = node.direct.getfont
+ local getchar = node.direct.getchar
+ local get_dir_count = ltjd.get_dir_count
+ local is_ucs_in_japanese_char = ltjc.is_ucs_in_japanese_char_direct
+ local ensure_tex_attr = ltjb.ensure_tex_attr
+ local node_write = node.direct.write
+ local font = font
+ local new_ic_kern
+ local dir_tate = luatexja.dir_table.dir_tate
+ if status.luatex_version>=89 then
+ new_ic_kern = function(g) return node_new(id_kern,3) end
+ else
+ local ITALIC = luatexja.icflag_table.ITALIC
+ new_ic_kern = function()
+ local g = node_new(id_kern, 1)
+ set_attr(g, attr_icflag, ITALIC)
+ return g
+ end
+ end
+ -- EXT: italic correction
+ function luatexja.jfont.append_italic()
+ local p = to_direct(tex.nest[tex.nest.ptr].tail)
+ local TEMP = node_new(id_kern)
+ if p and getid(p)==id_glyph then
+ if is_ucs_in_japanese_char(p) then
+ local j = font_metric_table[
+ has_attr(p, (get_dir_count()==dir_tate) and attr_curtfnt or attr_curjfnt)
+ ]
+ local g = new_ic_kern()
+ setfield(g, 'kern', j.char_type[find_char_class(getchar(p), j)].italic)
+ node_write(g); ensure_tex_attr(attr_icflag, 0)
+ else
+ local f = getfont(p)
+ local h = font_getfont(f) or font.fonts[f]
+ if h then
+ local g = new_ic_kern()
+ if h.characters[getchar(p)] and h.characters[getchar(p)].italic then
+ setfield(g, 'kern', h.characters[getchar(p)].italic)
+ node_write(g); ensure_tex_attr(attr_icflag, 0)
+ end
+ end
+ end
+ end
+ node_free(TEMP)
+ end
+end
+
+luatexja.jfont.metrics = metrics
+luatexja.jfont.font_metric_table = font_metric_table
+luatexja.jfont.find_char_class = find_char_class
+
+luatexja.jfont.update_jfm_cache = update_jfm_cache
diff --git a/macros/luatex/generic/luatexja/src/ltj-jisx0208.lua b/macros/luatex/generic/luatexja/src/ltj-jisx0208.lua
new file mode 100644
index 0000000000..a31dbcd786
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-jisx0208.lua
@@ -0,0 +1,6883 @@
+return {
+version = 2,
+table_jisx0208_uptex = {
+ [0x101] = 0x3000, --( )
+ [0x102] = 0x3001, --(、)
+ [0x103] = 0x3002, --(。)
+ [0x104] = 0xFF0C, --(,)
+ [0x105] = 0xFF0E, --(.)
+ [0x106] = 0x30FB, --(・)
+ [0x107] = 0xFF1A, --(:)
+ [0x108] = 0xFF1B, --(;)
+ [0x109] = 0xFF1F, --(?)
+ [0x10A] = 0xFF01, --(!)
+ [0x10B] = 0x309B, --(゛)
+ [0x10C] = 0x309C, --(゜)
+ [0x10D] = 0xB4,
+ [0x10E] = 0xFF40, --(`)
+ [0x10F] = 0xA8,
+ [0x110] = 0xFF3E, --(^)
+ [0x111] = 0xFFE3, --( ̄)
+ [0x112] = 0xFF3F, --(_)
+ [0x113] = 0x30FD, --(ヽ)
+ [0x114] = 0x30FE, --(ヾ)
+ [0x115] = 0x309D, --(ゝ)
+ [0x116] = 0x309E, --(ゞ)
+ [0x117] = 0x3003, --(〃)
+ [0x118] = 0x4EDD, --(仝)
+ [0x119] = 0x3005, --(々)
+ [0x11A] = 0x3006, --(〆)
+ [0x11B] = 0x3007, --(〇)
+ [0x11C] = 0x30FC, --(ー)
+ [0x11D] = 0x2015, --(―)
+ [0x11E] = 0x2010, --(‐)
+ [0x11F] = 0xFF0F, --(/)
+ [0x120] = 0xFF3C, --(\)
+ [0x121] = 0x301C, --(〜)
+ [0x122] = 0x2016, --(‖)
+ [0x123] = 0xFF5C, --(|)
+ [0x124] = 0x2026, --(…)
+ [0x125] = 0x2025, --(‥)
+ [0x126] = 0x2018, --(‘)
+ [0x127] = 0x2019, --(’)
+ [0x128] = 0x201C, --(“)
+ [0x129] = 0x201D, --(”)
+ [0x12A] = 0xFF08, --(()
+ [0x12B] = 0xFF09, --())
+ [0x12C] = 0x3014, --(〔)
+ [0x12D] = 0x3015, --(〕)
+ [0x12E] = 0xFF3B, --([)
+ [0x12F] = 0xFF3D, --(])
+ [0x130] = 0xFF5B, --({)
+ [0x131] = 0xFF5D, --(})
+ [0x132] = 0x3008, --(〈)
+ [0x133] = 0x3009, --(〉)
+ [0x134] = 0x300A, --(《)
+ [0x135] = 0x300B, --(》)
+ [0x136] = 0x300C, --(「)
+ [0x137] = 0x300D, --(」)
+ [0x138] = 0x300E, --(『)
+ [0x139] = 0x300F, --(』)
+ [0x13A] = 0x3010, --(【)
+ [0x13B] = 0x3011, --(】)
+ [0x13C] = 0xFF0B, --(+)
+ [0x13D] = 0x2212, --(−)
+ [0x13E] = 0xB1,
+ [0x13F] = 0xD7,
+ [0x140] = 0xF7,
+ [0x141] = 0xFF1D, --(=)
+ [0x142] = 0x2260, --(≠)
+ [0x143] = 0xFF1C, --(<)
+ [0x144] = 0xFF1E, --(>)
+ [0x145] = 0x2266, --(≦)
+ [0x146] = 0x2267, --(≧)
+ [0x147] = 0x221E, --(∞)
+ [0x148] = 0x2234, --(∴)
+ [0x149] = 0x2642, --(♂)
+ [0x14A] = 0x2640, --(♀)
+ [0x14B] = 0xB0,
+ [0x14C] = 0x2032, --(′)
+ [0x14D] = 0x2033, --(″)
+ [0x14E] = 0x2103, --(℃)
+ [0x14F] = 0xFFE5, --(¥)
+ [0x150] = 0xFF04, --($)
+ [0x151] = 0xFFE0, --(¢)
+ [0x152] = 0xFFE1, --(£)
+ [0x153] = 0xFF05, --(%)
+ [0x154] = 0xFF03, --(#)
+ [0x155] = 0xFF06, --(&)
+ [0x156] = 0xFF0A, --(*)
+ [0x157] = 0xFF20, --(@)
+ [0x158] = 0xA7,
+ [0x159] = 0x2606, --(☆)
+ [0x15A] = 0x2605, --(★)
+ [0x15B] = 0x25CB, --(○)
+ [0x15C] = 0x25CF, --(●)
+ [0x15D] = 0x25CE, --(◎)
+ [0x15E] = 0x25C7, --(◇)
+ [0x201] = 0x25C6, --(◆)
+ [0x202] = 0x25A1, --(□)
+ [0x203] = 0x25A0, --(■)
+ [0x204] = 0x25B3, --(△)
+ [0x205] = 0x25B2, --(▲)
+ [0x206] = 0x25BD, --(▽)
+ [0x207] = 0x25BC, --(▼)
+ [0x208] = 0x203B, --(※)
+ [0x209] = 0x3012, --(〒)
+ [0x20A] = 0x2192, --(→)
+ [0x20B] = 0x2190, --(←)
+ [0x20C] = 0x2191, --(↑)
+ [0x20D] = 0x2193, --(↓)
+ [0x20E] = 0x3013, --(〓)
+ [0x21A] = 0x2208, --(∈)
+ [0x21B] = 0x220B, --(∋)
+ [0x21C] = 0x2286, --(⊆)
+ [0x21D] = 0x2287, --(⊇)
+ [0x21E] = 0x2282, --(⊂)
+ [0x21F] = 0x2283, --(⊃)
+ [0x220] = 0x222A, --(∪)
+ [0x221] = 0x2229, --(∩)
+ [0x22A] = 0x2227, --(∧)
+ [0x22B] = 0x2228, --(∨)
+ [0x22C] = 0xFFE2, --(¬)
+ [0x22D] = 0x21D2, --(⇒)
+ [0x22E] = 0x21D4, --(⇔)
+ [0x22F] = 0x2200, --(∀)
+ [0x230] = 0x2203, --(∃)
+ [0x23C] = 0x2220, --(∠)
+ [0x23D] = 0x22A5, --(⊥)
+ [0x23E] = 0x2312, --(⌒)
+ [0x23F] = 0x2202, --(∂)
+ [0x240] = 0x2207, --(∇)
+ [0x241] = 0x2261, --(≡)
+ [0x242] = 0x2252, --(≒)
+ [0x243] = 0x226A, --(≪)
+ [0x244] = 0x226B, --(≫)
+ [0x245] = 0x221A, --(√)
+ [0x246] = 0x223D, --(∽)
+ [0x247] = 0x221D, --(∝)
+ [0x248] = 0x2235, --(∵)
+ [0x249] = 0x222B, --(∫)
+ [0x24A] = 0x222C, --(∬)
+ [0x252] = 0x212B, --(Å)
+ [0x253] = 0x2030, --(‰)
+ [0x254] = 0x266F, --(♯)
+ [0x255] = 0x266D, --(♭)
+ [0x256] = 0x266A, --(♪)
+ [0x257] = 0x2020, --(†)
+ [0x258] = 0x2021, --(‡)
+ [0x259] = 0xB6,
+ [0x25E] = 0x25EF, --(◯)
+ [0x310] = 0xFF10, --(0)
+ [0x311] = 0xFF11, --(1)
+ [0x312] = 0xFF12, --(2)
+ [0x313] = 0xFF13, --(3)
+ [0x314] = 0xFF14, --(4)
+ [0x315] = 0xFF15, --(5)
+ [0x316] = 0xFF16, --(6)
+ [0x317] = 0xFF17, --(7)
+ [0x318] = 0xFF18, --(8)
+ [0x319] = 0xFF19, --(9)
+ [0x321] = 0xFF21, --(A)
+ [0x322] = 0xFF22, --(B)
+ [0x323] = 0xFF23, --(C)
+ [0x324] = 0xFF24, --(D)
+ [0x325] = 0xFF25, --(E)
+ [0x326] = 0xFF26, --(F)
+ [0x327] = 0xFF27, --(G)
+ [0x328] = 0xFF28, --(H)
+ [0x329] = 0xFF29, --(I)
+ [0x32A] = 0xFF2A, --(J)
+ [0x32B] = 0xFF2B, --(K)
+ [0x32C] = 0xFF2C, --(L)
+ [0x32D] = 0xFF2D, --(M)
+ [0x32E] = 0xFF2E, --(N)
+ [0x32F] = 0xFF2F, --(O)
+ [0x330] = 0xFF30, --(P)
+ [0x331] = 0xFF31, --(Q)
+ [0x332] = 0xFF32, --(R)
+ [0x333] = 0xFF33, --(S)
+ [0x334] = 0xFF34, --(T)
+ [0x335] = 0xFF35, --(U)
+ [0x336] = 0xFF36, --(V)
+ [0x337] = 0xFF37, --(W)
+ [0x338] = 0xFF38, --(X)
+ [0x339] = 0xFF39, --(Y)
+ [0x33A] = 0xFF3A, --(Z)
+ [0x341] = 0xFF41, --(a)
+ [0x342] = 0xFF42, --(b)
+ [0x343] = 0xFF43, --(c)
+ [0x344] = 0xFF44, --(d)
+ [0x345] = 0xFF45, --(e)
+ [0x346] = 0xFF46, --(f)
+ [0x347] = 0xFF47, --(g)
+ [0x348] = 0xFF48, --(h)
+ [0x349] = 0xFF49, --(i)
+ [0x34A] = 0xFF4A, --(j)
+ [0x34B] = 0xFF4B, --(k)
+ [0x34C] = 0xFF4C, --(l)
+ [0x34D] = 0xFF4D, --(m)
+ [0x34E] = 0xFF4E, --(n)
+ [0x34F] = 0xFF4F, --(o)
+ [0x350] = 0xFF50, --(p)
+ [0x351] = 0xFF51, --(q)
+ [0x352] = 0xFF52, --(r)
+ [0x353] = 0xFF53, --(s)
+ [0x354] = 0xFF54, --(t)
+ [0x355] = 0xFF55, --(u)
+ [0x356] = 0xFF56, --(v)
+ [0x357] = 0xFF57, --(w)
+ [0x358] = 0xFF58, --(x)
+ [0x359] = 0xFF59, --(y)
+ [0x35A] = 0xFF5A, --(z)
+ [0x401] = 0x3041, --(ぁ)
+ [0x402] = 0x3042, --(あ)
+ [0x403] = 0x3043, --(ぃ)
+ [0x404] = 0x3044, --(い)
+ [0x405] = 0x3045, --(ぅ)
+ [0x406] = 0x3046, --(う)
+ [0x407] = 0x3047, --(ぇ)
+ [0x408] = 0x3048, --(え)
+ [0x409] = 0x3049, --(ぉ)
+ [0x40A] = 0x304A, --(お)
+ [0x40B] = 0x304B, --(か)
+ [0x40C] = 0x304C, --(が)
+ [0x40D] = 0x304D, --(き)
+ [0x40E] = 0x304E, --(ぎ)
+ [0x40F] = 0x304F, --(く)
+ [0x410] = 0x3050, --(ぐ)
+ [0x411] = 0x3051, --(け)
+ [0x412] = 0x3052, --(げ)
+ [0x413] = 0x3053, --(こ)
+ [0x414] = 0x3054, --(ご)
+ [0x415] = 0x3055, --(さ)
+ [0x416] = 0x3056, --(ざ)
+ [0x417] = 0x3057, --(し)
+ [0x418] = 0x3058, --(じ)
+ [0x419] = 0x3059, --(す)
+ [0x41A] = 0x305A, --(ず)
+ [0x41B] = 0x305B, --(せ)
+ [0x41C] = 0x305C, --(ぜ)
+ [0x41D] = 0x305D, --(そ)
+ [0x41E] = 0x305E, --(ぞ)
+ [0x41F] = 0x305F, --(た)
+ [0x420] = 0x3060, --(だ)
+ [0x421] = 0x3061, --(ち)
+ [0x422] = 0x3062, --(ぢ)
+ [0x423] = 0x3063, --(っ)
+ [0x424] = 0x3064, --(つ)
+ [0x425] = 0x3065, --(づ)
+ [0x426] = 0x3066, --(て)
+ [0x427] = 0x3067, --(で)
+ [0x428] = 0x3068, --(と)
+ [0x429] = 0x3069, --(ど)
+ [0x42A] = 0x306A, --(な)
+ [0x42B] = 0x306B, --(に)
+ [0x42C] = 0x306C, --(ぬ)
+ [0x42D] = 0x306D, --(ね)
+ [0x42E] = 0x306E, --(の)
+ [0x42F] = 0x306F, --(は)
+ [0x430] = 0x3070, --(ば)
+ [0x431] = 0x3071, --(ぱ)
+ [0x432] = 0x3072, --(ひ)
+ [0x433] = 0x3073, --(び)
+ [0x434] = 0x3074, --(ぴ)
+ [0x435] = 0x3075, --(ふ)
+ [0x436] = 0x3076, --(ぶ)
+ [0x437] = 0x3077, --(ぷ)
+ [0x438] = 0x3078, --(へ)
+ [0x439] = 0x3079, --(べ)
+ [0x43A] = 0x307A, --(ぺ)
+ [0x43B] = 0x307B, --(ほ)
+ [0x43C] = 0x307C, --(ぼ)
+ [0x43D] = 0x307D, --(ぽ)
+ [0x43E] = 0x307E, --(ま)
+ [0x43F] = 0x307F, --(み)
+ [0x440] = 0x3080, --(む)
+ [0x441] = 0x3081, --(め)
+ [0x442] = 0x3082, --(も)
+ [0x443] = 0x3083, --(ゃ)
+ [0x444] = 0x3084, --(や)
+ [0x445] = 0x3085, --(ゅ)
+ [0x446] = 0x3086, --(ゆ)
+ [0x447] = 0x3087, --(ょ)
+ [0x448] = 0x3088, --(よ)
+ [0x449] = 0x3089, --(ら)
+ [0x44A] = 0x308A, --(り)
+ [0x44B] = 0x308B, --(る)
+ [0x44C] = 0x308C, --(れ)
+ [0x44D] = 0x308D, --(ろ)
+ [0x44E] = 0x308E, --(ゎ)
+ [0x44F] = 0x308F, --(わ)
+ [0x450] = 0x3090, --(ゐ)
+ [0x451] = 0x3091, --(ゑ)
+ [0x452] = 0x3092, --(を)
+ [0x453] = 0x3093, --(ん)
+ [0x501] = 0x30A1, --(ァ)
+ [0x502] = 0x30A2, --(ア)
+ [0x503] = 0x30A3, --(ィ)
+ [0x504] = 0x30A4, --(イ)
+ [0x505] = 0x30A5, --(ゥ)
+ [0x506] = 0x30A6, --(ウ)
+ [0x507] = 0x30A7, --(ェ)
+ [0x508] = 0x30A8, --(エ)
+ [0x509] = 0x30A9, --(ォ)
+ [0x50A] = 0x30AA, --(オ)
+ [0x50B] = 0x30AB, --(カ)
+ [0x50C] = 0x30AC, --(ガ)
+ [0x50D] = 0x30AD, --(キ)
+ [0x50E] = 0x30AE, --(ギ)
+ [0x50F] = 0x30AF, --(ク)
+ [0x510] = 0x30B0, --(グ)
+ [0x511] = 0x30B1, --(ケ)
+ [0x512] = 0x30B2, --(ゲ)
+ [0x513] = 0x30B3, --(コ)
+ [0x514] = 0x30B4, --(ゴ)
+ [0x515] = 0x30B5, --(サ)
+ [0x516] = 0x30B6, --(ザ)
+ [0x517] = 0x30B7, --(シ)
+ [0x518] = 0x30B8, --(ジ)
+ [0x519] = 0x30B9, --(ス)
+ [0x51A] = 0x30BA, --(ズ)
+ [0x51B] = 0x30BB, --(セ)
+ [0x51C] = 0x30BC, --(ゼ)
+ [0x51D] = 0x30BD, --(ソ)
+ [0x51E] = 0x30BE, --(ゾ)
+ [0x51F] = 0x30BF, --(タ)
+ [0x520] = 0x30C0, --(ダ)
+ [0x521] = 0x30C1, --(チ)
+ [0x522] = 0x30C2, --(ヂ)
+ [0x523] = 0x30C3, --(ッ)
+ [0x524] = 0x30C4, --(ツ)
+ [0x525] = 0x30C5, --(ヅ)
+ [0x526] = 0x30C6, --(テ)
+ [0x527] = 0x30C7, --(デ)
+ [0x528] = 0x30C8, --(ト)
+ [0x529] = 0x30C9, --(ド)
+ [0x52A] = 0x30CA, --(ナ)
+ [0x52B] = 0x30CB, --(ニ)
+ [0x52C] = 0x30CC, --(ヌ)
+ [0x52D] = 0x30CD, --(ネ)
+ [0x52E] = 0x30CE, --(ノ)
+ [0x52F] = 0x30CF, --(ハ)
+ [0x530] = 0x30D0, --(バ)
+ [0x531] = 0x30D1, --(パ)
+ [0x532] = 0x30D2, --(ヒ)
+ [0x533] = 0x30D3, --(ビ)
+ [0x534] = 0x30D4, --(ピ)
+ [0x535] = 0x30D5, --(フ)
+ [0x536] = 0x30D6, --(ブ)
+ [0x537] = 0x30D7, --(プ)
+ [0x538] = 0x30D8, --(ヘ)
+ [0x539] = 0x30D9, --(ベ)
+ [0x53A] = 0x30DA, --(ペ)
+ [0x53B] = 0x30DB, --(ホ)
+ [0x53C] = 0x30DC, --(ボ)
+ [0x53D] = 0x30DD, --(ポ)
+ [0x53E] = 0x30DE, --(マ)
+ [0x53F] = 0x30DF, --(ミ)
+ [0x540] = 0x30E0, --(ム)
+ [0x541] = 0x30E1, --(メ)
+ [0x542] = 0x30E2, --(モ)
+ [0x543] = 0x30E3, --(ャ)
+ [0x544] = 0x30E4, --(ヤ)
+ [0x545] = 0x30E5, --(ュ)
+ [0x546] = 0x30E6, --(ユ)
+ [0x547] = 0x30E7, --(ョ)
+ [0x548] = 0x30E8, --(ヨ)
+ [0x549] = 0x30E9, --(ラ)
+ [0x54A] = 0x30EA, --(リ)
+ [0x54B] = 0x30EB, --(ル)
+ [0x54C] = 0x30EC, --(レ)
+ [0x54D] = 0x30ED, --(ロ)
+ [0x54E] = 0x30EE, --(ヮ)
+ [0x54F] = 0x30EF, --(ワ)
+ [0x550] = 0x30F0, --(ヰ)
+ [0x551] = 0x30F1, --(ヱ)
+ [0x552] = 0x30F2, --(ヲ)
+ [0x553] = 0x30F3, --(ン)
+ [0x554] = 0x30F4, --(ヴ)
+ [0x555] = 0x30F5, --(ヵ)
+ [0x556] = 0x30F6, --(ヶ)
+ [0x601] = 0x391, --(Α)
+ [0x602] = 0x392, --(Β)
+ [0x603] = 0x393, --(Γ)
+ [0x604] = 0x394, --(Δ)
+ [0x605] = 0x395, --(Ε)
+ [0x606] = 0x396, --(Ζ)
+ [0x607] = 0x397, --(Η)
+ [0x608] = 0x398, --(Θ)
+ [0x609] = 0x399, --(Ι)
+ [0x60A] = 0x39A, --(Κ)
+ [0x60B] = 0x39B, --(Λ)
+ [0x60C] = 0x39C, --(Μ)
+ [0x60D] = 0x39D, --(Ν)
+ [0x60E] = 0x39E, --(Ξ)
+ [0x60F] = 0x39F, --(Ο)
+ [0x610] = 0x3A0, --(Π)
+ [0x611] = 0x3A1, --(Ρ)
+ [0x612] = 0x3A3, --(Σ)
+ [0x613] = 0x3A4, --(Τ)
+ [0x614] = 0x3A5, --(Υ)
+ [0x615] = 0x3A6, --(Φ)
+ [0x616] = 0x3A7, --(Χ)
+ [0x617] = 0x3A8, --(Ψ)
+ [0x618] = 0x3A9, --(Ω)
+ [0x621] = 0x3B1, --(α)
+ [0x622] = 0x3B2, --(β)
+ [0x623] = 0x3B3, --(γ)
+ [0x624] = 0x3B4, --(δ)
+ [0x625] = 0x3B5, --(ε)
+ [0x626] = 0x3B6, --(ζ)
+ [0x627] = 0x3B7, --(η)
+ [0x628] = 0x3B8, --(θ)
+ [0x629] = 0x3B9, --(ι)
+ [0x62A] = 0x3BA, --(κ)
+ [0x62B] = 0x3BB, --(λ)
+ [0x62C] = 0x3BC, --(μ)
+ [0x62D] = 0x3BD, --(ν)
+ [0x62E] = 0x3BE, --(ξ)
+ [0x62F] = 0x3BF, --(ο)
+ [0x630] = 0x3C0, --(π)
+ [0x631] = 0x3C1, --(ρ)
+ [0x632] = 0x3C3, --(σ)
+ [0x633] = 0x3C4, --(τ)
+ [0x634] = 0x3C5, --(υ)
+ [0x635] = 0x3C6, --(φ)
+ [0x636] = 0x3C7, --(χ)
+ [0x637] = 0x3C8, --(ψ)
+ [0x638] = 0x3C9, --(ω)
+ [0x701] = 0x410, --(А)
+ [0x702] = 0x411, --(Б)
+ [0x703] = 0x412, --(В)
+ [0x704] = 0x413, --(Г)
+ [0x705] = 0x414, --(Д)
+ [0x706] = 0x415, --(Е)
+ [0x707] = 0x401, --(Ё)
+ [0x708] = 0x416, --(Ж)
+ [0x709] = 0x417, --(З)
+ [0x70A] = 0x418, --(И)
+ [0x70B] = 0x419, --(Й)
+ [0x70C] = 0x41A, --(К)
+ [0x70D] = 0x41B, --(Л)
+ [0x70E] = 0x41C, --(М)
+ [0x70F] = 0x41D, --(Н)
+ [0x710] = 0x41E, --(О)
+ [0x711] = 0x41F, --(П)
+ [0x712] = 0x420, --(Р)
+ [0x713] = 0x421, --(С)
+ [0x714] = 0x422, --(Т)
+ [0x715] = 0x423, --(У)
+ [0x716] = 0x424, --(Ф)
+ [0x717] = 0x425, --(Х)
+ [0x718] = 0x426, --(Ц)
+ [0x719] = 0x427, --(Ч)
+ [0x71A] = 0x428, --(Ш)
+ [0x71B] = 0x429, --(Щ)
+ [0x71C] = 0x42A, --(Ъ)
+ [0x71D] = 0x42B, --(Ы)
+ [0x71E] = 0x42C, --(Ь)
+ [0x71F] = 0x42D, --(Э)
+ [0x720] = 0x42E, --(Ю)
+ [0x721] = 0x42F, --(Я)
+ [0x731] = 0x430, --(а)
+ [0x732] = 0x431, --(б)
+ [0x733] = 0x432, --(в)
+ [0x734] = 0x433, --(г)
+ [0x735] = 0x434, --(д)
+ [0x736] = 0x435, --(е)
+ [0x737] = 0x451, --(ё)
+ [0x738] = 0x436, --(ж)
+ [0x739] = 0x437, --(з)
+ [0x73A] = 0x438, --(и)
+ [0x73B] = 0x439, --(й)
+ [0x73C] = 0x43A, --(к)
+ [0x73D] = 0x43B, --(л)
+ [0x73E] = 0x43C, --(м)
+ [0x73F] = 0x43D, --(н)
+ [0x740] = 0x43E, --(о)
+ [0x741] = 0x43F, --(п)
+ [0x742] = 0x440, --(р)
+ [0x743] = 0x441, --(с)
+ [0x744] = 0x442, --(т)
+ [0x745] = 0x443, --(у)
+ [0x746] = 0x444, --(ф)
+ [0x747] = 0x445, --(х)
+ [0x748] = 0x446, --(ц)
+ [0x749] = 0x447, --(ч)
+ [0x74A] = 0x448, --(ш)
+ [0x74B] = 0x449, --(щ)
+ [0x74C] = 0x44A, --(ъ)
+ [0x74D] = 0x44B, --(ы)
+ [0x74E] = 0x44C, --(ь)
+ [0x74F] = 0x44D, --(э)
+ [0x750] = 0x44E, --(ю)
+ [0x751] = 0x44F, --(я)
+ [0x801] = 0x2500, --(─)
+ [0x802] = 0x2502, --(│)
+ [0x803] = 0x250C, --(┌)
+ [0x804] = 0x2510, --(┐)
+ [0x805] = 0x2518, --(┘)
+ [0x806] = 0x2514, --(└)
+ [0x807] = 0x251C, --(├)
+ [0x808] = 0x252C, --(┬)
+ [0x809] = 0x2524, --(┤)
+ [0x80A] = 0x2534, --(┴)
+ [0x80B] = 0x253C, --(┼)
+ [0x80C] = 0x2501, --(━)
+ [0x80D] = 0x2503, --(┃)
+ [0x80E] = 0x250F, --(┏)
+ [0x80F] = 0x2513, --(┓)
+ [0x810] = 0x251B, --(┛)
+ [0x811] = 0x2517, --(┗)
+ [0x812] = 0x2523, --(┣)
+ [0x813] = 0x2533, --(┳)
+ [0x814] = 0x252B, --(┫)
+ [0x815] = 0x253B, --(┻)
+ [0x816] = 0x254B, --(╋)
+ [0x817] = 0x2520, --(┠)
+ [0x818] = 0x252F, --(┯)
+ [0x819] = 0x2528, --(┨)
+ [0x81A] = 0x2537, --(┷)
+ [0x81B] = 0x253F, --(┿)
+ [0x81C] = 0x251D, --(┝)
+ [0x81D] = 0x2530, --(┰)
+ [0x81E] = 0x2525, --(┥)
+ [0x81F] = 0x2538, --(┸)
+ [0x820] = 0x2542, --(╂)
+ [0x1001] = 0x4E9C, --(亜)
+ [0x1002] = 0x5516, --(唖)
+ [0x1003] = 0x5A03, --(娃)
+ [0x1004] = 0x963F, --(阿)
+ [0x1005] = 0x54C0, --(哀)
+ [0x1006] = 0x611B, --(愛)
+ [0x1007] = 0x6328, --(挨)
+ [0x1008] = 0x59F6, --(姶)
+ [0x1009] = 0x9022, --(逢)
+ [0x100A] = 0x8475, --(葵)
+ [0x100B] = 0x831C, --(茜)
+ [0x100C] = 0x7A50, --(穐)
+ [0x100D] = 0x60AA, --(悪)
+ [0x100E] = 0x63E1, --(握)
+ [0x100F] = 0x6E25, --(渥)
+ [0x1010] = 0x65ED, --(旭)
+ [0x1011] = 0x8466, --(葦)
+ [0x1012] = 0x82A6, --(芦)
+ [0x1013] = 0x9BF5, --(鯵)
+ [0x1014] = 0x6893, --(梓)
+ [0x1015] = 0x5727, --(圧)
+ [0x1016] = 0x65A1, --(斡)
+ [0x1017] = 0x6271, --(扱)
+ [0x1018] = 0x5B9B, --(宛)
+ [0x1019] = 0x59D0, --(姐)
+ [0x101A] = 0x867B, --(虻)
+ [0x101B] = 0x98F4, --(飴)
+ [0x101C] = 0x7D62, --(絢)
+ [0x101D] = 0x7DBE, --(綾)
+ [0x101E] = 0x9B8E, --(鮎)
+ [0x101F] = 0x6216, --(或)
+ [0x1020] = 0x7C9F, --(粟)
+ [0x1021] = 0x88B7, --(袷)
+ [0x1022] = 0x5B89, --(安)
+ [0x1023] = 0x5EB5, --(庵)
+ [0x1024] = 0x6309, --(按)
+ [0x1025] = 0x6697, --(暗)
+ [0x1026] = 0x6848, --(案)
+ [0x1027] = 0x95C7, --(闇)
+ [0x1028] = 0x978D, --(鞍)
+ [0x1029] = 0x674F, --(杏)
+ [0x102A] = 0x4EE5, --(以)
+ [0x102B] = 0x4F0A, --(伊)
+ [0x102C] = 0x4F4D, --(位)
+ [0x102D] = 0x4F9D, --(依)
+ [0x102E] = 0x5049, --(偉)
+ [0x102F] = 0x56F2, --(囲)
+ [0x1030] = 0x5937, --(夷)
+ [0x1031] = 0x59D4, --(委)
+ [0x1032] = 0x5A01, --(威)
+ [0x1033] = 0x5C09, --(尉)
+ [0x1034] = 0x60DF, --(惟)
+ [0x1035] = 0x610F, --(意)
+ [0x1036] = 0x6170, --(慰)
+ [0x1037] = 0x6613, --(易)
+ [0x1038] = 0x6905, --(椅)
+ [0x1039] = 0x70BA, --(為)
+ [0x103A] = 0x754F, --(畏)
+ [0x103B] = 0x7570, --(異)
+ [0x103C] = 0x79FB, --(移)
+ [0x103D] = 0x7DAD, --(維)
+ [0x103E] = 0x7DEF, --(緯)
+ [0x103F] = 0x80C3, --(胃)
+ [0x1040] = 0x840E, --(萎)
+ [0x1041] = 0x8863, --(衣)
+ [0x1042] = 0x8B02, --(謂)
+ [0x1043] = 0x9055, --(違)
+ [0x1044] = 0x907A, --(遺)
+ [0x1045] = 0x533B, --(医)
+ [0x1046] = 0x4E95, --(井)
+ [0x1047] = 0x4EA5, --(亥)
+ [0x1048] = 0x57DF, --(域)
+ [0x1049] = 0x80B2, --(育)
+ [0x104A] = 0x90C1, --(郁)
+ [0x104B] = 0x78EF, --(磯)
+ [0x104C] = 0x4E00, --(一)
+ [0x104D] = 0x58F1, --(壱)
+ [0x104E] = 0x6EA2, --(溢)
+ [0x104F] = 0x9038, --(逸)
+ [0x1050] = 0x7A32, --(稲)
+ [0x1051] = 0x8328, --(茨)
+ [0x1052] = 0x828B, --(芋)
+ [0x1053] = 0x9C2F, --(鰯)
+ [0x1054] = 0x5141, --(允)
+ [0x1055] = 0x5370, --(印)
+ [0x1056] = 0x54BD, --(咽)
+ [0x1057] = 0x54E1, --(員)
+ [0x1058] = 0x56E0, --(因)
+ [0x1059] = 0x59FB, --(姻)
+ [0x105A] = 0x5F15, --(引)
+ [0x105B] = 0x98F2, --(飲)
+ [0x105C] = 0x6DEB, --(淫)
+ [0x105D] = 0x80E4, --(胤)
+ [0x105E] = 0x852D, --(蔭)
+ [0x1101] = 0x9662, --(院)
+ [0x1102] = 0x9670, --(陰)
+ [0x1103] = 0x96A0, --(隠)
+ [0x1104] = 0x97FB, --(韻)
+ [0x1105] = 0x540B, --(吋)
+ [0x1106] = 0x53F3, --(右)
+ [0x1107] = 0x5B87, --(宇)
+ [0x1108] = 0x70CF, --(烏)
+ [0x1109] = 0x7FBD, --(羽)
+ [0x110A] = 0x8FC2, --(迂)
+ [0x110B] = 0x96E8, --(雨)
+ [0x110C] = 0x536F, --(卯)
+ [0x110D] = 0x9D5C, --(鵜)
+ [0x110E] = 0x7ABA, --(窺)
+ [0x110F] = 0x4E11, --(丑)
+ [0x1110] = 0x7893, --(碓)
+ [0x1111] = 0x81FC, --(臼)
+ [0x1112] = 0x6E26, --(渦)
+ [0x1113] = 0x5618, --(嘘)
+ [0x1114] = 0x5504, --(唄)
+ [0x1115] = 0x6B1D, --(欝)
+ [0x1116] = 0x851A, --(蔚)
+ [0x1117] = 0x9C3B, --(鰻)
+ [0x1118] = 0x59E5, --(姥)
+ [0x1119] = 0x53A9, --(厩)
+ [0x111A] = 0x6D66, --(浦)
+ [0x111B] = 0x74DC, --(瓜)
+ [0x111C] = 0x958F, --(閏)
+ [0x111D] = 0x5642, --(噂)
+ [0x111E] = 0x4E91, --(云)
+ [0x111F] = 0x904B, --(運)
+ [0x1120] = 0x96F2, --(雲)
+ [0x1121] = 0x834F, --(荏)
+ [0x1122] = 0x990C, --(餌)
+ [0x1123] = 0x53E1, --(叡)
+ [0x1124] = 0x55B6, --(営)
+ [0x1125] = 0x5B30, --(嬰)
+ [0x1126] = 0x5F71, --(影)
+ [0x1127] = 0x6620, --(映)
+ [0x1128] = 0x66F3, --(曳)
+ [0x1129] = 0x6804, --(栄)
+ [0x112A] = 0x6C38, --(永)
+ [0x112B] = 0x6CF3, --(泳)
+ [0x112C] = 0x6D29, --(洩)
+ [0x112D] = 0x745B, --(瑛)
+ [0x112E] = 0x76C8, --(盈)
+ [0x112F] = 0x7A4E, --(穎)
+ [0x1130] = 0x9834, --(頴)
+ [0x1131] = 0x82F1, --(英)
+ [0x1132] = 0x885B, --(衛)
+ [0x1133] = 0x8A60, --(詠)
+ [0x1134] = 0x92ED, --(鋭)
+ [0x1135] = 0x6DB2, --(液)
+ [0x1136] = 0x75AB, --(疫)
+ [0x1137] = 0x76CA, --(益)
+ [0x1138] = 0x99C5, --(駅)
+ [0x1139] = 0x60A6, --(悦)
+ [0x113A] = 0x8B01, --(謁)
+ [0x113B] = 0x8D8A, --(越)
+ [0x113C] = 0x95B2, --(閲)
+ [0x113D] = 0x698E, --(榎)
+ [0x113E] = 0x53AD, --(厭)
+ [0x113F] = 0x5186, --(円)
+ [0x1140] = 0x5712, --(園)
+ [0x1141] = 0x5830, --(堰)
+ [0x1142] = 0x5944, --(奄)
+ [0x1143] = 0x5BB4, --(宴)
+ [0x1144] = 0x5EF6, --(延)
+ [0x1145] = 0x6028, --(怨)
+ [0x1146] = 0x63A9, --(掩)
+ [0x1147] = 0x63F4, --(援)
+ [0x1148] = 0x6CBF, --(沿)
+ [0x1149] = 0x6F14, --(演)
+ [0x114A] = 0x708E, --(炎)
+ [0x114B] = 0x7114, --(焔)
+ [0x114C] = 0x7159, --(煙)
+ [0x114D] = 0x71D5, --(燕)
+ [0x114E] = 0x733F, --(猿)
+ [0x114F] = 0x7E01, --(縁)
+ [0x1150] = 0x8276, --(艶)
+ [0x1151] = 0x82D1, --(苑)
+ [0x1152] = 0x8597, --(薗)
+ [0x1153] = 0x9060, --(遠)
+ [0x1154] = 0x925B, --(鉛)
+ [0x1155] = 0x9D1B, --(鴛)
+ [0x1156] = 0x5869, --(塩)
+ [0x1157] = 0x65BC, --(於)
+ [0x1158] = 0x6C5A, --(汚)
+ [0x1159] = 0x7525, --(甥)
+ [0x115A] = 0x51F9, --(凹)
+ [0x115B] = 0x592E, --(央)
+ [0x115C] = 0x5965, --(奥)
+ [0x115D] = 0x5F80, --(往)
+ [0x115E] = 0x5FDC, --(応)
+ [0x1201] = 0x62BC, --(押)
+ [0x1202] = 0x65FA, --(旺)
+ [0x1203] = 0x6A2A, --(横)
+ [0x1204] = 0x6B27, --(欧)
+ [0x1205] = 0x6BB4, --(殴)
+ [0x1206] = 0x738B, --(王)
+ [0x1207] = 0x7FC1, --(翁)
+ [0x1208] = 0x8956, --(襖)
+ [0x1209] = 0x9D2C, --(鴬)
+ [0x120A] = 0x9D0E, --(鴎)
+ [0x120B] = 0x9EC4, --(黄)
+ [0x120C] = 0x5CA1, --(岡)
+ [0x120D] = 0x6C96, --(沖)
+ [0x120E] = 0x837B, --(荻)
+ [0x120F] = 0x5104, --(億)
+ [0x1210] = 0x5C4B, --(屋)
+ [0x1211] = 0x61B6, --(憶)
+ [0x1212] = 0x81C6, --(臆)
+ [0x1213] = 0x6876, --(桶)
+ [0x1214] = 0x7261, --(牡)
+ [0x1215] = 0x4E59, --(乙)
+ [0x1216] = 0x4FFA, --(俺)
+ [0x1217] = 0x5378, --(卸)
+ [0x1218] = 0x6069, --(恩)
+ [0x1219] = 0x6E29, --(温)
+ [0x121A] = 0x7A4F, --(穏)
+ [0x121B] = 0x97F3, --(音)
+ [0x121C] = 0x4E0B, --(下)
+ [0x121D] = 0x5316, --(化)
+ [0x121E] = 0x4EEE, --(仮)
+ [0x121F] = 0x4F55, --(何)
+ [0x1220] = 0x4F3D, --(伽)
+ [0x1221] = 0x4FA1, --(価)
+ [0x1222] = 0x4F73, --(佳)
+ [0x1223] = 0x52A0, --(加)
+ [0x1224] = 0x53EF, --(可)
+ [0x1225] = 0x5609, --(嘉)
+ [0x1226] = 0x590F, --(夏)
+ [0x1227] = 0x5AC1, --(嫁)
+ [0x1228] = 0x5BB6, --(家)
+ [0x1229] = 0x5BE1, --(寡)
+ [0x122A] = 0x79D1, --(科)
+ [0x122B] = 0x6687, --(暇)
+ [0x122C] = 0x679C, --(果)
+ [0x122D] = 0x67B6, --(架)
+ [0x122E] = 0x6B4C, --(歌)
+ [0x122F] = 0x6CB3, --(河)
+ [0x1230] = 0x706B, --(火)
+ [0x1231] = 0x73C2, --(珂)
+ [0x1232] = 0x798D, --(禍)
+ [0x1233] = 0x79BE, --(禾)
+ [0x1234] = 0x7A3C, --(稼)
+ [0x1235] = 0x7B87, --(箇)
+ [0x1236] = 0x82B1, --(花)
+ [0x1237] = 0x82DB, --(苛)
+ [0x1238] = 0x8304, --(茄)
+ [0x1239] = 0x8377, --(荷)
+ [0x123A] = 0x83EF, --(華)
+ [0x123B] = 0x83D3, --(菓)
+ [0x123C] = 0x8766, --(蝦)
+ [0x123D] = 0x8AB2, --(課)
+ [0x123E] = 0x5629, --(嘩)
+ [0x123F] = 0x8CA8, --(貨)
+ [0x1240] = 0x8FE6, --(迦)
+ [0x1241] = 0x904E, --(過)
+ [0x1242] = 0x971E, --(霞)
+ [0x1243] = 0x868A, --(蚊)
+ [0x1244] = 0x4FC4, --(俄)
+ [0x1245] = 0x5CE8, --(峨)
+ [0x1246] = 0x6211, --(我)
+ [0x1247] = 0x7259, --(牙)
+ [0x1248] = 0x753B, --(画)
+ [0x1249] = 0x81E5, --(臥)
+ [0x124A] = 0x82BD, --(芽)
+ [0x124B] = 0x86FE, --(蛾)
+ [0x124C] = 0x8CC0, --(賀)
+ [0x124D] = 0x96C5, --(雅)
+ [0x124E] = 0x9913, --(餓)
+ [0x124F] = 0x99D5, --(駕)
+ [0x1250] = 0x4ECB, --(介)
+ [0x1251] = 0x4F1A, --(会)
+ [0x1252] = 0x89E3, --(解)
+ [0x1253] = 0x56DE, --(回)
+ [0x1254] = 0x584A, --(塊)
+ [0x1255] = 0x58CA, --(壊)
+ [0x1256] = 0x5EFB, --(廻)
+ [0x1257] = 0x5FEB, --(快)
+ [0x1258] = 0x602A, --(怪)
+ [0x1259] = 0x6094, --(悔)
+ [0x125A] = 0x6062, --(恢)
+ [0x125B] = 0x61D0, --(懐)
+ [0x125C] = 0x6212, --(戒)
+ [0x125D] = 0x62D0, --(拐)
+ [0x125E] = 0x6539, --(改)
+ [0x1301] = 0x9B41, --(魁)
+ [0x1302] = 0x6666, --(晦)
+ [0x1303] = 0x68B0, --(械)
+ [0x1304] = 0x6D77, --(海)
+ [0x1305] = 0x7070, --(灰)
+ [0x1306] = 0x754C, --(界)
+ [0x1307] = 0x7686, --(皆)
+ [0x1308] = 0x7D75, --(絵)
+ [0x1309] = 0x82A5, --(芥)
+ [0x130A] = 0x87F9, --(蟹)
+ [0x130B] = 0x958B, --(開)
+ [0x130C] = 0x968E, --(階)
+ [0x130D] = 0x8C9D, --(貝)
+ [0x130E] = 0x51F1, --(凱)
+ [0x130F] = 0x52BE, --(劾)
+ [0x1310] = 0x5916, --(外)
+ [0x1311] = 0x54B3, --(咳)
+ [0x1312] = 0x5BB3, --(害)
+ [0x1313] = 0x5D16, --(崖)
+ [0x1314] = 0x6168, --(慨)
+ [0x1315] = 0x6982, --(概)
+ [0x1316] = 0x6DAF, --(涯)
+ [0x1317] = 0x788D, --(碍)
+ [0x1318] = 0x84CB, --(蓋)
+ [0x1319] = 0x8857, --(街)
+ [0x131A] = 0x8A72, --(該)
+ [0x131B] = 0x93A7, --(鎧)
+ [0x131C] = 0x9AB8, --(骸)
+ [0x131D] = 0x6D6C, --(浬)
+ [0x131E] = 0x99A8, --(馨)
+ [0x131F] = 0x86D9, --(蛙)
+ [0x1320] = 0x57A3, --(垣)
+ [0x1321] = 0x67FF, --(柿)
+ [0x1322] = 0x86CE, --(蛎)
+ [0x1323] = 0x920E, --(鈎)
+ [0x1324] = 0x5283, --(劃)
+ [0x1325] = 0x5687, --(嚇)
+ [0x1326] = 0x5404, --(各)
+ [0x1327] = 0x5ED3, --(廓)
+ [0x1328] = 0x62E1, --(拡)
+ [0x1329] = 0x64B9, --(撹)
+ [0x132A] = 0x683C, --(格)
+ [0x132B] = 0x6838, --(核)
+ [0x132C] = 0x6BBB, --(殻)
+ [0x132D] = 0x7372, --(獲)
+ [0x132E] = 0x78BA, --(確)
+ [0x132F] = 0x7A6B, --(穫)
+ [0x1330] = 0x899A, --(覚)
+ [0x1331] = 0x89D2, --(角)
+ [0x1332] = 0x8D6B, --(赫)
+ [0x1333] = 0x8F03, --(較)
+ [0x1334] = 0x90ED, --(郭)
+ [0x1335] = 0x95A3, --(閣)
+ [0x1336] = 0x9694, --(隔)
+ [0x1337] = 0x9769, --(革)
+ [0x1338] = 0x5B66, --(学)
+ [0x1339] = 0x5CB3, --(岳)
+ [0x133A] = 0x697D, --(楽)
+ [0x133B] = 0x984D, --(額)
+ [0x133C] = 0x984E, --(顎)
+ [0x133D] = 0x639B, --(掛)
+ [0x133E] = 0x7B20, --(笠)
+ [0x133F] = 0x6A2B, --(樫)
+ [0x1340] = 0x6A7F, --(橿)
+ [0x1341] = 0x68B6, --(梶)
+ [0x1342] = 0x9C0D, --(鰍)
+ [0x1343] = 0x6F5F, --(潟)
+ [0x1344] = 0x5272, --(割)
+ [0x1345] = 0x559D, --(喝)
+ [0x1346] = 0x6070, --(恰)
+ [0x1347] = 0x62EC, --(括)
+ [0x1348] = 0x6D3B, --(活)
+ [0x1349] = 0x6E07, --(渇)
+ [0x134A] = 0x6ED1, --(滑)
+ [0x134B] = 0x845B, --(葛)
+ [0x134C] = 0x8910, --(褐)
+ [0x134D] = 0x8F44, --(轄)
+ [0x134E] = 0x4E14, --(且)
+ [0x134F] = 0x9C39, --(鰹)
+ [0x1350] = 0x53F6, --(叶)
+ [0x1351] = 0x691B, --(椛)
+ [0x1352] = 0x6A3A, --(樺)
+ [0x1353] = 0x9784, --(鞄)
+ [0x1354] = 0x682A, --(株)
+ [0x1355] = 0x515C, --(兜)
+ [0x1356] = 0x7AC3, --(竃)
+ [0x1357] = 0x84B2, --(蒲)
+ [0x1358] = 0x91DC, --(釜)
+ [0x1359] = 0x938C, --(鎌)
+ [0x135A] = 0x565B, --(噛)
+ [0x135B] = 0x9D28, --(鴨)
+ [0x135C] = 0x6822, --(栢)
+ [0x135D] = 0x8305, --(茅)
+ [0x135E] = 0x8431, --(萱)
+ [0x1401] = 0x7CA5, --(粥)
+ [0x1402] = 0x5208, --(刈)
+ [0x1403] = 0x82C5, --(苅)
+ [0x1404] = 0x74E6, --(瓦)
+ [0x1405] = 0x4E7E, --(乾)
+ [0x1406] = 0x4F83, --(侃)
+ [0x1407] = 0x51A0, --(冠)
+ [0x1408] = 0x5BD2, --(寒)
+ [0x1409] = 0x520A, --(刊)
+ [0x140A] = 0x52D8, --(勘)
+ [0x140B] = 0x52E7, --(勧)
+ [0x140C] = 0x5DFB, --(巻)
+ [0x140D] = 0x559A, --(喚)
+ [0x140E] = 0x582A, --(堪)
+ [0x140F] = 0x59E6, --(姦)
+ [0x1410] = 0x5B8C, --(完)
+ [0x1411] = 0x5B98, --(官)
+ [0x1412] = 0x5BDB, --(寛)
+ [0x1413] = 0x5E72, --(干)
+ [0x1414] = 0x5E79, --(幹)
+ [0x1415] = 0x60A3, --(患)
+ [0x1416] = 0x611F, --(感)
+ [0x1417] = 0x6163, --(慣)
+ [0x1418] = 0x61BE, --(憾)
+ [0x1419] = 0x63DB, --(換)
+ [0x141A] = 0x6562, --(敢)
+ [0x141B] = 0x67D1, --(柑)
+ [0x141C] = 0x6853, --(桓)
+ [0x141D] = 0x68FA, --(棺)
+ [0x141E] = 0x6B3E, --(款)
+ [0x141F] = 0x6B53, --(歓)
+ [0x1420] = 0x6C57, --(汗)
+ [0x1421] = 0x6F22, --(漢)
+ [0x1422] = 0x6F97, --(澗)
+ [0x1423] = 0x6F45, --(潅)
+ [0x1424] = 0x74B0, --(環)
+ [0x1425] = 0x7518, --(甘)
+ [0x1426] = 0x76E3, --(監)
+ [0x1427] = 0x770B, --(看)
+ [0x1428] = 0x7AFF, --(竿)
+ [0x1429] = 0x7BA1, --(管)
+ [0x142A] = 0x7C21, --(簡)
+ [0x142B] = 0x7DE9, --(緩)
+ [0x142C] = 0x7F36, --(缶)
+ [0x142D] = 0x7FF0, --(翰)
+ [0x142E] = 0x809D, --(肝)
+ [0x142F] = 0x8266, --(艦)
+ [0x1430] = 0x839E, --(莞)
+ [0x1431] = 0x89B3, --(観)
+ [0x1432] = 0x8ACC, --(諌)
+ [0x1433] = 0x8CAB, --(貫)
+ [0x1434] = 0x9084, --(還)
+ [0x1435] = 0x9451, --(鑑)
+ [0x1436] = 0x9593, --(間)
+ [0x1437] = 0x9591, --(閑)
+ [0x1438] = 0x95A2, --(関)
+ [0x1439] = 0x9665, --(陥)
+ [0x143A] = 0x97D3, --(韓)
+ [0x143B] = 0x9928, --(館)
+ [0x143C] = 0x8218, --(舘)
+ [0x143D] = 0x4E38, --(丸)
+ [0x143E] = 0x542B, --(含)
+ [0x143F] = 0x5CB8, --(岸)
+ [0x1440] = 0x5DCC, --(巌)
+ [0x1441] = 0x73A9, --(玩)
+ [0x1442] = 0x764C, --(癌)
+ [0x1443] = 0x773C, --(眼)
+ [0x1444] = 0x5CA9, --(岩)
+ [0x1445] = 0x7FEB, --(翫)
+ [0x1446] = 0x8D0B, --(贋)
+ [0x1447] = 0x96C1, --(雁)
+ [0x1448] = 0x9811, --(頑)
+ [0x1449] = 0x9854, --(顔)
+ [0x144A] = 0x9858, --(願)
+ [0x144B] = 0x4F01, --(企)
+ [0x144C] = 0x4F0E, --(伎)
+ [0x144D] = 0x5371, --(危)
+ [0x144E] = 0x559C, --(喜)
+ [0x144F] = 0x5668, --(器)
+ [0x1450] = 0x57FA, --(基)
+ [0x1451] = 0x5947, --(奇)
+ [0x1452] = 0x5B09, --(嬉)
+ [0x1453] = 0x5BC4, --(寄)
+ [0x1454] = 0x5C90, --(岐)
+ [0x1455] = 0x5E0C, --(希)
+ [0x1456] = 0x5E7E, --(幾)
+ [0x1457] = 0x5FCC, --(忌)
+ [0x1458] = 0x63EE, --(揮)
+ [0x1459] = 0x673A, --(机)
+ [0x145A] = 0x65D7, --(旗)
+ [0x145B] = 0x65E2, --(既)
+ [0x145C] = 0x671F, --(期)
+ [0x145D] = 0x68CB, --(棋)
+ [0x145E] = 0x68C4, --(棄)
+ [0x1501] = 0x6A5F, --(機)
+ [0x1502] = 0x5E30, --(帰)
+ [0x1503] = 0x6BC5, --(毅)
+ [0x1504] = 0x6C17, --(気)
+ [0x1505] = 0x6C7D, --(汽)
+ [0x1506] = 0x757F, --(畿)
+ [0x1507] = 0x7948, --(祈)
+ [0x1508] = 0x5B63, --(季)
+ [0x1509] = 0x7A00, --(稀)
+ [0x150A] = 0x7D00, --(紀)
+ [0x150B] = 0x5FBD, --(徽)
+ [0x150C] = 0x898F, --(規)
+ [0x150D] = 0x8A18, --(記)
+ [0x150E] = 0x8CB4, --(貴)
+ [0x150F] = 0x8D77, --(起)
+ [0x1510] = 0x8ECC, --(軌)
+ [0x1511] = 0x8F1D, --(輝)
+ [0x1512] = 0x98E2, --(飢)
+ [0x1513] = 0x9A0E, --(騎)
+ [0x1514] = 0x9B3C, --(鬼)
+ [0x1515] = 0x4E80, --(亀)
+ [0x1516] = 0x507D, --(偽)
+ [0x1517] = 0x5100, --(儀)
+ [0x1518] = 0x5993, --(妓)
+ [0x1519] = 0x5B9C, --(宜)
+ [0x151A] = 0x622F, --(戯)
+ [0x151B] = 0x6280, --(技)
+ [0x151C] = 0x64EC, --(擬)
+ [0x151D] = 0x6B3A, --(欺)
+ [0x151E] = 0x72A0, --(犠)
+ [0x151F] = 0x7591, --(疑)
+ [0x1520] = 0x7947, --(祇)
+ [0x1521] = 0x7FA9, --(義)
+ [0x1522] = 0x87FB, --(蟻)
+ [0x1523] = 0x8ABC, --(誼)
+ [0x1524] = 0x8B70, --(議)
+ [0x1525] = 0x63AC, --(掬)
+ [0x1526] = 0x83CA, --(菊)
+ [0x1527] = 0x97A0, --(鞠)
+ [0x1528] = 0x5409, --(吉)
+ [0x1529] = 0x5403, --(吃)
+ [0x152A] = 0x55AB, --(喫)
+ [0x152B] = 0x6854, --(桔)
+ [0x152C] = 0x6A58, --(橘)
+ [0x152D] = 0x8A70, --(詰)
+ [0x152E] = 0x7827, --(砧)
+ [0x152F] = 0x6775, --(杵)
+ [0x1530] = 0x9ECD, --(黍)
+ [0x1531] = 0x5374, --(却)
+ [0x1532] = 0x5BA2, --(客)
+ [0x1533] = 0x811A, --(脚)
+ [0x1534] = 0x8650, --(虐)
+ [0x1535] = 0x9006, --(逆)
+ [0x1536] = 0x4E18, --(丘)
+ [0x1537] = 0x4E45, --(久)
+ [0x1538] = 0x4EC7, --(仇)
+ [0x1539] = 0x4F11, --(休)
+ [0x153A] = 0x53CA, --(及)
+ [0x153B] = 0x5438, --(吸)
+ [0x153C] = 0x5BAE, --(宮)
+ [0x153D] = 0x5F13, --(弓)
+ [0x153E] = 0x6025, --(急)
+ [0x153F] = 0x6551, --(救)
+ [0x1540] = 0x673D, --(朽)
+ [0x1541] = 0x6C42, --(求)
+ [0x1542] = 0x6C72, --(汲)
+ [0x1543] = 0x6CE3, --(泣)
+ [0x1544] = 0x7078, --(灸)
+ [0x1545] = 0x7403, --(球)
+ [0x1546] = 0x7A76, --(究)
+ [0x1547] = 0x7AAE, --(窮)
+ [0x1548] = 0x7B08, --(笈)
+ [0x1549] = 0x7D1A, --(級)
+ [0x154A] = 0x7CFE, --(糾)
+ [0x154B] = 0x7D66, --(給)
+ [0x154C] = 0x65E7, --(旧)
+ [0x154D] = 0x725B, --(牛)
+ [0x154E] = 0x53BB, --(去)
+ [0x154F] = 0x5C45, --(居)
+ [0x1550] = 0x5DE8, --(巨)
+ [0x1551] = 0x62D2, --(拒)
+ [0x1552] = 0x62E0, --(拠)
+ [0x1553] = 0x6319, --(挙)
+ [0x1554] = 0x6E20, --(渠)
+ [0x1555] = 0x865A, --(虚)
+ [0x1556] = 0x8A31, --(許)
+ [0x1557] = 0x8DDD, --(距)
+ [0x1558] = 0x92F8, --(鋸)
+ [0x1559] = 0x6F01, --(漁)
+ [0x155A] = 0x79A6, --(禦)
+ [0x155B] = 0x9B5A, --(魚)
+ [0x155C] = 0x4EA8, --(亨)
+ [0x155D] = 0x4EAB, --(享)
+ [0x155E] = 0x4EAC, --(京)
+ [0x1601] = 0x4F9B, --(供)
+ [0x1602] = 0x4FA0, --(侠)
+ [0x1603] = 0x50D1, --(僑)
+ [0x1604] = 0x5147, --(兇)
+ [0x1605] = 0x7AF6, --(競)
+ [0x1606] = 0x5171, --(共)
+ [0x1607] = 0x51F6, --(凶)
+ [0x1608] = 0x5354, --(協)
+ [0x1609] = 0x5321, --(匡)
+ [0x160A] = 0x537F, --(卿)
+ [0x160B] = 0x53EB, --(叫)
+ [0x160C] = 0x55AC, --(喬)
+ [0x160D] = 0x5883, --(境)
+ [0x160E] = 0x5CE1, --(峡)
+ [0x160F] = 0x5F37, --(強)
+ [0x1610] = 0x5F4A, --(彊)
+ [0x1611] = 0x602F, --(怯)
+ [0x1612] = 0x6050, --(恐)
+ [0x1613] = 0x606D, --(恭)
+ [0x1614] = 0x631F, --(挟)
+ [0x1615] = 0x6559, --(教)
+ [0x1616] = 0x6A4B, --(橋)
+ [0x1617] = 0x6CC1, --(況)
+ [0x1618] = 0x72C2, --(狂)
+ [0x1619] = 0x72ED, --(狭)
+ [0x161A] = 0x77EF, --(矯)
+ [0x161B] = 0x80F8, --(胸)
+ [0x161C] = 0x8105, --(脅)
+ [0x161D] = 0x8208, --(興)
+ [0x161E] = 0x854E, --(蕎)
+ [0x161F] = 0x90F7, --(郷)
+ [0x1620] = 0x93E1, --(鏡)
+ [0x1621] = 0x97FF, --(響)
+ [0x1622] = 0x9957, --(饗)
+ [0x1623] = 0x9A5A, --(驚)
+ [0x1624] = 0x4EF0, --(仰)
+ [0x1625] = 0x51DD, --(凝)
+ [0x1626] = 0x5C2D, --(尭)
+ [0x1627] = 0x6681, --(暁)
+ [0x1628] = 0x696D, --(業)
+ [0x1629] = 0x5C40, --(局)
+ [0x162A] = 0x66F2, --(曲)
+ [0x162B] = 0x6975, --(極)
+ [0x162C] = 0x7389, --(玉)
+ [0x162D] = 0x6850, --(桐)
+ [0x162E] = 0x7C81, --(粁)
+ [0x162F] = 0x50C5, --(僅)
+ [0x1630] = 0x52E4, --(勤)
+ [0x1631] = 0x5747, --(均)
+ [0x1632] = 0x5DFE, --(巾)
+ [0x1633] = 0x9326, --(錦)
+ [0x1634] = 0x65A4, --(斤)
+ [0x1635] = 0x6B23, --(欣)
+ [0x1636] = 0x6B3D, --(欽)
+ [0x1637] = 0x7434, --(琴)
+ [0x1638] = 0x7981, --(禁)
+ [0x1639] = 0x79BD, --(禽)
+ [0x163A] = 0x7B4B, --(筋)
+ [0x163B] = 0x7DCA, --(緊)
+ [0x163C] = 0x82B9, --(芹)
+ [0x163D] = 0x83CC, --(菌)
+ [0x163E] = 0x887F, --(衿)
+ [0x163F] = 0x895F, --(襟)
+ [0x1640] = 0x8B39, --(謹)
+ [0x1641] = 0x8FD1, --(近)
+ [0x1642] = 0x91D1, --(金)
+ [0x1643] = 0x541F, --(吟)
+ [0x1644] = 0x9280, --(銀)
+ [0x1645] = 0x4E5D, --(九)
+ [0x1646] = 0x5036, --(倶)
+ [0x1647] = 0x53E5, --(句)
+ [0x1648] = 0x533A, --(区)
+ [0x1649] = 0x72D7, --(狗)
+ [0x164A] = 0x7396, --(玖)
+ [0x164B] = 0x77E9, --(矩)
+ [0x164C] = 0x82E6, --(苦)
+ [0x164D] = 0x8EAF, --(躯)
+ [0x164E] = 0x99C6, --(駆)
+ [0x164F] = 0x99C8, --(駈)
+ [0x1650] = 0x99D2, --(駒)
+ [0x1651] = 0x5177, --(具)
+ [0x1652] = 0x611A, --(愚)
+ [0x1653] = 0x865E, --(虞)
+ [0x1654] = 0x55B0, --(喰)
+ [0x1655] = 0x7A7A, --(空)
+ [0x1656] = 0x5076, --(偶)
+ [0x1657] = 0x5BD3, --(寓)
+ [0x1658] = 0x9047, --(遇)
+ [0x1659] = 0x9685, --(隅)
+ [0x165A] = 0x4E32, --(串)
+ [0x165B] = 0x6ADB, --(櫛)
+ [0x165C] = 0x91E7, --(釧)
+ [0x165D] = 0x5C51, --(屑)
+ [0x165E] = 0x5C48, --(屈)
+ [0x1701] = 0x6398, --(掘)
+ [0x1702] = 0x7A9F, --(窟)
+ [0x1703] = 0x6C93, --(沓)
+ [0x1704] = 0x9774, --(靴)
+ [0x1705] = 0x8F61, --(轡)
+ [0x1706] = 0x7AAA, --(窪)
+ [0x1707] = 0x718A, --(熊)
+ [0x1708] = 0x9688, --(隈)
+ [0x1709] = 0x7C82, --(粂)
+ [0x170A] = 0x6817, --(栗)
+ [0x170B] = 0x7E70, --(繰)
+ [0x170C] = 0x6851, --(桑)
+ [0x170D] = 0x936C, --(鍬)
+ [0x170E] = 0x52F2, --(勲)
+ [0x170F] = 0x541B, --(君)
+ [0x1710] = 0x85AB, --(薫)
+ [0x1711] = 0x8A13, --(訓)
+ [0x1712] = 0x7FA4, --(群)
+ [0x1713] = 0x8ECD, --(軍)
+ [0x1714] = 0x90E1, --(郡)
+ [0x1715] = 0x5366, --(卦)
+ [0x1716] = 0x8888, --(袈)
+ [0x1717] = 0x7941, --(祁)
+ [0x1718] = 0x4FC2, --(係)
+ [0x1719] = 0x50BE, --(傾)
+ [0x171A] = 0x5211, --(刑)
+ [0x171B] = 0x5144, --(兄)
+ [0x171C] = 0x5553, --(啓)
+ [0x171D] = 0x572D, --(圭)
+ [0x171E] = 0x73EA, --(珪)
+ [0x171F] = 0x578B, --(型)
+ [0x1720] = 0x5951, --(契)
+ [0x1721] = 0x5F62, --(形)
+ [0x1722] = 0x5F84, --(径)
+ [0x1723] = 0x6075, --(恵)
+ [0x1724] = 0x6176, --(慶)
+ [0x1725] = 0x6167, --(慧)
+ [0x1726] = 0x61A9, --(憩)
+ [0x1727] = 0x63B2, --(掲)
+ [0x1728] = 0x643A, --(携)
+ [0x1729] = 0x656C, --(敬)
+ [0x172A] = 0x666F, --(景)
+ [0x172B] = 0x6842, --(桂)
+ [0x172C] = 0x6E13, --(渓)
+ [0x172D] = 0x7566, --(畦)
+ [0x172E] = 0x7A3D, --(稽)
+ [0x172F] = 0x7CFB, --(系)
+ [0x1730] = 0x7D4C, --(経)
+ [0x1731] = 0x7D99, --(継)
+ [0x1732] = 0x7E4B, --(繋)
+ [0x1733] = 0x7F6B, --(罫)
+ [0x1734] = 0x830E, --(茎)
+ [0x1735] = 0x834A, --(荊)
+ [0x1736] = 0x86CD, --(蛍)
+ [0x1737] = 0x8A08, --(計)
+ [0x1738] = 0x8A63, --(詣)
+ [0x1739] = 0x8B66, --(警)
+ [0x173A] = 0x8EFD, --(軽)
+ [0x173B] = 0x981A, --(頚)
+ [0x173C] = 0x9D8F, --(鶏)
+ [0x173D] = 0x82B8, --(芸)
+ [0x173E] = 0x8FCE, --(迎)
+ [0x173F] = 0x9BE8, --(鯨)
+ [0x1740] = 0x5287, --(劇)
+ [0x1741] = 0x621F, --(戟)
+ [0x1742] = 0x6483, --(撃)
+ [0x1743] = 0x6FC0, --(激)
+ [0x1744] = 0x9699, --(隙)
+ [0x1745] = 0x6841, --(桁)
+ [0x1746] = 0x5091, --(傑)
+ [0x1747] = 0x6B20, --(欠)
+ [0x1748] = 0x6C7A, --(決)
+ [0x1749] = 0x6F54, --(潔)
+ [0x174A] = 0x7A74, --(穴)
+ [0x174B] = 0x7D50, --(結)
+ [0x174C] = 0x8840, --(血)
+ [0x174D] = 0x8A23, --(訣)
+ [0x174E] = 0x6708, --(月)
+ [0x174F] = 0x4EF6, --(件)
+ [0x1750] = 0x5039, --(倹)
+ [0x1751] = 0x5026, --(倦)
+ [0x1752] = 0x5065, --(健)
+ [0x1753] = 0x517C, --(兼)
+ [0x1754] = 0x5238, --(券)
+ [0x1755] = 0x5263, --(剣)
+ [0x1756] = 0x55A7, --(喧)
+ [0x1757] = 0x570F, --(圏)
+ [0x1758] = 0x5805, --(堅)
+ [0x1759] = 0x5ACC, --(嫌)
+ [0x175A] = 0x5EFA, --(建)
+ [0x175B] = 0x61B2, --(憲)
+ [0x175C] = 0x61F8, --(懸)
+ [0x175D] = 0x62F3, --(拳)
+ [0x175E] = 0x6372, --(捲)
+ [0x1801] = 0x691C, --(検)
+ [0x1802] = 0x6A29, --(権)
+ [0x1803] = 0x727D, --(牽)
+ [0x1804] = 0x72AC, --(犬)
+ [0x1805] = 0x732E, --(献)
+ [0x1806] = 0x7814, --(研)
+ [0x1807] = 0x786F, --(硯)
+ [0x1808] = 0x7D79, --(絹)
+ [0x1809] = 0x770C, --(県)
+ [0x180A] = 0x80A9, --(肩)
+ [0x180B] = 0x898B, --(見)
+ [0x180C] = 0x8B19, --(謙)
+ [0x180D] = 0x8CE2, --(賢)
+ [0x180E] = 0x8ED2, --(軒)
+ [0x180F] = 0x9063, --(遣)
+ [0x1810] = 0x9375, --(鍵)
+ [0x1811] = 0x967A, --(険)
+ [0x1812] = 0x9855, --(顕)
+ [0x1813] = 0x9A13, --(験)
+ [0x1814] = 0x9E78, --(鹸)
+ [0x1815] = 0x5143, --(元)
+ [0x1816] = 0x539F, --(原)
+ [0x1817] = 0x53B3, --(厳)
+ [0x1818] = 0x5E7B, --(幻)
+ [0x1819] = 0x5F26, --(弦)
+ [0x181A] = 0x6E1B, --(減)
+ [0x181B] = 0x6E90, --(源)
+ [0x181C] = 0x7384, --(玄)
+ [0x181D] = 0x73FE, --(現)
+ [0x181E] = 0x7D43, --(絃)
+ [0x181F] = 0x8237, --(舷)
+ [0x1820] = 0x8A00, --(言)
+ [0x1821] = 0x8AFA, --(諺)
+ [0x1822] = 0x9650, --(限)
+ [0x1823] = 0x4E4E, --(乎)
+ [0x1824] = 0x500B, --(個)
+ [0x1825] = 0x53E4, --(古)
+ [0x1826] = 0x547C, --(呼)
+ [0x1827] = 0x56FA, --(固)
+ [0x1828] = 0x59D1, --(姑)
+ [0x1829] = 0x5B64, --(孤)
+ [0x182A] = 0x5DF1, --(己)
+ [0x182B] = 0x5EAB, --(庫)
+ [0x182C] = 0x5F27, --(弧)
+ [0x182D] = 0x6238, --(戸)
+ [0x182E] = 0x6545, --(故)
+ [0x182F] = 0x67AF, --(枯)
+ [0x1830] = 0x6E56, --(湖)
+ [0x1831] = 0x72D0, --(狐)
+ [0x1832] = 0x7CCA, --(糊)
+ [0x1833] = 0x88B4, --(袴)
+ [0x1834] = 0x80A1, --(股)
+ [0x1835] = 0x80E1, --(胡)
+ [0x1836] = 0x83F0, --(菰)
+ [0x1837] = 0x864E, --(虎)
+ [0x1838] = 0x8A87, --(誇)
+ [0x1839] = 0x8DE8, --(跨)
+ [0x183A] = 0x9237, --(鈷)
+ [0x183B] = 0x96C7, --(雇)
+ [0x183C] = 0x9867, --(顧)
+ [0x183D] = 0x9F13, --(鼓)
+ [0x183E] = 0x4E94, --(五)
+ [0x183F] = 0x4E92, --(互)
+ [0x1840] = 0x4F0D, --(伍)
+ [0x1841] = 0x5348, --(午)
+ [0x1842] = 0x5449, --(呉)
+ [0x1843] = 0x543E, --(吾)
+ [0x1844] = 0x5A2F, --(娯)
+ [0x1845] = 0x5F8C, --(後)
+ [0x1846] = 0x5FA1, --(御)
+ [0x1847] = 0x609F, --(悟)
+ [0x1848] = 0x68A7, --(梧)
+ [0x1849] = 0x6A8E, --(檎)
+ [0x184A] = 0x745A, --(瑚)
+ [0x184B] = 0x7881, --(碁)
+ [0x184C] = 0x8A9E, --(語)
+ [0x184D] = 0x8AA4, --(誤)
+ [0x184E] = 0x8B77, --(護)
+ [0x184F] = 0x9190, --(醐)
+ [0x1850] = 0x4E5E, --(乞)
+ [0x1851] = 0x9BC9, --(鯉)
+ [0x1852] = 0x4EA4, --(交)
+ [0x1853] = 0x4F7C, --(佼)
+ [0x1854] = 0x4FAF, --(侯)
+ [0x1855] = 0x5019, --(候)
+ [0x1856] = 0x5016, --(倖)
+ [0x1857] = 0x5149, --(光)
+ [0x1858] = 0x516C, --(公)
+ [0x1859] = 0x529F, --(功)
+ [0x185A] = 0x52B9, --(効)
+ [0x185B] = 0x52FE, --(勾)
+ [0x185C] = 0x539A, --(厚)
+ [0x185D] = 0x53E3, --(口)
+ [0x185E] = 0x5411, --(向)
+ [0x1901] = 0x540E, --(后)
+ [0x1902] = 0x5589, --(喉)
+ [0x1903] = 0x5751, --(坑)
+ [0x1904] = 0x57A2, --(垢)
+ [0x1905] = 0x597D, --(好)
+ [0x1906] = 0x5B54, --(孔)
+ [0x1907] = 0x5B5D, --(孝)
+ [0x1908] = 0x5B8F, --(宏)
+ [0x1909] = 0x5DE5, --(工)
+ [0x190A] = 0x5DE7, --(巧)
+ [0x190B] = 0x5DF7, --(巷)
+ [0x190C] = 0x5E78, --(幸)
+ [0x190D] = 0x5E83, --(広)
+ [0x190E] = 0x5E9A, --(庚)
+ [0x190F] = 0x5EB7, --(康)
+ [0x1910] = 0x5F18, --(弘)
+ [0x1911] = 0x6052, --(恒)
+ [0x1912] = 0x614C, --(慌)
+ [0x1913] = 0x6297, --(抗)
+ [0x1914] = 0x62D8, --(拘)
+ [0x1915] = 0x63A7, --(控)
+ [0x1916] = 0x653B, --(攻)
+ [0x1917] = 0x6602, --(昂)
+ [0x1918] = 0x6643, --(晃)
+ [0x1919] = 0x66F4, --(更)
+ [0x191A] = 0x676D, --(杭)
+ [0x191B] = 0x6821, --(校)
+ [0x191C] = 0x6897, --(梗)
+ [0x191D] = 0x69CB, --(構)
+ [0x191E] = 0x6C5F, --(江)
+ [0x191F] = 0x6D2A, --(洪)
+ [0x1920] = 0x6D69, --(浩)
+ [0x1921] = 0x6E2F, --(港)
+ [0x1922] = 0x6E9D, --(溝)
+ [0x1923] = 0x7532, --(甲)
+ [0x1924] = 0x7687, --(皇)
+ [0x1925] = 0x786C, --(硬)
+ [0x1926] = 0x7A3F, --(稿)
+ [0x1927] = 0x7CE0, --(糠)
+ [0x1928] = 0x7D05, --(紅)
+ [0x1929] = 0x7D18, --(紘)
+ [0x192A] = 0x7D5E, --(絞)
+ [0x192B] = 0x7DB1, --(綱)
+ [0x192C] = 0x8015, --(耕)
+ [0x192D] = 0x8003, --(考)
+ [0x192E] = 0x80AF, --(肯)
+ [0x192F] = 0x80B1, --(肱)
+ [0x1930] = 0x8154, --(腔)
+ [0x1931] = 0x818F, --(膏)
+ [0x1932] = 0x822A, --(航)
+ [0x1933] = 0x8352, --(荒)
+ [0x1934] = 0x884C, --(行)
+ [0x1935] = 0x8861, --(衡)
+ [0x1936] = 0x8B1B, --(講)
+ [0x1937] = 0x8CA2, --(貢)
+ [0x1938] = 0x8CFC, --(購)
+ [0x1939] = 0x90CA, --(郊)
+ [0x193A] = 0x9175, --(酵)
+ [0x193B] = 0x9271, --(鉱)
+ [0x193C] = 0x783F, --(砿)
+ [0x193D] = 0x92FC, --(鋼)
+ [0x193E] = 0x95A4, --(閤)
+ [0x193F] = 0x964D, --(降)
+ [0x1940] = 0x9805, --(項)
+ [0x1941] = 0x9999, --(香)
+ [0x1942] = 0x9AD8, --(高)
+ [0x1943] = 0x9D3B, --(鴻)
+ [0x1944] = 0x525B, --(剛)
+ [0x1945] = 0x52AB, --(劫)
+ [0x1946] = 0x53F7, --(号)
+ [0x1947] = 0x5408, --(合)
+ [0x1948] = 0x58D5, --(壕)
+ [0x1949] = 0x62F7, --(拷)
+ [0x194A] = 0x6FE0, --(濠)
+ [0x194B] = 0x8C6A, --(豪)
+ [0x194C] = 0x8F5F, --(轟)
+ [0x194D] = 0x9EB9, --(麹)
+ [0x194E] = 0x514B, --(克)
+ [0x194F] = 0x523B, --(刻)
+ [0x1950] = 0x544A, --(告)
+ [0x1951] = 0x56FD, --(国)
+ [0x1952] = 0x7A40, --(穀)
+ [0x1953] = 0x9177, --(酷)
+ [0x1954] = 0x9D60, --(鵠)
+ [0x1955] = 0x9ED2, --(黒)
+ [0x1956] = 0x7344, --(獄)
+ [0x1957] = 0x6F09, --(漉)
+ [0x1958] = 0x8170, --(腰)
+ [0x1959] = 0x7511, --(甑)
+ [0x195A] = 0x5FFD, --(忽)
+ [0x195B] = 0x60DA, --(惚)
+ [0x195C] = 0x9AA8, --(骨)
+ [0x195D] = 0x72DB, --(狛)
+ [0x195E] = 0x8FBC, --(込)
+ [0x1A01] = 0x6B64, --(此)
+ [0x1A02] = 0x9803, --(頃)
+ [0x1A03] = 0x4ECA, --(今)
+ [0x1A04] = 0x56F0, --(困)
+ [0x1A05] = 0x5764, --(坤)
+ [0x1A06] = 0x58BE, --(墾)
+ [0x1A07] = 0x5A5A, --(婚)
+ [0x1A08] = 0x6068, --(恨)
+ [0x1A09] = 0x61C7, --(懇)
+ [0x1A0A] = 0x660F, --(昏)
+ [0x1A0B] = 0x6606, --(昆)
+ [0x1A0C] = 0x6839, --(根)
+ [0x1A0D] = 0x68B1, --(梱)
+ [0x1A0E] = 0x6DF7, --(混)
+ [0x1A0F] = 0x75D5, --(痕)
+ [0x1A10] = 0x7D3A, --(紺)
+ [0x1A11] = 0x826E, --(艮)
+ [0x1A12] = 0x9B42, --(魂)
+ [0x1A13] = 0x4E9B, --(些)
+ [0x1A14] = 0x4F50, --(佐)
+ [0x1A15] = 0x53C9, --(叉)
+ [0x1A16] = 0x5506, --(唆)
+ [0x1A17] = 0x5D6F, --(嵯)
+ [0x1A18] = 0x5DE6, --(左)
+ [0x1A19] = 0x5DEE, --(差)
+ [0x1A1A] = 0x67FB, --(査)
+ [0x1A1B] = 0x6C99, --(沙)
+ [0x1A1C] = 0x7473, --(瑳)
+ [0x1A1D] = 0x7802, --(砂)
+ [0x1A1E] = 0x8A50, --(詐)
+ [0x1A1F] = 0x9396, --(鎖)
+ [0x1A20] = 0x88DF, --(裟)
+ [0x1A21] = 0x5750, --(坐)
+ [0x1A22] = 0x5EA7, --(座)
+ [0x1A23] = 0x632B, --(挫)
+ [0x1A24] = 0x50B5, --(債)
+ [0x1A25] = 0x50AC, --(催)
+ [0x1A26] = 0x518D, --(再)
+ [0x1A27] = 0x6700, --(最)
+ [0x1A28] = 0x54C9, --(哉)
+ [0x1A29] = 0x585E, --(塞)
+ [0x1A2A] = 0x59BB, --(妻)
+ [0x1A2B] = 0x5BB0, --(宰)
+ [0x1A2C] = 0x5F69, --(彩)
+ [0x1A2D] = 0x624D, --(才)
+ [0x1A2E] = 0x63A1, --(採)
+ [0x1A2F] = 0x683D, --(栽)
+ [0x1A30] = 0x6B73, --(歳)
+ [0x1A31] = 0x6E08, --(済)
+ [0x1A32] = 0x707D, --(災)
+ [0x1A33] = 0x91C7, --(采)
+ [0x1A34] = 0x7280, --(犀)
+ [0x1A35] = 0x7815, --(砕)
+ [0x1A36] = 0x7826, --(砦)
+ [0x1A37] = 0x796D, --(祭)
+ [0x1A38] = 0x658E, --(斎)
+ [0x1A39] = 0x7D30, --(細)
+ [0x1A3A] = 0x83DC, --(菜)
+ [0x1A3B] = 0x88C1, --(裁)
+ [0x1A3C] = 0x8F09, --(載)
+ [0x1A3D] = 0x969B, --(際)
+ [0x1A3E] = 0x5264, --(剤)
+ [0x1A3F] = 0x5728, --(在)
+ [0x1A40] = 0x6750, --(材)
+ [0x1A41] = 0x7F6A, --(罪)
+ [0x1A42] = 0x8CA1, --(財)
+ [0x1A43] = 0x51B4, --(冴)
+ [0x1A44] = 0x5742, --(坂)
+ [0x1A45] = 0x962A, --(阪)
+ [0x1A46] = 0x583A, --(堺)
+ [0x1A47] = 0x698A, --(榊)
+ [0x1A48] = 0x80B4, --(肴)
+ [0x1A49] = 0x54B2, --(咲)
+ [0x1A4A] = 0x5D0E, --(崎)
+ [0x1A4B] = 0x57FC, --(埼)
+ [0x1A4C] = 0x7895, --(碕)
+ [0x1A4D] = 0x9DFA, --(鷺)
+ [0x1A4E] = 0x4F5C, --(作)
+ [0x1A4F] = 0x524A, --(削)
+ [0x1A50] = 0x548B, --(咋)
+ [0x1A51] = 0x643E, --(搾)
+ [0x1A52] = 0x6628, --(昨)
+ [0x1A53] = 0x6714, --(朔)
+ [0x1A54] = 0x67F5, --(柵)
+ [0x1A55] = 0x7A84, --(窄)
+ [0x1A56] = 0x7B56, --(策)
+ [0x1A57] = 0x7D22, --(索)
+ [0x1A58] = 0x932F, --(錯)
+ [0x1A59] = 0x685C, --(桜)
+ [0x1A5A] = 0x9BAD, --(鮭)
+ [0x1A5B] = 0x7B39, --(笹)
+ [0x1A5C] = 0x5319, --(匙)
+ [0x1A5D] = 0x518A, --(冊)
+ [0x1A5E] = 0x5237, --(刷)
+ [0x1B01] = 0x5BDF, --(察)
+ [0x1B02] = 0x62F6, --(拶)
+ [0x1B03] = 0x64AE, --(撮)
+ [0x1B04] = 0x64E6, --(擦)
+ [0x1B05] = 0x672D, --(札)
+ [0x1B06] = 0x6BBA, --(殺)
+ [0x1B07] = 0x85A9, --(薩)
+ [0x1B08] = 0x96D1, --(雑)
+ [0x1B09] = 0x7690, --(皐)
+ [0x1B0A] = 0x9BD6, --(鯖)
+ [0x1B0B] = 0x634C, --(捌)
+ [0x1B0C] = 0x9306, --(錆)
+ [0x1B0D] = 0x9BAB, --(鮫)
+ [0x1B0E] = 0x76BF, --(皿)
+ [0x1B0F] = 0x6652, --(晒)
+ [0x1B10] = 0x4E09, --(三)
+ [0x1B11] = 0x5098, --(傘)
+ [0x1B12] = 0x53C2, --(参)
+ [0x1B13] = 0x5C71, --(山)
+ [0x1B14] = 0x60E8, --(惨)
+ [0x1B15] = 0x6492, --(撒)
+ [0x1B16] = 0x6563, --(散)
+ [0x1B17] = 0x685F, --(桟)
+ [0x1B18] = 0x71E6, --(燦)
+ [0x1B19] = 0x73CA, --(珊)
+ [0x1B1A] = 0x7523, --(産)
+ [0x1B1B] = 0x7B97, --(算)
+ [0x1B1C] = 0x7E82, --(纂)
+ [0x1B1D] = 0x8695, --(蚕)
+ [0x1B1E] = 0x8B83, --(讃)
+ [0x1B1F] = 0x8CDB, --(賛)
+ [0x1B20] = 0x9178, --(酸)
+ [0x1B21] = 0x9910, --(餐)
+ [0x1B22] = 0x65AC, --(斬)
+ [0x1B23] = 0x66AB, --(暫)
+ [0x1B24] = 0x6B8B, --(残)
+ [0x1B25] = 0x4ED5, --(仕)
+ [0x1B26] = 0x4ED4, --(仔)
+ [0x1B27] = 0x4F3A, --(伺)
+ [0x1B28] = 0x4F7F, --(使)
+ [0x1B29] = 0x523A, --(刺)
+ [0x1B2A] = 0x53F8, --(司)
+ [0x1B2B] = 0x53F2, --(史)
+ [0x1B2C] = 0x55E3, --(嗣)
+ [0x1B2D] = 0x56DB, --(四)
+ [0x1B2E] = 0x58EB, --(士)
+ [0x1B2F] = 0x59CB, --(始)
+ [0x1B30] = 0x59C9, --(姉)
+ [0x1B31] = 0x59FF, --(姿)
+ [0x1B32] = 0x5B50, --(子)
+ [0x1B33] = 0x5C4D, --(屍)
+ [0x1B34] = 0x5E02, --(市)
+ [0x1B35] = 0x5E2B, --(師)
+ [0x1B36] = 0x5FD7, --(志)
+ [0x1B37] = 0x601D, --(思)
+ [0x1B38] = 0x6307, --(指)
+ [0x1B39] = 0x652F, --(支)
+ [0x1B3A] = 0x5B5C, --(孜)
+ [0x1B3B] = 0x65AF, --(斯)
+ [0x1B3C] = 0x65BD, --(施)
+ [0x1B3D] = 0x65E8, --(旨)
+ [0x1B3E] = 0x679D, --(枝)
+ [0x1B3F] = 0x6B62, --(止)
+ [0x1B40] = 0x6B7B, --(死)
+ [0x1B41] = 0x6C0F, --(氏)
+ [0x1B42] = 0x7345, --(獅)
+ [0x1B43] = 0x7949, --(祉)
+ [0x1B44] = 0x79C1, --(私)
+ [0x1B45] = 0x7CF8, --(糸)
+ [0x1B46] = 0x7D19, --(紙)
+ [0x1B47] = 0x7D2B, --(紫)
+ [0x1B48] = 0x80A2, --(肢)
+ [0x1B49] = 0x8102, --(脂)
+ [0x1B4A] = 0x81F3, --(至)
+ [0x1B4B] = 0x8996, --(視)
+ [0x1B4C] = 0x8A5E, --(詞)
+ [0x1B4D] = 0x8A69, --(詩)
+ [0x1B4E] = 0x8A66, --(試)
+ [0x1B4F] = 0x8A8C, --(誌)
+ [0x1B50] = 0x8AEE, --(諮)
+ [0x1B51] = 0x8CC7, --(資)
+ [0x1B52] = 0x8CDC, --(賜)
+ [0x1B53] = 0x96CC, --(雌)
+ [0x1B54] = 0x98FC, --(飼)
+ [0x1B55] = 0x6B6F, --(歯)
+ [0x1B56] = 0x4E8B, --(事)
+ [0x1B57] = 0x4F3C, --(似)
+ [0x1B58] = 0x4F8D, --(侍)
+ [0x1B59] = 0x5150, --(児)
+ [0x1B5A] = 0x5B57, --(字)
+ [0x1B5B] = 0x5BFA, --(寺)
+ [0x1B5C] = 0x6148, --(慈)
+ [0x1B5D] = 0x6301, --(持)
+ [0x1B5E] = 0x6642, --(時)
+ [0x1C01] = 0x6B21, --(次)
+ [0x1C02] = 0x6ECB, --(滋)
+ [0x1C03] = 0x6CBB, --(治)
+ [0x1C04] = 0x723E, --(爾)
+ [0x1C05] = 0x74BD, --(璽)
+ [0x1C06] = 0x75D4, --(痔)
+ [0x1C07] = 0x78C1, --(磁)
+ [0x1C08] = 0x793A, --(示)
+ [0x1C09] = 0x800C, --(而)
+ [0x1C0A] = 0x8033, --(耳)
+ [0x1C0B] = 0x81EA, --(自)
+ [0x1C0C] = 0x8494, --(蒔)
+ [0x1C0D] = 0x8F9E, --(辞)
+ [0x1C0E] = 0x6C50, --(汐)
+ [0x1C0F] = 0x9E7F, --(鹿)
+ [0x1C10] = 0x5F0F, --(式)
+ [0x1C11] = 0x8B58, --(識)
+ [0x1C12] = 0x9D2B, --(鴫)
+ [0x1C13] = 0x7AFA, --(竺)
+ [0x1C14] = 0x8EF8, --(軸)
+ [0x1C15] = 0x5B8D, --(宍)
+ [0x1C16] = 0x96EB, --(雫)
+ [0x1C17] = 0x4E03, --(七)
+ [0x1C18] = 0x53F1, --(叱)
+ [0x1C19] = 0x57F7, --(執)
+ [0x1C1A] = 0x5931, --(失)
+ [0x1C1B] = 0x5AC9, --(嫉)
+ [0x1C1C] = 0x5BA4, --(室)
+ [0x1C1D] = 0x6089, --(悉)
+ [0x1C1E] = 0x6E7F, --(湿)
+ [0x1C1F] = 0x6F06, --(漆)
+ [0x1C20] = 0x75BE, --(疾)
+ [0x1C21] = 0x8CEA, --(質)
+ [0x1C22] = 0x5B9F, --(実)
+ [0x1C23] = 0x8500, --(蔀)
+ [0x1C24] = 0x7BE0, --(篠)
+ [0x1C25] = 0x5072, --(偲)
+ [0x1C26] = 0x67F4, --(柴)
+ [0x1C27] = 0x829D, --(芝)
+ [0x1C28] = 0x5C61, --(屡)
+ [0x1C29] = 0x854A, --(蕊)
+ [0x1C2A] = 0x7E1E, --(縞)
+ [0x1C2B] = 0x820E, --(舎)
+ [0x1C2C] = 0x5199, --(写)
+ [0x1C2D] = 0x5C04, --(射)
+ [0x1C2E] = 0x6368, --(捨)
+ [0x1C2F] = 0x8D66, --(赦)
+ [0x1C30] = 0x659C, --(斜)
+ [0x1C31] = 0x716E, --(煮)
+ [0x1C32] = 0x793E, --(社)
+ [0x1C33] = 0x7D17, --(紗)
+ [0x1C34] = 0x8005, --(者)
+ [0x1C35] = 0x8B1D, --(謝)
+ [0x1C36] = 0x8ECA, --(車)
+ [0x1C37] = 0x906E, --(遮)
+ [0x1C38] = 0x86C7, --(蛇)
+ [0x1C39] = 0x90AA, --(邪)
+ [0x1C3A] = 0x501F, --(借)
+ [0x1C3B] = 0x52FA, --(勺)
+ [0x1C3C] = 0x5C3A, --(尺)
+ [0x1C3D] = 0x6753, --(杓)
+ [0x1C3E] = 0x707C, --(灼)
+ [0x1C3F] = 0x7235, --(爵)
+ [0x1C40] = 0x914C, --(酌)
+ [0x1C41] = 0x91C8, --(釈)
+ [0x1C42] = 0x932B, --(錫)
+ [0x1C43] = 0x82E5, --(若)
+ [0x1C44] = 0x5BC2, --(寂)
+ [0x1C45] = 0x5F31, --(弱)
+ [0x1C46] = 0x60F9, --(惹)
+ [0x1C47] = 0x4E3B, --(主)
+ [0x1C48] = 0x53D6, --(取)
+ [0x1C49] = 0x5B88, --(守)
+ [0x1C4A] = 0x624B, --(手)
+ [0x1C4B] = 0x6731, --(朱)
+ [0x1C4C] = 0x6B8A, --(殊)
+ [0x1C4D] = 0x72E9, --(狩)
+ [0x1C4E] = 0x73E0, --(珠)
+ [0x1C4F] = 0x7A2E, --(種)
+ [0x1C50] = 0x816B, --(腫)
+ [0x1C51] = 0x8DA3, --(趣)
+ [0x1C52] = 0x9152, --(酒)
+ [0x1C53] = 0x9996, --(首)
+ [0x1C54] = 0x5112, --(儒)
+ [0x1C55] = 0x53D7, --(受)
+ [0x1C56] = 0x546A, --(呪)
+ [0x1C57] = 0x5BFF, --(寿)
+ [0x1C58] = 0x6388, --(授)
+ [0x1C59] = 0x6A39, --(樹)
+ [0x1C5A] = 0x7DAC, --(綬)
+ [0x1C5B] = 0x9700, --(需)
+ [0x1C5C] = 0x56DA, --(囚)
+ [0x1C5D] = 0x53CE, --(収)
+ [0x1C5E] = 0x5468, --(周)
+ [0x1D01] = 0x5B97, --(宗)
+ [0x1D02] = 0x5C31, --(就)
+ [0x1D03] = 0x5DDE, --(州)
+ [0x1D04] = 0x4FEE, --(修)
+ [0x1D05] = 0x6101, --(愁)
+ [0x1D06] = 0x62FE, --(拾)
+ [0x1D07] = 0x6D32, --(洲)
+ [0x1D08] = 0x79C0, --(秀)
+ [0x1D09] = 0x79CB, --(秋)
+ [0x1D0A] = 0x7D42, --(終)
+ [0x1D0B] = 0x7E4D, --(繍)
+ [0x1D0C] = 0x7FD2, --(習)
+ [0x1D0D] = 0x81ED, --(臭)
+ [0x1D0E] = 0x821F, --(舟)
+ [0x1D0F] = 0x8490, --(蒐)
+ [0x1D10] = 0x8846, --(衆)
+ [0x1D11] = 0x8972, --(襲)
+ [0x1D12] = 0x8B90, --(讐)
+ [0x1D13] = 0x8E74, --(蹴)
+ [0x1D14] = 0x8F2F, --(輯)
+ [0x1D15] = 0x9031, --(週)
+ [0x1D16] = 0x914B, --(酋)
+ [0x1D17] = 0x916C, --(酬)
+ [0x1D18] = 0x96C6, --(集)
+ [0x1D19] = 0x919C, --(醜)
+ [0x1D1A] = 0x4EC0, --(什)
+ [0x1D1B] = 0x4F4F, --(住)
+ [0x1D1C] = 0x5145, --(充)
+ [0x1D1D] = 0x5341, --(十)
+ [0x1D1E] = 0x5F93, --(従)
+ [0x1D1F] = 0x620E, --(戎)
+ [0x1D20] = 0x67D4, --(柔)
+ [0x1D21] = 0x6C41, --(汁)
+ [0x1D22] = 0x6E0B, --(渋)
+ [0x1D23] = 0x7363, --(獣)
+ [0x1D24] = 0x7E26, --(縦)
+ [0x1D25] = 0x91CD, --(重)
+ [0x1D26] = 0x9283, --(銃)
+ [0x1D27] = 0x53D4, --(叔)
+ [0x1D28] = 0x5919, --(夙)
+ [0x1D29] = 0x5BBF, --(宿)
+ [0x1D2A] = 0x6DD1, --(淑)
+ [0x1D2B] = 0x795D, --(祝)
+ [0x1D2C] = 0x7E2E, --(縮)
+ [0x1D2D] = 0x7C9B, --(粛)
+ [0x1D2E] = 0x587E, --(塾)
+ [0x1D2F] = 0x719F, --(熟)
+ [0x1D30] = 0x51FA, --(出)
+ [0x1D31] = 0x8853, --(術)
+ [0x1D32] = 0x8FF0, --(述)
+ [0x1D33] = 0x4FCA, --(俊)
+ [0x1D34] = 0x5CFB, --(峻)
+ [0x1D35] = 0x6625, --(春)
+ [0x1D36] = 0x77AC, --(瞬)
+ [0x1D37] = 0x7AE3, --(竣)
+ [0x1D38] = 0x821C, --(舜)
+ [0x1D39] = 0x99FF, --(駿)
+ [0x1D3A] = 0x51C6, --(准)
+ [0x1D3B] = 0x5FAA, --(循)
+ [0x1D3C] = 0x65EC, --(旬)
+ [0x1D3D] = 0x696F, --(楯)
+ [0x1D3E] = 0x6B89, --(殉)
+ [0x1D3F] = 0x6DF3, --(淳)
+ [0x1D40] = 0x6E96, --(準)
+ [0x1D41] = 0x6F64, --(潤)
+ [0x1D42] = 0x76FE, --(盾)
+ [0x1D43] = 0x7D14, --(純)
+ [0x1D44] = 0x5DE1, --(巡)
+ [0x1D45] = 0x9075, --(遵)
+ [0x1D46] = 0x9187, --(醇)
+ [0x1D47] = 0x9806, --(順)
+ [0x1D48] = 0x51E6, --(処)
+ [0x1D49] = 0x521D, --(初)
+ [0x1D4A] = 0x6240, --(所)
+ [0x1D4B] = 0x6691, --(暑)
+ [0x1D4C] = 0x66D9, --(曙)
+ [0x1D4D] = 0x6E1A, --(渚)
+ [0x1D4E] = 0x5EB6, --(庶)
+ [0x1D4F] = 0x7DD2, --(緒)
+ [0x1D50] = 0x7F72, --(署)
+ [0x1D51] = 0x66F8, --(書)
+ [0x1D52] = 0x85AF, --(薯)
+ [0x1D53] = 0x85F7, --(藷)
+ [0x1D54] = 0x8AF8, --(諸)
+ [0x1D55] = 0x52A9, --(助)
+ [0x1D56] = 0x53D9, --(叙)
+ [0x1D57] = 0x5973, --(女)
+ [0x1D58] = 0x5E8F, --(序)
+ [0x1D59] = 0x5F90, --(徐)
+ [0x1D5A] = 0x6055, --(恕)
+ [0x1D5B] = 0x92E4, --(鋤)
+ [0x1D5C] = 0x9664, --(除)
+ [0x1D5D] = 0x50B7, --(傷)
+ [0x1D5E] = 0x511F, --(償)
+ [0x1E01] = 0x52DD, --(勝)
+ [0x1E02] = 0x5320, --(匠)
+ [0x1E03] = 0x5347, --(升)
+ [0x1E04] = 0x53EC, --(召)
+ [0x1E05] = 0x54E8, --(哨)
+ [0x1E06] = 0x5546, --(商)
+ [0x1E07] = 0x5531, --(唱)
+ [0x1E08] = 0x5617, --(嘗)
+ [0x1E09] = 0x5968, --(奨)
+ [0x1E0A] = 0x59BE, --(妾)
+ [0x1E0B] = 0x5A3C, --(娼)
+ [0x1E0C] = 0x5BB5, --(宵)
+ [0x1E0D] = 0x5C06, --(将)
+ [0x1E0E] = 0x5C0F, --(小)
+ [0x1E0F] = 0x5C11, --(少)
+ [0x1E10] = 0x5C1A, --(尚)
+ [0x1E11] = 0x5E84, --(庄)
+ [0x1E12] = 0x5E8A, --(床)
+ [0x1E13] = 0x5EE0, --(廠)
+ [0x1E14] = 0x5F70, --(彰)
+ [0x1E15] = 0x627F, --(承)
+ [0x1E16] = 0x6284, --(抄)
+ [0x1E17] = 0x62DB, --(招)
+ [0x1E18] = 0x638C, --(掌)
+ [0x1E19] = 0x6377, --(捷)
+ [0x1E1A] = 0x6607, --(昇)
+ [0x1E1B] = 0x660C, --(昌)
+ [0x1E1C] = 0x662D, --(昭)
+ [0x1E1D] = 0x6676, --(晶)
+ [0x1E1E] = 0x677E, --(松)
+ [0x1E1F] = 0x68A2, --(梢)
+ [0x1E20] = 0x6A1F, --(樟)
+ [0x1E21] = 0x6A35, --(樵)
+ [0x1E22] = 0x6CBC, --(沼)
+ [0x1E23] = 0x6D88, --(消)
+ [0x1E24] = 0x6E09, --(渉)
+ [0x1E25] = 0x6E58, --(湘)
+ [0x1E26] = 0x713C, --(焼)
+ [0x1E27] = 0x7126, --(焦)
+ [0x1E28] = 0x7167, --(照)
+ [0x1E29] = 0x75C7, --(症)
+ [0x1E2A] = 0x7701, --(省)
+ [0x1E2B] = 0x785D, --(硝)
+ [0x1E2C] = 0x7901, --(礁)
+ [0x1E2D] = 0x7965, --(祥)
+ [0x1E2E] = 0x79F0, --(称)
+ [0x1E2F] = 0x7AE0, --(章)
+ [0x1E30] = 0x7B11, --(笑)
+ [0x1E31] = 0x7CA7, --(粧)
+ [0x1E32] = 0x7D39, --(紹)
+ [0x1E33] = 0x8096, --(肖)
+ [0x1E34] = 0x83D6, --(菖)
+ [0x1E35] = 0x848B, --(蒋)
+ [0x1E36] = 0x8549, --(蕉)
+ [0x1E37] = 0x885D, --(衝)
+ [0x1E38] = 0x88F3, --(裳)
+ [0x1E39] = 0x8A1F, --(訟)
+ [0x1E3A] = 0x8A3C, --(証)
+ [0x1E3B] = 0x8A54, --(詔)
+ [0x1E3C] = 0x8A73, --(詳)
+ [0x1E3D] = 0x8C61, --(象)
+ [0x1E3E] = 0x8CDE, --(賞)
+ [0x1E3F] = 0x91A4, --(醤)
+ [0x1E40] = 0x9266, --(鉦)
+ [0x1E41] = 0x937E, --(鍾)
+ [0x1E42] = 0x9418, --(鐘)
+ [0x1E43] = 0x969C, --(障)
+ [0x1E44] = 0x9798, --(鞘)
+ [0x1E45] = 0x4E0A, --(上)
+ [0x1E46] = 0x4E08, --(丈)
+ [0x1E47] = 0x4E1E, --(丞)
+ [0x1E48] = 0x4E57, --(乗)
+ [0x1E49] = 0x5197, --(冗)
+ [0x1E4A] = 0x5270, --(剰)
+ [0x1E4B] = 0x57CE, --(城)
+ [0x1E4C] = 0x5834, --(場)
+ [0x1E4D] = 0x58CC, --(壌)
+ [0x1E4E] = 0x5B22, --(嬢)
+ [0x1E4F] = 0x5E38, --(常)
+ [0x1E50] = 0x60C5, --(情)
+ [0x1E51] = 0x64FE, --(擾)
+ [0x1E52] = 0x6761, --(条)
+ [0x1E53] = 0x6756, --(杖)
+ [0x1E54] = 0x6D44, --(浄)
+ [0x1E55] = 0x72B6, --(状)
+ [0x1E56] = 0x7573, --(畳)
+ [0x1E57] = 0x7A63, --(穣)
+ [0x1E58] = 0x84B8, --(蒸)
+ [0x1E59] = 0x8B72, --(譲)
+ [0x1E5A] = 0x91B8, --(醸)
+ [0x1E5B] = 0x9320, --(錠)
+ [0x1E5C] = 0x5631, --(嘱)
+ [0x1E5D] = 0x57F4, --(埴)
+ [0x1E5E] = 0x98FE, --(飾)
+ [0x1F01] = 0x62ED, --(拭)
+ [0x1F02] = 0x690D, --(植)
+ [0x1F03] = 0x6B96, --(殖)
+ [0x1F04] = 0x71ED, --(燭)
+ [0x1F05] = 0x7E54, --(織)
+ [0x1F06] = 0x8077, --(職)
+ [0x1F07] = 0x8272, --(色)
+ [0x1F08] = 0x89E6, --(触)
+ [0x1F09] = 0x98DF, --(食)
+ [0x1F0A] = 0x8755, --(蝕)
+ [0x1F0B] = 0x8FB1, --(辱)
+ [0x1F0C] = 0x5C3B, --(尻)
+ [0x1F0D] = 0x4F38, --(伸)
+ [0x1F0E] = 0x4FE1, --(信)
+ [0x1F0F] = 0x4FB5, --(侵)
+ [0x1F10] = 0x5507, --(唇)
+ [0x1F11] = 0x5A20, --(娠)
+ [0x1F12] = 0x5BDD, --(寝)
+ [0x1F13] = 0x5BE9, --(審)
+ [0x1F14] = 0x5FC3, --(心)
+ [0x1F15] = 0x614E, --(慎)
+ [0x1F16] = 0x632F, --(振)
+ [0x1F17] = 0x65B0, --(新)
+ [0x1F18] = 0x664B, --(晋)
+ [0x1F19] = 0x68EE, --(森)
+ [0x1F1A] = 0x699B, --(榛)
+ [0x1F1B] = 0x6D78, --(浸)
+ [0x1F1C] = 0x6DF1, --(深)
+ [0x1F1D] = 0x7533, --(申)
+ [0x1F1E] = 0x75B9, --(疹)
+ [0x1F1F] = 0x771F, --(真)
+ [0x1F20] = 0x795E, --(神)
+ [0x1F21] = 0x79E6, --(秦)
+ [0x1F22] = 0x7D33, --(紳)
+ [0x1F23] = 0x81E3, --(臣)
+ [0x1F24] = 0x82AF, --(芯)
+ [0x1F25] = 0x85AA, --(薪)
+ [0x1F26] = 0x89AA, --(親)
+ [0x1F27] = 0x8A3A, --(診)
+ [0x1F28] = 0x8EAB, --(身)
+ [0x1F29] = 0x8F9B, --(辛)
+ [0x1F2A] = 0x9032, --(進)
+ [0x1F2B] = 0x91DD, --(針)
+ [0x1F2C] = 0x9707, --(震)
+ [0x1F2D] = 0x4EBA, --(人)
+ [0x1F2E] = 0x4EC1, --(仁)
+ [0x1F2F] = 0x5203, --(刃)
+ [0x1F30] = 0x5875, --(塵)
+ [0x1F31] = 0x58EC, --(壬)
+ [0x1F32] = 0x5C0B, --(尋)
+ [0x1F33] = 0x751A, --(甚)
+ [0x1F34] = 0x5C3D, --(尽)
+ [0x1F35] = 0x814E, --(腎)
+ [0x1F36] = 0x8A0A, --(訊)
+ [0x1F37] = 0x8FC5, --(迅)
+ [0x1F38] = 0x9663, --(陣)
+ [0x1F39] = 0x976D, --(靭)
+ [0x1F3A] = 0x7B25, --(笥)
+ [0x1F3B] = 0x8ACF, --(諏)
+ [0x1F3C] = 0x9808, --(須)
+ [0x1F3D] = 0x9162, --(酢)
+ [0x1F3E] = 0x56F3, --(図)
+ [0x1F3F] = 0x53A8, --(厨)
+ [0x1F40] = 0x9017, --(逗)
+ [0x1F41] = 0x5439, --(吹)
+ [0x1F42] = 0x5782, --(垂)
+ [0x1F43] = 0x5E25, --(帥)
+ [0x1F44] = 0x63A8, --(推)
+ [0x1F45] = 0x6C34, --(水)
+ [0x1F46] = 0x708A, --(炊)
+ [0x1F47] = 0x7761, --(睡)
+ [0x1F48] = 0x7C8B, --(粋)
+ [0x1F49] = 0x7FE0, --(翠)
+ [0x1F4A] = 0x8870, --(衰)
+ [0x1F4B] = 0x9042, --(遂)
+ [0x1F4C] = 0x9154, --(酔)
+ [0x1F4D] = 0x9310, --(錐)
+ [0x1F4E] = 0x9318, --(錘)
+ [0x1F4F] = 0x968F, --(随)
+ [0x1F50] = 0x745E, --(瑞)
+ [0x1F51] = 0x9AC4, --(髄)
+ [0x1F52] = 0x5D07, --(崇)
+ [0x1F53] = 0x5D69, --(嵩)
+ [0x1F54] = 0x6570, --(数)
+ [0x1F55] = 0x67A2, --(枢)
+ [0x1F56] = 0x8DA8, --(趨)
+ [0x1F57] = 0x96DB, --(雛)
+ [0x1F58] = 0x636E, --(据)
+ [0x1F59] = 0x6749, --(杉)
+ [0x1F5A] = 0x6919, --(椙)
+ [0x1F5B] = 0x83C5, --(菅)
+ [0x1F5C] = 0x9817, --(頗)
+ [0x1F5D] = 0x96C0, --(雀)
+ [0x1F5E] = 0x88FE, --(裾)
+ [0x2001] = 0x6F84, --(澄)
+ [0x2002] = 0x647A, --(摺)
+ [0x2003] = 0x5BF8, --(寸)
+ [0x2004] = 0x4E16, --(世)
+ [0x2005] = 0x702C, --(瀬)
+ [0x2006] = 0x755D, --(畝)
+ [0x2007] = 0x662F, --(是)
+ [0x2008] = 0x51C4, --(凄)
+ [0x2009] = 0x5236, --(制)
+ [0x200A] = 0x52E2, --(勢)
+ [0x200B] = 0x59D3, --(姓)
+ [0x200C] = 0x5F81, --(征)
+ [0x200D] = 0x6027, --(性)
+ [0x200E] = 0x6210, --(成)
+ [0x200F] = 0x653F, --(政)
+ [0x2010] = 0x6574, --(整)
+ [0x2011] = 0x661F, --(星)
+ [0x2012] = 0x6674, --(晴)
+ [0x2013] = 0x68F2, --(棲)
+ [0x2014] = 0x6816, --(栖)
+ [0x2015] = 0x6B63, --(正)
+ [0x2016] = 0x6E05, --(清)
+ [0x2017] = 0x7272, --(牲)
+ [0x2018] = 0x751F, --(生)
+ [0x2019] = 0x76DB, --(盛)
+ [0x201A] = 0x7CBE, --(精)
+ [0x201B] = 0x8056, --(聖)
+ [0x201C] = 0x58F0, --(声)
+ [0x201D] = 0x88FD, --(製)
+ [0x201E] = 0x897F, --(西)
+ [0x201F] = 0x8AA0, --(誠)
+ [0x2020] = 0x8A93, --(誓)
+ [0x2021] = 0x8ACB, --(請)
+ [0x2022] = 0x901D, --(逝)
+ [0x2023] = 0x9192, --(醒)
+ [0x2024] = 0x9752, --(青)
+ [0x2025] = 0x9759, --(静)
+ [0x2026] = 0x6589, --(斉)
+ [0x2027] = 0x7A0E, --(税)
+ [0x2028] = 0x8106, --(脆)
+ [0x2029] = 0x96BB, --(隻)
+ [0x202A] = 0x5E2D, --(席)
+ [0x202B] = 0x60DC, --(惜)
+ [0x202C] = 0x621A, --(戚)
+ [0x202D] = 0x65A5, --(斥)
+ [0x202E] = 0x6614, --(昔)
+ [0x202F] = 0x6790, --(析)
+ [0x2030] = 0x77F3, --(石)
+ [0x2031] = 0x7A4D, --(積)
+ [0x2032] = 0x7C4D, --(籍)
+ [0x2033] = 0x7E3E, --(績)
+ [0x2034] = 0x810A, --(脊)
+ [0x2035] = 0x8CAC, --(責)
+ [0x2036] = 0x8D64, --(赤)
+ [0x2037] = 0x8DE1, --(跡)
+ [0x2038] = 0x8E5F, --(蹟)
+ [0x2039] = 0x78A9, --(碩)
+ [0x203A] = 0x5207, --(切)
+ [0x203B] = 0x62D9, --(拙)
+ [0x203C] = 0x63A5, --(接)
+ [0x203D] = 0x6442, --(摂)
+ [0x203E] = 0x6298, --(折)
+ [0x203F] = 0x8A2D, --(設)
+ [0x2040] = 0x7A83, --(窃)
+ [0x2041] = 0x7BC0, --(節)
+ [0x2042] = 0x8AAC, --(説)
+ [0x2043] = 0x96EA, --(雪)
+ [0x2044] = 0x7D76, --(絶)
+ [0x2045] = 0x820C, --(舌)
+ [0x2046] = 0x8749, --(蝉)
+ [0x2047] = 0x4ED9, --(仙)
+ [0x2048] = 0x5148, --(先)
+ [0x2049] = 0x5343, --(千)
+ [0x204A] = 0x5360, --(占)
+ [0x204B] = 0x5BA3, --(宣)
+ [0x204C] = 0x5C02, --(専)
+ [0x204D] = 0x5C16, --(尖)
+ [0x204E] = 0x5DDD, --(川)
+ [0x204F] = 0x6226, --(戦)
+ [0x2050] = 0x6247, --(扇)
+ [0x2051] = 0x64B0, --(撰)
+ [0x2052] = 0x6813, --(栓)
+ [0x2053] = 0x6834, --(栴)
+ [0x2054] = 0x6CC9, --(泉)
+ [0x2055] = 0x6D45, --(浅)
+ [0x2056] = 0x6D17, --(洗)
+ [0x2057] = 0x67D3, --(染)
+ [0x2058] = 0x6F5C, --(潜)
+ [0x2059] = 0x714E, --(煎)
+ [0x205A] = 0x717D, --(煽)
+ [0x205B] = 0x65CB, --(旋)
+ [0x205C] = 0x7A7F, --(穿)
+ [0x205D] = 0x7BAD, --(箭)
+ [0x205E] = 0x7DDA, --(線)
+ [0x2101] = 0x7E4A, --(繊)
+ [0x2102] = 0x7FA8, --(羨)
+ [0x2103] = 0x817A, --(腺)
+ [0x2104] = 0x821B, --(舛)
+ [0x2105] = 0x8239, --(船)
+ [0x2106] = 0x85A6, --(薦)
+ [0x2107] = 0x8A6E, --(詮)
+ [0x2108] = 0x8CCE, --(賎)
+ [0x2109] = 0x8DF5, --(践)
+ [0x210A] = 0x9078, --(選)
+ [0x210B] = 0x9077, --(遷)
+ [0x210C] = 0x92AD, --(銭)
+ [0x210D] = 0x9291, --(銑)
+ [0x210E] = 0x9583, --(閃)
+ [0x210F] = 0x9BAE, --(鮮)
+ [0x2110] = 0x524D, --(前)
+ [0x2111] = 0x5584, --(善)
+ [0x2112] = 0x6F38, --(漸)
+ [0x2113] = 0x7136, --(然)
+ [0x2114] = 0x5168, --(全)
+ [0x2115] = 0x7985, --(禅)
+ [0x2116] = 0x7E55, --(繕)
+ [0x2117] = 0x81B3, --(膳)
+ [0x2118] = 0x7CCE, --(糎)
+ [0x2119] = 0x564C, --(噌)
+ [0x211A] = 0x5851, --(塑)
+ [0x211B] = 0x5CA8, --(岨)
+ [0x211C] = 0x63AA, --(措)
+ [0x211D] = 0x66FE, --(曾)
+ [0x211E] = 0x66FD, --(曽)
+ [0x211F] = 0x695A, --(楚)
+ [0x2120] = 0x72D9, --(狙)
+ [0x2121] = 0x758F, --(疏)
+ [0x2122] = 0x758E, --(疎)
+ [0x2123] = 0x790E, --(礎)
+ [0x2124] = 0x7956, --(祖)
+ [0x2125] = 0x79DF, --(租)
+ [0x2126] = 0x7C97, --(粗)
+ [0x2127] = 0x7D20, --(素)
+ [0x2128] = 0x7D44, --(組)
+ [0x2129] = 0x8607, --(蘇)
+ [0x212A] = 0x8A34, --(訴)
+ [0x212B] = 0x963B, --(阻)
+ [0x212C] = 0x9061, --(遡)
+ [0x212D] = 0x9F20, --(鼠)
+ [0x212E] = 0x50E7, --(僧)
+ [0x212F] = 0x5275, --(創)
+ [0x2130] = 0x53CC, --(双)
+ [0x2131] = 0x53E2, --(叢)
+ [0x2132] = 0x5009, --(倉)
+ [0x2133] = 0x55AA, --(喪)
+ [0x2134] = 0x58EE, --(壮)
+ [0x2135] = 0x594F, --(奏)
+ [0x2136] = 0x723D, --(爽)
+ [0x2137] = 0x5B8B, --(宋)
+ [0x2138] = 0x5C64, --(層)
+ [0x2139] = 0x531D, --(匝)
+ [0x213A] = 0x60E3, --(惣)
+ [0x213B] = 0x60F3, --(想)
+ [0x213C] = 0x635C, --(捜)
+ [0x213D] = 0x6383, --(掃)
+ [0x213E] = 0x633F, --(挿)
+ [0x213F] = 0x63BB, --(掻)
+ [0x2140] = 0x64CD, --(操)
+ [0x2141] = 0x65E9, --(早)
+ [0x2142] = 0x66F9, --(曹)
+ [0x2143] = 0x5DE3, --(巣)
+ [0x2144] = 0x69CD, --(槍)
+ [0x2145] = 0x69FD, --(槽)
+ [0x2146] = 0x6F15, --(漕)
+ [0x2147] = 0x71E5, --(燥)
+ [0x2148] = 0x4E89, --(争)
+ [0x2149] = 0x75E9, --(痩)
+ [0x214A] = 0x76F8, --(相)
+ [0x214B] = 0x7A93, --(窓)
+ [0x214C] = 0x7CDF, --(糟)
+ [0x214D] = 0x7DCF, --(総)
+ [0x214E] = 0x7D9C, --(綜)
+ [0x214F] = 0x8061, --(聡)
+ [0x2150] = 0x8349, --(草)
+ [0x2151] = 0x8358, --(荘)
+ [0x2152] = 0x846C, --(葬)
+ [0x2153] = 0x84BC, --(蒼)
+ [0x2154] = 0x85FB, --(藻)
+ [0x2155] = 0x88C5, --(装)
+ [0x2156] = 0x8D70, --(走)
+ [0x2157] = 0x9001, --(送)
+ [0x2158] = 0x906D, --(遭)
+ [0x2159] = 0x9397, --(鎗)
+ [0x215A] = 0x971C, --(霜)
+ [0x215B] = 0x9A12, --(騒)
+ [0x215C] = 0x50CF, --(像)
+ [0x215D] = 0x5897, --(増)
+ [0x215E] = 0x618E, --(憎)
+ [0x2201] = 0x81D3, --(臓)
+ [0x2202] = 0x8535, --(蔵)
+ [0x2203] = 0x8D08, --(贈)
+ [0x2204] = 0x9020, --(造)
+ [0x2205] = 0x4FC3, --(促)
+ [0x2206] = 0x5074, --(側)
+ [0x2207] = 0x5247, --(則)
+ [0x2208] = 0x5373, --(即)
+ [0x2209] = 0x606F, --(息)
+ [0x220A] = 0x6349, --(捉)
+ [0x220B] = 0x675F, --(束)
+ [0x220C] = 0x6E2C, --(測)
+ [0x220D] = 0x8DB3, --(足)
+ [0x220E] = 0x901F, --(速)
+ [0x220F] = 0x4FD7, --(俗)
+ [0x2210] = 0x5C5E, --(属)
+ [0x2211] = 0x8CCA, --(賊)
+ [0x2212] = 0x65CF, --(族)
+ [0x2213] = 0x7D9A, --(続)
+ [0x2214] = 0x5352, --(卒)
+ [0x2215] = 0x8896, --(袖)
+ [0x2216] = 0x5176, --(其)
+ [0x2217] = 0x63C3, --(揃)
+ [0x2218] = 0x5B58, --(存)
+ [0x2219] = 0x5B6B, --(孫)
+ [0x221A] = 0x5C0A, --(尊)
+ [0x221B] = 0x640D, --(損)
+ [0x221C] = 0x6751, --(村)
+ [0x221D] = 0x905C, --(遜)
+ [0x221E] = 0x4ED6, --(他)
+ [0x221F] = 0x591A, --(多)
+ [0x2220] = 0x592A, --(太)
+ [0x2221] = 0x6C70, --(汰)
+ [0x2222] = 0x8A51, --(詑)
+ [0x2223] = 0x553E, --(唾)
+ [0x2224] = 0x5815, --(堕)
+ [0x2225] = 0x59A5, --(妥)
+ [0x2226] = 0x60F0, --(惰)
+ [0x2227] = 0x6253, --(打)
+ [0x2228] = 0x67C1, --(柁)
+ [0x2229] = 0x8235, --(舵)
+ [0x222A] = 0x6955, --(楕)
+ [0x222B] = 0x9640, --(陀)
+ [0x222C] = 0x99C4, --(駄)
+ [0x222D] = 0x9A28, --(騨)
+ [0x222E] = 0x4F53, --(体)
+ [0x222F] = 0x5806, --(堆)
+ [0x2230] = 0x5BFE, --(対)
+ [0x2231] = 0x8010, --(耐)
+ [0x2232] = 0x5CB1, --(岱)
+ [0x2233] = 0x5E2F, --(帯)
+ [0x2234] = 0x5F85, --(待)
+ [0x2235] = 0x6020, --(怠)
+ [0x2236] = 0x614B, --(態)
+ [0x2237] = 0x6234, --(戴)
+ [0x2238] = 0x66FF, --(替)
+ [0x2239] = 0x6CF0, --(泰)
+ [0x223A] = 0x6EDE, --(滞)
+ [0x223B] = 0x80CE, --(胎)
+ [0x223C] = 0x817F, --(腿)
+ [0x223D] = 0x82D4, --(苔)
+ [0x223E] = 0x888B, --(袋)
+ [0x223F] = 0x8CB8, --(貸)
+ [0x2240] = 0x9000, --(退)
+ [0x2241] = 0x902E, --(逮)
+ [0x2242] = 0x968A, --(隊)
+ [0x2243] = 0x9EDB, --(黛)
+ [0x2244] = 0x9BDB, --(鯛)
+ [0x2245] = 0x4EE3, --(代)
+ [0x2246] = 0x53F0, --(台)
+ [0x2247] = 0x5927, --(大)
+ [0x2248] = 0x7B2C, --(第)
+ [0x2249] = 0x918D, --(醍)
+ [0x224A] = 0x984C, --(題)
+ [0x224B] = 0x9DF9, --(鷹)
+ [0x224C] = 0x6EDD, --(滝)
+ [0x224D] = 0x7027, --(瀧)
+ [0x224E] = 0x5353, --(卓)
+ [0x224F] = 0x5544, --(啄)
+ [0x2250] = 0x5B85, --(宅)
+ [0x2251] = 0x6258, --(托)
+ [0x2252] = 0x629E, --(択)
+ [0x2253] = 0x62D3, --(拓)
+ [0x2254] = 0x6CA2, --(沢)
+ [0x2255] = 0x6FEF, --(濯)
+ [0x2256] = 0x7422, --(琢)
+ [0x2257] = 0x8A17, --(託)
+ [0x2258] = 0x9438, --(鐸)
+ [0x2259] = 0x6FC1, --(濁)
+ [0x225A] = 0x8AFE, --(諾)
+ [0x225B] = 0x8338, --(茸)
+ [0x225C] = 0x51E7, --(凧)
+ [0x225D] = 0x86F8, --(蛸)
+ [0x225E] = 0x53EA, --(只)
+ [0x2301] = 0x53E9, --(叩)
+ [0x2302] = 0x4F46, --(但)
+ [0x2303] = 0x9054, --(達)
+ [0x2304] = 0x8FB0, --(辰)
+ [0x2305] = 0x596A, --(奪)
+ [0x2306] = 0x8131, --(脱)
+ [0x2307] = 0x5DFD, --(巽)
+ [0x2308] = 0x7AEA, --(竪)
+ [0x2309] = 0x8FBF, --(辿)
+ [0x230A] = 0x68DA, --(棚)
+ [0x230B] = 0x8C37, --(谷)
+ [0x230C] = 0x72F8, --(狸)
+ [0x230D] = 0x9C48, --(鱈)
+ [0x230E] = 0x6A3D, --(樽)
+ [0x230F] = 0x8AB0, --(誰)
+ [0x2310] = 0x4E39, --(丹)
+ [0x2311] = 0x5358, --(単)
+ [0x2312] = 0x5606, --(嘆)
+ [0x2313] = 0x5766, --(坦)
+ [0x2314] = 0x62C5, --(担)
+ [0x2315] = 0x63A2, --(探)
+ [0x2316] = 0x65E6, --(旦)
+ [0x2317] = 0x6B4E, --(歎)
+ [0x2318] = 0x6DE1, --(淡)
+ [0x2319] = 0x6E5B, --(湛)
+ [0x231A] = 0x70AD, --(炭)
+ [0x231B] = 0x77ED, --(短)
+ [0x231C] = 0x7AEF, --(端)
+ [0x231D] = 0x7BAA, --(箪)
+ [0x231E] = 0x7DBB, --(綻)
+ [0x231F] = 0x803D, --(耽)
+ [0x2320] = 0x80C6, --(胆)
+ [0x2321] = 0x86CB, --(蛋)
+ [0x2322] = 0x8A95, --(誕)
+ [0x2323] = 0x935B, --(鍛)
+ [0x2324] = 0x56E3, --(団)
+ [0x2325] = 0x58C7, --(壇)
+ [0x2326] = 0x5F3E, --(弾)
+ [0x2327] = 0x65AD, --(断)
+ [0x2328] = 0x6696, --(暖)
+ [0x2329] = 0x6A80, --(檀)
+ [0x232A] = 0x6BB5, --(段)
+ [0x232B] = 0x7537, --(男)
+ [0x232C] = 0x8AC7, --(談)
+ [0x232D] = 0x5024, --(値)
+ [0x232E] = 0x77E5, --(知)
+ [0x232F] = 0x5730, --(地)
+ [0x2330] = 0x5F1B, --(弛)
+ [0x2331] = 0x6065, --(恥)
+ [0x2332] = 0x667A, --(智)
+ [0x2333] = 0x6C60, --(池)
+ [0x2334] = 0x75F4, --(痴)
+ [0x2335] = 0x7A1A, --(稚)
+ [0x2336] = 0x7F6E, --(置)
+ [0x2337] = 0x81F4, --(致)
+ [0x2338] = 0x8718, --(蜘)
+ [0x2339] = 0x9045, --(遅)
+ [0x233A] = 0x99B3, --(馳)
+ [0x233B] = 0x7BC9, --(築)
+ [0x233C] = 0x755C, --(畜)
+ [0x233D] = 0x7AF9, --(竹)
+ [0x233E] = 0x7B51, --(筑)
+ [0x233F] = 0x84C4, --(蓄)
+ [0x2340] = 0x9010, --(逐)
+ [0x2341] = 0x79E9, --(秩)
+ [0x2342] = 0x7A92, --(窒)
+ [0x2343] = 0x8336, --(茶)
+ [0x2344] = 0x5AE1, --(嫡)
+ [0x2345] = 0x7740, --(着)
+ [0x2346] = 0x4E2D, --(中)
+ [0x2347] = 0x4EF2, --(仲)
+ [0x2348] = 0x5B99, --(宙)
+ [0x2349] = 0x5FE0, --(忠)
+ [0x234A] = 0x62BD, --(抽)
+ [0x234B] = 0x663C, --(昼)
+ [0x234C] = 0x67F1, --(柱)
+ [0x234D] = 0x6CE8, --(注)
+ [0x234E] = 0x866B, --(虫)
+ [0x234F] = 0x8877, --(衷)
+ [0x2350] = 0x8A3B, --(註)
+ [0x2351] = 0x914E, --(酎)
+ [0x2352] = 0x92F3, --(鋳)
+ [0x2353] = 0x99D0, --(駐)
+ [0x2354] = 0x6A17, --(樗)
+ [0x2355] = 0x7026, --(瀦)
+ [0x2356] = 0x732A, --(猪)
+ [0x2357] = 0x82E7, --(苧)
+ [0x2358] = 0x8457, --(著)
+ [0x2359] = 0x8CAF, --(貯)
+ [0x235A] = 0x4E01, --(丁)
+ [0x235B] = 0x5146, --(兆)
+ [0x235C] = 0x51CB, --(凋)
+ [0x235D] = 0x558B, --(喋)
+ [0x235E] = 0x5BF5, --(寵)
+ [0x2401] = 0x5E16, --(帖)
+ [0x2402] = 0x5E33, --(帳)
+ [0x2403] = 0x5E81, --(庁)
+ [0x2404] = 0x5F14, --(弔)
+ [0x2405] = 0x5F35, --(張)
+ [0x2406] = 0x5F6B, --(彫)
+ [0x2407] = 0x5FB4, --(徴)
+ [0x2408] = 0x61F2, --(懲)
+ [0x2409] = 0x6311, --(挑)
+ [0x240A] = 0x66A2, --(暢)
+ [0x240B] = 0x671D, --(朝)
+ [0x240C] = 0x6F6E, --(潮)
+ [0x240D] = 0x7252, --(牒)
+ [0x240E] = 0x753A, --(町)
+ [0x240F] = 0x773A, --(眺)
+ [0x2410] = 0x8074, --(聴)
+ [0x2411] = 0x8139, --(脹)
+ [0x2412] = 0x8178, --(腸)
+ [0x2413] = 0x8776, --(蝶)
+ [0x2414] = 0x8ABF, --(調)
+ [0x2415] = 0x8ADC, --(諜)
+ [0x2416] = 0x8D85, --(超)
+ [0x2417] = 0x8DF3, --(跳)
+ [0x2418] = 0x929A, --(銚)
+ [0x2419] = 0x9577, --(長)
+ [0x241A] = 0x9802, --(頂)
+ [0x241B] = 0x9CE5, --(鳥)
+ [0x241C] = 0x52C5, --(勅)
+ [0x241D] = 0x6357, --(捗)
+ [0x241E] = 0x76F4, --(直)
+ [0x241F] = 0x6715, --(朕)
+ [0x2420] = 0x6C88, --(沈)
+ [0x2421] = 0x73CD, --(珍)
+ [0x2422] = 0x8CC3, --(賃)
+ [0x2423] = 0x93AE, --(鎮)
+ [0x2424] = 0x9673, --(陳)
+ [0x2425] = 0x6D25, --(津)
+ [0x2426] = 0x589C, --(墜)
+ [0x2427] = 0x690E, --(椎)
+ [0x2428] = 0x69CC, --(槌)
+ [0x2429] = 0x8FFD, --(追)
+ [0x242A] = 0x939A, --(鎚)
+ [0x242B] = 0x75DB, --(痛)
+ [0x242C] = 0x901A, --(通)
+ [0x242D] = 0x585A, --(塚)
+ [0x242E] = 0x6802, --(栂)
+ [0x242F] = 0x63B4, --(掴)
+ [0x2430] = 0x69FB, --(槻)
+ [0x2431] = 0x4F43, --(佃)
+ [0x2432] = 0x6F2C, --(漬)
+ [0x2433] = 0x67D8, --(柘)
+ [0x2434] = 0x8FBB, --(辻)
+ [0x2435] = 0x8526, --(蔦)
+ [0x2436] = 0x7DB4, --(綴)
+ [0x2437] = 0x9354, --(鍔)
+ [0x2438] = 0x693F, --(椿)
+ [0x2439] = 0x6F70, --(潰)
+ [0x243A] = 0x576A, --(坪)
+ [0x243B] = 0x58F7, --(壷)
+ [0x243C] = 0x5B2C, --(嬬)
+ [0x243D] = 0x7D2C, --(紬)
+ [0x243E] = 0x722A, --(爪)
+ [0x243F] = 0x540A, --(吊)
+ [0x2440] = 0x91E3, --(釣)
+ [0x2441] = 0x9DB4, --(鶴)
+ [0x2442] = 0x4EAD, --(亭)
+ [0x2443] = 0x4F4E, --(低)
+ [0x2444] = 0x505C, --(停)
+ [0x2445] = 0x5075, --(偵)
+ [0x2446] = 0x5243, --(剃)
+ [0x2447] = 0x8C9E, --(貞)
+ [0x2448] = 0x5448, --(呈)
+ [0x2449] = 0x5824, --(堤)
+ [0x244A] = 0x5B9A, --(定)
+ [0x244B] = 0x5E1D, --(帝)
+ [0x244C] = 0x5E95, --(底)
+ [0x244D] = 0x5EAD, --(庭)
+ [0x244E] = 0x5EF7, --(廷)
+ [0x244F] = 0x5F1F, --(弟)
+ [0x2450] = 0x608C, --(悌)
+ [0x2451] = 0x62B5, --(抵)
+ [0x2452] = 0x633A, --(挺)
+ [0x2453] = 0x63D0, --(提)
+ [0x2454] = 0x68AF, --(梯)
+ [0x2455] = 0x6C40, --(汀)
+ [0x2456] = 0x7887, --(碇)
+ [0x2457] = 0x798E, --(禎)
+ [0x2458] = 0x7A0B, --(程)
+ [0x2459] = 0x7DE0, --(締)
+ [0x245A] = 0x8247, --(艇)
+ [0x245B] = 0x8A02, --(訂)
+ [0x245C] = 0x8AE6, --(諦)
+ [0x245D] = 0x8E44, --(蹄)
+ [0x245E] = 0x9013, --(逓)
+ [0x2501] = 0x90B8, --(邸)
+ [0x2502] = 0x912D, --(鄭)
+ [0x2503] = 0x91D8, --(釘)
+ [0x2504] = 0x9F0E, --(鼎)
+ [0x2505] = 0x6CE5, --(泥)
+ [0x2506] = 0x6458, --(摘)
+ [0x2507] = 0x64E2, --(擢)
+ [0x2508] = 0x6575, --(敵)
+ [0x2509] = 0x6EF4, --(滴)
+ [0x250A] = 0x7684, --(的)
+ [0x250B] = 0x7B1B, --(笛)
+ [0x250C] = 0x9069, --(適)
+ [0x250D] = 0x93D1, --(鏑)
+ [0x250E] = 0x6EBA, --(溺)
+ [0x250F] = 0x54F2, --(哲)
+ [0x2510] = 0x5FB9, --(徹)
+ [0x2511] = 0x64A4, --(撤)
+ [0x2512] = 0x8F4D, --(轍)
+ [0x2513] = 0x8FED, --(迭)
+ [0x2514] = 0x9244, --(鉄)
+ [0x2515] = 0x5178, --(典)
+ [0x2516] = 0x586B, --(填)
+ [0x2517] = 0x5929, --(天)
+ [0x2518] = 0x5C55, --(展)
+ [0x2519] = 0x5E97, --(店)
+ [0x251A] = 0x6DFB, --(添)
+ [0x251B] = 0x7E8F, --(纏)
+ [0x251C] = 0x751C, --(甜)
+ [0x251D] = 0x8CBC, --(貼)
+ [0x251E] = 0x8EE2, --(転)
+ [0x251F] = 0x985B, --(顛)
+ [0x2520] = 0x70B9, --(点)
+ [0x2521] = 0x4F1D, --(伝)
+ [0x2522] = 0x6BBF, --(殿)
+ [0x2523] = 0x6FB1, --(澱)
+ [0x2524] = 0x7530, --(田)
+ [0x2525] = 0x96FB, --(電)
+ [0x2526] = 0x514E, --(兎)
+ [0x2527] = 0x5410, --(吐)
+ [0x2528] = 0x5835, --(堵)
+ [0x2529] = 0x5857, --(塗)
+ [0x252A] = 0x59AC, --(妬)
+ [0x252B] = 0x5C60, --(屠)
+ [0x252C] = 0x5F92, --(徒)
+ [0x252D] = 0x6597, --(斗)
+ [0x252E] = 0x675C, --(杜)
+ [0x252F] = 0x6E21, --(渡)
+ [0x2530] = 0x767B, --(登)
+ [0x2531] = 0x83DF, --(菟)
+ [0x2532] = 0x8CED, --(賭)
+ [0x2533] = 0x9014, --(途)
+ [0x2534] = 0x90FD, --(都)
+ [0x2535] = 0x934D, --(鍍)
+ [0x2536] = 0x7825, --(砥)
+ [0x2537] = 0x783A, --(砺)
+ [0x2538] = 0x52AA, --(努)
+ [0x2539] = 0x5EA6, --(度)
+ [0x253A] = 0x571F, --(土)
+ [0x253B] = 0x5974, --(奴)
+ [0x253C] = 0x6012, --(怒)
+ [0x253D] = 0x5012, --(倒)
+ [0x253E] = 0x515A, --(党)
+ [0x253F] = 0x51AC, --(冬)
+ [0x2540] = 0x51CD, --(凍)
+ [0x2541] = 0x5200, --(刀)
+ [0x2542] = 0x5510, --(唐)
+ [0x2543] = 0x5854, --(塔)
+ [0x2544] = 0x5858, --(塘)
+ [0x2545] = 0x5957, --(套)
+ [0x2546] = 0x5B95, --(宕)
+ [0x2547] = 0x5CF6, --(島)
+ [0x2548] = 0x5D8B, --(嶋)
+ [0x2549] = 0x60BC, --(悼)
+ [0x254A] = 0x6295, --(投)
+ [0x254B] = 0x642D, --(搭)
+ [0x254C] = 0x6771, --(東)
+ [0x254D] = 0x6843, --(桃)
+ [0x254E] = 0x68BC, --(梼)
+ [0x254F] = 0x68DF, --(棟)
+ [0x2550] = 0x76D7, --(盗)
+ [0x2551] = 0x6DD8, --(淘)
+ [0x2552] = 0x6E6F, --(湯)
+ [0x2553] = 0x6D9B, --(涛)
+ [0x2554] = 0x706F, --(灯)
+ [0x2555] = 0x71C8, --(燈)
+ [0x2556] = 0x5F53, --(当)
+ [0x2557] = 0x75D8, --(痘)
+ [0x2558] = 0x7977, --(祷)
+ [0x2559] = 0x7B49, --(等)
+ [0x255A] = 0x7B54, --(答)
+ [0x255B] = 0x7B52, --(筒)
+ [0x255C] = 0x7CD6, --(糖)
+ [0x255D] = 0x7D71, --(統)
+ [0x255E] = 0x5230, --(到)
+ [0x2601] = 0x8463, --(董)
+ [0x2602] = 0x8569, --(蕩)
+ [0x2603] = 0x85E4, --(藤)
+ [0x2604] = 0x8A0E, --(討)
+ [0x2605] = 0x8B04, --(謄)
+ [0x2606] = 0x8C46, --(豆)
+ [0x2607] = 0x8E0F, --(踏)
+ [0x2608] = 0x9003, --(逃)
+ [0x2609] = 0x900F, --(透)
+ [0x260A] = 0x9419, --(鐙)
+ [0x260B] = 0x9676, --(陶)
+ [0x260C] = 0x982D, --(頭)
+ [0x260D] = 0x9A30, --(騰)
+ [0x260E] = 0x95D8, --(闘)
+ [0x260F] = 0x50CD, --(働)
+ [0x2610] = 0x52D5, --(動)
+ [0x2611] = 0x540C, --(同)
+ [0x2612] = 0x5802, --(堂)
+ [0x2613] = 0x5C0E, --(導)
+ [0x2614] = 0x61A7, --(憧)
+ [0x2615] = 0x649E, --(撞)
+ [0x2616] = 0x6D1E, --(洞)
+ [0x2617] = 0x77B3, --(瞳)
+ [0x2618] = 0x7AE5, --(童)
+ [0x2619] = 0x80F4, --(胴)
+ [0x261A] = 0x8404, --(萄)
+ [0x261B] = 0x9053, --(道)
+ [0x261C] = 0x9285, --(銅)
+ [0x261D] = 0x5CE0, --(峠)
+ [0x261E] = 0x9D07, --(鴇)
+ [0x261F] = 0x533F, --(匿)
+ [0x2620] = 0x5F97, --(得)
+ [0x2621] = 0x5FB3, --(徳)
+ [0x2622] = 0x6D9C, --(涜)
+ [0x2623] = 0x7279, --(特)
+ [0x2624] = 0x7763, --(督)
+ [0x2625] = 0x79BF, --(禿)
+ [0x2626] = 0x7BE4, --(篤)
+ [0x2627] = 0x6BD2, --(毒)
+ [0x2628] = 0x72EC, --(独)
+ [0x2629] = 0x8AAD, --(読)
+ [0x262A] = 0x6803, --(栃)
+ [0x262B] = 0x6A61, --(橡)
+ [0x262C] = 0x51F8, --(凸)
+ [0x262D] = 0x7A81, --(突)
+ [0x262E] = 0x6934, --(椴)
+ [0x262F] = 0x5C4A, --(届)
+ [0x2630] = 0x9CF6, --(鳶)
+ [0x2631] = 0x82EB, --(苫)
+ [0x2632] = 0x5BC5, --(寅)
+ [0x2633] = 0x9149, --(酉)
+ [0x2634] = 0x701E, --(瀞)
+ [0x2635] = 0x5678, --(噸)
+ [0x2636] = 0x5C6F, --(屯)
+ [0x2637] = 0x60C7, --(惇)
+ [0x2638] = 0x6566, --(敦)
+ [0x2639] = 0x6C8C, --(沌)
+ [0x263A] = 0x8C5A, --(豚)
+ [0x263B] = 0x9041, --(遁)
+ [0x263C] = 0x9813, --(頓)
+ [0x263D] = 0x5451, --(呑)
+ [0x263E] = 0x66C7, --(曇)
+ [0x263F] = 0x920D, --(鈍)
+ [0x2640] = 0x5948, --(奈)
+ [0x2641] = 0x90A3, --(那)
+ [0x2642] = 0x5185, --(内)
+ [0x2643] = 0x4E4D, --(乍)
+ [0x2644] = 0x51EA, --(凪)
+ [0x2645] = 0x8599, --(薙)
+ [0x2646] = 0x8B0E, --(謎)
+ [0x2647] = 0x7058, --(灘)
+ [0x2648] = 0x637A, --(捺)
+ [0x2649] = 0x934B, --(鍋)
+ [0x264A] = 0x6962, --(楢)
+ [0x264B] = 0x99B4, --(馴)
+ [0x264C] = 0x7E04, --(縄)
+ [0x264D] = 0x7577, --(畷)
+ [0x264E] = 0x5357, --(南)
+ [0x264F] = 0x6960, --(楠)
+ [0x2650] = 0x8EDF, --(軟)
+ [0x2651] = 0x96E3, --(難)
+ [0x2652] = 0x6C5D, --(汝)
+ [0x2653] = 0x4E8C, --(二)
+ [0x2654] = 0x5C3C, --(尼)
+ [0x2655] = 0x5F10, --(弐)
+ [0x2656] = 0x8FE9, --(迩)
+ [0x2657] = 0x5302, --(匂)
+ [0x2658] = 0x8CD1, --(賑)
+ [0x2659] = 0x8089, --(肉)
+ [0x265A] = 0x8679, --(虹)
+ [0x265B] = 0x5EFF, --(廿)
+ [0x265C] = 0x65E5, --(日)
+ [0x265D] = 0x4E73, --(乳)
+ [0x265E] = 0x5165, --(入)
+ [0x2701] = 0x5982, --(如)
+ [0x2702] = 0x5C3F, --(尿)
+ [0x2703] = 0x97EE, --(韮)
+ [0x2704] = 0x4EFB, --(任)
+ [0x2705] = 0x598A, --(妊)
+ [0x2706] = 0x5FCD, --(忍)
+ [0x2707] = 0x8A8D, --(認)
+ [0x2708] = 0x6FE1, --(濡)
+ [0x2709] = 0x79B0, --(禰)
+ [0x270A] = 0x7962, --(祢)
+ [0x270B] = 0x5BE7, --(寧)
+ [0x270C] = 0x8471, --(葱)
+ [0x270D] = 0x732B, --(猫)
+ [0x270E] = 0x71B1, --(熱)
+ [0x270F] = 0x5E74, --(年)
+ [0x2710] = 0x5FF5, --(念)
+ [0x2711] = 0x637B, --(捻)
+ [0x2712] = 0x649A, --(撚)
+ [0x2713] = 0x71C3, --(燃)
+ [0x2714] = 0x7C98, --(粘)
+ [0x2715] = 0x4E43, --(乃)
+ [0x2716] = 0x5EFC, --(廼)
+ [0x2717] = 0x4E4B, --(之)
+ [0x2718] = 0x57DC, --(埜)
+ [0x2719] = 0x56A2, --(嚢)
+ [0x271A] = 0x60A9, --(悩)
+ [0x271B] = 0x6FC3, --(濃)
+ [0x271C] = 0x7D0D, --(納)
+ [0x271D] = 0x80FD, --(能)
+ [0x271E] = 0x8133, --(脳)
+ [0x271F] = 0x81BF, --(膿)
+ [0x2720] = 0x8FB2, --(農)
+ [0x2721] = 0x8997, --(覗)
+ [0x2722] = 0x86A4, --(蚤)
+ [0x2723] = 0x5DF4, --(巴)
+ [0x2724] = 0x628A, --(把)
+ [0x2725] = 0x64AD, --(播)
+ [0x2726] = 0x8987, --(覇)
+ [0x2727] = 0x6777, --(杷)
+ [0x2728] = 0x6CE2, --(波)
+ [0x2729] = 0x6D3E, --(派)
+ [0x272A] = 0x7436, --(琶)
+ [0x272B] = 0x7834, --(破)
+ [0x272C] = 0x5A46, --(婆)
+ [0x272D] = 0x7F75, --(罵)
+ [0x272E] = 0x82AD, --(芭)
+ [0x272F] = 0x99AC, --(馬)
+ [0x2730] = 0x4FF3, --(俳)
+ [0x2731] = 0x5EC3, --(廃)
+ [0x2732] = 0x62DD, --(拝)
+ [0x2733] = 0x6392, --(排)
+ [0x2734] = 0x6557, --(敗)
+ [0x2735] = 0x676F, --(杯)
+ [0x2736] = 0x76C3, --(盃)
+ [0x2737] = 0x724C, --(牌)
+ [0x2738] = 0x80CC, --(背)
+ [0x2739] = 0x80BA, --(肺)
+ [0x273A] = 0x8F29, --(輩)
+ [0x273B] = 0x914D, --(配)
+ [0x273C] = 0x500D, --(倍)
+ [0x273D] = 0x57F9, --(培)
+ [0x273E] = 0x5A92, --(媒)
+ [0x273F] = 0x6885, --(梅)
+ [0x2740] = 0x6973, --(楳)
+ [0x2741] = 0x7164, --(煤)
+ [0x2742] = 0x72FD, --(狽)
+ [0x2743] = 0x8CB7, --(買)
+ [0x2744] = 0x58F2, --(売)
+ [0x2745] = 0x8CE0, --(賠)
+ [0x2746] = 0x966A, --(陪)
+ [0x2747] = 0x9019, --(這)
+ [0x2748] = 0x877F, --(蝿)
+ [0x2749] = 0x79E4, --(秤)
+ [0x274A] = 0x77E7, --(矧)
+ [0x274B] = 0x8429, --(萩)
+ [0x274C] = 0x4F2F, --(伯)
+ [0x274D] = 0x5265, --(剥)
+ [0x274E] = 0x535A, --(博)
+ [0x274F] = 0x62CD, --(拍)
+ [0x2750] = 0x67CF, --(柏)
+ [0x2751] = 0x6CCA, --(泊)
+ [0x2752] = 0x767D, --(白)
+ [0x2753] = 0x7B94, --(箔)
+ [0x2754] = 0x7C95, --(粕)
+ [0x2755] = 0x8236, --(舶)
+ [0x2756] = 0x8584, --(薄)
+ [0x2757] = 0x8FEB, --(迫)
+ [0x2758] = 0x66DD, --(曝)
+ [0x2759] = 0x6F20, --(漠)
+ [0x275A] = 0x7206, --(爆)
+ [0x275B] = 0x7E1B, --(縛)
+ [0x275C] = 0x83AB, --(莫)
+ [0x275D] = 0x99C1, --(駁)
+ [0x275E] = 0x9EA6, --(麦)
+ [0x2801] = 0x51FD, --(函)
+ [0x2802] = 0x7BB1, --(箱)
+ [0x2803] = 0x7872, --(硲)
+ [0x2804] = 0x7BB8, --(箸)
+ [0x2805] = 0x8087, --(肇)
+ [0x2806] = 0x7B48, --(筈)
+ [0x2807] = 0x6AE8, --(櫨)
+ [0x2808] = 0x5E61, --(幡)
+ [0x2809] = 0x808C, --(肌)
+ [0x280A] = 0x7551, --(畑)
+ [0x280B] = 0x7560, --(畠)
+ [0x280C] = 0x516B, --(八)
+ [0x280D] = 0x9262, --(鉢)
+ [0x280E] = 0x6E8C, --(溌)
+ [0x280F] = 0x767A, --(発)
+ [0x2810] = 0x9197, --(醗)
+ [0x2811] = 0x9AEA, --(髪)
+ [0x2812] = 0x4F10, --(伐)
+ [0x2813] = 0x7F70, --(罰)
+ [0x2814] = 0x629C, --(抜)
+ [0x2815] = 0x7B4F, --(筏)
+ [0x2816] = 0x95A5, --(閥)
+ [0x2817] = 0x9CE9, --(鳩)
+ [0x2818] = 0x567A, --(噺)
+ [0x2819] = 0x5859, --(塙)
+ [0x281A] = 0x86E4, --(蛤)
+ [0x281B] = 0x96BC, --(隼)
+ [0x281C] = 0x4F34, --(伴)
+ [0x281D] = 0x5224, --(判)
+ [0x281E] = 0x534A, --(半)
+ [0x281F] = 0x53CD, --(反)
+ [0x2820] = 0x53DB, --(叛)
+ [0x2821] = 0x5E06, --(帆)
+ [0x2822] = 0x642C, --(搬)
+ [0x2823] = 0x6591, --(斑)
+ [0x2824] = 0x677F, --(板)
+ [0x2825] = 0x6C3E, --(氾)
+ [0x2826] = 0x6C4E, --(汎)
+ [0x2827] = 0x7248, --(版)
+ [0x2828] = 0x72AF, --(犯)
+ [0x2829] = 0x73ED, --(班)
+ [0x282A] = 0x7554, --(畔)
+ [0x282B] = 0x7E41, --(繁)
+ [0x282C] = 0x822C, --(般)
+ [0x282D] = 0x85E9, --(藩)
+ [0x282E] = 0x8CA9, --(販)
+ [0x282F] = 0x7BC4, --(範)
+ [0x2830] = 0x91C6, --(釆)
+ [0x2831] = 0x7169, --(煩)
+ [0x2832] = 0x9812, --(頒)
+ [0x2833] = 0x98EF, --(飯)
+ [0x2834] = 0x633D, --(挽)
+ [0x2835] = 0x6669, --(晩)
+ [0x2836] = 0x756A, --(番)
+ [0x2837] = 0x76E4, --(盤)
+ [0x2838] = 0x78D0, --(磐)
+ [0x2839] = 0x8543, --(蕃)
+ [0x283A] = 0x86EE, --(蛮)
+ [0x283B] = 0x532A, --(匪)
+ [0x283C] = 0x5351, --(卑)
+ [0x283D] = 0x5426, --(否)
+ [0x283E] = 0x5983, --(妃)
+ [0x283F] = 0x5E87, --(庇)
+ [0x2840] = 0x5F7C, --(彼)
+ [0x2841] = 0x60B2, --(悲)
+ [0x2842] = 0x6249, --(扉)
+ [0x2843] = 0x6279, --(批)
+ [0x2844] = 0x62AB, --(披)
+ [0x2845] = 0x6590, --(斐)
+ [0x2846] = 0x6BD4, --(比)
+ [0x2847] = 0x6CCC, --(泌)
+ [0x2848] = 0x75B2, --(疲)
+ [0x2849] = 0x76AE, --(皮)
+ [0x284A] = 0x7891, --(碑)
+ [0x284B] = 0x79D8, --(秘)
+ [0x284C] = 0x7DCB, --(緋)
+ [0x284D] = 0x7F77, --(罷)
+ [0x284E] = 0x80A5, --(肥)
+ [0x284F] = 0x88AB, --(被)
+ [0x2850] = 0x8AB9, --(誹)
+ [0x2851] = 0x8CBB, --(費)
+ [0x2852] = 0x907F, --(避)
+ [0x2853] = 0x975E, --(非)
+ [0x2854] = 0x98DB, --(飛)
+ [0x2855] = 0x6A0B, --(樋)
+ [0x2856] = 0x7C38, --(簸)
+ [0x2857] = 0x5099, --(備)
+ [0x2858] = 0x5C3E, --(尾)
+ [0x2859] = 0x5FAE, --(微)
+ [0x285A] = 0x6787, --(枇)
+ [0x285B] = 0x6BD8, --(毘)
+ [0x285C] = 0x7435, --(琵)
+ [0x285D] = 0x7709, --(眉)
+ [0x285E] = 0x7F8E, --(美)
+ [0x2901] = 0x9F3B, --(鼻)
+ [0x2902] = 0x67CA, --(柊)
+ [0x2903] = 0x7A17, --(稗)
+ [0x2904] = 0x5339, --(匹)
+ [0x2905] = 0x758B, --(疋)
+ [0x2906] = 0x9AED, --(髭)
+ [0x2907] = 0x5F66, --(彦)
+ [0x2908] = 0x819D, --(膝)
+ [0x2909] = 0x83F1, --(菱)
+ [0x290A] = 0x8098, --(肘)
+ [0x290B] = 0x5F3C, --(弼)
+ [0x290C] = 0x5FC5, --(必)
+ [0x290D] = 0x7562, --(畢)
+ [0x290E] = 0x7B46, --(筆)
+ [0x290F] = 0x903C, --(逼)
+ [0x2910] = 0x6867, --(桧)
+ [0x2911] = 0x59EB, --(姫)
+ [0x2912] = 0x5A9B, --(媛)
+ [0x2913] = 0x7D10, --(紐)
+ [0x2914] = 0x767E, --(百)
+ [0x2915] = 0x8B2C, --(謬)
+ [0x2916] = 0x4FF5, --(俵)
+ [0x2917] = 0x5F6A, --(彪)
+ [0x2918] = 0x6A19, --(標)
+ [0x2919] = 0x6C37, --(氷)
+ [0x291A] = 0x6F02, --(漂)
+ [0x291B] = 0x74E2, --(瓢)
+ [0x291C] = 0x7968, --(票)
+ [0x291D] = 0x8868, --(表)
+ [0x291E] = 0x8A55, --(評)
+ [0x291F] = 0x8C79, --(豹)
+ [0x2920] = 0x5EDF, --(廟)
+ [0x2921] = 0x63CF, --(描)
+ [0x2922] = 0x75C5, --(病)
+ [0x2923] = 0x79D2, --(秒)
+ [0x2924] = 0x82D7, --(苗)
+ [0x2925] = 0x9328, --(錨)
+ [0x2926] = 0x92F2, --(鋲)
+ [0x2927] = 0x849C, --(蒜)
+ [0x2928] = 0x86ED, --(蛭)
+ [0x2929] = 0x9C2D, --(鰭)
+ [0x292A] = 0x54C1, --(品)
+ [0x292B] = 0x5F6C, --(彬)
+ [0x292C] = 0x658C, --(斌)
+ [0x292D] = 0x6D5C, --(浜)
+ [0x292E] = 0x7015, --(瀕)
+ [0x292F] = 0x8CA7, --(貧)
+ [0x2930] = 0x8CD3, --(賓)
+ [0x2931] = 0x983B, --(頻)
+ [0x2932] = 0x654F, --(敏)
+ [0x2933] = 0x74F6, --(瓶)
+ [0x2934] = 0x4E0D, --(不)
+ [0x2935] = 0x4ED8, --(付)
+ [0x2936] = 0x57E0, --(埠)
+ [0x2937] = 0x592B, --(夫)
+ [0x2938] = 0x5A66, --(婦)
+ [0x2939] = 0x5BCC, --(富)
+ [0x293A] = 0x51A8, --(冨)
+ [0x293B] = 0x5E03, --(布)
+ [0x293C] = 0x5E9C, --(府)
+ [0x293D] = 0x6016, --(怖)
+ [0x293E] = 0x6276, --(扶)
+ [0x293F] = 0x6577, --(敷)
+ [0x2940] = 0x65A7, --(斧)
+ [0x2941] = 0x666E, --(普)
+ [0x2942] = 0x6D6E, --(浮)
+ [0x2943] = 0x7236, --(父)
+ [0x2944] = 0x7B26, --(符)
+ [0x2945] = 0x8150, --(腐)
+ [0x2946] = 0x819A, --(膚)
+ [0x2947] = 0x8299, --(芙)
+ [0x2948] = 0x8B5C, --(譜)
+ [0x2949] = 0x8CA0, --(負)
+ [0x294A] = 0x8CE6, --(賦)
+ [0x294B] = 0x8D74, --(赴)
+ [0x294C] = 0x961C, --(阜)
+ [0x294D] = 0x9644, --(附)
+ [0x294E] = 0x4FAE, --(侮)
+ [0x294F] = 0x64AB, --(撫)
+ [0x2950] = 0x6B66, --(武)
+ [0x2951] = 0x821E, --(舞)
+ [0x2952] = 0x8461, --(葡)
+ [0x2953] = 0x856A, --(蕪)
+ [0x2954] = 0x90E8, --(部)
+ [0x2955] = 0x5C01, --(封)
+ [0x2956] = 0x6953, --(楓)
+ [0x2957] = 0x98A8, --(風)
+ [0x2958] = 0x847A, --(葺)
+ [0x2959] = 0x8557, --(蕗)
+ [0x295A] = 0x4F0F, --(伏)
+ [0x295B] = 0x526F, --(副)
+ [0x295C] = 0x5FA9, --(復)
+ [0x295D] = 0x5E45, --(幅)
+ [0x295E] = 0x670D, --(服)
+ [0x2A01] = 0x798F, --(福)
+ [0x2A02] = 0x8179, --(腹)
+ [0x2A03] = 0x8907, --(複)
+ [0x2A04] = 0x8986, --(覆)
+ [0x2A05] = 0x6DF5, --(淵)
+ [0x2A06] = 0x5F17, --(弗)
+ [0x2A07] = 0x6255, --(払)
+ [0x2A08] = 0x6CB8, --(沸)
+ [0x2A09] = 0x4ECF, --(仏)
+ [0x2A0A] = 0x7269, --(物)
+ [0x2A0B] = 0x9B92, --(鮒)
+ [0x2A0C] = 0x5206, --(分)
+ [0x2A0D] = 0x543B, --(吻)
+ [0x2A0E] = 0x5674, --(噴)
+ [0x2A0F] = 0x58B3, --(墳)
+ [0x2A10] = 0x61A4, --(憤)
+ [0x2A11] = 0x626E, --(扮)
+ [0x2A12] = 0x711A, --(焚)
+ [0x2A13] = 0x596E, --(奮)
+ [0x2A14] = 0x7C89, --(粉)
+ [0x2A15] = 0x7CDE, --(糞)
+ [0x2A16] = 0x7D1B, --(紛)
+ [0x2A17] = 0x96F0, --(雰)
+ [0x2A18] = 0x6587, --(文)
+ [0x2A19] = 0x805E, --(聞)
+ [0x2A1A] = 0x4E19, --(丙)
+ [0x2A1B] = 0x4F75, --(併)
+ [0x2A1C] = 0x5175, --(兵)
+ [0x2A1D] = 0x5840, --(塀)
+ [0x2A1E] = 0x5E63, --(幣)
+ [0x2A1F] = 0x5E73, --(平)
+ [0x2A20] = 0x5F0A, --(弊)
+ [0x2A21] = 0x67C4, --(柄)
+ [0x2A22] = 0x4E26, --(並)
+ [0x2A23] = 0x853D, --(蔽)
+ [0x2A24] = 0x9589, --(閉)
+ [0x2A25] = 0x965B, --(陛)
+ [0x2A26] = 0x7C73, --(米)
+ [0x2A27] = 0x9801, --(頁)
+ [0x2A28] = 0x50FB, --(僻)
+ [0x2A29] = 0x58C1, --(壁)
+ [0x2A2A] = 0x7656, --(癖)
+ [0x2A2B] = 0x78A7, --(碧)
+ [0x2A2C] = 0x5225, --(別)
+ [0x2A2D] = 0x77A5, --(瞥)
+ [0x2A2E] = 0x8511, --(蔑)
+ [0x2A2F] = 0x7B86, --(箆)
+ [0x2A30] = 0x504F, --(偏)
+ [0x2A31] = 0x5909, --(変)
+ [0x2A32] = 0x7247, --(片)
+ [0x2A33] = 0x7BC7, --(篇)
+ [0x2A34] = 0x7DE8, --(編)
+ [0x2A35] = 0x8FBA, --(辺)
+ [0x2A36] = 0x8FD4, --(返)
+ [0x2A37] = 0x904D, --(遍)
+ [0x2A38] = 0x4FBF, --(便)
+ [0x2A39] = 0x52C9, --(勉)
+ [0x2A3A] = 0x5A29, --(娩)
+ [0x2A3B] = 0x5F01, --(弁)
+ [0x2A3C] = 0x97AD, --(鞭)
+ [0x2A3D] = 0x4FDD, --(保)
+ [0x2A3E] = 0x8217, --(舗)
+ [0x2A3F] = 0x92EA, --(鋪)
+ [0x2A40] = 0x5703, --(圃)
+ [0x2A41] = 0x6355, --(捕)
+ [0x2A42] = 0x6B69, --(歩)
+ [0x2A43] = 0x752B, --(甫)
+ [0x2A44] = 0x88DC, --(補)
+ [0x2A45] = 0x8F14, --(輔)
+ [0x2A46] = 0x7A42, --(穂)
+ [0x2A47] = 0x52DF, --(募)
+ [0x2A48] = 0x5893, --(墓)
+ [0x2A49] = 0x6155, --(慕)
+ [0x2A4A] = 0x620A, --(戊)
+ [0x2A4B] = 0x66AE, --(暮)
+ [0x2A4C] = 0x6BCD, --(母)
+ [0x2A4D] = 0x7C3F, --(簿)
+ [0x2A4E] = 0x83E9, --(菩)
+ [0x2A4F] = 0x5023, --(倣)
+ [0x2A50] = 0x4FF8, --(俸)
+ [0x2A51] = 0x5305, --(包)
+ [0x2A52] = 0x5446, --(呆)
+ [0x2A53] = 0x5831, --(報)
+ [0x2A54] = 0x5949, --(奉)
+ [0x2A55] = 0x5B9D, --(宝)
+ [0x2A56] = 0x5CF0, --(峰)
+ [0x2A57] = 0x5CEF, --(峯)
+ [0x2A58] = 0x5D29, --(崩)
+ [0x2A59] = 0x5E96, --(庖)
+ [0x2A5A] = 0x62B1, --(抱)
+ [0x2A5B] = 0x6367, --(捧)
+ [0x2A5C] = 0x653E, --(放)
+ [0x2A5D] = 0x65B9, --(方)
+ [0x2A5E] = 0x670B, --(朋)
+ [0x2B01] = 0x6CD5, --(法)
+ [0x2B02] = 0x6CE1, --(泡)
+ [0x2B03] = 0x70F9, --(烹)
+ [0x2B04] = 0x7832, --(砲)
+ [0x2B05] = 0x7E2B, --(縫)
+ [0x2B06] = 0x80DE, --(胞)
+ [0x2B07] = 0x82B3, --(芳)
+ [0x2B08] = 0x840C, --(萌)
+ [0x2B09] = 0x84EC, --(蓬)
+ [0x2B0A] = 0x8702, --(蜂)
+ [0x2B0B] = 0x8912, --(褒)
+ [0x2B0C] = 0x8A2A, --(訪)
+ [0x2B0D] = 0x8C4A, --(豊)
+ [0x2B0E] = 0x90A6, --(邦)
+ [0x2B0F] = 0x92D2, --(鋒)
+ [0x2B10] = 0x98FD, --(飽)
+ [0x2B11] = 0x9CF3, --(鳳)
+ [0x2B12] = 0x9D6C, --(鵬)
+ [0x2B13] = 0x4E4F, --(乏)
+ [0x2B14] = 0x4EA1, --(亡)
+ [0x2B15] = 0x508D, --(傍)
+ [0x2B16] = 0x5256, --(剖)
+ [0x2B17] = 0x574A, --(坊)
+ [0x2B18] = 0x59A8, --(妨)
+ [0x2B19] = 0x5E3D, --(帽)
+ [0x2B1A] = 0x5FD8, --(忘)
+ [0x2B1B] = 0x5FD9, --(忙)
+ [0x2B1C] = 0x623F, --(房)
+ [0x2B1D] = 0x66B4, --(暴)
+ [0x2B1E] = 0x671B, --(望)
+ [0x2B1F] = 0x67D0, --(某)
+ [0x2B20] = 0x68D2, --(棒)
+ [0x2B21] = 0x5192, --(冒)
+ [0x2B22] = 0x7D21, --(紡)
+ [0x2B23] = 0x80AA, --(肪)
+ [0x2B24] = 0x81A8, --(膨)
+ [0x2B25] = 0x8B00, --(謀)
+ [0x2B26] = 0x8C8C, --(貌)
+ [0x2B27] = 0x8CBF, --(貿)
+ [0x2B28] = 0x927E, --(鉾)
+ [0x2B29] = 0x9632, --(防)
+ [0x2B2A] = 0x5420, --(吠)
+ [0x2B2B] = 0x982C, --(頬)
+ [0x2B2C] = 0x5317, --(北)
+ [0x2B2D] = 0x50D5, --(僕)
+ [0x2B2E] = 0x535C, --(卜)
+ [0x2B2F] = 0x58A8, --(墨)
+ [0x2B30] = 0x64B2, --(撲)
+ [0x2B31] = 0x6734, --(朴)
+ [0x2B32] = 0x7267, --(牧)
+ [0x2B33] = 0x7766, --(睦)
+ [0x2B34] = 0x7A46, --(穆)
+ [0x2B35] = 0x91E6, --(釦)
+ [0x2B36] = 0x52C3, --(勃)
+ [0x2B37] = 0x6CA1, --(没)
+ [0x2B38] = 0x6B86, --(殆)
+ [0x2B39] = 0x5800, --(堀)
+ [0x2B3A] = 0x5E4C, --(幌)
+ [0x2B3B] = 0x5954, --(奔)
+ [0x2B3C] = 0x672C, --(本)
+ [0x2B3D] = 0x7FFB, --(翻)
+ [0x2B3E] = 0x51E1, --(凡)
+ [0x2B3F] = 0x76C6, --(盆)
+ [0x2B40] = 0x6469, --(摩)
+ [0x2B41] = 0x78E8, --(磨)
+ [0x2B42] = 0x9B54, --(魔)
+ [0x2B43] = 0x9EBB, --(麻)
+ [0x2B44] = 0x57CB, --(埋)
+ [0x2B45] = 0x59B9, --(妹)
+ [0x2B46] = 0x6627, --(昧)
+ [0x2B47] = 0x679A, --(枚)
+ [0x2B48] = 0x6BCE, --(毎)
+ [0x2B49] = 0x54E9, --(哩)
+ [0x2B4A] = 0x69D9, --(槙)
+ [0x2B4B] = 0x5E55, --(幕)
+ [0x2B4C] = 0x819C, --(膜)
+ [0x2B4D] = 0x6795, --(枕)
+ [0x2B4E] = 0x9BAA, --(鮪)
+ [0x2B4F] = 0x67FE, --(柾)
+ [0x2B50] = 0x9C52, --(鱒)
+ [0x2B51] = 0x685D, --(桝)
+ [0x2B52] = 0x4EA6, --(亦)
+ [0x2B53] = 0x4FE3, --(俣)
+ [0x2B54] = 0x53C8, --(又)
+ [0x2B55] = 0x62B9, --(抹)
+ [0x2B56] = 0x672B, --(末)
+ [0x2B57] = 0x6CAB, --(沫)
+ [0x2B58] = 0x8FC4, --(迄)
+ [0x2B59] = 0x4FAD, --(侭)
+ [0x2B5A] = 0x7E6D, --(繭)
+ [0x2B5B] = 0x9EBF, --(麿)
+ [0x2B5C] = 0x4E07, --(万)
+ [0x2B5D] = 0x6162, --(慢)
+ [0x2B5E] = 0x6E80, --(満)
+ [0x2C01] = 0x6F2B, --(漫)
+ [0x2C02] = 0x8513, --(蔓)
+ [0x2C03] = 0x5473, --(味)
+ [0x2C04] = 0x672A, --(未)
+ [0x2C05] = 0x9B45, --(魅)
+ [0x2C06] = 0x5DF3, --(巳)
+ [0x2C07] = 0x7B95, --(箕)
+ [0x2C08] = 0x5CAC, --(岬)
+ [0x2C09] = 0x5BC6, --(密)
+ [0x2C0A] = 0x871C, --(蜜)
+ [0x2C0B] = 0x6E4A, --(湊)
+ [0x2C0C] = 0x84D1, --(蓑)
+ [0x2C0D] = 0x7A14, --(稔)
+ [0x2C0E] = 0x8108, --(脈)
+ [0x2C0F] = 0x5999, --(妙)
+ [0x2C10] = 0x7C8D, --(粍)
+ [0x2C11] = 0x6C11, --(民)
+ [0x2C12] = 0x7720, --(眠)
+ [0x2C13] = 0x52D9, --(務)
+ [0x2C14] = 0x5922, --(夢)
+ [0x2C15] = 0x7121, --(無)
+ [0x2C16] = 0x725F, --(牟)
+ [0x2C17] = 0x77DB, --(矛)
+ [0x2C18] = 0x9727, --(霧)
+ [0x2C19] = 0x9D61, --(鵡)
+ [0x2C1A] = 0x690B, --(椋)
+ [0x2C1B] = 0x5A7F, --(婿)
+ [0x2C1C] = 0x5A18, --(娘)
+ [0x2C1D] = 0x51A5, --(冥)
+ [0x2C1E] = 0x540D, --(名)
+ [0x2C1F] = 0x547D, --(命)
+ [0x2C20] = 0x660E, --(明)
+ [0x2C21] = 0x76DF, --(盟)
+ [0x2C22] = 0x8FF7, --(迷)
+ [0x2C23] = 0x9298, --(銘)
+ [0x2C24] = 0x9CF4, --(鳴)
+ [0x2C25] = 0x59EA, --(姪)
+ [0x2C26] = 0x725D, --(牝)
+ [0x2C27] = 0x6EC5, --(滅)
+ [0x2C28] = 0x514D, --(免)
+ [0x2C29] = 0x68C9, --(棉)
+ [0x2C2A] = 0x7DBF, --(綿)
+ [0x2C2B] = 0x7DEC, --(緬)
+ [0x2C2C] = 0x9762, --(面)
+ [0x2C2D] = 0x9EBA, --(麺)
+ [0x2C2E] = 0x6478, --(摸)
+ [0x2C2F] = 0x6A21, --(模)
+ [0x2C30] = 0x8302, --(茂)
+ [0x2C31] = 0x5984, --(妄)
+ [0x2C32] = 0x5B5F, --(孟)
+ [0x2C33] = 0x6BDB, --(毛)
+ [0x2C34] = 0x731B, --(猛)
+ [0x2C35] = 0x76F2, --(盲)
+ [0x2C36] = 0x7DB2, --(網)
+ [0x2C37] = 0x8017, --(耗)
+ [0x2C38] = 0x8499, --(蒙)
+ [0x2C39] = 0x5132, --(儲)
+ [0x2C3A] = 0x6728, --(木)
+ [0x2C3B] = 0x9ED9, --(黙)
+ [0x2C3C] = 0x76EE, --(目)
+ [0x2C3D] = 0x6762, --(杢)
+ [0x2C3E] = 0x52FF, --(勿)
+ [0x2C3F] = 0x9905, --(餅)
+ [0x2C40] = 0x5C24, --(尤)
+ [0x2C41] = 0x623B, --(戻)
+ [0x2C42] = 0x7C7E, --(籾)
+ [0x2C43] = 0x8CB0, --(貰)
+ [0x2C44] = 0x554F, --(問)
+ [0x2C45] = 0x60B6, --(悶)
+ [0x2C46] = 0x7D0B, --(紋)
+ [0x2C47] = 0x9580, --(門)
+ [0x2C48] = 0x5301, --(匁)
+ [0x2C49] = 0x4E5F, --(也)
+ [0x2C4A] = 0x51B6, --(冶)
+ [0x2C4B] = 0x591C, --(夜)
+ [0x2C4C] = 0x723A, --(爺)
+ [0x2C4D] = 0x8036, --(耶)
+ [0x2C4E] = 0x91CE, --(野)
+ [0x2C4F] = 0x5F25, --(弥)
+ [0x2C50] = 0x77E2, --(矢)
+ [0x2C51] = 0x5384, --(厄)
+ [0x2C52] = 0x5F79, --(役)
+ [0x2C53] = 0x7D04, --(約)
+ [0x2C54] = 0x85AC, --(薬)
+ [0x2C55] = 0x8A33, --(訳)
+ [0x2C56] = 0x8E8D, --(躍)
+ [0x2C57] = 0x9756, --(靖)
+ [0x2C58] = 0x67F3, --(柳)
+ [0x2C59] = 0x85AE, --(薮)
+ [0x2C5A] = 0x9453, --(鑓)
+ [0x2C5B] = 0x6109, --(愉)
+ [0x2C5C] = 0x6108, --(愈)
+ [0x2C5D] = 0x6CB9, --(油)
+ [0x2C5E] = 0x7652, --(癒)
+ [0x2D01] = 0x8AED, --(諭)
+ [0x2D02] = 0x8F38, --(輸)
+ [0x2D03] = 0x552F, --(唯)
+ [0x2D04] = 0x4F51, --(佑)
+ [0x2D05] = 0x512A, --(優)
+ [0x2D06] = 0x52C7, --(勇)
+ [0x2D07] = 0x53CB, --(友)
+ [0x2D08] = 0x5BA5, --(宥)
+ [0x2D09] = 0x5E7D, --(幽)
+ [0x2D0A] = 0x60A0, --(悠)
+ [0x2D0B] = 0x6182, --(憂)
+ [0x2D0C] = 0x63D6, --(揖)
+ [0x2D0D] = 0x6709, --(有)
+ [0x2D0E] = 0x67DA, --(柚)
+ [0x2D0F] = 0x6E67, --(湧)
+ [0x2D10] = 0x6D8C, --(涌)
+ [0x2D11] = 0x7336, --(猶)
+ [0x2D12] = 0x7337, --(猷)
+ [0x2D13] = 0x7531, --(由)
+ [0x2D14] = 0x7950, --(祐)
+ [0x2D15] = 0x88D5, --(裕)
+ [0x2D16] = 0x8A98, --(誘)
+ [0x2D17] = 0x904A, --(遊)
+ [0x2D18] = 0x9091, --(邑)
+ [0x2D19] = 0x90F5, --(郵)
+ [0x2D1A] = 0x96C4, --(雄)
+ [0x2D1B] = 0x878D, --(融)
+ [0x2D1C] = 0x5915, --(夕)
+ [0x2D1D] = 0x4E88, --(予)
+ [0x2D1E] = 0x4F59, --(余)
+ [0x2D1F] = 0x4E0E, --(与)
+ [0x2D20] = 0x8A89, --(誉)
+ [0x2D21] = 0x8F3F, --(輿)
+ [0x2D22] = 0x9810, --(預)
+ [0x2D23] = 0x50AD, --(傭)
+ [0x2D24] = 0x5E7C, --(幼)
+ [0x2D25] = 0x5996, --(妖)
+ [0x2D26] = 0x5BB9, --(容)
+ [0x2D27] = 0x5EB8, --(庸)
+ [0x2D28] = 0x63DA, --(揚)
+ [0x2D29] = 0x63FA, --(揺)
+ [0x2D2A] = 0x64C1, --(擁)
+ [0x2D2B] = 0x66DC, --(曜)
+ [0x2D2C] = 0x694A, --(楊)
+ [0x2D2D] = 0x69D8, --(様)
+ [0x2D2E] = 0x6D0B, --(洋)
+ [0x2D2F] = 0x6EB6, --(溶)
+ [0x2D30] = 0x7194, --(熔)
+ [0x2D31] = 0x7528, --(用)
+ [0x2D32] = 0x7AAF, --(窯)
+ [0x2D33] = 0x7F8A, --(羊)
+ [0x2D34] = 0x8000, --(耀)
+ [0x2D35] = 0x8449, --(葉)
+ [0x2D36] = 0x84C9, --(蓉)
+ [0x2D37] = 0x8981, --(要)
+ [0x2D38] = 0x8B21, --(謡)
+ [0x2D39] = 0x8E0A, --(踊)
+ [0x2D3A] = 0x9065, --(遥)
+ [0x2D3B] = 0x967D, --(陽)
+ [0x2D3C] = 0x990A, --(養)
+ [0x2D3D] = 0x617E, --(慾)
+ [0x2D3E] = 0x6291, --(抑)
+ [0x2D3F] = 0x6B32, --(欲)
+ [0x2D40] = 0x6C83, --(沃)
+ [0x2D41] = 0x6D74, --(浴)
+ [0x2D42] = 0x7FCC, --(翌)
+ [0x2D43] = 0x7FFC, --(翼)
+ [0x2D44] = 0x6DC0, --(淀)
+ [0x2D45] = 0x7F85, --(羅)
+ [0x2D46] = 0x87BA, --(螺)
+ [0x2D47] = 0x88F8, --(裸)
+ [0x2D48] = 0x6765, --(来)
+ [0x2D49] = 0x83B1, --(莱)
+ [0x2D4A] = 0x983C, --(頼)
+ [0x2D4B] = 0x96F7, --(雷)
+ [0x2D4C] = 0x6D1B, --(洛)
+ [0x2D4D] = 0x7D61, --(絡)
+ [0x2D4E] = 0x843D, --(落)
+ [0x2D4F] = 0x916A, --(酪)
+ [0x2D50] = 0x4E71, --(乱)
+ [0x2D51] = 0x5375, --(卵)
+ [0x2D52] = 0x5D50, --(嵐)
+ [0x2D53] = 0x6B04, --(欄)
+ [0x2D54] = 0x6FEB, --(濫)
+ [0x2D55] = 0x85CD, --(藍)
+ [0x2D56] = 0x862D, --(蘭)
+ [0x2D57] = 0x89A7, --(覧)
+ [0x2D58] = 0x5229, --(利)
+ [0x2D59] = 0x540F, --(吏)
+ [0x2D5A] = 0x5C65, --(履)
+ [0x2D5B] = 0x674E, --(李)
+ [0x2D5C] = 0x68A8, --(梨)
+ [0x2D5D] = 0x7406, --(理)
+ [0x2D5E] = 0x7483, --(璃)
+ [0x2E01] = 0x75E2, --(痢)
+ [0x2E02] = 0x88CF, --(裏)
+ [0x2E03] = 0x88E1, --(裡)
+ [0x2E04] = 0x91CC, --(里)
+ [0x2E05] = 0x96E2, --(離)
+ [0x2E06] = 0x9678, --(陸)
+ [0x2E07] = 0x5F8B, --(律)
+ [0x2E08] = 0x7387, --(率)
+ [0x2E09] = 0x7ACB, --(立)
+ [0x2E0A] = 0x844E, --(葎)
+ [0x2E0B] = 0x63A0, --(掠)
+ [0x2E0C] = 0x7565, --(略)
+ [0x2E0D] = 0x5289, --(劉)
+ [0x2E0E] = 0x6D41, --(流)
+ [0x2E0F] = 0x6E9C, --(溜)
+ [0x2E10] = 0x7409, --(琉)
+ [0x2E11] = 0x7559, --(留)
+ [0x2E12] = 0x786B, --(硫)
+ [0x2E13] = 0x7C92, --(粒)
+ [0x2E14] = 0x9686, --(隆)
+ [0x2E15] = 0x7ADC, --(竜)
+ [0x2E16] = 0x9F8D, --(龍)
+ [0x2E17] = 0x4FB6, --(侶)
+ [0x2E18] = 0x616E, --(慮)
+ [0x2E19] = 0x65C5, --(旅)
+ [0x2E1A] = 0x865C, --(虜)
+ [0x2E1B] = 0x4E86, --(了)
+ [0x2E1C] = 0x4EAE, --(亮)
+ [0x2E1D] = 0x50DA, --(僚)
+ [0x2E1E] = 0x4E21, --(両)
+ [0x2E1F] = 0x51CC, --(凌)
+ [0x2E20] = 0x5BEE, --(寮)
+ [0x2E21] = 0x6599, --(料)
+ [0x2E22] = 0x6881, --(梁)
+ [0x2E23] = 0x6DBC, --(涼)
+ [0x2E24] = 0x731F, --(猟)
+ [0x2E25] = 0x7642, --(療)
+ [0x2E26] = 0x77AD, --(瞭)
+ [0x2E27] = 0x7A1C, --(稜)
+ [0x2E28] = 0x7CE7, --(糧)
+ [0x2E29] = 0x826F, --(良)
+ [0x2E2A] = 0x8AD2, --(諒)
+ [0x2E2B] = 0x907C, --(遼)
+ [0x2E2C] = 0x91CF, --(量)
+ [0x2E2D] = 0x9675, --(陵)
+ [0x2E2E] = 0x9818, --(領)
+ [0x2E2F] = 0x529B, --(力)
+ [0x2E30] = 0x7DD1, --(緑)
+ [0x2E31] = 0x502B, --(倫)
+ [0x2E32] = 0x5398, --(厘)
+ [0x2E33] = 0x6797, --(林)
+ [0x2E34] = 0x6DCB, --(淋)
+ [0x2E35] = 0x71D0, --(燐)
+ [0x2E36] = 0x7433, --(琳)
+ [0x2E37] = 0x81E8, --(臨)
+ [0x2E38] = 0x8F2A, --(輪)
+ [0x2E39] = 0x96A3, --(隣)
+ [0x2E3A] = 0x9C57, --(鱗)
+ [0x2E3B] = 0x9E9F, --(麟)
+ [0x2E3C] = 0x7460, --(瑠)
+ [0x2E3D] = 0x5841, --(塁)
+ [0x2E3E] = 0x6D99, --(涙)
+ [0x2E3F] = 0x7D2F, --(累)
+ [0x2E40] = 0x985E, --(類)
+ [0x2E41] = 0x4EE4, --(令)
+ [0x2E42] = 0x4F36, --(伶)
+ [0x2E43] = 0x4F8B, --(例)
+ [0x2E44] = 0x51B7, --(冷)
+ [0x2E45] = 0x52B1, --(励)
+ [0x2E46] = 0x5DBA, --(嶺)
+ [0x2E47] = 0x601C, --(怜)
+ [0x2E48] = 0x73B2, --(玲)
+ [0x2E49] = 0x793C, --(礼)
+ [0x2E4A] = 0x82D3, --(苓)
+ [0x2E4B] = 0x9234, --(鈴)
+ [0x2E4C] = 0x96B7, --(隷)
+ [0x2E4D] = 0x96F6, --(零)
+ [0x2E4E] = 0x970A, --(霊)
+ [0x2E4F] = 0x9E97, --(麗)
+ [0x2E50] = 0x9F62, --(齢)
+ [0x2E51] = 0x66A6, --(暦)
+ [0x2E52] = 0x6B74, --(歴)
+ [0x2E53] = 0x5217, --(列)
+ [0x2E54] = 0x52A3, --(劣)
+ [0x2E55] = 0x70C8, --(烈)
+ [0x2E56] = 0x88C2, --(裂)
+ [0x2E57] = 0x5EC9, --(廉)
+ [0x2E58] = 0x604B, --(恋)
+ [0x2E59] = 0x6190, --(憐)
+ [0x2E5A] = 0x6F23, --(漣)
+ [0x2E5B] = 0x7149, --(煉)
+ [0x2E5C] = 0x7C3E, --(簾)
+ [0x2E5D] = 0x7DF4, --(練)
+ [0x2E5E] = 0x806F, --(聯)
+ [0x2F01] = 0x84EE, --(蓮)
+ [0x2F02] = 0x9023, --(連)
+ [0x2F03] = 0x932C, --(錬)
+ [0x2F04] = 0x5442, --(呂)
+ [0x2F05] = 0x9B6F, --(魯)
+ [0x2F06] = 0x6AD3, --(櫓)
+ [0x2F07] = 0x7089, --(炉)
+ [0x2F08] = 0x8CC2, --(賂)
+ [0x2F09] = 0x8DEF, --(路)
+ [0x2F0A] = 0x9732, --(露)
+ [0x2F0B] = 0x52B4, --(労)
+ [0x2F0C] = 0x5A41, --(婁)
+ [0x2F0D] = 0x5ECA, --(廊)
+ [0x2F0E] = 0x5F04, --(弄)
+ [0x2F0F] = 0x6717, --(朗)
+ [0x2F10] = 0x697C, --(楼)
+ [0x2F11] = 0x6994, --(榔)
+ [0x2F12] = 0x6D6A, --(浪)
+ [0x2F13] = 0x6F0F, --(漏)
+ [0x2F14] = 0x7262, --(牢)
+ [0x2F15] = 0x72FC, --(狼)
+ [0x2F16] = 0x7BED, --(篭)
+ [0x2F17] = 0x8001, --(老)
+ [0x2F18] = 0x807E, --(聾)
+ [0x2F19] = 0x874B, --(蝋)
+ [0x2F1A] = 0x90CE, --(郎)
+ [0x2F1B] = 0x516D, --(六)
+ [0x2F1C] = 0x9E93, --(麓)
+ [0x2F1D] = 0x7984, --(禄)
+ [0x2F1E] = 0x808B, --(肋)
+ [0x2F1F] = 0x9332, --(録)
+ [0x2F20] = 0x8AD6, --(論)
+ [0x2F21] = 0x502D, --(倭)
+ [0x2F22] = 0x548C, --(和)
+ [0x2F23] = 0x8A71, --(話)
+ [0x2F24] = 0x6B6A, --(歪)
+ [0x2F25] = 0x8CC4, --(賄)
+ [0x2F26] = 0x8107, --(脇)
+ [0x2F27] = 0x60D1, --(惑)
+ [0x2F28] = 0x67A0, --(枠)
+ [0x2F29] = 0x9DF2, --(鷲)
+ [0x2F2A] = 0x4E99, --(亙)
+ [0x2F2B] = 0x4E98, --(亘)
+ [0x2F2C] = 0x9C10, --(鰐)
+ [0x2F2D] = 0x8A6B, --(詫)
+ [0x2F2E] = 0x85C1, --(藁)
+ [0x2F2F] = 0x8568, --(蕨)
+ [0x2F30] = 0x6900, --(椀)
+ [0x2F31] = 0x6E7E, --(湾)
+ [0x2F32] = 0x7897, --(碗)
+ [0x2F33] = 0x8155, --(腕)
+ [0x3001] = 0x5F0C, --(弌)
+ [0x3002] = 0x4E10, --(丐)
+ [0x3003] = 0x4E15, --(丕)
+ [0x3004] = 0x4E2A, --(个)
+ [0x3005] = 0x4E31, --(丱)
+ [0x3006] = 0x4E36, --(丶)
+ [0x3007] = 0x4E3C, --(丼)
+ [0x3008] = 0x4E3F, --(丿)
+ [0x3009] = 0x4E42, --(乂)
+ [0x300A] = 0x4E56, --(乖)
+ [0x300B] = 0x4E58, --(乘)
+ [0x300C] = 0x4E82, --(亂)
+ [0x300D] = 0x4E85, --(亅)
+ [0x300E] = 0x8C6B, --(豫)
+ [0x300F] = 0x4E8A, --(亊)
+ [0x3010] = 0x8212, --(舒)
+ [0x3011] = 0x5F0D, --(弍)
+ [0x3012] = 0x4E8E, --(于)
+ [0x3013] = 0x4E9E, --(亞)
+ [0x3014] = 0x4E9F, --(亟)
+ [0x3015] = 0x4EA0, --(亠)
+ [0x3016] = 0x4EA2, --(亢)
+ [0x3017] = 0x4EB0, --(亰)
+ [0x3018] = 0x4EB3, --(亳)
+ [0x3019] = 0x4EB6, --(亶)
+ [0x301A] = 0x4ECE, --(从)
+ [0x301B] = 0x4ECD, --(仍)
+ [0x301C] = 0x4EC4, --(仄)
+ [0x301D] = 0x4EC6, --(仆)
+ [0x301E] = 0x4EC2, --(仂)
+ [0x301F] = 0x4ED7, --(仗)
+ [0x3020] = 0x4EDE, --(仞)
+ [0x3021] = 0x4EED, --(仭)
+ [0x3022] = 0x4EDF, --(仟)
+ [0x3023] = 0x4EF7, --(价)
+ [0x3024] = 0x4F09, --(伉)
+ [0x3025] = 0x4F5A, --(佚)
+ [0x3026] = 0x4F30, --(估)
+ [0x3027] = 0x4F5B, --(佛)
+ [0x3028] = 0x4F5D, --(佝)
+ [0x3029] = 0x4F57, --(佗)
+ [0x302A] = 0x4F47, --(佇)
+ [0x302B] = 0x4F76, --(佶)
+ [0x302C] = 0x4F88, --(侈)
+ [0x302D] = 0x4F8F, --(侏)
+ [0x302E] = 0x4F98, --(侘)
+ [0x302F] = 0x4F7B, --(佻)
+ [0x3030] = 0x4F69, --(佩)
+ [0x3031] = 0x4F70, --(佰)
+ [0x3032] = 0x4F91, --(侑)
+ [0x3033] = 0x4F6F, --(佯)
+ [0x3034] = 0x4F86, --(來)
+ [0x3035] = 0x4F96, --(侖)
+ [0x3036] = 0x5118, --(儘)
+ [0x3037] = 0x4FD4, --(俔)
+ [0x3038] = 0x4FDF, --(俟)
+ [0x3039] = 0x4FCE, --(俎)
+ [0x303A] = 0x4FD8, --(俘)
+ [0x303B] = 0x4FDB, --(俛)
+ [0x303C] = 0x4FD1, --(俑)
+ [0x303D] = 0x4FDA, --(俚)
+ [0x303E] = 0x4FD0, --(俐)
+ [0x303F] = 0x4FE4, --(俤)
+ [0x3040] = 0x4FE5, --(俥)
+ [0x3041] = 0x501A, --(倚)
+ [0x3042] = 0x5028, --(倨)
+ [0x3043] = 0x5014, --(倔)
+ [0x3044] = 0x502A, --(倪)
+ [0x3045] = 0x5025, --(倥)
+ [0x3046] = 0x5005, --(倅)
+ [0x3047] = 0x4F1C, --(伜)
+ [0x3048] = 0x4FF6, --(俶)
+ [0x3049] = 0x5021, --(倡)
+ [0x304A] = 0x5029, --(倩)
+ [0x304B] = 0x502C, --(倬)
+ [0x304C] = 0x4FFE, --(俾)
+ [0x304D] = 0x4FEF, --(俯)
+ [0x304E] = 0x5011, --(們)
+ [0x304F] = 0x5006, --(倆)
+ [0x3050] = 0x5043, --(偃)
+ [0x3051] = 0x5047, --(假)
+ [0x3052] = 0x6703, --(會)
+ [0x3053] = 0x5055, --(偕)
+ [0x3054] = 0x5050, --(偐)
+ [0x3055] = 0x5048, --(偈)
+ [0x3056] = 0x505A, --(做)
+ [0x3057] = 0x5056, --(偖)
+ [0x3058] = 0x506C, --(偬)
+ [0x3059] = 0x5078, --(偸)
+ [0x305A] = 0x5080, --(傀)
+ [0x305B] = 0x509A, --(傚)
+ [0x305C] = 0x5085, --(傅)
+ [0x305D] = 0x50B4, --(傴)
+ [0x305E] = 0x50B2, --(傲)
+ [0x3101] = 0x50C9, --(僉)
+ [0x3102] = 0x50CA, --(僊)
+ [0x3103] = 0x50B3, --(傳)
+ [0x3104] = 0x50C2, --(僂)
+ [0x3105] = 0x50D6, --(僖)
+ [0x3106] = 0x50DE, --(僞)
+ [0x3107] = 0x50E5, --(僥)
+ [0x3108] = 0x50ED, --(僭)
+ [0x3109] = 0x50E3, --(僣)
+ [0x310A] = 0x50EE, --(僮)
+ [0x310B] = 0x50F9, --(價)
+ [0x310C] = 0x50F5, --(僵)
+ [0x310D] = 0x5109, --(儉)
+ [0x310E] = 0x5101, --(儁)
+ [0x310F] = 0x5102, --(儂)
+ [0x3110] = 0x5116, --(儖)
+ [0x3111] = 0x5115, --(儕)
+ [0x3112] = 0x5114, --(儔)
+ [0x3113] = 0x511A, --(儚)
+ [0x3114] = 0x5121, --(儡)
+ [0x3115] = 0x513A, --(儺)
+ [0x3116] = 0x5137, --(儷)
+ [0x3117] = 0x513C, --(儼)
+ [0x3118] = 0x513B, --(儻)
+ [0x3119] = 0x513F, --(儿)
+ [0x311A] = 0x5140, --(兀)
+ [0x311B] = 0x5152, --(兒)
+ [0x311C] = 0x514C, --(兌)
+ [0x311D] = 0x5154, --(兔)
+ [0x311E] = 0x5162, --(兢)
+ [0x311F] = 0x7AF8, --(竸)
+ [0x3120] = 0x5169, --(兩)
+ [0x3121] = 0x516A, --(兪)
+ [0x3122] = 0x516E, --(兮)
+ [0x3123] = 0x5180, --(冀)
+ [0x3124] = 0x5182, --(冂)
+ [0x3125] = 0x56D8, --(囘)
+ [0x3126] = 0x518C, --(册)
+ [0x3127] = 0x5189, --(冉)
+ [0x3128] = 0x518F, --(冏)
+ [0x3129] = 0x5191, --(冑)
+ [0x312A] = 0x5193, --(冓)
+ [0x312B] = 0x5195, --(冕)
+ [0x312C] = 0x5196, --(冖)
+ [0x312D] = 0x51A4, --(冤)
+ [0x312E] = 0x51A6, --(冦)
+ [0x312F] = 0x51A2, --(冢)
+ [0x3130] = 0x51A9, --(冩)
+ [0x3131] = 0x51AA, --(冪)
+ [0x3132] = 0x51AB, --(冫)
+ [0x3133] = 0x51B3, --(决)
+ [0x3134] = 0x51B1, --(冱)
+ [0x3135] = 0x51B2, --(冲)
+ [0x3136] = 0x51B0, --(冰)
+ [0x3137] = 0x51B5, --(况)
+ [0x3138] = 0x51BD, --(冽)
+ [0x3139] = 0x51C5, --(凅)
+ [0x313A] = 0x51C9, --(凉)
+ [0x313B] = 0x51DB, --(凛)
+ [0x313C] = 0x51E0, --(几)
+ [0x313D] = 0x8655, --(處)
+ [0x313E] = 0x51E9, --(凩)
+ [0x313F] = 0x51ED, --(凭)
+ [0x3140] = 0x51F0, --(凰)
+ [0x3141] = 0x51F5, --(凵)
+ [0x3142] = 0x51FE, --(凾)
+ [0x3143] = 0x5204, --(刄)
+ [0x3144] = 0x520B, --(刋)
+ [0x3145] = 0x5214, --(刔)
+ [0x3146] = 0x520E, --(刎)
+ [0x3147] = 0x5227, --(刧)
+ [0x3148] = 0x522A, --(刪)
+ [0x3149] = 0x522E, --(刮)
+ [0x314A] = 0x5233, --(刳)
+ [0x314B] = 0x5239, --(刹)
+ [0x314C] = 0x524F, --(剏)
+ [0x314D] = 0x5244, --(剄)
+ [0x314E] = 0x524B, --(剋)
+ [0x314F] = 0x524C, --(剌)
+ [0x3150] = 0x525E, --(剞)
+ [0x3151] = 0x5254, --(剔)
+ [0x3152] = 0x526A, --(剪)
+ [0x3153] = 0x5274, --(剴)
+ [0x3154] = 0x5269, --(剩)
+ [0x3155] = 0x5273, --(剳)
+ [0x3156] = 0x527F, --(剿)
+ [0x3157] = 0x527D, --(剽)
+ [0x3158] = 0x528D, --(劍)
+ [0x3159] = 0x5294, --(劔)
+ [0x315A] = 0x5292, --(劒)
+ [0x315B] = 0x5271, --(剱)
+ [0x315C] = 0x5288, --(劈)
+ [0x315D] = 0x5291, --(劑)
+ [0x315E] = 0x8FA8, --(辨)
+ [0x3201] = 0x8FA7, --(辧)
+ [0x3202] = 0x52AC, --(劬)
+ [0x3203] = 0x52AD, --(劭)
+ [0x3204] = 0x52BC, --(劼)
+ [0x3205] = 0x52B5, --(劵)
+ [0x3206] = 0x52C1, --(勁)
+ [0x3207] = 0x52CD, --(勍)
+ [0x3208] = 0x52D7, --(勗)
+ [0x3209] = 0x52DE, --(勞)
+ [0x320A] = 0x52E3, --(勣)
+ [0x320B] = 0x52E6, --(勦)
+ [0x320C] = 0x98ED, --(飭)
+ [0x320D] = 0x52E0, --(勠)
+ [0x320E] = 0x52F3, --(勳)
+ [0x320F] = 0x52F5, --(勵)
+ [0x3210] = 0x52F8, --(勸)
+ [0x3211] = 0x52F9, --(勹)
+ [0x3212] = 0x5306, --(匆)
+ [0x3213] = 0x5308, --(匈)
+ [0x3214] = 0x7538, --(甸)
+ [0x3215] = 0x530D, --(匍)
+ [0x3216] = 0x5310, --(匐)
+ [0x3217] = 0x530F, --(匏)
+ [0x3218] = 0x5315, --(匕)
+ [0x3219] = 0x531A, --(匚)
+ [0x321A] = 0x5323, --(匣)
+ [0x321B] = 0x532F, --(匯)
+ [0x321C] = 0x5331, --(匱)
+ [0x321D] = 0x5333, --(匳)
+ [0x321E] = 0x5338, --(匸)
+ [0x321F] = 0x5340, --(區)
+ [0x3220] = 0x5346, --(卆)
+ [0x3221] = 0x5345, --(卅)
+ [0x3222] = 0x4E17, --(丗)
+ [0x3223] = 0x5349, --(卉)
+ [0x3224] = 0x534D, --(卍)
+ [0x3225] = 0x51D6, --(凖)
+ [0x3226] = 0x535E, --(卞)
+ [0x3227] = 0x5369, --(卩)
+ [0x3228] = 0x536E, --(卮)
+ [0x3229] = 0x5918, --(夘)
+ [0x322A] = 0x537B, --(卻)
+ [0x322B] = 0x5377, --(卷)
+ [0x322C] = 0x5382, --(厂)
+ [0x322D] = 0x5396, --(厖)
+ [0x322E] = 0x53A0, --(厠)
+ [0x322F] = 0x53A6, --(厦)
+ [0x3230] = 0x53A5, --(厥)
+ [0x3231] = 0x53AE, --(厮)
+ [0x3232] = 0x53B0, --(厰)
+ [0x3233] = 0x53B6, --(厶)
+ [0x3234] = 0x53C3, --(參)
+ [0x3235] = 0x7C12, --(簒)
+ [0x3236] = 0x96D9, --(雙)
+ [0x3237] = 0x53DF, --(叟)
+ [0x3238] = 0x66FC, --(曼)
+ [0x3239] = 0x71EE, --(燮)
+ [0x323A] = 0x53EE, --(叮)
+ [0x323B] = 0x53E8, --(叨)
+ [0x323C] = 0x53ED, --(叭)
+ [0x323D] = 0x53FA, --(叺)
+ [0x323E] = 0x5401, --(吁)
+ [0x323F] = 0x543D, --(吽)
+ [0x3240] = 0x5440, --(呀)
+ [0x3241] = 0x542C, --(听)
+ [0x3242] = 0x542D, --(吭)
+ [0x3243] = 0x543C, --(吼)
+ [0x3244] = 0x542E, --(吮)
+ [0x3245] = 0x5436, --(吶)
+ [0x3246] = 0x5429, --(吩)
+ [0x3247] = 0x541D, --(吝)
+ [0x3248] = 0x544E, --(呎)
+ [0x3249] = 0x548F, --(咏)
+ [0x324A] = 0x5475, --(呵)
+ [0x324B] = 0x548E, --(咎)
+ [0x324C] = 0x545F, --(呟)
+ [0x324D] = 0x5471, --(呱)
+ [0x324E] = 0x5477, --(呷)
+ [0x324F] = 0x5470, --(呰)
+ [0x3250] = 0x5492, --(咒)
+ [0x3251] = 0x547B, --(呻)
+ [0x3252] = 0x5480, --(咀)
+ [0x3253] = 0x5476, --(呶)
+ [0x3254] = 0x5484, --(咄)
+ [0x3255] = 0x5490, --(咐)
+ [0x3256] = 0x5486, --(咆)
+ [0x3257] = 0x54C7, --(哇)
+ [0x3258] = 0x54A2, --(咢)
+ [0x3259] = 0x54B8, --(咸)
+ [0x325A] = 0x54A5, --(咥)
+ [0x325B] = 0x54AC, --(咬)
+ [0x325C] = 0x54C4, --(哄)
+ [0x325D] = 0x54C8, --(哈)
+ [0x325E] = 0x54A8, --(咨)
+ [0x3301] = 0x54AB, --(咫)
+ [0x3302] = 0x54C2, --(哂)
+ [0x3303] = 0x54A4, --(咤)
+ [0x3304] = 0x54BE, --(咾)
+ [0x3305] = 0x54BC, --(咼)
+ [0x3306] = 0x54D8, --(哘)
+ [0x3307] = 0x54E5, --(哥)
+ [0x3308] = 0x54E6, --(哦)
+ [0x3309] = 0x550F, --(唏)
+ [0x330A] = 0x5514, --(唔)
+ [0x330B] = 0x54FD, --(哽)
+ [0x330C] = 0x54EE, --(哮)
+ [0x330D] = 0x54ED, --(哭)
+ [0x330E] = 0x54FA, --(哺)
+ [0x330F] = 0x54E2, --(哢)
+ [0x3310] = 0x5539, --(唹)
+ [0x3311] = 0x5540, --(啀)
+ [0x3312] = 0x5563, --(啣)
+ [0x3313] = 0x554C, --(啌)
+ [0x3314] = 0x552E, --(售)
+ [0x3315] = 0x555C, --(啜)
+ [0x3316] = 0x5545, --(啅)
+ [0x3317] = 0x5556, --(啖)
+ [0x3318] = 0x5557, --(啗)
+ [0x3319] = 0x5538, --(唸)
+ [0x331A] = 0x5533, --(唳)
+ [0x331B] = 0x555D, --(啝)
+ [0x331C] = 0x5599, --(喙)
+ [0x331D] = 0x5580, --(喀)
+ [0x331E] = 0x54AF, --(咯)
+ [0x331F] = 0x558A, --(喊)
+ [0x3320] = 0x559F, --(喟)
+ [0x3321] = 0x557B, --(啻)
+ [0x3322] = 0x557E, --(啾)
+ [0x3323] = 0x5598, --(喘)
+ [0x3324] = 0x559E, --(喞)
+ [0x3325] = 0x55AE, --(單)
+ [0x3326] = 0x557C, --(啼)
+ [0x3327] = 0x5583, --(喃)
+ [0x3328] = 0x55A9, --(喩)
+ [0x3329] = 0x5587, --(喇)
+ [0x332A] = 0x55A8, --(喨)
+ [0x332B] = 0x55DA, --(嗚)
+ [0x332C] = 0x55C5, --(嗅)
+ [0x332D] = 0x55DF, --(嗟)
+ [0x332E] = 0x55C4, --(嗄)
+ [0x332F] = 0x55DC, --(嗜)
+ [0x3330] = 0x55E4, --(嗤)
+ [0x3331] = 0x55D4, --(嗔)
+ [0x3332] = 0x5614, --(嘔)
+ [0x3333] = 0x55F7, --(嗷)
+ [0x3334] = 0x5616, --(嘖)
+ [0x3335] = 0x55FE, --(嗾)
+ [0x3336] = 0x55FD, --(嗽)
+ [0x3337] = 0x561B, --(嘛)
+ [0x3338] = 0x55F9, --(嗹)
+ [0x3339] = 0x564E, --(噎)
+ [0x333A] = 0x5650, --(噐)
+ [0x333B] = 0x71DF, --(營)
+ [0x333C] = 0x5634, --(嘴)
+ [0x333D] = 0x5636, --(嘶)
+ [0x333E] = 0x5632, --(嘲)
+ [0x333F] = 0x5638, --(嘸)
+ [0x3340] = 0x566B, --(噫)
+ [0x3341] = 0x5664, --(噤)
+ [0x3342] = 0x562F, --(嘯)
+ [0x3343] = 0x566C, --(噬)
+ [0x3344] = 0x566A, --(噪)
+ [0x3345] = 0x5686, --(嚆)
+ [0x3346] = 0x5680, --(嚀)
+ [0x3347] = 0x568A, --(嚊)
+ [0x3348] = 0x56A0, --(嚠)
+ [0x3349] = 0x5694, --(嚔)
+ [0x334A] = 0x568F, --(嚏)
+ [0x334B] = 0x56A5, --(嚥)
+ [0x334C] = 0x56AE, --(嚮)
+ [0x334D] = 0x56B6, --(嚶)
+ [0x334E] = 0x56B4, --(嚴)
+ [0x334F] = 0x56C2, --(囂)
+ [0x3350] = 0x56BC, --(嚼)
+ [0x3351] = 0x56C1, --(囁)
+ [0x3352] = 0x56C3, --(囃)
+ [0x3353] = 0x56C0, --(囀)
+ [0x3354] = 0x56C8, --(囈)
+ [0x3355] = 0x56CE, --(囎)
+ [0x3356] = 0x56D1, --(囑)
+ [0x3357] = 0x56D3, --(囓)
+ [0x3358] = 0x56D7, --(囗)
+ [0x3359] = 0x56EE, --(囮)
+ [0x335A] = 0x56F9, --(囹)
+ [0x335B] = 0x5700, --(圀)
+ [0x335C] = 0x56FF, --(囿)
+ [0x335D] = 0x5704, --(圄)
+ [0x335E] = 0x5709, --(圉)
+ [0x3401] = 0x5708, --(圈)
+ [0x3402] = 0x570B, --(國)
+ [0x3403] = 0x570D, --(圍)
+ [0x3404] = 0x5713, --(圓)
+ [0x3405] = 0x5718, --(團)
+ [0x3406] = 0x5716, --(圖)
+ [0x3407] = 0x55C7, --(嗇)
+ [0x3408] = 0x571C, --(圜)
+ [0x3409] = 0x5726, --(圦)
+ [0x340A] = 0x5737, --(圷)
+ [0x340B] = 0x5738, --(圸)
+ [0x340C] = 0x574E, --(坎)
+ [0x340D] = 0x573B, --(圻)
+ [0x340E] = 0x5740, --(址)
+ [0x340F] = 0x574F, --(坏)
+ [0x3410] = 0x5769, --(坩)
+ [0x3411] = 0x57C0, --(埀)
+ [0x3412] = 0x5788, --(垈)
+ [0x3413] = 0x5761, --(坡)
+ [0x3414] = 0x577F, --(坿)
+ [0x3415] = 0x5789, --(垉)
+ [0x3416] = 0x5793, --(垓)
+ [0x3417] = 0x57A0, --(垠)
+ [0x3418] = 0x57B3, --(垳)
+ [0x3419] = 0x57A4, --(垤)
+ [0x341A] = 0x57AA, --(垪)
+ [0x341B] = 0x57B0, --(垰)
+ [0x341C] = 0x57C3, --(埃)
+ [0x341D] = 0x57C6, --(埆)
+ [0x341E] = 0x57D4, --(埔)
+ [0x341F] = 0x57D2, --(埒)
+ [0x3420] = 0x57D3, --(埓)
+ [0x3421] = 0x580A, --(堊)
+ [0x3422] = 0x57D6, --(埖)
+ [0x3423] = 0x57E3, --(埣)
+ [0x3424] = 0x580B, --(堋)
+ [0x3425] = 0x5819, --(堙)
+ [0x3426] = 0x581D, --(堝)
+ [0x3427] = 0x5872, --(塲)
+ [0x3428] = 0x5821, --(堡)
+ [0x3429] = 0x5862, --(塢)
+ [0x342A] = 0x584B, --(塋)
+ [0x342B] = 0x5870, --(塰)
+ [0x342C] = 0x6BC0, --(毀)
+ [0x342D] = 0x5852, --(塒)
+ [0x342E] = 0x583D, --(堽)
+ [0x342F] = 0x5879, --(塹)
+ [0x3430] = 0x5885, --(墅)
+ [0x3431] = 0x58B9, --(墹)
+ [0x3432] = 0x589F, --(墟)
+ [0x3433] = 0x58AB, --(墫)
+ [0x3434] = 0x58BA, --(墺)
+ [0x3435] = 0x58DE, --(壞)
+ [0x3436] = 0x58BB, --(墻)
+ [0x3437] = 0x58B8, --(墸)
+ [0x3438] = 0x58AE, --(墮)
+ [0x3439] = 0x58C5, --(壅)
+ [0x343A] = 0x58D3, --(壓)
+ [0x343B] = 0x58D1, --(壑)
+ [0x343C] = 0x58D7, --(壗)
+ [0x343D] = 0x58D9, --(壙)
+ [0x343E] = 0x58D8, --(壘)
+ [0x343F] = 0x58E5, --(壥)
+ [0x3440] = 0x58DC, --(壜)
+ [0x3441] = 0x58E4, --(壤)
+ [0x3442] = 0x58DF, --(壟)
+ [0x3443] = 0x58EF, --(壯)
+ [0x3444] = 0x58FA, --(壺)
+ [0x3445] = 0x58F9, --(壹)
+ [0x3446] = 0x58FB, --(壻)
+ [0x3447] = 0x58FC, --(壼)
+ [0x3448] = 0x58FD, --(壽)
+ [0x3449] = 0x5902, --(夂)
+ [0x344A] = 0x590A, --(夊)
+ [0x344B] = 0x5910, --(夐)
+ [0x344C] = 0x591B, --(夛)
+ [0x344D] = 0x68A6, --(梦)
+ [0x344E] = 0x5925, --(夥)
+ [0x344F] = 0x592C, --(夬)
+ [0x3450] = 0x592D, --(夭)
+ [0x3451] = 0x5932, --(夲)
+ [0x3452] = 0x5938, --(夸)
+ [0x3453] = 0x593E, --(夾)
+ [0x3454] = 0x7AD2, --(竒)
+ [0x3455] = 0x5955, --(奕)
+ [0x3456] = 0x5950, --(奐)
+ [0x3457] = 0x594E, --(奎)
+ [0x3458] = 0x595A, --(奚)
+ [0x3459] = 0x5958, --(奘)
+ [0x345A] = 0x5962, --(奢)
+ [0x345B] = 0x5960, --(奠)
+ [0x345C] = 0x5967, --(奧)
+ [0x345D] = 0x596C, --(奬)
+ [0x345E] = 0x5969, --(奩)
+ [0x3501] = 0x5978, --(奸)
+ [0x3502] = 0x5981, --(妁)
+ [0x3503] = 0x599D, --(妝)
+ [0x3504] = 0x4F5E, --(佞)
+ [0x3505] = 0x4FAB, --(侫)
+ [0x3506] = 0x59A3, --(妣)
+ [0x3507] = 0x59B2, --(妲)
+ [0x3508] = 0x59C6, --(姆)
+ [0x3509] = 0x59E8, --(姨)
+ [0x350A] = 0x59DC, --(姜)
+ [0x350B] = 0x598D, --(妍)
+ [0x350C] = 0x59D9, --(姙)
+ [0x350D] = 0x59DA, --(姚)
+ [0x350E] = 0x5A25, --(娥)
+ [0x350F] = 0x5A1F, --(娟)
+ [0x3510] = 0x5A11, --(娑)
+ [0x3511] = 0x5A1C, --(娜)
+ [0x3512] = 0x5A09, --(娉)
+ [0x3513] = 0x5A1A, --(娚)
+ [0x3514] = 0x5A40, --(婀)
+ [0x3515] = 0x5A6C, --(婬)
+ [0x3516] = 0x5A49, --(婉)
+ [0x3517] = 0x5A35, --(娵)
+ [0x3518] = 0x5A36, --(娶)
+ [0x3519] = 0x5A62, --(婢)
+ [0x351A] = 0x5A6A, --(婪)
+ [0x351B] = 0x5A9A, --(媚)
+ [0x351C] = 0x5ABC, --(媼)
+ [0x351D] = 0x5ABE, --(媾)
+ [0x351E] = 0x5ACB, --(嫋)
+ [0x351F] = 0x5AC2, --(嫂)
+ [0x3520] = 0x5ABD, --(媽)
+ [0x3521] = 0x5AE3, --(嫣)
+ [0x3522] = 0x5AD7, --(嫗)
+ [0x3523] = 0x5AE6, --(嫦)
+ [0x3524] = 0x5AE9, --(嫩)
+ [0x3525] = 0x5AD6, --(嫖)
+ [0x3526] = 0x5AFA, --(嫺)
+ [0x3527] = 0x5AFB, --(嫻)
+ [0x3528] = 0x5B0C, --(嬌)
+ [0x3529] = 0x5B0B, --(嬋)
+ [0x352A] = 0x5B16, --(嬖)
+ [0x352B] = 0x5B32, --(嬲)
+ [0x352C] = 0x5AD0, --(嫐)
+ [0x352D] = 0x5B2A, --(嬪)
+ [0x352E] = 0x5B36, --(嬶)
+ [0x352F] = 0x5B3E, --(嬾)
+ [0x3530] = 0x5B43, --(孃)
+ [0x3531] = 0x5B45, --(孅)
+ [0x3532] = 0x5B40, --(孀)
+ [0x3533] = 0x5B51, --(孑)
+ [0x3534] = 0x5B55, --(孕)
+ [0x3535] = 0x5B5A, --(孚)
+ [0x3536] = 0x5B5B, --(孛)
+ [0x3537] = 0x5B65, --(孥)
+ [0x3538] = 0x5B69, --(孩)
+ [0x3539] = 0x5B70, --(孰)
+ [0x353A] = 0x5B73, --(孳)
+ [0x353B] = 0x5B75, --(孵)
+ [0x353C] = 0x5B78, --(學)
+ [0x353D] = 0x6588, --(斈)
+ [0x353E] = 0x5B7A, --(孺)
+ [0x353F] = 0x5B80, --(宀)
+ [0x3540] = 0x5B83, --(它)
+ [0x3541] = 0x5BA6, --(宦)
+ [0x3542] = 0x5BB8, --(宸)
+ [0x3543] = 0x5BC3, --(寃)
+ [0x3544] = 0x5BC7, --(寇)
+ [0x3545] = 0x5BC9, --(寉)
+ [0x3546] = 0x5BD4, --(寔)
+ [0x3547] = 0x5BD0, --(寐)
+ [0x3548] = 0x5BE4, --(寤)
+ [0x3549] = 0x5BE6, --(實)
+ [0x354A] = 0x5BE2, --(寢)
+ [0x354B] = 0x5BDE, --(寞)
+ [0x354C] = 0x5BE5, --(寥)
+ [0x354D] = 0x5BEB, --(寫)
+ [0x354E] = 0x5BF0, --(寰)
+ [0x354F] = 0x5BF6, --(寶)
+ [0x3550] = 0x5BF3, --(寳)
+ [0x3551] = 0x5C05, --(尅)
+ [0x3552] = 0x5C07, --(將)
+ [0x3553] = 0x5C08, --(專)
+ [0x3554] = 0x5C0D, --(對)
+ [0x3555] = 0x5C13, --(尓)
+ [0x3556] = 0x5C20, --(尠)
+ [0x3557] = 0x5C22, --(尢)
+ [0x3558] = 0x5C28, --(尨)
+ [0x3559] = 0x5C38, --(尸)
+ [0x355A] = 0x5C39, --(尹)
+ [0x355B] = 0x5C41, --(屁)
+ [0x355C] = 0x5C46, --(屆)
+ [0x355D] = 0x5C4E, --(屎)
+ [0x355E] = 0x5C53, --(屓)
+ [0x3601] = 0x5C50, --(屐)
+ [0x3602] = 0x5C4F, --(屏)
+ [0x3603] = 0x5B71, --(孱)
+ [0x3604] = 0x5C6C, --(屬)
+ [0x3605] = 0x5C6E, --(屮)
+ [0x3606] = 0x4E62, --(乢)
+ [0x3607] = 0x5C76, --(屶)
+ [0x3608] = 0x5C79, --(屹)
+ [0x3609] = 0x5C8C, --(岌)
+ [0x360A] = 0x5C91, --(岑)
+ [0x360B] = 0x5C94, --(岔)
+ [0x360C] = 0x599B, --(妛)
+ [0x360D] = 0x5CAB, --(岫)
+ [0x360E] = 0x5CBB, --(岻)
+ [0x360F] = 0x5CB6, --(岶)
+ [0x3610] = 0x5CBC, --(岼)
+ [0x3611] = 0x5CB7, --(岷)
+ [0x3612] = 0x5CC5, --(峅)
+ [0x3613] = 0x5CBE, --(岾)
+ [0x3614] = 0x5CC7, --(峇)
+ [0x3615] = 0x5CD9, --(峙)
+ [0x3616] = 0x5CE9, --(峩)
+ [0x3617] = 0x5CFD, --(峽)
+ [0x3618] = 0x5CFA, --(峺)
+ [0x3619] = 0x5CED, --(峭)
+ [0x361A] = 0x5D8C, --(嶌)
+ [0x361B] = 0x5CEA, --(峪)
+ [0x361C] = 0x5D0B, --(崋)
+ [0x361D] = 0x5D15, --(崕)
+ [0x361E] = 0x5D17, --(崗)
+ [0x361F] = 0x5D5C, --(嵜)
+ [0x3620] = 0x5D1F, --(崟)
+ [0x3621] = 0x5D1B, --(崛)
+ [0x3622] = 0x5D11, --(崑)
+ [0x3623] = 0x5D14, --(崔)
+ [0x3624] = 0x5D22, --(崢)
+ [0x3625] = 0x5D1A, --(崚)
+ [0x3626] = 0x5D19, --(崙)
+ [0x3627] = 0x5D18, --(崘)
+ [0x3628] = 0x5D4C, --(嵌)
+ [0x3629] = 0x5D52, --(嵒)
+ [0x362A] = 0x5D4E, --(嵎)
+ [0x362B] = 0x5D4B, --(嵋)
+ [0x362C] = 0x5D6C, --(嵬)
+ [0x362D] = 0x5D73, --(嵳)
+ [0x362E] = 0x5D76, --(嵶)
+ [0x362F] = 0x5D87, --(嶇)
+ [0x3630] = 0x5D84, --(嶄)
+ [0x3631] = 0x5D82, --(嶂)
+ [0x3632] = 0x5DA2, --(嶢)
+ [0x3633] = 0x5D9D, --(嶝)
+ [0x3634] = 0x5DAC, --(嶬)
+ [0x3635] = 0x5DAE, --(嶮)
+ [0x3636] = 0x5DBD, --(嶽)
+ [0x3637] = 0x5D90, --(嶐)
+ [0x3638] = 0x5DB7, --(嶷)
+ [0x3639] = 0x5DBC, --(嶼)
+ [0x363A] = 0x5DC9, --(巉)
+ [0x363B] = 0x5DCD, --(巍)
+ [0x363C] = 0x5DD3, --(巓)
+ [0x363D] = 0x5DD2, --(巒)
+ [0x363E] = 0x5DD6, --(巖)
+ [0x363F] = 0x5DDB, --(巛)
+ [0x3640] = 0x5DEB, --(巫)
+ [0x3641] = 0x5DF2, --(已)
+ [0x3642] = 0x5DF5, --(巵)
+ [0x3643] = 0x5E0B, --(帋)
+ [0x3644] = 0x5E1A, --(帚)
+ [0x3645] = 0x5E19, --(帙)
+ [0x3646] = 0x5E11, --(帑)
+ [0x3647] = 0x5E1B, --(帛)
+ [0x3648] = 0x5E36, --(帶)
+ [0x3649] = 0x5E37, --(帷)
+ [0x364A] = 0x5E44, --(幄)
+ [0x364B] = 0x5E43, --(幃)
+ [0x364C] = 0x5E40, --(幀)
+ [0x364D] = 0x5E4E, --(幎)
+ [0x364E] = 0x5E57, --(幗)
+ [0x364F] = 0x5E54, --(幔)
+ [0x3650] = 0x5E5F, --(幟)
+ [0x3651] = 0x5E62, --(幢)
+ [0x3652] = 0x5E64, --(幤)
+ [0x3653] = 0x5E47, --(幇)
+ [0x3654] = 0x5E75, --(幵)
+ [0x3655] = 0x5E76, --(并)
+ [0x3656] = 0x5E7A, --(幺)
+ [0x3657] = 0x9EBC, --(麼)
+ [0x3658] = 0x5E7F, --(广)
+ [0x3659] = 0x5EA0, --(庠)
+ [0x365A] = 0x5EC1, --(廁)
+ [0x365B] = 0x5EC2, --(廂)
+ [0x365C] = 0x5EC8, --(廈)
+ [0x365D] = 0x5ED0, --(廐)
+ [0x365E] = 0x5ECF, --(廏)
+ [0x3701] = 0x5ED6, --(廖)
+ [0x3702] = 0x5EE3, --(廣)
+ [0x3703] = 0x5EDD, --(廝)
+ [0x3704] = 0x5EDA, --(廚)
+ [0x3705] = 0x5EDB, --(廛)
+ [0x3706] = 0x5EE2, --(廢)
+ [0x3707] = 0x5EE1, --(廡)
+ [0x3708] = 0x5EE8, --(廨)
+ [0x3709] = 0x5EE9, --(廩)
+ [0x370A] = 0x5EEC, --(廬)
+ [0x370B] = 0x5EF1, --(廱)
+ [0x370C] = 0x5EF3, --(廳)
+ [0x370D] = 0x5EF0, --(廰)
+ [0x370E] = 0x5EF4, --(廴)
+ [0x370F] = 0x5EF8, --(廸)
+ [0x3710] = 0x5EFE, --(廾)
+ [0x3711] = 0x5F03, --(弃)
+ [0x3712] = 0x5F09, --(弉)
+ [0x3713] = 0x5F5D, --(彝)
+ [0x3714] = 0x5F5C, --(彜)
+ [0x3715] = 0x5F0B, --(弋)
+ [0x3716] = 0x5F11, --(弑)
+ [0x3717] = 0x5F16, --(弖)
+ [0x3718] = 0x5F29, --(弩)
+ [0x3719] = 0x5F2D, --(弭)
+ [0x371A] = 0x5F38, --(弸)
+ [0x371B] = 0x5F41, --(彁)
+ [0x371C] = 0x5F48, --(彈)
+ [0x371D] = 0x5F4C, --(彌)
+ [0x371E] = 0x5F4E, --(彎)
+ [0x371F] = 0x5F2F, --(弯)
+ [0x3720] = 0x5F51, --(彑)
+ [0x3721] = 0x5F56, --(彖)
+ [0x3722] = 0x5F57, --(彗)
+ [0x3723] = 0x5F59, --(彙)
+ [0x3724] = 0x5F61, --(彡)
+ [0x3725] = 0x5F6D, --(彭)
+ [0x3726] = 0x5F73, --(彳)
+ [0x3727] = 0x5F77, --(彷)
+ [0x3728] = 0x5F83, --(徃)
+ [0x3729] = 0x5F82, --(徂)
+ [0x372A] = 0x5F7F, --(彿)
+ [0x372B] = 0x5F8A, --(徊)
+ [0x372C] = 0x5F88, --(很)
+ [0x372D] = 0x5F91, --(徑)
+ [0x372E] = 0x5F87, --(徇)
+ [0x372F] = 0x5F9E, --(從)
+ [0x3730] = 0x5F99, --(徙)
+ [0x3731] = 0x5F98, --(徘)
+ [0x3732] = 0x5FA0, --(徠)
+ [0x3733] = 0x5FA8, --(徨)
+ [0x3734] = 0x5FAD, --(徭)
+ [0x3735] = 0x5FBC, --(徼)
+ [0x3736] = 0x5FD6, --(忖)
+ [0x3737] = 0x5FFB, --(忻)
+ [0x3738] = 0x5FE4, --(忤)
+ [0x3739] = 0x5FF8, --(忸)
+ [0x373A] = 0x5FF1, --(忱)
+ [0x373B] = 0x5FDD, --(忝)
+ [0x373C] = 0x60B3, --(悳)
+ [0x373D] = 0x5FFF, --(忿)
+ [0x373E] = 0x6021, --(怡)
+ [0x373F] = 0x6060, --(恠)
+ [0x3740] = 0x6019, --(怙)
+ [0x3741] = 0x6010, --(怐)
+ [0x3742] = 0x6029, --(怩)
+ [0x3743] = 0x600E, --(怎)
+ [0x3744] = 0x6031, --(怱)
+ [0x3745] = 0x601B, --(怛)
+ [0x3746] = 0x6015, --(怕)
+ [0x3747] = 0x602B, --(怫)
+ [0x3748] = 0x6026, --(怦)
+ [0x3749] = 0x600F, --(怏)
+ [0x374A] = 0x603A, --(怺)
+ [0x374B] = 0x605A, --(恚)
+ [0x374C] = 0x6041, --(恁)
+ [0x374D] = 0x606A, --(恪)
+ [0x374E] = 0x6077, --(恷)
+ [0x374F] = 0x605F, --(恟)
+ [0x3750] = 0x604A, --(恊)
+ [0x3751] = 0x6046, --(恆)
+ [0x3752] = 0x604D, --(恍)
+ [0x3753] = 0x6063, --(恣)
+ [0x3754] = 0x6043, --(恃)
+ [0x3755] = 0x6064, --(恤)
+ [0x3756] = 0x6042, --(恂)
+ [0x3757] = 0x606C, --(恬)
+ [0x3758] = 0x606B, --(恫)
+ [0x3759] = 0x6059, --(恙)
+ [0x375A] = 0x6081, --(悁)
+ [0x375B] = 0x608D, --(悍)
+ [0x375C] = 0x60E7, --(惧)
+ [0x375D] = 0x6083, --(悃)
+ [0x375E] = 0x609A, --(悚)
+ [0x3801] = 0x6084, --(悄)
+ [0x3802] = 0x609B, --(悛)
+ [0x3803] = 0x6096, --(悖)
+ [0x3804] = 0x6097, --(悗)
+ [0x3805] = 0x6092, --(悒)
+ [0x3806] = 0x60A7, --(悧)
+ [0x3807] = 0x608B, --(悋)
+ [0x3808] = 0x60E1, --(惡)
+ [0x3809] = 0x60B8, --(悸)
+ [0x380A] = 0x60E0, --(惠)
+ [0x380B] = 0x60D3, --(惓)
+ [0x380C] = 0x60B4, --(悴)
+ [0x380D] = 0x5FF0, --(忰)
+ [0x380E] = 0x60BD, --(悽)
+ [0x380F] = 0x60C6, --(惆)
+ [0x3810] = 0x60B5, --(悵)
+ [0x3811] = 0x60D8, --(惘)
+ [0x3812] = 0x614D, --(慍)
+ [0x3813] = 0x6115, --(愕)
+ [0x3814] = 0x6106, --(愆)
+ [0x3815] = 0x60F6, --(惶)
+ [0x3816] = 0x60F7, --(惷)
+ [0x3817] = 0x6100, --(愀)
+ [0x3818] = 0x60F4, --(惴)
+ [0x3819] = 0x60FA, --(惺)
+ [0x381A] = 0x6103, --(愃)
+ [0x381B] = 0x6121, --(愡)
+ [0x381C] = 0x60FB, --(惻)
+ [0x381D] = 0x60F1, --(惱)
+ [0x381E] = 0x610D, --(愍)
+ [0x381F] = 0x610E, --(愎)
+ [0x3820] = 0x6147, --(慇)
+ [0x3821] = 0x613E, --(愾)
+ [0x3822] = 0x6128, --(愨)
+ [0x3823] = 0x6127, --(愧)
+ [0x3824] = 0x614A, --(慊)
+ [0x3825] = 0x613F, --(愿)
+ [0x3826] = 0x613C, --(愼)
+ [0x3827] = 0x612C, --(愬)
+ [0x3828] = 0x6134, --(愴)
+ [0x3829] = 0x613D, --(愽)
+ [0x382A] = 0x6142, --(慂)
+ [0x382B] = 0x6144, --(慄)
+ [0x382C] = 0x6173, --(慳)
+ [0x382D] = 0x6177, --(慷)
+ [0x382E] = 0x6158, --(慘)
+ [0x382F] = 0x6159, --(慙)
+ [0x3830] = 0x615A, --(慚)
+ [0x3831] = 0x616B, --(慫)
+ [0x3832] = 0x6174, --(慴)
+ [0x3833] = 0x616F, --(慯)
+ [0x3834] = 0x6165, --(慥)
+ [0x3835] = 0x6171, --(慱)
+ [0x3836] = 0x615F, --(慟)
+ [0x3837] = 0x615D, --(慝)
+ [0x3838] = 0x6153, --(慓)
+ [0x3839] = 0x6175, --(慵)
+ [0x383A] = 0x6199, --(憙)
+ [0x383B] = 0x6196, --(憖)
+ [0x383C] = 0x6187, --(憇)
+ [0x383D] = 0x61AC, --(憬)
+ [0x383E] = 0x6194, --(憔)
+ [0x383F] = 0x619A, --(憚)
+ [0x3840] = 0x618A, --(憊)
+ [0x3841] = 0x6191, --(憑)
+ [0x3842] = 0x61AB, --(憫)
+ [0x3843] = 0x61AE, --(憮)
+ [0x3844] = 0x61CC, --(懌)
+ [0x3845] = 0x61CA, --(懊)
+ [0x3846] = 0x61C9, --(應)
+ [0x3847] = 0x61F7, --(懷)
+ [0x3848] = 0x61C8, --(懈)
+ [0x3849] = 0x61C3, --(懃)
+ [0x384A] = 0x61C6, --(懆)
+ [0x384B] = 0x61BA, --(憺)
+ [0x384C] = 0x61CB, --(懋)
+ [0x384D] = 0x7F79, --(罹)
+ [0x384E] = 0x61CD, --(懍)
+ [0x384F] = 0x61E6, --(懦)
+ [0x3850] = 0x61E3, --(懣)
+ [0x3851] = 0x61F6, --(懶)
+ [0x3852] = 0x61FA, --(懺)
+ [0x3853] = 0x61F4, --(懴)
+ [0x3854] = 0x61FF, --(懿)
+ [0x3855] = 0x61FD, --(懽)
+ [0x3856] = 0x61FC, --(懼)
+ [0x3857] = 0x61FE, --(懾)
+ [0x3858] = 0x6200, --(戀)
+ [0x3859] = 0x6208, --(戈)
+ [0x385A] = 0x6209, --(戉)
+ [0x385B] = 0x620D, --(戍)
+ [0x385C] = 0x620C, --(戌)
+ [0x385D] = 0x6214, --(戔)
+ [0x385E] = 0x621B, --(戛)
+ [0x3901] = 0x621E, --(戞)
+ [0x3902] = 0x6221, --(戡)
+ [0x3903] = 0x622A, --(截)
+ [0x3904] = 0x622E, --(戮)
+ [0x3905] = 0x6230, --(戰)
+ [0x3906] = 0x6232, --(戲)
+ [0x3907] = 0x6233, --(戳)
+ [0x3908] = 0x6241, --(扁)
+ [0x3909] = 0x624E, --(扎)
+ [0x390A] = 0x625E, --(扞)
+ [0x390B] = 0x6263, --(扣)
+ [0x390C] = 0x625B, --(扛)
+ [0x390D] = 0x6260, --(扠)
+ [0x390E] = 0x6268, --(扨)
+ [0x390F] = 0x627C, --(扼)
+ [0x3910] = 0x6282, --(抂)
+ [0x3911] = 0x6289, --(抉)
+ [0x3912] = 0x627E, --(找)
+ [0x3913] = 0x6292, --(抒)
+ [0x3914] = 0x6293, --(抓)
+ [0x3915] = 0x6296, --(抖)
+ [0x3916] = 0x62D4, --(拔)
+ [0x3917] = 0x6283, --(抃)
+ [0x3918] = 0x6294, --(抔)
+ [0x3919] = 0x62D7, --(拗)
+ [0x391A] = 0x62D1, --(拑)
+ [0x391B] = 0x62BB, --(抻)
+ [0x391C] = 0x62CF, --(拏)
+ [0x391D] = 0x62FF, --(拿)
+ [0x391E] = 0x62C6, --(拆)
+ [0x391F] = 0x64D4, --(擔)
+ [0x3920] = 0x62C8, --(拈)
+ [0x3921] = 0x62DC, --(拜)
+ [0x3922] = 0x62CC, --(拌)
+ [0x3923] = 0x62CA, --(拊)
+ [0x3924] = 0x62C2, --(拂)
+ [0x3925] = 0x62C7, --(拇)
+ [0x3926] = 0x629B, --(抛)
+ [0x3927] = 0x62C9, --(拉)
+ [0x3928] = 0x630C, --(挌)
+ [0x3929] = 0x62EE, --(拮)
+ [0x392A] = 0x62F1, --(拱)
+ [0x392B] = 0x6327, --(挧)
+ [0x392C] = 0x6302, --(挂)
+ [0x392D] = 0x6308, --(挈)
+ [0x392E] = 0x62EF, --(拯)
+ [0x392F] = 0x62F5, --(拵)
+ [0x3930] = 0x6350, --(捐)
+ [0x3931] = 0x633E, --(挾)
+ [0x3932] = 0x634D, --(捍)
+ [0x3933] = 0x641C, --(搜)
+ [0x3934] = 0x634F, --(捏)
+ [0x3935] = 0x6396, --(掖)
+ [0x3936] = 0x638E, --(掎)
+ [0x3937] = 0x6380, --(掀)
+ [0x3938] = 0x63AB, --(掫)
+ [0x3939] = 0x6376, --(捶)
+ [0x393A] = 0x63A3, --(掣)
+ [0x393B] = 0x638F, --(掏)
+ [0x393C] = 0x6389, --(掉)
+ [0x393D] = 0x639F, --(掟)
+ [0x393E] = 0x63B5, --(掵)
+ [0x393F] = 0x636B, --(捫)
+ [0x3940] = 0x6369, --(捩)
+ [0x3941] = 0x63BE, --(掾)
+ [0x3942] = 0x63E9, --(揩)
+ [0x3943] = 0x63C0, --(揀)
+ [0x3944] = 0x63C6, --(揆)
+ [0x3945] = 0x63E3, --(揣)
+ [0x3946] = 0x63C9, --(揉)
+ [0x3947] = 0x63D2, --(插)
+ [0x3948] = 0x63F6, --(揶)
+ [0x3949] = 0x63C4, --(揄)
+ [0x394A] = 0x6416, --(搖)
+ [0x394B] = 0x6434, --(搴)
+ [0x394C] = 0x6406, --(搆)
+ [0x394D] = 0x6413, --(搓)
+ [0x394E] = 0x6426, --(搦)
+ [0x394F] = 0x6436, --(搶)
+ [0x3950] = 0x651D, --(攝)
+ [0x3951] = 0x6417, --(搗)
+ [0x3952] = 0x6428, --(搨)
+ [0x3953] = 0x640F, --(搏)
+ [0x3954] = 0x6467, --(摧)
+ [0x3955] = 0x646F, --(摯)
+ [0x3956] = 0x6476, --(摶)
+ [0x3957] = 0x644E, --(摎)
+ [0x3958] = 0x652A, --(攪)
+ [0x3959] = 0x6495, --(撕)
+ [0x395A] = 0x6493, --(撓)
+ [0x395B] = 0x64A5, --(撥)
+ [0x395C] = 0x64A9, --(撩)
+ [0x395D] = 0x6488, --(撈)
+ [0x395E] = 0x64BC, --(撼)
+ [0x3A01] = 0x64DA, --(據)
+ [0x3A02] = 0x64D2, --(擒)
+ [0x3A03] = 0x64C5, --(擅)
+ [0x3A04] = 0x64C7, --(擇)
+ [0x3A05] = 0x64BB, --(撻)
+ [0x3A06] = 0x64D8, --(擘)
+ [0x3A07] = 0x64C2, --(擂)
+ [0x3A08] = 0x64F1, --(擱)
+ [0x3A09] = 0x64E7, --(擧)
+ [0x3A0A] = 0x8209, --(舉)
+ [0x3A0B] = 0x64E0, --(擠)
+ [0x3A0C] = 0x64E1, --(擡)
+ [0x3A0D] = 0x62AC, --(抬)
+ [0x3A0E] = 0x64E3, --(擣)
+ [0x3A0F] = 0x64EF, --(擯)
+ [0x3A10] = 0x652C, --(攬)
+ [0x3A11] = 0x64F6, --(擶)
+ [0x3A12] = 0x64F4, --(擴)
+ [0x3A13] = 0x64F2, --(擲)
+ [0x3A14] = 0x64FA, --(擺)
+ [0x3A15] = 0x6500, --(攀)
+ [0x3A16] = 0x64FD, --(擽)
+ [0x3A17] = 0x6518, --(攘)
+ [0x3A18] = 0x651C, --(攜)
+ [0x3A19] = 0x6505, --(攅)
+ [0x3A1A] = 0x6524, --(攤)
+ [0x3A1B] = 0x6523, --(攣)
+ [0x3A1C] = 0x652B, --(攫)
+ [0x3A1D] = 0x6534, --(攴)
+ [0x3A1E] = 0x6535, --(攵)
+ [0x3A1F] = 0x6537, --(攷)
+ [0x3A20] = 0x6536, --(收)
+ [0x3A21] = 0x6538, --(攸)
+ [0x3A22] = 0x754B, --(畋)
+ [0x3A23] = 0x6548, --(效)
+ [0x3A24] = 0x6556, --(敖)
+ [0x3A25] = 0x6555, --(敕)
+ [0x3A26] = 0x654D, --(敍)
+ [0x3A27] = 0x6558, --(敘)
+ [0x3A28] = 0x655E, --(敞)
+ [0x3A29] = 0x655D, --(敝)
+ [0x3A2A] = 0x6572, --(敲)
+ [0x3A2B] = 0x6578, --(數)
+ [0x3A2C] = 0x6582, --(斂)
+ [0x3A2D] = 0x6583, --(斃)
+ [0x3A2E] = 0x8B8A, --(變)
+ [0x3A2F] = 0x659B, --(斛)
+ [0x3A30] = 0x659F, --(斟)
+ [0x3A31] = 0x65AB, --(斫)
+ [0x3A32] = 0x65B7, --(斷)
+ [0x3A33] = 0x65C3, --(旃)
+ [0x3A34] = 0x65C6, --(旆)
+ [0x3A35] = 0x65C1, --(旁)
+ [0x3A36] = 0x65C4, --(旄)
+ [0x3A37] = 0x65CC, --(旌)
+ [0x3A38] = 0x65D2, --(旒)
+ [0x3A39] = 0x65DB, --(旛)
+ [0x3A3A] = 0x65D9, --(旙)
+ [0x3A3B] = 0x65E0, --(无)
+ [0x3A3C] = 0x65E1, --(旡)
+ [0x3A3D] = 0x65F1, --(旱)
+ [0x3A3E] = 0x6772, --(杲)
+ [0x3A3F] = 0x660A, --(昊)
+ [0x3A40] = 0x6603, --(昃)
+ [0x3A41] = 0x65FB, --(旻)
+ [0x3A42] = 0x6773, --(杳)
+ [0x3A43] = 0x6635, --(昵)
+ [0x3A44] = 0x6636, --(昶)
+ [0x3A45] = 0x6634, --(昴)
+ [0x3A46] = 0x661C, --(昜)
+ [0x3A47] = 0x664F, --(晏)
+ [0x3A48] = 0x6644, --(晄)
+ [0x3A49] = 0x6649, --(晉)
+ [0x3A4A] = 0x6641, --(晁)
+ [0x3A4B] = 0x665E, --(晞)
+ [0x3A4C] = 0x665D, --(晝)
+ [0x3A4D] = 0x6664, --(晤)
+ [0x3A4E] = 0x6667, --(晧)
+ [0x3A4F] = 0x6668, --(晨)
+ [0x3A50] = 0x665F, --(晟)
+ [0x3A51] = 0x6662, --(晢)
+ [0x3A52] = 0x6670, --(晰)
+ [0x3A53] = 0x6683, --(暃)
+ [0x3A54] = 0x6688, --(暈)
+ [0x3A55] = 0x668E, --(暎)
+ [0x3A56] = 0x6689, --(暉)
+ [0x3A57] = 0x6684, --(暄)
+ [0x3A58] = 0x6698, --(暘)
+ [0x3A59] = 0x669D, --(暝)
+ [0x3A5A] = 0x66C1, --(曁)
+ [0x3A5B] = 0x66B9, --(暹)
+ [0x3A5C] = 0x66C9, --(曉)
+ [0x3A5D] = 0x66BE, --(暾)
+ [0x3A5E] = 0x66BC, --(暼)
+ [0x3B01] = 0x66C4, --(曄)
+ [0x3B02] = 0x66B8, --(暸)
+ [0x3B03] = 0x66D6, --(曖)
+ [0x3B04] = 0x66DA, --(曚)
+ [0x3B05] = 0x66E0, --(曠)
+ [0x3B06] = 0x663F, --(昿)
+ [0x3B07] = 0x66E6, --(曦)
+ [0x3B08] = 0x66E9, --(曩)
+ [0x3B09] = 0x66F0, --(曰)
+ [0x3B0A] = 0x66F5, --(曵)
+ [0x3B0B] = 0x66F7, --(曷)
+ [0x3B0C] = 0x670F, --(朏)
+ [0x3B0D] = 0x6716, --(朖)
+ [0x3B0E] = 0x671E, --(朞)
+ [0x3B0F] = 0x6726, --(朦)
+ [0x3B10] = 0x6727, --(朧)
+ [0x3B11] = 0x9738, --(霸)
+ [0x3B12] = 0x672E, --(朮)
+ [0x3B13] = 0x673F, --(朿)
+ [0x3B14] = 0x6736, --(朶)
+ [0x3B15] = 0x6741, --(杁)
+ [0x3B16] = 0x6738, --(朸)
+ [0x3B17] = 0x6737, --(朷)
+ [0x3B18] = 0x6746, --(杆)
+ [0x3B19] = 0x675E, --(杞)
+ [0x3B1A] = 0x6760, --(杠)
+ [0x3B1B] = 0x6759, --(杙)
+ [0x3B1C] = 0x6763, --(杣)
+ [0x3B1D] = 0x6764, --(杤)
+ [0x3B1E] = 0x6789, --(枉)
+ [0x3B1F] = 0x6770, --(杰)
+ [0x3B20] = 0x67A9, --(枩)
+ [0x3B21] = 0x677C, --(杼)
+ [0x3B22] = 0x676A, --(杪)
+ [0x3B23] = 0x678C, --(枌)
+ [0x3B24] = 0x678B, --(枋)
+ [0x3B25] = 0x67A6, --(枦)
+ [0x3B26] = 0x67A1, --(枡)
+ [0x3B27] = 0x6785, --(枅)
+ [0x3B28] = 0x67B7, --(枷)
+ [0x3B29] = 0x67EF, --(柯)
+ [0x3B2A] = 0x67B4, --(枴)
+ [0x3B2B] = 0x67EC, --(柬)
+ [0x3B2C] = 0x67B3, --(枳)
+ [0x3B2D] = 0x67E9, --(柩)
+ [0x3B2E] = 0x67B8, --(枸)
+ [0x3B2F] = 0x67E4, --(柤)
+ [0x3B30] = 0x67DE, --(柞)
+ [0x3B31] = 0x67DD, --(柝)
+ [0x3B32] = 0x67E2, --(柢)
+ [0x3B33] = 0x67EE, --(柮)
+ [0x3B34] = 0x67B9, --(枹)
+ [0x3B35] = 0x67CE, --(柎)
+ [0x3B36] = 0x67C6, --(柆)
+ [0x3B37] = 0x67E7, --(柧)
+ [0x3B38] = 0x6A9C, --(檜)
+ [0x3B39] = 0x681E, --(栞)
+ [0x3B3A] = 0x6846, --(框)
+ [0x3B3B] = 0x6829, --(栩)
+ [0x3B3C] = 0x6840, --(桀)
+ [0x3B3D] = 0x684D, --(桍)
+ [0x3B3E] = 0x6832, --(栲)
+ [0x3B3F] = 0x684E, --(桎)
+ [0x3B40] = 0x68B3, --(梳)
+ [0x3B41] = 0x682B, --(栫)
+ [0x3B42] = 0x6859, --(桙)
+ [0x3B43] = 0x6863, --(档)
+ [0x3B44] = 0x6877, --(桷)
+ [0x3B45] = 0x687F, --(桿)
+ [0x3B46] = 0x689F, --(梟)
+ [0x3B47] = 0x688F, --(梏)
+ [0x3B48] = 0x68AD, --(梭)
+ [0x3B49] = 0x6894, --(梔)
+ [0x3B4A] = 0x689D, --(條)
+ [0x3B4B] = 0x689B, --(梛)
+ [0x3B4C] = 0x6883, --(梃)
+ [0x3B4D] = 0x6AAE, --(檮)
+ [0x3B4E] = 0x68B9, --(梹)
+ [0x3B4F] = 0x6874, --(桴)
+ [0x3B50] = 0x68B5, --(梵)
+ [0x3B51] = 0x68A0, --(梠)
+ [0x3B52] = 0x68BA, --(梺)
+ [0x3B53] = 0x690F, --(椏)
+ [0x3B54] = 0x688D, --(梍)
+ [0x3B55] = 0x687E, --(桾)
+ [0x3B56] = 0x6901, --(椁)
+ [0x3B57] = 0x68CA, --(棊)
+ [0x3B58] = 0x6908, --(椈)
+ [0x3B59] = 0x68D8, --(棘)
+ [0x3B5A] = 0x6922, --(椢)
+ [0x3B5B] = 0x6926, --(椦)
+ [0x3B5C] = 0x68E1, --(棡)
+ [0x3B5D] = 0x690C, --(椌)
+ [0x3B5E] = 0x68CD, --(棍)
+ [0x3C01] = 0x68D4, --(棔)
+ [0x3C02] = 0x68E7, --(棧)
+ [0x3C03] = 0x68D5, --(棕)
+ [0x3C04] = 0x6936, --(椶)
+ [0x3C05] = 0x6912, --(椒)
+ [0x3C06] = 0x6904, --(椄)
+ [0x3C07] = 0x68D7, --(棗)
+ [0x3C08] = 0x68E3, --(棣)
+ [0x3C09] = 0x6925, --(椥)
+ [0x3C0A] = 0x68F9, --(棹)
+ [0x3C0B] = 0x68E0, --(棠)
+ [0x3C0C] = 0x68EF, --(棯)
+ [0x3C0D] = 0x6928, --(椨)
+ [0x3C0E] = 0x692A, --(椪)
+ [0x3C0F] = 0x691A, --(椚)
+ [0x3C10] = 0x6923, --(椣)
+ [0x3C11] = 0x6921, --(椡)
+ [0x3C12] = 0x68C6, --(棆)
+ [0x3C13] = 0x6979, --(楹)
+ [0x3C14] = 0x6977, --(楷)
+ [0x3C15] = 0x695C, --(楜)
+ [0x3C16] = 0x6978, --(楸)
+ [0x3C17] = 0x696B, --(楫)
+ [0x3C18] = 0x6954, --(楔)
+ [0x3C19] = 0x697E, --(楾)
+ [0x3C1A] = 0x696E, --(楮)
+ [0x3C1B] = 0x6939, --(椹)
+ [0x3C1C] = 0x6974, --(楴)
+ [0x3C1D] = 0x693D, --(椽)
+ [0x3C1E] = 0x6959, --(楙)
+ [0x3C1F] = 0x6930, --(椰)
+ [0x3C20] = 0x6961, --(楡)
+ [0x3C21] = 0x695E, --(楞)
+ [0x3C22] = 0x695D, --(楝)
+ [0x3C23] = 0x6981, --(榁)
+ [0x3C24] = 0x696A, --(楪)
+ [0x3C25] = 0x69B2, --(榲)
+ [0x3C26] = 0x69AE, --(榮)
+ [0x3C27] = 0x69D0, --(槐)
+ [0x3C28] = 0x69BF, --(榿)
+ [0x3C29] = 0x69C1, --(槁)
+ [0x3C2A] = 0x69D3, --(槓)
+ [0x3C2B] = 0x69BE, --(榾)
+ [0x3C2C] = 0x69CE, --(槎)
+ [0x3C2D] = 0x5BE8, --(寨)
+ [0x3C2E] = 0x69CA, --(槊)
+ [0x3C2F] = 0x69DD, --(槝)
+ [0x3C30] = 0x69BB, --(榻)
+ [0x3C31] = 0x69C3, --(槃)
+ [0x3C32] = 0x69A7, --(榧)
+ [0x3C33] = 0x6A2E, --(樮)
+ [0x3C34] = 0x6991, --(榑)
+ [0x3C35] = 0x69A0, --(榠)
+ [0x3C36] = 0x699C, --(榜)
+ [0x3C37] = 0x6995, --(榕)
+ [0x3C38] = 0x69B4, --(榴)
+ [0x3C39] = 0x69DE, --(槞)
+ [0x3C3A] = 0x69E8, --(槨)
+ [0x3C3B] = 0x6A02, --(樂)
+ [0x3C3C] = 0x6A1B, --(樛)
+ [0x3C3D] = 0x69FF, --(槿)
+ [0x3C3E] = 0x6B0A, --(權)
+ [0x3C3F] = 0x69F9, --(槹)
+ [0x3C40] = 0x69F2, --(槲)
+ [0x3C41] = 0x69E7, --(槧)
+ [0x3C42] = 0x6A05, --(樅)
+ [0x3C43] = 0x69B1, --(榱)
+ [0x3C44] = 0x6A1E, --(樞)
+ [0x3C45] = 0x69ED, --(槭)
+ [0x3C46] = 0x6A14, --(樔)
+ [0x3C47] = 0x69EB, --(槫)
+ [0x3C48] = 0x6A0A, --(樊)
+ [0x3C49] = 0x6A12, --(樒)
+ [0x3C4A] = 0x6AC1, --(櫁)
+ [0x3C4B] = 0x6A23, --(樣)
+ [0x3C4C] = 0x6A13, --(樓)
+ [0x3C4D] = 0x6A44, --(橄)
+ [0x3C4E] = 0x6A0C, --(樌)
+ [0x3C4F] = 0x6A72, --(橲)
+ [0x3C50] = 0x6A36, --(樶)
+ [0x3C51] = 0x6A78, --(橸)
+ [0x3C52] = 0x6A47, --(橇)
+ [0x3C53] = 0x6A62, --(橢)
+ [0x3C54] = 0x6A59, --(橙)
+ [0x3C55] = 0x6A66, --(橦)
+ [0x3C56] = 0x6A48, --(橈)
+ [0x3C57] = 0x6A38, --(樸)
+ [0x3C58] = 0x6A22, --(樢)
+ [0x3C59] = 0x6A90, --(檐)
+ [0x3C5A] = 0x6A8D, --(檍)
+ [0x3C5B] = 0x6AA0, --(檠)
+ [0x3C5C] = 0x6A84, --(檄)
+ [0x3C5D] = 0x6AA2, --(檢)
+ [0x3C5E] = 0x6AA3, --(檣)
+ [0x3D01] = 0x6A97, --(檗)
+ [0x3D02] = 0x8617, --(蘗)
+ [0x3D03] = 0x6ABB, --(檻)
+ [0x3D04] = 0x6AC3, --(櫃)
+ [0x3D05] = 0x6AC2, --(櫂)
+ [0x3D06] = 0x6AB8, --(檸)
+ [0x3D07] = 0x6AB3, --(檳)
+ [0x3D08] = 0x6AAC, --(檬)
+ [0x3D09] = 0x6ADE, --(櫞)
+ [0x3D0A] = 0x6AD1, --(櫑)
+ [0x3D0B] = 0x6ADF, --(櫟)
+ [0x3D0C] = 0x6AAA, --(檪)
+ [0x3D0D] = 0x6ADA, --(櫚)
+ [0x3D0E] = 0x6AEA, --(櫪)
+ [0x3D0F] = 0x6AFB, --(櫻)
+ [0x3D10] = 0x6B05, --(欅)
+ [0x3D11] = 0x8616, --(蘖)
+ [0x3D12] = 0x6AFA, --(櫺)
+ [0x3D13] = 0x6B12, --(欒)
+ [0x3D14] = 0x6B16, --(欖)
+ [0x3D15] = 0x9B31, --(鬱)
+ [0x3D16] = 0x6B1F, --(欟)
+ [0x3D17] = 0x6B38, --(欸)
+ [0x3D18] = 0x6B37, --(欷)
+ [0x3D19] = 0x76DC, --(盜)
+ [0x3D1A] = 0x6B39, --(欹)
+ [0x3D1B] = 0x98EE, --(飮)
+ [0x3D1C] = 0x6B47, --(歇)
+ [0x3D1D] = 0x6B43, --(歃)
+ [0x3D1E] = 0x6B49, --(歉)
+ [0x3D1F] = 0x6B50, --(歐)
+ [0x3D20] = 0x6B59, --(歙)
+ [0x3D21] = 0x6B54, --(歔)
+ [0x3D22] = 0x6B5B, --(歛)
+ [0x3D23] = 0x6B5F, --(歟)
+ [0x3D24] = 0x6B61, --(歡)
+ [0x3D25] = 0x6B78, --(歸)
+ [0x3D26] = 0x6B79, --(歹)
+ [0x3D27] = 0x6B7F, --(歿)
+ [0x3D28] = 0x6B80, --(殀)
+ [0x3D29] = 0x6B84, --(殄)
+ [0x3D2A] = 0x6B83, --(殃)
+ [0x3D2B] = 0x6B8D, --(殍)
+ [0x3D2C] = 0x6B98, --(殘)
+ [0x3D2D] = 0x6B95, --(殕)
+ [0x3D2E] = 0x6B9E, --(殞)
+ [0x3D2F] = 0x6BA4, --(殤)
+ [0x3D30] = 0x6BAA, --(殪)
+ [0x3D31] = 0x6BAB, --(殫)
+ [0x3D32] = 0x6BAF, --(殯)
+ [0x3D33] = 0x6BB2, --(殲)
+ [0x3D34] = 0x6BB1, --(殱)
+ [0x3D35] = 0x6BB3, --(殳)
+ [0x3D36] = 0x6BB7, --(殷)
+ [0x3D37] = 0x6BBC, --(殼)
+ [0x3D38] = 0x6BC6, --(毆)
+ [0x3D39] = 0x6BCB, --(毋)
+ [0x3D3A] = 0x6BD3, --(毓)
+ [0x3D3B] = 0x6BDF, --(毟)
+ [0x3D3C] = 0x6BEC, --(毬)
+ [0x3D3D] = 0x6BEB, --(毫)
+ [0x3D3E] = 0x6BF3, --(毳)
+ [0x3D3F] = 0x6BEF, --(毯)
+ [0x3D40] = 0x9EBE, --(麾)
+ [0x3D41] = 0x6C08, --(氈)
+ [0x3D42] = 0x6C13, --(氓)
+ [0x3D43] = 0x6C14, --(气)
+ [0x3D44] = 0x6C1B, --(氛)
+ [0x3D45] = 0x6C24, --(氤)
+ [0x3D46] = 0x6C23, --(氣)
+ [0x3D47] = 0x6C5E, --(汞)
+ [0x3D48] = 0x6C55, --(汕)
+ [0x3D49] = 0x6C62, --(汢)
+ [0x3D4A] = 0x6C6A, --(汪)
+ [0x3D4B] = 0x6C82, --(沂)
+ [0x3D4C] = 0x6C8D, --(沍)
+ [0x3D4D] = 0x6C9A, --(沚)
+ [0x3D4E] = 0x6C81, --(沁)
+ [0x3D4F] = 0x6C9B, --(沛)
+ [0x3D50] = 0x6C7E, --(汾)
+ [0x3D51] = 0x6C68, --(汨)
+ [0x3D52] = 0x6C73, --(汳)
+ [0x3D53] = 0x6C92, --(沒)
+ [0x3D54] = 0x6C90, --(沐)
+ [0x3D55] = 0x6CC4, --(泄)
+ [0x3D56] = 0x6CF1, --(泱)
+ [0x3D57] = 0x6CD3, --(泓)
+ [0x3D58] = 0x6CBD, --(沽)
+ [0x3D59] = 0x6CD7, --(泗)
+ [0x3D5A] = 0x6CC5, --(泅)
+ [0x3D5B] = 0x6CDD, --(泝)
+ [0x3D5C] = 0x6CAE, --(沮)
+ [0x3D5D] = 0x6CB1, --(沱)
+ [0x3D5E] = 0x6CBE, --(沾)
+ [0x3E01] = 0x6CBA, --(沺)
+ [0x3E02] = 0x6CDB, --(泛)
+ [0x3E03] = 0x6CEF, --(泯)
+ [0x3E04] = 0x6CD9, --(泙)
+ [0x3E05] = 0x6CEA, --(泪)
+ [0x3E06] = 0x6D1F, --(洟)
+ [0x3E07] = 0x884D, --(衍)
+ [0x3E08] = 0x6D36, --(洶)
+ [0x3E09] = 0x6D2B, --(洫)
+ [0x3E0A] = 0x6D3D, --(洽)
+ [0x3E0B] = 0x6D38, --(洸)
+ [0x3E0C] = 0x6D19, --(洙)
+ [0x3E0D] = 0x6D35, --(洵)
+ [0x3E0E] = 0x6D33, --(洳)
+ [0x3E0F] = 0x6D12, --(洒)
+ [0x3E10] = 0x6D0C, --(洌)
+ [0x3E11] = 0x6D63, --(浣)
+ [0x3E12] = 0x6D93, --(涓)
+ [0x3E13] = 0x6D64, --(浤)
+ [0x3E14] = 0x6D5A, --(浚)
+ [0x3E15] = 0x6D79, --(浹)
+ [0x3E16] = 0x6D59, --(浙)
+ [0x3E17] = 0x6D8E, --(涎)
+ [0x3E18] = 0x6D95, --(涕)
+ [0x3E19] = 0x6FE4, --(濤)
+ [0x3E1A] = 0x6D85, --(涅)
+ [0x3E1B] = 0x6DF9, --(淹)
+ [0x3E1C] = 0x6E15, --(渕)
+ [0x3E1D] = 0x6E0A, --(渊)
+ [0x3E1E] = 0x6DB5, --(涵)
+ [0x3E1F] = 0x6DC7, --(淇)
+ [0x3E20] = 0x6DE6, --(淦)
+ [0x3E21] = 0x6DB8, --(涸)
+ [0x3E22] = 0x6DC6, --(淆)
+ [0x3E23] = 0x6DEC, --(淬)
+ [0x3E24] = 0x6DDE, --(淞)
+ [0x3E25] = 0x6DCC, --(淌)
+ [0x3E26] = 0x6DE8, --(淨)
+ [0x3E27] = 0x6DD2, --(淒)
+ [0x3E28] = 0x6DC5, --(淅)
+ [0x3E29] = 0x6DFA, --(淺)
+ [0x3E2A] = 0x6DD9, --(淙)
+ [0x3E2B] = 0x6DE4, --(淤)
+ [0x3E2C] = 0x6DD5, --(淕)
+ [0x3E2D] = 0x6DEA, --(淪)
+ [0x3E2E] = 0x6DEE, --(淮)
+ [0x3E2F] = 0x6E2D, --(渭)
+ [0x3E30] = 0x6E6E, --(湮)
+ [0x3E31] = 0x6E2E, --(渮)
+ [0x3E32] = 0x6E19, --(渙)
+ [0x3E33] = 0x6E72, --(湲)
+ [0x3E34] = 0x6E5F, --(湟)
+ [0x3E35] = 0x6E3E, --(渾)
+ [0x3E36] = 0x6E23, --(渣)
+ [0x3E37] = 0x6E6B, --(湫)
+ [0x3E38] = 0x6E2B, --(渫)
+ [0x3E39] = 0x6E76, --(湶)
+ [0x3E3A] = 0x6E4D, --(湍)
+ [0x3E3B] = 0x6E1F, --(渟)
+ [0x3E3C] = 0x6E43, --(湃)
+ [0x3E3D] = 0x6E3A, --(渺)
+ [0x3E3E] = 0x6E4E, --(湎)
+ [0x3E3F] = 0x6E24, --(渤)
+ [0x3E40] = 0x6EFF, --(滿)
+ [0x3E41] = 0x6E1D, --(渝)
+ [0x3E42] = 0x6E38, --(游)
+ [0x3E43] = 0x6E82, --(溂)
+ [0x3E44] = 0x6EAA, --(溪)
+ [0x3E45] = 0x6E98, --(溘)
+ [0x3E46] = 0x6EC9, --(滉)
+ [0x3E47] = 0x6EB7, --(溷)
+ [0x3E48] = 0x6ED3, --(滓)
+ [0x3E49] = 0x6EBD, --(溽)
+ [0x3E4A] = 0x6EAF, --(溯)
+ [0x3E4B] = 0x6EC4, --(滄)
+ [0x3E4C] = 0x6EB2, --(溲)
+ [0x3E4D] = 0x6ED4, --(滔)
+ [0x3E4E] = 0x6ED5, --(滕)
+ [0x3E4F] = 0x6E8F, --(溏)
+ [0x3E50] = 0x6EA5, --(溥)
+ [0x3E51] = 0x6EC2, --(滂)
+ [0x3E52] = 0x6E9F, --(溟)
+ [0x3E53] = 0x6F41, --(潁)
+ [0x3E54] = 0x6F11, --(漑)
+ [0x3E55] = 0x704C, --(灌)
+ [0x3E56] = 0x6EEC, --(滬)
+ [0x3E57] = 0x6EF8, --(滸)
+ [0x3E58] = 0x6EFE, --(滾)
+ [0x3E59] = 0x6F3F, --(漿)
+ [0x3E5A] = 0x6EF2, --(滲)
+ [0x3E5B] = 0x6F31, --(漱)
+ [0x3E5C] = 0x6EEF, --(滯)
+ [0x3E5D] = 0x6F32, --(漲)
+ [0x3E5E] = 0x6ECC, --(滌)
+ [0x3F01] = 0x6F3E, --(漾)
+ [0x3F02] = 0x6F13, --(漓)
+ [0x3F03] = 0x6EF7, --(滷)
+ [0x3F04] = 0x6F86, --(澆)
+ [0x3F05] = 0x6F7A, --(潺)
+ [0x3F06] = 0x6F78, --(潸)
+ [0x3F07] = 0x6F81, --(澁)
+ [0x3F08] = 0x6F80, --(澀)
+ [0x3F09] = 0x6F6F, --(潯)
+ [0x3F0A] = 0x6F5B, --(潛)
+ [0x3F0B] = 0x6FF3, --(濳)
+ [0x3F0C] = 0x6F6D, --(潭)
+ [0x3F0D] = 0x6F82, --(澂)
+ [0x3F0E] = 0x6F7C, --(潼)
+ [0x3F0F] = 0x6F58, --(潘)
+ [0x3F10] = 0x6F8E, --(澎)
+ [0x3F11] = 0x6F91, --(澑)
+ [0x3F12] = 0x6FC2, --(濂)
+ [0x3F13] = 0x6F66, --(潦)
+ [0x3F14] = 0x6FB3, --(澳)
+ [0x3F15] = 0x6FA3, --(澣)
+ [0x3F16] = 0x6FA1, --(澡)
+ [0x3F17] = 0x6FA4, --(澤)
+ [0x3F18] = 0x6FB9, --(澹)
+ [0x3F19] = 0x6FC6, --(濆)
+ [0x3F1A] = 0x6FAA, --(澪)
+ [0x3F1B] = 0x6FDF, --(濟)
+ [0x3F1C] = 0x6FD5, --(濕)
+ [0x3F1D] = 0x6FEC, --(濬)
+ [0x3F1E] = 0x6FD4, --(濔)
+ [0x3F1F] = 0x6FD8, --(濘)
+ [0x3F20] = 0x6FF1, --(濱)
+ [0x3F21] = 0x6FEE, --(濮)
+ [0x3F22] = 0x6FDB, --(濛)
+ [0x3F23] = 0x7009, --(瀉)
+ [0x3F24] = 0x700B, --(瀋)
+ [0x3F25] = 0x6FFA, --(濺)
+ [0x3F26] = 0x7011, --(瀑)
+ [0x3F27] = 0x7001, --(瀁)
+ [0x3F28] = 0x700F, --(瀏)
+ [0x3F29] = 0x6FFE, --(濾)
+ [0x3F2A] = 0x701B, --(瀛)
+ [0x3F2B] = 0x701A, --(瀚)
+ [0x3F2C] = 0x6F74, --(潴)
+ [0x3F2D] = 0x701D, --(瀝)
+ [0x3F2E] = 0x7018, --(瀘)
+ [0x3F2F] = 0x701F, --(瀟)
+ [0x3F30] = 0x7030, --(瀰)
+ [0x3F31] = 0x703E, --(瀾)
+ [0x3F32] = 0x7032, --(瀲)
+ [0x3F33] = 0x7051, --(灑)
+ [0x3F34] = 0x7063, --(灣)
+ [0x3F35] = 0x7099, --(炙)
+ [0x3F36] = 0x7092, --(炒)
+ [0x3F37] = 0x70AF, --(炯)
+ [0x3F38] = 0x70F1, --(烱)
+ [0x3F39] = 0x70AC, --(炬)
+ [0x3F3A] = 0x70B8, --(炸)
+ [0x3F3B] = 0x70B3, --(炳)
+ [0x3F3C] = 0x70AE, --(炮)
+ [0x3F3D] = 0x70DF, --(烟)
+ [0x3F3E] = 0x70CB, --(烋)
+ [0x3F3F] = 0x70DD, --(烝)
+ [0x3F40] = 0x70D9, --(烙)
+ [0x3F41] = 0x7109, --(焉)
+ [0x3F42] = 0x70FD, --(烽)
+ [0x3F43] = 0x711C, --(焜)
+ [0x3F44] = 0x7119, --(焙)
+ [0x3F45] = 0x7165, --(煥)
+ [0x3F46] = 0x7155, --(煕)
+ [0x3F47] = 0x7188, --(熈)
+ [0x3F48] = 0x7166, --(煦)
+ [0x3F49] = 0x7162, --(煢)
+ [0x3F4A] = 0x714C, --(煌)
+ [0x3F4B] = 0x7156, --(煖)
+ [0x3F4C] = 0x716C, --(煬)
+ [0x3F4D] = 0x718F, --(熏)
+ [0x3F4E] = 0x71FB, --(燻)
+ [0x3F4F] = 0x7184, --(熄)
+ [0x3F50] = 0x7195, --(熕)
+ [0x3F51] = 0x71A8, --(熨)
+ [0x3F52] = 0x71AC, --(熬)
+ [0x3F53] = 0x71D7, --(燗)
+ [0x3F54] = 0x71B9, --(熹)
+ [0x3F55] = 0x71BE, --(熾)
+ [0x3F56] = 0x71D2, --(燒)
+ [0x3F57] = 0x71C9, --(燉)
+ [0x3F58] = 0x71D4, --(燔)
+ [0x3F59] = 0x71CE, --(燎)
+ [0x3F5A] = 0x71E0, --(燠)
+ [0x3F5B] = 0x71EC, --(燬)
+ [0x3F5C] = 0x71E7, --(燧)
+ [0x3F5D] = 0x71F5, --(燵)
+ [0x3F5E] = 0x71FC, --(燼)
+ [0x4001] = 0x71F9, --(燹)
+ [0x4002] = 0x71FF, --(燿)
+ [0x4003] = 0x720D, --(爍)
+ [0x4004] = 0x7210, --(爐)
+ [0x4005] = 0x721B, --(爛)
+ [0x4006] = 0x7228, --(爨)
+ [0x4007] = 0x722D, --(爭)
+ [0x4008] = 0x722C, --(爬)
+ [0x4009] = 0x7230, --(爰)
+ [0x400A] = 0x7232, --(爲)
+ [0x400B] = 0x723B, --(爻)
+ [0x400C] = 0x723C, --(爼)
+ [0x400D] = 0x723F, --(爿)
+ [0x400E] = 0x7240, --(牀)
+ [0x400F] = 0x7246, --(牆)
+ [0x4010] = 0x724B, --(牋)
+ [0x4011] = 0x7258, --(牘)
+ [0x4012] = 0x7274, --(牴)
+ [0x4013] = 0x727E, --(牾)
+ [0x4014] = 0x7282, --(犂)
+ [0x4015] = 0x7281, --(犁)
+ [0x4016] = 0x7287, --(犇)
+ [0x4017] = 0x7292, --(犒)
+ [0x4018] = 0x7296, --(犖)
+ [0x4019] = 0x72A2, --(犢)
+ [0x401A] = 0x72A7, --(犧)
+ [0x401B] = 0x72B9, --(犹)
+ [0x401C] = 0x72B2, --(犲)
+ [0x401D] = 0x72C3, --(狃)
+ [0x401E] = 0x72C6, --(狆)
+ [0x401F] = 0x72C4, --(狄)
+ [0x4020] = 0x72CE, --(狎)
+ [0x4021] = 0x72D2, --(狒)
+ [0x4022] = 0x72E2, --(狢)
+ [0x4023] = 0x72E0, --(狠)
+ [0x4024] = 0x72E1, --(狡)
+ [0x4025] = 0x72F9, --(狹)
+ [0x4026] = 0x72F7, --(狷)
+ [0x4027] = 0x500F, --(倏)
+ [0x4028] = 0x7317, --(猗)
+ [0x4029] = 0x730A, --(猊)
+ [0x402A] = 0x731C, --(猜)
+ [0x402B] = 0x7316, --(猖)
+ [0x402C] = 0x731D, --(猝)
+ [0x402D] = 0x7334, --(猴)
+ [0x402E] = 0x732F, --(猯)
+ [0x402F] = 0x7329, --(猩)
+ [0x4030] = 0x7325, --(猥)
+ [0x4031] = 0x733E, --(猾)
+ [0x4032] = 0x734E, --(獎)
+ [0x4033] = 0x734F, --(獏)
+ [0x4034] = 0x9ED8, --(默)
+ [0x4035] = 0x7357, --(獗)
+ [0x4036] = 0x736A, --(獪)
+ [0x4037] = 0x7368, --(獨)
+ [0x4038] = 0x7370, --(獰)
+ [0x4039] = 0x7378, --(獸)
+ [0x403A] = 0x7375, --(獵)
+ [0x403B] = 0x737B, --(獻)
+ [0x403C] = 0x737A, --(獺)
+ [0x403D] = 0x73C8, --(珈)
+ [0x403E] = 0x73B3, --(玳)
+ [0x403F] = 0x73CE, --(珎)
+ [0x4040] = 0x73BB, --(玻)
+ [0x4041] = 0x73C0, --(珀)
+ [0x4042] = 0x73E5, --(珥)
+ [0x4043] = 0x73EE, --(珮)
+ [0x4044] = 0x73DE, --(珞)
+ [0x4045] = 0x74A2, --(璢)
+ [0x4046] = 0x7405, --(琅)
+ [0x4047] = 0x746F, --(瑯)
+ [0x4048] = 0x7425, --(琥)
+ [0x4049] = 0x73F8, --(珸)
+ [0x404A] = 0x7432, --(琲)
+ [0x404B] = 0x743A, --(琺)
+ [0x404C] = 0x7455, --(瑕)
+ [0x404D] = 0x743F, --(琿)
+ [0x404E] = 0x745F, --(瑟)
+ [0x404F] = 0x7459, --(瑙)
+ [0x4050] = 0x7441, --(瑁)
+ [0x4051] = 0x745C, --(瑜)
+ [0x4052] = 0x7469, --(瑩)
+ [0x4053] = 0x7470, --(瑰)
+ [0x4054] = 0x7463, --(瑣)
+ [0x4055] = 0x746A, --(瑪)
+ [0x4056] = 0x7476, --(瑶)
+ [0x4057] = 0x747E, --(瑾)
+ [0x4058] = 0x748B, --(璋)
+ [0x4059] = 0x749E, --(璞)
+ [0x405A] = 0x74A7, --(璧)
+ [0x405B] = 0x74CA, --(瓊)
+ [0x405C] = 0x74CF, --(瓏)
+ [0x405D] = 0x74D4, --(瓔)
+ [0x405E] = 0x73F1, --(珱)
+ [0x4101] = 0x74E0, --(瓠)
+ [0x4102] = 0x74E3, --(瓣)
+ [0x4103] = 0x74E7, --(瓧)
+ [0x4104] = 0x74E9, --(瓩)
+ [0x4105] = 0x74EE, --(瓮)
+ [0x4106] = 0x74F2, --(瓲)
+ [0x4107] = 0x74F0, --(瓰)
+ [0x4108] = 0x74F1, --(瓱)
+ [0x4109] = 0x74F8, --(瓸)
+ [0x410A] = 0x74F7, --(瓷)
+ [0x410B] = 0x7504, --(甄)
+ [0x410C] = 0x7503, --(甃)
+ [0x410D] = 0x7505, --(甅)
+ [0x410E] = 0x750C, --(甌)
+ [0x410F] = 0x750E, --(甎)
+ [0x4110] = 0x750D, --(甍)
+ [0x4111] = 0x7515, --(甕)
+ [0x4112] = 0x7513, --(甓)
+ [0x4113] = 0x751E, --(甞)
+ [0x4114] = 0x7526, --(甦)
+ [0x4115] = 0x752C, --(甬)
+ [0x4116] = 0x753C, --(甼)
+ [0x4117] = 0x7544, --(畄)
+ [0x4118] = 0x754D, --(畍)
+ [0x4119] = 0x754A, --(畊)
+ [0x411A] = 0x7549, --(畉)
+ [0x411B] = 0x755B, --(畛)
+ [0x411C] = 0x7546, --(畆)
+ [0x411D] = 0x755A, --(畚)
+ [0x411E] = 0x7569, --(畩)
+ [0x411F] = 0x7564, --(畤)
+ [0x4120] = 0x7567, --(畧)
+ [0x4121] = 0x756B, --(畫)
+ [0x4122] = 0x756D, --(畭)
+ [0x4123] = 0x7578, --(畸)
+ [0x4124] = 0x7576, --(當)
+ [0x4125] = 0x7586, --(疆)
+ [0x4126] = 0x7587, --(疇)
+ [0x4127] = 0x7574, --(畴)
+ [0x4128] = 0x758A, --(疊)
+ [0x4129] = 0x7589, --(疉)
+ [0x412A] = 0x7582, --(疂)
+ [0x412B] = 0x7594, --(疔)
+ [0x412C] = 0x759A, --(疚)
+ [0x412D] = 0x759D, --(疝)
+ [0x412E] = 0x75A5, --(疥)
+ [0x412F] = 0x75A3, --(疣)
+ [0x4130] = 0x75C2, --(痂)
+ [0x4131] = 0x75B3, --(疳)
+ [0x4132] = 0x75C3, --(痃)
+ [0x4133] = 0x75B5, --(疵)
+ [0x4134] = 0x75BD, --(疽)
+ [0x4135] = 0x75B8, --(疸)
+ [0x4136] = 0x75BC, --(疼)
+ [0x4137] = 0x75B1, --(疱)
+ [0x4138] = 0x75CD, --(痍)
+ [0x4139] = 0x75CA, --(痊)
+ [0x413A] = 0x75D2, --(痒)
+ [0x413B] = 0x75D9, --(痙)
+ [0x413C] = 0x75E3, --(痣)
+ [0x413D] = 0x75DE, --(痞)
+ [0x413E] = 0x75FE, --(痾)
+ [0x413F] = 0x75FF, --(痿)
+ [0x4140] = 0x75FC, --(痼)
+ [0x4141] = 0x7601, --(瘁)
+ [0x4142] = 0x75F0, --(痰)
+ [0x4143] = 0x75FA, --(痺)
+ [0x4144] = 0x75F2, --(痲)
+ [0x4145] = 0x75F3, --(痳)
+ [0x4146] = 0x760B, --(瘋)
+ [0x4147] = 0x760D, --(瘍)
+ [0x4148] = 0x7609, --(瘉)
+ [0x4149] = 0x761F, --(瘟)
+ [0x414A] = 0x7627, --(瘧)
+ [0x414B] = 0x7620, --(瘠)
+ [0x414C] = 0x7621, --(瘡)
+ [0x414D] = 0x7622, --(瘢)
+ [0x414E] = 0x7624, --(瘤)
+ [0x414F] = 0x7634, --(瘴)
+ [0x4150] = 0x7630, --(瘰)
+ [0x4151] = 0x763B, --(瘻)
+ [0x4152] = 0x7647, --(癇)
+ [0x4153] = 0x7648, --(癈)
+ [0x4154] = 0x7646, --(癆)
+ [0x4155] = 0x765C, --(癜)
+ [0x4156] = 0x7658, --(癘)
+ [0x4157] = 0x7661, --(癡)
+ [0x4158] = 0x7662, --(癢)
+ [0x4159] = 0x7668, --(癨)
+ [0x415A] = 0x7669, --(癩)
+ [0x415B] = 0x766A, --(癪)
+ [0x415C] = 0x7667, --(癧)
+ [0x415D] = 0x766C, --(癬)
+ [0x415E] = 0x7670, --(癰)
+ [0x4201] = 0x7672, --(癲)
+ [0x4202] = 0x7676, --(癶)
+ [0x4203] = 0x7678, --(癸)
+ [0x4204] = 0x767C, --(發)
+ [0x4205] = 0x7680, --(皀)
+ [0x4206] = 0x7683, --(皃)
+ [0x4207] = 0x7688, --(皈)
+ [0x4208] = 0x768B, --(皋)
+ [0x4209] = 0x768E, --(皎)
+ [0x420A] = 0x7696, --(皖)
+ [0x420B] = 0x7693, --(皓)
+ [0x420C] = 0x7699, --(皙)
+ [0x420D] = 0x769A, --(皚)
+ [0x420E] = 0x76B0, --(皰)
+ [0x420F] = 0x76B4, --(皴)
+ [0x4210] = 0x76B8, --(皸)
+ [0x4211] = 0x76B9, --(皹)
+ [0x4212] = 0x76BA, --(皺)
+ [0x4213] = 0x76C2, --(盂)
+ [0x4214] = 0x76CD, --(盍)
+ [0x4215] = 0x76D6, --(盖)
+ [0x4216] = 0x76D2, --(盒)
+ [0x4217] = 0x76DE, --(盞)
+ [0x4218] = 0x76E1, --(盡)
+ [0x4219] = 0x76E5, --(盥)
+ [0x421A] = 0x76E7, --(盧)
+ [0x421B] = 0x76EA, --(盪)
+ [0x421C] = 0x862F, --(蘯)
+ [0x421D] = 0x76FB, --(盻)
+ [0x421E] = 0x7708, --(眈)
+ [0x421F] = 0x7707, --(眇)
+ [0x4220] = 0x7704, --(眄)
+ [0x4221] = 0x7729, --(眩)
+ [0x4222] = 0x7724, --(眤)
+ [0x4223] = 0x771E, --(眞)
+ [0x4224] = 0x7725, --(眥)
+ [0x4225] = 0x7726, --(眦)
+ [0x4226] = 0x771B, --(眛)
+ [0x4227] = 0x7737, --(眷)
+ [0x4228] = 0x7738, --(眸)
+ [0x4229] = 0x7747, --(睇)
+ [0x422A] = 0x775A, --(睚)
+ [0x422B] = 0x7768, --(睨)
+ [0x422C] = 0x776B, --(睫)
+ [0x422D] = 0x775B, --(睛)
+ [0x422E] = 0x7765, --(睥)
+ [0x422F] = 0x777F, --(睿)
+ [0x4230] = 0x777E, --(睾)
+ [0x4231] = 0x7779, --(睹)
+ [0x4232] = 0x778E, --(瞎)
+ [0x4233] = 0x778B, --(瞋)
+ [0x4234] = 0x7791, --(瞑)
+ [0x4235] = 0x77A0, --(瞠)
+ [0x4236] = 0x779E, --(瞞)
+ [0x4237] = 0x77B0, --(瞰)
+ [0x4238] = 0x77B6, --(瞶)
+ [0x4239] = 0x77B9, --(瞹)
+ [0x423A] = 0x77BF, --(瞿)
+ [0x423B] = 0x77BC, --(瞼)
+ [0x423C] = 0x77BD, --(瞽)
+ [0x423D] = 0x77BB, --(瞻)
+ [0x423E] = 0x77C7, --(矇)
+ [0x423F] = 0x77CD, --(矍)
+ [0x4240] = 0x77D7, --(矗)
+ [0x4241] = 0x77DA, --(矚)
+ [0x4242] = 0x77DC, --(矜)
+ [0x4243] = 0x77E3, --(矣)
+ [0x4244] = 0x77EE, --(矮)
+ [0x4245] = 0x77FC, --(矼)
+ [0x4246] = 0x780C, --(砌)
+ [0x4247] = 0x7812, --(砒)
+ [0x4248] = 0x7926, --(礦)
+ [0x4249] = 0x7820, --(砠)
+ [0x424A] = 0x792A, --(礪)
+ [0x424B] = 0x7845, --(硅)
+ [0x424C] = 0x788E, --(碎)
+ [0x424D] = 0x7874, --(硴)
+ [0x424E] = 0x7886, --(碆)
+ [0x424F] = 0x787C, --(硼)
+ [0x4250] = 0x789A, --(碚)
+ [0x4251] = 0x788C, --(碌)
+ [0x4252] = 0x78A3, --(碣)
+ [0x4253] = 0x78B5, --(碵)
+ [0x4254] = 0x78AA, --(碪)
+ [0x4255] = 0x78AF, --(碯)
+ [0x4256] = 0x78D1, --(磑)
+ [0x4257] = 0x78C6, --(磆)
+ [0x4258] = 0x78CB, --(磋)
+ [0x4259] = 0x78D4, --(磔)
+ [0x425A] = 0x78BE, --(碾)
+ [0x425B] = 0x78BC, --(碼)
+ [0x425C] = 0x78C5, --(磅)
+ [0x425D] = 0x78CA, --(磊)
+ [0x425E] = 0x78EC, --(磬)
+ [0x4301] = 0x78E7, --(磧)
+ [0x4302] = 0x78DA, --(磚)
+ [0x4303] = 0x78FD, --(磽)
+ [0x4304] = 0x78F4, --(磴)
+ [0x4305] = 0x7907, --(礇)
+ [0x4306] = 0x7912, --(礒)
+ [0x4307] = 0x7911, --(礑)
+ [0x4308] = 0x7919, --(礙)
+ [0x4309] = 0x792C, --(礬)
+ [0x430A] = 0x792B, --(礫)
+ [0x430B] = 0x7940, --(祀)
+ [0x430C] = 0x7960, --(祠)
+ [0x430D] = 0x7957, --(祗)
+ [0x430E] = 0x795F, --(祟)
+ [0x430F] = 0x795A, --(祚)
+ [0x4310] = 0x7955, --(祕)
+ [0x4311] = 0x7953, --(祓)
+ [0x4312] = 0x797A, --(祺)
+ [0x4313] = 0x797F, --(祿)
+ [0x4314] = 0x798A, --(禊)
+ [0x4315] = 0x799D, --(禝)
+ [0x4316] = 0x79A7, --(禧)
+ [0x4317] = 0x9F4B, --(齋)
+ [0x4318] = 0x79AA, --(禪)
+ [0x4319] = 0x79AE, --(禮)
+ [0x431A] = 0x79B3, --(禳)
+ [0x431B] = 0x79B9, --(禹)
+ [0x431C] = 0x79BA, --(禺)
+ [0x431D] = 0x79C9, --(秉)
+ [0x431E] = 0x79D5, --(秕)
+ [0x431F] = 0x79E7, --(秧)
+ [0x4320] = 0x79EC, --(秬)
+ [0x4321] = 0x79E1, --(秡)
+ [0x4322] = 0x79E3, --(秣)
+ [0x4323] = 0x7A08, --(稈)
+ [0x4324] = 0x7A0D, --(稍)
+ [0x4325] = 0x7A18, --(稘)
+ [0x4326] = 0x7A19, --(稙)
+ [0x4327] = 0x7A20, --(稠)
+ [0x4328] = 0x7A1F, --(稟)
+ [0x4329] = 0x7980, --(禀)
+ [0x432A] = 0x7A31, --(稱)
+ [0x432B] = 0x7A3B, --(稻)
+ [0x432C] = 0x7A3E, --(稾)
+ [0x432D] = 0x7A37, --(稷)
+ [0x432E] = 0x7A43, --(穃)
+ [0x432F] = 0x7A57, --(穗)
+ [0x4330] = 0x7A49, --(穉)
+ [0x4331] = 0x7A61, --(穡)
+ [0x4332] = 0x7A62, --(穢)
+ [0x4333] = 0x7A69, --(穩)
+ [0x4334] = 0x9F9D, --(龝)
+ [0x4335] = 0x7A70, --(穰)
+ [0x4336] = 0x7A79, --(穹)
+ [0x4337] = 0x7A7D, --(穽)
+ [0x4338] = 0x7A88, --(窈)
+ [0x4339] = 0x7A97, --(窗)
+ [0x433A] = 0x7A95, --(窕)
+ [0x433B] = 0x7A98, --(窘)
+ [0x433C] = 0x7A96, --(窖)
+ [0x433D] = 0x7AA9, --(窩)
+ [0x433E] = 0x7AC8, --(竈)
+ [0x433F] = 0x7AB0, --(窰)
+ [0x4340] = 0x7AB6, --(窶)
+ [0x4341] = 0x7AC5, --(竅)
+ [0x4342] = 0x7AC4, --(竄)
+ [0x4343] = 0x7ABF, --(窿)
+ [0x4344] = 0x9083, --(邃)
+ [0x4345] = 0x7AC7, --(竇)
+ [0x4346] = 0x7ACA, --(竊)
+ [0x4347] = 0x7ACD, --(竍)
+ [0x4348] = 0x7ACF, --(竏)
+ [0x4349] = 0x7AD5, --(竕)
+ [0x434A] = 0x7AD3, --(竓)
+ [0x434B] = 0x7AD9, --(站)
+ [0x434C] = 0x7ADA, --(竚)
+ [0x434D] = 0x7ADD, --(竝)
+ [0x434E] = 0x7AE1, --(竡)
+ [0x434F] = 0x7AE2, --(竢)
+ [0x4350] = 0x7AE6, --(竦)
+ [0x4351] = 0x7AED, --(竭)
+ [0x4352] = 0x7AF0, --(竰)
+ [0x4353] = 0x7B02, --(笂)
+ [0x4354] = 0x7B0F, --(笏)
+ [0x4355] = 0x7B0A, --(笊)
+ [0x4356] = 0x7B06, --(笆)
+ [0x4357] = 0x7B33, --(笳)
+ [0x4358] = 0x7B18, --(笘)
+ [0x4359] = 0x7B19, --(笙)
+ [0x435A] = 0x7B1E, --(笞)
+ [0x435B] = 0x7B35, --(笵)
+ [0x435C] = 0x7B28, --(笨)
+ [0x435D] = 0x7B36, --(笶)
+ [0x435E] = 0x7B50, --(筐)
+ [0x4401] = 0x7B7A, --(筺)
+ [0x4402] = 0x7B04, --(笄)
+ [0x4403] = 0x7B4D, --(筍)
+ [0x4404] = 0x7B0B, --(笋)
+ [0x4405] = 0x7B4C, --(筌)
+ [0x4406] = 0x7B45, --(筅)
+ [0x4407] = 0x7B75, --(筵)
+ [0x4408] = 0x7B65, --(筥)
+ [0x4409] = 0x7B74, --(筴)
+ [0x440A] = 0x7B67, --(筧)
+ [0x440B] = 0x7B70, --(筰)
+ [0x440C] = 0x7B71, --(筱)
+ [0x440D] = 0x7B6C, --(筬)
+ [0x440E] = 0x7B6E, --(筮)
+ [0x440F] = 0x7B9D, --(箝)
+ [0x4410] = 0x7B98, --(箘)
+ [0x4411] = 0x7B9F, --(箟)
+ [0x4412] = 0x7B8D, --(箍)
+ [0x4413] = 0x7B9C, --(箜)
+ [0x4414] = 0x7B9A, --(箚)
+ [0x4415] = 0x7B8B, --(箋)
+ [0x4416] = 0x7B92, --(箒)
+ [0x4417] = 0x7B8F, --(箏)
+ [0x4418] = 0x7B5D, --(筝)
+ [0x4419] = 0x7B99, --(箙)
+ [0x441A] = 0x7BCB, --(篋)
+ [0x441B] = 0x7BC1, --(篁)
+ [0x441C] = 0x7BCC, --(篌)
+ [0x441D] = 0x7BCF, --(篏)
+ [0x441E] = 0x7BB4, --(箴)
+ [0x441F] = 0x7BC6, --(篆)
+ [0x4420] = 0x7BDD, --(篝)
+ [0x4421] = 0x7BE9, --(篩)
+ [0x4422] = 0x7C11, --(簑)
+ [0x4423] = 0x7C14, --(簔)
+ [0x4424] = 0x7BE6, --(篦)
+ [0x4425] = 0x7BE5, --(篥)
+ [0x4426] = 0x7C60, --(籠)
+ [0x4427] = 0x7C00, --(簀)
+ [0x4428] = 0x7C07, --(簇)
+ [0x4429] = 0x7C13, --(簓)
+ [0x442A] = 0x7BF3, --(篳)
+ [0x442B] = 0x7BF7, --(篷)
+ [0x442C] = 0x7C17, --(簗)
+ [0x442D] = 0x7C0D, --(簍)
+ [0x442E] = 0x7BF6, --(篶)
+ [0x442F] = 0x7C23, --(簣)
+ [0x4430] = 0x7C27, --(簧)
+ [0x4431] = 0x7C2A, --(簪)
+ [0x4432] = 0x7C1F, --(簟)
+ [0x4433] = 0x7C37, --(簷)
+ [0x4434] = 0x7C2B, --(簫)
+ [0x4435] = 0x7C3D, --(簽)
+ [0x4436] = 0x7C4C, --(籌)
+ [0x4437] = 0x7C43, --(籃)
+ [0x4438] = 0x7C54, --(籔)
+ [0x4439] = 0x7C4F, --(籏)
+ [0x443A] = 0x7C40, --(籀)
+ [0x443B] = 0x7C50, --(籐)
+ [0x443C] = 0x7C58, --(籘)
+ [0x443D] = 0x7C5F, --(籟)
+ [0x443E] = 0x7C64, --(籤)
+ [0x443F] = 0x7C56, --(籖)
+ [0x4440] = 0x7C65, --(籥)
+ [0x4441] = 0x7C6C, --(籬)
+ [0x4442] = 0x7C75, --(籵)
+ [0x4443] = 0x7C83, --(粃)
+ [0x4444] = 0x7C90, --(粐)
+ [0x4445] = 0x7CA4, --(粤)
+ [0x4446] = 0x7CAD, --(粭)
+ [0x4447] = 0x7CA2, --(粢)
+ [0x4448] = 0x7CAB, --(粫)
+ [0x4449] = 0x7CA1, --(粡)
+ [0x444A] = 0x7CA8, --(粨)
+ [0x444B] = 0x7CB3, --(粳)
+ [0x444C] = 0x7CB2, --(粲)
+ [0x444D] = 0x7CB1, --(粱)
+ [0x444E] = 0x7CAE, --(粮)
+ [0x444F] = 0x7CB9, --(粹)
+ [0x4450] = 0x7CBD, --(粽)
+ [0x4451] = 0x7CC0, --(糀)
+ [0x4452] = 0x7CC5, --(糅)
+ [0x4453] = 0x7CC2, --(糂)
+ [0x4454] = 0x7CD8, --(糘)
+ [0x4455] = 0x7CD2, --(糒)
+ [0x4456] = 0x7CDC, --(糜)
+ [0x4457] = 0x7CE2, --(糢)
+ [0x4458] = 0x9B3B, --(鬻)
+ [0x4459] = 0x7CEF, --(糯)
+ [0x445A] = 0x7CF2, --(糲)
+ [0x445B] = 0x7CF4, --(糴)
+ [0x445C] = 0x7CF6, --(糶)
+ [0x445D] = 0x7CFA, --(糺)
+ [0x445E] = 0x7D06, --(紆)
+ [0x4501] = 0x7D02, --(紂)
+ [0x4502] = 0x7D1C, --(紜)
+ [0x4503] = 0x7D15, --(紕)
+ [0x4504] = 0x7D0A, --(紊)
+ [0x4505] = 0x7D45, --(絅)
+ [0x4506] = 0x7D4B, --(絋)
+ [0x4507] = 0x7D2E, --(紮)
+ [0x4508] = 0x7D32, --(紲)
+ [0x4509] = 0x7D3F, --(紿)
+ [0x450A] = 0x7D35, --(紵)
+ [0x450B] = 0x7D46, --(絆)
+ [0x450C] = 0x7D73, --(絳)
+ [0x450D] = 0x7D56, --(絖)
+ [0x450E] = 0x7D4E, --(絎)
+ [0x450F] = 0x7D72, --(絲)
+ [0x4510] = 0x7D68, --(絨)
+ [0x4511] = 0x7D6E, --(絮)
+ [0x4512] = 0x7D4F, --(絏)
+ [0x4513] = 0x7D63, --(絣)
+ [0x4514] = 0x7D93, --(經)
+ [0x4515] = 0x7D89, --(綉)
+ [0x4516] = 0x7D5B, --(絛)
+ [0x4517] = 0x7D8F, --(綏)
+ [0x4518] = 0x7D7D, --(絽)
+ [0x4519] = 0x7D9B, --(綛)
+ [0x451A] = 0x7DBA, --(綺)
+ [0x451B] = 0x7DAE, --(綮)
+ [0x451C] = 0x7DA3, --(綣)
+ [0x451D] = 0x7DB5, --(綵)
+ [0x451E] = 0x7DC7, --(緇)
+ [0x451F] = 0x7DBD, --(綽)
+ [0x4520] = 0x7DAB, --(綫)
+ [0x4521] = 0x7E3D, --(總)
+ [0x4522] = 0x7DA2, --(綢)
+ [0x4523] = 0x7DAF, --(綯)
+ [0x4524] = 0x7DDC, --(緜)
+ [0x4525] = 0x7DB8, --(綸)
+ [0x4526] = 0x7D9F, --(綟)
+ [0x4527] = 0x7DB0, --(綰)
+ [0x4528] = 0x7DD8, --(緘)
+ [0x4529] = 0x7DDD, --(緝)
+ [0x452A] = 0x7DE4, --(緤)
+ [0x452B] = 0x7DDE, --(緞)
+ [0x452C] = 0x7DFB, --(緻)
+ [0x452D] = 0x7DF2, --(緲)
+ [0x452E] = 0x7DE1, --(緡)
+ [0x452F] = 0x7E05, --(縅)
+ [0x4530] = 0x7E0A, --(縊)
+ [0x4531] = 0x7E23, --(縣)
+ [0x4532] = 0x7E21, --(縡)
+ [0x4533] = 0x7E12, --(縒)
+ [0x4534] = 0x7E31, --(縱)
+ [0x4535] = 0x7E1F, --(縟)
+ [0x4536] = 0x7E09, --(縉)
+ [0x4537] = 0x7E0B, --(縋)
+ [0x4538] = 0x7E22, --(縢)
+ [0x4539] = 0x7E46, --(繆)
+ [0x453A] = 0x7E66, --(繦)
+ [0x453B] = 0x7E3B, --(縻)
+ [0x453C] = 0x7E35, --(縵)
+ [0x453D] = 0x7E39, --(縹)
+ [0x453E] = 0x7E43, --(繃)
+ [0x453F] = 0x7E37, --(縷)
+ [0x4540] = 0x7E32, --(縲)
+ [0x4541] = 0x7E3A, --(縺)
+ [0x4542] = 0x7E67, --(繧)
+ [0x4543] = 0x7E5D, --(繝)
+ [0x4544] = 0x7E56, --(繖)
+ [0x4545] = 0x7E5E, --(繞)
+ [0x4546] = 0x7E59, --(繙)
+ [0x4547] = 0x7E5A, --(繚)
+ [0x4548] = 0x7E79, --(繹)
+ [0x4549] = 0x7E6A, --(繪)
+ [0x454A] = 0x7E69, --(繩)
+ [0x454B] = 0x7E7C, --(繼)
+ [0x454C] = 0x7E7B, --(繻)
+ [0x454D] = 0x7E83, --(纃)
+ [0x454E] = 0x7DD5, --(緕)
+ [0x454F] = 0x7E7D, --(繽)
+ [0x4550] = 0x8FAE, --(辮)
+ [0x4551] = 0x7E7F, --(繿)
+ [0x4552] = 0x7E88, --(纈)
+ [0x4553] = 0x7E89, --(纉)
+ [0x4554] = 0x7E8C, --(續)
+ [0x4555] = 0x7E92, --(纒)
+ [0x4556] = 0x7E90, --(纐)
+ [0x4557] = 0x7E93, --(纓)
+ [0x4558] = 0x7E94, --(纔)
+ [0x4559] = 0x7E96, --(纖)
+ [0x455A] = 0x7E8E, --(纎)
+ [0x455B] = 0x7E9B, --(纛)
+ [0x455C] = 0x7E9C, --(纜)
+ [0x455D] = 0x7F38, --(缸)
+ [0x455E] = 0x7F3A, --(缺)
+ [0x4601] = 0x7F45, --(罅)
+ [0x4602] = 0x7F4C, --(罌)
+ [0x4603] = 0x7F4D, --(罍)
+ [0x4604] = 0x7F4E, --(罎)
+ [0x4605] = 0x7F50, --(罐)
+ [0x4606] = 0x7F51, --(网)
+ [0x4607] = 0x7F55, --(罕)
+ [0x4608] = 0x7F54, --(罔)
+ [0x4609] = 0x7F58, --(罘)
+ [0x460A] = 0x7F5F, --(罟)
+ [0x460B] = 0x7F60, --(罠)
+ [0x460C] = 0x7F68, --(罨)
+ [0x460D] = 0x7F69, --(罩)
+ [0x460E] = 0x7F67, --(罧)
+ [0x460F] = 0x7F78, --(罸)
+ [0x4610] = 0x7F82, --(羂)
+ [0x4611] = 0x7F86, --(羆)
+ [0x4612] = 0x7F83, --(羃)
+ [0x4613] = 0x7F88, --(羈)
+ [0x4614] = 0x7F87, --(羇)
+ [0x4615] = 0x7F8C, --(羌)
+ [0x4616] = 0x7F94, --(羔)
+ [0x4617] = 0x7F9E, --(羞)
+ [0x4618] = 0x7F9D, --(羝)
+ [0x4619] = 0x7F9A, --(羚)
+ [0x461A] = 0x7FA3, --(羣)
+ [0x461B] = 0x7FAF, --(羯)
+ [0x461C] = 0x7FB2, --(羲)
+ [0x461D] = 0x7FB9, --(羹)
+ [0x461E] = 0x7FAE, --(羮)
+ [0x461F] = 0x7FB6, --(羶)
+ [0x4620] = 0x7FB8, --(羸)
+ [0x4621] = 0x8B71, --(譱)
+ [0x4622] = 0x7FC5, --(翅)
+ [0x4623] = 0x7FC6, --(翆)
+ [0x4624] = 0x7FCA, --(翊)
+ [0x4625] = 0x7FD5, --(翕)
+ [0x4626] = 0x7FD4, --(翔)
+ [0x4627] = 0x7FE1, --(翡)
+ [0x4628] = 0x7FE6, --(翦)
+ [0x4629] = 0x7FE9, --(翩)
+ [0x462A] = 0x7FF3, --(翳)
+ [0x462B] = 0x7FF9, --(翹)
+ [0x462C] = 0x98DC, --(飜)
+ [0x462D] = 0x8006, --(耆)
+ [0x462E] = 0x8004, --(耄)
+ [0x462F] = 0x800B, --(耋)
+ [0x4630] = 0x8012, --(耒)
+ [0x4631] = 0x8018, --(耘)
+ [0x4632] = 0x8019, --(耙)
+ [0x4633] = 0x801C, --(耜)
+ [0x4634] = 0x8021, --(耡)
+ [0x4635] = 0x8028, --(耨)
+ [0x4636] = 0x803F, --(耿)
+ [0x4637] = 0x803B, --(耻)
+ [0x4638] = 0x804A, --(聊)
+ [0x4639] = 0x8046, --(聆)
+ [0x463A] = 0x8052, --(聒)
+ [0x463B] = 0x8058, --(聘)
+ [0x463C] = 0x805A, --(聚)
+ [0x463D] = 0x805F, --(聟)
+ [0x463E] = 0x8062, --(聢)
+ [0x463F] = 0x8068, --(聨)
+ [0x4640] = 0x8073, --(聳)
+ [0x4641] = 0x8072, --(聲)
+ [0x4642] = 0x8070, --(聰)
+ [0x4643] = 0x8076, --(聶)
+ [0x4644] = 0x8079, --(聹)
+ [0x4645] = 0x807D, --(聽)
+ [0x4646] = 0x807F, --(聿)
+ [0x4647] = 0x8084, --(肄)
+ [0x4648] = 0x8086, --(肆)
+ [0x4649] = 0x8085, --(肅)
+ [0x464A] = 0x809B, --(肛)
+ [0x464B] = 0x8093, --(肓)
+ [0x464C] = 0x809A, --(肚)
+ [0x464D] = 0x80AD, --(肭)
+ [0x464E] = 0x5190, --(冐)
+ [0x464F] = 0x80AC, --(肬)
+ [0x4650] = 0x80DB, --(胛)
+ [0x4651] = 0x80E5, --(胥)
+ [0x4652] = 0x80D9, --(胙)
+ [0x4653] = 0x80DD, --(胝)
+ [0x4654] = 0x80C4, --(胄)
+ [0x4655] = 0x80DA, --(胚)
+ [0x4656] = 0x80D6, --(胖)
+ [0x4657] = 0x8109, --(脉)
+ [0x4658] = 0x80EF, --(胯)
+ [0x4659] = 0x80F1, --(胱)
+ [0x465A] = 0x811B, --(脛)
+ [0x465B] = 0x8129, --(脩)
+ [0x465C] = 0x8123, --(脣)
+ [0x465D] = 0x812F, --(脯)
+ [0x465E] = 0x814B, --(腋)
+ [0x4701] = 0x968B, --(隋)
+ [0x4702] = 0x8146, --(腆)
+ [0x4703] = 0x813E, --(脾)
+ [0x4704] = 0x8153, --(腓)
+ [0x4705] = 0x8151, --(腑)
+ [0x4706] = 0x80FC, --(胼)
+ [0x4707] = 0x8171, --(腱)
+ [0x4708] = 0x816E, --(腮)
+ [0x4709] = 0x8165, --(腥)
+ [0x470A] = 0x8166, --(腦)
+ [0x470B] = 0x8174, --(腴)
+ [0x470C] = 0x8183, --(膃)
+ [0x470D] = 0x8188, --(膈)
+ [0x470E] = 0x818A, --(膊)
+ [0x470F] = 0x8180, --(膀)
+ [0x4710] = 0x8182, --(膂)
+ [0x4711] = 0x81A0, --(膠)
+ [0x4712] = 0x8195, --(膕)
+ [0x4713] = 0x81A4, --(膤)
+ [0x4714] = 0x81A3, --(膣)
+ [0x4715] = 0x815F, --(腟)
+ [0x4716] = 0x8193, --(膓)
+ [0x4717] = 0x81A9, --(膩)
+ [0x4718] = 0x81B0, --(膰)
+ [0x4719] = 0x81B5, --(膵)
+ [0x471A] = 0x81BE, --(膾)
+ [0x471B] = 0x81B8, --(膸)
+ [0x471C] = 0x81BD, --(膽)
+ [0x471D] = 0x81C0, --(臀)
+ [0x471E] = 0x81C2, --(臂)
+ [0x471F] = 0x81BA, --(膺)
+ [0x4720] = 0x81C9, --(臉)
+ [0x4721] = 0x81CD, --(臍)
+ [0x4722] = 0x81D1, --(臑)
+ [0x4723] = 0x81D9, --(臙)
+ [0x4724] = 0x81D8, --(臘)
+ [0x4725] = 0x81C8, --(臈)
+ [0x4726] = 0x81DA, --(臚)
+ [0x4727] = 0x81DF, --(臟)
+ [0x4728] = 0x81E0, --(臠)
+ [0x4729] = 0x81E7, --(臧)
+ [0x472A] = 0x81FA, --(臺)
+ [0x472B] = 0x81FB, --(臻)
+ [0x472C] = 0x81FE, --(臾)
+ [0x472D] = 0x8201, --(舁)
+ [0x472E] = 0x8202, --(舂)
+ [0x472F] = 0x8205, --(舅)
+ [0x4730] = 0x8207, --(與)
+ [0x4731] = 0x820A, --(舊)
+ [0x4732] = 0x820D, --(舍)
+ [0x4733] = 0x8210, --(舐)
+ [0x4734] = 0x8216, --(舖)
+ [0x4735] = 0x8229, --(舩)
+ [0x4736] = 0x822B, --(舫)
+ [0x4737] = 0x8238, --(舸)
+ [0x4738] = 0x8233, --(舳)
+ [0x4739] = 0x8240, --(艀)
+ [0x473A] = 0x8259, --(艙)
+ [0x473B] = 0x8258, --(艘)
+ [0x473C] = 0x825D, --(艝)
+ [0x473D] = 0x825A, --(艚)
+ [0x473E] = 0x825F, --(艟)
+ [0x473F] = 0x8264, --(艤)
+ [0x4740] = 0x8262, --(艢)
+ [0x4741] = 0x8268, --(艨)
+ [0x4742] = 0x826A, --(艪)
+ [0x4743] = 0x826B, --(艫)
+ [0x4744] = 0x822E, --(舮)
+ [0x4745] = 0x8271, --(艱)
+ [0x4746] = 0x8277, --(艷)
+ [0x4747] = 0x8278, --(艸)
+ [0x4748] = 0x827E, --(艾)
+ [0x4749] = 0x828D, --(芍)
+ [0x474A] = 0x8292, --(芒)
+ [0x474B] = 0x82AB, --(芫)
+ [0x474C] = 0x829F, --(芟)
+ [0x474D] = 0x82BB, --(芻)
+ [0x474E] = 0x82AC, --(芬)
+ [0x474F] = 0x82E1, --(苡)
+ [0x4750] = 0x82E3, --(苣)
+ [0x4751] = 0x82DF, --(苟)
+ [0x4752] = 0x82D2, --(苒)
+ [0x4753] = 0x82F4, --(苴)
+ [0x4754] = 0x82F3, --(苳)
+ [0x4755] = 0x82FA, --(苺)
+ [0x4756] = 0x8393, --(莓)
+ [0x4757] = 0x8303, --(范)
+ [0x4758] = 0x82FB, --(苻)
+ [0x4759] = 0x82F9, --(苹)
+ [0x475A] = 0x82DE, --(苞)
+ [0x475B] = 0x8306, --(茆)
+ [0x475C] = 0x82DC, --(苜)
+ [0x475D] = 0x8309, --(茉)
+ [0x475E] = 0x82D9, --(苙)
+ [0x4801] = 0x8335, --(茵)
+ [0x4802] = 0x8334, --(茴)
+ [0x4803] = 0x8316, --(茖)
+ [0x4804] = 0x8332, --(茲)
+ [0x4805] = 0x8331, --(茱)
+ [0x4806] = 0x8340, --(荀)
+ [0x4807] = 0x8339, --(茹)
+ [0x4808] = 0x8350, --(荐)
+ [0x4809] = 0x8345, --(荅)
+ [0x480A] = 0x832F, --(茯)
+ [0x480B] = 0x832B, --(茫)
+ [0x480C] = 0x8317, --(茗)
+ [0x480D] = 0x8318, --(茘)
+ [0x480E] = 0x8385, --(莅)
+ [0x480F] = 0x839A, --(莚)
+ [0x4810] = 0x83AA, --(莪)
+ [0x4811] = 0x839F, --(莟)
+ [0x4812] = 0x83A2, --(莢)
+ [0x4813] = 0x8396, --(莖)
+ [0x4814] = 0x8323, --(茣)
+ [0x4815] = 0x838E, --(莎)
+ [0x4816] = 0x8387, --(莇)
+ [0x4817] = 0x838A, --(莊)
+ [0x4818] = 0x837C, --(荼)
+ [0x4819] = 0x83B5, --(莵)
+ [0x481A] = 0x8373, --(荳)
+ [0x481B] = 0x8375, --(荵)
+ [0x481C] = 0x83A0, --(莠)
+ [0x481D] = 0x8389, --(莉)
+ [0x481E] = 0x83A8, --(莨)
+ [0x481F] = 0x83F4, --(菴)
+ [0x4820] = 0x8413, --(萓)
+ [0x4821] = 0x83EB, --(菫)
+ [0x4822] = 0x83CE, --(菎)
+ [0x4823] = 0x83FD, --(菽)
+ [0x4824] = 0x8403, --(萃)
+ [0x4825] = 0x83D8, --(菘)
+ [0x4826] = 0x840B, --(萋)
+ [0x4827] = 0x83C1, --(菁)
+ [0x4828] = 0x83F7, --(菷)
+ [0x4829] = 0x8407, --(萇)
+ [0x482A] = 0x83E0, --(菠)
+ [0x482B] = 0x83F2, --(菲)
+ [0x482C] = 0x840D, --(萍)
+ [0x482D] = 0x8422, --(萢)
+ [0x482E] = 0x8420, --(萠)
+ [0x482F] = 0x83BD, --(莽)
+ [0x4830] = 0x8438, --(萸)
+ [0x4831] = 0x8506, --(蔆)
+ [0x4832] = 0x83FB, --(菻)
+ [0x4833] = 0x846D, --(葭)
+ [0x4834] = 0x842A, --(萪)
+ [0x4835] = 0x843C, --(萼)
+ [0x4836] = 0x855A, --(蕚)
+ [0x4837] = 0x8484, --(蒄)
+ [0x4838] = 0x8477, --(葷)
+ [0x4839] = 0x846B, --(葫)
+ [0x483A] = 0x84AD, --(蒭)
+ [0x483B] = 0x846E, --(葮)
+ [0x483C] = 0x8482, --(蒂)
+ [0x483D] = 0x8469, --(葩)
+ [0x483E] = 0x8446, --(葆)
+ [0x483F] = 0x842C, --(萬)
+ [0x4840] = 0x846F, --(葯)
+ [0x4841] = 0x8479, --(葹)
+ [0x4842] = 0x8435, --(萵)
+ [0x4843] = 0x84CA, --(蓊)
+ [0x4844] = 0x8462, --(葢)
+ [0x4845] = 0x84B9, --(蒹)
+ [0x4846] = 0x84BF, --(蒿)
+ [0x4847] = 0x849F, --(蒟)
+ [0x4848] = 0x84D9, --(蓙)
+ [0x4849] = 0x84CD, --(蓍)
+ [0x484A] = 0x84BB, --(蒻)
+ [0x484B] = 0x84DA, --(蓚)
+ [0x484C] = 0x84D0, --(蓐)
+ [0x484D] = 0x84C1, --(蓁)
+ [0x484E] = 0x84C6, --(蓆)
+ [0x484F] = 0x84D6, --(蓖)
+ [0x4850] = 0x84A1, --(蒡)
+ [0x4851] = 0x8521, --(蔡)
+ [0x4852] = 0x84FF, --(蓿)
+ [0x4853] = 0x84F4, --(蓴)
+ [0x4854] = 0x8517, --(蔗)
+ [0x4855] = 0x8518, --(蔘)
+ [0x4856] = 0x852C, --(蔬)
+ [0x4857] = 0x851F, --(蔟)
+ [0x4858] = 0x8515, --(蔕)
+ [0x4859] = 0x8514, --(蔔)
+ [0x485A] = 0x84FC, --(蓼)
+ [0x485B] = 0x8540, --(蕀)
+ [0x485C] = 0x8563, --(蕣)
+ [0x485D] = 0x8558, --(蕘)
+ [0x485E] = 0x8548, --(蕈)
+ [0x4901] = 0x8541, --(蕁)
+ [0x4902] = 0x8602, --(蘂)
+ [0x4903] = 0x854B, --(蕋)
+ [0x4904] = 0x8555, --(蕕)
+ [0x4905] = 0x8580, --(薀)
+ [0x4906] = 0x85A4, --(薤)
+ [0x4907] = 0x8588, --(薈)
+ [0x4908] = 0x8591, --(薑)
+ [0x4909] = 0x858A, --(薊)
+ [0x490A] = 0x85A8, --(薨)
+ [0x490B] = 0x856D, --(蕭)
+ [0x490C] = 0x8594, --(薔)
+ [0x490D] = 0x859B, --(薛)
+ [0x490E] = 0x85EA, --(藪)
+ [0x490F] = 0x8587, --(薇)
+ [0x4910] = 0x859C, --(薜)
+ [0x4911] = 0x8577, --(蕷)
+ [0x4912] = 0x857E, --(蕾)
+ [0x4913] = 0x8590, --(薐)
+ [0x4914] = 0x85C9, --(藉)
+ [0x4915] = 0x85BA, --(薺)
+ [0x4916] = 0x85CF, --(藏)
+ [0x4917] = 0x85B9, --(薹)
+ [0x4918] = 0x85D0, --(藐)
+ [0x4919] = 0x85D5, --(藕)
+ [0x491A] = 0x85DD, --(藝)
+ [0x491B] = 0x85E5, --(藥)
+ [0x491C] = 0x85DC, --(藜)
+ [0x491D] = 0x85F9, --(藹)
+ [0x491E] = 0x860A, --(蘊)
+ [0x491F] = 0x8613, --(蘓)
+ [0x4920] = 0x860B, --(蘋)
+ [0x4921] = 0x85FE, --(藾)
+ [0x4922] = 0x85FA, --(藺)
+ [0x4923] = 0x8606, --(蘆)
+ [0x4924] = 0x8622, --(蘢)
+ [0x4925] = 0x861A, --(蘚)
+ [0x4926] = 0x8630, --(蘰)
+ [0x4927] = 0x863F, --(蘿)
+ [0x4928] = 0x864D, --(虍)
+ [0x4929] = 0x4E55, --(乕)
+ [0x492A] = 0x8654, --(虔)
+ [0x492B] = 0x865F, --(號)
+ [0x492C] = 0x8667, --(虧)
+ [0x492D] = 0x8671, --(虱)
+ [0x492E] = 0x8693, --(蚓)
+ [0x492F] = 0x86A3, --(蚣)
+ [0x4930] = 0x86A9, --(蚩)
+ [0x4931] = 0x86AA, --(蚪)
+ [0x4932] = 0x868B, --(蚋)
+ [0x4933] = 0x868C, --(蚌)
+ [0x4934] = 0x86B6, --(蚶)
+ [0x4935] = 0x86AF, --(蚯)
+ [0x4936] = 0x86C4, --(蛄)
+ [0x4937] = 0x86C6, --(蛆)
+ [0x4938] = 0x86B0, --(蚰)
+ [0x4939] = 0x86C9, --(蛉)
+ [0x493A] = 0x8823, --(蠣)
+ [0x493B] = 0x86AB, --(蚫)
+ [0x493C] = 0x86D4, --(蛔)
+ [0x493D] = 0x86DE, --(蛞)
+ [0x493E] = 0x86E9, --(蛩)
+ [0x493F] = 0x86EC, --(蛬)
+ [0x4940] = 0x86DF, --(蛟)
+ [0x4941] = 0x86DB, --(蛛)
+ [0x4942] = 0x86EF, --(蛯)
+ [0x4943] = 0x8712, --(蜒)
+ [0x4944] = 0x8706, --(蜆)
+ [0x4945] = 0x8708, --(蜈)
+ [0x4946] = 0x8700, --(蜀)
+ [0x4947] = 0x8703, --(蜃)
+ [0x4948] = 0x86FB, --(蛻)
+ [0x4949] = 0x8711, --(蜑)
+ [0x494A] = 0x8709, --(蜉)
+ [0x494B] = 0x870D, --(蜍)
+ [0x494C] = 0x86F9, --(蛹)
+ [0x494D] = 0x870A, --(蜊)
+ [0x494E] = 0x8734, --(蜴)
+ [0x494F] = 0x873F, --(蜿)
+ [0x4950] = 0x8737, --(蜷)
+ [0x4951] = 0x873B, --(蜻)
+ [0x4952] = 0x8725, --(蜥)
+ [0x4953] = 0x8729, --(蜩)
+ [0x4954] = 0x871A, --(蜚)
+ [0x4955] = 0x8760, --(蝠)
+ [0x4956] = 0x875F, --(蝟)
+ [0x4957] = 0x8778, --(蝸)
+ [0x4958] = 0x874C, --(蝌)
+ [0x4959] = 0x874E, --(蝎)
+ [0x495A] = 0x8774, --(蝴)
+ [0x495B] = 0x8757, --(蝗)
+ [0x495C] = 0x8768, --(蝨)
+ [0x495D] = 0x876E, --(蝮)
+ [0x495E] = 0x8759, --(蝙)
+ [0x4A01] = 0x8753, --(蝓)
+ [0x4A02] = 0x8763, --(蝣)
+ [0x4A03] = 0x876A, --(蝪)
+ [0x4A04] = 0x8805, --(蠅)
+ [0x4A05] = 0x87A2, --(螢)
+ [0x4A06] = 0x879F, --(螟)
+ [0x4A07] = 0x8782, --(螂)
+ [0x4A08] = 0x87AF, --(螯)
+ [0x4A09] = 0x87CB, --(蟋)
+ [0x4A0A] = 0x87BD, --(螽)
+ [0x4A0B] = 0x87C0, --(蟀)
+ [0x4A0C] = 0x87D0, --(蟐)
+ [0x4A0D] = 0x96D6, --(雖)
+ [0x4A0E] = 0x87AB, --(螫)
+ [0x4A0F] = 0x87C4, --(蟄)
+ [0x4A10] = 0x87B3, --(螳)
+ [0x4A11] = 0x87C7, --(蟇)
+ [0x4A12] = 0x87C6, --(蟆)
+ [0x4A13] = 0x87BB, --(螻)
+ [0x4A14] = 0x87EF, --(蟯)
+ [0x4A15] = 0x87F2, --(蟲)
+ [0x4A16] = 0x87E0, --(蟠)
+ [0x4A17] = 0x880F, --(蠏)
+ [0x4A18] = 0x880D, --(蠍)
+ [0x4A19] = 0x87FE, --(蟾)
+ [0x4A1A] = 0x87F6, --(蟶)
+ [0x4A1B] = 0x87F7, --(蟷)
+ [0x4A1C] = 0x880E, --(蠎)
+ [0x4A1D] = 0x87D2, --(蟒)
+ [0x4A1E] = 0x8811, --(蠑)
+ [0x4A1F] = 0x8816, --(蠖)
+ [0x4A20] = 0x8815, --(蠕)
+ [0x4A21] = 0x8822, --(蠢)
+ [0x4A22] = 0x8821, --(蠡)
+ [0x4A23] = 0x8831, --(蠱)
+ [0x4A24] = 0x8836, --(蠶)
+ [0x4A25] = 0x8839, --(蠹)
+ [0x4A26] = 0x8827, --(蠧)
+ [0x4A27] = 0x883B, --(蠻)
+ [0x4A28] = 0x8844, --(衄)
+ [0x4A29] = 0x8842, --(衂)
+ [0x4A2A] = 0x8852, --(衒)
+ [0x4A2B] = 0x8859, --(衙)
+ [0x4A2C] = 0x885E, --(衞)
+ [0x4A2D] = 0x8862, --(衢)
+ [0x4A2E] = 0x886B, --(衫)
+ [0x4A2F] = 0x8881, --(袁)
+ [0x4A30] = 0x887E, --(衾)
+ [0x4A31] = 0x889E, --(袞)
+ [0x4A32] = 0x8875, --(衵)
+ [0x4A33] = 0x887D, --(衽)
+ [0x4A34] = 0x88B5, --(袵)
+ [0x4A35] = 0x8872, --(衲)
+ [0x4A36] = 0x8882, --(袂)
+ [0x4A37] = 0x8897, --(袗)
+ [0x4A38] = 0x8892, --(袒)
+ [0x4A39] = 0x88AE, --(袮)
+ [0x4A3A] = 0x8899, --(袙)
+ [0x4A3B] = 0x88A2, --(袢)
+ [0x4A3C] = 0x888D, --(袍)
+ [0x4A3D] = 0x88A4, --(袤)
+ [0x4A3E] = 0x88B0, --(袰)
+ [0x4A3F] = 0x88BF, --(袿)
+ [0x4A40] = 0x88B1, --(袱)
+ [0x4A41] = 0x88C3, --(裃)
+ [0x4A42] = 0x88C4, --(裄)
+ [0x4A43] = 0x88D4, --(裔)
+ [0x4A44] = 0x88D8, --(裘)
+ [0x4A45] = 0x88D9, --(裙)
+ [0x4A46] = 0x88DD, --(裝)
+ [0x4A47] = 0x88F9, --(裹)
+ [0x4A48] = 0x8902, --(褂)
+ [0x4A49] = 0x88FC, --(裼)
+ [0x4A4A] = 0x88F4, --(裴)
+ [0x4A4B] = 0x88E8, --(裨)
+ [0x4A4C] = 0x88F2, --(裲)
+ [0x4A4D] = 0x8904, --(褄)
+ [0x4A4E] = 0x890C, --(褌)
+ [0x4A4F] = 0x890A, --(褊)
+ [0x4A50] = 0x8913, --(褓)
+ [0x4A51] = 0x8943, --(襃)
+ [0x4A52] = 0x891E, --(褞)
+ [0x4A53] = 0x8925, --(褥)
+ [0x4A54] = 0x892A, --(褪)
+ [0x4A55] = 0x892B, --(褫)
+ [0x4A56] = 0x8941, --(襁)
+ [0x4A57] = 0x8944, --(襄)
+ [0x4A58] = 0x893B, --(褻)
+ [0x4A59] = 0x8936, --(褶)
+ [0x4A5A] = 0x8938, --(褸)
+ [0x4A5B] = 0x894C, --(襌)
+ [0x4A5C] = 0x891D, --(褝)
+ [0x4A5D] = 0x8960, --(襠)
+ [0x4A5E] = 0x895E, --(襞)
+ [0x4B01] = 0x8966, --(襦)
+ [0x4B02] = 0x8964, --(襤)
+ [0x4B03] = 0x896D, --(襭)
+ [0x4B04] = 0x896A, --(襪)
+ [0x4B05] = 0x896F, --(襯)
+ [0x4B06] = 0x8974, --(襴)
+ [0x4B07] = 0x8977, --(襷)
+ [0x4B08] = 0x897E, --(襾)
+ [0x4B09] = 0x8983, --(覃)
+ [0x4B0A] = 0x8988, --(覈)
+ [0x4B0B] = 0x898A, --(覊)
+ [0x4B0C] = 0x8993, --(覓)
+ [0x4B0D] = 0x8998, --(覘)
+ [0x4B0E] = 0x89A1, --(覡)
+ [0x4B0F] = 0x89A9, --(覩)
+ [0x4B10] = 0x89A6, --(覦)
+ [0x4B11] = 0x89AC, --(覬)
+ [0x4B12] = 0x89AF, --(覯)
+ [0x4B13] = 0x89B2, --(覲)
+ [0x4B14] = 0x89BA, --(覺)
+ [0x4B15] = 0x89BD, --(覽)
+ [0x4B16] = 0x89BF, --(覿)
+ [0x4B17] = 0x89C0, --(觀)
+ [0x4B18] = 0x89DA, --(觚)
+ [0x4B19] = 0x89DC, --(觜)
+ [0x4B1A] = 0x89DD, --(觝)
+ [0x4B1B] = 0x89E7, --(觧)
+ [0x4B1C] = 0x89F4, --(觴)
+ [0x4B1D] = 0x89F8, --(觸)
+ [0x4B1E] = 0x8A03, --(訃)
+ [0x4B1F] = 0x8A16, --(訖)
+ [0x4B20] = 0x8A10, --(訐)
+ [0x4B21] = 0x8A0C, --(訌)
+ [0x4B22] = 0x8A1B, --(訛)
+ [0x4B23] = 0x8A1D, --(訝)
+ [0x4B24] = 0x8A25, --(訥)
+ [0x4B25] = 0x8A36, --(訶)
+ [0x4B26] = 0x8A41, --(詁)
+ [0x4B27] = 0x8A5B, --(詛)
+ [0x4B28] = 0x8A52, --(詒)
+ [0x4B29] = 0x8A46, --(詆)
+ [0x4B2A] = 0x8A48, --(詈)
+ [0x4B2B] = 0x8A7C, --(詼)
+ [0x4B2C] = 0x8A6D, --(詭)
+ [0x4B2D] = 0x8A6C, --(詬)
+ [0x4B2E] = 0x8A62, --(詢)
+ [0x4B2F] = 0x8A85, --(誅)
+ [0x4B30] = 0x8A82, --(誂)
+ [0x4B31] = 0x8A84, --(誄)
+ [0x4B32] = 0x8AA8, --(誨)
+ [0x4B33] = 0x8AA1, --(誡)
+ [0x4B34] = 0x8A91, --(誑)
+ [0x4B35] = 0x8AA5, --(誥)
+ [0x4B36] = 0x8AA6, --(誦)
+ [0x4B37] = 0x8A9A, --(誚)
+ [0x4B38] = 0x8AA3, --(誣)
+ [0x4B39] = 0x8AC4, --(諄)
+ [0x4B3A] = 0x8ACD, --(諍)
+ [0x4B3B] = 0x8AC2, --(諂)
+ [0x4B3C] = 0x8ADA, --(諚)
+ [0x4B3D] = 0x8AEB, --(諫)
+ [0x4B3E] = 0x8AF3, --(諳)
+ [0x4B3F] = 0x8AE7, --(諧)
+ [0x4B40] = 0x8AE4, --(諤)
+ [0x4B41] = 0x8AF1, --(諱)
+ [0x4B42] = 0x8B14, --(謔)
+ [0x4B43] = 0x8AE0, --(諠)
+ [0x4B44] = 0x8AE2, --(諢)
+ [0x4B45] = 0x8AF7, --(諷)
+ [0x4B46] = 0x8ADE, --(諞)
+ [0x4B47] = 0x8ADB, --(諛)
+ [0x4B48] = 0x8B0C, --(謌)
+ [0x4B49] = 0x8B07, --(謇)
+ [0x4B4A] = 0x8B1A, --(謚)
+ [0x4B4B] = 0x8AE1, --(諡)
+ [0x4B4C] = 0x8B16, --(謖)
+ [0x4B4D] = 0x8B10, --(謐)
+ [0x4B4E] = 0x8B17, --(謗)
+ [0x4B4F] = 0x8B20, --(謠)
+ [0x4B50] = 0x8B33, --(謳)
+ [0x4B51] = 0x97AB, --(鞫)
+ [0x4B52] = 0x8B26, --(謦)
+ [0x4B53] = 0x8B2B, --(謫)
+ [0x4B54] = 0x8B3E, --(謾)
+ [0x4B55] = 0x8B28, --(謨)
+ [0x4B56] = 0x8B41, --(譁)
+ [0x4B57] = 0x8B4C, --(譌)
+ [0x4B58] = 0x8B4F, --(譏)
+ [0x4B59] = 0x8B4E, --(譎)
+ [0x4B5A] = 0x8B49, --(證)
+ [0x4B5B] = 0x8B56, --(譖)
+ [0x4B5C] = 0x8B5B, --(譛)
+ [0x4B5D] = 0x8B5A, --(譚)
+ [0x4B5E] = 0x8B6B, --(譫)
+ [0x4C01] = 0x8B5F, --(譟)
+ [0x4C02] = 0x8B6C, --(譬)
+ [0x4C03] = 0x8B6F, --(譯)
+ [0x4C04] = 0x8B74, --(譴)
+ [0x4C05] = 0x8B7D, --(譽)
+ [0x4C06] = 0x8B80, --(讀)
+ [0x4C07] = 0x8B8C, --(讌)
+ [0x4C08] = 0x8B8E, --(讎)
+ [0x4C09] = 0x8B92, --(讒)
+ [0x4C0A] = 0x8B93, --(讓)
+ [0x4C0B] = 0x8B96, --(讖)
+ [0x4C0C] = 0x8B99, --(讙)
+ [0x4C0D] = 0x8B9A, --(讚)
+ [0x4C0E] = 0x8C3A, --(谺)
+ [0x4C0F] = 0x8C41, --(豁)
+ [0x4C10] = 0x8C3F, --(谿)
+ [0x4C11] = 0x8C48, --(豈)
+ [0x4C12] = 0x8C4C, --(豌)
+ [0x4C13] = 0x8C4E, --(豎)
+ [0x4C14] = 0x8C50, --(豐)
+ [0x4C15] = 0x8C55, --(豕)
+ [0x4C16] = 0x8C62, --(豢)
+ [0x4C17] = 0x8C6C, --(豬)
+ [0x4C18] = 0x8C78, --(豸)
+ [0x4C19] = 0x8C7A, --(豺)
+ [0x4C1A] = 0x8C82, --(貂)
+ [0x4C1B] = 0x8C89, --(貉)
+ [0x4C1C] = 0x8C85, --(貅)
+ [0x4C1D] = 0x8C8A, --(貊)
+ [0x4C1E] = 0x8C8D, --(貍)
+ [0x4C1F] = 0x8C8E, --(貎)
+ [0x4C20] = 0x8C94, --(貔)
+ [0x4C21] = 0x8C7C, --(豼)
+ [0x4C22] = 0x8C98, --(貘)
+ [0x4C23] = 0x621D, --(戝)
+ [0x4C24] = 0x8CAD, --(貭)
+ [0x4C25] = 0x8CAA, --(貪)
+ [0x4C26] = 0x8CBD, --(貽)
+ [0x4C27] = 0x8CB2, --(貲)
+ [0x4C28] = 0x8CB3, --(貳)
+ [0x4C29] = 0x8CAE, --(貮)
+ [0x4C2A] = 0x8CB6, --(貶)
+ [0x4C2B] = 0x8CC8, --(賈)
+ [0x4C2C] = 0x8CC1, --(賁)
+ [0x4C2D] = 0x8CE4, --(賤)
+ [0x4C2E] = 0x8CE3, --(賣)
+ [0x4C2F] = 0x8CDA, --(賚)
+ [0x4C30] = 0x8CFD, --(賽)
+ [0x4C31] = 0x8CFA, --(賺)
+ [0x4C32] = 0x8CFB, --(賻)
+ [0x4C33] = 0x8D04, --(贄)
+ [0x4C34] = 0x8D05, --(贅)
+ [0x4C35] = 0x8D0A, --(贊)
+ [0x4C36] = 0x8D07, --(贇)
+ [0x4C37] = 0x8D0F, --(贏)
+ [0x4C38] = 0x8D0D, --(贍)
+ [0x4C39] = 0x8D10, --(贐)
+ [0x4C3A] = 0x9F4E, --(齎)
+ [0x4C3B] = 0x8D13, --(贓)
+ [0x4C3C] = 0x8CCD, --(賍)
+ [0x4C3D] = 0x8D14, --(贔)
+ [0x4C3E] = 0x8D16, --(贖)
+ [0x4C3F] = 0x8D67, --(赧)
+ [0x4C40] = 0x8D6D, --(赭)
+ [0x4C41] = 0x8D71, --(赱)
+ [0x4C42] = 0x8D73, --(赳)
+ [0x4C43] = 0x8D81, --(趁)
+ [0x4C44] = 0x8D99, --(趙)
+ [0x4C45] = 0x8DC2, --(跂)
+ [0x4C46] = 0x8DBE, --(趾)
+ [0x4C47] = 0x8DBA, --(趺)
+ [0x4C48] = 0x8DCF, --(跏)
+ [0x4C49] = 0x8DDA, --(跚)
+ [0x4C4A] = 0x8DD6, --(跖)
+ [0x4C4B] = 0x8DCC, --(跌)
+ [0x4C4C] = 0x8DDB, --(跛)
+ [0x4C4D] = 0x8DCB, --(跋)
+ [0x4C4E] = 0x8DEA, --(跪)
+ [0x4C4F] = 0x8DEB, --(跫)
+ [0x4C50] = 0x8DDF, --(跟)
+ [0x4C51] = 0x8DE3, --(跣)
+ [0x4C52] = 0x8DFC, --(跼)
+ [0x4C53] = 0x8E08, --(踈)
+ [0x4C54] = 0x8E09, --(踉)
+ [0x4C55] = 0x8DFF, --(跿)
+ [0x4C56] = 0x8E1D, --(踝)
+ [0x4C57] = 0x8E1E, --(踞)
+ [0x4C58] = 0x8E10, --(踐)
+ [0x4C59] = 0x8E1F, --(踟)
+ [0x4C5A] = 0x8E42, --(蹂)
+ [0x4C5B] = 0x8E35, --(踵)
+ [0x4C5C] = 0x8E30, --(踰)
+ [0x4C5D] = 0x8E34, --(踴)
+ [0x4C5E] = 0x8E4A, --(蹊)
+ [0x4D01] = 0x8E47, --(蹇)
+ [0x4D02] = 0x8E49, --(蹉)
+ [0x4D03] = 0x8E4C, --(蹌)
+ [0x4D04] = 0x8E50, --(蹐)
+ [0x4D05] = 0x8E48, --(蹈)
+ [0x4D06] = 0x8E59, --(蹙)
+ [0x4D07] = 0x8E64, --(蹤)
+ [0x4D08] = 0x8E60, --(蹠)
+ [0x4D09] = 0x8E2A, --(踪)
+ [0x4D0A] = 0x8E63, --(蹣)
+ [0x4D0B] = 0x8E55, --(蹕)
+ [0x4D0C] = 0x8E76, --(蹶)
+ [0x4D0D] = 0x8E72, --(蹲)
+ [0x4D0E] = 0x8E7C, --(蹼)
+ [0x4D0F] = 0x8E81, --(躁)
+ [0x4D10] = 0x8E87, --(躇)
+ [0x4D11] = 0x8E85, --(躅)
+ [0x4D12] = 0x8E84, --(躄)
+ [0x4D13] = 0x8E8B, --(躋)
+ [0x4D14] = 0x8E8A, --(躊)
+ [0x4D15] = 0x8E93, --(躓)
+ [0x4D16] = 0x8E91, --(躑)
+ [0x4D17] = 0x8E94, --(躔)
+ [0x4D18] = 0x8E99, --(躙)
+ [0x4D19] = 0x8EAA, --(躪)
+ [0x4D1A] = 0x8EA1, --(躡)
+ [0x4D1B] = 0x8EAC, --(躬)
+ [0x4D1C] = 0x8EB0, --(躰)
+ [0x4D1D] = 0x8EC6, --(軆)
+ [0x4D1E] = 0x8EB1, --(躱)
+ [0x4D1F] = 0x8EBE, --(躾)
+ [0x4D20] = 0x8EC5, --(軅)
+ [0x4D21] = 0x8EC8, --(軈)
+ [0x4D22] = 0x8ECB, --(軋)
+ [0x4D23] = 0x8EDB, --(軛)
+ [0x4D24] = 0x8EE3, --(軣)
+ [0x4D25] = 0x8EFC, --(軼)
+ [0x4D26] = 0x8EFB, --(軻)
+ [0x4D27] = 0x8EEB, --(軫)
+ [0x4D28] = 0x8EFE, --(軾)
+ [0x4D29] = 0x8F0A, --(輊)
+ [0x4D2A] = 0x8F05, --(輅)
+ [0x4D2B] = 0x8F15, --(輕)
+ [0x4D2C] = 0x8F12, --(輒)
+ [0x4D2D] = 0x8F19, --(輙)
+ [0x4D2E] = 0x8F13, --(輓)
+ [0x4D2F] = 0x8F1C, --(輜)
+ [0x4D30] = 0x8F1F, --(輟)
+ [0x4D31] = 0x8F1B, --(輛)
+ [0x4D32] = 0x8F0C, --(輌)
+ [0x4D33] = 0x8F26, --(輦)
+ [0x4D34] = 0x8F33, --(輳)
+ [0x4D35] = 0x8F3B, --(輻)
+ [0x4D36] = 0x8F39, --(輹)
+ [0x4D37] = 0x8F45, --(轅)
+ [0x4D38] = 0x8F42, --(轂)
+ [0x4D39] = 0x8F3E, --(輾)
+ [0x4D3A] = 0x8F4C, --(轌)
+ [0x4D3B] = 0x8F49, --(轉)
+ [0x4D3C] = 0x8F46, --(轆)
+ [0x4D3D] = 0x8F4E, --(轎)
+ [0x4D3E] = 0x8F57, --(轗)
+ [0x4D3F] = 0x8F5C, --(轜)
+ [0x4D40] = 0x8F62, --(轢)
+ [0x4D41] = 0x8F63, --(轣)
+ [0x4D42] = 0x8F64, --(轤)
+ [0x4D43] = 0x8F9C, --(辜)
+ [0x4D44] = 0x8F9F, --(辟)
+ [0x4D45] = 0x8FA3, --(辣)
+ [0x4D46] = 0x8FAD, --(辭)
+ [0x4D47] = 0x8FAF, --(辯)
+ [0x4D48] = 0x8FB7, --(辷)
+ [0x4D49] = 0x8FDA, --(迚)
+ [0x4D4A] = 0x8FE5, --(迥)
+ [0x4D4B] = 0x8FE2, --(迢)
+ [0x4D4C] = 0x8FEA, --(迪)
+ [0x4D4D] = 0x8FEF, --(迯)
+ [0x4D4E] = 0x9087, --(邇)
+ [0x4D4F] = 0x8FF4, --(迴)
+ [0x4D50] = 0x9005, --(逅)
+ [0x4D51] = 0x8FF9, --(迹)
+ [0x4D52] = 0x8FFA, --(迺)
+ [0x4D53] = 0x9011, --(逑)
+ [0x4D54] = 0x9015, --(逕)
+ [0x4D55] = 0x9021, --(逡)
+ [0x4D56] = 0x900D, --(逍)
+ [0x4D57] = 0x901E, --(逞)
+ [0x4D58] = 0x9016, --(逖)
+ [0x4D59] = 0x900B, --(逋)
+ [0x4D5A] = 0x9027, --(逧)
+ [0x4D5B] = 0x9036, --(逶)
+ [0x4D5C] = 0x9035, --(逵)
+ [0x4D5D] = 0x9039, --(逹)
+ [0x4D5E] = 0x8FF8, --(迸)
+ [0x4E01] = 0x904F, --(遏)
+ [0x4E02] = 0x9050, --(遐)
+ [0x4E03] = 0x9051, --(遑)
+ [0x4E04] = 0x9052, --(遒)
+ [0x4E05] = 0x900E, --(逎)
+ [0x4E06] = 0x9049, --(遉)
+ [0x4E07] = 0x903E, --(逾)
+ [0x4E08] = 0x9056, --(遖)
+ [0x4E09] = 0x9058, --(遘)
+ [0x4E0A] = 0x905E, --(遞)
+ [0x4E0B] = 0x9068, --(遨)
+ [0x4E0C] = 0x906F, --(遯)
+ [0x4E0D] = 0x9076, --(遶)
+ [0x4E0E] = 0x96A8, --(隨)
+ [0x4E0F] = 0x9072, --(遲)
+ [0x4E10] = 0x9082, --(邂)
+ [0x4E11] = 0x907D, --(遽)
+ [0x4E12] = 0x9081, --(邁)
+ [0x4E13] = 0x9080, --(邀)
+ [0x4E14] = 0x908A, --(邊)
+ [0x4E15] = 0x9089, --(邉)
+ [0x4E16] = 0x908F, --(邏)
+ [0x4E17] = 0x90A8, --(邨)
+ [0x4E18] = 0x90AF, --(邯)
+ [0x4E19] = 0x90B1, --(邱)
+ [0x4E1A] = 0x90B5, --(邵)
+ [0x4E1B] = 0x90E2, --(郢)
+ [0x4E1C] = 0x90E4, --(郤)
+ [0x4E1D] = 0x6248, --(扈)
+ [0x4E1E] = 0x90DB, --(郛)
+ [0x4E1F] = 0x9102, --(鄂)
+ [0x4E20] = 0x9112, --(鄒)
+ [0x4E21] = 0x9119, --(鄙)
+ [0x4E22] = 0x9132, --(鄲)
+ [0x4E23] = 0x9130, --(鄰)
+ [0x4E24] = 0x914A, --(酊)
+ [0x4E25] = 0x9156, --(酖)
+ [0x4E26] = 0x9158, --(酘)
+ [0x4E27] = 0x9163, --(酣)
+ [0x4E28] = 0x9165, --(酥)
+ [0x4E29] = 0x9169, --(酩)
+ [0x4E2A] = 0x9173, --(酳)
+ [0x4E2B] = 0x9172, --(酲)
+ [0x4E2C] = 0x918B, --(醋)
+ [0x4E2D] = 0x9189, --(醉)
+ [0x4E2E] = 0x9182, --(醂)
+ [0x4E2F] = 0x91A2, --(醢)
+ [0x4E30] = 0x91AB, --(醫)
+ [0x4E31] = 0x91AF, --(醯)
+ [0x4E32] = 0x91AA, --(醪)
+ [0x4E33] = 0x91B5, --(醵)
+ [0x4E34] = 0x91B4, --(醴)
+ [0x4E35] = 0x91BA, --(醺)
+ [0x4E36] = 0x91C0, --(釀)
+ [0x4E37] = 0x91C1, --(釁)
+ [0x4E38] = 0x91C9, --(釉)
+ [0x4E39] = 0x91CB, --(釋)
+ [0x4E3A] = 0x91D0, --(釐)
+ [0x4E3B] = 0x91D6, --(釖)
+ [0x4E3C] = 0x91DF, --(釟)
+ [0x4E3D] = 0x91E1, --(釡)
+ [0x4E3E] = 0x91DB, --(釛)
+ [0x4E3F] = 0x91FC, --(釼)
+ [0x4E40] = 0x91F5, --(釵)
+ [0x4E41] = 0x91F6, --(釶)
+ [0x4E42] = 0x921E, --(鈞)
+ [0x4E43] = 0x91FF, --(釿)
+ [0x4E44] = 0x9214, --(鈔)
+ [0x4E45] = 0x922C, --(鈬)
+ [0x4E46] = 0x9215, --(鈕)
+ [0x4E47] = 0x9211, --(鈑)
+ [0x4E48] = 0x925E, --(鉞)
+ [0x4E49] = 0x9257, --(鉗)
+ [0x4E4A] = 0x9245, --(鉅)
+ [0x4E4B] = 0x9249, --(鉉)
+ [0x4E4C] = 0x9264, --(鉤)
+ [0x4E4D] = 0x9248, --(鉈)
+ [0x4E4E] = 0x9295, --(銕)
+ [0x4E4F] = 0x923F, --(鈿)
+ [0x4E50] = 0x924B, --(鉋)
+ [0x4E51] = 0x9250, --(鉐)
+ [0x4E52] = 0x929C, --(銜)
+ [0x4E53] = 0x9296, --(銖)
+ [0x4E54] = 0x9293, --(銓)
+ [0x4E55] = 0x929B, --(銛)
+ [0x4E56] = 0x925A, --(鉚)
+ [0x4E57] = 0x92CF, --(鋏)
+ [0x4E58] = 0x92B9, --(銹)
+ [0x4E59] = 0x92B7, --(銷)
+ [0x4E5A] = 0x92E9, --(鋩)
+ [0x4E5B] = 0x930F, --(錏)
+ [0x4E5C] = 0x92FA, --(鋺)
+ [0x4E5D] = 0x9344, --(鍄)
+ [0x4E5E] = 0x932E, --(錮)
+ [0x4F01] = 0x9319, --(錙)
+ [0x4F02] = 0x9322, --(錢)
+ [0x4F03] = 0x931A, --(錚)
+ [0x4F04] = 0x9323, --(錣)
+ [0x4F05] = 0x933A, --(錺)
+ [0x4F06] = 0x9335, --(錵)
+ [0x4F07] = 0x933B, --(錻)
+ [0x4F08] = 0x935C, --(鍜)
+ [0x4F09] = 0x9360, --(鍠)
+ [0x4F0A] = 0x937C, --(鍼)
+ [0x4F0B] = 0x936E, --(鍮)
+ [0x4F0C] = 0x9356, --(鍖)
+ [0x4F0D] = 0x93B0, --(鎰)
+ [0x4F0E] = 0x93AC, --(鎬)
+ [0x4F0F] = 0x93AD, --(鎭)
+ [0x4F10] = 0x9394, --(鎔)
+ [0x4F11] = 0x93B9, --(鎹)
+ [0x4F12] = 0x93D6, --(鏖)
+ [0x4F13] = 0x93D7, --(鏗)
+ [0x4F14] = 0x93E8, --(鏨)
+ [0x4F15] = 0x93E5, --(鏥)
+ [0x4F16] = 0x93D8, --(鏘)
+ [0x4F17] = 0x93C3, --(鏃)
+ [0x4F18] = 0x93DD, --(鏝)
+ [0x4F19] = 0x93D0, --(鏐)
+ [0x4F1A] = 0x93C8, --(鏈)
+ [0x4F1B] = 0x93E4, --(鏤)
+ [0x4F1C] = 0x941A, --(鐚)
+ [0x4F1D] = 0x9414, --(鐔)
+ [0x4F1E] = 0x9413, --(鐓)
+ [0x4F1F] = 0x9403, --(鐃)
+ [0x4F20] = 0x9407, --(鐇)
+ [0x4F21] = 0x9410, --(鐐)
+ [0x4F22] = 0x9436, --(鐶)
+ [0x4F23] = 0x942B, --(鐫)
+ [0x4F24] = 0x9435, --(鐵)
+ [0x4F25] = 0x9421, --(鐡)
+ [0x4F26] = 0x943A, --(鐺)
+ [0x4F27] = 0x9441, --(鑁)
+ [0x4F28] = 0x9452, --(鑒)
+ [0x4F29] = 0x9444, --(鑄)
+ [0x4F2A] = 0x945B, --(鑛)
+ [0x4F2B] = 0x9460, --(鑠)
+ [0x4F2C] = 0x9462, --(鑢)
+ [0x4F2D] = 0x945E, --(鑞)
+ [0x4F2E] = 0x946A, --(鑪)
+ [0x4F2F] = 0x9229, --(鈩)
+ [0x4F30] = 0x9470, --(鑰)
+ [0x4F31] = 0x9475, --(鑵)
+ [0x4F32] = 0x9477, --(鑷)
+ [0x4F33] = 0x947D, --(鑽)
+ [0x4F34] = 0x945A, --(鑚)
+ [0x4F35] = 0x947C, --(鑼)
+ [0x4F36] = 0x947E, --(鑾)
+ [0x4F37] = 0x9481, --(钁)
+ [0x4F38] = 0x947F, --(鑿)
+ [0x4F39] = 0x9582, --(閂)
+ [0x4F3A] = 0x9587, --(閇)
+ [0x4F3B] = 0x958A, --(閊)
+ [0x4F3C] = 0x9594, --(閔)
+ [0x4F3D] = 0x9596, --(閖)
+ [0x4F3E] = 0x9598, --(閘)
+ [0x4F3F] = 0x9599, --(閙)
+ [0x4F40] = 0x95A0, --(閠)
+ [0x4F41] = 0x95A8, --(閨)
+ [0x4F42] = 0x95A7, --(閧)
+ [0x4F43] = 0x95AD, --(閭)
+ [0x4F44] = 0x95BC, --(閼)
+ [0x4F45] = 0x95BB, --(閻)
+ [0x4F46] = 0x95B9, --(閹)
+ [0x4F47] = 0x95BE, --(閾)
+ [0x4F48] = 0x95CA, --(闊)
+ [0x4F49] = 0x6FF6, --(濶)
+ [0x4F4A] = 0x95C3, --(闃)
+ [0x4F4B] = 0x95CD, --(闍)
+ [0x4F4C] = 0x95CC, --(闌)
+ [0x4F4D] = 0x95D5, --(闕)
+ [0x4F4E] = 0x95D4, --(闔)
+ [0x4F4F] = 0x95D6, --(闖)
+ [0x4F50] = 0x95DC, --(關)
+ [0x4F51] = 0x95E1, --(闡)
+ [0x4F52] = 0x95E5, --(闥)
+ [0x4F53] = 0x95E2, --(闢)
+ [0x4F54] = 0x9621, --(阡)
+ [0x4F55] = 0x9628, --(阨)
+ [0x4F56] = 0x962E, --(阮)
+ [0x4F57] = 0x962F, --(阯)
+ [0x4F58] = 0x9642, --(陂)
+ [0x4F59] = 0x964C, --(陌)
+ [0x4F5A] = 0x964F, --(陏)
+ [0x4F5B] = 0x964B, --(陋)
+ [0x4F5C] = 0x9677, --(陷)
+ [0x4F5D] = 0x965C, --(陜)
+ [0x4F5E] = 0x965E, --(陞)
+ [0x5001] = 0x965D, --(陝)
+ [0x5002] = 0x965F, --(陟)
+ [0x5003] = 0x9666, --(陦)
+ [0x5004] = 0x9672, --(陲)
+ [0x5005] = 0x966C, --(陬)
+ [0x5006] = 0x968D, --(隍)
+ [0x5007] = 0x9698, --(隘)
+ [0x5008] = 0x9695, --(隕)
+ [0x5009] = 0x9697, --(隗)
+ [0x500A] = 0x96AA, --(險)
+ [0x500B] = 0x96A7, --(隧)
+ [0x500C] = 0x96B1, --(隱)
+ [0x500D] = 0x96B2, --(隲)
+ [0x500E] = 0x96B0, --(隰)
+ [0x500F] = 0x96B4, --(隴)
+ [0x5010] = 0x96B6, --(隶)
+ [0x5011] = 0x96B8, --(隸)
+ [0x5012] = 0x96B9, --(隹)
+ [0x5013] = 0x96CE, --(雎)
+ [0x5014] = 0x96CB, --(雋)
+ [0x5015] = 0x96C9, --(雉)
+ [0x5016] = 0x96CD, --(雍)
+ [0x5017] = 0x894D, --(襍)
+ [0x5018] = 0x96DC, --(雜)
+ [0x5019] = 0x970D, --(霍)
+ [0x501A] = 0x96D5, --(雕)
+ [0x501B] = 0x96F9, --(雹)
+ [0x501C] = 0x9704, --(霄)
+ [0x501D] = 0x9706, --(霆)
+ [0x501E] = 0x9708, --(霈)
+ [0x501F] = 0x9713, --(霓)
+ [0x5020] = 0x970E, --(霎)
+ [0x5021] = 0x9711, --(霑)
+ [0x5022] = 0x970F, --(霏)
+ [0x5023] = 0x9716, --(霖)
+ [0x5024] = 0x9719, --(霙)
+ [0x5025] = 0x9724, --(霤)
+ [0x5026] = 0x972A, --(霪)
+ [0x5027] = 0x9730, --(霰)
+ [0x5028] = 0x9739, --(霹)
+ [0x5029] = 0x973D, --(霽)
+ [0x502A] = 0x973E, --(霾)
+ [0x502B] = 0x9744, --(靄)
+ [0x502C] = 0x9746, --(靆)
+ [0x502D] = 0x9748, --(靈)
+ [0x502E] = 0x9742, --(靂)
+ [0x502F] = 0x9749, --(靉)
+ [0x5030] = 0x975C, --(靜)
+ [0x5031] = 0x9760, --(靠)
+ [0x5032] = 0x9764, --(靤)
+ [0x5033] = 0x9766, --(靦)
+ [0x5034] = 0x9768, --(靨)
+ [0x5035] = 0x52D2, --(勒)
+ [0x5036] = 0x976B, --(靫)
+ [0x5037] = 0x9771, --(靱)
+ [0x5038] = 0x9779, --(靹)
+ [0x5039] = 0x9785, --(鞅)
+ [0x503A] = 0x977C, --(靼)
+ [0x503B] = 0x9781, --(鞁)
+ [0x503C] = 0x977A, --(靺)
+ [0x503D] = 0x9786, --(鞆)
+ [0x503E] = 0x978B, --(鞋)
+ [0x503F] = 0x978F, --(鞏)
+ [0x5040] = 0x9790, --(鞐)
+ [0x5041] = 0x979C, --(鞜)
+ [0x5042] = 0x97A8, --(鞨)
+ [0x5043] = 0x97A6, --(鞦)
+ [0x5044] = 0x97A3, --(鞣)
+ [0x5045] = 0x97B3, --(鞳)
+ [0x5046] = 0x97B4, --(鞴)
+ [0x5047] = 0x97C3, --(韃)
+ [0x5048] = 0x97C6, --(韆)
+ [0x5049] = 0x97C8, --(韈)
+ [0x504A] = 0x97CB, --(韋)
+ [0x504B] = 0x97DC, --(韜)
+ [0x504C] = 0x97ED, --(韭)
+ [0x504D] = 0x9F4F, --(齏)
+ [0x504E] = 0x97F2, --(韲)
+ [0x504F] = 0x7ADF, --(竟)
+ [0x5050] = 0x97F6, --(韶)
+ [0x5051] = 0x97F5, --(韵)
+ [0x5052] = 0x980F, --(頏)
+ [0x5053] = 0x980C, --(頌)
+ [0x5054] = 0x9838, --(頸)
+ [0x5055] = 0x9824, --(頤)
+ [0x5056] = 0x9821, --(頡)
+ [0x5057] = 0x9837, --(頷)
+ [0x5058] = 0x983D, --(頽)
+ [0x5059] = 0x9846, --(顆)
+ [0x505A] = 0x984F, --(顏)
+ [0x505B] = 0x984B, --(顋)
+ [0x505C] = 0x986B, --(顫)
+ [0x505D] = 0x986F, --(顯)
+ [0x505E] = 0x9870, --(顰)
+ [0x5101] = 0x9871, --(顱)
+ [0x5102] = 0x9874, --(顴)
+ [0x5103] = 0x9873, --(顳)
+ [0x5104] = 0x98AA, --(颪)
+ [0x5105] = 0x98AF, --(颯)
+ [0x5106] = 0x98B1, --(颱)
+ [0x5107] = 0x98B6, --(颶)
+ [0x5108] = 0x98C4, --(飄)
+ [0x5109] = 0x98C3, --(飃)
+ [0x510A] = 0x98C6, --(飆)
+ [0x510B] = 0x98E9, --(飩)
+ [0x510C] = 0x98EB, --(飫)
+ [0x510D] = 0x9903, --(餃)
+ [0x510E] = 0x9909, --(餉)
+ [0x510F] = 0x9912, --(餒)
+ [0x5110] = 0x9914, --(餔)
+ [0x5111] = 0x9918, --(餘)
+ [0x5112] = 0x9921, --(餡)
+ [0x5113] = 0x991D, --(餝)
+ [0x5114] = 0x991E, --(餞)
+ [0x5115] = 0x9924, --(餤)
+ [0x5116] = 0x9920, --(餠)
+ [0x5117] = 0x992C, --(餬)
+ [0x5118] = 0x992E, --(餮)
+ [0x5119] = 0x993D, --(餽)
+ [0x511A] = 0x993E, --(餾)
+ [0x511B] = 0x9942, --(饂)
+ [0x511C] = 0x9949, --(饉)
+ [0x511D] = 0x9945, --(饅)
+ [0x511E] = 0x9950, --(饐)
+ [0x511F] = 0x994B, --(饋)
+ [0x5120] = 0x9951, --(饑)
+ [0x5121] = 0x9952, --(饒)
+ [0x5122] = 0x994C, --(饌)
+ [0x5123] = 0x9955, --(饕)
+ [0x5124] = 0x9997, --(馗)
+ [0x5125] = 0x9998, --(馘)
+ [0x5126] = 0x99A5, --(馥)
+ [0x5127] = 0x99AD, --(馭)
+ [0x5128] = 0x99AE, --(馮)
+ [0x5129] = 0x99BC, --(馼)
+ [0x512A] = 0x99DF, --(駟)
+ [0x512B] = 0x99DB, --(駛)
+ [0x512C] = 0x99DD, --(駝)
+ [0x512D] = 0x99D8, --(駘)
+ [0x512E] = 0x99D1, --(駑)
+ [0x512F] = 0x99ED, --(駭)
+ [0x5130] = 0x99EE, --(駮)
+ [0x5131] = 0x99F1, --(駱)
+ [0x5132] = 0x99F2, --(駲)
+ [0x5133] = 0x99FB, --(駻)
+ [0x5134] = 0x99F8, --(駸)
+ [0x5135] = 0x9A01, --(騁)
+ [0x5136] = 0x9A0F, --(騏)
+ [0x5137] = 0x9A05, --(騅)
+ [0x5138] = 0x99E2, --(駢)
+ [0x5139] = 0x9A19, --(騙)
+ [0x513A] = 0x9A2B, --(騫)
+ [0x513B] = 0x9A37, --(騷)
+ [0x513C] = 0x9A45, --(驅)
+ [0x513D] = 0x9A42, --(驂)
+ [0x513E] = 0x9A40, --(驀)
+ [0x513F] = 0x9A43, --(驃)
+ [0x5140] = 0x9A3E, --(騾)
+ [0x5141] = 0x9A55, --(驕)
+ [0x5142] = 0x9A4D, --(驍)
+ [0x5143] = 0x9A5B, --(驛)
+ [0x5144] = 0x9A57, --(驗)
+ [0x5145] = 0x9A5F, --(驟)
+ [0x5146] = 0x9A62, --(驢)
+ [0x5147] = 0x9A65, --(驥)
+ [0x5148] = 0x9A64, --(驤)
+ [0x5149] = 0x9A69, --(驩)
+ [0x514A] = 0x9A6B, --(驫)
+ [0x514B] = 0x9A6A, --(驪)
+ [0x514C] = 0x9AAD, --(骭)
+ [0x514D] = 0x9AB0, --(骰)
+ [0x514E] = 0x9ABC, --(骼)
+ [0x514F] = 0x9AC0, --(髀)
+ [0x5150] = 0x9ACF, --(髏)
+ [0x5151] = 0x9AD1, --(髑)
+ [0x5152] = 0x9AD3, --(髓)
+ [0x5153] = 0x9AD4, --(體)
+ [0x5154] = 0x9ADE, --(髞)
+ [0x5155] = 0x9ADF, --(髟)
+ [0x5156] = 0x9AE2, --(髢)
+ [0x5157] = 0x9AE3, --(髣)
+ [0x5158] = 0x9AE6, --(髦)
+ [0x5159] = 0x9AEF, --(髯)
+ [0x515A] = 0x9AEB, --(髫)
+ [0x515B] = 0x9AEE, --(髮)
+ [0x515C] = 0x9AF4, --(髴)
+ [0x515D] = 0x9AF1, --(髱)
+ [0x515E] = 0x9AF7, --(髷)
+ [0x5201] = 0x9AFB, --(髻)
+ [0x5202] = 0x9B06, --(鬆)
+ [0x5203] = 0x9B18, --(鬘)
+ [0x5204] = 0x9B1A, --(鬚)
+ [0x5205] = 0x9B1F, --(鬟)
+ [0x5206] = 0x9B22, --(鬢)
+ [0x5207] = 0x9B23, --(鬣)
+ [0x5208] = 0x9B25, --(鬥)
+ [0x5209] = 0x9B27, --(鬧)
+ [0x520A] = 0x9B28, --(鬨)
+ [0x520B] = 0x9B29, --(鬩)
+ [0x520C] = 0x9B2A, --(鬪)
+ [0x520D] = 0x9B2E, --(鬮)
+ [0x520E] = 0x9B2F, --(鬯)
+ [0x520F] = 0x9B32, --(鬲)
+ [0x5210] = 0x9B44, --(魄)
+ [0x5211] = 0x9B43, --(魃)
+ [0x5212] = 0x9B4F, --(魏)
+ [0x5213] = 0x9B4D, --(魍)
+ [0x5214] = 0x9B4E, --(魎)
+ [0x5215] = 0x9B51, --(魑)
+ [0x5216] = 0x9B58, --(魘)
+ [0x5217] = 0x9B74, --(魴)
+ [0x5218] = 0x9B93, --(鮓)
+ [0x5219] = 0x9B83, --(鮃)
+ [0x521A] = 0x9B91, --(鮑)
+ [0x521B] = 0x9B96, --(鮖)
+ [0x521C] = 0x9B97, --(鮗)
+ [0x521D] = 0x9B9F, --(鮟)
+ [0x521E] = 0x9BA0, --(鮠)
+ [0x521F] = 0x9BA8, --(鮨)
+ [0x5220] = 0x9BB4, --(鮴)
+ [0x5221] = 0x9BC0, --(鯀)
+ [0x5222] = 0x9BCA, --(鯊)
+ [0x5223] = 0x9BB9, --(鮹)
+ [0x5224] = 0x9BC6, --(鯆)
+ [0x5225] = 0x9BCF, --(鯏)
+ [0x5226] = 0x9BD1, --(鯑)
+ [0x5227] = 0x9BD2, --(鯒)
+ [0x5228] = 0x9BE3, --(鯣)
+ [0x5229] = 0x9BE2, --(鯢)
+ [0x522A] = 0x9BE4, --(鯤)
+ [0x522B] = 0x9BD4, --(鯔)
+ [0x522C] = 0x9BE1, --(鯡)
+ [0x522D] = 0x9C3A, --(鰺)
+ [0x522E] = 0x9BF2, --(鯲)
+ [0x522F] = 0x9BF1, --(鯱)
+ [0x5230] = 0x9BF0, --(鯰)
+ [0x5231] = 0x9C15, --(鰕)
+ [0x5232] = 0x9C14, --(鰔)
+ [0x5233] = 0x9C09, --(鰉)
+ [0x5234] = 0x9C13, --(鰓)
+ [0x5235] = 0x9C0C, --(鰌)
+ [0x5236] = 0x9C06, --(鰆)
+ [0x5237] = 0x9C08, --(鰈)
+ [0x5238] = 0x9C12, --(鰒)
+ [0x5239] = 0x9C0A, --(鰊)
+ [0x523A] = 0x9C04, --(鰄)
+ [0x523B] = 0x9C2E, --(鰮)
+ [0x523C] = 0x9C1B, --(鰛)
+ [0x523D] = 0x9C25, --(鰥)
+ [0x523E] = 0x9C24, --(鰤)
+ [0x523F] = 0x9C21, --(鰡)
+ [0x5240] = 0x9C30, --(鰰)
+ [0x5241] = 0x9C47, --(鱇)
+ [0x5242] = 0x9C32, --(鰲)
+ [0x5243] = 0x9C46, --(鱆)
+ [0x5244] = 0x9C3E, --(鰾)
+ [0x5245] = 0x9C5A, --(鱚)
+ [0x5246] = 0x9C60, --(鱠)
+ [0x5247] = 0x9C67, --(鱧)
+ [0x5248] = 0x9C76, --(鱶)
+ [0x5249] = 0x9C78, --(鱸)
+ [0x524A] = 0x9CE7, --(鳧)
+ [0x524B] = 0x9CEC, --(鳬)
+ [0x524C] = 0x9CF0, --(鳰)
+ [0x524D] = 0x9D09, --(鴉)
+ [0x524E] = 0x9D08, --(鴈)
+ [0x524F] = 0x9CEB, --(鳫)
+ [0x5250] = 0x9D03, --(鴃)
+ [0x5251] = 0x9D06, --(鴆)
+ [0x5252] = 0x9D2A, --(鴪)
+ [0x5253] = 0x9D26, --(鴦)
+ [0x5254] = 0x9DAF, --(鶯)
+ [0x5255] = 0x9D23, --(鴣)
+ [0x5256] = 0x9D1F, --(鴟)
+ [0x5257] = 0x9D44, --(鵄)
+ [0x5258] = 0x9D15, --(鴕)
+ [0x5259] = 0x9D12, --(鴒)
+ [0x525A] = 0x9D41, --(鵁)
+ [0x525B] = 0x9D3F, --(鴿)
+ [0x525C] = 0x9D3E, --(鴾)
+ [0x525D] = 0x9D46, --(鵆)
+ [0x525E] = 0x9D48, --(鵈)
+ [0x5301] = 0x9D5D, --(鵝)
+ [0x5302] = 0x9D5E, --(鵞)
+ [0x5303] = 0x9D64, --(鵤)
+ [0x5304] = 0x9D51, --(鵑)
+ [0x5305] = 0x9D50, --(鵐)
+ [0x5306] = 0x9D59, --(鵙)
+ [0x5307] = 0x9D72, --(鵲)
+ [0x5308] = 0x9D89, --(鶉)
+ [0x5309] = 0x9D87, --(鶇)
+ [0x530A] = 0x9DAB, --(鶫)
+ [0x530B] = 0x9D6F, --(鵯)
+ [0x530C] = 0x9D7A, --(鵺)
+ [0x530D] = 0x9D9A, --(鶚)
+ [0x530E] = 0x9DA4, --(鶤)
+ [0x530F] = 0x9DA9, --(鶩)
+ [0x5310] = 0x9DB2, --(鶲)
+ [0x5311] = 0x9DC4, --(鷄)
+ [0x5312] = 0x9DC1, --(鷁)
+ [0x5313] = 0x9DBB, --(鶻)
+ [0x5314] = 0x9DB8, --(鶸)
+ [0x5315] = 0x9DBA, --(鶺)
+ [0x5316] = 0x9DC6, --(鷆)
+ [0x5317] = 0x9DCF, --(鷏)
+ [0x5318] = 0x9DC2, --(鷂)
+ [0x5319] = 0x9DD9, --(鷙)
+ [0x531A] = 0x9DD3, --(鷓)
+ [0x531B] = 0x9DF8, --(鷸)
+ [0x531C] = 0x9DE6, --(鷦)
+ [0x531D] = 0x9DED, --(鷭)
+ [0x531E] = 0x9DEF, --(鷯)
+ [0x531F] = 0x9DFD, --(鷽)
+ [0x5320] = 0x9E1A, --(鸚)
+ [0x5321] = 0x9E1B, --(鸛)
+ [0x5322] = 0x9E1E, --(鸞)
+ [0x5323] = 0x9E75, --(鹵)
+ [0x5324] = 0x9E79, --(鹹)
+ [0x5325] = 0x9E7D, --(鹽)
+ [0x5326] = 0x9E81, --(麁)
+ [0x5327] = 0x9E88, --(麈)
+ [0x5328] = 0x9E8B, --(麋)
+ [0x5329] = 0x9E8C, --(麌)
+ [0x532A] = 0x9E92, --(麒)
+ [0x532B] = 0x9E95, --(麕)
+ [0x532C] = 0x9E91, --(麑)
+ [0x532D] = 0x9E9D, --(麝)
+ [0x532E] = 0x9EA5, --(麥)
+ [0x532F] = 0x9EA9, --(麩)
+ [0x5330] = 0x9EB8, --(麸)
+ [0x5331] = 0x9EAA, --(麪)
+ [0x5332] = 0x9EAD, --(麭)
+ [0x5333] = 0x9761, --(靡)
+ [0x5334] = 0x9ECC, --(黌)
+ [0x5335] = 0x9ECE, --(黎)
+ [0x5336] = 0x9ECF, --(黏)
+ [0x5337] = 0x9ED0, --(黐)
+ [0x5338] = 0x9ED4, --(黔)
+ [0x5339] = 0x9EDC, --(黜)
+ [0x533A] = 0x9EDE, --(點)
+ [0x533B] = 0x9EDD, --(黝)
+ [0x533C] = 0x9EE0, --(黠)
+ [0x533D] = 0x9EE5, --(黥)
+ [0x533E] = 0x9EE8, --(黨)
+ [0x533F] = 0x9EEF, --(黯)
+ [0x5340] = 0x9EF4, --(黴)
+ [0x5341] = 0x9EF6, --(黶)
+ [0x5342] = 0x9EF7, --(黷)
+ [0x5343] = 0x9EF9, --(黹)
+ [0x5344] = 0x9EFB, --(黻)
+ [0x5345] = 0x9EFC, --(黼)
+ [0x5346] = 0x9EFD, --(黽)
+ [0x5347] = 0x9F07, --(鼇)
+ [0x5348] = 0x9F08, --(鼈)
+ [0x5349] = 0x76B7, --(皷)
+ [0x534A] = 0x9F15, --(鼕)
+ [0x534B] = 0x9F21, --(鼡)
+ [0x534C] = 0x9F2C, --(鼬)
+ [0x534D] = 0x9F3E, --(鼾)
+ [0x534E] = 0x9F4A, --(齊)
+ [0x534F] = 0x9F52, --(齒)
+ [0x5350] = 0x9F54, --(齔)
+ [0x5351] = 0x9F63, --(齣)
+ [0x5352] = 0x9F5F, --(齟)
+ [0x5353] = 0x9F60, --(齠)
+ [0x5354] = 0x9F61, --(齡)
+ [0x5355] = 0x9F66, --(齦)
+ [0x5356] = 0x9F67, --(齧)
+ [0x5357] = 0x9F6C, --(齬)
+ [0x5358] = 0x9F6A, --(齪)
+ [0x5359] = 0x9F77, --(齷)
+ [0x535A] = 0x9F72, --(齲)
+ [0x535B] = 0x9F76, --(齶)
+ [0x535C] = 0x9F95, --(龕)
+ [0x535D] = 0x9F9C, --(龜)
+ [0x535E] = 0x9FA0, --(龠)
+ [0x5401] = 0x582F, --(堯)
+ [0x5402] = 0x69C7, --(槇)
+ [0x5403] = 0x9059, --(遙)
+ [0x5404] = 0x7464, --(瑤)
+ [0x5405] = 0x51DC, --(凜)
+ [0x5406] = 0x7199, --(熙)
+}}
diff --git a/macros/luatex/generic/luatexja/src/ltj-kinsoku_make.tex b/macros/luatex/generic/luatexja/src/ltj-kinsoku_make.tex
new file mode 100644
index 0000000000..5d25ff0f11
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-kinsoku_make.tex
@@ -0,0 +1,456 @@
+%#!luatex ltj-kinsoku_make.tex
+%\tracingall
+\input luatexja.sty
+
+\catcode`\@=11
+\ltj@tempcnta="0%"
+\loop\ifnum\ltj@tempcnta<"100%"
+ \ltjsetparameter{alxspmode={\ltj@tempcnta,0}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta=`\0%"
+\loop\ifnum\ltj@tempcnta<`\:%"
+ \ltjsetparameter{alxspmode={\ltj@tempcnta,3}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta=`\A%"
+\loop\ifnum\ltj@tempcnta<`\[%"
+ \ltjsetparameter{alxspmode={\ltj@tempcnta,3}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta=`\a%"
+\loop\ifnum\ltj@tempcnta<`\{%"
+ \ltjsetparameter{alxspmode={\ltj@tempcnta,3}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta="2000%" General Punctuation
+\loop\ifnum\ltj@tempcnta<"2070%"
+ \ltjsetparameter{kcatcode={\ltj@tempcnta,1}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta="2500%" 罫線
+\loop\ifnum\ltj@tempcnta<"2580%"
+ \ltjsetparameter{alxspmode={\ltj@tempcnta,0}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta="3000%" CJK Symbols and Punctuation
+\loop\ifnum\ltj@tempcnta<"3040%"
+ \ltjsetparameter{kcatcode={\ltj@tempcnta,1}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+\ltj@tempcnta="FF00%" 半角・全角形
+\loop\ifnum\ltj@tempcnta<"FFF0%"
+ \ltjsetparameter{kcatcode={\ltj@tempcnta,1}}%
+ \advance\ltj@tempcnta by1
+\repeat
+
+%
+% 行頭、行末禁則パラメータ
+%
+% 1byte characters
+\ltjsetparameter{prebreakpenalty={`!,10000}}
+\ltjsetparameter{prebreakpenalty={`",10000}}
+\ltjsetparameter{postbreakpenalty={`\#,500}}
+\ltjsetparameter{postbreakpenalty={`\$,500}}
+\ltjsetparameter{prebreakpenalty={`\%,500}}
+\ltjsetparameter{prebreakpenalty={`\&,500}}
+\ltjsetparameter{postbreakpenalty={`\`,10000}}
+\ltjsetparameter{prebreakpenalty={`',10000}}
+\ltjsetparameter{prebreakpenalty={`),10000}}
+\ltjsetparameter{postbreakpenalty={`(,10000}}
+\ltjsetparameter{prebreakpenalty={`*,500}}
+\ltjsetparameter{prebreakpenalty={`+,500}}
+\ltjsetparameter{prebreakpenalty={`-,10000}}
+\ltjsetparameter{prebreakpenalty={`.,10000}}
+\ltjsetparameter{prebreakpenalty={44,10000}}
+\ltjsetparameter{prebreakpenalty={`/,500}}
+\ltjsetparameter{prebreakpenalty={`;,10000}}
+\ltjsetparameter{prebreakpenalty={`?,10000}}
+\ltjsetparameter{prebreakpenalty={`:,10000}}
+\ltjsetparameter{prebreakpenalty={`],10000}}
+\ltjsetparameter{postbreakpenalty={`[,10000}}
+%全角文字
+\ltjsetparameter{prebreakpenalty={`、,10000}}
+\ltjsetparameter{prebreakpenalty={`。,10000}}
+\ltjsetparameter{prebreakpenalty={`,,10000}}
+\ltjsetparameter{prebreakpenalty={`.,10000}}
+\ltjsetparameter{prebreakpenalty={`・,10000}}
+\ltjsetparameter{prebreakpenalty={`:,10000}}
+\ltjsetparameter{prebreakpenalty={`;,10000}}
+\ltjsetparameter{prebreakpenalty={`?,10000}}
+\ltjsetparameter{prebreakpenalty={`!,10000}}
+\ltjsetparameter{prebreakpenalty={`゛,10000}}%\jis"212B
+\ltjsetparameter{prebreakpenalty={`゜,10000}}%\jis"212C
+\ltjsetparameter{prebreakpenalty={`´,10000}}%\jis"212D
+\ltjsetparameter{postbreakpenalty={``,10000}}%\jis"212E
+\ltjsetparameter{prebreakpenalty={`々,10000}}%\jis"2139
+\ltjsetparameter{prebreakpenalty={`…,250}}%\jis"2144
+\ltjsetparameter{prebreakpenalty={`‥,250}}%\jis"2145
+\ltjsetparameter{postbreakpenalty={`‘,10000}}%\jis"2146
+\ltjsetparameter{prebreakpenalty={`’,10000}}%\jis"2147
+\ltjsetparameter{postbreakpenalty={`“,10000}}%\jis"2148
+\ltjsetparameter{prebreakpenalty={`”,10000}}%\jis"2149
+\ltjsetparameter{prebreakpenalty={`),10000}}
+\ltjsetparameter{postbreakpenalty={`(,10000}}
+\ltjsetparameter{prebreakpenalty={`},10000}}
+\ltjsetparameter{postbreakpenalty={`{,10000}}
+\ltjsetparameter{prebreakpenalty={`],10000}}
+\ltjsetparameter{postbreakpenalty={`[,10000}}
+%\ltjsetparameter{postbreakpenalty={`‘,10000}}
+%\ltjsetparameter{prebreakpenalty={`’,10000}}
+\ltjsetparameter{postbreakpenalty={`〔,10000}}%\jis"214C
+\ltjsetparameter{prebreakpenalty={`〕,10000}}%\jis"214D
+\ltjsetparameter{postbreakpenalty={`〈,10000}}%\jis"2152
+\ltjsetparameter{prebreakpenalty={`〉,10000}}%\jis"2153
+\ltjsetparameter{postbreakpenalty={`《,10000}}%\jis"2154
+\ltjsetparameter{prebreakpenalty={`》,10000}}%\jis"2155
+\ltjsetparameter{postbreakpenalty={`「,10000}}%\jis"2156
+\ltjsetparameter{prebreakpenalty={`」,10000}}%\jis"2157
+\ltjsetparameter{postbreakpenalty={`『,10000}}%\jis"2158
+\ltjsetparameter{prebreakpenalty={`』,10000}}%\jis"2159
+\ltjsetparameter{postbreakpenalty={`【,10000}}%\jis"215A
+\ltjsetparameter{prebreakpenalty={`】,10000}}%\jis"215B
+\ltjsetparameter{prebreakpenalty={`ー,10000}}
+\ltjsetparameter{prebreakpenalty={`+,200}}
+\ltjsetparameter{prebreakpenalty={`−,200}}% U+2212 MINUS SIGN
+\ltjsetparameter{prebreakpenalty={`-,200}}% U+FF0D FULLWIDTH HYPHEN-MINUS
+\ltjsetparameter{prebreakpenalty={`=,200}}
+\ltjsetparameter{postbreakpenalty={`#,200}}
+\ltjsetparameter{postbreakpenalty={`$,200}}
+\ltjsetparameter{prebreakpenalty={`%,200}}
+\ltjsetparameter{prebreakpenalty={`&,200}}
+\ltjsetparameter{prebreakpenalty={`ぁ,150}}
+\ltjsetparameter{prebreakpenalty={`ぃ,150}}
+\ltjsetparameter{prebreakpenalty={`ぅ,150}}
+\ltjsetparameter{prebreakpenalty={`ぇ,150}}
+\ltjsetparameter{prebreakpenalty={`ぉ,150}}
+\ltjsetparameter{prebreakpenalty={`っ,150}}
+\ltjsetparameter{prebreakpenalty={`ゃ,150}}
+\ltjsetparameter{prebreakpenalty={`ゅ,150}}
+\ltjsetparameter{prebreakpenalty={`ょ,150}}
+\ltjsetparameter{prebreakpenalty={`ゎ,150}}%\jis"246E
+\ltjsetparameter{prebreakpenalty={`ァ,150}}
+\ltjsetparameter{prebreakpenalty={`ィ,150}}
+\ltjsetparameter{prebreakpenalty={`ゥ,150}}
+\ltjsetparameter{prebreakpenalty={`ェ,150}}
+\ltjsetparameter{prebreakpenalty={`ォ,150}}
+\ltjsetparameter{prebreakpenalty={`ッ,150}}
+\ltjsetparameter{prebreakpenalty={`ャ,150}}
+\ltjsetparameter{prebreakpenalty={`ュ,150}}
+\ltjsetparameter{prebreakpenalty={`ョ,150}}
+\ltjsetparameter{prebreakpenalty={`ヮ,150}}%\jis"256E
+\ltjsetparameter{prebreakpenalty={`ヵ,150}}%\jis"2575
+\ltjsetparameter{prebreakpenalty={`ヶ,150}}%\jis"2576
+% kinsoku JIS X 0208 additional
+\ltjsetparameter{prebreakpenalty={`ヽ,10000}}
+\ltjsetparameter{prebreakpenalty={`ヾ,10000}}
+\ltjsetparameter{prebreakpenalty={`ゝ,10000}}
+\ltjsetparameter{prebreakpenalty={`ゞ,10000}}
+
+%
+% kinsoku JIS X 0213
+%
+\ltjsetparameter{prebreakpenalty={`〳,10000}}
+\ltjsetparameter{prebreakpenalty={`〴,10000}}
+\ltjsetparameter{prebreakpenalty={`〵,10000}}
+\ltjsetparameter{prebreakpenalty={`〻,10000}}
+\ltjsetparameter{postbreakpenalty={`⦅,10000}}
+\ltjsetparameter{prebreakpenalty={`⦆,10000}}
+\ltjsetparameter{postbreakpenalty={`⦅,10000}}
+\ltjsetparameter{prebreakpenalty={`⦆,10000}}
+\ltjsetparameter{postbreakpenalty={`〘,10000}}
+\ltjsetparameter{prebreakpenalty={`〙,10000}}
+\ltjsetparameter{postbreakpenalty={`〖,10000}}
+\ltjsetparameter{prebreakpenalty={`〗,10000}}
+\ltjsetparameter{postbreakpenalty={`«,10000}}
+\ltjsetparameter{prebreakpenalty={`»,10000}}
+\ltjsetparameter{postbreakpenalty={`〝,10000}}
+\ltjsetparameter{prebreakpenalty={`〟,10000}}
+\ltjsetparameter{prebreakpenalty={`‼,10000}}
+\ltjsetparameter{prebreakpenalty={`⁇,10000}}
+\ltjsetparameter{prebreakpenalty={`⁈,10000}}
+\ltjsetparameter{prebreakpenalty={`⁉,10000}}
+\ltjsetparameter{postbreakpenalty={`¡,10000}}
+\ltjsetparameter{postbreakpenalty={`¿,10000}}
+\ltjsetparameter{prebreakpenalty={`ː,10000}}
+\ltjsetparameter{prebreakpenalty={`·,10000}}
+\ltjsetparameter{prebreakpenalty={`ª,10000}}
+\ltjsetparameter{prebreakpenalty={`º,10000}}
+\ltjsetparameter{prebreakpenalty={`¹,10000}}
+\ltjsetparameter{prebreakpenalty={`²,10000}}
+\ltjsetparameter{prebreakpenalty={`³,10000}}
+\ltjsetparameter{postbreakpenalty={`€,10000}}
+\ltjsetparameter{prebreakpenalty={`ゕ,150}}
+\ltjsetparameter{prebreakpenalty={`ゖ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇰ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇱ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇲ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇳ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇴ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇵ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇶ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇷ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇸ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇹ,150}}
+%\ltjsetparameter{prebreakpenalty={`ㇷ゚,150}}
+\ltjsetparameter{prebreakpenalty={`ㇺ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇻ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇼ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇽ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇾ,150}}
+\ltjsetparameter{prebreakpenalty={`ㇿ,150}}
+%
+% kinsoku JIS X 0212
+%
+%\ltjsetparameter{postbreakpenalty={`¡,10000}}
+%\ltjsetparameter{postbreakpenalty={`¿,10000}}
+%\ltjsetparameter{prebreakpenalty={`º,10000}}
+%\ltjsetparameter{prebreakpenalty={`ª,10000}}
+\ltjsetparameter{prebreakpenalty={`™,10000}}
+%
+% kinsoku 半角片仮名
+%
+\ltjsetparameter{prebreakpenalty={`。,10000}}
+\ltjsetparameter{prebreakpenalty={`、,10000}}
+\ltjsetparameter{prebreakpenalty={`゙,10000}}
+\ltjsetparameter{prebreakpenalty={`゚,10000}}
+\ltjsetparameter{prebreakpenalty={`」,10000}}
+\ltjsetparameter{postbreakpenalty={`「,10000}}
+%
+% xspcode
+\ltjsetparameter{alxspmode={`(,preonly}}
+\ltjsetparameter{alxspmode={`),postonly}}
+\ltjsetparameter{alxspmode={`[,preonly}}
+\ltjsetparameter{alxspmode={`],postonly}}
+\ltjsetparameter{alxspmode={``,preonly}}
+\ltjsetparameter{alxspmode={`',postonly}}
+\ltjsetparameter{alxspmode={`;,postonly}}
+\ltjsetparameter{alxspmode={44,postonly}}
+\ltjsetparameter{alxspmode={`.,postonly}}
+% for 8bit Latin
+\ltjsetparameter{alxspmode={"80,allow}}
+\ltjsetparameter{alxspmode={"81,allow}}
+\ltjsetparameter{alxspmode={"82,allow}}
+\ltjsetparameter{alxspmode={"83,allow}}
+\ltjsetparameter{alxspmode={"84,allow}}
+\ltjsetparameter{alxspmode={"85,allow}}
+\ltjsetparameter{alxspmode={"86,allow}}
+\ltjsetparameter{alxspmode={"87,allow}}
+\ltjsetparameter{alxspmode={"88,allow}}
+\ltjsetparameter{alxspmode={"89,allow}}
+\ltjsetparameter{alxspmode={"8A,allow}}
+\ltjsetparameter{alxspmode={"8B,allow}}
+\ltjsetparameter{alxspmode={"8C,allow}}
+\ltjsetparameter{alxspmode={"8D,allow}}
+\ltjsetparameter{alxspmode={"8E,allow}}
+\ltjsetparameter{alxspmode={"8F,allow}}
+\ltjsetparameter{alxspmode={"90,allow}}
+\ltjsetparameter{alxspmode={"91,allow}}
+\ltjsetparameter{alxspmode={"92,allow}}
+\ltjsetparameter{alxspmode={"93,allow}}
+\ltjsetparameter{alxspmode={"94,allow}}
+\ltjsetparameter{alxspmode={"95,allow}}
+\ltjsetparameter{alxspmode={"96,allow}}
+\ltjsetparameter{alxspmode={"97,allow}}
+\ltjsetparameter{alxspmode={"98,allow}}
+\ltjsetparameter{alxspmode={"99,allow}}
+\ltjsetparameter{alxspmode={"9A,allow}}
+\ltjsetparameter{alxspmode={"9B,allow}}
+\ltjsetparameter{alxspmode={"9C,allow}}
+\ltjsetparameter{alxspmode={"9D,allow}}
+\ltjsetparameter{alxspmode={"9E,allow}}
+\ltjsetparameter{alxspmode={"9F,allow}}
+\ltjsetparameter{alxspmode={"A0,allow}}
+\ltjsetparameter{alxspmode={"A1,allow}}
+\ltjsetparameter{alxspmode={"A2,allow}}
+\ltjsetparameter{alxspmode={"A3,allow}}
+\ltjsetparameter{alxspmode={"A4,allow}}
+\ltjsetparameter{alxspmode={"A5,allow}}
+\ltjsetparameter{alxspmode={"A6,allow}}
+\ltjsetparameter{alxspmode={"A7,allow}}
+\ltjsetparameter{alxspmode={"A8,allow}}
+\ltjsetparameter{alxspmode={"A9,allow}}
+\ltjsetparameter{alxspmode={"AA,allow}}
+\ltjsetparameter{alxspmode={"AB,allow}}
+\ltjsetparameter{alxspmode={"AC,allow}}
+\ltjsetparameter{alxspmode={"AD,allow}}
+\ltjsetparameter{alxspmode={"AE,allow}}
+\ltjsetparameter{alxspmode={"AF,allow}}
+\ltjsetparameter{alxspmode={"B0,allow}}
+\ltjsetparameter{alxspmode={"B1,allow}}
+\ltjsetparameter{alxspmode={"B2,allow}}
+\ltjsetparameter{alxspmode={"B3,allow}}
+\ltjsetparameter{alxspmode={"B4,allow}}
+\ltjsetparameter{alxspmode={"B5,allow}}
+\ltjsetparameter{alxspmode={"B6,allow}}
+\ltjsetparameter{alxspmode={"B7,allow}}
+\ltjsetparameter{alxspmode={"B8,allow}}
+\ltjsetparameter{alxspmode={"B9,allow}}
+\ltjsetparameter{alxspmode={"BA,allow}}
+\ltjsetparameter{alxspmode={"BB,allow}}
+\ltjsetparameter{alxspmode={"BC,allow}}
+\ltjsetparameter{alxspmode={"BD,allow}}
+\ltjsetparameter{alxspmode={"BE,allow}}
+\ltjsetparameter{alxspmode={"BF,allow}}
+\ltjsetparameter{alxspmode={"C0,allow}}
+\ltjsetparameter{alxspmode={"C1,allow}}
+\ltjsetparameter{alxspmode={"C2,allow}}
+\ltjsetparameter{alxspmode={"C3,allow}}
+\ltjsetparameter{alxspmode={"C4,allow}}
+\ltjsetparameter{alxspmode={"C5,allow}}
+\ltjsetparameter{alxspmode={"C6,allow}}
+\ltjsetparameter{alxspmode={"C7,allow}}
+\ltjsetparameter{alxspmode={"C8,allow}}
+\ltjsetparameter{alxspmode={"C9,allow}}
+\ltjsetparameter{alxspmode={"CA,allow}}
+\ltjsetparameter{alxspmode={"CB,allow}}
+\ltjsetparameter{alxspmode={"CC,allow}}
+\ltjsetparameter{alxspmode={"CD,allow}}
+\ltjsetparameter{alxspmode={"CE,allow}}
+\ltjsetparameter{alxspmode={"CF,allow}}
+\ltjsetparameter{alxspmode={"D0,allow}}
+\ltjsetparameter{alxspmode={"D1,allow}}
+\ltjsetparameter{alxspmode={"D2,allow}}
+\ltjsetparameter{alxspmode={"D3,allow}}
+\ltjsetparameter{alxspmode={"D4,allow}}
+\ltjsetparameter{alxspmode={"D5,allow}}
+\ltjsetparameter{alxspmode={"D6,allow}}
+\ltjsetparameter{alxspmode={"D7,allow}}
+\ltjsetparameter{alxspmode={"D8,allow}}
+\ltjsetparameter{alxspmode={"D9,allow}}
+\ltjsetparameter{alxspmode={"DA,allow}}
+\ltjsetparameter{alxspmode={"DB,allow}}
+\ltjsetparameter{alxspmode={"DC,allow}}
+\ltjsetparameter{alxspmode={"DD,allow}}
+\ltjsetparameter{alxspmode={"DE,allow}}
+\ltjsetparameter{alxspmode={"DF,allow}}
+\ltjsetparameter{alxspmode={"E0,allow}}
+\ltjsetparameter{alxspmode={"E1,allow}}
+\ltjsetparameter{alxspmode={"E2,allow}}
+\ltjsetparameter{alxspmode={"E3,allow}}
+\ltjsetparameter{alxspmode={"E4,allow}}
+\ltjsetparameter{alxspmode={"E5,allow}}
+\ltjsetparameter{alxspmode={"E6,allow}}
+\ltjsetparameter{alxspmode={"E7,allow}}
+\ltjsetparameter{alxspmode={"E8,allow}}
+\ltjsetparameter{alxspmode={"E9,allow}}
+\ltjsetparameter{alxspmode={"EA,allow}}
+\ltjsetparameter{alxspmode={"EB,allow}}
+\ltjsetparameter{alxspmode={"EC,allow}}
+\ltjsetparameter{alxspmode={"ED,allow}}
+\ltjsetparameter{alxspmode={"EE,allow}}
+\ltjsetparameter{alxspmode={"EF,allow}}
+\ltjsetparameter{alxspmode={"F0,allow}}
+\ltjsetparameter{alxspmode={"F1,allow}}
+\ltjsetparameter{alxspmode={"F2,allow}}
+\ltjsetparameter{alxspmode={"F3,allow}}
+\ltjsetparameter{alxspmode={"F4,allow}}
+\ltjsetparameter{alxspmode={"F5,allow}}
+\ltjsetparameter{alxspmode={"F6,allow}}
+\ltjsetparameter{alxspmode={"F7,allow}}
+\ltjsetparameter{alxspmode={"F8,allow}}
+\ltjsetparameter{alxspmode={"F9,allow}}
+\ltjsetparameter{alxspmode={"FA,allow}}
+\ltjsetparameter{alxspmode={"FB,allow}}
+\ltjsetparameter{alxspmode={"FC,allow}}
+\ltjsetparameter{alxspmode={"FD,allow}}
+\ltjsetparameter{alxspmode={"FE,allow}}
+\ltjsetparameter{alxspmode={"FF,allow}}
+%
+% inhibitxspcode
+\ltjsetparameter{jaxspmode={`、,postonly}}
+\ltjsetparameter{jaxspmode={`。,postonly}}
+\ltjsetparameter{jaxspmode={`,,postonly}}
+\ltjsetparameter{jaxspmode={`.,postonly}}
+\ltjsetparameter{jaxspmode={`;,postonly}}
+\ltjsetparameter{jaxspmode={`?,postonly}}
+\ltjsetparameter{jaxspmode={`),postonly}}
+\ltjsetparameter{jaxspmode={`(,preonly}}
+\ltjsetparameter{jaxspmode={`],postonly}}
+\ltjsetparameter{jaxspmode={`[,preonly}}
+\ltjsetparameter{jaxspmode={`},postonly}}
+\ltjsetparameter{jaxspmode={`{,preonly}}
+\ltjsetparameter{jaxspmode={`‘,preonly}}
+\ltjsetparameter{jaxspmode={`’,postonly}}
+\ltjsetparameter{jaxspmode={`“,preonly}}
+\ltjsetparameter{jaxspmode={`”,postonly}}
+\ltjsetparameter{jaxspmode={`〔,preonly}}
+\ltjsetparameter{jaxspmode={`〕,postonly}}
+\ltjsetparameter{jaxspmode={`〈,preonly}}
+\ltjsetparameter{jaxspmode={`〉,postonly}}
+\ltjsetparameter{jaxspmode={`《,preonly}}
+\ltjsetparameter{jaxspmode={`》,postonly}}
+\ltjsetparameter{jaxspmode={`「,preonly}}
+\ltjsetparameter{jaxspmode={`」,postonly}}
+\ltjsetparameter{jaxspmode={`『,preonly}}
+\ltjsetparameter{jaxspmode={`』,postonly}}
+\ltjsetparameter{jaxspmode={`【,preonly}}
+\ltjsetparameter{jaxspmode={`】,postonly}}
+\ltjsetparameter{jaxspmode={`—,inhibit}}% U+2014 EM DASH
+\ltjsetparameter{jaxspmode={`―,inhibit}}% U+2015 HORIZONTAL BAR
+\ltjsetparameter{jaxspmode={`〜,inhibit}}% U+301C WAVE DASH
+\ltjsetparameter{jaxspmode={`~,inhibit}}% U+FF5E FULLWIDTH TILDE
+\ltjsetparameter{jaxspmode={`…,inhibit}}
+\ltjsetparameter{jaxspmode={`¥,inhibit}}% U+00A5 YEN SIGN
+\ltjsetparameter{jaxspmode={`¥,inhibit}}% U+FFE5 FULLWIDTH YEN SIGN
+\ltjsetparameter{jaxspmode={`°,postonly}}
+\ltjsetparameter{jaxspmode={`′,postonly}}
+\ltjsetparameter{jaxspmode={`″,postonly}}
+%
+% inhibitxspcode JIS X 0213
+%
+\ltjsetparameter{jaxspmode={`⦅,preonly}}
+\ltjsetparameter{jaxspmode={`⦆,postonly}}
+\ltjsetparameter{jaxspmode={`⦅,preonly}}
+\ltjsetparameter{jaxspmode={`⦆,postonly}}
+\ltjsetparameter{jaxspmode={`〘,preonly}}
+\ltjsetparameter{jaxspmode={`〙,postonly}}
+\ltjsetparameter{jaxspmode={`〖,preonly}}
+\ltjsetparameter{jaxspmode={`〗,postonly}}
+\ltjsetparameter{jaxspmode={`«,preonly}}
+\ltjsetparameter{jaxspmode={`»,postonly}}
+\ltjsetparameter{jaxspmode={`〝,preonly}}
+\ltjsetparameter{jaxspmode={`〟,postonly}}
+\ltjsetparameter{jaxspmode={`‼,postonly}}
+\ltjsetparameter{jaxspmode={`⁇,postonly}}
+\ltjsetparameter{jaxspmode={`⁈,postonly}}
+\ltjsetparameter{jaxspmode={`⁉,postonly}}
+\ltjsetparameter{jaxspmode={`¡,preonly}}
+\ltjsetparameter{jaxspmode={`¿,preonly}}
+\ltjsetparameter{jaxspmode={`ª,postonly}}
+\ltjsetparameter{jaxspmode={`º,postonly}}
+\ltjsetparameter{jaxspmode={`¹,postonly}}
+\ltjsetparameter{jaxspmode={`²,postonly}}
+\ltjsetparameter{jaxspmode={`³,postonly}}
+\ltjsetparameter{jaxspmode={`€,preonly}}
+%
+% inhibitxspcode JIS X 0212
+%
+%\ltjsetparameter{jaxspmode={`¡,preonly}}
+%\ltjsetparameter{jaxspmode={`¿,preonly}}
+%\ltjsetparameter{jaxspmode={`º,postonly}}
+%\ltjsetparameter{jaxspmode={`ª,postonly}}
+\ltjsetparameter{jaxspmode={`™,postonly}}
+%
+% inhibitxspcode 半角片仮名
+%
+\ltjsetparameter{jaxspmode={`。,postonly}}
+\ltjsetparameter{jaxspmode={`、,postonly}}
+\ltjsetparameter{jaxspmode={`「,preonly}}
+\ltjsetparameter{jaxspmode={`」,postonly}}
+
+\catcode`\_=12
+\directlua{
+ s = table.copy(luatexja.stack.charprop_stack_table[0])
+ s.kanjiskip = nil; s.xkanjiskip = nil
+ table.tofile('ltj-kinsoku.lua', s, 'return', false, true, false)
+}
+
+\bye
diff --git a/macros/luatex/generic/luatexja/src/ltj-latex.sty b/macros/luatex/generic/luatexja/src/ltj-latex.sty
new file mode 100644
index 0000000000..446707bd69
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-latex.sty
@@ -0,0 +1,91 @@
+%
+% ltj-latex.sty
+%
+
+%! これは外から読まれない
+%% Avoid multiple loading.
+\csname luatexjalatexLoaded\endcsname
+\edef\ltj@latex@AtEnd{%
+\endlinechar=\the\endlinechar
+\relax}
+\endlinechar\m@ne%
+\def\luatexjalatexLoaded{\endinput}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{ltj-latex}[2018/08/24 LaTeX support of LuaTeX-ja]
+
+% cleanup at end of the document
+%\let\ltj@@orig@end=\@@end
+%\protected\def\@@end{%
+% \directlua{luatexja.ext_cleanup()}\ltj@@orig@end}
+
+\endlinechar=13
+
+%%% patch for LaTeX
+\usepackage{lltjfont}
+\usepackage{lltjdefs}
+\usepackage{lltjcore}
+
+%%% patching commands
+\RequirePackage{filehook}
+
+\def\ltj@pkgpatch@im#1{%
+ \@ifnextchar[{\ltj@pkgpatch@im@{#1}}{\ltj@pkgpatch@im@{#1}[lltjp-#1]}}%]
+\def\ltj@pkgpatch@im@#1[#2]{%
+ \AtEndOfPackageFile*{#1}{%
+ \@ifpackageloaded{#2}{}{%
+ \@namedef{ver@#2.\@pkgextension}{0000/00/00}%dummy
+ \if\catcode`@=11\let\ltj@temp\relax\else
+ \edef\ltj@temp{\noexpand\catcode`@=\the\catcode`@\relax}\makeatletter
+ \fi
+ \@@input{#2.\@pkgextension}\ltj@temp
+ }%
+ }%
+}
+
+\def\ltj@pkgpatch#1{%
+ \@ifnextchar[{\ltj@pkgpatch@@{#1}}{\ltj@pkgpatch@@{#1}[lltjp-#1]}}%]
+\def\ltj@pkgpatch@@#1[#2]{%
+ \gpreto\@begindocumenthook{%
+ \@ifpackageloaded{#1}{%
+ \@ifpackageloaded{#2}{}{\RequirePackage{#2}}%
+ }{}%
+ }%
+}
+
+%%% default parameters
+\directlua{
+ local s = kpse.find_file('ltj-kinsoku.lua', 'tex')
+ luatexja.stack.charprop_stack_table[0] = s and dofile(s) or {}
+}
+
+\ltjsetparameter{kanjiskip=\z@ plus .4pt minus .5pt,
+ xkanjiskip=.25\zw plus 1pt minus 1pt,
+ autospacing, autoxspacing, jacharrange={-1},
+ yalbaselineshift=\z@, yjabaselineshift=\z@,
+ jcharwidowpenalty=500, differentjfm=paverage
+}
+
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+
+%%% patch for packages
+\ltj@pkgpatch@im{listings}
+\ltj@pkgpatch{xunicode} %% at \begin{document}
+\ltj@pkgpatch@im{fontspec}
+\ltj@pkgpatch{footmisc} %% at \begin{document}
+\ltj@pkgpatch{tascmac}
+\ltj@pkgpatch{ascmac}[lltjp-tascmac]
+\ltj@pkgpatch@im{stfloats}
+\ltj@pkgpatch{preview} %% at \begin{document}
+ % (preview package has delayed option)
+\ltj@pkgpatch{array} %% at \begin{document}
+\ltj@pkgpatch@im{unicode-math}
+\ltj@pkgpatch@im{siunitx}
+\ltj@pkgpatch@im{microtype}
+
+\RequirePackage{lltjp-geometry}
+
+%%------------------ all done
+\ltj@latex@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-lineskip.lua b/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
new file mode 100644
index 0000000000..f5c439e559
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
@@ -0,0 +1,116 @@
+--
+-- ltj-lineskip.lua
+--
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+luatexja.lineskip = luatexja.lineskip or {}
+
+local to_direct = node.direct.todirect
+local ltjl = luatexja.lineskip
+local id_glue = node.id('glue')
+local id_penalty = node.id('penalty')
+local id_hlist = node.id('hlist')
+local setfield = node.direct.setfield
+local getfield = node.direct.getfield
+local getlist = node.direct.getlist
+local node_new = node.direct.new
+local node_prev = node.direct.getprev
+local node_next = node.direct.getnext
+local getid = node.direct.getid
+local getsubtype = node.direct.getsubtype
+
+local node_getglue = node.getglue
+local setglue = node.direct.setglue
+local function copy_glue (new_glue, old_glue, subtype, new_w)
+ setfield(new_glue, 'subtype', subtype)
+ local w,st,sp,sto,spo = node_getglue(old_glue)
+ setglue(new_glue, new_w or w, st, sp, sto, spo)
+end
+ltjl.copy_glue = copy_glue
+
+function ltjl.p_dummy(before, after)
+ return nil, 0
+end
+function ltjl.l_dummy(dist, g, adj, normal, bw, loc)
+ if dist < tex.lineskiplimit then
+ copy_glue(g, tex.lineskip, 1, tex.lineskip.width + adj)
+ else
+ copy_glue(g, tex.baselineskip, 2, normal)
+ end
+end
+
+local ltj_profiler, ltj_skip = ltjl.p_dummy, ltjl.l_dummy
+function ltjl.setting(profiler, skip_method)
+ ltj_profiler = ltjl['p_'..tostring(profiler)] or ltjl.p_dummy
+ ltj_skip = ltjl['l_'..tostring(skip_method)] or ltjl.l_dummy
+end
+
+do
+ local traverse_id = node.direct.traverse_id
+ local function adjust_glue(nh)
+ local h = to_direct(nh)
+ local bw = tex.baselineskip.width
+ for x in traverse_id(id_glue, h) do
+ local xs = getsubtype(x)
+ if (xs==1) or (xs==2) then
+ local p, n = node_prev(x), node_next(x)
+ if p then
+ local pid = getid(p)
+ while (id_glue<=pid) and (pid<=id_penalty) and node_prev(p) do
+ p = node_prev(p); pid = getid(p)
+ end
+ if pid==id_hlist and getid(n)==id_hlist then
+ local normal = bw - getfield(p, 'depth') - getfield(n, 'height')
+ local lmin, adj = ltj_profiler(p, n, false, bw)
+ ltj_skip(lmin or normal, x, adj, normal, bw)
+ end
+ end
+ end
+ end
+ return true
+ end
+ ltjb.add_to_callback('post_linebreak_filter',
+ adjust_glue, 'ltj.lineskip', 10000)
+end
+
+do
+ local p_dummy = ltjl.p_dummy
+ local make_dir_whatsit = luatexja.direction.make_dir_whatsit
+ local get_dir_count = luatexja.direction.get_dir_count
+ local node_write = node.direct.write
+
+ local function dir_adjust_append_vlist(b, loc, prev, mirrored)
+ local old_b = to_direct(b)
+ local new_b = loc=='box' and
+ make_dir_whatsit(old_b, old_b, get_dir_count(), 'append_vlist') or old_b
+ if prev > -65536000 then
+ local bw = tex.baselineskip.width
+ local normal = bw - prev
+ - getfield(new_b, mirrored and 'depth' or 'height')
+ local lmin, adj = nil, 0
+ local tail = to_direct(tex.nest[tex.nest.ptr].tail)
+ if p_dummy~=ltj_profiler then
+ while tail and (id_glue<=getid(tail)) and (getid(tail)<=id_penalty) do
+ tail = node_prev(tail)
+ end
+ end
+ if tail then
+ if getid(tail)==id_hlist and getid(new_b)==id_hlist then
+ if getfield(tail, 'depth')==prev then
+ lmin, adj = ltj_profiler(tail, new_b, mirrored, bw)
+ end
+ end
+ end
+ local g = node_new(id_glue)
+ ltj_skip(lmin or normal, g, adj, normal, bw, loc)
+ node_write(g)
+ end
+ node_write(new_b)
+ tex.prevdepth = getfield(new_b, mirrored and 'height' or 'depth')
+ return nil -- do nothing on tex side
+ end
+ ltjb.add_to_callback('append_to_vlist_filter',
+ dir_adjust_append_vlist,
+ 'ltj.lineskip', 10000)
+end
+
diff --git a/macros/luatex/generic/luatexja/src/ltj-math.lua b/macros/luatex/generic/luatexja/src/ltj-math.lua
new file mode 100644
index 0000000000..53bcdb340f
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-math.lua
@@ -0,0 +1,181 @@
+--
+-- luatexja/ltj-math.lua
+--
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+luatexja.load_module('charrange'); local ltjc = luatexja.charrange
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.load_module('setwidth'); local ltjw = luatexja.setwidth
+
+local setfield = node.direct.setfield
+local getfield = node.direct.getfield
+local getid = node.direct.getid
+local getsubtype = node.direct.getsubtype
+local getlist = node.direct.getlist
+-- getlist cannot be used for sub_box nodes. Use instead λp. getfield(p, 'head')
+local getchar = node.direct.getchar
+
+local to_node = node.direct.tonode
+local to_direct = node.direct.todirect
+
+local node_traverse = node.direct.traverse
+local node_new = node.direct.new
+local node_next = node.direct.getnext
+local node_remove = node.direct.remove
+local node_free = node.direct.free
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local tex_getcount = tex.getcount
+
+local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+local attr_dir = luatexbase.attributes['ltj@dir']
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+local attr_jfam = luatexbase.attributes['jfam']
+local attr_yablshift = luatexbase.attributes['ltj@yablshift']
+
+local id_glyph = node.id('glyph')
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_mchar = node.id('math_char')
+local id_sub_box = node.id('sub_box')
+local id_radical = node.id('radical')
+local id_choice = node.id('choice')
+local id_accent = node.id('accent')
+local id_style = node.id('style')
+local id_frac = node.id('fraction')
+local id_simple = node.id('noad')
+local id_sub_mlist = node.id('sub_mlist')
+local id_whatsit = node.id('whatsit')
+local sid_user = node.subtype('user_defined')
+local DIR = luatexja.userid_table.DIR
+local dir_node_auto = luatexja.dir_table.dir_node_auto
+
+local PROCESSED = luatexja.icflag_table.PROCESSED
+
+local ltjf_font_metric_table = ltjf.font_metric_table
+local ltjf_find_char_class = ltjf.find_char_class
+local ltjd_get_dir_count = ltjd.get_dir_count
+local ltjd_make_dir_whatsit = ltjd.make_dir_whatsit
+
+-- table of mathematical characters
+local is_math_letters = {}
+local list_dir
+
+-- vcenter noad は軸に揃えるため,欧文ベースライン補正がかかる
+local function conv_vcenter(sb)
+ local h = getfield(sb, 'head');local hd = getlist(h)
+ if getid(hd)==id_whatsit and
+ getsubtype(hd)==sid_user and getfield(hd, 'user_id')==DIR then
+ local d = node_next(hd)
+ if getid(d)==id_vlist and has_attr(d, attr_dir)>=dir_node_auto then
+ node_free(hd); setfield(h, 'head', nil); node_free(h)
+ setfield(sb, 'head', d); set_attr(d, attr_icflag, 0)
+ end
+ end
+ return sb
+end
+
+local conv_jchar_to_hbox_A
+
+-- sty : 0 (display or text), 1 (script), >=2 (scriptscript)
+local function conv_jchar_to_hbox(head, sty)
+ for p in node_traverse(head) do
+ local pid = getid(p)
+ if pid == id_simple or pid == id_accent then
+ if getsubtype(p)==12 then
+ conv_vcenter(getfield(p, 'nucleus'))
+ else
+ setfield(p, 'nucleus', conv_jchar_to_hbox_A(getfield(p, 'nucleus'), sty))
+ end
+ setfield(p, 'sub', conv_jchar_to_hbox_A(getfield(p, 'sub'), sty+1))
+ setfield(p, 'sup', conv_jchar_to_hbox_A(getfield(p, 'sup'), sty+1))
+ elseif pid == id_choice then
+ setfield(p, 'display', conv_jchar_to_hbox_A(getfield(p, 'display'), 0))
+ setfield(p, 'text', conv_jchar_to_hbox_A(getfield(p, 'text'), 0))
+ setfield(p, 'script', conv_jchar_to_hbox_A(getfield(p, 'script'), 1))
+ setfield(p, 'scriptscript', conv_jchar_to_hbox_A(getfield(p, 'scriptscript'), 2))
+ elseif pid == id_frac then
+ setfield(p, 'num', conv_jchar_to_hbox_A(getfield(p, 'num'), sty+1))
+ setfield(p, 'denom', conv_jchar_to_hbox_A(getfield(p, 'denom'), sty+1))
+ elseif pid == id_radical then
+ setfield(p, 'nucleus', conv_jchar_to_hbox_A(getfield(p, 'nucleus'), sty))
+ setfield(p, 'sub', conv_jchar_to_hbox_A(getfield(p, 'sub'), sty+1))
+ setfield(p, 'sup', conv_jchar_to_hbox_A(getfield(p, 'sup'), sty+1))
+ if getfield(p, 'degree') then
+ setfield(p, 'degree', conv_jchar_to_hbox_A(getfield(p, 'degree'), sty + 1))
+ end
+ elseif pid == id_style then
+ local ps = getfield(p, 'style')
+ if ps == "display'" or ps == 'display'
+ or ps == "text'" or ps == 'text' then
+ sty = 0
+ elseif ps == "script'" or ps == 'script' then
+ sty = 1
+ else sty = 2
+ end
+ end
+ end
+ return head
+end
+
+local MJT = luatexja.stack_table_index.MJT
+local MJS = luatexja.stack_table_index.MJS
+local MJSS = luatexja.stack_table_index.MJSS
+local capsule_glyph_math = ltjw.capsule_glyph_math
+local is_ucs_in_japanese_char = ltjc.is_ucs_in_japanese_char_direct
+
+conv_jchar_to_hbox_A =
+function (p, sty)
+ if not p then return nil
+ else
+ local pid = getid(p)
+ if pid == id_sub_mlist then
+ if getfield(p, 'head') then
+ setfield(p, 'head', conv_jchar_to_hbox(getfield(p, 'head'), sty))
+ end
+ elseif pid == id_mchar then
+ local fam = has_attr(p, attr_jfam) or -1
+ local pc = getchar(p)
+ if (not is_math_letters[pc]) and is_ucs_in_japanese_char(p) and fam>=0 then
+ local f = ltjs.get_stack_table(MJT + 0x100 * sty + fam, -1, tex_getcount('ltj@@stack'))
+ if f ~= -1 then
+ local q = node_new(id_sub_box)
+ local r = node_new(id_glyph); setfield(r, 'next', nil)
+ setfield(r, 'char', pc); setfield(r, 'font', f); setfield(r, 'subtype', 256)
+ local k = has_attr(r,attr_ykblshift) or 0
+ set_attr(r, attr_ykblshift, 0)
+ -- ltj-setwidth 内で実際の位置補正はおこなうので,補正量を退避
+ local met = ltjf_font_metric_table[f]
+ r = capsule_glyph_math(r, met, met.char_type[ltjf_find_char_class(pc, met)]);
+ setfield(q, 'head', r); node_free(p); p=q;
+ set_attr(r, attr_yablshift, k)
+ end
+ end
+ elseif pid == id_sub_box and getfield(p, 'head') then
+ -- \hbox で直に与えられた内容は上下位置を補正する必要はない
+ local h = getfield(p, 'head')
+ h = ltjd_make_dir_whatsit(h, h, list_dir, 'math')
+ setfield(p, 'head', h)
+ set_attr(h, attr_icflag, PROCESSED)
+ end
+ end
+ return p
+end
+
+luatexbase.add_to_callback('mlist_to_hlist',
+ function (n, display_type, penalties)
+ n = to_direct(n); list_dir = ltjd_get_dir_count()
+ if getid(n)==id_whatsit and getsubtype(n)==sid_user and
+ getfield(n, 'user_id') == DIR then
+ local old_n = n; n = node_remove(n, n)
+ node_free(old_n); if not n then return nil end
+ end
+ return node.mlist_to_hlist(
+ to_node(conv_jchar_to_hbox(n, 0)),
+ display_type, penalties)
+ end,'ltj.mlist_to_hlist', 1)
+
+luatexja.math = { is_math_letters = is_math_letters }
diff --git a/macros/luatex/generic/luatexja/src/ltj-otf.lua b/macros/luatex/generic/luatexja/src/ltj-otf.lua
new file mode 100644
index 0000000000..0e54210227
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-otf.lua
@@ -0,0 +1,296 @@
+--
+-- luatexja/ltj-otf.lua
+--
+require('unicode')
+require('lualibs')
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('rmlgbm'); local ltjr = luatexja.rmlgbm
+luatexja.load_module('charrange'); local ltjc = luatexja.charrange
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+
+local id_glyph = node.id('glyph')
+local id_whatsit = node.id('whatsit')
+local sid_user = node.subtype('user_defined')
+
+local setfield = node.direct.setfield
+local getfield = node.direct.getfield
+local getid = node.direct.getid
+local getfont = node.direct.getfont
+local getchar = node.direct.getchar
+local getsubtype = node.direct.getsubtype
+
+local to_node = node.direct.tonode
+local to_direct = node.direct.todirect
+
+local node_new = node.direct.new
+local node_remove = node.direct.remove
+local node_next = node.direct.getnext
+local node_free = node.direct.free
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local unset_attr = node.direct.unset_attribute
+local node_insert_after = node.direct.insert_after
+local node_write = node.direct.write
+local node_traverse_id = node.direct.traverse_id
+
+
+local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+local attr_curtfnt = luatexbase.attributes['ltj@curtfnt']
+local attr_yablshift = luatexbase.attributes['ltj@yablshift']
+local attr_ykblshift = luatexbase.attributes['ltj@ykblshift']
+local attr_tablshift = luatexbase.attributes['ltj@tablshift']
+local attr_tkblshift = luatexbase.attributes['ltj@tkblshift']
+local lang_ja = luatexja.lang_ja
+local identifiers = fonts.hashes.identifiers
+
+local ltjf_font_metric_table = ltjf.font_metric_table
+local ltjf_font_extra_info = ltjf.font_extra_info
+local ltjf_find_char_class = ltjf.find_char_class
+local ltjr_cidfont_data = ltjr.cidfont_data
+local ltjc_is_ucs_in_japanese_char = ltjc.is_ucs_in_japanese_char
+local ltjd_get_dir_count = ltjd.get_dir_count
+local dir_tate = luatexja.dir_table.dir_tate
+
+luatexja.userid_table.OTF = luatexbase.newuserwhatsitid('char_by_cid', 'luatexja')
+local OTF = luatexja.userid_table.OTF
+local tex_get_attr = tex.getattribute
+
+local cache_var = 2
+local cache_outdate_fn = function (t) return t.version~=cache_ver end
+local ivd_aj1 = ltjb.load_cache('ltj-ivd_aj1',cache_outdate_fn)
+if not ivd_aj1 then -- make cache
+ ivd_aj1 = require('ltj-ivd_aj1.lua')
+ ltjb.save_cache_luc('ltj-ivd_aj1', ivd_aj1)
+end
+
+
+local function get_ucs_from_rmlgbm(c)
+ local v = (ivd_aj1 and ivd_aj1.table_ivd_aj1[c]
+ or ltjr_cidfont_data["Adobe-Japan1"].resources.unicodes["Japan1." .. tostring(c)])
+ or 0
+ if v>=0x200000 then -- table
+ local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+ and attr_curtfnt or attr_curjfnt)
+ local curjfnt = identifiers[curjfnt_num].resources
+ local base, ivs = v % 0x200000, 0xE00FF + math.floor(v/0x200000)
+ curjfnt = curjfnt and curjfnt.variants
+ curjfnt = curjfnt and curjfnt[ivs]
+ return curjfnt and curjfnt[base] or base
+ elseif v<0xF0000 then -- 素直に Unicode にマップ可能
+ return v
+ else -- privete use area
+ local r, aj = nil, ltjr_cidfont_data["Adobe-Japan1"]
+ -- 先に ltj_vert_table を見る
+ for i,w in pairs(aj.shared.ltj_vert_table) do
+ if w==v then r=i; break end
+ end
+ if not r then
+ -- なければ ToUnicode から引く
+ local w = aj.characters[v].tounicode -- must be non-nil!
+ local i = string.len(w)
+ if i==4 then -- UCS2
+ r = tonumber(w,16)
+ elseif i==8 then
+ i,w = tonumber(string.sub(w,1,4),16), tonumber(string.sub(w,-4),16)
+ if (w>=0xD800) and (w<=0xDB7F) and (i>=0xDC00) and (i<=0xDFFF) then -- Surrogate pair
+ r = (w-0xD800)*0x400 + (i-0xDC00)
+ else
+ r = 0
+ end
+ end
+ end
+ if aj.shared.ltj_vert_table[r] then
+ -- CID が縦組用字形だった場合
+ local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+ and attr_curtfnt or attr_curjfnt)
+ local t = identifiers[curjfnt_num]
+ if t.resources.sequences then
+ for _,i in pairs(t.resources.sequences) do
+ if (i.order[1]=='vert' or i.order[1]=='vrt2')
+ and i.type == 'gsub_single' and i.steps then
+ for _,j in pairs(i.steps) do
+ if type(j)=='table' then
+ if type(j.coverage)=='table' then
+ for i,k in pairs(j.coverage) do
+ if i==r then return k end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return r
+ end
+end
+
+-- Append a whatsit node to the list.
+-- This whatsit node will be extracted to a glyph_node
+local function append_jglyph(char)
+ local p = node_new(id_whatsit,sid_user)
+ setfield(p, 'user_id', OTF)
+ setfield(p, 'type', 100)
+ setfield(p, 'value', char)
+ node_write(p)
+end
+
+local utf
+do
+ utf = function (ucs)
+ local char = ucs
+ if ltjd_get_dir_count()==dir_tate then
+ local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+ and attr_curtfnt or attr_curjfnt)
+ local t = identifiers[curjfnt_num]
+ if t.resources.sequences then
+ for _,i in pairs(t.resources.sequences) do
+ if (i.order[1]=='vert' or i.order[1]=='vrt2')
+ and i.type == 'gsub_single' and i.steps then
+ for _,j in pairs(i.steps) do
+ if type(j)=='table' then
+ if type(j.coverage)=='table' then
+ for i,k in pairs(j.coverage) do
+ if i==char then return append_jglyph(k) end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ end
+ return append_jglyph(char)
+ end
+end
+
+local cid
+do
+ cid = function (key)
+ if key==0 then return append_jglyph(0) end
+ local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+ and attr_curtfnt or attr_curjfnt)
+ local curjfnt = identifiers[curjfnt_num]
+ local cidinfo = curjfnt.resources.cidinfo
+ if not cidinfo or
+ cidinfo.ordering ~= "Japan1" and
+ cidinfo.ordering ~= "GB1" and
+ cidinfo.ordering ~= "CNS1" and
+ cidinfo.ordering ~= "Korea1" and
+ cidinfo.ordering ~= "KR" then
+ -- ltjb.package_warning('luatexja-otf',
+ -- 'Current Japanese font (or other CJK font) "'
+ -- ..curjfnt.psname..'" is not a CID-Keyed font (Adobe-Japan1 etc.)')
+ return append_jglyph(get_ucs_from_rmlgbm(key))
+ else
+ local char = ltjf_font_extra_info[curjfnt_num].ind_to_uni[key]
+ if not char then
+-- ltjb.package_warning('luatexja-otf',
+-- '"' ..curjfnt.psname..'" does not have CID character '
+-- ..tostring(key),
+-- 'Use a font including the specified CID character.')
+ char = 0
+ end
+ return append_jglyph(char)
+ end
+ end
+end
+
+local function extract(head)
+ head = to_direct(head)
+ local p = head
+ local is_dir_tate = ltjs.list_dir == dir_tate
+ local attr_ablshift = is_dir_tate and attr_tablshift or attr_yablshift
+ local attr_kblshift = is_dir_tate and attr_tkblshift or attr_ykblshift
+ local attr_curfnt = is_dir_tate and attr_curtfnt or attr_curjfnt
+ while p do
+ if getid(p)==id_whatsit then
+ if getsubtype(p)==sid_user then
+ local puid = getfield(p, 'user_id')
+ if puid==OTF then
+ --if puid==OTF or puid==VSR then
+ local g = node_new(id_glyph)
+ setfield(g, 'subtype', 0)
+ setfield(g, 'char', getfield(p, 'value'))
+ local v = has_attr(p, attr_curfnt); setfield(g, 'font',v)
+ --if puid==OTF then
+ setfield(g, 'lang', lang_ja)
+ set_attr(g, attr_kblshift, has_attr(p, attr_kblshift))
+ --else
+ -- set_attr(g, attr_ablshift, has_attr(p, attr_ablshift))
+ --end
+ head = node_insert_after(head, p, g)
+ head = node_remove(head, p)
+ node_free(p); p = g
+ end
+ end
+ end
+ p = node_next(p)
+ end
+ return to_node(head)
+end
+
+ltjb.add_to_callback('hpack_filter', extract,'ltj.otf',
+ luatexbase.priority_in_callback('hpack_filter', 'ltj.main'))
+ltjb.add_to_callback('pre_linebreak_filter', extract,'ltj.otf',
+ luatexbase.priority_in_callback('pre_linebreak_filter', 'ltj.main'))
+-- additional callbacks
+-- 以下は,LuaTeX-ja に用意された callback のサンプルになっている.
+-- JFM の文字クラスの指定の所で,"AJ1-xxx" 形式での指定を可能とした.
+
+-- 和文フォント読み込み時に,ind -> unicode 対応をとっておく.
+local function ind_to_uni(fmtable, fn)
+ local fi = identifiers[fn]
+ local t = ltjf_font_extra_info[fn].ind_to_uni
+ if t and fi.resources and fi.resources.cidinfo
+ and fi.resources.cidinfo.ordering == "Japan1" then
+ for i, v in pairs(fmtable.chars) do
+ local j = string.match(i, "^AJ1%-([0-9]*)")
+ if j then
+ j = t[i]
+ if j then
+ fmtable.cid_char_type = fmtable.cid_char_type or {}
+ fmtable.cid_char_type[j] = v
+ end
+ end
+ end
+ end
+ return fmtable
+end
+luatexbase.add_to_callback("luatexja.define_jfont",
+ ind_to_uni, "ltj.otf.define_jfont", 1)
+-- 既に読み込まれているフォントに対しても,同じことをやらないといけない
+for fn, v in pairs(ltjf_font_metric_table) do
+ ltjf_font_metric_table[fn] = ind_to_uni(v, fn)
+end
+
+
+local function cid_set_char_class(arg, fmtable, char)
+ if arg~=0 then return arg
+ elseif fmtable.cid_char_type then
+ return fmtable.cid_char_type[char] or 0
+ else return 0
+ end
+end
+luatexbase.add_to_callback("luatexja.find_char_class",
+ cid_set_char_class, "ltj.otf.find_char_class", 1)
+
+--IVS
+local function enable_ivs()
+ ltjb.package_warning('luatexja-otf',
+ 'luatexja.otf.enable_ivs() has now no effect.')
+end
+local disable_ivs = enable_ivs
+
+luatexja.otf = {
+ append_jglyph = append_jglyph,
+ enable_ivs = enable_ivs, -- 隠し機能: IVS
+ disable_ivs = disable_ivs, -- 隠し機能: IVS
+ cid = cid, utf = utf,
+}
+
+
+-- EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-plain.sty b/macros/luatex/generic/luatexja/src/ltj-plain.sty
new file mode 100644
index 0000000000..4277998e9d
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-plain.sty
@@ -0,0 +1,110 @@
+%
+% ltj-plain.sty
+%
+
+%! これは外から読まれない
+%% Avoid multiple loading.
+\csname luatexjaplainLoaded\endcsname
+\edef\ltj@plain@AtEnd{%
+\endlinechar=\the\endlinechar
+\relax}
+\endlinechar=-1 %
+\def\luatexjaplainLoaded{\endinput}
+
+\ifltj@in@latex %<*LaTeX>
+ \NeedsTeXFormat{LaTeX2e}
+ \PackageWarning{ltj-plain}{Don't load this package directly; load luatexja.sty instead.}
+ \ProvidesPackage{ltj-plain}[2019/05/01]
+\fi %</LaTeX>
+
+%%------------------
+
+\endlinechar=13
+%! ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
+% LuaTeX-ja macros against plain TeX
+
+\ifdefined\ltj@stdmcfont\else\def\ltj@stdmcfont{IPAExMincho}\fi
+\ifdefined\ltj@stdgtfont\else\def\ltj@stdgtfont{IPAExGothic}\fi
+\ifdefined\ltj@stdyokojfm\else\def\ltj@stdyokojfm{ujis}\fi
+\ifdefined\ltj@stdtatejfm\else\def\ltj@stdtatejfm{ujisv}\fi
+\newread\ltj@@cfgread
+\openin\ltj@@cfgread{luatexja.cfg}%
+\ifeof\ltj@@cfgread
+ \@PackageInfoNoLine{ltj-plain}{Cannot find file `luatexja.cfg'}%
+\else
+ \closein\ltj@@cfgread
+ \input luatexja.cfg
+\fi
+\let\ltj@@cfgread\relax\advance\count16\m@ne\relax
+
+\jfont\tenmin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm\space at 9.62216pt
+\jfont\sevenmin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm\space at 6.73551pt
+\jfont\fivemin=\ltj@stdmcfont:jfm=\ltj@stdyokojfm\space at 4.81108pt
+\jfont\tengt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm\space at 9.62216pt
+\jfont\sevengt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm\space at 6.73551pt
+\jfont\fivegt=\ltj@stdgtfont:jfm=\ltj@stdyokojfm\space at 4.81108pt
+
+\tfont\tentmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm\space at 9.62216pt
+\tfont\seventmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm\space at 6.73551pt
+\tfont\fivetmin=\ltj@stdmcfont:jfm=\ltj@stdtatejfm\space at 4.81108pt
+\tfont\tentgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm\space at 9.62216pt
+\tfont\seventgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm\space at 6.73551pt
+\tfont\fivetgt=\ltj@stdgtfont:jfm=\ltj@stdtatejfm\space at 4.81108pt
+
+\def\mc{\tenmin\tentmin}
+\def\gt{\tengt\tentgt}
+\mc
+
+\directlua{
+ local s = kpse.find_file('ltj-kinsoku.lua', 'tex')
+ luatexja.stack.charprop_stack_table[0] = s and dofile(s) or {}
+}
+
+\ltjsetparameter{kanjiskip=\z@ plus .4pt minus .4pt,
+ xkanjiskip=.25\zw plus 1pt minus 1pt,
+ autospacing, autoxspacing, jacharrange={-1},
+ yalbaselineshift=\z@, yjabaselineshift=\z@,
+ jcharwidowpenalty=500, differentjfm=paverage,
+ jatextfont={0, \tenmin}, jascriptfont={0, \sevenmin},
+ jascriptscriptfont={0, \fivemin},
+}
+\setbox\z@=\hbox{M}
+\jfam\z@
+\ltjsetparameter{talbaselineshift=.5\ht0, tjabaselineshift=\z@}
+
+\ltjdefcharrange{1}{"80-"36F, "1E00-"1EFF}
+\ltjdefcharrange{2}{"370-"4FF, "1F00-"1FFF}
+\ltjdefcharrange{3}{%
+ "2000-"243F, "2500-"27BF, "2900-"29FF, "2B00-"2BFF}
+\ltjdefcharrange{4}{%
+ "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
+ "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A95F, "A980-"ABFF, "E000-"F8FF,
+ "FB00-"FE0F, "FE20-"FE2F, "FE70-"FEFF, "10000-"1AFFF, "1B170-"1F0FF,
+ "1F300-"1FFFF
+} % non-Japanese
+\ltjdefcharrange{5}{"D800-"DFFF, "E0000-"E00FF, "E01F0-"10FFFF}
+\ltjdefcharrange{6}{%
+ "2460-"24FF, "2E80-"2EFF, "3000-"30FF, "3190-"319F, "31F0-"4DBF,
+ "4E00-"9FFF, "F900-"FAFF, "FE10-"FE1F, "FE30-"FE6F, "FF00-"FFEF,
+ "1B000-"1B16F, "1F100-"1F2FF, "20000-"2FFFF, "E0100-"E01EF
+}
+\ltjdefcharrange{7}{%
+ "1100-"11FF, "2F00-"2FFF, "3100-"318F, "31A0-"31EF, "A000-"A4CF,
+ "A960-"A97F, "AC00-"D7FF
+}
+\ltjdefcharrange{8}{"A7, "A8, "B0, "B1, "B4, "B6, "D7, "F7}
+\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8}}
+
+\directlua{for x=128,255 do luatexja.math.is_math_letters[x] = true end}
+\let\ltj@@orig@end=\@@end
+\protected\def\@@end{%
+ \directlua{luatexja.ext_cleanup()}\ltj@@orig@end}
+
+\directlua{luatexja.jfont.register_vert_replace{
+ [',']='、', ['.']='。', ['“']=0x301D, ['”']=0x301F,
+}}
+
+%%------------------ all done
+\ltj@plain@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-pretreat.lua b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua
new file mode 100644
index 0000000000..3f37278e54
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-pretreat.lua
@@ -0,0 +1,188 @@
+--
+-- luatexja/ltj-pretreat.lua
+--
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('charrange'); local ltjc = luatexja.charrange
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+
+local to_node = node.direct.tonode
+local to_direct = node.direct.todirect
+
+local setfield = node.direct.setfield
+local getid = node.direct.getid
+local getfont = node.direct.getfont
+local getchar = node.direct.getchar
+local getfield = node.direct.getfield
+local getsubtype = node.direct.getsubtype
+local getlang = node.direct.getlang or function (n) return getfield(n,'lang') end
+
+local pairs = pairs
+local floor = math.floor
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local node_traverse = node.direct.traverse
+local node_remove = node.direct.remove
+local node_next = node.direct.getnext
+local node_free = node.direct.free
+local node_end_of_math = node.direct.end_of_math
+local tex_getcount = tex.getcount
+
+local id_glyph = node.id('glyph')
+local id_math = node.id('math')
+local id_whatsit = node.id('whatsit')
+local sid_user = node.subtype('user_defined')
+
+local attr_dir = luatexbase.attributes['ltj@dir']
+local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+local attr_curtfnt = luatexbase.attributes['ltj@curtfnt']
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+
+local is_ucs_in_japanese_char = ltjc.is_ucs_in_japanese_char_direct
+local ltjs_orig_char_table = ltjs.orig_char_table
+local ltjf_replace_altfont = ltjf.replace_altfont
+local STCK = luatexja.userid_table.STCK
+local DIR = luatexja.userid_table.DIR
+local JA_AL_BDD = luatexja.userid_table.JA_AL_BDD
+local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
+
+local dir_tate = luatexja.dir_table.dir_tate
+local lang_ja = luatexja.lang_ja
+
+local setlang = node.direct.setlang or function(n,l) setfield(n,'lang',l) end
+local setfont = node.direct.setfont or function(n,l) setfield(n,'font',l) end
+local setchar = node.direct.setchar or function(n,l) setfield(n,'char',l) end
+
+------------------------------------------------------------------------
+-- MAIN PROCESS STEP 1: replace fonts
+------------------------------------------------------------------------
+local wt, wtd = {}, {}
+do
+ local ltjd_get_dir_count = ltjd.get_dir_count
+ local start_time_measure, stop_time_measure
+ = ltjb.start_time_measure, ltjb.stop_time_measure
+ local head
+ local suppress_hyphenate_ja_aux = {
+ [id_math] = function(p) return node_next(node_end_of_math(node_next(p))) end,
+ [id_whatsit] = function(p)
+ if getsubtype(p)==sid_user then
+ local uid = getfield(p, 'user_id')
+ if uid==STCK then
+ wt[#wt+1] = p; node_remove(head, p)
+ elseif uid==DIR then
+ if has_attr(p, attr_icflag)<PROCESSED_BEGIN_FLAG then
+ ltjs.list_dir = has_attr(p, attr_dir)
+ else -- こっちのケースは通常使用では起こらない
+ wtd[#wtd+1] = p; node_remove(head, p)
+ end
+ end
+ end
+ return node_next(p)
+ end,
+ }
+ setmetatable(suppress_hyphenate_ja_aux,
+ {
+ __index = function() return node_next end,
+ })
+ local id_boundary = node.id('boundary')
+ local node_new, insert_before = node.direct.new, node.direct.insert_before
+ local setsubtype = node.direct.setsubtype or function(n,l) setfield(n,'subtype',l) end
+ local function suppress_hyphenate_ja (h)
+ start_time_measure('ltj_hyphenate')
+ head = to_direct(h)
+ for i = 1,#wt do wt[i]=nil end
+ for i = 1,#wtd do wtd[i]=nil end
+ for i,_ in pairs(ltjs_orig_char_table) do
+ ltjs_orig_char_table[i] = nil
+ end
+ ltjs.list_dir=ltjd_get_dir_count()
+ do
+ local p = head
+ while p do
+ local pid, prev_chartype = getid(p), 0
+ -- prev_chartype: 0: not char 1: ALchar 2: JAchar
+ while pid==id_glyph do
+ local pc = getchar(p)
+ if has_attr(p, attr_icflag, 0) and is_ucs_in_japanese_char(p, pc) then
+ if prev_chartype==1 then
+ local b = node_new(id_whatsit,sid_user);
+ setfield(b, 'type', 100); setfield(b, 'user_id', JA_AL_BDD);
+ insert_before(head, p, b)
+ end
+ local pf = has_attr(p, attr_curjfnt)
+ pf = (pf and pf>0 and pf) or getfont(p)
+ setfont(p, ltjf_replace_altfont(pf, pc))
+ setlang(p, lang_ja)
+ ltjs_orig_char_table[p], prev_chartype = pc, 2
+ elseif prev_chartype==2 then
+ local b = node_new(id_whatsit,sid_user);
+ setfield(b, 'type', 100); setfield(b, 'user_id', JA_AL_BDD);
+ insert_before(head, p, b); prev_chartype = 1
+ else prev_chartype = 1
+ end
+ p = node_next(p); pid = getid(p)
+ end
+ p = (suppress_hyphenate_ja_aux[pid])(p)
+ end
+ end
+ stop_time_measure('ltj_hyphenate'); start_time_measure('tex_hyphenate')
+ lang.hyphenate(h, nil)
+ stop_time_measure('tex_hyphenate')
+ return h
+ end
+
+ ltjb.add_to_callback('hyphenate',
+ function (head,tail)
+ return suppress_hyphenate_ja(head)
+ end,'ltj.hyphenate')
+end
+
+-- mode: true iff this function is called from hpack_filter
+local ltjs_report_stack_level = ltjs.report_stack_level
+local ltjf_font_metric_table = ltjf.font_metric_table
+local font_getfont = font.getfont
+local function set_box_stack_level(head, mode)
+ local box_set, cl = 0, tex.currentgrouplevel + 1
+ if mode then
+ for _,p in pairs(wt) do
+ if getfield(p, 'value')==cl then box_set = 1 end; node_free(p)
+ end
+ else
+ for _,p in pairs(wt) do node_free(p) end
+ end
+ ltjs_report_stack_level(tex_getcount('ltj@@stack') + box_set)
+ for _,p in pairs(wtd) do
+ node_free(p)
+ end
+ if ltjs.list_dir == dir_tate then
+ for p in node.direct.traverse_id(id_glyph,to_direct(head)) do
+ if has_attr(p, attr_icflag, 0) and getlang(p)==lang_ja then
+ local nf = ltjf_replace_altfont( has_attr(p, attr_curtfnt) or getfont(p) , ltjs_orig_char_table[p])
+ setfont(p, nf)
+ if ltjf_font_metric_table[nf].vert_activated then
+ local pc = getchar(p)
+ pc = ltjf_font_metric_table[nf].vform[pc]
+ if pc then setchar(p, pc) end
+ end
+ end
+ end
+ end
+ return head
+end
+
+-- CALLBACKS
+ltjb.add_to_callback('hpack_filter',
+ function (head)
+ return set_box_stack_level(head, true)
+ end,'ltj.set_stack_level',1)
+ltjb.add_to_callback('pre_linebreak_filter',
+ function (head)
+ return set_box_stack_level(head, false)
+ end,'ltj.set_stack_level',1)
+
+luatexja.pretreat = {
+ set_box_stack_level = set_box_stack_level,
+ orig_char_table = orig_char_table,
+}
diff --git a/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua
new file mode 100644
index 0000000000..357560c4bf
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-rmlgbm.lua
@@ -0,0 +1,416 @@
+--
+-- luatexja/ltj-rmlgbm.lua
+--
+luatexja.load_module('base'); local ltjb = luatexja.base
+
+local cidfont_data = {}
+local cache_chars = {}
+local cache_ver = 8
+local identifiers = fonts.hashes.identifiers
+
+local cid_reg, cid_order, cid_supp, cid_name
+local cid_replace = {
+ ["Adobe-Japan1"] = {"UniJIS2004-UTF32", 23059, 7,
+ function (i)
+ if (231<=i and i<=632) or (8718<=i and i<=8719)
+ or (12063<=i and i<=12087) then
+ return 327680 -- 655360/2
+ elseif 9758<=i and i<=9778 then
+ return 218453 -- 655360/3
+ elseif 9738<=i and i<=9757 then
+ return 163840 -- 655360/4
+ end
+ end},
+ -- 基本的には JIS X 0213:2004 に沿ったマッピング
+ ["Adobe-Korea1"] = {"UniKS-UTF32", 18351, 2,
+ function (i)
+ if 8094<=i and i<=8100 then
+ return 327680 -- 655360/2
+ end
+ end},
+ ["Adobe-GB1"] = {"UniGB-UTF32", 30283, 5,
+ function (i)
+ if (814<=i and i<=939) or (i==7716)
+ or (22355<=i and i<=22357) then
+ return 327680 -- 655360/2
+ end
+ end},
+ ["Adobe-CNS1"] = {"UniCNS-UTF32", 19178, 7,
+ function (i)
+ if (13648<=i and i<=13742) or (i==17603) then
+ return 327680 -- 655360/2
+ end
+ end},
+ ["Adobe-KR"] = {"UniAKR-UTF32", 22896, 9,
+ function (i)
+ if i==3057 then
+ return 655360*2
+ elseif i==3058 then
+ return 655360*3
+ elseif i==12235 or i==12236 then
+ return 163840 -- 655360/4
+ end
+ end},
+}
+
+-- reading CID maps
+local make_cid_font
+do
+ local line, fh -- line, file handler
+ local tt,cidm -- characters, cid->(Unicode)
+
+ local function load_cid_char(cid_dec, mke)
+ local cid, ucs, ucsa
+ line = fh:read("*l")
+ while line do
+ if string.find(line, "end...?char") then
+ line = fh:read("*l"); return
+ else -- WMA l is in the form "<%x+>%s%d+"
+ ucs, cid = string.match(line, "<(%x+)>%s+<?(%x+)>?")
+ cid = cid_dec(cid); ucs = tonumber(ucs, 16);
+ if not tt[ucs] then
+ tt[ucs] = mke(cid); cidm[cid]=ucs
+ end
+ end
+ line = fh:read("*l")
+ end
+ end
+
+ local function load_cid_range(inc, cid_dec, mke)
+ local bucs, eucs, cid
+ line = fh:read("*l")
+ while line do
+ if string.find(line, "end...?range") then
+ line = fh:read("*l"); return
+ else -- WMA l is in the form "<%x+>%s+<%x+>"
+ bucs, eucs, cid = string.match(line, "<(%x+)>%s+<(%x+)>%s+<?(%x+)>?")
+ cid = cid_dec(cid);
+ bucs = tonumber(bucs, 16); eucs = tonumber(eucs, 16)
+ for ucs = bucs, eucs do
+ if not tt[ucs] then
+ tt[ucs] = mke(cid); cidm[cid]=ucs
+ end
+ cid = inc(cid)
+ end
+ end
+ line = fh:read("*l")
+ end
+ end
+
+ local function open_cmap_file(name, inc, cid_dec, mke)
+ local fn = kpse.find_file(name, 'cmap files')
+ if fn then
+ fh = io.open(fn, "r")
+ line = fh:read("*l")
+ while line do
+ if string.find(line, "%x+%s+begin...?char") then
+ load_cid_char(cid_dec, mke)
+ elseif string.find(line, "%x+%s+begin...?range") then
+ load_cid_range(inc, cid_dec, mke)
+ else
+ line = fh:read("*l")
+ end
+ end
+ fh:close();
+ end
+ end
+
+ local function increment(a) return a+1 end
+ local function entry(a)
+ return {index = a}
+ end
+ local feat_dummy_vert = { gsub={vert={dflt={dflt=true}}} }
+ local seq_dummy_vert={{
+ features={vert={dflt={dflt=true}}},
+ --flags={false,false,false,false},
+ --index=1, name="s_s_0", skiphash=false, steps={coverage={},index=1},
+ ["type"]="gsub_single", order='vert',
+ }}
+ make_cid_font = function ()
+ local kx = cid_replace[cid_name]
+ if not kx then return end
+ local k = {
+ cidinfo = { ordering=cid_order, registry=cid_reg, supplement=kx[3] },
+ encodingbytes = 2, extend=1000, format = 'opentype',
+ direction = 0, characters = {}, parameters = {
+ ascender = 655360*0.88,
+ descender = 655360*0.12,
+ },
+ embedding = "no", cache = "yes", factor = 0, hfactor = 0, vfactor = 0,
+ tounicode = 1,
+ properties = { language = "dflt", script = "dflt" },
+ }
+ cidfont_data[cid_name] = k
+
+ -- CID => Unicode 符号空間
+ local tth, cidmo = {}, {}
+ tt, cidm = tth, cidmo
+ for i = 0,kx[2] do cidm[i] = -1 end
+ open_cmap_file(kx[1] .. "-H", increment, tonumber, entry)
+ k.characters = tth
+
+ -- Unicode にマップされなかった文字の処理
+ -- これらは TrueType フォントを使って表示するときはおかしくなる
+ local ttu, pricode = {}, 0xF0000
+ for i,v in ipairs(cidmo) do
+ if v==-1 then
+ tth[pricode], cidmo[i], pricode
+ = { index = i }, pricode, pricode+1;
+ end
+ ttu[cid_order .. '.' .. i] = cidmo[i]
+ end
+
+ -- shared
+ k.shared = {
+ otfdata = {
+ cidinfo= k.cidinfo, verbose = false,
+ shared = { featuredata = {}, },
+ },
+ dynamics = {}, processes = {},
+ rawdata = {}, features={},
+ }
+ k.resources = {
+ unicodes = ttu,
+ features = feat_dummy_vert,
+ sequences = seq_dummy_vert,
+ }
+ k.descriptions = {}
+ k.shared.rawdata.resources=k.resources
+ k.shared.rawdata.descriptions=k.descriptions
+ cache_chars[cid_name] = { [655360] = k.characters }
+
+ -- 縦書用字形
+ tt, cidm = {}, {}
+ local ttv = {}; k.shared.ltj_vert_table = ttv
+ for i = 0,kx[2] do cidm[i] = -1 end
+ open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
+ for i,v in pairs(tt) do
+ ttv[i] = cidmo[v.index] -- "unicode" of vertical variant
+ end
+
+ -- tounicode エントリ
+ local cidp = {nil, nil}; tt, ttu, cidm = {}, {}, {}
+ open_cmap_file(cid_name .. "-UCS2",
+ function(a)
+ a[2] = a[2] +1 ; return a
+ end,
+ function(a)
+ cidp[1] = string.upper(string.sub(a,1,string.len(a)-4))
+ cidp[2] = tonumber(string.sub(a,-4),16)
+ return cidp
+ end,
+ function(a) return a[1] ..string.format('%04X',a[2]) end)
+ -- tt は cid -> tounicode になっているので cidm -> tounicode に変換
+ local kxf = kx[4]
+ for i,v in ipairs(cidmo) do
+ k.characters[v].width = kxf(i)
+ if v>=0xF0000 then
+ k.characters[v].tounicode = tt[i]
+ end
+ end
+
+ -- Save
+ k.characters[46].width = math.floor(655360/14);
+ ltjb.save_cache( "ltj-cid-auto-" .. string.lower(cid_name),
+ {
+ version = cache_ver,
+ k,
+ })
+ end
+end
+
+--
+local cidf_vert_processor
+do
+ local traverse_id, is_node = node.direct.traverse_id, node.is_node
+ local to_direct = node.direct.todirect
+ local id_glyph = node.id('glyph')
+ local getfont = node.direct.getfont
+ local getchar = node.direct.getchar
+ local setchar = node.direct.setchar
+ cidf_vert_processor = {
+ function (head, fnum)
+ local fontdata = identifiers[fnum]
+ if head and luatexja.jfont.font_metric_table[fnum].vert_activated then
+ local vt = fontdata.shared.ltj_vert_table
+ local nh = is_node(head) and to_direct(head) or head
+ for n in traverse_id(id_glyph, head) do
+ if getfont(n)==fnum then
+ local c = getchar(n); setchar(n, vt[c] or c)
+ end
+ end
+ return head, false
+ end
+ end
+ }
+end
+
+local function cid_cache_outdated(t) return t.version~=cache_ver end
+local function read_cid_font()
+ local dat = ltjb.load_cache("ltj-cid-auto-" .. string.lower(cid_name),
+ cid_cache_outdated )
+ if dat then
+ cidfont_data[cid_name] = dat[1]
+ cache_chars[cid_name] = { [655360] = cidfont_data[cid_name].characters }
+ else
+ -- Now we must create the virtual metrics from CMap.
+ make_cid_font()
+ end
+ if cidfont_data[cid_name] then
+ cidfont_data[cid_name].shared.processes = cidf_vert_processor
+ for i,v in pairs(cidfont_data[cid_name].characters) do
+ if not v.width then v.width = 655360 end
+ v.height, v.depth = 576716.8, 78643.2 -- optimized for jfm-ujis.lua
+ end
+ return cidfont_data[cid_name]
+ else
+ return nil
+ end
+end
+
+-- High-level
+local function prepare_cid_font(reg, ord)
+ cid_reg, cid_order, cid_name, cid_supp = reg, ord, reg .. '-' .. ord
+ return cidfont_data[cid_name] or read_cid_font()
+end
+
+
+local definers = fonts.definers
+local function mk_rml(name, size, id)
+ local specification = definers.analyze(name,size)
+ --specification = definers.resolve(specification) (not needed)
+ specification.detail = specification.detail or ''
+ do
+ local n = specification.name
+ if n:sub(1,1)=="{" then n=n:sub(2) end
+ if n:sub(-1)=="}" then n=n:sub(1,-2) end
+ specification.name=n
+ end
+ local fontdata = {}
+ local cachedata = {}
+ local s = cidfont_data[cid_name]
+ luatexja.rmlgbm.vert_addfunc(id)
+ for k, v in pairs(s) do
+ fontdata[k] = v
+ cachedata[k] = v
+ end
+ fontdata.characters = nil
+ cachedata.characters = nil
+ fontdata.shared = nil
+ cachedata.shared = nil
+ if s.shared then
+ cachedata.shared = {}
+ local shared = cachedata.shared
+ for k, v in pairs(s.shared) do
+ shared[k] = v
+ end
+ end
+
+ -- characters & scaling
+ if size < 0 then size = -size * 655.36 end
+ local scale = size / 655360
+
+ do
+ local def_height = 0.88 * size
+ -- character's default height (optimized for jfm-ujis.lua)
+ local def_depth = 0.12 * size -- and depth.
+ if not cache_chars[cid_name][size] then
+ cache_chars[cid_name][size] = {}
+ for k, v in pairs(cache_chars[cid_name][655360]) do
+ cache_chars[cid_name][size][k] = {
+ index = v.index, width = v.width * scale,
+ height = def_height, depth = def_depth, tounicode = v.tounicode,
+ }
+ end
+ end
+ fontdata.characters = cache_chars[cid_name][size]
+ cachedata.characters = cache_chars[cid_name][size]
+ end
+
+ -- other parameters
+ do
+ local parameters = {}
+ for k, v in pairs(s.parameters) do
+ parameters[k] = v * scale
+ end
+ fontdata.parameters = parameters
+ fontdata.size = size
+ fontdata.resources = s.resources
+ cachedata.parameters = parameters
+ cachedata.size = size
+ cachedata.resources = s.resources
+ end
+
+ -- no embedding
+ local var = ''
+ local s = string.match(specification.detail, 'slant=([+-]*%d*%.?%d)')
+ if s and e~=0 then
+ s = s * 1000
+ var, fontdata.slant = var .. 's' .. tostring(s), s
+ end
+ local e = string.match(specification.detail, 'extend=([+-]*%d*%.?%d)')
+ if e and e~=1 then
+ e = e * 1000
+ var, fontdata.extend = var .. 'x' .. tostring(e), e
+ end
+ fontdata.name = specification.name .. size .. var; cachedata.name = fontdata.name
+ fontdata.fullname = specification.name .. var; cachedata.fullname = fontdata.fullname
+ fontdata.psname = specification.name; cachedata.psname = fontdata.psname
+ identifiers[id] = cachedata
+
+ return fontdata
+end
+
+local function font_callback(name, size, id, fallback)
+ if name:sub(1,1)=="{" and name:sub(-1)=="}" then name = name:sub(2,-2) end
+ local p = name:find(":") or 0
+ if name:sub(1, p-1) == 'psft' then
+ local s = "Adobe-Japan1-7"
+ local basename = name:sub(p+1)
+ local p = basename:find(":")
+ local q = basename:find("/[BI][BI]?")
+ if q and p and q<=p then
+ basename = basename:gsub('/[BI][BI]?', '', 1)
+ p = basename:find(":")
+ end
+ if p then
+ local xname = basename:sub(p+1)
+ p = 1
+ while p do
+ local q = xname:find(";", p+1) or xname:len()+1
+ if xname:sub(p, p+3)=='cid=' and q>p+4 then
+ s = xname:sub(p+4, q-1)
+ end
+ if xname:len()+1==q then p = nil else p = q + 1 end
+ end
+ end
+ cid_reg, cid_order = string.match(s, "^(.-)%-(.-)%-(%d-)$")
+ if not cid_reg then
+ cid_reg, cid_order = string.match(s, "^(.-)%-(.-)$")
+ end
+ if not prepare_cid_font(cid_reg, cid_order) then
+ ltjb.package_error('luatexja',
+ "bad cid key `" .. s .. "'",
+ "I couldn't find any non-embedded font information for the CID\n" ..
+ '`' .. s .. "'. For now, I'll use `Adobe-Japan1-6'.\n"..
+ 'Please contact the LuaTeX-ja project team.')
+ cid_name = "Adobe-Japan1"
+ end
+ return mk_rml(basename, size, id)
+ else
+ local tfmdata=fallback(name, size, id)
+ if type (tfmdata) == "table" and tfmdata.shared then
+ luatexbase.call_callback("luaotfload.patch_font", tfmdata, name)
+ end
+ return tfmdata
+ end
+end
+
+luatexja.rmlgbm = {
+ prepare_cid_font = prepare_cid_font,
+ cidfont_data = cidfont_data,
+ font_callback = font_callback,
+ vert_addfunc = function () end, -- dummy, set in ltj-direction.lua
+}
+
+prepare_cid_font('Adobe', 'Japan1')
diff --git a/macros/luatex/generic/luatexja/src/ltj-ruby.lua b/macros/luatex/generic/luatexja/src/ltj-ruby.lua
new file mode 100644
index 0000000000..060b3226ad
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-ruby.lua
@@ -0,0 +1,782 @@
+--
+-- ltj-ruby.lua
+--
+luatexbase.provides_module({
+ name = 'luatexja.ruby',
+ date = '2018/09/29',
+ description = 'Ruby annotation',
+})
+luatexja.ruby = {}
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.load_module('base'); local ltjb = luatexja.base
+
+local to_node = node.direct.tonode
+local to_direct = node.direct.todirect
+
+local setfield = node.direct.setfield
+local setglue = luatexja.setglue
+local getfield = node.direct.getfield
+local getid = node.direct.getid
+local getfont = node.direct.getfont
+local getlist = node.direct.getlist
+local getchar = node.direct.getchar
+local getsubtype = node.direct.getsubtype
+
+local node_new = node.direct.new
+local node_remove = node.direct.remove
+local node_next = node.direct.getnext
+local node_copy, node_free, node_tail = node.direct.copy, node.direct.free, node.direct.tail
+local has_attr, set_attr = node.direct.has_attribute, node.direct.set_attribute
+local insert_before, insert_after = node.direct.insert_before, node.direct.insert_after
+
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_rule = node.id('rule')
+local id_whatsit = node.id('whatsit')
+local id_glue = node.id('glue')
+local id_kern = node.id('kern')
+local id_penalty = node.id('penalty')
+local sid_user = node.subtype('user_defined')
+local ltjs_get_stack_table = luatexja.stack.get_stack_table
+local id_pbox_w = 258 -- cluster which consists of a whatsit
+
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+-- ルビ処理用の attribute は他のやつの流用なので注意!
+-- 進入許容量 (sp)
+local attr_ruby_maxprep = luatexbase.attributes['ltj@charclass']
+local attr_ruby_maxpostp = luatexbase.attributes['ltj@kcat0']
+local attr_ruby_maxmargin = luatexbase.attributes['ltj@kcat1']
+local attr_ruby_stretch = luatexbase.attributes['ltj@kcat2']
+local attr_ruby_mode = luatexbase.attributes['ltj@kcat3']
+local attr_ruby_id = luatexbase.attributes['ltj@kcat4'] -- uniq id
+local attr_ruby_intergap = luatexbase.attributes['ltj@kcat5']
+local attr_ruby = luatexbase.attributes['ltj@rubyattr']
+-- ルビ内部処理用,以下のようにノードによって使われ方が異なる
+-- * (whatsit) では JAglue 処理時に,
+-- 「2つ前のクラスタもルビ」 ==> そのルビクラスタの id
+-- otherwise ==> unset
+-- * (whatsit).value node ではルビ全角の値(sp単位)
+-- * 行分割で whatsit の前後に並ぶノードでは,「何番目のルビ関連ノード」か
+-- * (whatsit).value に続く整形済み vbox たちでは post_intrusion の値
+local cat_lp = luatexbase.catcodetables['latex-package']
+
+local round, floor = tex.round, math.floor
+local min, max = math.min, math.max
+
+luatexja.userid_table.RUBY_PRE = luatexbase.newuserwhatsitid('ruby_pre', 'luatexja')
+luatexja.userid_table.RUBY_POST = luatexbase.newuserwhatsitid('ruby_post', 'luatexja')
+local RUBY_PRE = luatexja.userid_table.RUBY_PRE
+local RUBY_POST = luatexja.userid_table.RUBY_POST
+local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
+
+----------------------------------------------------------------
+-- TeX interface 0
+----------------------------------------------------------------
+do
+ local getbox = node.direct.getbox
+ function luatexja.ruby.cpbox() return node_copy(getbox(0)) end
+end
+
+----------------------------------------------------------------
+-- 補助関数群 1
+----------------------------------------------------------------
+
+local function gauss(coef)
+ -- #coef 式,#coef 変数の連立1次方程式系を掃きだし法で解く.
+ local deg = #coef
+ for i = 1, deg do
+ if coef[i][i]==0 then
+ for j = i+1, deg do
+ if coef[j][i]~=0 then
+ coef[i], coef[j] = coef[j], coef[i]; break
+ end
+ end
+ end
+ for j = 1,deg do
+ local d = coef[i][i];
+ if j~=i then
+ local e = coef[j][i]
+ for k = 1, deg+1 do coef[j][k] = coef[j][k] - e*coef[i][k]/d end
+ else
+ for k = 1, deg+1 do coef[i][k] = coef[i][k]/d end
+ end
+ end
+ end
+end
+
+local function solve_1(coef)
+ local a, b, c = coef[1][4], coef[2][4], coef[3][4]
+ coef[1][4], coef[2][4], coef[3][4] = c-b, a+b-c, c-a
+ return coef
+end
+
+local function solve_2(coef)
+ local a, b, c, d, e = coef[1][6], coef[2][6], coef[3][6], coef[4][6], coef[5][6]
+ coef[1][6], coef[2][6], coef[3][6], coef[4][6], coef[5][6]
+ = e-c, a+c-e, e-a-d, b+d-e, e-b
+ return coef
+end
+
+
+-- 実行回数 + ルビ中身 から uniq_id を作る関数
+luatexja.ruby.old_break_info = {} -- public, 前 run 時の分割情報
+local old_break_info = luatexja.ruby.old_break_info
+local cache_handle
+function luatexja.ruby.read_old_break_info()
+ if tex.jobname then
+ local fname = tex.jobname .. '.ltjruby'
+ local real_file = kpse.find_file(fname)
+ if real_file then dofile(real_file) end
+ cache_handle = io.open(fname, 'w')
+ end
+end
+local make_uniq_id
+do
+ local exec_count = 0
+ make_uniq_id = function (w)
+ exec_count = exec_count + 1
+ return exec_count
+ end
+end
+
+-- concatenation of boxes: reusing nodes
+-- ルビ組版が行われている段落/hboxでの設定が使われる.
+-- ルビ文字を格納しているボックスでの設定ではない!
+local concat
+do
+ local node_prev = node.direct.getprev
+ local function get_attr_icflag(p)
+ return (has_attr(p, attr_icflag) or 0) % PROCESSED_BEGIN_FLAG
+ end
+ function concat(f, b)
+ if f then
+ if b then
+ local h, nh = getlist(f), getlist(b)
+ if getid(nh)==id_whatsit and getsubtype(nh)==sid_user then
+ nh=node_next(nh); node_free(node_prev(nh))
+ end
+ set_attr(nh, attr_icflag,
+ get_attr_icflag(nh) + PROCESSED_BEGIN_FLAG)
+ setfield(node_tail(h), 'next', nh)
+ setfield(f, 'head', nil); node_free(f)
+ setfield(b, 'head', nil); node_free(b)
+ local g = luatexja.jfmglue.main(h,false)
+ return node.direct.hpack(g)
+ else
+ return f
+ end
+ elseif b then
+ return b
+ else
+ local h = node_new(id_hlist)
+ setfield(h, 'subtype', 0)
+ setfield(h, 'width', 0)
+ setfield(h, 'height', 0)
+ setfield(h, 'depth', 0)
+ setfield(h, 'glue_set', 0)
+ setfield(h, 'glue_order', 0)
+ setfield(h, 'head', nil)
+ return h
+ end
+ end
+end
+
+local function expand_3bits(num)
+ local t = {}; local a = num
+ for i = 1, 10 do
+ t[i] = a%8; a = floor(a/8)
+ end
+ return t
+end
+----------------------------------------------------------------
+-- 補助関数群 2
+----------------------------------------------------------------
+
+-- box の中身のノードは再利用される
+local enlarge
+do
+ local FROM_JFM = luatexja.icflag_table.FROM_JFM
+ local PROCESSED = luatexja.icflag_table.PROCESSED
+ local KANJI_SKIP = luatexja.icflag_table.KANJI_SKIP
+ local KANJI_SKIP_JFM = luatexja.icflag_table.KANJI_SKIP_JFM
+ local XKANJI_SKIP = luatexja.icflag_table.XKANJI_SKIP
+ local XKANJI_SKIP_JFM= luatexja.icflag_table.XKANJI_SKIP_JFM
+ enlarge = function (box, new_width, pre, middle, post, prenw, postnw)
+ -- pre, middle, post: 伸縮比率
+ -- prenw, postnw: 前後の自然長 (sp)
+ local h = getlist(box);
+ local hh, hd = getfield(box, 'height'), getfield(box, 'depth')
+ local hx = h
+ while hx do
+ local hic = has_attr(hx, attr_icflag) or 0
+ if (hic == KANJI_SKIP) or (hic == KANJI_SKIP_JFM)
+ or (hic == XKANJI_SKIP) or (hic == XKANJI_SKIP_JFM)
+ or ((hic<=FROM_JFM+63) and (hic>=FROM_JFM)) then
+ -- この 5 種類の空白をのばす
+ if getid(hx) == id_kern then
+ local k = node_new(id_glue)
+ setglue(k, getfield(hx, 'kern'), round(middle*65536), 0,
+ 2, 0)
+ setfield(k, 'subtype', 0);
+ h = insert_after(h, hx, k);
+ h = node_remove(h, hx); node_free(hx); hx = k
+ else -- glue
+ setglue(hx, getfield(hx, 'width'), round(middle*65536), 0,
+ 2, 0)
+ end
+ end
+ hx = node_next(hx)
+ end
+ -- 先頭の空白を挿入
+ local k = node_new(id_glue);
+ setglue(k, prenw, round(pre*65536), 0, 2, 0)
+ h = insert_before(h, h, k);
+ -- 末尾の空白を挿入
+ local k = node_new(id_glue);
+ setglue(k, postnw, round(post*65536), 0, 2, 0)
+ insert_after(h, node_tail(h), k);
+ -- hpack
+ setfield(box, 'head', nil); node_free(box)
+ box = node.direct.hpack(h, new_width, 'exactly')
+ setfield(box, 'height', hh)
+ setfield(box, 'depth', hd)
+ return box
+ end
+end
+
+
+----------------------------------------------------------------
+-- TeX interface
+----------------------------------------------------------------
+
+-- rtlr: ルビ部分のボックスたち r1, r2, ...
+-- rtlp: 親文字 のボックスたち p1, p2, ...
+local function texiface_low(rst, rtlr, rtlp)
+ local w = node_new(id_whatsit, sid_user)
+ setfield(w, 'type', 110); setfield(w, 'user_id', RUBY_PRE)
+ local wv = node_new(id_whatsit, sid_user)
+ setfield(w, 'value', to_node(wv))
+ setfield(wv, 'type', 100)
+ setfield(wv, 'value', floor(#rtlr))
+ setfield(wv, 'user_id', RUBY_PRE) -- dummy
+ set_attr(wv, attr_ruby, rst.rubyzw)
+ set_attr(wv, attr_ruby_maxmargin, rst.maxmargin)
+ set_attr(wv, attr_ruby_maxprep, rst.pre)
+ set_attr(wv, attr_ruby_maxpostp, rst.post)
+ set_attr(wv, attr_ruby_intergap, rst.intergap)
+ set_attr(wv, attr_ruby_stretch, rst.stretch)
+ set_attr(wv, attr_ruby_mode, rst.mode)
+ local n = wv
+ for i = 1, #rtlr do
+ _, n = insert_after(wv, n, rtlr[i])
+ _, n = insert_after(wv, n, rtlp[i])
+ end
+ -- w.value: (whatsit) .. r1 .. p1 .. r2 .. p2
+ node.direct.write(w); return w,wv
+end
+
+-- rst: table
+function luatexja.ruby.texiface(rst, rtlr, rtlp)
+ if #rtlr ~= #rtlp then
+ for i=1, #rtlr do node_free(rtlr[i]) end
+ for i=1, #rtlp do node_free(rtlp[i]) end
+ ltjb.package_error('luatexja-ruby',
+ 'Group count mismatch between the ruby and\n' ..
+ 'the body (' .. #rtlr .. ' != ' .. #rtlp .. ').',
+ '')
+ else
+ local f = true
+ for i = 1,#rtlr do
+ if getfield(rtlr[i], 'width') > getfield(rtlp[i], 'width') then
+ f = false; break
+ end
+ end
+ if f then -- モノルビ * n
+ local r,p = {true}, {true}
+ for i = 1,#rtlr do
+ r[1] = rtlr[i]; p[1] = rtlp[i]; texiface_low(rst, r, p)
+ end
+ else
+ local w, wv = texiface_low(rst, rtlr, rtlp)
+ local id = make_uniq_id(w)
+ set_attr(wv, attr_ruby_id, id)
+ end
+ end
+end
+
+----------------------------------------------------------------
+-- pre_line_break
+----------------------------------------------------------------
+
+-- r, p の中身のノードは再利用される
+local function enlarge_parent(r, p, ppre, pmid, ppost, mapre, mapost, intmode)
+ -- r: ルビ部分の格納された box,p: 同,親文字
+ local rwidth = getfield(r, 'width')
+ local sumprot = rwidth - getfield(p, 'width') -- >0
+ local pre_intrusion, post_intrusion
+ if intmode == 0 then -- とりあえず組んでから決める
+ p = enlarge(p, rwidth, ppre, pmid, ppost, 0, 0)
+ pre_intrusion = min(mapre, round(ppre*getfield(p, 'glue_set')*65536))
+ post_intrusion = min(mapost, round(ppost*getfield(p, 'glue_set')*65536))
+ elseif intmode == 1 then
+ pre_intrusion = min(mapre, sumprot);
+ post_intrusion = min(mapost, max(sumprot-pre_intrusion, 0))
+ p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion)
+ elseif intmode == 2 then
+ post_intrusion = min(mapost, sumprot);
+ pre_intrusion = min(mapre, max(sumprot-post_intrusion, 0))
+ p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion)
+ else -- intmode == 3
+ local n = min(mapre, mapost)*2
+ if n < sumprot then
+ pre_intrusion = n/2; post_intrusion = n/2
+ else
+ pre_intrusion = floor(sumprot/2); post_intrusion = sumprot - pre_intrusion
+ end
+ p = enlarge(p, rwidth, ppre, pmid, ppost, pre_intrusion, post_intrusion)
+ pre_intrusion = min(mapre, pre_intrusion + round(ppre*getfield(p, 'glue_set')*65536))
+ post_intrusion = min(mapost, post_intrusion + round(ppost*getfield(p, 'glue_set')*65536))
+ end
+ setfield(r, 'shift', -pre_intrusion)
+ local rwidth = rwidth - pre_intrusion - post_intrusion
+ setfield(r, 'width', rwidth)
+ setfield(p, 'width', rwidth)
+ local ps = getlist(p)
+ setfield(ps, 'width', getfield(ps, 'width') - pre_intrusion)
+ return r, p, post_intrusion
+end
+
+-- ルビボックスの生成(単一グループ)
+-- returned value: <new box>, <ruby width>, <post_intrusion>
+local max_margin
+local function new_ruby_box(r, p, ppre, pmid, ppost,
+ mapre, mapost, imode, rgap)
+ local post_intrusion = 0
+ local intmode = imode%4
+ local rpre, rmid, rpost, rsmash
+ imode = floor(imode/262144); rsmash = (imode%2 ==1)
+ imode = floor(imode/2); rpost = imode%8;
+ imode = (imode-rpost)/8; rmid = imode%8;
+ imode = (imode-rmid)/8; rpre = imode%8
+ if getfield(r, 'width') > getfield(p, 'width') then -- change the width of p
+ r, p, post_intrusion = enlarge_parent(r, p, ppre, pmid, ppost, mapre, mapost, intmode)
+ elseif getfield(r, 'width') < getfield(p, 'width') then -- change the width of r
+ r = enlarge(r, getfield(p, 'width'), rpre, rmid, rpost, 0, 0)
+ post_intrusion = 0
+ local need_repack = false
+ -- margin が大きくなりすぎた時の処理
+ if round(rpre*getfield(r, 'glue_set')*65536) > max_margin then
+ local ps = getlist(r); need_repack = true
+ setfield(ps, 'width', max_margin)
+ setfield(ps, 'stretch', 1) -- 全く伸縮しないのも困る
+ end
+ if round(rpost*getfield(r, 'glue_set')*65536) > max_margin then
+ local ps = node_tail(getlist(r)); need_repack = true
+ setfield(ps, 'width', max_margin)
+ setfield(ps, 'stretch', 1) -- 全く伸縮しないのも困る
+ end
+ if need_repack then
+ local rt = r
+ r = node.direct.hpack(getlist(r), getfield(r, 'width'), 'exactly')
+ setfield(rt, 'head', nil); node_free(rt);
+ end
+ end
+ local a, k = node_new(id_rule), node_new(id_kern, 1)
+ setfield(a, 'width', 0); setfield(a, 'height', 0)
+ setfield(a, 'depth', 0); setfield(k, 'kern', rgap)
+ insert_after(r, r, a); insert_after(r, a, k);
+ insert_after(r, k, p); setfield(p, 'next', nil)
+ a = node.direct.vpack(r); setfield(a, 'shift', 0)
+ set_attr(a, attr_ruby, post_intrusion)
+ if rsmash or getfield(a, 'height')<getfield(p, 'height') then
+ local k = node_new(id_kern, 1)
+ setfield(k, 'kern', -getfield(a, 'height')+getfield(p, 'height'))
+ setfield(a, 'head', k); insert_before(r, r, k)
+ setfield(a, 'height', getfield(p, 'height'))
+ end
+
+ return a, getfield(r, 'width'), post_intrusion
+end
+
+
+-- High-level routine in pre_linebreak_filter
+local post_intrusion_backup
+local max_allow_pre, max_allow_post
+
+
+-- 中付き熟語ルビ,cmp containers
+-- 「文字の構成を考えた」やつはどうしよう
+local function pre_low_cal_box(w, cmp)
+ local rb = {}
+ local pb = {}
+ local kf = {}
+ -- kf[i] : container 1--i からなる行末形
+ -- kf[cmp+i] : container i--cmp からなる行頭形
+ -- kf[2cmp+1] : 行中形
+ local wv = getfield(w, 'value')
+ local mdt -- nt*: node temp
+ local coef = {} -- 連立一次方程式の拡大係数行列
+ local rtb = expand_3bits(has_attr(wv, attr_ruby_stretch))
+ local rgap = has_attr(wv, attr_ruby_intergap)
+ local intmode = floor(has_attr(wv, attr_ruby_mode)/4)
+
+ -- node list 展開・行末形の計算
+ local nt, nta, ntb = wv, nil, nil -- nt*: node temp
+ for i = 1, cmp do
+ nt = node_next(nt); rb[i] = nt; nta = concat(nta, node_copy(nt))
+ nt = node_next(nt); pb[i] = nt; ntb = concat(ntb, node_copy(nt))
+ coef[i] = {}
+ for j = 1, 2*i do coef[i][j] = 1 end
+ for j = 2*i+1, 2*cmp+1 do coef[i][j] = 0 end
+ kf[i], coef[i][2*cmp+2]
+ = new_ruby_box(node_copy(nta), node_copy(ntb),
+ rtb[6], rtb[5], rtb[4], max_allow_pre, 0, intmode, rgap)
+ end
+ node_free(nta); node_free(ntb)
+
+ -- 行頭形の計算
+ local nta, ntb = nil, nil
+ for i = cmp,1,-1 do
+ coef[cmp+i] = {}
+ for j = 1, 2*i-1 do coef[cmp+i][j] = 0 end
+ for j = 2*i, 2*cmp+1 do coef[cmp+i][j] = 1 end
+ nta = concat(node_copy(rb[i]), nta); ntb = concat(node_copy(pb[i]), ntb)
+ kf[cmp+i], coef[cmp+i][2*cmp+2]
+ = new_ruby_box(node_copy(nta), node_copy(ntb),
+ rtb[9], rtb[8], rtb[7], 0, max_allow_post, intmode, rgap)
+ end
+
+ -- ここで,nta, ntb には全 container を連結した box が入っているので
+ -- それを使って行中形を計算する.
+ coef[2*cmp+1] = {}
+ for j = 1, 2*cmp+1 do coef[2*cmp+1][j] = 1 end
+ kf[2*cmp+1], coef[2*cmp+1][2*cmp+2], post_intrusion_backup
+ = new_ruby_box(nta, ntb, rtb[3], rtb[2], rtb[1],
+ max_allow_pre, max_allow_post, intmode, rgap)
+
+ -- w.value の node list 更新.
+ local nt = wv
+ node.direct.flush_list(node_next(wv))
+ for i = 1, 2*cmp+1 do setfield(nt, 'next', kf[i]); nt = kf[i] end
+
+ if cmp==1 then solve_1(coef)
+ elseif cmp==2 then solve_2(coef)
+ else
+ gauss(coef) -- 掃きだし法で連立方程式形 coef を解く
+ end
+ return coef
+end
+
+local first_whatsit
+do
+ local traverse_id = node.direct.traverse_id
+ function first_whatsit(n) -- n 以後で最初の whatsit
+ for h in traverse_id(id_whatsit, n) do
+ return h
+ end
+ return nil
+ end
+end
+
+local next_cluster_array = {}
+-- ノード追加
+local function pre_low_app_node(head, w, cmp, coef, ht, dp)
+ -- メインの node list 更新
+ local nt = node_new(id_glue)
+ setglue(nt, coef[1][2*cmp+2], 0, 0, 0, 0)
+ set_attr(nt, attr_ruby, 1); set_attr(w, attr_ruby, 2)
+ head = insert_before(head, w, nt)
+ nt = w
+ for i = 1, cmp do
+ -- rule
+ local nta = node_new(id_rule);
+ setfield(nta, 'width', coef[i*2][2*cmp+2])
+ setfield(nta, 'height', ht); setfield(nta, 'depth', dp)
+ setfield(nta, 'subtype', 0)
+ insert_after(head, nt, nta)
+ set_attr(nta, attr_ruby, 2*i+1)
+ -- glue
+ if i~=cmp or not next_cluster_array[w] then
+ nt = node_new(id_glue); insert_after(head, nta, nt)
+ else
+ nt = next_cluster_array[w]
+ end
+ setglue(nt, coef[i*2+1][2*cmp+2], 0, 0, 0, 0)
+ set_attr(nt, attr_ruby, 2*i+2)
+ end
+ tex.setattribute('global', attr_ruby, -0x7FFFFFFF)
+ setfield(w, 'user_id', RUBY_POST)
+ next_cluster_array[w]=nil
+ return head, first_whatsit(node_next(nt))
+end
+
+local function pre_high(ahead)
+ if not ahead then return ahead end
+ local head = to_direct(ahead)
+ post_intrusion_backup = 0
+ local n = first_whatsit(head)
+ while n do
+ if getsubtype(n) == sid_user and getfield(n, 'user_id') == RUBY_PRE then
+ local nv = getfield(n, 'value')
+ max_allow_pre = has_attr(nv, attr_ruby_maxprep) or 0
+ local atr = has_attr(n, attr_ruby) or 0
+ if max_allow_pre < 0 then
+ if atr>0 then
+ -- 直前のルビで intrusion がおこる可能性あり.
+ -- 前 run のデータが残っていればそれを使用,
+ -- そうでなければ行中形のデータを利用する
+ local op = old_break_info[atr] or post_intrusion_backup
+ max_allow_pre = max(0, -max_allow_pre - op)
+ else
+ max_allow_pre = -max_allow_pre
+ end
+ end
+ post_intrusion_backup = 0
+ max_allow_post = has_attr(nv, attr_ruby_maxpostp) or 0
+ max_margin = has_attr(nv, attr_ruby_maxmargin) or 0
+ local coef = pre_low_cal_box(n, getfield(nv, 'value'))
+ local s = node_tail(nv) --ルビ文字
+ head, n = pre_low_app_node(
+ head, n, getfield(nv, 'value'), coef,
+ getfield(s, 'height'), getfield(s, 'depth')
+ )
+ else
+ n = first_whatsit(node_next(n))
+ end
+ end
+ return to_node(head)
+end
+luatexbase.add_to_callback('pre_linebreak_filter', pre_high, 'ltj.ruby.pre', 100)
+luatexbase.add_to_callback('hpack_filter', pre_high, 'ltj.ruby.pre', 100)
+
+----------------------------------------------------------------
+-- post_line_break
+----------------------------------------------------------------
+local post_lown
+do
+ local function write_aux(wv, num)
+ local id = has_attr(wv, attr_ruby_id)
+ if id>0 and cache_handle then
+ cache_handle:write(
+ 'luatexja.ruby.old_break_info['
+ .. tostring(id) .. ']=' .. num
+ .. '\n')
+ end
+ end
+
+ post_lown = function (rs, rw, cmp, ch)
+ -- ch: the head of `current' hlist
+ if #rs ==0 or not rw then return ch end
+ local hn = has_attr(rs[1], attr_ruby)
+ local fn = has_attr(rs[#rs], attr_ruby)
+ local wv = getfield(rw, 'value')
+ if hn==1 then
+ if fn==2*cmp+2 then
+ local hn = node_tail(wv)
+ node_remove(wv, hn)
+ insert_after(ch, rs[1], hn)
+ set_attr(hn, attr_icflag, PROCESSED)
+ write_aux(wv, has_attr(hn, attr_ruby))-- 行中形
+ else
+ local deg, hn = (fn-1)/2, wv
+ for i = 1, deg do hn = node_next(hn) end;
+ node_remove(wv, hn)
+ setfield(hn, 'next', nil)
+ insert_after(ch, rs[1], hn)
+ set_attr(hn, attr_icflag, PROCESSED)
+ write_aux(wv, has_attr(hn, attr_ruby))
+ end
+ else
+ local deg, hn = max((hn-1)/2,2), wv
+ for i = 1, cmp+deg-1 do hn = node_next(hn) end
+ -- -1 is needed except the case hn = 3,
+ -- because a ending-line form is removed already from the list
+ node_remove(wv, hn); setfield(hn, 'next', nil)
+ insert_after(ch, rs[1], hn)
+ set_attr(hn, attr_icflag, PROCESSED)
+ if fn == 2*cmp-1 then
+ write_aux(wv, has_attr(hn, attr_ruby))
+ end
+ end
+ for i = 1,#rs do
+ local ri = rs[i]
+ ch = node_remove(ch, ri); node_free(ri);
+ end
+ -- cleanup
+ if fn >= 2*cmp+1 then node_free(rw) end
+ return ch;
+ end
+end
+
+local function post_high_break(head)
+ local rs = {} -- rs: sequence of ruby_nodes,
+ local rw = nil -- rw: main whatsit
+ local cmp = -2 -- dummy
+ for h in node.direct.traverse_id(id_hlist, to_direct(head)) do
+ for i = 1, #rs do rs[i] = nil end
+ local ha = getlist(h)
+ while ha do
+ local hai = getid(ha)
+ local i = ((hai == id_glue and getsubtype(ha)==0)
+ or (hai == id_rule and getsubtype(ha)==0)
+ or (hai == id_whatsit and getsubtype(ha)==sid_user
+ and getfield(ha, 'user_id', RUBY_POST)))
+ and has_attr(ha, attr_ruby) or 0
+ if i==0 then
+ ha = node_next(ha)
+ elseif i==1 then
+ setfield(h, 'head', post_lown(rs, rw, cmp, getlist(h)))
+ for i = 2, #rs do rs[i] = nil end -- rs[1] is set by the next statement
+ rs[1], rw = ha, nil; ha = node_next(ha)
+ elseif i==2 then
+ rw = ha
+ cmp = getfield(getfield(rw, 'value'), 'value')
+ local hb, hc = node_remove(getlist(h), rw)
+ setfield(h, 'head', hb); ha = hc
+ else -- i>=3
+ rs[#rs+1] = ha; ha = node_next(ha)
+ end
+ end
+ setfield(h, 'head', post_lown(rs, rw, cmp, getlist(h)))
+ end
+ return head
+end
+
+local function post_high_hbox(ahead)
+ local ha = to_direct(ahead); local head = ha
+ local rs = {}; -- rs: sequence of ruby_nodes,
+ local rw = nil; -- rw: main whatsit
+ local cmp
+ while ha do
+ local hai = getid(ha)
+ local i = ((hai == id_glue and getsubtype(ha)==0)
+ or (hai == id_rule and getsubtype(ha)==0)
+ or (hai == id_whatsit and getsubtype(ha)==sid_user
+ and getfield(ha, 'user_id', RUBY_POST)))
+ and has_attr(ha, attr_ruby) or 0
+ if i==0 then
+ ha = node_next(ha)
+ elseif i==1 then
+ head = post_lown(rs, rw, cmp, head)
+ for i = 2, #rs do rs[i] = nil end -- rs[1] is set by the next statement
+ rs[1], rw = ha, nil; ha = node_next(ha)
+ elseif i==2 then
+ rw = ha
+ cmp = getfield(getfield(rw, 'value'), 'value')
+ head, ha = node_remove(head, rw)
+ else -- i >= 3
+ rs[#rs+1] = ha; ha = node_next(ha)
+ end
+ end
+ return to_node(post_lown(rs, rw, cmp, head))
+end
+
+luatexbase.add_to_callback('post_linebreak_filter', post_high_break, 'ltj.ruby.post_break', 100)
+luatexbase.add_to_callback('hpack_filter', post_high_hbox, 'ltj.ruby.post_hbox', 101)
+
+
+----------------------------------------------------------------
+-- for jfmglue callbacks
+----------------------------------------------------------------
+do
+ local RIPRE = luatexja.stack_table_index.RIPRE
+ local function whatsit_callback(Np, lp, Nq)
+ if Np.nuc then return Np
+ elseif getfield(lp, 'user_id') == RUBY_PRE then
+ Np.first, Np.nuc, Np.last = lp, lp, lp
+ local lpv = getfield(lp, 'value')
+ local x = node_next(node_next(lpv))
+ Np.last_char = luatexja.jfmglue.check_box_high(Np, getlist(x), nil)
+ if Nq.id ~=id_pbox_w then
+ if type(Nq.char)=='number' then
+ -- Nq is a JAchar
+ if has_attr(lpv, attr_ruby_maxprep) < 0 then -- auto
+ local p = round((ltjs.table_current_stack[RIPRE + Nq.char] or 0)
+ *has_attr(lpv, attr_ruby))
+ if has_attr(lpv, attr_ruby_mode)%2 == 0 then -- intrusion 無効
+ p = 0
+ end
+ set_attr(lpv, attr_ruby_maxprep, -p)
+ end
+ if Nq.prev_ruby then
+ set_attr(lp, attr_ruby, Nq.prev_ruby)
+ end
+ elseif has_attr(lpv, attr_ruby_maxprep) < 0 then -- auto
+ if Nq.char == 'parbdd' then
+ local p = round((ltjs.table_current_stack[RIPRE-1] or 0)
+ *has_attr(lpv, attr_ruby))
+ p = min(p, Nq.width)
+ if has_attr(lpv, attr_ruby_mode)%2 == 0 then -- intrusion 無効
+ p = 0
+ end
+ set_attr(lpv, attr_ruby_maxprep, p)
+ else
+ set_attr(lpv, attr_ruby_maxprep, 0)
+ end
+ end
+ elseif has_attr(lpv, attr_ruby_maxprep) < 0 then -- auto
+ set_attr(lpv, attr_ruby_maxprep, 0)
+ end
+ return Np
+ else
+ return Np
+ end
+ end
+ luatexbase.add_to_callback("luatexja.jfmglue.whatsit_getinfo", whatsit_callback,
+ "luatexja.ruby.np_info", 1)
+end
+
+do
+ local RIPOST = luatexja.stack_table_index.RIPOST
+ local function whatsit_after_callback(s, Nq, Np)
+ if not s and getfield(Nq.nuc, 'user_id') == RUBY_PRE then
+ if Np then
+ local last_glue = node_new(id_glue)
+ set_attr(last_glue, attr_icflag, 0)
+ insert_before(Nq.nuc, Np.first, last_glue)
+ Np.first = last_glue
+ next_cluster_array[Nq.nuc] = last_glue -- ルビ処理用のグルー
+ end
+ local nqnv = getfield(Nq.nuc, 'value')
+ local x = node_next(node_next(nqnv))
+ for i = 2, getfield(nqnv, 'value') do x = node_next(node_next(x)) end
+ Nq.last_char = luatexja.jfmglue.check_box_high(Nq, getlist(x), nil)
+ luatexja.jfmglue.after_hlist(Nq)
+ if Np and Np.id ~=id_pbox_w and type(Np.char)=='number' then
+ -- Np is a JAchar
+ local rm = has_attr(nqnv, attr_ruby_mode)
+ if has_attr(nqnv, attr_ruby_maxpostp) < 0 then -- auto
+ local p = round((ltjs.table_current_stack[RIPOST + Np.char] or 0)
+ *has_attr(nqnv, attr_ruby))
+ if rm%2 == 0 then -- intrusion 無効
+ p = 0
+ end
+ if rm%4 >= 2 then
+ local q = has_attr(nqnv, attr_ruby_maxprep)
+ if q < p then p = q
+ elseif q > p then
+ set_attr(nqnv, attr_ruby_maxprep, p)
+ end
+ end
+ set_attr(nqnv, attr_ruby_maxpostp, p)
+ end
+ Np.prev_ruby = has_attr(getfield(Nq.nuc, 'value'), attr_ruby_id)
+ -- 前のクラスタがルビであったことのフラグ
+ else -- 直前が文字以外
+ local nqnv = getfield(Nq.nuc, 'value')
+ if has_attr(nqnv, attr_ruby_maxpostp) < 0 then -- auto
+ set_attr(nqnv, attr_ruby_maxpostp, 0)
+ if has_attr(nqnv, attr_ruby_mode)%4 >= 2 then
+ set_attr(nqnv, attr_ruby_maxprep, 0)
+ end
+ end
+ end
+ return true
+ else
+ return s
+ end
+ end
+ luatexbase.add_to_callback("luatexja.jfmglue.whatsit_after", whatsit_after_callback,
+ "luatexja.ruby.np_info_after", 1)
+end
+
diff --git a/macros/luatex/generic/luatexja/src/ltj-setwidth.lua b/macros/luatex/generic/luatexja/src/ltj-setwidth.lua
new file mode 100644
index 0000000000..9f13c97c61
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-setwidth.lua
@@ -0,0 +1,311 @@
+--
+-- src/ltj-setwidth.lua
+--
+
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('stack'); local ltjs = luatexja.stack
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('direction'); local ltjd = luatexja.direction
+
+local setfield = node.direct.setfield
+local getfield = node.direct.getfield
+local getid = node.direct.getid
+local getfont = node.direct.getfont
+local getlist = node.direct.getlist
+local getchar = node.direct.getchar
+local getsubtype = node.direct.getsubtype
+local getwidth = node.direct.getwidth or function(n) return getfield(n,'width') end
+local getdepth = node.direct.getdepth or function(n) return getfield(n,'depth') end
+local getwhd = node.direct.getwhd or function(n)
+ return getfield(n,'width'), getfield(n,'height'),getfield(n,'depth') end
+
+local setwhd = node.direct.setwhd or function(n,w,h,d)
+ setfield(n,'width',w); setfield(n,'height',h); setfield(n,'depth',d) end
+local setchar = node.direct.setchar or function(n,c) setfield(n,'char',c) end
+local setnext = node.direct.setnext or function(n,c) setfield(n,'next',c) end
+local setdir = node.direct.setdir or function(n,c) setfield(n,'dir',c) end
+local setkern = node.direct.setkern or function(n,c) setfield(n,'kern',c) end
+local setoffsets = node.direct.setoffsets or function(n,x,y)
+ setfield(n,'xoffset',x); setfield(n,'yoffset',y) end
+local getoffsets = node.direct.getoffsets or function(n)
+ return getfield(n,'xoffset'), getfield(n,'yoffset') end
+
+local node_traverse_id = node.direct.traverse_id
+local node_traverse = node.direct.traverse
+local node_new = node.direct.new
+local node_copy = node.direct.copy
+local node_remove = node.direct.remove
+local node_tail = node.direct.tail
+local node_next = node.direct.getnext
+local has_attr = node.direct.has_attribute
+local set_attr = node.direct.set_attribute
+local node_insert_before = node.direct.insert_before
+local node_insert_after = node.direct.insert_after
+local round = tex.round
+
+local id_glyph = node.id('glyph')
+local id_kern = node.id('kern')
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_rule = node.id('rule')
+local id_math = node.id('math')
+local id_whatsit = node.id('whatsit')
+local sid_save = node.subtype('pdf_save')
+local sid_restore = node.subtype('pdf_restore')
+local sid_matrix = node.subtype('pdf_setmatrix')
+local dir_tate = luatexja.dir_table.dir_tate
+
+local attr_ykblshift = luatexbase.attributes['ltj@ykblshift']
+local attr_tkblshift = luatexbase.attributes['ltj@tkblshift']
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local attr_vert_ori = luatexbase.attributes['ltj@vert@ori']
+
+local ltjf_font_extra_info = ltjf.font_extra_info
+
+local PACKED = luatexja.icflag_table.PACKED
+local PROCESSED = luatexja.icflag_table.PROCESSED
+
+local get_pr_begin_flag
+do
+ local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
+ local floor = math.floor
+ get_pr_begin_flag = function (p)
+ local i = has_attr(p, attr_icflag) or 0
+ return i - i%PROCESSED_BEGIN_FLAG
+ end
+end
+
+local ltjw = {} --export
+luatexja.setwidth = ltjw
+
+luatexbase.create_callback("luatexja.set_width", "data",
+ function (fstable, fmtable, char_data)
+ return fstable
+ end)
+local call_callback = luatexbase.call_callback
+
+local fshift = { down = 0, left = 0 }
+
+local min, max = math.min, math.max
+
+local rule_subtype = (status.luatex_version>=85) and 3 or 0
+
+-- 和文文字の位置補正(横)
+local function capsule_glyph_yoko(p, met, char_data, head, dir)
+ if not char_data then return node_next(p), head, p end
+ fshift.down = char_data.down; fshift.left = char_data.left
+ fshift = call_callback("luatexja.set_width", fshift, met, char_data)
+ local kbl = has_attr(p, attr_ykblshift) or 0
+ --
+ -- f*: whd specified in JFM
+ local pwidth, pheight,pdepth = getwhd(p)
+ local fwidth = char_data.width or pwidth
+ local fheight= char_data.height or pheight
+ local fdepth = char_data.depth or pdepth
+ if pwidth==fwidth then
+ -- 補正後glyph node は ht: p.height - kbl - down, dp: p.depth + min(0, kbl+down) を持つ
+ -- 設定されるべき寸法: ht: fheight - kbl, dp: fdepth + kbl
+ local ht_diff = fheight + fshift.down - pheight
+ local dp_diff = fdepth + kbl - pdepth - min(kbl + fshift.down, 0)
+ if ht_diff == 0 and dp_diff ==0 then -- offset only
+ set_attr(p, attr_icflag, PROCESSED)
+ local xo, yo = getoffsets(p)
+ setoffsets(p, xo - fshift.left, yo - kbl - fshift.down)
+ return node_next(p), head, p
+ elseif ht_diff >= 0 and dp_diff >=0 then -- rule
+ local box = node_new(id_rule,rule_subtype)
+ local xo, yo = getoffsets(p)
+ setoffsets(p, xo, yo - kbl - fshift.down)
+ setwhd(box, 0, fheight - kbl, fdepth + kbl)
+ setdir(box, dir)
+ set_attr(box, attr_icflag, PACKED)
+ set_attr(p, attr_icflag, PROCESSED)
+ head = p and node_insert_before(head, p, box)
+ or node_insert_after(head, node_tail(head), box)
+ return node_next(p), head, p, box
+ end
+ end
+
+ local q
+ head, q = node_remove(head, p)
+ local xo, yo = getoffsets(p)
+ setoffsets(p, xo + char_data.align*(fwidth-pwidth) - fshift.left,
+ yo - fshift.down);
+ setnext(p, nil)
+ local box = node_new(id_hlist)
+ setwhd(box, fwidth, fheight, fdepth)
+ setfield(box, 'head', p)
+ setfield(box, 'shift', kbl)
+ setdir(box, dir)
+ set_attr(box, attr_icflag, PACKED)
+ head = q and node_insert_before(head, q, box)
+ or node_insert_after(head, node_tail(head), box)
+ return q, head, box
+end
+
+luatexja.setwidth.capsule_glyph_yoko = capsule_glyph_yoko
+
+-- 和文文字の位置補正(縦)
+-- UTR#50 で R もしくは Tr と指定されているが,縦組用グリフがないもの
+local function capsule_glyph_tate_rot(p, met, char_data, head, dir, asc)
+ fshift.down = char_data.down; fshift.left = char_data.left
+ fshift = call_callback("luatexja.set_width", fshift, met, char_data)
+ local kbl = has_attr(p, attr_tkblshift) or 0
+ -- f*: whd specified in JFM
+ local pwidth, pheight,pdepth = getwhd(p)
+ local fwidth = char_data.width or pwidth
+ local fheight= char_data.height or pheight
+ local fdepth = char_data.depth or pdepth
+ local q
+ head, q = node_remove(head, p)
+ local xo, yo = getoffsets(p)
+ setoffsets(p, xo + char_data.align*(fwidth-pwidth) - fshift.left,
+ yo - fshift.down - asc);
+ setnext(p, nil)
+ local box = node_new(id_hlist)
+ setwhd(box, fwidth, fheight, fdepth)
+ setfield(box, 'head', p)
+ setfield(box, 'shift', kbl)
+ setdir(box, dir)
+ set_attr(box, attr_icflag, PACKED)
+ head = q and node_insert_before(head, q, box)
+ or node_insert_after(head, node_tail(head), box)
+ return q, head, box
+end
+
+local function capsule_glyph_tate(p, met, char_data, head, dir)
+ if not char_data then return node_next(p), head end
+ local ascent, descent = met.ascent, met.descent
+ local fwidth, pwidth = char_data.width
+ do
+ local pf, pc = getfont(p), getchar(p)
+ local feir = ltjf_font_extra_info[pf]
+ if feir and feir.rotation and met.vert_activated then
+ if feir.rotation[pc] and (has_attr(p, attr_vert_ori) or 0)<=0 then
+ return capsule_glyph_tate_rot(p, met, char_data, head, dir, 0.5*(ascent-descent))
+ end
+ end
+ local ident = fonts.hashes.identifiers[pf]
+ pwidth = (ident.descriptions and ident.descriptions[pc]
+ and ident.descriptions[pc].vheight
+ and ident.descriptions[pc].vheight / ident.units * met.size)
+ or (ident.metadata and ident.metadata.defaultvheight) or (ascent+descent)
+ ascent = feir.vorigin[pc] and (feir.vorigin[pc] / ident.units * met.size) or ascent
+ end
+ fwidth = fwidth or pwidth
+ fshift.down = char_data.down; fshift.left = char_data.left
+ fshift = call_callback("luatexja.set_width", fshift, met, char_data)
+ local fheight = char_data.height or 0
+ local fdepth = char_data.depth or 0
+ local xo, yo = getoffsets(p)
+ local y_shift = xo + (has_attr(p,attr_tkblshift) or 0)
+ local q
+ head, q = node_remove(head, p)
+ local box = node_new(id_hlist)
+ setwhd(box, fwidth, fheight, fdepth)
+ setfield(box, 'shift', y_shift)
+ setdir(box, dir)
+
+ setoffsets(p, -fshift.down,
+ yo -(ascent + char_data.align*(fwidth-pwidth) - fshift.left) )
+ local ws = node_new(id_whatsit, sid_save)
+ local wm = node_new(id_whatsit, sid_matrix)
+ setfield(wm, 'data', '0 1 -1 0')
+ local pwnh = -round(0.5*getwidth(p))
+ local k2 = node_new(id_kern, 1); setkern(k2, pwnh)
+ local k3 = node_new(id_kern, 1); setkern(k3, -getwidth(p)-pwnh)
+ local wr = node_new(id_whatsit, sid_restore)
+ setfield(box, 'head', ws)
+ setnext(ws, wm); setnext(wm, k2);
+ setnext(k2, p); setnext(p, k3);
+ setnext(k3, wr);
+
+ set_attr(box, attr_icflag, PACKED)
+ head = q and node_insert_before(head, q, box)
+ or node_insert_after(head, node_tail(head), box)
+ return q, head, box
+end
+luatexja.setwidth.capsule_glyph_tate = capsule_glyph_tate
+
+local function capsule_glyph_math(p, met, char_data)
+ if not char_data then return nil end
+ local fwidth, pwidth = char_data.width, getwidth(p)
+ fwidth = fwidth or pwidth
+ fshift.down = char_data.down; fshift.left = char_data.left
+ fshift = call_callback("luatexja.set_width", fshift, met, char_data)
+ local fheight, fdepth = char_data.height, char_data.depth
+ local y_shift
+ = - getfield(p, 'yoffset') + (has_attr(p,attr_ykblshift) or 0)
+ setfield(p, 'yoffset', -fshift.down)
+ setfield(p, 'xoffset', getfield(p, 'xoffset') + char_data.align*(fwidth-pwidth) - fshift.left)
+ local box = node_new(id_hlist);
+ setwhd(box, fwidth, fheight, fdepth)
+ setfield(box, 'head', p)
+ setfield(box, 'shift', y_shift)
+ setdir(box, tex.mathdir)
+ set_attr(box, attr_icflag, PACKED)
+ return box
+end
+luatexja.setwidth.capsule_glyph_math = capsule_glyph_math
+
+-- 数式の位置補正
+function luatexja.setwidth.apply_ashift_math(head, last, attr_ablshift)
+ for p in node_traverse(head) do
+ local pid = getid(p)
+ if p==last then
+ return
+ elseif (has_attr(p, attr_icflag) or 0) ~= PROCESSED then
+ if pid==id_hlist or pid==id_vlist then
+ setfield(p, 'shift', getfield(p, 'shift') + (has_attr(p,attr_ablshift) or 0))
+ elseif pid==id_rule then
+ local v = has_attr(p,attr_ablshift) or 0
+ setfield(p, 'height', getfield(p, 'height')-v)
+ setfield(p, 'depth', getdepth(p)+v)
+ set_attr(p, attr_icflag, PROCESSED)
+ elseif pid==id_glyph then
+ -- 欧文文字; 和文文字は pid == id_hlist の場合で処理される
+ -- (see conv_jchar_to_hbox_A in ltj-math.lua)
+ setfield(p, 'yoffset',
+ getfield(p, 'yoffset') - (has_attr(p,attr_ablshift) or 0))
+ end
+ set_attr(p, attr_icflag, PROCESSED)
+ end
+ end
+end
+
+-- discretionary の位置補正
+do
+ local attr_yablshift = luatexbase.attributes['ltj@yablshift']
+ local attr_tablshift = luatexbase.attributes['ltj@tablshift']
+ local attr_ablshift
+ local disc, tex_dir
+ local function ashift_disc_inner(field)
+ local head = getfield(disc, field)
+ if not head then return end
+ local y_adjust, node_depth, adj_depth = 0, 0, 0
+ for lp in node_traverse_id(id_glyph, head) do
+ y_adjust = has_attr(lp,attr_ablshift) or 0
+ local ld = getdepth(lp)
+ node_depth = max(ld + min(y_adjust, 0), node_depth)
+ adj_depth = (y_adjust>0) and max(ld + y_adjust, adj_depth) or adj_depth
+ setfield(lp, 'yoffset', getfield(lp, 'yoffset') - y_adjust)
+ end
+ if adj_depth>node_depth then
+ local r = node_new(id_rule,rule_subtype)
+ setwhd(r, 0, 0, adj_depth); setdir(r, tex_dir)
+ set_attr(r, attr_icflag, PROCESSED)
+ if field=='post' then
+ node_insert_after(head, head, r)
+ else
+ setfield(disc, field, (node_insert_before(head, head, r)))
+ end
+ end
+ end
+ function luatexja.setwidth.apply_ashift_disc(d, is_dir_tate, dir)
+ attr_ablshift = is_dir_tate and attr_tablshift or attr_yablshift
+ disc, tex_dir = d, dir
+ ashift_disc_inner('pre')
+ ashift_disc_inner('post')
+ ashift_disc_inner('replace')
+ end
+end
diff --git a/macros/luatex/generic/luatexja/src/ltj-stack.lua b/macros/luatex/generic/luatexja/src/ltj-stack.lua
new file mode 100644
index 0000000000..121804d20c
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-stack.lua
@@ -0,0 +1,143 @@
+--
+-- luatexja/stack.lua
+--
+luatexbase.provides_module({
+ name = 'luatexja.stack',
+ date = '2018/02/18',
+ description = 'LuaTeX-ja stack system',
+})
+luatexja.stack = {}
+local ltjs=luatexja.stack
+luatexja.load_module('base'); local ltjb = luatexja.base
+
+--------------------------------------------------------------------------------
+-- stack table (obeys TeX's grouping)
+--------------------------------------------------------------------------------
+local node_new = node.new
+local id_whatsit = node.id('whatsit')
+local sid_user = node.subtype('user_defined')
+local STCK = luatexja.userid_table.STCK
+local fastcopy = table.fastcopy
+local setcount = tex.setcount
+local scan_int, scan_keyword = token.scan_int, token.scan_keyword
+ltjs.hmode = 0 -- dummy
+
+local charprop_stack_table={};
+ltjs.charprop_stack_table = charprop_stack_table
+charprop_stack_table[0]={}
+
+
+local function get_stack_level()
+ local i = tex.getcount('ltj@@stack')
+ local j = tex.currentgrouplevel
+ if j > tex.getcount('ltj@@group@level') then
+ i = i+1 -- new stack level
+ local gd = tex.globaldefs
+ if gd~=0 then tex.globaldefs = 0 end
+ -- 'tex.globaldefs = 0' is local even if \globaldefs > 0.
+ setcount('ltj@@group@level', j)
+ for k,v in pairs(charprop_stack_table) do -- clear the stack above i
+ if k>=i then charprop_stack_table[k]=nil end
+ end
+ charprop_stack_table[i] = fastcopy(charprop_stack_table[i-1])
+ setcount('ltj@@stack', i)
+ if gd~=0 then tex.globaldefs = gd end
+ if tex.nest[tex.nest.ptr].mode == -ltjs.hmode then -- rest. hmode のみ
+ local g = node_new(id_whatsit, sid_user)
+ g.user_id=STCK; g.type=100; g.value=j; node.write(g)
+ end
+ end
+ return i
+end
+ltjs.get_stack_level = get_stack_level
+
+local function set_stack_table(m, p)
+ local i = get_stack_level()
+ charprop_stack_table[i][m] = p
+ if luatexja.isglobal=='global' then
+ for j,v in pairs(charprop_stack_table) do
+ charprop_stack_table[j][m] = p
+ end
+ end
+end
+ltjs.set_stack_table = set_stack_table
+
+-- EXT
+function ltjs.set_stack_perchar(m,lb,ub, getter)
+ local c = scan_int()
+ scan_keyword(',')
+ local p = tonumber((getter or scan_int)())
+ if p<lb or p>ub then
+ ltjb.package_error('luatexja',
+ "invalid code (".. tostring(p) .. ")",
+ "The code should in the range "..tostring(lb) .. '..' ..
+ tostring(ub) .. ".\n" ..
+ "I'm going to use 0 instead of that illegal code value.")
+ p=0
+ end
+ set_stack_table(m+ltjb.in_unicode(c, true), p)
+end
+
+-- EXT
+function ltjs.set_stack_font(m,c,p)
+ if type(c)~='number' or c<0 or c>255 then
+ ltjb.package_error('luatexja',
+ "invalid family number (".. tostring(c) .. ")",
+ "The family number should in the range 0 .. 255.\n" ..
+ "I'm going to use 0 instead of that illegal family number.")
+ c=0
+ end
+ set_stack_table(m+c, p)
+end
+
+-- EXT: sp: glue_spec
+function ltjs.set_stack_skip(m,sp)
+ local i = get_stack_level()
+ if not sp then return end
+ if not charprop_stack_table[i][m] then
+ charprop_stack_table[i][m] = {}
+ end
+ charprop_stack_table[i][m].width = sp.width
+ charprop_stack_table[i][m].stretch = sp.stretch
+ charprop_stack_table[i][m].shrink = sp.shrink
+ charprop_stack_table[i][m].stretch_order = sp.stretch_order
+ charprop_stack_table[i][m].shrink_order = sp.shrink_order
+ if luatexja.isglobal=='global' then
+ for j,v in pairs(charprop_stack_table) do
+ if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end
+ charprop_stack_table[j][m].width = sp.width
+ charprop_stack_table[j][m].stretch = sp.stretch
+ charprop_stack_table[j][m].shrink = sp.shrink
+ charprop_stack_table[j][m].stretch_order = sp.stretch_order
+ charprop_stack_table[j][m].shrink_order = sp.shrink_order
+ end
+ end
+end
+
+-- These three functions are used in ltj-jfmglue.lua.
+-- list_dir and orig_char_table are used in other lua files.
+local orig_char_table = {}
+ltjs.orig_char_table = orig_char_table
+ltjs.list_dir = nil -- dummy
+ltjs.table_current_stack = nil -- dummy
+function ltjs.report_stack_level(bsl)
+ ltjs.table_current_stack = charprop_stack_table[bsl]
+ return bsl
+end
+function ltjs.fast_get_stack_skip(m)
+ return ltjs.table_current_stack[m]
+ or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 }
+end
+
+-- For other situations, use the following instead:
+function ltjs.get_stack_skip(m, idx)
+ return charprop_stack_table[idx][m]
+ or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 }
+end
+function ltjs.get_stack_table(mc, d, idx)
+ local i = charprop_stack_table[idx][mc]
+ return i or d
+end
+
+
+-- EOF
diff --git a/macros/luatex/generic/luatexja/src/ltj-unicode-ccfix.lua b/macros/luatex/generic/luatexja/src/ltj-unicode-ccfix.lua
new file mode 100644
index 0000000000..47f41f359e
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltj-unicode-ccfix.lua
@@ -0,0 +1,276 @@
+-- Do not edit this file!
+-- Created from LineBreak.txt by ltj-unicode-ccfix_make.pl on 2019年 7月 8日 月曜日 06:15:17 JST.
+-- In case of errors, fix the Perl script instead.
+local tex_catcode = tex.setcatcode
+local tex_getcc = tex.getcatcode
+local function set_letter(b,e)
+ if tex_getcc(b)~=11 then
+ for i=b,e do tex_catcode('global', i, 11) end
+ end
+end
+set_letter(0x231A,0x231B)
+set_letter(0x23F0,0x23F3)
+set_letter(0x2600,0x2603)
+set_letter(0x2614,0x2615)
+set_letter(0x2618,0x2618)
+set_letter(0x261A,0x261C)
+set_letter(0x261E,0x261F)
+set_letter(0x2639,0x263B)
+set_letter(0x2668,0x2668)
+set_letter(0x267F,0x267F)
+set_letter(0x26BD,0x26C8)
+set_letter(0x26CD,0x26CD)
+set_letter(0x26CF,0x26D1)
+set_letter(0x26D3,0x26D4)
+set_letter(0x26D8,0x26D9)
+set_letter(0x26DC,0x26DC)
+set_letter(0x26DF,0x26E1)
+set_letter(0x26EA,0x26EA)
+set_letter(0x26F1,0x26F5)
+set_letter(0x26F7,0x26F8)
+set_letter(0x26FA,0x26FA)
+set_letter(0x26FD,0x26FF)
+set_letter(0x2700,0x2704)
+set_letter(0x2708,0x2709)
+set_letter(0x2764,0x2764)
+set_letter(0x2E80,0x2E99)
+set_letter(0x2E9B,0x2EF3)
+set_letter(0x2F00,0x2FD5)
+set_letter(0x2FF0,0x2FFB)
+set_letter(0x3003,0x3003)
+set_letter(0x3004,0x3004)
+set_letter(0x3006,0x3006)
+set_letter(0x3007,0x3007)
+set_letter(0x3012,0x3013)
+set_letter(0x3020,0x3020)
+set_letter(0x3021,0x3029)
+set_letter(0x3030,0x3030)
+set_letter(0x3031,0x3034)
+set_letter(0x3036,0x3037)
+set_letter(0x3038,0x303A)
+set_letter(0x303D,0x303D)
+set_letter(0x303E,0x303F)
+set_letter(0x3042,0x3042)
+set_letter(0x3044,0x3044)
+set_letter(0x3046,0x3046)
+set_letter(0x3048,0x3048)
+set_letter(0x304A,0x3062)
+set_letter(0x3064,0x3082)
+set_letter(0x3084,0x3084)
+set_letter(0x3086,0x3086)
+set_letter(0x3088,0x308D)
+set_letter(0x308F,0x3094)
+set_letter(0x309F,0x309F)
+set_letter(0x30A2,0x30A2)
+set_letter(0x30A4,0x30A4)
+set_letter(0x30A6,0x30A6)
+set_letter(0x30A8,0x30A8)
+set_letter(0x30AA,0x30C2)
+set_letter(0x30C4,0x30E2)
+set_letter(0x30E4,0x30E4)
+set_letter(0x30E6,0x30E6)
+set_letter(0x30E8,0x30ED)
+set_letter(0x30EF,0x30F4)
+set_letter(0x30F7,0x30FA)
+set_letter(0x30FF,0x30FF)
+set_letter(0x3105,0x312F)
+set_letter(0x3131,0x318E)
+set_letter(0x3190,0x3191)
+set_letter(0x3192,0x3195)
+set_letter(0x3196,0x319F)
+set_letter(0x31A0,0x31BA)
+set_letter(0x31C0,0x31E3)
+set_letter(0x3200,0x321E)
+set_letter(0x3220,0x3229)
+set_letter(0x322A,0x3247)
+set_letter(0x3250,0x3250)
+set_letter(0x3251,0x325F)
+set_letter(0x3260,0x327F)
+set_letter(0x3280,0x3289)
+set_letter(0x328A,0x32B0)
+set_letter(0x32B1,0x32BF)
+set_letter(0x32C0,0x32FF)
+set_letter(0x3300,0x33FF)
+set_letter(0x3400,0x4DB5)
+set_letter(0x4DB6,0x4DBF)
+set_letter(0x4E00,0x9FEF)
+set_letter(0x9FF0,0x9FFF)
+set_letter(0xA000,0xA014)
+set_letter(0xA016,0xA48C)
+set_letter(0xA490,0xA4C6)
+set_letter(0xF900,0xFA6D)
+set_letter(0xFA6E,0xFA6F)
+set_letter(0xFA70,0xFAD9)
+set_letter(0xFADA,0xFAFF)
+set_letter(0xFE30,0xFE30)
+set_letter(0xFE31,0xFE32)
+set_letter(0xFE33,0xFE34)
+set_letter(0xFE45,0xFE46)
+set_letter(0xFE49,0xFE4C)
+set_letter(0xFE4D,0xFE4F)
+set_letter(0xFE51,0xFE51)
+set_letter(0xFE58,0xFE58)
+set_letter(0xFE5F,0xFE61)
+set_letter(0xFE62,0xFE62)
+set_letter(0xFE63,0xFE63)
+set_letter(0xFE64,0xFE66)
+set_letter(0xFE68,0xFE68)
+set_letter(0xFE6B,0xFE6B)
+set_letter(0xFF02,0xFF03)
+set_letter(0xFF06,0xFF07)
+set_letter(0xFF0A,0xFF0A)
+set_letter(0xFF0B,0xFF0B)
+set_letter(0xFF0D,0xFF0D)
+set_letter(0xFF0F,0xFF0F)
+set_letter(0xFF10,0xFF19)
+set_letter(0xFF1C,0xFF1E)
+set_letter(0xFF20,0xFF20)
+set_letter(0xFF21,0xFF3A)
+set_letter(0xFF3C,0xFF3C)
+set_letter(0xFF3E,0xFF3E)
+set_letter(0xFF3F,0xFF3F)
+set_letter(0xFF40,0xFF40)
+set_letter(0xFF41,0xFF5A)
+set_letter(0xFF5C,0xFF5C)
+set_letter(0xFF5E,0xFF5E)
+set_letter(0xFF66,0xFF66)
+set_letter(0xFF71,0xFF9D)
+set_letter(0xFFA0,0xFFBE)
+set_letter(0xFFC2,0xFFC7)
+set_letter(0xFFCA,0xFFCF)
+set_letter(0xFFD2,0xFFD7)
+set_letter(0xFFDA,0xFFDC)
+set_letter(0xFFE2,0xFFE2)
+set_letter(0xFFE3,0xFFE3)
+set_letter(0xFFE4,0xFFE4)
+set_letter(0x17000,0x187F7)
+set_letter(0x18800,0x18AF2)
+set_letter(0x1B000,0x1B0FF)
+set_letter(0x1B100,0x1B11E)
+set_letter(0x1B170,0x1B2FB)
+set_letter(0x1F000,0x1F02B)
+set_letter(0x1F02C,0x1F02F)
+set_letter(0x1F030,0x1F093)
+set_letter(0x1F094,0x1F09F)
+set_letter(0x1F0A0,0x1F0AE)
+set_letter(0x1F0AF,0x1F0B0)
+set_letter(0x1F0B1,0x1F0BF)
+set_letter(0x1F0C0,0x1F0C0)
+set_letter(0x1F0C1,0x1F0CF)
+set_letter(0x1F0D0,0x1F0D0)
+set_letter(0x1F0D1,0x1F0F5)
+set_letter(0x1F0F6,0x1F0FF)
+set_letter(0x1F10D,0x1F10F)
+set_letter(0x1F16D,0x1F16F)
+set_letter(0x1F1AD,0x1F1E5)
+set_letter(0x1F200,0x1F202)
+set_letter(0x1F203,0x1F20F)
+set_letter(0x1F210,0x1F23B)
+set_letter(0x1F23C,0x1F23F)
+set_letter(0x1F240,0x1F248)
+set_letter(0x1F249,0x1F24F)
+set_letter(0x1F250,0x1F251)
+set_letter(0x1F252,0x1F25F)
+set_letter(0x1F260,0x1F265)
+set_letter(0x1F266,0x1F2FF)
+set_letter(0x1F300,0x1F384)
+set_letter(0x1F386,0x1F39B)
+set_letter(0x1F39E,0x1F3B4)
+set_letter(0x1F3B7,0x1F3BB)
+set_letter(0x1F3BD,0x1F3C1)
+set_letter(0x1F3C5,0x1F3C6)
+set_letter(0x1F3C8,0x1F3C9)
+set_letter(0x1F3CD,0x1F3FA)
+set_letter(0x1F400,0x1F441)
+set_letter(0x1F444,0x1F445)
+set_letter(0x1F451,0x1F465)
+set_letter(0x1F479,0x1F47B)
+set_letter(0x1F47D,0x1F480)
+set_letter(0x1F484,0x1F484)
+set_letter(0x1F488,0x1F48E)
+set_letter(0x1F490,0x1F490)
+set_letter(0x1F492,0x1F49F)
+set_letter(0x1F4A1,0x1F4A1)
+set_letter(0x1F4A3,0x1F4A3)
+set_letter(0x1F4A5,0x1F4A9)
+set_letter(0x1F4AB,0x1F4AE)
+set_letter(0x1F4B0,0x1F4B0)
+set_letter(0x1F4B3,0x1F4FF)
+set_letter(0x1F507,0x1F516)
+set_letter(0x1F525,0x1F531)
+set_letter(0x1F54A,0x1F573)
+set_letter(0x1F576,0x1F579)
+set_letter(0x1F57B,0x1F58F)
+set_letter(0x1F591,0x1F594)
+set_letter(0x1F597,0x1F5D3)
+set_letter(0x1F5DC,0x1F5F3)
+set_letter(0x1F5FA,0x1F5FF)
+set_letter(0x1F600,0x1F644)
+set_letter(0x1F648,0x1F64A)
+set_letter(0x1F680,0x1F6A2)
+set_letter(0x1F6A4,0x1F6B3)
+set_letter(0x1F6B7,0x1F6BF)
+set_letter(0x1F6C1,0x1F6CB)
+set_letter(0x1F6CD,0x1F6D5)
+set_letter(0x1F6D6,0x1F6DF)
+set_letter(0x1F6E0,0x1F6EC)
+set_letter(0x1F6ED,0x1F6EF)
+set_letter(0x1F6F0,0x1F6FA)
+set_letter(0x1F6FB,0x1F6FF)
+set_letter(0x1F774,0x1F77F)
+set_letter(0x1F7D5,0x1F7D8)
+set_letter(0x1F7D9,0x1F7DF)
+set_letter(0x1F7E0,0x1F7EB)
+set_letter(0x1F7EC,0x1F7FF)
+set_letter(0x1F80C,0x1F80F)
+set_letter(0x1F848,0x1F84F)
+set_letter(0x1F85A,0x1F85F)
+set_letter(0x1F888,0x1F88F)
+set_letter(0x1F8AE,0x1F8FF)
+set_letter(0x1F90C,0x1F90C)
+set_letter(0x1F90D,0x1F90E)
+set_letter(0x1F910,0x1F917)
+set_letter(0x1F920,0x1F925)
+set_letter(0x1F927,0x1F92F)
+set_letter(0x1F93A,0x1F93B)
+set_letter(0x1F93F,0x1F971)
+set_letter(0x1F972,0x1F972)
+set_letter(0x1F973,0x1F976)
+set_letter(0x1F977,0x1F979)
+set_letter(0x1F97A,0x1F9A2)
+set_letter(0x1F9A3,0x1F9A4)
+set_letter(0x1F9A5,0x1F9AA)
+set_letter(0x1F9AB,0x1F9AD)
+set_letter(0x1F9AE,0x1F9B4)
+set_letter(0x1F9B7,0x1F9B7)
+set_letter(0x1F9BA,0x1F9BA)
+set_letter(0x1F9BC,0x1F9CA)
+set_letter(0x1F9CB,0x1F9CC)
+set_letter(0x1F9D0,0x1F9D0)
+set_letter(0x1F9DE,0x1F9FF)
+set_letter(0x1FA54,0x1FA5F)
+set_letter(0x1FA60,0x1FA6D)
+set_letter(0x1FA6E,0x1FA6F)
+set_letter(0x1FA70,0x1FA73)
+set_letter(0x1FA74,0x1FA77)
+set_letter(0x1FA78,0x1FA7A)
+set_letter(0x1FA7B,0x1FA7F)
+set_letter(0x1FA80,0x1FA82)
+set_letter(0x1FA83,0x1FA8F)
+set_letter(0x1FA90,0x1FA95)
+set_letter(0x1FA96,0x1FAFF)
+set_letter(0x1FB00,0x1FFFD)
+set_letter(0x20000,0x2A6D6)
+set_letter(0x2A6D7,0x2A6FF)
+set_letter(0x2A700,0x2B734)
+set_letter(0x2B735,0x2B73F)
+set_letter(0x2B740,0x2B81D)
+set_letter(0x2B81E,0x2B81F)
+set_letter(0x2B820,0x2CEA1)
+set_letter(0x2CEA2,0x2CEAF)
+set_letter(0x2CEB0,0x2EBE0)
+set_letter(0x2EBE1,0x2F7FF)
+set_letter(0x2F800,0x2FA1D)
+set_letter(0x2FA1E,0x2FA1F)
+set_letter(0x2FA20,0x2FFFD)
+set_letter(0x30000,0x3FFFD)
diff --git a/macros/luatex/generic/luatexja/src/ltjclasses.dtx b/macros/luatex/generic/luatexja/src/ltjclasses.dtx
new file mode 100644
index 0000000000..3112fd1c22
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltjclasses.dtx
@@ -0,0 +1,4676 @@
+% \iffalse meta-comment
+%% File: ltjclasses.dtx
+% -----------------------------------------
+% Original: jclasses.dtx
+%
+% Copyright 1995-2001 ASCII Corporation.
+% Copyright (c) 2010 ASCII MEDIA WORKS
+% Copyright (c) 2016-2018 Japanese TeX Development Community
+%
+% This file is part of the pLaTeX2e system (community edition).
+% -------------------------------------------------------------
+%
+% \fi
+%
+%
+% \setcounter{StandardModuleDepth}{1}
+% \StopEventually{}
+%
+% \iffalse
+% \changes{v1.0}{1995/04/19}{first edition}
+% \changes{v1.0a}{1995/08/30}{ページスタイル部分の調整}
+% \changes{v1.0b}{1995/11/08}{ページスタイル部分の調整}
+% \changes{v1.0c}{1996/01/30}{\LaTeX\ \texttt{!<1995/12/01!>}での修正を反映}
+% \changes{v1.0d}{1996/02/29}{デフォルトページスタイルの修正}
+% \changes{v1.0e}{1996/03/14}{itemize, enumerate環境の修正}
+% \changes{v1.0f}{1996/07/10}{面付けオプションを追加}
+% \changes{v1.0g}{1996/09/03}{トンボの横に作成日時を出力するようにした}
+% \changes{v1.1}{1997/01/16}{\LaTeX\ \texttt{!<1996/06/01!>}版に対応}
+% \changes{v1.1a}{1997/01/23}{\LaTeX\ \texttt{!<1996/12/01!>}版に対応}
+% \changes{v1.1a}{1997/01/25}{互換モードでp\LaTeX~2.09のa4jなどの
+% 用紙オプションに対応}
+% \changes{v1.1b}{1997/01/28}{日本語ファミリの宣言を再度、実装}
+% \changes{v1.1d}{1997/01/29}{2eモードでa4jなどのオプションに対応}
+% \changes{v1.1e}{1997/04/08}{トップマージンの値を修正}
+% \changes{v1.1f}{1997/07/08}{縦組クラスでベースラインがおかしいのを修正}
+% \changes{v1.1g}{1997/08/25}{片面印刷のとき、sectionレベルが出力されない
+% のを修正}
+% \changes{v1.1h}{1997/09/03}{landscape指定時の値を修正}
+% \changes{v1.1i}{1997/12/12}{report, bookクラスで片面印刷時に、
+% bothstyleスタイルにすると、コンパイルエラーになるのを修正}
+% \changes{v1.1j}{1998/02/03}{互換モード時のa5pのトップマージンを0.7in増加}
+% \changes{v1.1k}{1998/03/23}{reportとbookクラスで番号を付けない見出しの
+% ペナルティが\cs{M@}だったのを\cs{@M}に修正}
+% \changes{v1.1m}{1998/04/07}{\cs{today}の計算手順を変更}
+% \changes{v1.1n}{1998/10/13}{report,bookクラスの表番号が
+% 見出しレベルに関係なくchapter番号が出力されてしまうのを修正}
+% \changes{v1.1n}{1998/10/13}{mentukeオプションがエラーになっていたのを修正}
+% \changes{v1.1o}{1998/12/24}{secnumdepthカウンタを$-1$以下にすると、
+% 見出し文字列も消えてしまうのを修正}
+% \changes{v1.1p}{1999/1/6}{\cs{oddsidemargin}のポイントへの変換を後ろに}
+% \changes{v1.1q}{1999/05/18}{縦組時のみに設定するようにした}
+% \changes{v1.1r}{1999/08/09}{トップマージンの計算式を修正}
+% \changes{v1.2}{2001/09/04}{\cs{chapter}の出力位置がアスタリスク形式と
+% そうでないときと違うのを修正(ありがとう、鈴木@津さん)}
+% \changes{v1.3}{2001/10/04}{目次のページ番号の書体を\cs{rmfamily}から
+% \cs{normalfont}に変更(ありがとう、鈴木た@MILNさん)}
+% \changes{v1.4}{2002/04/09}{縦組スタイルで\cs{flushbottom}しないようにした}
+% \changes{v1.5}{2004/01/15}{\cs{part},\cs{chapter}の\cs{@afterindentfalse}を
+% \cs{@afterindenttrue}に変更。
+% \cs{section},\cs{subsection},\cs{subsubsection}の前後空きの伸縮幅を修正。
+% (ありがとうございます、鈴木た@MILNさん)}
+% \changes{v1.6}{2006/06/27}{フォントコマンドを修正。ありがとう、ymtさん。}
+% \changes{v1.6-ltj}{2011/09/27}{jclasses.dtx v1.6 をベースにLua\LaTeX-ja用に修正。}
+% \changes{v1.6-ltj-2}{2013/06/06}{luatexja.cfgに対応.}
+% \changes{v1.6-ltj-3}{2014/06/08}{縦組クラスの時のgeometry.styに対応.}
+% \changes{v1.6-ltj-4}{2014/06/30}{組方向の変更箇所を現行のLua\TeX-jaの仕様に合うように修正.}
+% \changes{v1.6-ltj-5}{2014/07/02}{\cs{ifydir}, \cs{iftdir}を使わないように修正.}
+% \changes{v1.6-ltj-6}{2014/07/28}{縦組クラスでlltjext.styを読み込むように修正.}
+% \changes{v1.6-ltj-7}{2014/11/15}{縦組クラスとeveryshi.styとの相性が悪い問題を修正.}
+% \changes{v1.6-ltj-8}{2014/11/22}{縦組時のgeometry.styへの対応を別ファイル(lltjp-geometry.sty)に分離.それに伴いv1.6-ltj-3での変更を削除.}
+% \changes{v1.6-ltj-9}{2015/01/01}{縦組クラスの日付出力でエラーになることなどを修正.}
+% \changes{v1.6-ltj-10}{2015/10/18}{Lua\TeX\ 0.81.0に伴うプリミティブ名の変更に対応.}
+% \changes{v1.6-ltj-11}{2016/07/19}{トンボ使用時の用紙サイズの設定方法を変更(aminophenさん,ありがとうございます).}
+% \changes{v1.7}{2016/11/12}{ドキュメントに反して\cs{@maketitle}が
+% 空になっていなかったのを修正}
+% \changes{v1.7}{2016/11/12}{use \cs{@width} (sync with classes.dtx v1.3a)}
+% \changes{v1.7}{2016/11/12}{Replaced all \cs{hbox to} by
+% \cs{hb@xt@} (sync with classes.dtx v1.3a)}
+% \changes{v1.7}{2016/11/12}{Moved \cs{@mkboth} out of heading
+% arg (sync with classes.dtx v1.4c)}
+% \changes{v1.7}{2016/11/12}{\cs{columnsep}と\cs{columnseprule}の
+% 変更を後ろに移動(sync with classes.dtx v1.4f)}
+% \changes{v1.7a}{2016/11/16}{Check \texttt{@noskipsec} switch and
+% possibly force horizontal mode (sync with classes.dtx v1.4a)}
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \changes{v1.7a}{2016/11/16}{Added \cs{nobreak} for
+% latex/2343 (sync with ltsect.dtx v1.0z)}
+% \changes{v1.7a}{2016/11/16}{Use \cs{expandafter}
+% (sync with ltlists.dtx v1.0j)}
+% \changes{v1.7b}{2016/11/22}{補足ドキュメントを追加}
+% \changes{v1.7c}{2016/12/18}{Only add empty page after part if
+% twoside and openright (sync with classes.dtx v1.4b)}
+% \changes{v1.7c-ltj-12}{2017/01/17}{|\stockwidth|,~|\stockheight|をトンボオプション指定時にのみ定義
+% (aminophenさん,ありがとうございます).}
+% \changes{v1.7c}{2016/12/18}{奇妙なarticleガードとコードを削除して
+% ドキュメントを追加}
+% \changes{v1.7d}{2017/02/15}{\cs{if@openleft}スイッチ追加}
+% \changes{v1.7d}{2017/02/15}{openleftオプション追加}
+% \changes{v1.7d}{2017/02/15}{\cs{cleardoublepage}の代用となる命令群を追加}
+% \changes{v1.7d}{2017/02/15}{bookクラスでtitlepageを必ず奇数ページ
+% に送るように変更}
+% \changes{v1.7d}{2017/02/15}{titlepageのページ番号を奇数ならば1に、
+% 偶数ならば0にリセットするように変更}
+% \changes{v1.7d}{2017/02/15}{縦組クラスの所属表示の番号を直立にした}
+% \changes{v1.7d-ltj-13}{2017/02/19}{縦組時クラスで|ftnright|パッケージを使うと
+% 脚注番号が上書きされ横に寝てしまう問題を修正(aminophenさん,ありがとうございます).}
+% \changes{v1.7d-ltj-14}{2017/02/20}{openleftオプションの処理で\cs{iftdir}, \cs{ifydir}を
+% 誤って使っている問題を修正(aminophenさん,ありがとうございます).}
+% \changes{v1.7e}{2017/03/05}{トンボに表示するジョブ情報の書式を変更}
+% \changes{v1.7e}{2017/03/05}{\cs{frontmatter}と\cs{mainmatter}を
+% 奇数ページに送るように変更}
+% \changes{v1.7e-ltj-15}{2017/08/31}{本ドキュメントのタイプセットで,小塚フォントが存在するときには
+% それを用いるように変更(PDFサイズ削減のため).}
+% \changes{v1.7f}{2017/08/31}{和文書体の基準を全角空白から「漢」に変更}
+% \changes{v1.7g}{2017/09/19}{内部処理で使ったボックス0を空にした}
+% \changes{v1.7h}{2018/02/04}{和文スケール値\cs{Cjascale}を定義}
+% \changes{v1.8}{2018/07/03}{\cs{today}のデフォルトを和暦から西暦に変更}
+% \changes{v1.8-ltj-16}{2018/10/08}{Lua\TeX-jaが|disablejfam|オプションをサポートしたことによる変更}
+% \changes{v1.8a}{2018/10/25}{ファイル書き出し時の行末文字対策
+% (sync with ltsect.dtx 2018/09/26 v1.1c)}
+% \changes{v1.8b}{2019/04/02}{新元号対応}
+% \changes{v1.8b-ltj-17}{2019/08/12}{disablejfamの``Unused global option(s)''警告を出さないようにした}
+
+% \fi
+%
+% \iffalse
+\NeedsTeXFormat{LaTeX2e}
+%<*driver>
+\ProvidesFile{ltjclasses.dtx}
+%</driver>
+%<*yoko>
+%<article>\ProvidesClass{ltjarticle}
+%<report>\ProvidesClass{ltjreport}
+%<book>\ProvidesClass{ltjbook}
+%<10pt&!bk>\ProvidesFile{ltjsize10.clo}
+%<11pt&!bk>\ProvidesFile{ltjsize11.clo}
+%<12pt&!bk>\ProvidesFile{ltjsize12.clo}
+%<10pt&bk>\ProvidesFile{ltjbk10.clo}
+%<11pt&bk>\ProvidesFile{ltjbk11.clo}
+%<12pt&bk>\ProvidesFile{ltjbk12.clo}
+%</yoko>
+%<*tate>
+%<article>\ProvidesClass{ltjtarticle}
+%<report>\ProvidesClass{ltjtreport}
+%<book>\ProvidesClass{ltjtbook}
+%<10pt&!bk>\ProvidesFile{ltjtsize10.clo}
+%<11pt&!bk>\ProvidesFile{ltjtsize11.clo}
+%<12pt&!bk>\ProvidesFile{ltjtsize12.clo}
+%<10pt&bk>\ProvidesFile{ltjtbk10.clo}
+%<11pt&bk>\ProvidesFile{ltjtbk11.clo}
+%<12pt&bk>\ProvidesFile{ltjtbk12.clo}
+%</tate>
+ [2019/08/12 v1.8b-ltj-17
+%<article|report|book> Standard LuaLaTeX-ja class]
+%<10pt|11pt|12pt> Standard LuaLaTeX-ja file (size option)]
+%<*driver>
+]
+\documentclass{ltjltxdoc}
+\GetFileInfo{ltjclasses.dtx}
+\begingroup
+ \suppressfontnotfounderror=1
+ \global\font\testfont=file:KozMinPr6N-Regular.otf
+\endgroup
+\ifx\testfont\nullfont
+ \usepackage[ipaex,nfssonly]{luatexja-preset}
+\else
+ \usepackage[kozuka-pr6n,nfssonly]{luatexja-preset}
+\fi
+\def\pLaTeX{p\kern-.05em\LaTeX}
+\usepackage[unicode]{hyperref}
+\title{Lua\LaTeX-ja用\texttt{jclasses}互換クラス}
+\author{Lua\TeX-jaプロジェクト}
+\date{\filedate}
+\begin{document}
+ \maketitle
+ \tableofcontents
+ \DocInput{\filename}
+\end{document}
+%</driver>
+% \fi
+%
+% \section{はじめに}
+% このファイルは、Lua\LaTeX-ja用の|jclasses|互換クラスファイルです。
+% コミュニティ版をベースに作成しています。
+% \dst{}プログラムによって、横組用のクラスファイルと縦組用のクラスファイル
+% を作成することができます。
+%
+% 次に\dst{}プログラムのためのオプションを示します。
+%
+% \DeleteShortVerb{\|}
+% \begin{center}
+% \begin{tabular}{l|l}
+% \emph{オプション} & \emph{意味}\\\hline
+% article & articleクラスを生成\\
+% report & reportクラスを生成\\
+% book & bookクラスを生成\\
+% 10pt & 10ptサイズの設定を生成\\
+% 11pt & 11ptサイズの設定を生成\\
+% 12pt & 12ptサイズの設定を生成\\
+% bk & bookクラス用のサイズの設定を生成\\
+% tate & 縦組用の設定を生成\\
+% yoko & 横組用の設定を生成\\
+% \end{tabular}
+% \end{center}
+% \MakeShortVerb{\|}
+%
+% \subsection{\texttt{jclasses.dtx} からの主な変更点}
+% 全ての変更点を知りたい場合は、|jclasses.dtx|と|ltjclasses.dtx|で|diff|を
+% とって下さい。
+% \begin{itemize}
+% \item もし
+% \begin{quotation}
+% |! LaTeX Error: Too many math alphabets used in version ****.|
+% \end{quotation}
+% のエラーが起こった場合は、|lualatex-math|パッケージを読み込んでみて下さい。
+% \item 出力PDFの用紙サイズが自動的に設定されるようにしてあります。
+% %%%\item 縦組みクラスにおいて、|geometry|パッケージを読み込んだときに意図通りにならない問題に対応しました。%
+% \end{itemize}
+%
+% \section{Lua\TeX-ja の読み込み}
+% 最初に|luatexja|を読み込みます。
+% \begin{macrocode}
+%<*article|report|book>
+\RequirePackage{luatexja}
+% \end{macrocode}
+%
+% \section{オプションスイッチ}
+% ここでは、後ほど使用するいくつかのコマンドやスイッチを定義しています。
+%
+% \begin{macro}{\c@@paper}
+% 用紙サイズを示すために使います。
+% A4, A5, B4, B5用紙はそれぞれ、1, 2, 3, 4として表されます。
+% \begin{macrocode}
+\newcounter{@paper}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@landscape}
+% 用紙を横向きにするかどうかのスイッチです。デフォルトは、縦向きです。
+% \begin{macrocode}
+\newif\if@landscape \@landscapefalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@ptsize}
+% 組版をするポイント数の一の位を保存するために使います。
+% 0, 1, 2のいずれかです。
+% \begin{macrocode}
+\newcommand{\@ptsize}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@restonecol}
+% 二段組時に用いるテンポラリスイッチです。
+% \begin{macrocode}
+\newif\if@restonecol
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@titlepage}
+% タイトルページやアブストラクト(概要)を
+% 独立したページにするかどうかのスイッチです。
+% reportとbookスタイルのデフォルトでは、独立したページになります。
+% \begin{macrocode}
+\newif\if@titlepage
+%<article>\@titlepagefalse
+%<report|book>\@titlepagetrue
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@openright}
+% chapterレベルを右ページからはじめるかどうかのスイッチです。
+% 横組では奇数ページ、縦組では偶数ページから始まることになります。
+% reportクラスのデフォルトは、``no''です。
+% bookクラスのデフォルトは、``yes''です。
+% \begin{macrocode}
+%<!article>\newif\if@openright
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@openleft}
+% chapterレベルを左ページからはじめるかどうかのスイッチです。
+% 日本語\TeX{}開発コミュニティ版で新たに追加されました。
+% 横組では偶数ページ、縦組では奇数ページから始まることになります。
+% reportクラスとbookクラスの両方で、デフォルトは``no''です。
+% \changes{v1.7d}{2017/02/15}{\cs{if@openleft}スイッチ追加}
+% \begin{macrocode}
+%<!article>\newif\if@openleft
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.0c}{1995/12/25}{Macro \cs{if@openbib} removed}
+%
+% \begin{macro}{\if@mainmatter}
+% スイッチ|\@mainmatter|が真の場合、本文を処理しています。
+% このスイッチが偽の場合は、|\chapter|コマンドは見出し番号を出力しません。
+% \begin{macrocode}
+%<book>\newif\if@mainmatter \@mainmattertrue
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\hour}
+% \begin{macro}{\minute}
+% \begin{macrocode}
+\hour\time \divide\hour by 60\relax
+\@tempcnta\hour \multiply\@tempcnta 60\relax
+\minute\time \advance\minute-\@tempcnta
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if@stysize}
+% \changes{v1.1a}{1997/01/25}{Add \cs{if@stysize}.}
+% \LaTeXe~2.09互換モードで、スタイルオプションにa4j, a5pなどが指定された
+% ときの動作をエミュレートするためのフラグです。
+% \begin{macrocode}
+\newif\if@stysize \@stysizefalse
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@mathrmmc}
+% 和欧文両対応の数式文字コマンドを有効にするときに用いるフラグです。
+% マクロの展開順序が複雑になるのを避けるため、
+% デフォルトではfalseとしてあります。
+% \begin{macrocode}
+\newif\if@mathrmmc \@mathrmmcfalse
+% \end{macrocode}
+% \end{macro}
+%
+% \section{オプションの宣言}
+% ここでは、クラスオプションの宣言を行なっています。
+%
+% \subsection{用紙オプション}
+% 用紙サイズを指定するオプションです。
+% \begin{macrocode}
+\DeclareOption{a4paper}{\setcounter{@paper}{1}%
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5paper}{\setcounter{@paper}{2}%
+ \setlength\paperheight {210mm}
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b4paper}{\setcounter{@paper}{3}%
+ \setlength\paperheight {364mm}
+ \setlength\paperwidth {257mm}}
+\DeclareOption{b5paper}{\setcounter{@paper}{4}%
+ \setlength\paperheight {257mm}
+ \setlength\paperwidth {182mm}}
+% \end{macrocode}
+% \changes{v1.0a}{1995/09/26}{Change b4paper width/height 352x250 to 364x257}
+% \changes{v1.0a}{1995/09/26}{Change b5paper width/height 250x176 to 257x182}
+% ドキュメントクラスに、以下のオプションを指定すると、通常よりもテキストを
+% 組み立てる領域の広いスタイルとすることができます。
+% \begin{macrocode}
+%
+\DeclareOption{a4j}{\setcounter{@paper}{1}\@stysizetrue
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5j}{\setcounter{@paper}{2}\@stysizetrue
+ \setlength\paperheight {210mm}
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b4j}{\setcounter{@paper}{3}\@stysizetrue
+ \setlength\paperheight {364mm}
+ \setlength\paperwidth {257mm}}
+\DeclareOption{b5j}{\setcounter{@paper}{4}\@stysizetrue
+ \setlength\paperheight {257mm}
+ \setlength\paperwidth {182mm}}
+%
+\DeclareOption{a4p}{\setcounter{@paper}{1}\@stysizetrue
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5p}{\setcounter{@paper}{2}\@stysizetrue
+ \setlength\paperheight {210mm}
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b4p}{\setcounter{@paper}{3}\@stysizetrue
+ \setlength\paperheight {364mm}
+ \setlength\paperwidth {257mm}}
+\DeclareOption{b5p}{\setcounter{@paper}{4}\@stysizetrue
+ \setlength\paperheight {257mm}
+ \setlength\paperwidth {182mm}}
+% \end{macrocode}
+%
+% \subsection{サイズオプション}
+% 基準となるフォントの大きさを指定するオプションです。
+% \begin{macrocode}
+\if@compatibility
+ \renewcommand{\@ptsize}{0}
+\else
+ \DeclareOption{10pt}{\renewcommand{\@ptsize}{0}}
+\fi
+\DeclareOption{11pt}{\renewcommand{\@ptsize}{1}}
+\DeclareOption{12pt}{\renewcommand{\@ptsize}{2}}
+% \end{macrocode}
+%
+% \subsection{横置きオプション}
+% このオプションが指定されると、用紙の縦と横の長さを入れ換えます。
+% \changes{v1.1h}{1997/09/03}{オプションの処理時に縦横の値を交換}
+% \changes{v1.1h}{1997/09/03}{landscapeオプションを互換モードでも有効に}
+% \begin{macrocode}
+\DeclareOption{landscape}{\@landscapetrue
+ \setlength\@tempdima{\paperheight}%
+ \setlength\paperheight{\paperwidth}%
+ \setlength\paperwidth{\@tempdima}}
+% \end{macrocode}
+%
+% \subsection{トンボオプション}
+% |tombow|オプションが指定されると、用紙サイズに合わせてトンボを出力します。
+% このとき、トンボの脇にPDFを作成した日付が出力されます。
+% 作成日付の出力を抑制するには、|tombow|ではなく、|tombo|と指定をします。
+%
+% ジョブ情報の書式は元々|filename : 2017/3/5(13:3)|のような書式でしたが、
+% jsclassesにあわせて桁数固定の|filename (2017-03-05 13:03)|に直しました。
+% \changes{v1.0g}{1996/09/03}{Add to \cs{@bannertoken}.}
+% \changes{v1.1a}{1997/01/23}{日付出力オプション}
+% \changes{v1.7e}{2017/03/05}{トンボに表示するジョブ情報の書式を変更}
+% \begin{macrocode}
+\DeclareOption{tombow}{%
+ \tombowtrue \tombowdatetrue
+ \setlength{\@tombowwidth}{.1\p@}%
+ \@bannertoken{%
+ \jobname\space(\number\year-\two@digits\month-\two@digits\day
+ \space\two@digits\hour:\two@digits\minute)}%
+ \maketombowbox}
+\DeclareOption{tombo}{%
+ \tombowtrue \tombowdatefalse
+ \setlength{\@tombowwidth}{.1\p@}%
+ \maketombowbox}
+% \end{macrocode}
+%
+% \subsection{面付けオプション}
+% このオプションが指定されると、トンボオプションを指定したときと同じ
+% 位置に文章を出力します。作成したPDFをフィルムに面付け出力する場合など
+% に指定をします。
+% \changes{v1.0f}{1996/07/10}{面付けオプションを追加}
+% \changes{v1.1n}{1998/10/13}
+% {動作していなかったのを修正。ありがとう、刀祢さん}
+% \begin{macrocode}
+\DeclareOption{mentuke}{%
+ \tombowtrue \tombowdatefalse
+ \setlength{\@tombowwidth}{\z@}%
+ \maketombowbox}
+% \end{macrocode}
+%
+% \subsection{組方向オプション}
+% このオプションが指定されると、縦組で組版をします。
+% \changes{v1.0g}{1997/01/25}{Insert \cs{hbox}, to switch tate-mode.}
+% \changes{v1.1d}{1997/02/05}{開始ページがおかしくなるのを修正}
+% \changes{v1.1f}{1997/07/08}{縦組時にベースラインがおかしくなるのを修正}
+%
+% \changes{v1.6-ltj-4}{2014/06/30}{本文の組方向を \cs{AtBeginDocument} で
+% 変更することができなくなったことに対応}
+% \begin{macrocode}
+\DeclareOption{tate}{%
+ \tate\AtBeginDocument{\message{《縦組モード》}\adjustbaseline}%
+}
+% \end{macrocode}
+%
+% 縦組クラスと|everyshi|パッケージの相性が悪い問題に対処します。
+% この処理は、ZRさんの|pxeveryshi|パッケージと実質的に同じ内容です。
+% \begin{macrocode}
+%<*tate>
+\AtEndOfPackageFile{everyshi}{%
+ \def\@EveryShipout@Output{%
+ \setbox8\vbox{%
+ \yoko
+ \@EveryShipout@Hook
+ \@EveryShipout@AtNextHook
+ \global\setbox\luatexoutputbox=\box\luatexoutputbox
+ }%
+ \gdef\@EveryShipout@AtNextHook{}%
+ \@EveryShipout@Org@Shipout\box\luatexoutputbox
+ }}
+%</tate>
+% \end{macrocode}
+%
+% \subsection{両面、片面オプション}
+% twosideオプションが指定されると、両面印字出力に適した整形を行ないます。
+% \begin{macrocode}
+\DeclareOption{oneside}{\@twosidefalse}
+\DeclareOption{twoside}{\@twosidetrue}
+% \end{macrocode}
+%
+% \subsection{二段組オプション}
+% 二段組にするかどうかのオプションです。
+% \begin{macrocode}
+\DeclareOption{onecolumn}{\@twocolumnfalse}
+\DeclareOption{twocolumn}{\@twocolumntrue}
+% \end{macrocode}
+%
+% \subsection{表題ページオプション}
+% |@titlepage|が真の場合、表題を独立したページに出力します。
+% \begin{macrocode}
+\DeclareOption{titlepage}{\@titlepagetrue}
+\DeclareOption{notitlepage}{\@titlepagefalse}
+% \end{macrocode}
+%
+% \subsection{右左起こしオプション}
+% chapterを右ページあるいは左ページから
+% はじめるかどうかを指定するオプションです。
+% |openleft|オプションは日本語\TeX{}開発コミュニティによって追加されました。
+% \changes{v1.7d}{2017/02/15}{openleftオプション追加}
+% \begin{macrocode}
+%<!article>\if@compatibility
+%<book>\@openrighttrue
+%<!article>\else
+%<!article>\DeclareOption{openright}{\@openrighttrue\@openleftfalse}
+%<!article>\DeclareOption{openleft}{\@openlefttrue\@openrightfalse}
+%<!article>\DeclareOption{openany}{\@openrightfalse\@openleftfalse}
+%<!article>\fi
+% \end{macrocode}
+%
+% \subsection{数式のオプション}
+% \Lopt{leqno}を指定すると、数式番号を数式の左側に出力します。
+% \Lopt{fleqn}を指定するとディスプレイ数式を左揃えで出力します。
+% \begin{macrocode}
+\DeclareOption{leqno}{\input{leqno.clo}}
+\DeclareOption{fleqn}{\input{fleqn.clo}}
+% \end{macrocode}
+%
+% \subsection{参考文献のオプション}
+% 参考文献一覧を``オープンスタイル''の書式で出力します。
+% これは各ブロックが改行で区切られ、|\bibindent|のインデントが付く書式です。
+% \changes{v1.0c}{1995/12/25}{openbibオプションを再実装}
+% \begin{macrocode}
+\DeclareOption{openbib}{%
+% \end{macrocode}
+% 参考文献環境内の最初のいくつかのフックを満たします。
+% \begin{macrocode}
+ \AtEndOfPackage{%
+ \renewcommand\@openbib@code{%
+ \advance\leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ }%
+% \end{macrocode}
+% そして、|\newblock|を再定義します。
+% \begin{macrocode}
+ \renewcommand\newblock{\par}}}
+% \end{macrocode}
+%
+% \subsection{日本語ファミリ宣言の抑制、和欧文両対応の数式文字}
+% p\TeX では数式ファミリの数が16個だったので日本語ファミリ宣言を抑制する
+% |disablejfam|オプションが用意されていましたが、Lua\TeX ではOmega拡張が
+% 取り込まれて数式ファミリは256個まで使用できるため、このオプションは必要ありません。
+% ただし、\LaTeXe カーネルでは未だに数式ファミリの数は16個に制限されているので、
+% 実際に使用可能な数式ファミリの数を増やすためには|lualatex-math|パッケージを
+% 読み込む必要があることに注意が必要です。
+%
+% |mathrmmc|オプションは、
+% |\mathrm|と|\mathbf|を和欧文両対応にするためのクラスオプションです。
+% \changes{v1.1d}{1992/02/04}{disablejfamの判断を間違えてたのを修正}
+% \changes{v1.8-ltj-16}{2018/10/08}{Lua\TeX-ja本体が,主にメモリ消費を抑える目的で
+% |disablejfam|オプションをサポートしました。そのため以前出していた警告は削除します。}
+% \begin{macrocode}
+\if@compatibility
+ \@mathrmmctrue
+\else
+ \DeclareOption{mathrmmc}{\@mathrmmctrue}
+\fi
+% \end{macrocode}
+%
+%
+% \subsection{ドラフトオプション}
+% |draft|オプションを指定すると、オーバフルボックスの起きた箇所に、
+% 5ptの罫線が引かれます。
+% \begin{macrocode}
+\DeclareOption{draft}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+%</article|report|book>
+% \end{macrocode}
+%
+% \subsection{フォントメトリックの変更}
+%
+% Lua\LaTeX-jaの標準では、OTFパッケージ由来のメトリックが使われるようになっています。
+% 本クラスでは、「p\TeX の組版と互換性をできるだけ持たせる」例を提示するため、
+% \begin{itemize}
+% \item メトリックを\texttt{min10.tfm}ベースの\texttt{jfm-min.lua}に変更。
+% \item 明朝とゴシックは両方とも\texttt{jfm-min.lua}を用いるが、
+% 和文処理用グルー挿入時には「違うメトリックを使用」として思わせる。
+% \item p\TeX と同様に、「異なるメトリックの2つの和文文字」の間には、両者から定める
+% グルーを両方挿入する。
+% \item calllbackを利用し、標準で用いる\texttt{jfm-min.lua}を、段落始めの括弧が全角二分下がりになるように内部で変更している。
+%
+% \end{itemize}
+%
+% |\ltj@stdmcfont|,~|\ltj@stdgtfont| による、デフォルトで使われ明朝・ゴシックのフォントの
+% 設定に対応しました。この2つの命令の値はユーザが日々の利用でその都度指定するものではなく、
+% 何らかの理由で非埋め込みフォントが正しく利用できない場合にのみ |luatexja.cfg| によって
+% セットされるものです。
+%
+% \changes{v1.6-ltj-9}{2015/01/01}{サイズクラスのロード前にメトリックの変更を行わないと,
+% \cs{Cht}等の値が反映されないのでこの場所に移動させました.}
+%
+% \begin{macrocode}
+%<*article|report|book>
+\directlua{luatexbase.add_to_callback('luatexja.load_jfm',
+ function (ji, jn) ji.chars['parbdd'] = 0; return ji end,
+ 'ltj.jclasses_load_jfm', 1)}
+{\jfont\g=\ltj@stdmcfont:jfm=min } % loading jfm-min.lua
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [0.962216] \ltj@stdmcfont:jfm=min}{}
+\DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [0.962216] \ltj@stdgtfont:jfm=min;jfmvar=goth}{}
+\ltjglobalsetparameter{differentjfm=both}
+\directlua{luatexbase.remove_from_callback('luatexja.load_jfm', 'ltj.jclasses_load_jfm')}
+%</article|report|book>
+% \end{macrocode}
+%
+% \subsection{disablejfamオプション}
+% \changes{v1.8b-ltj-17}{2019/08/12}{disablejfamの``Unused global option(s)''警告を出さないようにした}
+% disablejfamオプションはLua\TeX-ja本体で処理しますが,
+% もうLua\TeX-jaは読み込んでいるため,このままでは``Unused global option(s): [disablejfam]''警告が
+% 出てしまいます.そのため,「何もしない」disablejfamオプションをクラス内で定義しておきます.
+%
+% \begin{macrocode}
+%<*article|report|book>
+\DeclareOption{disablejfam}{}
+%</article|report|book>
+% \end{macrocode}
+%
+% \subsection{オプションの実行}
+% オプションの実行、およびサイズクラスのロードを行ないます。
+% \begin{macrocode}
+%<*article|report|book>
+%<*article>
+%<tate>\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final,tate}
+%<yoko>\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final}
+%</article>
+%<*report>
+%<tate>\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final,openany,tate}
+%<yoko>\ExecuteOptions{a4paper,10pt,oneside,onecolumn,final,openany}
+%</report>
+%<*book>
+%<tate>\ExecuteOptions{a4paper,10pt,twoside,onecolumn,final,openright,tate}
+%<yoko>\ExecuteOptions{a4paper,10pt,twoside,onecolumn,final,openright}
+%</book>
+\ProcessOptions\relax
+%<book&tate>\input{ltjtbk1\@ptsize.clo}
+%<!book&tate>\input{ltjtsize1\@ptsize.clo}
+%<book&yoko>\input{ltjbk1\@ptsize.clo}
+%<!book&yoko>\input{ltjsize1\@ptsize.clo}
+% \end{macrocode}
+% 縦組用クラスファイルの場合は、ここで\file{plext.sty}も読み込みます。
+% \changes{v1.0e}{1996/03/21}{\cs{usepackage} to \cs{RequirePackage}}
+% \changes{v1.6-ltj-6}{2014/07/28}{Lua\TeX-jaでは,代わりに\file{lltjext.sty}を読み込みま
+% す.これは\file{plext.sty}をLua\TeX-ja用に書きなおしたものです.}
+% \begin{macrocode}
+%<tate>\RequirePackage{lltjext}
+%</article|report|book>
+% \end{macrocode}
+%
+% \section{フォント}
+%
+% ここでは、\LaTeX{}のフォントサイズコマンドの定義をしています。
+% フォントサイズコマンドの定義は、次のコマンドを用います。
+%
+% |\@setfontsize||\size|\meta{font-size}\meta{baselineskip}
+%
+% \begin{description}
+% \item[\meta{font-size}] これから使用する、フォントの実際の大きさです。
+% \item[\meta{baselineskip}] 選択されるフォントサイズ用の通常の
+% |\baselineskip|の値です(実際は、|\baselinestretch| * \meta{baselineskip}
+% の値です)。
+% \end{description}
+%
+% 数値コマンドは、次のように\LaTeX{}カーネルで定義されています。
+% \begin{center}
+% \begin{tabular}{ll@{\qquad}ll@{\qquad}ll}
+% \verb=\@vpt= & 5 & \verb=\@vipt= & 6 & \verb=\@viipt= & 7 \\
+% \verb=\@viiipt= & 8 & \verb=\@ixpt= & 9 & \verb=\@xpt= & 10 \\
+% \verb=\@xipt= & 10.95 & \verb=\@xiipt= & 12 & \verb=\@xivpt= & 14.4\\
+% ...
+% \end{tabular}
+% \end{center}
+%
+% \begin{macro}{\normalsize}
+% \begin{macro}{\@normalsize}
+% 基本サイズとするユーザレベルのコマンドは|\normalsize|です。
+% \LaTeX{}の内部では|\@normalsize|を使用します。
+%
+% |\normalsize|マクロは、|\abovedisplayskip|と
+% |\abovedisplayshortskip|、および|\belowdisplayshortskip|の値も設定をします。
+% |\belowdisplayskip|は、つねに|\abovedisplayskip|と同値です。
+%
+% また、リスト環境のトップレベルのパラメータは、つねに|\@listI|で与えられます。
+% \begin{macrocode}
+%<*10pt|11pt|12pt>
+\renewcommand{\normalsize}{%
+%<10pt&yoko> \@setfontsize\normalsize\@xpt{15}%
+%<11pt&yoko> \@setfontsize\normalsize\@xipt{15.5}%
+%<12pt&yoko> \@setfontsize\normalsize\@xiipt{16.5}%
+%<10pt&tate> \@setfontsize\normalsize\@xpt{17}%
+%<11pt&tate> \@setfontsize\normalsize\@xipt{17}%
+%<12pt&tate> \@setfontsize\normalsize\@xiipt{18}%
+%<*10pt>
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+%</10pt>
+%<*11pt>
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+%</11pt>
+%<*12pt>
+ \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+%</12pt>
+ \belowdisplayskip \abovedisplayskip
+ \let\@listi\@listI}
+% \end{macrocode}
+%
+% ここで、ノーマルフォントを選択し、初期化をします。
+% このとき、縦組モードならば、デフォルトのエンコードを変更します。
+% \begin{macrocode}
+%<tate>\def\kanjiencodingdefault{JT3}%
+%<tate>\kanjiencoding{\kanjiencodingdefault}%
+\normalsize
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Cht}
+% \begin{macro}{\Cdp}
+% \begin{macro}{\Cwd}
+% \begin{macro}{\Cvs}
+% \begin{macro}{\Chs}
+% 基準となる長さの設定をします。これらのパラメータは\file{lltjfont.sty}で定義
+% されています。基準とする文字を「全角空白」(EUCコード\texttt{0xA1A1})から
+% 「漢」(JISコード\texttt{0x3441})へ変更しました。
+% \changes{v1.7f}{2017/08/31}{和文書体の基準を全角空白から「漢」に変更}
+% \changes{v1.7g}{2017/09/19}{内部処理で使ったボックス0を空にした}
+% \begin{macrocode}
+\setbox0\hbox{漢}
+\setlength\Cht{\ht0}
+\setlength\Cdp{\dp0}
+\setlength\Cwd{\wd0}
+\setlength\Cvs{\baselineskip}
+\setlength\Chs{\wd0}
+\setbox0=\box\voidb@x
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\small}
+% |\small|コマンドの定義は、|\normalsize|に似ています。
+% \begin{macrocode}
+\newcommand{\small}{%
+%<*10pt>
+ \@setfontsize\small\@ixpt{11}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+%</10pt>
+%<*11pt>
+ \@setfontsize\small\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep}%
+%</11pt>
+%<*12pt>
+ \@setfontsize\small\@xipt{13.6}%
+ \abovedisplayskip 11\p@ \@plus3\p@ \@minus6\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep}%
+%</12pt>
+ \belowdisplayskip \abovedisplayskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnotesize}
+% |\footnotesize|コマンドの定義は、|\normalsize|に似ています。
+% \begin{macrocode}
+\newcommand{\footnotesize}{%
+%<*10pt>
+ \@setfontsize\footnotesize\@viiipt{9.5}%
+ \abovedisplayskip 6\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 3\p@ \@plus\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 3\p@ \@plus\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+%</10pt>
+%<*11pt>
+ \@setfontsize\footnotesize\@ixpt{11}%
+ \abovedisplayskip 8\p@ \@plus2\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+%</11pt>
+%<*12pt>
+ \@setfontsize\footnotesize\@xpt\@xiipt
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 6\p@ \@plus2\p@ \@minus2\p@
+ \parsep 3\p@ \@plus2\p@ \@minus\p@
+ \itemsep \parsep}%
+%</12pt>
+ \belowdisplayskip \abovedisplayskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scriptsize}
+% \begin{macro}{\tiny}
+% \begin{macro}{\large}
+% \begin{macro}{\Large}
+% \begin{macro}{\LARGE}
+% \begin{macro}{\huge}
+% \begin{macro}{\Huge}
+% これらは先ほどのマクロよりも簡単です。これらはフォントサイズを変更する
+% だけで、リスト環境とディスプレイ数式のパラメータは変更しません。
+% \begin{macrocode}
+%<*10pt>
+\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand{\tiny}{\@setfontsize\tiny\@vpt\@vipt}
+\newcommand{\large}{\@setfontsize\large\@xiipt{17}}
+\newcommand{\Large}{\@setfontsize\Large\@xivpt{21}}
+\newcommand{\LARGE}{\@setfontsize\LARGE\@xviipt{25}}
+\newcommand{\huge}{\@setfontsize\huge\@xxpt{28}}
+\newcommand{\Huge}{\@setfontsize\Huge\@xxvpt{33}}
+%</10pt>
+%<*11pt>
+\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viiipt{9.5}}
+\newcommand{\tiny}{\@setfontsize\tiny\@vipt\@viipt}
+\newcommand{\large}{\@setfontsize\large\@xiipt{17}}
+\newcommand{\Large}{\@setfontsize\Large\@xivpt{21}}
+\newcommand{\LARGE}{\@setfontsize\LARGE\@xviipt{25}}
+\newcommand{\huge}{\@setfontsize\huge\@xxpt{28}}
+\newcommand{\Huge}{\@setfontsize\Huge\@xxvpt{33}}
+%</11pt>
+%<*12pt>
+\newcommand{\scriptsize}{\@setfontsize\scriptsize\@viiipt{9.5}}
+\newcommand{\tiny}{\@setfontsize\tiny\@vipt\@viipt}
+\newcommand{\large}{\@setfontsize\large\@xivpt{21}}
+\newcommand{\Large}{\@setfontsize\Large\@xviipt{25}}
+\newcommand{\LARGE}{\@setfontsize\LARGE\@xxpt{28}}
+\newcommand{\huge}{\@setfontsize\huge\@xxvpt{33}}
+\let\Huge=\huge
+%</12pt>
+%</10pt|11pt|12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\Cjascale}
+% このクラスファイルが意図する和文スケール値
+% ($1\,\mathrm{zw} \div \textmc{要求サイズ}$)を
+% 表す実数値マクロ|\Cjascale|を定義します。
+% この\texttt{jclasses}互換クラスでは、Lua\TeX-ja読み込み時の和文スケール値がそのまま
+% 使用され、その値は0.962216です。
+% \changes{v1.7h}{2018/02/04}{和文スケール値\cs{Cjascale}を定義}
+% \begin{macrocode}
+%<*article|report|book>
+\def\Cjascale{0.962216}
+%</article|report|book>
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{レイアウト}
+%
+% \subsection{用紙サイズの決定}
+%
+% \begin{macro}{\columnsep}
+% \begin{macro}{\columnseprule}
+% |\columnsep|は、二段組のときの、左右(あるいは上下)の段間の幅です。
+% このスペースの中央に|\columnseprule|の幅の罫線が引かれます。
+% \changes{v1.0g}{1997/01/25}{\cs{columnsep}: 10pt to 3\cs{Cwd} or 2\cs{Cwd}.}
+% \begin{macrocode}
+%<*article|report|book>
+\if@stysize
+%<tate> \setlength\columnsep{3\Cwd}
+%<yoko> \setlength\columnsep{2\Cwd}
+\else
+ \setlength\columnsep{10\p@}
+\fi
+\setlength\columnseprule{0\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pagewidth}
+% \begin{macro}{\pageheight}
+% \begin{macro}{\stockwidth}
+% \begin{macro}{\stockheight}
+% 出力のPDFの用紙サイズをここで設定しておきます。
+% |tombow|が真のときは2インチ足しておきます。
+%
+% [2015-10-18 LTJ] Lua\TeX\ 0.81.0ではプリミティブの名称変更がされたので,
+% それに合わせておきます.
+%
+% [2016-07-19 LTJ] luatex.defが新しくなったことに対応するaminophenさんのパッチを取り込みました。
+%
+% [2017-01-17 LTJ] [lt]jsclassesに合わせ,トンボオプションが指定されているとき「だけ」|\stockwidth|,
+% |\stockheight|を定義するようにしました。aminophenさん,ありがとうございます.
+%
+% \begin{macrocode}
+\iftombow
+ \newlength{\stockwidth}
+ \newlength{\stockheight}
+ \setlength{\stockwidth}{\paperwidth}
+ \setlength{\stockheight}{\paperheight}
+ \advance \stockwidth 2in
+ \advance \stockheight 2in
+ \ifdefined\pdfpagewidth
+ \setlength{\pdfpagewidth}{\stockwidth}
+ \setlength{\pdfpageheight}{\stockheight}
+ \else
+ \setlength{\pagewidth}{\stockwidth}
+ \setlength{\pageheight}{\stockheight}
+ \fi
+\else
+ \ifdefined\pdfpagewidth
+ \setlength{\pdfpagewidth}{\paperwidth}
+ \setlength{\pdfpageheight}{\paperheight}
+ \else
+ \setlength{\pagewidth}{\paperwidth}
+ \setlength{\pageheight}{\paperheight}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{段落の形}
+%
+% \begin{macro}{\lineskip}
+% \begin{macro}{\normallineskip}
+% これらの値は、行が近付き過ぎたときの\TeX の動作を制御します。
+% \begin{macrocode}
+\setlength\lineskip{1\p@}
+\setlength\normallineskip{1\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\baselinestretch}
+% これは、|\baselineskip|の倍率を示すために使います。
+% デフォルトでは、\emph{何もしません}。このコマンドが``empty''でない場合、
+% |\baselineskip|の指定の\texttt{plus}や\texttt{minus}部分は無視される
+% ことに注意してください。
+% \begin{macrocode}
+\renewcommand{\baselinestretch}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parskip}
+% \begin{macro}{\parindent}
+% |\parskip|は段落間に挿入される、縦方向の追加スペースです。
+% |\parindent|は段落の先頭の字下げ幅です。
+% \begin{macrocode}
+\setlength\parskip{0\p@ \@plus \p@}
+\setlength\parindent{1\Cwd}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\smallskipamount}
+% \begin{macro}{\medskipamount}
+% \begin{macro}{\bigskipamount}
+% これら3つのパラメータの値は、\LaTeX{}カーネルの中で設定されています。
+% これらはおそらく、サイズオプションの指定によって変えるべきです。
+% しかし、\LaTeX~2.09や\LaTeXe{}の以前のリリースの両方との互換性を保つために、
+% これらはまだ同じ値としています。
+% \begin{macrocode}
+%<*10pt|11pt|12pt>
+\setlength\smallskipamount{3\p@ \@plus 1\p@ \@minus 1\p@}
+\setlength\medskipamount{6\p@ \@plus 2\p@ \@minus 2\p@}
+\setlength\bigskipamount{12\p@ \@plus 4\p@ \@minus 4\p@}
+%</10pt|11pt|12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@lowpenalty}
+% \begin{macro}{\@medpenalty}
+% \begin{macro}{\@highpenalty}
+% |\nopagebreak|と|\nolinebreak|コマンドは、これらのコマンドが置かれた場所に、
+% ペナルティを起いて、分割を制御します。
+% 置かれるペナルティは、コマンドの引数によって、
+% |\@lowpenalty|, |\@medpenalty|, |\@highpenalty|のいずれかが使われます。
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+%</article|report|book>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{ページレイアウト}
+%
+% \subsubsection{縦方向のスペース}
+%
+% \begin{macro}{\headheight}
+% \begin{macro}{\headsep}
+% \begin{macro}{\topskip}
+% |\headheight|は、ヘッダが入るボックスの高さです。
+% |\headsep|は、ヘッダの下端と本文領域との間の距離です。
+% |\topskip|は、本文領域の上端と1行目のテキストのベースラインとの距離です。
+% \begin{macrocode}
+%<*10pt|11pt|12pt>
+\setlength\headheight{12\p@}
+%<*tate>
+\if@stysize
+ \ifnum\c@@paper=2 % A5
+ \setlength\headsep{6mm}
+ \else % A4, B4, B5 and other
+ \setlength\headsep{8mm}
+ \fi
+\else
+ \setlength\headsep{8mm}
+\fi
+%</tate>
+%<*yoko>
+%<!bk>\setlength\headsep{25\p@}
+%<10pt&bk>\setlength\headsep{.25in}
+%<11pt&bk>\setlength\headsep{.275in}
+%<12pt&bk>\setlength\headsep{.275in}
+%</yoko>
+\setlength\topskip{1\Cht}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footskip}
+% |\footskip|は、本文領域の下端とフッタの下端との距離です。
+% フッタのボックスの高さを示す、|\footheight|は削除されました。
+% \begin{macrocode}
+%<tate>\setlength\footskip{14mm}
+%<*yoko>
+%<!bk>\setlength\footskip{30\p@}
+%<10pt&bk>\setlength\footskip{.35in}
+%<11pt&bk>\setlength\footskip{.38in}
+%<12pt&bk>\setlength\footskip{30\p@}
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maxdepth}
+% \changes{v1.1c}{1995/12/25}{\cs{@maxdepth}の設定を除外した}
+% \TeX のプリミティブレジスタ|\maxdepth|は、|\topskip|と同じような
+% 働きをします。|\@maxdepth|レジスタは、つねに|\maxdepth|のコピーでなくては
+% いけません。これは|\begin{document}|の内部で設定されます。
+% \TeX{}と\LaTeX~2.09では、|\maxdepth|は\texttt{4pt}に固定です。
+% \LaTeXe{}では、|\maxdepth|$+$|\topskip|を基本サイズの1.5倍にしたいので、
+% |\maxdepth|を|\topskip|の半分の値で設定します。
+% \begin{macrocode}
+\if@compatibility
+ \setlength\maxdepth{4\p@}
+\else
+ \setlength\maxdepth{.5\topskip}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{本文領域}
+% |\textheight|と|\textwidth|は、本文領域の通常の高さと幅を示します。
+% 縦組でも横組でも、``高さ''は行数を、``幅''は字詰めを意味します。
+% 後ほど、これらの長さに|\topskip|の値が加えられます。
+%
+% \begin{macro}{\textwidth}
+% 基本組の字詰めです。
+%
+% 互換モードの場合:
+% \begin{macrocode}
+\if@compatibility
+% \end{macrocode}
+% \changes{v1.1a}{1997/01/25}{Add paper option with compatibility mode.}
+% \changes{v1.1h}{1997/09/03}{landscapeでの指定を追加}
+% 互換モード:|a4j|や|b5j|のクラスオプションが指定された場合の設定:
+% \begin{macrocode}
+ \if@stysize
+ \ifnum\c@@paper=2 % A5
+ \if@landscape
+%<10pt&yoko> \setlength\textwidth{47\Cwd}
+%<11pt&yoko> \setlength\textwidth{42\Cwd}
+%<12pt&yoko> \setlength\textwidth{40\Cwd}
+%<10pt&tate> \setlength\textwidth{27\Cwd}
+%<11pt&tate> \setlength\textwidth{25\Cwd}
+%<12pt&tate> \setlength\textwidth{23\Cwd}
+ \else
+%<10pt&yoko> \setlength\textwidth{28\Cwd}
+%<11pt&yoko> \setlength\textwidth{25\Cwd}
+%<12pt&yoko> \setlength\textwidth{24\Cwd}
+%<10pt&tate> \setlength\textwidth{46\Cwd}
+%<11pt&tate> \setlength\textwidth{42\Cwd}
+%<12pt&tate> \setlength\textwidth{38\Cwd}
+ \fi
+ \else\ifnum\c@@paper=3 % B4
+ \if@landscape
+%<10pt&yoko> \setlength\textwidth{75\Cwd}
+%<11pt&yoko> \setlength\textwidth{69\Cwd}
+%<12pt&yoko> \setlength\textwidth{63\Cwd}
+%<10pt&tate> \setlength\textwidth{53\Cwd}
+%<11pt&tate> \setlength\textwidth{49\Cwd}
+%<12pt&tate> \setlength\textwidth{44\Cwd}
+ \else
+%<10pt&yoko> \setlength\textwidth{60\Cwd}
+%<11pt&yoko> \setlength\textwidth{55\Cwd}
+%<12pt&yoko> \setlength\textwidth{50\Cwd}
+%<10pt&tate> \setlength\textwidth{85\Cwd}
+%<11pt&tate> \setlength\textwidth{76\Cwd}
+%<12pt&tate> \setlength\textwidth{69\Cwd}
+ \fi
+ \else\ifnum\c@@paper=4 % B5
+ \if@landscape
+%<10pt&yoko> \setlength\textwidth{60\Cwd}
+%<11pt&yoko> \setlength\textwidth{55\Cwd}
+%<12pt&yoko> \setlength\textwidth{50\Cwd}
+%<10pt&tate> \setlength\textwidth{34\Cwd}
+%<11pt&tate> \setlength\textwidth{31\Cwd}
+%<12pt&tate> \setlength\textwidth{28\Cwd}
+ \else
+%<10pt&yoko> \setlength\textwidth{37\Cwd}
+%<11pt&yoko> \setlength\textwidth{34\Cwd}
+%<12pt&yoko> \setlength\textwidth{31\Cwd}
+%<10pt&tate> \setlength\textwidth{55\Cwd}
+%<11pt&tate> \setlength\textwidth{51\Cwd}
+%<12pt&tate> \setlength\textwidth{47\Cwd}
+ \fi
+ \else % A4 ant other
+ \if@landscape
+%<10pt&yoko> \setlength\textwidth{73\Cwd}
+%<11pt&yoko> \setlength\textwidth{68\Cwd}
+%<12pt&yoko> \setlength\textwidth{61\Cwd}
+%<10pt&tate> \setlength\textwidth{41\Cwd}
+%<11pt&tate> \setlength\textwidth{38\Cwd}
+%<12pt&tate> \setlength\textwidth{35\Cwd}
+ \else
+%<10pt&yoko> \setlength\textwidth{47\Cwd}
+%<11pt&yoko> \setlength\textwidth{43\Cwd}
+%<12pt&yoko> \setlength\textwidth{40\Cwd}
+%<10pt&tate> \setlength\textwidth{67\Cwd}
+%<11pt&tate> \setlength\textwidth{61\Cwd}
+%<12pt&tate> \setlength\textwidth{57\Cwd}
+ \fi
+ \fi\fi\fi
+ \else
+% \end{macrocode}
+% 互換モード:デフォルト設定
+% \begin{macrocode}
+ \if@twocolumn
+ \setlength\textwidth{52\Cwd}
+ \else
+%<10pt&!bk&yoko> \setlength\textwidth{327\p@}
+%<11pt&!bk&yoko> \setlength\textwidth{342\p@}
+%<12pt&!bk&yoko> \setlength\textwidth{372\p@}
+%<10pt&bk&yoko> \setlength\textwidth{4.3in}
+%<11pt&bk&yoko> \setlength\textwidth{4.8in}
+%<12pt&bk&yoko> \setlength\textwidth{4.8in}
+%<10pt&tate> \setlength\textwidth{67\Cwd}
+%<11pt&tate> \setlength\textwidth{61\Cwd}
+%<12pt&tate> \setlength\textwidth{57\Cwd}
+ \fi
+ \fi
+% \end{macrocode}
+% 2eモードの場合:
+% \begin{macrocode}
+\else
+% \end{macrocode}
+% 2eモード:|a4j|や|b5j|のクラスオプションが指定された場合の設定:
+% 二段組では用紙サイズの8割、一段組では用紙サイズの7割を版面の幅として
+% 設定します。
+% \begin{macrocode}
+ \if@stysize
+ \if@twocolumn
+%<yoko> \setlength\textwidth{.8\paperwidth}
+%<tate> \setlength\textwidth{.8\paperheight}
+ \else
+%<yoko> \setlength\textwidth{.7\paperwidth}
+%<tate> \setlength\textwidth{.7\paperheight}
+ \fi
+ \else
+% \end{macrocode}
+% 2eモード:デフォルト設定
+% \begin{macrocode}
+%<tate> \setlength\@tempdima{\paperheight}
+%<yoko> \setlength\@tempdima{\paperwidth}
+ \addtolength\@tempdima{-2in}
+%<tate> \addtolength\@tempdima{-1.3in}
+%<yoko&10pt> \setlength\@tempdimb{327\p@}
+%<yoko&11pt> \setlength\@tempdimb{342\p@}
+%<yoko&12pt> \setlength\@tempdimb{372\p@}
+%<tate&10pt> \setlength\@tempdimb{67\Cwd}
+%<tate&11pt> \setlength\@tempdimb{61\Cwd}
+%<tate&12pt> \setlength\@tempdimb{57\Cwd}
+ \if@twocolumn
+ \ifdim\@tempdima>2\@tempdimb\relax
+ \setlength\textwidth{2\@tempdimb}
+ \else
+ \setlength\textwidth{\@tempdima}
+ \fi
+ \else
+ \ifdim\@tempdima>\@tempdimb\relax
+ \setlength\textwidth{\@tempdimb}
+ \else
+ \setlength\textwidth{\@tempdima}
+ \fi
+ \fi
+ \fi
+\fi
+\@settopoint\textwidth
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textheight}
+% 基本組の行数です。
+%
+% 互換モードの場合:
+% \begin{macrocode}
+\if@compatibility
+% \end{macrocode}
+% \changes{v1.1a}{1997/01/25}{Add paper option with compatibility mode.}
+% \changes{v1.1f}{1997/09/03}{landscapeでの指定を追加}
+% 互換モード:|a4j|や|b5j|のクラスオプションが指定された場合の設定:
+% \begin{macrocode}
+ \if@stysize
+ \ifnum\c@@paper=2 % A5
+ \if@landscape
+%<10pt&yoko> \setlength\textheight{17\Cvs}
+%<11pt&yoko> \setlength\textheight{17\Cvs}
+%<12pt&yoko> \setlength\textheight{16\Cvs}
+%<10pt&tate> \setlength\textheight{26\Cvs}
+%<11pt&tate> \setlength\textheight{26\Cvs}
+%<12pt&tate> \setlength\textheight{25\Cvs}
+ \else
+%<10pt&yoko> \setlength\textheight{28\Cvs}
+%<11pt&yoko> \setlength\textheight{25\Cvs}
+%<12pt&yoko> \setlength\textheight{24\Cvs}
+%<10pt&tate> \setlength\textheight{16\Cvs}
+%<11pt&tate> \setlength\textheight{16\Cvs}
+%<12pt&tate> \setlength\textheight{15\Cvs}
+ \fi
+ \else\ifnum\c@@paper=3 % B4
+ \if@landscape
+%<10pt&yoko> \setlength\textheight{38\Cvs}
+%<11pt&yoko> \setlength\textheight{36\Cvs}
+%<12pt&yoko> \setlength\textheight{34\Cvs}
+%<10pt&tate> \setlength\textheight{48\Cvs}
+%<11pt&tate> \setlength\textheight{48\Cvs}
+%<12pt&tate> \setlength\textheight{45\Cvs}
+ \else
+%<10pt&yoko> \setlength\textheight{57\Cvs}
+%<11pt&yoko> \setlength\textheight{55\Cvs}
+%<12pt&yoko> \setlength\textheight{52\Cvs}
+%<10pt&tate> \setlength\textheight{33\Cvs}
+%<11pt&tate> \setlength\textheight{33\Cvs}
+%<12pt&tate> \setlength\textheight{31\Cvs}
+ \fi
+ \else\ifnum\c@@paper=4 % B5
+ \if@landscape
+%<10pt&yoko> \setlength\textheight{22\Cvs}
+%<11pt&yoko> \setlength\textheight{21\Cvs}
+%<12pt&yoko> \setlength\textheight{20\Cvs}
+%<10pt&tate> \setlength\textheight{34\Cvs}
+%<11pt&tate> \setlength\textheight{34\Cvs}
+%<12pt&tate> \setlength\textheight{32\Cvs}
+ \else
+%<10pt&yoko> \setlength\textheight{35\Cvs}
+%<11pt&yoko> \setlength\textheight{34\Cvs}
+%<12pt&yoko> \setlength\textheight{32\Cvs}
+%<10pt&tate> \setlength\textheight{21\Cvs}
+%<11pt&tate> \setlength\textheight{21\Cvs}
+%<12pt&tate> \setlength\textheight{20\Cvs}
+ \fi
+ \else % A4 and other
+ \if@landscape
+%<10pt&yoko> \setlength\textheight{27\Cvs}
+%<11pt&yoko> \setlength\textheight{26\Cvs}
+%<12pt&yoko> \setlength\textheight{25\Cvs}
+%<10pt&tate> \setlength\textheight{41\Cvs}
+%<11pt&tate> \setlength\textheight{41\Cvs}
+%<12pt&tate> \setlength\textheight{38\Cvs}
+ \else
+%<10pt&yoko> \setlength\textheight{43\Cvs}
+%<11pt&yoko> \setlength\textheight{42\Cvs}
+%<12pt&yoko> \setlength\textheight{39\Cvs}
+%<10pt&tate> \setlength\textheight{26\Cvs}
+%<11pt&tate> \setlength\textheight{26\Cvs}
+%<12pt&tate> \setlength\textheight{22\Cvs}
+ \fi
+ \fi\fi\fi
+%<yoko> \addtolength\textheight{\topskip}
+%<bk&yoko> \addtolength\textheight{\baselineskip}
+%<tate> \addtolength\textheight{\Cht}
+%<tate> \addtolength\textheight{\Cdp}
+% \end{macrocode}
+% 互換モード:デフォルト設定
+% \begin{macrocode}
+ \else
+%<10pt&!bk&yoko> \setlength\textheight{578\p@}
+%<10pt&bk&yoko> \setlength\textheight{554\p@}
+%<11pt&yoko> \setlength\textheight{580.4\p@}
+%<12pt&yoko> \setlength\textheight{586.5\p@}
+%<10pt&tate> \setlength\textheight{26\Cvs}
+%<11pt&tate> \setlength\textheight{25\Cvs}
+%<12pt&tate> \setlength\textheight{24\Cvs}
+ \fi
+% \end{macrocode}
+% 2eモードの場合:
+% \begin{macrocode}
+\else
+% \end{macrocode}
+% 2eモード:|a4j|や|b5j|のクラスオプションが指定された場合の設定:
+% 縦組では用紙サイズの70\%(book)か78\%(ariticle,report)、
+% 横組では70\%(book)か75\%(article,report)を版面の高さに設定します。
+% \begin{macrocode}
+ \if@stysize
+%<tate&bk> \setlength\textheight{.75\paperwidth}
+%<tate&!bk> \setlength\textheight{.78\paperwidth}
+%<yoko&bk> \setlength\textheight{.70\paperheight}
+%<yoko&!bk> \setlength\textheight{.75\paperheight}
+% \end{macrocode}
+% 2eモード:デフォルト値
+% \begin{macrocode}
+ \else
+%<tate> \setlength\@tempdima{\paperwidth}
+%<yoko> \setlength\@tempdima{\paperheight}
+ \addtolength\@tempdima{-2in}
+%<yoko> \addtolength\@tempdima{-1.5in}
+ \divide\@tempdima\baselineskip
+ \@tempcnta\@tempdima
+ \setlength\textheight{\@tempcnta\baselineskip}
+ \fi
+\fi
+% \end{macrocode}
+% 最後に、|\textheight|に|\topskip|の値を加えます。
+% \begin{macrocode}
+\addtolength\textheight{\topskip}
+\@settopoint\textheight
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{マージン}
+%
+% \begin{macro}{\topmargin}
+% |\topmargin|は、``印字可能領域''---用紙の上端から1インチ内側---%
+% の上端からヘッダ部分の上端までの距離です。
+%
+% 2.09互換モードの場合:
+% \begin{macrocode}
+\if@compatibility
+%<*yoko>
+ \if@stysize
+ \setlength\topmargin{-.3in}
+ \else
+%<!bk> \setlength\topmargin{27\p@}
+%<10pt&bk> \setlength\topmargin{.75in}
+%<11pt&bk> \setlength\topmargin{.73in}
+%<12pt&bk> \setlength\topmargin{.73in}
+ \fi
+%</yoko>
+%<*tate>
+ \if@stysize
+ \ifnum\c@@paper=2 % A5
+ \setlength\topmargin{.8in}
+ \else % A4, B4, B5 and other
+ \setlength\topmargin{32mm}
+ \fi
+ \else
+ \setlength\topmargin{32mm}
+ \fi
+ \addtolength\topmargin{-1in}
+ \addtolength\topmargin{-\headheight}
+ \addtolength\topmargin{-\headsep}
+%</tate>
+% \end{macrocode}
+% 2eモードの場合:
+% \begin{macrocode}
+\else
+ \setlength\topmargin{\paperheight}
+ \addtolength\topmargin{-\headheight}
+ \addtolength\topmargin{-\headsep}
+%<tate> \addtolength\topmargin{-\textwidth}
+%<yoko> \addtolength\topmargin{-\textheight}
+ \addtolength\topmargin{-\footskip}
+% \end{macrocode}
+% \changes{v1.1e}{1997/04/08}{横組クラスでの調整量を
+% -2.4インチから-2.0インチにした。}
+% \changes{v1.1j}{1998/02/03}{互換モード時のa5pのトップマージンを0.7in増加}
+% \begin{macrocode}
+ \if@stysize
+ \ifnum\c@@paper=2 % A5
+ \addtolength\topmargin{-1.3in}
+ \else
+ \addtolength\topmargin{-2.0in}
+ \fi
+ \else
+%<yoko> \addtolength\topmargin{-2.0in}
+%<tate> \addtolength\topmargin{-2.8in}
+ \fi
+% \end{macrocode}
+% \changes{v1.1d}{1997/02/05}{\cs{tompargin}を半分にするのはアキ領域の計算後}
+% \changes{v1.1r}{1999/08/09}{\cs{if@stysize}フラグに限らず半分にする}
+% \begin{macrocode}
+ \addtolength\topmargin{-.5\topmargin}
+\fi
+\@settopoint\topmargin
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\marginparsep}
+% \begin{macro}{\marginparpush}
+% |\marginparsep|は、本文と傍注の間にあけるスペースの幅です。
+% 横組では本文の左(右)端と傍注、
+% 縦組では本文の下(上)端と傍注の間になります。
+% |\marginparpush|は、傍注と傍注との間のスペースの幅です。
+% \begin{macrocode}
+\if@twocolumn
+ \setlength\marginparsep{10\p@}
+\else
+%<tate> \setlength\marginparsep{15\p@}
+%<yoko> \setlength\marginparsep{10\p@}
+\fi
+%<tate>\setlength\marginparpush{7\p@}
+%<*yoko>
+%<10pt>\setlength\marginparpush{5\p@}
+%<11pt>\setlength\marginparpush{5\p@}
+%<12pt>\setlength\marginparpush{7\p@}
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\oddsidemargin}
+% \begin{macro}{\evensidemargin}
+% \begin{macro}{\marginparwidth}
+% まず、互換モードでの長さを示します。
+%
+% 互換モード、縦組の場合:
+% \begin{macrocode}
+\if@compatibility
+%<tate> \setlength\oddsidemargin{0\p@}
+%<tate> \setlength\evensidemargin{0\p@}
+% \end{macrocode}
+% 互換モード、横組、bookクラスの場合:
+% \begin{macrocode}
+%<*yoko>
+%<*bk>
+%<10pt> \setlength\oddsidemargin {.5in}
+%<11pt> \setlength\oddsidemargin {.25in}
+%<12pt> \setlength\oddsidemargin {.25in}
+%<10pt> \setlength\evensidemargin {1.5in}
+%<11pt> \setlength\evensidemargin {1.25in}
+%<12pt> \setlength\evensidemargin {1.25in}
+%<10pt> \setlength\marginparwidth {.75in}
+%<11pt> \setlength\marginparwidth {1in}
+%<12pt> \setlength\marginparwidth {1in}
+%</bk>
+% \end{macrocode}
+% 互換モード、横組、reportとarticleクラスの場合:
+% \begin{macrocode}
+%<*!bk>
+ \if@twoside
+%<10pt> \setlength\oddsidemargin {44\p@}
+%<11pt> \setlength\oddsidemargin {36\p@}
+%<12pt> \setlength\oddsidemargin {21\p@}
+%<10pt> \setlength\evensidemargin {82\p@}
+%<11pt> \setlength\evensidemargin {74\p@}
+%<12pt> \setlength\evensidemargin {59\p@}
+%<10pt> \setlength\marginparwidth {107\p@}
+%<11pt> \setlength\marginparwidth {100\p@}
+%<12pt> \setlength\marginparwidth {85\p@}
+ \else
+%<10pt> \setlength\oddsidemargin {60\p@}
+%<11pt> \setlength\oddsidemargin {54\p@}
+%<12pt> \setlength\oddsidemargin {39.5\p@}
+%<10pt> \setlength\evensidemargin {60\p@}
+%<11pt> \setlength\evensidemargin {54\p@}
+%<12pt> \setlength\evensidemargin {39.5\p@}
+%<10pt> \setlength\marginparwidth {90\p@}
+%<11pt> \setlength\marginparwidth {83\p@}
+%<12pt> \setlength\marginparwidth {68\p@}
+ \fi
+%</!bk>
+% \end{macrocode}
+% 互換モード、横組、二段組の場合:
+% \begin{macrocode}
+ \if@twocolumn
+ \setlength\oddsidemargin {30\p@}
+ \setlength\evensidemargin {30\p@}
+ \setlength\marginparwidth {48\p@}
+ \fi
+%</yoko>
+% \end{macrocode}
+% 縦組、横組にかかわらず、スタイルオプション設定ではゼロです。
+% \changes{v1.0g}{1997/01/25}{\cs{oddsidemargin}, \cs{evensidemagin}:
+% 0pt if specified papersize at \cs{documentstyle} option.}
+% \begin{macrocode}
+ \if@stysize
+ \if@twocolumn\else
+ \setlength\oddsidemargin{0\p@}
+ \setlength\evensidemargin{0\p@}
+ \fi
+ \fi
+% \end{macrocode}
+%
+% 互換モードでない場合:
+% \begin{macrocode}
+\else
+ \setlength\@tempdima{\paperwidth}
+%<tate> \addtolength\@tempdima{-\textheight}
+%<yoko> \addtolength\@tempdima{-\textwidth}
+% \end{macrocode}
+%
+% |\oddsidemargin|を計算します。
+% \begin{macrocode}
+ \if@twoside
+%<tate> \setlength\oddsidemargin{.6\@tempdima}
+%<yoko> \setlength\oddsidemargin{.4\@tempdima}
+ \else
+ \setlength\oddsidemargin{.5\@tempdima}
+ \fi
+ \addtolength\oddsidemargin{-1in}
+% \end{macrocode}
+% \changes{v1.1p}{1999/1/6}{\cs{oddsidemargin}のポイントへの変換を後ろに}
+% |\evensidemargin|を計算します。
+% \begin{macrocode}
+ \setlength\evensidemargin{\paperwidth}
+ \addtolength\evensidemargin{-2in}
+%<tate> \addtolength\evensidemargin{-\textheight}
+%<yoko> \addtolength\evensidemargin{-\textwidth}
+ \addtolength\evensidemargin{-\oddsidemargin}
+ \@settopoint\oddsidemargin % 1999.1.6
+ \@settopoint\evensidemargin
+% \end{macrocode}
+% |\marginparwidth|を計算します。
+% ここで、|\@tempdima|の値は、\linebreak
+% |\paperwidth| $-$ |\textwidth|です。
+% \changes{v1.1d}{1995/11/24}{\break typo: \cs{marginmarwidth} to \cs{marginparwidth}}
+% \begin{macrocode}
+%<*yoko>
+ \if@twoside
+ \setlength\marginparwidth{.6\@tempdima}
+ \addtolength\marginparwidth{-.4in}
+ \else
+ \setlength\marginparwidth{.5\@tempdima}
+ \addtolength\marginparwidth{-.4in}
+ \fi
+ \ifdim \marginparwidth >2in
+ \setlength\marginparwidth{2in}
+ \fi
+%</yoko>
+% \end{macrocode}
+%
+% 縦組の場合は、少し複雑です。
+% \begin{macrocode}
+%<*tate>
+ \setlength\@tempdima{\paperheight}
+ \addtolength\@tempdima{-\textwidth}
+ \addtolength\@tempdima{-\topmargin}
+ \addtolength\@tempdima{-\headheight}
+ \addtolength\@tempdima{-\headsep}
+ \addtolength\@tempdima{-\footskip}
+ \setlength\marginparwidth{.5\@tempdima}
+%</tate>
+ \@settopoint\marginparwidth
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{脚注}
+%
+% \begin{macro}{\footnotesep}
+% |\footnotesep|は、それぞれの脚注の先頭に置かれる``支柱''の高さです。
+% このクラスでは、通常の|\footnotesize|の支柱と同じ長さですので、
+% 脚注間に余計な空白は入りません。
+% \begin{macrocode}
+%<10pt>\setlength\footnotesep{6.65\p@}
+%<11pt>\setlength\footnotesep{7.7\p@}
+%<12pt>\setlength\footnotesep{8.4\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footins}
+% |\skip\footins|は、本文の最終行と最初の脚注との間の距離です。
+% \begin{macrocode}
+%<10pt>\setlength{\skip\footins}{9\p@ \@plus 4\p@ \@minus 2\p@}
+%<11pt>\setlength{\skip\footins}{10\p@ \@plus 4\p@ \@minus 2\p@}
+%<12pt>\setlength{\skip\footins}{10.8\p@ \@plus 4\p@ \@minus 2\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{フロート}
+% すべてのフロートパラメータは、\LaTeX{}のカーネルでデフォルトが定義
+% されています。そのため、カウンタ以外のパラメータは|\renewcommand|で
+% 設定する必要があります。
+%
+% \subsubsection{フロートパラメータ}
+%
+% \begin{macro}{\floatsep}
+% \begin{macro}{\textfloatsep}
+% \begin{macro}{\intextsep}
+% フロートオブジェクトが本文のあるページに置かれるとき、
+% フロートとそのページにある別のオブジェクトの距離は、
+% これらのパラメータで制御されます。これらのパラメータは、一段組モードと
+% 二段組モードの段抜きでないフロートの両方で使われます。
+%
+% |\floatsep|は、ページ上部あるいは下部のフロート間の距離です。
+%
+% |\textfloatsep|は、ページ上部あるいは下部のフロートと本文との距離です。
+%
+% |\intextsep|は、本文の途中に出力されるフロートと本文との距離です。
+% \begin{macrocode}
+%<*10pt>
+\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@}
+\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
+\setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@}
+%</10pt>
+%<*11pt>
+\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 2\p@}
+\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
+\setlength\intextsep {12\p@ \@plus 2\p@ \@minus 2\p@}
+%</11pt>
+%<*12pt>
+\setlength\floatsep {12\p@ \@plus 2\p@ \@minus 4\p@}
+\setlength\textfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
+\setlength\intextsep {14\p@ \@plus 4\p@ \@minus 4\p@}
+%</12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dblfloatsep}
+% \begin{macro}{\dbltextfloatsep}
+% 二段組モードで、|\textwidth|の幅を持つ、段抜きのフロートオブジェクトが
+% 本文と同じページに置かれるとき、本文とフロートとの距離は、
+% |\dblfloatsep|と|\dbltextfloatsep|によって制御されます。
+%
+% |\dblfloatsep|は、ページ上部あるいは下部のフロートと本文との距離です。
+%
+% |\dbltextfloatsep|は、ページ上部あるいは下部のフロート間の距離です。
+% \begin{macrocode}
+%<*10pt>
+\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@}
+\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
+%</10pt>
+%<*11pt>
+\setlength\dblfloatsep {12\p@ \@plus 2\p@ \@minus 2\p@}
+\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
+%</11pt>
+%<*12pt>
+\setlength\dblfloatsep {14\p@ \@plus 2\p@ \@minus 4\p@}
+\setlength\dbltextfloatsep{20\p@ \@plus 2\p@ \@minus 4\p@}
+%</12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@fptop}
+% \begin{macro}{\@fpsep}
+% \begin{macro}{\@fpbot}
+% フロートオブジェクトが、独立したページに置かれるとき、
+% このページのレイアウトは、次のパラメータで制御されます。
+% これらのパラメータは、一段組モードか、二段組モードでの一段出力の
+% フロートオブジェクトに対して使われます。
+%
+% ページ上部では、|\@fptop|の伸縮長が挿入されます。
+% ページ下部では、|\@fpbot|の伸縮長が挿入されます。
+% フロート間には|\@fpsep|が挿入されます。
+%
+% なお、そのページを空白で満たすために、|\@fptop|と|\@fpbot|の
+% 少なくともどちらか一方に、|plus ...fil|を含めてください。
+% \begin{macrocode}
+%<*10pt>
+\setlength\@fptop{0\p@ \@plus 1fil}
+\setlength\@fpsep{8\p@ \@plus 2fil}
+\setlength\@fpbot{0\p@ \@plus 1fil}
+%</10pt>
+%<*11pt>
+\setlength\@fptop{0\p@ \@plus 1fil}
+\setlength\@fpsep{8\p@ \@plus 2fil}
+\setlength\@fpbot{0\p@ \@plus 1fil}
+%</11pt>
+%<*12pt>
+\setlength\@fptop{0\p@ \@plus 1fil}
+\setlength\@fpsep{10\p@ \@plus 2fil}
+\setlength\@fpbot{0\p@ \@plus 1fil}
+%</12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dblfptop}
+% \begin{macro}{\@dblfpsep}
+% \begin{macro}{\@dblfpbot}
+% 二段組モードでの二段抜きのフロートに対しては、
+% これらのパラメータが使われます。
+% \begin{macrocode}
+%<*10pt>
+\setlength\@dblfptop{0\p@ \@plus 1fil}
+\setlength\@dblfpsep{8\p@ \@plus 2fil}
+\setlength\@dblfpbot{0\p@ \@plus 1fil}
+%</10pt>
+%<*11pt>
+\setlength\@dblfptop{0\p@ \@plus 1fil}
+\setlength\@dblfpsep{8\p@ \@plus 2fil}
+\setlength\@dblfpbot{0\p@ \@plus 1fil}
+%</11pt>
+%<*12pt>
+\setlength\@dblfptop{0\p@ \@plus 1fil}
+\setlength\@dblfpsep{10\p@ \@plus 2fil}
+\setlength\@dblfpbot{0\p@ \@plus 1fil}
+%</12pt>
+%</10pt|11pt|12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{フロートオブジェクトの上限値}
+%
+% \begin{macro}{\c@topnumber}
+% \Lcount{topnumber}は、本文ページの上部に出力できるフロートの最大数です。
+% \begin{macrocode}
+%<*article|report|book>
+\setcounter{topnumber}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@bottomnumber}
+% \Lcount{bottomnumber}は、本文ページの下部に出力できるフロートの最大数です。
+% \begin{macrocode}
+\setcounter{bottomnumber}{1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@totalnumber}
+% \Lcount{totalnumber}は、本文ページに出力できるフロートの最大数です。
+% \begin{macrocode}
+\setcounter{totalnumber}{3}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@dbltopnumber}
+% \Lcount{dbltopnumber}は、二段組時における、本文ページの上部に出力できる
+% 段抜きのフロートの最大数です。
+% \begin{macrocode}
+\setcounter{dbltopnumber}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topfraction}
+% これは、本文ページの上部に出力されるフロートが占有できる最大の割り合いです。
+% \begin{macrocode}
+\renewcommand{\topfraction}{.7}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bottomfraction}
+% これは、本文ページの下部に出力されるフロートが占有できる最大の割り合いです。
+% \begin{macrocode}
+\renewcommand{\bottomfraction}{.3}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textfraction}
+% これは、本文ページに最低限、入らなくてはならない本文の割り合いです。
+% \begin{macrocode}
+\renewcommand{\textfraction}{.2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatpagefraction}
+% これは、フロートだけのページで最低限、入らなくてはならない
+% フロートの割り合いです。
+% \begin{macrocode}
+\renewcommand{\floatpagefraction}{.5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dbltopfraction}
+% これは、2段組時における本文ページに、
+% 2段抜きのフロートが占めることができる最大の割り合いです。
+% \begin{macrocode}
+\renewcommand{\dbltopfraction}{.7}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dblfloatpagefraction}
+% これは、2段組時におけるフロートだけのページに最低限、
+% 入らなくてはならない2段抜きのフロートの割り合いです。
+% \begin{macrocode}
+\renewcommand{\dblfloatpagefraction}{.5}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{改ページ(日本語\TeX{}開発コミュニティ版のみ)}\label{sec:cleardoublepage}
+%
+% \begin{macro}{\pltx@cleartorightpage}
+% \begin{macro}{\pltx@cleartoleftpage}
+% \begin{macro}{\pltx@cleartooddpage}
+% \begin{macro}{\pltx@cleartoevenpage}
+% |\cleardoublepage|命令は、\LaTeX{}カーネルでは「奇数ページになるまでページを
+% 繰る命令」として定義されています。しかしp\LaTeX{}カーネルでは、アスキーの方針
+% により「横組では奇数ページになるまで、縦組では偶数ページになるまでページを
+% 繰る命令」に再定義されています。すなわち、p\LaTeX{}では縦組でも横組でも
+% 右ページになるまでページを繰ることになります。
+%
+% p\LaTeX{}標準クラスのbookは、横組も縦組も|openright|がデフォルトになっていて、
+% これは従来p\LaTeX{}カーネルで定義された|\cleardoublepage|を利用していました。
+% しかし、縦組で奇数ページ始まりの文書を作りたい場合もあるでしょうから、
+% コミュニティ版クラスでは以下の(非ユーザ向け)命令を追加します。
+% \begin{enumerate}
+% \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令
+% \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令
+% \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令
+% \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令
+% \end{enumerate}
+% \changes{v1.7d}{2017/02/15}{\cs{cleardoublepage}の代用となる命令群を追加}
+% \changes{v1.7d-ltj-14}{2017/02/20}{\cs{iftdir}, \cs{ifydir}を使わないように修正}
+% \begin{macrocode}
+\def\pltx@cleartorightpage{\clearpage\if@twoside
+ \unless\ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+\def\pltx@cleartoleftpage{\clearpage\if@twoside
+ \ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+% \end{macrocode}
+%
+% |\pltx@cleartooddpage|は\LaTeX{}の|\cleardoublepage|に似ていますが、
+% 上の2つに合わせるため|\thispagestyle{empty}|を追加してあります。
+% \begin{macrocode}
+\def\pltx@cleartooddpage{\clearpage\if@twoside
+ \ifodd\c@page\else
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+\def\pltx@cleartoevenpage{\clearpage\if@twoside
+ \ifodd\c@page
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% そしてreportとbookクラスの場合は、ユーザ向け命令である|\cleardoublepage|を、
+% |openright|オプションが指定されている場合は|\pltx@cleartorightpage|に、
+% |openleft|オプションが指定されている場合は|\pltx@cleartoleftpage|に、
+% それぞれ|\let|します。|openany|の場合はp\LaTeX{}カーネルの定義のままです。
+% \begin{macrocode}
+%<*!article>
+\if@openleft
+ \let\cleardoublepage\pltx@cleartoleftpage
+\else\if@openright
+ \let\cleardoublepage\pltx@cleartorightpage
+\fi\fi
+%</!article>
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \section{ページスタイル}\label{sec:pagestyle}
+% つぎの6種類のページスタイルを使用できます。
+% \pstyle{empty}は\file{ltpage.dtx}で定義されています。
+%
+% \begin{tabular}{ll}
+% empty & ヘッダにもフッタにも出力しない\\
+% plain & フッタにページ番号のみを出力する\\
+% headnombre & ヘッダにページ番号のみを出力する\\
+% footnombre & フッタにページ番号のみを出力する\\
+% headings & ヘッダに見出しとページ番号を出力する\\
+% bothstyle & ヘッダに見出し、フッタにページ番号を出力する\\
+% \end{tabular}
+%
+% ページスタイル\pstyle{foo}は、|\ps@foo|コマンドとして定義されます。
+%
+% \begin{macro}{\@evenhead}
+% \begin{macro}{\@oddhead}
+% \begin{macro}{\@evenfoot}
+% \begin{macro}{\@oddfoot}
+% これらは|\ps@...|から呼び出され、ヘッダとフッタを出力するマクロです。
+%
+% \DeleteShortVerb{\|}
+% \begin{tabular}{ll}
+% \cs{@oddhead} & 奇数ページのヘッダを出力\\
+% \cs{@oddfoot} & 奇数ページのフッタを出力\\
+% \cs{@evenhead} & 偶数ページのヘッダを出力\\
+% \cs{@evenfoot} & 偶数ページのフッタを出力\\
+% \end{tabular}
+% \MakeShortVerb{\|}
+%
+% これらの内容は、横組の場合は|\textwidth|の幅を持つ|\hbox|に入れられ、
+% 縦組の場合は|\textheight|の幅を持つ|\hbox|に入れられます。
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{マークについて}
+% ヘッダに入る章番号や章見出しは、見出しコマンドで実行されるマークコマンドで
+% 決定されます。ここでは、実行されるマークコマンドの定義を行なっています。
+% これらのマークコマンドは、\TeX{}の|\mark|機能を用いて、
+% `left'と`right'の2種類のマークを生成するように定義しています。
+%
+% \begin{flushleft}
+% |\markboth{|\meta{LEFT}|}{|\meta{RIGHT}|}|: 両方のマークに追加します。
+%
+% |\markright{|\meta{RIGHT}|}|: `右'マークに追加します。
+%
+% |\leftmark|: |\@oddhead|, |\@oddfoot|, |\@evenhead|, |\@evenfoot|マクロで
+% 使われ、現在の``左''マークを出力します。
+% |\leftmark|は\TeX{}の|\botmark|コマンドのような働きをします。
+% 初期値は空でなくてはいけません。
+%
+% |\rightmark|: |\@oddhead|, |\@oddfoot|, |\@evenhead|, |\@evenfoot|マクロで
+% 使われ、現在の``右''マークを出力します。
+% |\rightmark|は\TeX{}の|\firstmark|コマンドのような働きをします。
+% 初期値は空でなくてはいけません。
+% \end{flushleft}
+%
+% マークコマンドの動作は、左マークの`範囲内の'右マークのために
+% 合理的になっています。たとえば、左マークは|\chapter|コマンドによって
+% 変更されます。そして右マークは|\section|コマンドによって変更されます。
+% しかし、同一ページに複数の|\markboth|コマンドが現れたとき、
+% おかしな結果となることがあります。
+%
+% |\tableofcontents|のようなコマンドは、|\@mkboth|コマンドを用いて、
+% あるページスタイルの中でマークを設定しなくてはなりません。
+% |\@mkboth|は、|\ps@...|コマンドによって、|\markboth|(ヘッダを設定する)か、
+% |\@gobbletwo|(何もしない)に|\let|されます。
+%
+% \changes{v1.0a}{1995/08/30}{柱の書体がノンブルに影響するバグの修正}
+%
+% \subsection{plainページスタイル}
+%
+% \begin{macro}{\ps@plain}
+% \pstyle{jpl@in}に|\let|するために、ここで定義をします。
+% \begin{macrocode}
+\def\ps@plain{\let\@mkboth\@gobbletwo
+ \let\ps@jpl@in\ps@plain
+ \let\@oddhead\@empty
+ \def\@oddfoot{\reset@font\hfil\thepage\hfil}%
+ \let\@evenhead\@empty
+ \let\@evenfoot\@oddfoot}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{jpl@inページスタイル}
+%
+% \begin{macro}{\ps@jpl@in}
+% \changes{v1.0d}{1996/02/29}{\pstyle{jpl@in}の初期値を定義}
+%
+% \pstyle{jpl@in}スタイルは、クラスファイル内部で使用するものです。
+% \LaTeX{}では、bookクラスを\pstyle{headings}としています。
+% しかし、\cs{tableofcontents}コマンドの内部では\pstyle{plain}として
+% 設定されるため、一つの文書でのページ番号の位置が上下に出力される
+% ことになります。
+%
+% そこで、ここでは\cs{tableofcontents}や\cs{theindex}のページスタイル
+% を\pstyle{jpl@in}にし、実際に出力される形式は、ほかのページスタイル
+% で|\let|をしています。したがって、\pstyle{headings}のとき、目次ページの
+% ページ番号はヘッダ位置に出力され、\pstyle{plain}のときには、フッタ位置に
+% 出力されます。
+%
+% ここで、定義をしているのは、その初期値です。
+% \begin{macrocode}
+\let\ps@jpl@in\ps@plain
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{headnombreページスタイル}
+%
+% \begin{macro}{\ps@headnombre}
+% \pstyle{headnombre}スタイルは、ヘッダにページ番号のみを出力します。
+% \begin{macrocode}
+\def\ps@headnombre{\let\@mkboth\@gobbletwo
+ \let\ps@jpl@in\ps@headnombre
+%<yoko> \def\@evenhead{\thepage\hfil}%
+%<yoko> \def\@oddhead{\hfil\thepage}%
+%<tate> \def\@evenhead{\hfil\thepage}%
+%<tate> \def\@oddhead{\thepage\hfil}%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{footnombreページスタイル}
+%
+% \begin{macro}{\ps@footnombre}
+% \pstyle{footnombre}スタイルは、フッタにページ番号のみを出力します。
+% \begin{macrocode}
+\def\ps@footnombre{\let\@mkboth\@gobbletwo
+ \let\ps@jpl@in\ps@footnombre
+%<yoko> \def\@evenfoot{\thepage\hfil}%
+%<yoko> \def\@oddfoot{\hfil\thepage}%
+%<tate> \def\@evenfoot{\hfil\thepage}%
+%<tate> \def\@oddfoot{\thepage\hfil}%
+ \let\@oddhead\@empty\let\@evenhead\@empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{headingsスタイル}
+% \pstyle{headings}スタイルは、ヘッダに見出しとページ番号を出力します。
+%
+% \begin{macro}{\ps@headings}
+% このスタイルは、両面印刷と片面印刷とで形式が異なります。
+% \begin{macrocode}
+\if@twoside
+% \end{macrocode}
+% 横組の場合は、奇数ページが右に、偶数ページが左にきます。
+% 縦組の場合は、奇数ページが左に、偶数ページが右にきます。
+% \begin{macrocode}
+ \def\ps@headings{\let\ps@jpl@in\ps@headnombre
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+%<yoko> \def\@evenhead{\thepage\hfil\leftmark}%
+%<yoko> \def\@oddhead{{\rightmark}\hfil\thepage}%
+%<tate> \def\@evenhead{{\leftmark}\hfil\thepage}%
+%<tate> \def\@oddhead{\thepage\hfil\rightmark}%
+ \let\@mkboth\markboth
+%<*article>
+ \def\sectionmark##1{\markboth{%
+ \ifnum \c@secnumdepth >\z@ \thesection.\hskip1\zw\fi
+ ##1}{}}%
+ \def\subsectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\@ne \thesubsection.\hskip1\zw\fi
+ ##1}}%
+%</article>
+%<*report|book>
+ \def\chaptermark##1{\markboth{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \@chapapp\thechapter\@chappos\hskip1\zw
+%<book> \fi
+ \fi
+ ##1}{}}%
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\z@ \thesection.\hskip1\zw\fi
+ ##1}}%
+%</report|book>
+ }
+% \end{macrocode}
+% 片面印刷の場合:
+% \changes{v1.1g}{1997/08/25}{片面印刷のとき、sectionレベルが出力されない
+% のを修正}
+% \begin{macrocode}
+\else % if not twoside
+ \def\ps@headings{\let\ps@jpl@in\ps@headnombre
+ \let\@oddfoot\@empty
+%<yoko> \def\@oddhead{{\rightmark}\hfil\thepage}%
+%<tate> \def\@oddhead{\thepage\hfil\rightmark}%
+ \let\@mkboth\markboth
+%<*article>
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\m@ne \thesection.\hskip1\zw\fi
+ ##1}}%
+%</article>
+%<*report|book>
+\def\chaptermark##1{\markright{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \@chapapp\thechapter\@chappos\hskip1\zw
+%<book> \fi
+ \fi
+ ##1}}%
+%</report|book>
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{bothstyleスタイル}
+%
+% \begin{macro}{\ps@bothstyle}
+% \pstyle{bothstyle}スタイルは、
+% ヘッダに見出しを、フッタにページ番号を出力します。
+%
+% このスタイルは、両面印刷と片面印刷とで形式が異なります。
+% \changes{v1.0d}{1995/08/23}{横組のevenfootが中央揃えになっていたのを修正}
+% \changes{v1.0d}{1996/03/05}{横組で偶数ページと奇数ページの設定が逆なのを修正}
+% \begin{macrocode}
+\if@twoside
+ \def\ps@bothstyle{\let\ps@jpl@in\ps@footnombre
+%<*yoko>
+ \def\@evenhead{\leftmark\hfil}% right page
+ \def\@evenfoot{\thepage\hfil}% right page
+ \def\@oddhead{\hfil\rightmark}% left page
+ \def\@oddfoot{\hfil\thepage}% left page
+%</yoko>
+%<*tate>
+ \def\@evenhead{\hfil\leftmark}% right page
+ \def\@evenfoot{\hfil\thepage}% right page
+ \def\@oddhead{\rightmark\hfil}% left page
+ \def\@oddfoot{\thepage\hfil}% left page
+%</tate>
+ \let\@mkboth\markboth
+%<*article>
+ \def\sectionmark##1{\markboth{%
+ \ifnum \c@secnumdepth >\z@ \thesection.\hskip1\zw\fi
+ ##1}{}}%
+ \def\subsectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\@ne \thesubsection.\hskip1\zw\fi
+ ##1}}%
+%</article>
+%<*report|book>
+\def\chaptermark##1{\markboth{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \@chapapp\thechapter\@chappos\hskip1\zw
+%<book> \fi
+ \fi
+ ##1}{}}%
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\z@ \thesection.\hskip1\zw\fi
+ ##1}}%
+%</report|book>
+ }
+% \end{macrocode}
+% \changes{v1.1g}{1997/08/25}{片面印刷のとき、sectionレベルが出力されない
+% のを修正}
+% \changes{v1.1i}{1997/12/12}{report, bookクラスで片面印刷時に、
+% bothstyleスタイルにすると、コンパイルエラーになるのを修正}
+% \begin{macrocode}
+\else % if one column
+ \def\ps@bothstyle{\let\ps@jpl@in\ps@footnombre
+%<yoko> \def\@oddhead{\hfil\rightmark}%
+%<yoko> \def\@oddfoot{\hfil\thepage}%
+%<tate> \def\@oddhead{\rightmark\hfil}%
+%<tate> \def\@oddfoot{\thepage\hfil}%
+ \let\@mkboth\markboth
+%<*article>
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\m@ne \thesection.\hskip1\zw\fi
+ ##1}}%
+%</article>
+%<*report|book>
+ \def\chaptermark##1{\markright{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \@chapapp\thechapter\@chappos\hskip1\zw
+%<book> \fi
+ \fi
+ ##1}}%
+%</report|book>
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{myheadingスタイル}
+%
+% \begin{macro}{\ps@myheadings}
+% \changes{v1.0d}{1995/08/23}{横組モードの左右が逆であったのを修正}
+% \pstyle{myheadings}ページスタイルは簡潔に定義されています。
+% ユーザがページスタイルを設計するときのヒナ型として使用することができます。
+% \begin{macrocode}
+\def\ps@myheadings{\let\ps@jpl@in\ps@plain%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+%<yoko> \def\@evenhead{\thepage\hfil\leftmark}%
+%<yoko> \def\@oddhead{{\rightmark}\hfil\thepage}%
+%<tate> \def\@evenhead{{\leftmark}\hfil\thepage}%
+%<tate> \def\@oddhead{\thepage\hfil\rightmark}%
+ \let\@mkboth\@gobbletwo
+%<!article> \let\chaptermark\@gobble
+ \let\sectionmark\@gobble
+%<article> \let\subsectionmark\@gobble
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{文書コマンド}
+%
+% \subsection{表題}
+%
+% \begin{macro}{\title}
+% \begin{macro}{\author}
+% \begin{macro}{\date}
+% 文書のタイトル、著者、日付の情報のための、
+% これらの3つのコマンドは\file{ltsect.dtx}で提供されています。
+% これらのコマンドは次のように定義されています。
+% \begin{macrocode}
+%\newcommand*{\title}[1]{\gdef\@title{#1}}
+%\newcommand*{\author}[1]{\gdef\@author{#1}}
+%\newcommand*{\date}[1]{\gdef\@date{#1}}
+% \end{macrocode}
+% |\date|マクロのデフォルトは、今日の日付です。
+% \begin{macrocode}
+%\date{\today}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{titlepage}
+% 通常の環境では、ページの最初と最後を除き、タイトルページ環境は何もしません。
+% また、ページ番号の出力を抑制します。レポートスタイルでは、
+% ページ番号を1にリセットし、そして最後で1に戻します。
+% 互換モードでは、ページ番号はゼロに設定されますが、
+% 右起こしページ用のページパラメータでは誤った結果になります。
+% 二段組スタイルでも一段組のページが作られます。
+%
+% \noindent\emph{日本語\TeX{}開発コミュニティによる変更}:
+% 上にあるのはアスキー版の説明です。改めてアスキー版の挙動を整理すると、
+% 以下のようになります。
+% \begin{enumerate}
+% \item アスキー版では、タイトルページの番号を必ず1にリセットしていましたが、
+% これは正しくありません。これは、タイトルページが奇数ページ目か偶数ページ目
+% かにかかわらず、レイアウトだけ奇数ページ用が適用されてしまうからです。
+% さらに、タイトルの次のページも偶数のページ番号を持ってしまうため、両面印刷
+% で奇数ページと偶数ページが交互に出なくなるという問題もあります。
+% \item アスキー版bookクラスは、タイトルページを必ず|\cleardoublepage|で始めて
+% いました。p\LaTeX{}カーネルでの|\cleardoublepage|の定義から、縦組の既定では
+% タイトルが偶数ページ目に出ることになります。これ自体が正しくないと断定する
+% ことはできませんが、タイトルのページ番号を1にリセットすることと合わさって、
+% 偶数ページに送ったタイトルに奇数ページ用レイアウトが適用されてしまうという
+% 結果は正しくありません。
+% \end{enumerate}
+% そこで、コミュニティ版ではタイトルのレイアウトが必ず奇数ページ用になるという
+% 挙動を支持し、bookクラスではタイトルページを奇数ページ目に送ることにしました。
+% これでタイトルページが表紙らしく見えるようになります。また、reportクラスの
+% ようなタイトルが成り行きに従って出る場合には
+% \begin{itemize}
+% \item 奇数ページ目に出る場合、ページ番号を1(奇数)にリセット
+% \item 偶数ページ目に出る場合、ページ番号を0(偶数)にリセット
+% \end{itemize}
+% としました。
+%
+% 一つめの例を考えます。
+%\begin{verbatim}
+% \documentclass{tbook}
+% \title{タイトル}\author{著者}
+% \begin{document}
+% \maketitle
+% \chapter{チャプター}
+% \end{document}
+%\end{verbatim}
+% アスキー版tbookクラスでの結果は
+%\begin{verbatim}
+% 1ページ目:空白(ページ番号1は非表示)
+% 2ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
+% 3ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% ですが、仮に最初の空白ページさえなければ
+%\begin{verbatim}
+% 1ページ目:タイトルすなわち表紙(奇数レイアウト、ページ番号1は非表示)
+% 2ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% とみなせるため、コミュニティ版では空白ページを発生させないようにしました。
+%
+% 二つめの例を考えます。
+%\begin{verbatim}
+% \documentclass{tbook}
+% \title{タイトル}\author{著者}
+% \begin{document}
+% テスト文章
+% \maketitle
+% \chapter{チャプター}
+% \end{document}
+%\end{verbatim}
+% アスキー版tbookクラスでの結果は
+%\begin{verbatim}
+% 1ページ目:テスト文章(奇数レイアウト、ページ番号1)
+% 2ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
+% 3ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% ですが、これでは奇数と偶数のページ番号が交互になっていないので正しく
+% ありません。そこで、コミュニティ版では
+%\begin{verbatim}
+% 1ページ目:テスト文章(奇数レイアウト、ページ番号1)
+% 2ページ目:空白ページ(ページ番号2は非表示)
+% 3ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
+% 4ページ目:チャプター(偶数レイアウト、ページ番号2)
+%\end{verbatim}
+% と直しました。
+%
+% なお、p\LaTeX~2.09互換モードはアスキー版のまま、すなわち「ページ番号をゼロに
+% 設定」としてあります。これは、横組の右起こしの挙動としては誤りですが、縦組の
+% 右起こしの挙動としては一応正しくなっているといえます。
+%
+% 最初に互換モードの定義を作ります。
+% \begin{macrocode}
+\if@compatibility
+\newenvironment{titlepage}
+ {%
+%<book> \cleardoublepage
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\newpage\fi
+ \thispagestyle{empty}%
+ \setcounter{page}\z@
+ }%
+ {\if@restonecol\twocolumn\else\newpage\fi
+ }
+% \end{macrocode}
+%
+% そして、\LaTeX{}ネイティブのための定義です。
+% \changes{v1.7d}{2017/02/15}{bookクラスでtitlepageを必ず奇数ページ
+% に送るように変更}
+% \changes{v1.7d}{2017/02/15}{titlepageのページ番号を奇数ならば1に、
+% 偶数ならば0にリセットするように変更}
+% \begin{macrocode}
+\else
+\newenvironment{titlepage}
+ {%
+%<book> \pltx@cleartooddpage %% 2017/02/15
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse\newpage
+ \fi
+ \thispagestyle{empty}%
+ \ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi %% 2017/02/15
+ }%
+ {\if@restonecol\twocolumn \else \newpage \fi
+% \end{macrocode}
+% 両面モードでなければ、タイトルページの直後のページのページ番号も1に
+% します。
+% \begin{macrocode}
+ \if@twoside\else
+ \setcounter{page}\@ne
+ \fi
+ }
+\fi
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\maketitle}
+% このコマンドは、表題を作成し、出力します。
+% 表題ページを独立させるかどうかによって定義が異なります。
+% reportとbookクラスのデフォルトは独立した表題です。
+% articleクラスはオプションで独立させることができます。
+%
+% \begin{macro}{\p@thanks}
+% 縦組のときは、|\thanks|コマンドを|\p@thanks|に|\let|します。
+% このコマンドは|\footnotetext|を使わず、直接、文字を|\@thanks|に格納
+% していきます。
+%
+% 著者名の脇に表示される合印は直立した数字、注釈側は横に寝た数字となっていまし
+% たが、不自然なので|\hbox{\yoko ...}|を追加し、両方とも直立するようにしました。
+% \changes{v1.7d}{2017/02/15}{縦組クラスの所属表示の番号を直立にした}
+% \begin{macrocode}
+\def\p@thanks#1{\footnotemark
+ \protected@xdef\@thanks{\@thanks
+ \protect{\noindent\hbox{\yoko$\m@th^\thefootnote$}#1\protect\par}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\if@titlepage
+ \newcommand{\maketitle}{\begin{titlepage}%
+ \let\footnotesize\small
+ \let\footnoterule\relax
+%<tate> \let\thanks\p@thanks
+ \let\footnote\thanks
+% \end{macrocode}
+% \changes{v1.1d}{1997/02/12}{縦組クラスの表紙を縦書きにするようにした}
+% \begin{macrocode}
+%<tate> \vbox to\textheight\bgroup\tate\hsize\textwidth
+ \null\vfil
+ \vskip 60\p@
+ \begin{center}%
+ {\LARGE \@title \par}%
+ \vskip 3em%
+ {\Large
+ \lineskip .75em%
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1.5em%
+ {\large \@date \par}% % Set date in \large size.
+ \end{center}\par
+%<tate> \vfil{\centering\@thanks}\vfil\null
+%<tate> \egroup
+%<yoko> \@thanks\vfil\null
+ \end{titlepage}%
+% \end{macrocode}
+% \Lcount{footnote}カウンタをリセットし、|\thanks|と|\maketitle|コマンドを
+% 無効にし、いくつかの内部マクロを空にして格納領域を節約します。
+% \begin{macrocode}
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\p@thanks\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+% \end{macrocode}
+% タイトルが組版されたら、|\title|コマンドなどの宣言を無効にできます。
+% |\and|の定義は、|\author|の引数でのみ使用しますので、破棄します。
+% \begin{macrocode}
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ }%
+\else
+ \newcommand{\maketitle}{\par
+ \begingroup
+ \renewcommand{\thefootnote}{\fnsymbol{footnote}}%
+ \def\@makefnmark{\hbox{\unless\ifnum\ltjgetparameter{direction}=3 $\m@th^{\@thefnmark}$
+ \else\hbox{\yoko$\m@th^{\@thefnmark}$}\fi}}%
+%<*tate>
+ \long\def\@makefntext##1{\parindent 1\zw\noindent
+ \hb@xt@ 2\zw{\hss\@makefnmark}##1}%
+%</tate>
+%<*yoko>
+ \long\def\@makefntext##1{\parindent 1em\noindent
+ \hb@xt@1.8em{\hss$\m@th^{\@thefnmark}$}##1}%
+%</yoko>
+ \if@twocolumn
+ \ifnum \col@number=\@ne \@maketitle
+ \else \twocolumn[\@maketitle]%
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi
+ \thispagestyle{jpl@in}\@thanks
+% \end{macrocode}
+% ここでグループを閉じ、\Lcount{footnote}カウンタをリセットし、
+% |\thanks|, |\maketitle|, |\@maketitle|を無効にし、
+% いくつかの内部マクロを空にして格納領域を節約します。
+% \changes{v1.7}{2016/11/12}{ドキュメントに反して\cs{@maketitle}が
+% 空になっていなかったのを修正}
+% \begin{macrocode}
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@maketitle\relax
+ \global\let\p@thanks\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@maketitle}
+% 独立した表題ページを作らない場合の、表題の出力形式です。
+% \begin{macrocode}
+ \def\@maketitle{%
+ \newpage\null
+ \vskip 2em%
+ \begin{center}%
+%<yoko> \let\footnote\thanks
+%<tate> \let\footnote\p@thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em%
+ {\large
+ \lineskip .5em%
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em%
+ {\large \@date}%
+ \end{center}%
+ \par\vskip 1.5em}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{概要}
+%
+% \begin{environment}{abstract}
+% 要約文のための環境です。bookクラスでは使えません。
+% reportスタイルと、|titlepage|オプションを指定したarticleスタイルでは、
+% 独立したページに出力されます。
+% \begin{macrocode}
+%<*article|report>
+\if@titlepage
+ \newenvironment{abstract}{%
+ \titlepage
+ \null\vfil
+ \@beginparpenalty\@lowpenalty
+ \begin{center}%
+ {\bfseries\abstractname}%
+ \@endparpenalty\@M
+ \end{center}}%
+ {\par\vfil\null\endtitlepage}
+\else
+ \newenvironment{abstract}{%
+ \if@twocolumn
+ \section*{\abstractname}%
+ \else
+ \small
+ \begin{center}%
+ {\bfseries\abstractname\vspace{-.5em}\vspace{\z@}}%
+ \end{center}%
+ \quotation
+ \fi}{\if@twocolumn\else\endquotation\fi}
+\fi
+%</article|report>
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsection{章見出し}
+%
+% \subsubsection{マークコマンド}
+%
+% \begin{macro}{\chaptermark}
+% \begin{macro}{\sectionmark}
+% \begin{macro}{\subsectionmark}
+% \begin{macro}{\subsubsectionmark}
+% \begin{macro}{\paragraphmark}
+% \begin{macro}{\subparagraphmark}
+% |\...mark|コマンドを初期化します。これらのコマンドはページスタイルの
+% 定義で使われます(第\ref{sec:pagestyle}節参照)。
+% これらのたいていのコマンドは\file{ltsect.dtx}ですでに定義されています。
+% \begin{macrocode}
+%<!article>\newcommand*{\chaptermark}[1]{}
+%\newcommand*{\sectionmark}[1]{}
+%\newcommand*{\subsectionmark}[1]{}
+%\newcommand*{\subsubsectionmark}[1]{}
+%\newcommand*{\paragraphmark}[1]{}
+%\newcommand*{\subparagraphmark}[1]{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{カウンタの定義}
+%
+% \begin{macro}{\c@secnumdepth}
+% \Lcount{secnumdepth}には、番号を付ける、見出しコマンドのレベルを設定します。
+% \begin{macrocode}
+%<article>\setcounter{secnumdepth}{3}
+%<!article>\setcounter{secnumdepth}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@chapter}
+% \begin{macro}{\c@section}
+% \begin{macro}{\c@subsection}
+% \begin{macro}{\c@subsubsection}
+% \begin{macro}{\c@paragraph}
+% \begin{macro}{\c@subparagraph}
+% これらのカウンタは見出し番号に使われます。
+% 最初の引数は、二番目の引数が増加するたびにリセットされます。
+% 二番目のカウンタはすでに定義されているものでなくてはいけません。
+% \begin{macrocode}
+\newcounter{part}
+%<*book|report>
+\newcounter{chapter}
+\newcounter{section}[chapter]
+%</book|report>
+%<article>\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thepart}
+% \begin{macro}{\thechapter}
+% \begin{macro}{\thesection}
+% \begin{macro}{\thesubsection}
+% \begin{macro}{\thesubsubsection}
+% \begin{macro}{\theparagraph}
+% \begin{macro}{\thesubparagraph}
+% |\theCTR|が実際に出力される形式の定義です。
+%
+% |\arabic{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% 算用数字で出力します。
+%
+% |\roman{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% 小文字のローマ数字で出力します。
+%
+% |\Roman{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% 大文字のローマ数字で出力します。
+%
+% |\alph{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% $1=$~a, $2=$~b のようにして出力します。
+%
+% |\Alph{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% $1=$~A, $2=$~B のようにして出力します。
+%
+% |\Kanji{|\Lcount{COUNTER}|}|は、\Lcount{COUNTER}の値を
+% 漢数字で出力します。
+%
+% |\rensuji{|\meta{obj}|}|は、\meta{obj}を横に並べて出力します。
+% したがって、横組のときには、何も影響しません。
+%
+% \begin{macrocode}
+%<*tate>
+\renewcommand{\thepart}{\rensuji{\@Roman\c@part}}
+%<article>\renewcommand{\thesection}{\rensuji{\@arabic\c@section}}
+%<*report|book>
+\renewcommand{\thechapter}{\rensuji{\@arabic\c@chapter}}
+\renewcommand{\thesection}{\thechapter・\rensuji{\@arabic\c@section}}
+%</report|book>
+\renewcommand{\thesubsection}{\thesection・\rensuji{\@arabic\c@subsection}}
+\renewcommand{\thesubsubsection}{%
+ \thesubsection・\rensuji{\@arabic\c@subsubsection}}
+\renewcommand{\theparagraph}{%
+ \thesubsubsection・\rensuji{\@arabic\c@paragraph}}
+\renewcommand{\thesubparagraph}{%
+ \theparagraph・\rensuji{\@arabic\c@subparagraph}}
+%</tate>
+%<*yoko>
+\renewcommand{\thepart}{\@Roman\c@part}
+%<article>\renewcommand{\thesection}{\@arabic\c@section}
+%<*report|book>
+\renewcommand{\thechapter}{\@arabic\c@chapter}
+\renewcommand{\thesection}{\thechapter.\@arabic\c@section}
+%</report|book>
+\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}
+\renewcommand{\thesubsubsection}{%
+ \thesubsection.\@arabic\c@subsubsection}
+\renewcommand{\theparagraph}{%
+ \thesubsubsection.\@arabic\c@paragraph}
+\renewcommand{\thesubparagraph}{%
+ \theparagraph.\@arabic\c@subparagraph}
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@chapapp}
+% \begin{macro}{\@chappos}
+% |\@chapapp|の初期値は`|\prechaptername|'です。
+%
+% |\@chappos|の初期値は`|\postchaptername|'です。
+%
+% |\appendix|コマンドは|\@chapapp|を`|\appendixname|'に、
+% |\@chappos|を空に再定義します。
+% \begin{macrocode}
+%<*report|book>
+\newcommand{\@chapapp}{\prechaptername}
+\newcommand{\@chappos}{\postchaptername}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{前付け、本文、後付け}
+%
+% \begin{macro}{\frontmatter}
+% \begin{macro}{\mainmatter}
+% \begin{macro}{\backmatter}
+% \changes{v1.1}{1997/01/15}{\cs{frontmatter}, \cs{mainmatter}, \cs{backmatter}
+% を\LaTeX{}の定義に修正}
+% 一冊の本は論理的に3つに分割されます。
+% 表題や目次や「はじめに」あるいは権利などの前付け、
+% そして本文、それから用語集や索引や奥付けなどの後付けです。
+%
+% \emph{日本語\TeX{}開発コミュニティによる補足}:
+% \LaTeX{}のclasses.dtxは、1996/05/26 (v1.3r)と1998/05/05 (v1.3y)の
+% 計2回、|\frontmatter|と|\mainmatter|の定義を修正しています。一回目は
+% これらの命令を|openany|オプションに応じて切り替え、二回目はそれを
+% 元に戻しています。アスキーによるjclasses.dtxは、1997/01/15に
+% 一回目の修正に追随しましたが、二回目の修正には追随していません。
+% コミュニティ版では、一旦はアスキーによる仕様を維持しようと考え
+% ました(2016/11/22)が、以下の理由により二回目の修正にも追随する
+% ことにしました(2017/03/05)。
+%
+% アスキー版での|\frontmatter|と|\mainmatter|の改ページ挙動は
+%\begin{quote}
+% |openright|なら|\cleardoublepage|、|openany|なら|\clearpage|を実行
+%\end{quote}
+% というものでした。しかし、|\frontmatter|及び|\mainmatter|はノンブルを
+% 1にリセットしますから、改ページの結果が偶数ページ目になる場合
+% \footnote{縦tbookのデフォルト(openright)が該当するほか、横jbookと
+% 縦tbookのopenanyのときには成り行き次第で該当する可能性があります。}に
+% ノンブルが偶奇逆転してしまいました。このままでは|openany|の場合に両面
+% 印刷がうまくいかないため、新しいコミュニティ版では
+%\begin{quote}
+% 必ず|\pltx@cleartooddpage|を実行
+%\end{quote}
+% としました。これは両面印刷(twoside)の場合は奇数ページに送り、
+% 片面印刷(oneside)の場合は単に改ページとなります。(参考:latex/2754)
+% \changes{v1.7b}{2016/11/22}{補足ドキュメントを追加}
+% \changes{v1.7e}{2017/03/05}{\cs{frontmatter}と\cs{mainmatter}を
+% 奇数ページに送るように変更}
+% \begin{macrocode}
+%<*book>
+\newcommand{\frontmatter}{%
+ \pltx@cleartooddpage
+ \@mainmatterfalse\pagenumbering{roman}}
+\newcommand{\mainmatter}{%
+ \pltx@cleartooddpage
+ \@mainmattertrue\pagenumbering{arabic}}
+\newcommand{\backmatter}{%
+ \if@openleft \cleardoublepage \else
+ \if@openright \cleardoublepage \else \clearpage \fi \fi
+ \@mainmatterfalse}
+%</book>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{ボックスの組み立て}
+% クラスファイル定義の、この部分では、|\@startsection|と|\secdef|の
+% 二つの内部マクロを使います。これらの構文を次に示します。
+%
+% |\@startsection|マクロは6つの引数と1つのオプション引数`*'を取ります。
+%
+% |\@startsection|\meta{name}\meta{level}\meta{indent}^^A
+% \meta{beforeskip}\meta{afterskip}\meta{style}
+% optional *\\
+% \null\hphantom{\bslash @startsection}^^A
+% |[|\meta{altheading}|]|\meta{heading}
+%
+% それぞれの引数の意味は、次のとおりです。
+%
+% \begin{description}
+% \item[\meta{name}] レベルコマンドの名前です(例:section)。
+% \item[\meta{level}] 見出しの深さを示す数値です(chapter=1, section=2,
+% $\ldots$)。``\meta{level}$<=$カウンタ\Lcount{secnumdepth}の値''のとき、
+% 見出し番号が出力されます。
+% \item[\meta{indent}] 見出しに対する、左マージンからのインデント量です。
+% \item[\meta{beforeskip}] 見出しの上に置かれる空白の絶対値です。
+% 負の場合は、見出しに続くテキストのインデントを抑制します。
+% \item[\meta{afterskip}] 正のとき、見出しの後の垂直方向のスペースとなります。
+% 負の場合は、見出しの後の水平方向のスペースとなります。
+% \item[\meta{style}] 見出しのスタイルを設定するコマンドです。
+% \item[\meta{$*$}] 見出し番号を付けないとき、対応するカウンタは増加します。
+% \item[\meta{heading}] 新しい見出しの文字列です。
+% \end{description}
+%
+% 見出しコマンドは通常、|\@startsection|と6つの引数で定義されています。
+%
+% |\secdef|マクロは、
+% 見出しコマンドを|\@startsection|を用いないで定義するときに使います。
+% このマクロは、2つの引数を持ちます。
+%
+% |\secdef|\meta{unstarcmds}\meta{starcmds}
+%
+% \begin{description}
+% \item[\meta{unstarcmds}] 見出しコマンドの普通の形式で使われます。
+% \item[\meta{starcmds}] $*$形式の見出しコマンドで使われます。
+% \end{description}
+%
+% |\secdef|は次のようにして使うことができます。
+%\begin{verbatim}
+% \def\chapter {... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{....} % \chapter[...]{...} の定義
+% \def\CMDB #1{....} % \chapter*{...} の定義
+%\end{verbatim}
+%
+%
+% \subsubsection{partレベル}
+%
+% \begin{macro}{\part}
+% このコマンドは、新しいパート(部)をはじめます。
+%
+% articleクラスの場合は、簡単です。
+%
+% 新しい段落を開始し、小さな空白を入れ、段落後のインデントを行い、
+% |\secdef|で作成します。(アスキーによる元のドキュメントには
+% 「段落後のインデントをしないようにし」と書かれていましたが、
+% 実際のコードでは段落後のインデントを行っていました。そこで
+% 日本語\TeX{}開発コミュニティは、ドキュメントをコードに合わせて
+% 「段落後のインデントを行い」へと修正しました。)
+% \changes{v1.7a}{2016/11/16}{Check \texttt{@noskipsec} switch and
+% possibly force horizontal mode (sync with classes.dtx v1.4a)}
+% \begin{macrocode}
+%<*article>
+\newcommand{\part}{%
+ \if@noskipsec \leavevmode \fi
+ \par\addvspace{4ex}%
+ \@afterindenttrue
+ \secdef\@part\@spart}
+%</article>
+% \end{macrocode}
+% reportとbookスタイルの場合は、少し複雑です。
+%
+% まず、右ページからはじまるように改ページをします。
+% そして、部扉のページスタイルを\pstyle{empty}にします。
+% 2段組の場合でも、1段組で作成しますが、後ほど2段組に戻すために、
+% |\@restonecol|スイッチを使います。
+% \changes{v1.1}{1997/01/15}{\cs{part}を\LaTeX\ の定義に修正}
+% \begin{macrocode}
+%<*report|book>
+\newcommand{\part}{%
+ \if@openleft \cleardoublepage \else
+ \if@openright \cleardoublepage \else \clearpage \fi \fi
+ \thispagestyle{empty}%
+ \if@twocolumn\onecolumn\@tempswatrue\else\@tempswafalse\fi
+ \null\vfil
+ \secdef\@part\@spart}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@part}
+% このマクロが実際に部レベルの見出しを作成します。
+% このマクロも文書クラスによって定義が異なります。
+%
+% articleクラスの場合は、\Lcount{secnumdepth}が$-1$よりも大きいとき、
+% 見出し番号を付けます。このカウンタが$-1$以下の場合には付けません。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+%<*article>
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{%
+ \prepartname\thepart\postpartname\hspace{1\zw}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\parindent\z@\raggedright
+ \interlinepenalty\@M\normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \Large\bfseries\prepartname\thepart\postpartname
+ \par\nobreak
+ \fi
+ \huge\bfseries#2\par}%
+ \nobreak\vskip3ex\@afterheading}
+%</article>
+% \end{macrocode}
+%
+% reportとbookクラスの場合は、\Lcount{secnumdepth}が$-2$よりも大きいときに、
+% 見出し番号を付けます。$-2$以下では付けません。
+%
+% \begin{macrocode}
+%<*report|book>
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{%
+ \prepartname\thepart\postpartname\hspace{1em}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\centering
+ \interlinepenalty\@M\normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \huge\bfseries\prepartname\thepart\postpartname
+ \par\vskip20\p@
+ \fi
+ \Huge\bfseries#2\par}%
+ \@endpart}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@spart}
+% このマクロは、番号を付けないときの体裁です。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+%<*article>
+\def\@spart#1{{%
+ \parindent\z@\raggedright
+ \interlinepenalty\@M\normalfont
+ \huge\bfseries#1\par}%
+ \nobreak\vskip3ex\@afterheading}
+%</article>
+% \end{macrocode}
+% \changes{v1.1k}{1998/03/23}{reportとbookクラスで番号を付けない見出しの
+% ペナルティが\cs{M@}だったのを\cs{@M}に修正}
+% \begin{macrocode}
+%<*report|book>
+\def\@spart#1{{%
+ \centering
+ \interlinepenalty\@M\normalfont
+ \Huge\bfseries#1\par}%
+ \@endpart}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endpart}
+% |\@part|と|\@spart|の最後で実行されるマクロです。
+% 両面印刷モードのときは、白ページを追加します。
+% 二段組モードのときには、これ以降のページを二段組に戻します。
+% 2016年12月から、|openany| のときに白ページを追加するのをやめました。
+% このバグは\LaTeX{}ではclasses.dtx v1.4b (2000/05/19)で修正されていました。
+% (参考:latex/3155、texjporg/jsclasses\#48)
+% \changes{v1.7c}{2016/12/18}{Only add empty page after part if
+% twoside and openright (sync with classes.dtx v1.4b)}
+% \begin{macrocode}
+%<*report|book>
+\def\@endpart{\vfil\newpage
+ \if@twoside
+ \if@openleft %% \if@openleft added (2017/02/15)
+ \null\thispagestyle{empty}\newpage
+ \else\if@openright %% \if@openright added (2016/12/18)
+ \null\thispagestyle{empty}\newpage
+ \fi\fi %% added (2016/12/18, 2017/02/15)
+ \fi
+% \end{macrocode}
+% 二段組文書のとき、スイッチを二段組モードに戻す必要があります。
+% \begin{macrocode}
+ \if@tempswa\twocolumn\fi}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{chapterレベル}
+%
+% \begin{macro}{chapter}
+% 章レベルは、必ずページの先頭から開始します。
+% |openright|オプションが指定されている場合は、右ページからはじまる
+% ように|\cleardoublepage|を呼び出します。
+% そうでなければ、|\clearpage|を呼び出します。
+% なお、縦組の場合でも右ページからはじまるように、
+% フォーマットファイルで|\clerdoublepage|が定義されています。
+%
+% \emph{日本語\TeX{}開発コミュニティによる補足}:コミュニティ版の実装では、
+% |openright|と|openleft|の場合に|\cleardoublepage|をクラスファイルの中で
+% 再々定義しています。\ref{sec:cleardoublepage}を参照してください。
+%
+% 章見出しが出力されるページのスタイルは、\pstyle{jpl@in}になります。
+% \pstyle{jpl@in}は、\pstyle{headnomble}か\pstyle{footnomble}のいずれかです。
+% 詳細は、第\ref{sec:pagestyle}節を参照してください。
+%
+% また、|\@topnum|をゼロにして、
+% 章見出しの上にトップフロートが置かれないようにしています。
+% \begin{macrocode}
+%<*report|book>
+\newcommand{\chapter}{%
+ \if@openleft \cleardoublepage \else
+ \if@openright \cleardoublepage \else \clearpage \fi \fi
+ \thispagestyle{jpl@in}%
+ \global\@topnum\z@
+ \@afterindenttrue
+ \secdef\@chapter\@schapter}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@chapter}
+% このマクロは、章見出しに番号を付けるときに呼び出されます。
+% \Lcount{secnumdepth}が$-1$よりも大きく、
+% |\@mainmatter|が真(bookクラスの場合)のときに、番号を出力します。
+%
+% \emph{日本語\TeX{}開発コミュニティによる補足}:本家\LaTeX{}の
+% \file{classes}では、二段組のときチャプタータイトルは一段組に戻され
+% ますが、アスキーによる\file{jclasses}では二段組のままにされています。
+% したがって、チャプタータイトルより高い位置に右カラムの始点が来るという
+% 挙動になっていますが、コミュニティ版でもアスキー版の挙動を維持しています。
+% \begin{macrocode}
+\def\@chapter[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\space\thechapter\space\@chappos}%
+ \addcontentsline{toc}{chapter}%
+ {\protect\numberline{\@chapapp\thechapter\@chappos}#1}%
+%<book> \else\addcontentsline{toc}{chapter}{#1}\fi
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\p@}}%
+ \addtocontents{lot}{\protect\addvspace{10\p@}}%
+ \@makechapterhead{#2}\@afterheading}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makechapterhead}
+% このマクロが実際に章見出しを組み立てます。
+% \changes{v1.1o}{1998/12/24}{secnumdepthカウンタを$-1$以下にすると、
+% 見出し文字列も消えてしまうのを修正}
+% \changes{v1.2}{2001/09/04}{\cs{chapter}の出力位置がアスタリスク形式と
+% そうでないときと違うのを修正(ありがとう、鈴木@津さん)}
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\def\@makechapterhead#1{\hbox{}%
+ \vskip2\Cvs
+ {\parindent\z@
+ \raggedright
+ \normalfont\huge\bfseries
+ \leavevmode
+ \ifnum \c@secnumdepth >\m@ne
+ \setlength\@tempdima{\linewidth}%
+%<book> \if@mainmatter
+ \setbox\z@\hbox{\@chapapp\thechapter\@chappos\hskip1\zw}%
+ \addtolength\@tempdima{-\wd\z@}%
+ \unhbox\z@\nobreak
+%<book> \fi
+ \vtop{\hsize\@tempdima#1}%
+ \else
+ #1\relax
+ \fi}\nobreak\vskip3\Cvs}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@schapter}
+% このマクロは、章見出しに番号を付けないときに呼び出されます。
+%
+% \emph{日本語\TeX{}開発コミュニティによる補足}:やはり二段組でチャプター
+% タイトルより高い位置に右カラムの始点が来るという挙動を維持してあります。
+% \changes{v1.7c}{2016/12/18}{奇妙なarticleガードとコードを削除して
+% ドキュメントを追加}
+% \begin{macrocode}
+\def\@schapter#1{%
+ \@makeschapterhead{#1}\@afterheading
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makeschapterhead}
+% 番号を付けない場合の形式です。
+% \changes{v1.2}{2001/09/04}{\cs{chapter}の出力位置がアスタリスク形式と
+% そうでないときと違うのを修正(ありがとう、鈴木@津さん)}
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\def\@makeschapterhead#1{\hbox{}%
+ \vskip2\Cvs
+ {\parindent\z@
+ \raggedright
+ \normalfont\huge\bfseries
+ \leavevmode
+ \setlength\@tempdima{\linewidth}%
+ \vtop{\hsize\@tempdima#1}}\vskip3\Cvs}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{下位レベルの見出し}
+%
+% \begin{macro}{\section}
+% 見出しの前後に空白を付け、|\Large\bfseries|で出力をします。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\newcommand{\section}{\@startsection{section}{1}{\z@}%
+ {1.5\Cvs \@plus.5\Cvs \@minus.2\Cvs}%
+ {.5\Cvs \@plus.3\Cvs}%
+ {\normalfont\Large\bfseries}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subsection}
+% 見出しの前後に空白を付け、|\large\bfseries|で出力をします。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {1.5\Cvs \@plus.5\Cvs \@minus.2\Cvs}%
+ {.5\Cvs \@plus.3\Cvs}%
+ {\normalfont\large\bfseries}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subsubsection}
+% 見出しの前後に空白を付け、|\normalsize\bfseries|で出力をします。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
+ {1.5\Cvs \@plus.5\Cvs \@minus.2\Cvs}%
+ {.5\Cvs \@plus.3\Cvs}%
+ {\normalfont\normalsize\bfseries}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\paragraph}
+% 見出しの前に空白を付け、|\normalsize\bfseries|で出力をします。
+% 見出しの後ろで改行されません。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
+ {3.25ex \@plus 1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\subparagraph}
+% 見出しの前に空白を付け、|\normalsize\bfseries|で出力をします。
+% 見出しの後ろで改行されません。
+% \changes{v1.7a}{2016/11/16}{replace \cs{reset@font} with
+% \cs{normalfont} (sync with classes.dtx v1.3c)}
+% \begin{macrocode}
+\newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}%
+ {3.25ex \@plus 1ex \@minus .2ex}%
+ {-1em}%
+ {\normalfont\normalsize\bfseries}}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{付録}
+%
+% \begin{macro}{\appendix}
+% articleクラスの場合、|\appendix|コマンドは次のことを行ないます。
+%
+% \begin{itemize}
+% \item \Lcount{section}と\Lcount{subsection}カウンタをリセットする。
+% \item |\thesection|を英小文字で出力するように再定義する。
+% \end{itemize}
+%
+% \begin{macrocode}
+%<*article>
+\newcommand{\appendix}{\par
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+%<tate> \renewcommand{\thesection}{\rensuji{\@Alph\c@section}}}
+%<yoko> \renewcommand{\thesection}{\@Alph\c@section}}
+%</article>
+% \end{macrocode}
+%
+% reportとbookクラスの場合、|\appendix|コマンドは次のことを行ないます。
+%
+% \begin{itemize}
+% \item \Lcount{chapter}と\Lcount{section}カウンタをリセットする。
+% \item |\@chapapp|を|\appendixname|に設定する。
+% \item |\@chappos|を空にする。
+% \item |\thechapter|を英小文字で出力するように再定義する。
+% \end{itemize}
+%
+% \begin{macrocode}
+%<*report|book>
+\newcommand{\appendix}{\par
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \renewcommand{\@chapapp}{\appendixname}%
+ \renewcommand{\@chappos}\space%
+%<tate> \renewcommand{\thechapter}{\rensuji{\@Alph\c@chapter}}}
+%<yoko> \renewcommand{\thechapter}{\@Alph\c@chapter}}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{リスト環境}
+% ここではリスト環境について説明をしています。
+%
+% リスト環境のデフォルトは次のように設定されます。
+%
+% まず、|\rigtmargin|, |\listparindent|, |\itemindent|をゼロにします。
+% そして、K番目のレベルのリストは|\@listK|で示されるマクロが呼び出されます。
+% ここで`K'は小文字のローマ数字で示されます。たとえば、3番目のレベルのリスト
+% として|\@listiii|が呼び出されます。
+% |\@listK|は|\leftmargin|を|\leftmarginK|に設定します。
+%
+% \begin{macro}{\leftmargin}
+% \begin{macro}{\leftmargini}
+% \begin{macro}{\leftmarginii}
+% \begin{macro}{\leftmarginiii}
+% \begin{macro}{\leftmarginiv}
+% \begin{macro}{\leftmarginv}
+% \begin{macro}{\leftmarginvi}
+% 二段組モードのマージンは少しだけ小さく設定してあります。
+% \begin{macrocode}
+\if@twocolumn
+ \setlength\leftmargini {2em}
+\else
+ \setlength\leftmargini {2.5em}
+\fi
+% \end{macrocode}
+% 次の3つの値は、|\labelsep|とデフォルトラベル(`(m)', `vii.', `M.')の
+% 幅の合計よりも大きくしてあります。
+% \begin{macrocode}
+\setlength\leftmarginii {2.2em}
+\setlength\leftmarginiii {1.87em}
+\setlength\leftmarginiv {1.7em}
+\if@twocolumn
+ \setlength\leftmarginv {.5em}
+ \setlength\leftmarginvi{.5em}
+\else
+ \setlength\leftmarginv {1em}
+ \setlength\leftmarginvi{1em}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelsep}
+% \begin{macro}{\labelwidth}
+% |\labelsep|はラベルとテキストの項目の間の距離です。
+% |\labelwidth|はラベルの幅です。
+% \begin{macrocode}
+\setlength \labelsep {.5em}
+\setlength \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@beginparpenalty}
+% \begin{macro}{\@endparpenalty}
+% これらのペナルティは、リストや段落環境の前後に挿入されます。
+% \begin{macro}{\@itempenalty}
+% このペナルティは、リスト項目の間に挿入されます。
+% \begin{macrocode}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+%</article|report|book>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\partopsep}
+% リスト環境の前に空行がある場合、|\parskip|と|\topsep|に|\partopsep|が
+% 加えられた値の縦方向の空白が取られます。
+% \begin{macrocode}
+%<10pt>\setlength\partopsep{2\p@ \@plus 1\p@ \@minus 1\p@}
+%<11pt>\setlength\partopsep{3\p@ \@plus 1\p@ \@minus 1\p@}
+%<12pt>\setlength\partopsep{3\p@ \@plus 2\p@ \@minus 2\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@listi}
+% \begin{macro}{\@listI}
+% |\@listi|は、|\leftmargin|, |\parsep|, |\topsep|, |\itemsep|などの
+% トップレベルの定義をします。
+% この定義は、フォントサイズコマンドによって変更されます(たとえば、
+% |\small|の中では``小さい''リストパラメータになります)。
+%
+% このため、|\normalsize|がすべてのパラメータを戻せるように、
+% |\@listI|は|\@listi|のコピーを保存するように定義されています。
+% \begin{macrocode}
+%<*10pt|11pt|12pt>
+\def\@listi{\leftmargin\leftmargini
+%<*10pt>
+ \parsep 4\p@ \@plus2\p@ \@minus\p@
+ \topsep 8\p@ \@plus2\p@ \@minus4\p@
+ \itemsep4\p@ \@plus2\p@ \@minus\p@}
+%</10pt>
+%<*11pt>
+ \parsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \topsep 9\p@ \@plus3\p@ \@minus5\p@
+ \itemsep4.5\p@ \@plus2\p@ \@minus\p@}
+%</11pt>
+%<*12pt>
+ \parsep 5\p@ \@plus2.5\p@ \@minus\p@
+ \topsep 10\p@ \@plus4\p@ \@minus6\p@
+ \itemsep5\p@ \@plus2.5\p@ \@minus\p@}
+%</12pt>
+\let\@listI\@listi
+% \end{macrocode}
+% ここで、パラメータを初期化しますが、厳密には必要ありません。
+% \begin{macrocode}
+\@listi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listii}
+% \begin{macro}{\@listiii}
+% \begin{macro}{\@listiv}
+% \begin{macro}{\@listv}
+% \begin{macro}{\@listvi}
+% 下位レベルのリスト環境のパラメータの設定です。
+% これらは保存用のバージョンを持たないことと、
+% フォントサイズコマンドによって変更されないことに注意をしてください。
+% 言い換えれば、このクラスは、本文サイズが
+% |\normalsize|で現れるリストの入れ子についてだけ考えています。
+% \begin{macrocode}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii \advance\labelwidth-\labelsep
+%<*10pt>
+ \topsep 4\p@ \@plus2\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+%</10pt>
+%<*11pt>
+ \topsep 4.5\p@ \@plus2\p@ \@minus\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+%</11pt>
+%<*12pt>
+ \topsep 5\p@ \@plus2.5\p@ \@minus\p@
+ \parsep 2.5\p@ \@plus\p@ \@minus\p@
+%</12pt>
+ \itemsep\parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii \advance\labelwidth-\labelsep
+%<10pt> \topsep 2\p@ \@plus\p@\@minus\p@
+%<11pt> \topsep 2\p@ \@plus\p@\@minus\p@
+%<12pt> \topsep 2.5\p@\@plus\p@\@minus\p@
+ \parsep\z@
+ \partopsep \p@ \@plus\z@ \@minus\p@
+ \itemsep\topsep}
+\def\@listiv {\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep}
+\def\@listv {\leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep}
+\def\@listvi {\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep}
+%</10pt|11pt|12pt>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{enumerate環境}
+% enumerate環境は、カウンタ\Lcount{enumi}, \Lcount{enumii}, \Lcount{enumiii},
+% \Lcount{enumiv}を使います。\Lcount{enumN}はN番目のレベルの番号を制御します。
+%
+% \begin{macro}{\theenumi}
+% \begin{macro}{\theenumii}
+% \begin{macro}{\theenumiii}
+% \begin{macro}{\theenumiv}
+% 出力する番号の書式を設定します。
+% これらは、すでに\file{ltlists.dtx}で定義されています。
+% \begin{macrocode}
+%<*article|report|book>
+%<*tate>
+\renewcommand{\theenumi}{\rensuji{\@arabic\c@enumi}}
+\renewcommand{\theenumii}{\rensuji{(\@alph\c@enumii)}}
+\renewcommand{\theenumiii}{\rensuji{\@roman\c@enumiii}}
+\renewcommand{\theenumiv}{\rensuji{\@Alph\c@enumiv}}
+%</tate>
+%<*yoko>
+\renewcommand{\theenumi}{\@arabic\c@enumi}
+\renewcommand{\theenumii}{\@alph\c@enumii}
+\renewcommand{\theenumiii}{\@roman\c@enumiii}
+\renewcommand{\theenumiv}{\@Alph\c@enumiv}
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelenumi}
+% \begin{macro}{\labelenumii}
+% \begin{macro}{\labelenumiii}
+% \begin{macro}{\labelenumiv}
+% enumerate環境のそれぞれの項目のラベルは、
+% |\labelenumi| \ldots\ |\labelenumiv|で生成されます。
+% \begin{macrocode}
+%<*tate>
+\newcommand{\labelenumi}{\theenumi}
+\newcommand{\labelenumii}{\theenumii}
+\newcommand{\labelenumiii}{\theenumiii}
+\newcommand{\labelenumiv}{\theenumiv}
+%</tate>
+%<*yoko>
+\newcommand{\labelenumi}{\theenumi.}
+\newcommand{\labelenumii}{(\theenumii)}
+\newcommand{\labelenumiii}{\theenumiii.}
+\newcommand{\labelenumiv}{\theenumiv.}
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@enumii}
+% \begin{macro}{\p@enumiii}
+% \begin{macro}{\p@enumiv}
+% |\ref|コマンドによって、
+% enumerate環境のN番目のリスト項目が参照されるときの書式です。
+% \begin{macrocode}
+\renewcommand{\p@enumii}{\theenumi}
+\renewcommand{\p@enumiii}{\theenumi(\theenumii)}
+\renewcommand{\p@enumiv}{\p@enumiii\theenumiii}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{enumerate}
+% \changes{v1.1q}{1999/05/18}{縦組時のみに設定するようにした}
+% トップレベルで使われたときに、最初と最後に半行分のスペースを開けるように、
+% 変更します。この環境は、\file{ltlists.dtx}で定義されています。
+% \changes{v1.7a}{2016/11/16}{Use \cs{expandafter}
+% (sync with ltlists.dtx v1.0j)}
+%
+% \begin{macrocode}
+\renewenvironment{enumerate}
+ {\ifnum \@enumdepth >\thr@@\@toodeep\else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \expandafter \list \csname label\@enumctr\endcsname{%
+ \ifnum\ltjgetparameter{direction}=3
+ \ifnum \@listdepth=\@ne \topsep.5\normalbaselineskip
+ \else\topsep\z@\fi
+ \parskip\z@ \itemsep\z@ \parsep\z@
+ \labelwidth1\zw \labelsep.3\zw
+ \ifnum \@enumdepth=\@ne \leftmargin1\zw\relax
+ \else\leftmargin\leftskip\fi
+ \advance\leftmargin 1\zw
+ \fi
+ \usecounter{\@enumctr}%
+ \def\makelabel##1{\hss\llap{##1}}}%
+ \fi}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsubsection{itemize環境}
+%
+% \begin{macro}{\labelitemi}
+% \begin{macro}{\labelitemii}
+% \begin{macro}{\labelitemiii}
+% \begin{macro}{\labelitemiv}
+% itemize環境のそれぞれの項目のラベルは、
+% |\labelenumi| \ldots\ |\labelenumiv|で生成されます。
+% \changes{v1.1a}{1997/01/28}{Bug fix: \cs{labelitemii}.}
+% \begin{macrocode}
+\newcommand{\labelitemi}{\textbullet}
+\newcommand{\labelitemii}{%
+ \ifnum\ltjgetparameter{direction}=3
+ {\textcircled{~}}
+ \else
+ {\normalfont\bfseries\textendash}
+ \fi
+}
+\newcommand{\labelitemiii}{\textasteriskcentered}
+\newcommand{\labelitemiv}{\textperiodcentered}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{itemize}
+% \changes{v1.0e}{1996/03/14}{縦組時のみに設定するようにした}
+% トップレベルで使われたときに、最初と最後に半行分のスペースを開けるように、
+% 変更します。この環境は、\file{ltlists.dtx}で定義されています。
+% \changes{v1.7a}{2016/11/16}{Use \cs{expandafter}
+% (sync with ltlists.dtx v1.0j)}
+% \begin{macrocode}
+\renewenvironment{itemize}
+ {\ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter \list \csname \@itemitem\endcsname{%
+ \ifnum\ltjgetparameter{direction}=3
+ \ifnum \@listdepth=\@ne \topsep.5\normalbaselineskip
+ \else\topsep\z@\fi
+ \parskip\z@ \itemsep\z@ \parsep\z@
+ \labelwidth1\zw \labelsep.3\zw
+ \ifnum \@itemdepth =\@ne \leftmargin1\zw\relax
+ \else\leftmargin\leftskip\fi
+ \advance\leftmargin 1\zw
+ \fi
+ \def\makelabel##1{\hss\llap{##1}}}%
+ \fi}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+%
+% \subsubsection{description環境}
+%
+% \begin{environment}{description}
+% \changes{v1.0e}{1996/03/14}{\cs{topskip}や\cs{parkip}などの値を縦組時のみに
+% 設定するようにした}
+% description環境を定義します。
+% 縦組時には、インデントが3字分だけ深くなります。
+% \begin{macrocode}
+\newenvironment{description}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \ifnum\ltjgetparameter{direction}=3
+ \leftmargin\leftskip \advance\leftmargin3\Cwd
+ \rightmargin\rightskip
+ \labelsep=1\zw \itemsep\z@
+ \listparindent\z@ \topskip\z@ \parskip\z@ \partopsep\z@
+ \fi
+ \let\makelabel\descriptionlabel}}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\descriptionlabel}
+% ラベルの形式を変更する必要がある場合は、|\descriptionlabel|を
+% 再定義してください。
+% \begin{macrocode}
+\newcommand{\descriptionlabel}[1]{%
+ \hspace\labelsep\normalfont\bfseries #1}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{verse環境}
+%
+% \begin{environment}{verse}
+% verse環境は、リスト環境のパラメータを使って定義されています。
+% 改行をするには|\\|を用います。|\\|は|\@centercr|に|\let|されています。
+% \begin{macrocode}
+\newenvironment{verse}
+ {\let\\\@centercr
+ \list{}{\itemsep\z@ \itemindent -1.5em%
+ \listparindent\itemindent
+ \rightmargin\leftmargin \advance\leftmargin 1.5em}%
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsubsection{quotation環境}
+%
+% \begin{environment}{quotation}
+% quotation環境もまた、list環境のパラメータを使用して定義されています。
+% この環境の各行は、|\textwidth|よりも小さく設定されています。
+% この環境における、段落の最初の行はインデントされます。
+% \begin{macrocode}
+\newenvironment{quotation}
+ {\list{}{\listparindent 1.5em%
+ \itemindent\listparindent
+ \rightmargin\leftmargin
+ \parsep\z@ \@plus\p@}%
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \subsubsection{quote環境}
+%
+% \begin{environment}{quote}
+% quote環境は、段落がインデントされないことを除き、quotation環境と同じです。
+% \begin{macrocode}
+\newenvironment{quote}
+ {\list{}{\rightmargin\leftmargin}%
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% \subsection{フロート}
+%
+% \file{ltfloat.dtx}では、フロートオブジェクトを操作するためのツールしか
+% 定義していません。タイプが\texttt{TYPE}のフロートオブジェクトを
+% 扱うマクロを定義するには、次の変数が必要です。
+%
+% \begin{description}
+% \item[\texttt{\bslash fps@TYPE}]
+% タイプ\texttt{TYPE}のフロートを置くデフォルトの位置です。
+%
+% \item[\texttt{\bslash ftype@TYPE}]
+% タイプ\texttt{TYPE}のフロートの番号です。
+% 各\texttt{TYPE}には、一意な、2の倍数の\texttt{TYPE}番号を割り当てます。
+% たとえば、図が番号1ならば、表は2です。次のタイプは4となります。
+%
+% \item[\texttt{\bslash ext@TYPE}]
+% タイプ\texttt{TYPE}のフロートの目次を出力するファイルの拡張子です。
+% たとえば、|\ext@figure|は`lot'です。
+%
+% \item[\texttt{\bslash fnum@TYPE}]
+% キャプション用の図番号を生成するマクロです。
+% たとえば、|\fnum@figure|は`図|\thefigure|'を作ります。
+% \end{description}
+%
+% \subsubsection{figure環境}
+% ここでは、figure環境を実装しています。
+%
+% \begin{macro}{\c@figure}
+% \begin{macro}{\thefigure}
+% 図番号です。
+% \begin{macrocode}
+%<article>\newcounter{figure}
+%<report|book>\newcounter{figure}[chapter]
+%<*tate>
+%<article>\renewcommand{\thefigure}{\rensuji{\@arabic\c@figure}}
+% \end{macrocode}
+% \changes{v1.1d}{1997/02/14}{\cs{ifnum}文の構文エラーを訂正。}
+% \begin{macrocode}
+%<*report|book>
+\renewcommand{\thefigure}{%
+ \ifnum\c@chapter>\z@\thechapter{}・\fi\rensuji{\@arabic\c@figure}}
+%</report|book>
+%</tate>
+%<*yoko>
+%<article>\renewcommand{\thefigure}{\@arabic\c@figure}
+%<*report|book>
+\renewcommand{\thefigure}{%
+ \ifnum\c@chapter>\z@\thechapter.\fi\@arabic\c@figure}
+%</report|book>
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fps@figure}
+% \begin{macro}{\ftype@figure}
+% \begin{macro}{\ext@figure}
+% \begin{macro}{\fnum@figure}
+% フロートオブジェクトタイプ``figure''のためのパラメータです。
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+%<tate>\def\fnum@figure{\figurename\thefigure}
+%<yoko>\def\fnum@figure{\figurename~\thefigure}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{figure}
+% \begin{environment}{figure*}
+% |*|形式は2段抜きのフロートとなります。
+% \begin{macrocode}
+\newenvironment{figure}
+ {\@float{figure}}
+ {\end@float}
+\newenvironment{figure*}
+ {\@dblfloat{figure}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \subsubsection{table環境}
+% ここでは、table環境を実装しています。
+%
+% \begin{macro}{\c@table}
+% \begin{macro}{\thetable}
+% \changes{v1.1n}{1998/10/13}
+% {report, bookクラスでchapterカウンタを考慮していなかったのを修正。
+% ありがとう、平川@慶應大さん。}
+% 表番号です。
+% \begin{macrocode}
+%<article>\newcounter{table}
+%<report|book>\newcounter{table}[chapter]
+%<*tate>
+%<article>\renewcommand{\thetable}{\rensuji{\@arabic\c@table}}
+%<*report|book>
+\renewcommand{\thetable}{%
+ \ifnum\c@chapter>\z@\thechapter{}・\fi\rensuji{\@arabic\c@table}}
+%</report|book>
+%</tate>
+%<*yoko>
+%<article>\renewcommand{\thetable}{\@arabic\c@table}
+%<*report|book>
+\renewcommand{\thetable}{%
+ \ifnum\c@chapter>\z@\thechapter.\fi\@arabic\c@table}
+%</report|book>
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fps@table}
+% \begin{macro}{\ftype@table}
+% \begin{macro}{\ext@table}
+% \begin{macro}{\fnum@table}
+% フロートオブジェクトタイプ``table''のためのパラメータです。
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+%<tate>\def\fnum@table{\tablename\thetable}
+%<yoko>\def\fnum@table{\tablename~\thetable}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{table}
+% \begin{environment}{table*}
+% |*|形式は2段抜きのフロートとなります。
+% \begin{macrocode}
+\newenvironment{table}
+ {\@float{table}}
+ {\end@float}
+\newenvironment{table*}
+ {\@dblfloat{table}}
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \subsection{キャプション}
+%
+% \begin{macro}{\@makecaption}
+% |\caption|コマンドは、キャプションを組み立てるために|\@mkcaption|を呼出ます。
+% このコマンドは二つの引数を取ります。
+% 一つは、\meta{number}で、フロートオブジェクトの番号です。
+% もう一つは、\meta{text}でキャプション文字列です。
+% \meta{number}には通常、`図 3.2'のような文字列が入っています。
+% このマクロは、|\parbox|の中で呼び出されます。書体は|\normalsize|です。
+%
+% \begin{macro}{\abovecaptionskip}
+% \begin{macro}{\belowcaptionskip}
+% これらの長さはキャプションの前後に挿入されるスペースです。
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{10\p@}
+\setlength\belowcaptionskip{0\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% キャプション内で複数の段落を作成することができるように、
+% このマクロは|\long|で定義をします。
+% \begin{macrocode}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \ifnum\ltjgetparameter{direction}=3 \sbox\@tempboxa{#1\hskip1\zw#2}%
+ \else\sbox\@tempboxa{#1: #2}%
+ \fi
+ \ifdim \wd\@tempboxa >\hsize
+ \ifnum\ltjgetparameter{direction}=3 #1\hskip1\zw#2\relax\par
+ \else #1: #2\relax\par\fi
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{コマンドパラメータの設定}
+%
+% \subsubsection{arrayとtabular環境}
+%
+% \begin{macro}{\arraycolsep}
+% array環境のカラムは2|\arraycolsep|で分離されます。
+% \begin{macrocode}
+\setlength\arraycolsep{5\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tabcolsep}
+% tabular環境のカラムは2|\tabcolsep|で分離されます。
+% \begin{macrocode}
+\setlength\tabcolsep{6\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\arrayrulewidth}
+% arrayとtabular環境内の罫線の幅です。
+% \begin{macrocode}
+\setlength\arrayrulewidth{.4\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doublerulesep}
+% arrayとtabular環境内の罫線間を調整する空白です。
+% \begin{macrocode}
+\setlength\doublerulesep{2\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{tabbing環境}
+%
+% \begin{macro}{\tabbingsep}
+% |\'|コマンドで置かれるスペースを制御します。
+% \begin{macrocode}
+\setlength\tabbingsep{\labelsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{minipage環境}
+%
+% \begin{macro}{\@mpfootins}
+% minipageにも脚注を付けることができます。
+% |\skip||\@mpfootins|は、通常の|\skip||\footins|と同じような動作をします。
+% \begin{macrocode}
+\skip\@mpfootins = \skip\footins
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{framebox環境}
+%
+% \begin{macro}{\fboxsep}
+% \begin{macro}{\fboxrule}
+% |\fboxsep|は、|\fbox|と|\framebox|での、
+% テキストとボックスの間に入る空白です。
+% |\fboxrule|は|\fbox|と|\framebox|で作成される罫線の幅です。
+% \begin{macrocode}
+\setlength\fboxsep{3\p@}
+\setlength\fboxrule{.4\p@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsubsection{equationとeqnarray環境}
+%
+% \begin{macro}{\theequation}
+% equationカウンタは、新しい章の開始でリセットされます。
+% また、equation番号には、章番号が付きます。
+%
+% このコードは|\chapter|定義の後、より正確にはchapterカウンタの定義の後、
+% でなくてはいけません。
+% \begin{macrocode}
+%<article>\renewcommand{\theequation}{\@arabic\c@equation}
+%<*report|book>
+\@addtoreset{equation}{chapter}
+\renewcommand{\theequation}{%
+ \ifnum\c@chapter>\z@\thechapter.\fi \@arabic\c@equation}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{フォントコマンド}
+% まず、数式内に日本語を直接、記述するために数式記号用文字に
+% ``JY3/mc/m/n''を登録します。数式バージョンがboldの場合は、
+% ``JY3/gt/m/n''を用います。
+% これらは、|\mathmc|, |\mathgt|として登録されます。
+% また、日本語数式ファミリとして|\symmincho|がこの段階で設定されます。
+% |mathrmmc|オプションが指定されていた場合には、これに引き続き
+% |\mathrm|と|\mathbf|を和欧文両対応にするための作業がなされます。この際、
+% 他のマクロとの衝突を避けるため|\AtBeginDocument|
+% を用いて展開順序を遅らせる必要があります。
+%
+% \textbf{変更}
+%
+% \changes{v1.6}{2006/06/27}{フォントコマンドを修正。ありがとう、ymtさん。}
+% \LaTeX{} 2.09
+% compatibility mode では和文数式フォントfamが2重定義されていた
+% ので、その部分を変更しました。
+%
+% \changes{v1.8-ltj-14}{2018/10/08}{Lua\TeX-ja本体が|disablejfam|オプションをサポートしました。
+% クラス読み込み時に|disablejfam|オプションを指定した場合は、それがLua\TeX-jaに渡されて
+% 数式中に日本語を記述することができなくなります(|\mathmc|, |\mathgt|も定義されません)。}
+% \begin{macrocode}
+\unless\ifltj@disablejfam
+\if@compatibility\else
+ \DeclareSymbolFont{mincho}{JY3}{mc}{m}{n}
+ \DeclareSymbolFontAlphabet{\mathmc}{mincho}
+ \SetSymbolFont{mincho}{bold}{JY3}{gt}{m}{n}
+ \jfam\symmincho
+ \DeclareMathAlphabet{\mathgt}{JY3}{gt}{m}{n}
+\fi
+\if@mathrmmc
+ \AtBeginDocument{%
+ \reDeclareMathAlphabet{\mathrm}{\mathrm}{\mathmc}
+ \reDeclareMathAlphabet{\mathbf}{\mathbf}{\mathgt}
+}%
+\fi
+\fi
+% \end{macrocode}
+%
+% ここでは\LaTeX~2.09で一般的に使われていたコマンドを定義しています。
+% これらのコマンドはテキストモードと数式モードの\emph{どちらでも}動作します。
+% これらは互換性のために提供をしますが、できるだけ|\text...|と|\math...|を
+% 使うようにしてください。
+%
+% \begin{macro}{\mc}
+% \begin{macro}{\gt}
+% \begin{macro}{\rm}
+% \begin{macro}{\sf}
+% \begin{macro}{\tt}
+% これらのコマンドはフォントファミリを変更します。
+% 互換モードの同名コマンドと異なり、すべてのコマンドがデフォルトフォントに
+% リセットしてから、対応する属性を変更することに注意してください。
+% \begin{macrocode}
+\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
+\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bf}
+% このコマンドはボールド書体にします。ノーマル書体に変更するには、
+% |\mdseries|と指定をします。
+% \begin{macrocode}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\it}
+% \begin{macro}{\sl}
+% \begin{macro}{\sc}
+% これらのコマンドはフォントシェイプを切替えます。
+% スラント体とスモールキャップの数式アルファベットはありませんので、
+% 数式モードでは何もしませんが、警告メッセージを出力します。
+% |\upshape|コマンドで通常のシェイプにすることができます。
+% \begin{macrocode}
+\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cal}
+% \begin{macro}{\mit}
+% これらのコマンドは数式モードでだけ使うことができます。
+% 数式モード以外では何もしません。
+% 現在のNFSSは、これらのコマンドが警告を生成するように定義していますので、
+% `手ずから'定義する必要があります。
+% \begin{macrocode}
+\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \section{相互参照}
+%
+% \subsection{目次}
+% |\section|コマンドは、\file{.toc}ファイルに、次のような行を出力します。
+%
+% |\contentsline{section}{|\meta{title}|}{|\meta{page}|}|
+%
+% \meta{title}には項目が、\meta{page}にはページ番号が入ります。
+% |\section|に見出し番号が付く場合は、\meta{title}は、
+% |\numberline{|\meta{num}|}{|\meta{heading}|}|となります。
+% \meta{num}は|\thesection|コマンドで生成された見出し番号です。
+% \meta{heading}は見出し文字列です。この他の見出しコマンドも同様です。
+%
+% figure環境での|\caption|コマンドは、\file{.lof}ファイルに、
+% 次のような行を出力します。
+%
+% |\contentsline{figure}{\numberline{|\meta{num}|}{|%
+% \meta{caption}|}}{|\meta{page}|}|
+%
+% \meta{num}は、|\thefigure|コマンドで生成された図番号です。
+% \meta{caption}は、キャプション文字列です。table環境も同様です。
+%
+% |\contentsline{|\meta{name}|}|コマンドは、|\l@|\meta{name}に展開されます。
+% したがって、目次の体裁を記述するには、|\l@chapter|, |\l@section|などを
+% 定義します。図目次のためには|\l@figure|です。
+% これらの多くのコマンドは|\@dottedtocline|コマンドで定義されています。
+% このコマンドは次のような書式となっています。
+%
+% |\@dottedtocline{|\meta{level}|}{|\meta{indent}|}{|^^A
+% \meta{numwidth}|}{|\meta{title}|}{|\meta{page}|}|
+%
+% \begin{description}
+% \item[\meta{level}] ``\meta{level} $<=$ \Lcount{tocdepth}''のときにだけ、
+% 生成されます。|\chapter|はレベル0、|\section|はレベル1、$\ldots$ です。
+% \item[\meta{indent}] 一番外側からの左マージンです。
+% \item[\meta{numwidth}] 見出し番号(|\numberline|コマンドの\meta{num})が
+% 入るボックスの幅です。
+% \end{description}
+%
+% \begin{macro}{\c@tocdepth}
+% \Lcount{tocdepth}は、目次ページに出力をする見出しレベルです。
+% \begin{macrocode}
+%<article>\setcounter{tocdepth}{3}
+%<!article>\setcounter{tocdepth}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% また、目次を生成するために次のパラメータも使います。
+%
+% \begin{macro}{\@pnumwidth}
+% ページ番号の入るボックスの幅です。
+% \begin{macrocode}
+\newcommand{\@pnumwidth}{1.55em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@tocrmarg}
+% 複数行にわたる場合の右マージンです。
+% \begin{macrocode}
+\newcommand{\@tocrmarg}{2.55em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@dotsep}
+% ドットの間隔(mu単位)です。2や1.7のように指定をします。
+% \begin{macrocode}
+\newcommand{\@dotsep}{4.5}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\toclineskip}
+% この長さ変数は、目次項目の間に入るスペースの長さです。
+% デフォルトはゼロとなっています。縦組のとき、スペースを少し広げます。
+% \begin{macrocode}
+\newdimen\toclineskip
+%<yoko>\setlength\toclineskip{\z@}
+%<tate>\setlength\toclineskip{2\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\numberline}
+% \begin{macro}{\@lnumwidth}
+% |\numberline|マクロの定義を示します。オリジナルの定義では、ボックスの幅を
+% |\@tempdima|にしていますが、この変数はいろいろな箇所で使われますので、
+% 期待した値が入らない場合があります。
+%
+% ^^A たとえば、|lltjfont.sty|での|\selectfont|は、和欧文のベースラインを調整する
+% ^^A ために|\@tempdima|変数を用いています。そのため、|\l@...|マクロの中で
+% ^^A フォントを切替えると、|\numberline|マクロのボックス
+% ^^A の幅が、ベースラインを調整するときに計算した値になってしまいます。
+% ^^A →修正(texjporg):最近の|\adjustbaseline|では|\adjust@dimen|が使われて
+% ^^A いるため、記述をコメントアウトしました。
+%
+% フォント選択コマンドの後、あるいは|\numberline|マクロの中でフォントを
+% 切替えてもよいのですが、一時変数を意識したくないので、
+% 見出し番号の入るボックスを|\@lnumwidth|変数を用いて組み立てるように
+% |\numberline|マクロを再定義します。
+% \begin{macrocode}
+\newdimen\@lnumwidth
+\def\numberline#1{\hb@xt@\@lnumwidth{#1\hfil}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dottedtocline}
+% 目次の各行間に|\toclineskip|を入れるように変更します。
+% このマクロは\file{ltsect.dtx}で定義されています。
+% \changes{v1.3}{2001/10/04}{第5引数の書体を\cs{rmfamily}から\cs{normalfont}に変更}
+% \changes{v1.7a}{2016/11/16}{Added \cs{nobreak} for
+% latex/2343 (sync with ltsect.dtx v1.0z)}
+% \begin{macrocode}
+\def\@dottedtocline#1#2#3#4#5{%
+ \ifnum #1>\c@tocdepth \else
+ \vskip\toclineskip \@plus.2\p@
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@lnumwidth #3\relax
+ \advance\leftskip \@lnumwidth \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+ \leaders\hbox{$\m@th \mkern \@dotsep mu.\mkern \@dotsep mu$}%
+ \hfill\nobreak
+ \hb@xt@\@pnumwidth{\hss\normalfont \normalcolor #5}%
+ \par}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addcontentsline}
+% 縦組の場合にページ番号を|\rensuji|で囲むように変更します。
+% ^^A 横組のときにも`|\rensuji|'コマンドが出力されますが、
+% ^^A このコマンドによる影響はありません。
+%
+% このマクロは\file{ltsect.dtx}で定義されています。
+% \changes{v1.8a}{2018/10/25}{ファイル書き出し時の行末文字対策
+% (sync with ltsect.dtx 2018/09/26 v1.1c)}
+% \begin{macrocode}
+\providecommand*\protected@file@percent{}
+\def\addcontentsline#1#2#3{%
+ \protected@write\@auxout
+ {\let\label\@gobble \let\index\@gobble \let\glossary\@gobble
+%<tate> \@temptokena{\rensuji{\thepage}}}%
+%<yoko> \@temptokena{\thepage}}%
+ {\string\@writefile{#1}%
+ {\protect\contentsline{#2}{#3}{\the\@temptokena}%
+ \protected@file@percent}}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{本文目次}
+%
+% \begin{macro}{\tableofcontents}
+% 目次を生成します。
+% \begin{macrocode}
+\newcommand{\tableofcontents}{%
+%<*report|book>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+%</report|book>
+%<article> \section*{\contentsname
+%<!article> \chapter*{\contentsname
+% \end{macrocode}
+% |\tableofcontents|では、|\@mkboth|はheadingの中に入れてあります。
+% ほかの命令(|\listoffigures|など)については、|\@mkboth|はheadingの
+% 外に出してあります。これは\LaTeX の\file{classes.dtx}に合わせています。
+% \begin{macrocode}
+ \@mkboth{\contentsname}{\contentsname}%
+ }\@starttoc{toc}%
+%<report|book> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@part}
+% partレベルの目次です。
+% \begin{macrocode}
+\newcommand*{\l@part}[2]{%
+ \ifnum \c@tocdepth >-2\relax
+%<article> \addpenalty{\@secpenalty}%
+%<!article> \addpenalty{-\@highpenalty}%
+ \addvspace{2.25em \@plus\p@}%
+ \begingroup
+ \parindent\z@\rightskip\@pnumwidth
+ \parfillskip-\@pnumwidth
+ {\leavevmode\large\bfseries
+ \setlength\@lnumwidth{4\zw}%
+ #1\hfil\nobreak
+ \hb@xt@\@pnumwidth{\hss#2}}\par
+ \nobreak
+%<article> \if@compatibility
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+%<article> \fi
+ \endgroup
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@chapter}
+% chapterレベルの目次です。
+% \begin{macrocode}
+%<*report|book>
+\newcommand*{\l@chapter}[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \addvspace{1.0em \@plus\p@}%
+ \begingroup
+ \parindent\z@ \rightskip\@pnumwidth \parfillskip-\rightskip
+ \leavevmode\bfseries
+ \setlength\@lnumwidth{4\zw}%
+ \advance\leftskip\@lnumwidth \hskip-\leftskip
+ #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss#2}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+% sectionレベルの目次です。
+% \begin{macrocode}
+%<*article>
+\newcommand*{\l@section}[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em \@plus\p@}%
+ \begingroup
+ \parindent\z@ \rightskip\@pnumwidth \parfillskip-\rightskip
+ \leavevmode\bfseries
+ \setlength\@lnumwidth{1.5em}%
+ \advance\leftskip\@lnumwidth \hskip-\leftskip
+ #1\nobreak\hfil\nobreak\hb@xt@\@pnumwidth{\hss#2}\par
+ \endgroup
+ \fi}
+%</article>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*report|book>
+%<tate>\newcommand*{\l@section}{\@dottedtocline{1}{1\zw}{4\zw}}
+%<yoko>\newcommand*{\l@section}{\@dottedtocline{1}{1.5em}{2.3em}}
+%</report|book>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@subsection}
+% \begin{macro}{\l@subsubsection}
+% \begin{macro}{\l@paragraph}
+% \begin{macro}{\l@subparagraph}
+% 下位レベルの目次項目の体裁です。
+% \begin{macrocode}
+%<*tate>
+%<*article>
+\newcommand*{\l@subsection} {\@dottedtocline{2}{1\zw}{4\zw}}
+\newcommand*{\l@subsubsection}{\@dottedtocline{3}{2\zw}{6\zw}}
+\newcommand*{\l@paragraph} {\@dottedtocline{4}{3\zw}{8\zw}}
+\newcommand*{\l@subparagraph} {\@dottedtocline{5}{4\zw}{9\zw}}
+%</article>
+%<*report|book>
+\newcommand*{\l@subsection} {\@dottedtocline{2}{2\zw}{6\zw}}
+\newcommand*{\l@subsubsection}{\@dottedtocline{3}{3\zw}{8\zw}}
+\newcommand*{\l@paragraph} {\@dottedtocline{4}{4\zw}{9\zw}}
+\newcommand*{\l@subparagraph} {\@dottedtocline{5}{5\zw}{10\zw}}
+%</report|book>
+%</tate>
+%<*yoko>
+%<*article>
+\newcommand*{\l@subsection} {\@dottedtocline{2}{1.5em}{2.3em}}
+\newcommand*{\l@subsubsection}{\@dottedtocline{3}{3.8em}{3.2em}}
+\newcommand*{\l@paragraph} {\@dottedtocline{4}{7.0em}{4.1em}}
+\newcommand*{\l@subparagraph} {\@dottedtocline{5}{10em}{5em}}
+%</article>
+%<*report|book>
+\newcommand*{\l@subsection} {\@dottedtocline{2}{3.8em}{3.2em}}
+\newcommand*{\l@subsubsection}{\@dottedtocline{3}{7.0em}{4.1em}}
+\newcommand*{\l@paragraph} {\@dottedtocline{4}{10em}{5em}}
+\newcommand*{\l@subparagraph} {\@dottedtocline{5}{12em}{6em}}
+%</report|book>
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{図目次と表目次}
+%
+% \begin{macro}{\listoffigures}
+% 図の一覧を作成します。
+% \changes{v1.7}{2016/11/12}{Moved \cs{@mkboth} out of heading
+% arg (sync with classes.dtx v1.4c)}
+% \begin{macrocode}
+\newcommand{\listoffigures}{%
+%<*report|book>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+ \chapter*{\listfigurename}%
+%</report|book>
+%<article> \section*{\listfigurename}%
+ \@mkboth{\listfigurename}{\listfigurename}%
+ \@starttoc{lof}%
+%<report|book> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@figure}
+% 図目次の体裁です。
+% \begin{macrocode}
+%<tate>\newcommand*{\l@figure}{\@dottedtocline{1}{1\zw}{4\zw}}
+%<yoko>\newcommand*{\l@figure}{\@dottedtocline{1}{1.5em}{2.3em}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listoftables}
+% \changes{v1.0c}{1995/12/28}{fix the \cs{listoftable} typo.}
+% 表の一覧を作成します。
+% \changes{v1.7}{2016/11/12}{Moved \cs{@mkboth} out of heading
+% arg (sync with classes.dtx v1.4c)}
+% \begin{macrocode}
+\newcommand{\listoftables}{%
+%<*report|book>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+ \chapter*{\listtablename}%
+%</report|book>
+%<article> \section*{\listtablename}%
+ \@mkboth{\listtablename}{\listtablename}%
+ \@starttoc{lot}%
+%<report|book> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@table}
+% 表目次の体裁は、図目次と同じにします。
+% \begin{macrocode}
+\let\l@table\l@figure
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{参考文献}
+%
+% \begin{macro}{\bibindent}
+% オープンスタイルの参考文献で使うインデント幅です。
+% \begin{macrocode}
+\newdimen\bibindent
+\setlength\bibindent{1.5em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newblock}
+% |\newblock|のデフォルト定義は、小さなスペースを生成します。
+% \begin{macrocode}
+\newcommand{\newblock}{\hskip .11em\@plus.33em\@minus.07em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{thebibliography}
+% 参考文献や関連図書のリストを作成します。
+% \changes{v1.7}{2016/11/12}{Moved \cs{@mkboth} out of heading
+% arg (sync with classes.dtx v1.4c)}
+% \begin{macrocode}
+\newenvironment{thebibliography}[1]
+%<article>{\section*{\refname}\@mkboth{\refname}{\refname}%
+%<report|book>{\chapter*{\bibname}\@mkboth{\bibname}{\bibname}%
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy
+% \end{macrocode}
+% \changes{v1.1a}{1997/01/23}{\break\LaTeX\ \texttt{!<1996/12/01!>}に合わせて修正}
+% \begin{macrocode}
+ \clubpenalty4000
+ \@clubpenalty\clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@openbib@code}
+% |\@openbib@code|のデフォルト定義は何もしません。
+% この定義は、\Lopt{openbib}オプションによって変更されます。
+% \begin{macrocode}
+\let\@openbib@code\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@biblabel}
+% The label for a |\bibitem[...]| command is produced by this
+% macro. The default from \file{latex.dtx} is used.
+% \begin{macrocode}
+% \renewcommand*{\@biblabel}[1]{[#1]\hfill}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@cite}
+% The output of the |\cite| command is produced by this macro. The
+% default from \file{ltbibl.dtx} is used.
+% \begin{macrocode}
+% \renewcommand*{\@cite}[1]{[#1]}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{索引}
+%
+% \begin{environment}{theindex}
+% 2段組の索引を作成します。
+% 索引の先頭のページのスタイルは\pstyle{jpl@in}とします。したがって、
+% \pstyle{headings}と\pstyle{bothstyle}に適した位置に出力されます。
+% \begin{macrocode}
+\newenvironment{theindex}
+ {\if@twocolumn\@restonecolfalse\else\@restonecoltrue\fi
+%<article> \twocolumn[\section*{\indexname}]%
+%<report|book> \twocolumn[\@makeschapterhead{\indexname}]%
+ \@mkboth{\indexname}{\indexname}%
+ \thispagestyle{jpl@in}\parindent\z@
+% \end{macrocode}
+% パラメータ|\columnseprule|と|\columnsep|の変更は、|\twocolumn|が
+% 実行された後でなければなりません。そうしないと、索引の前のページ
+% にも影響してしまうためです。
+% \changes{v1.7}{2016/11/12}{\cs{columnsep}と\cs{columnseprule}の
+% 変更を後ろに移動(sync with classes.dtx v1.4f)}
+% \begin{macrocode}
+ \parskip\z@ \@plus .3\p@\relax
+ \columnseprule\z@ \columnsep 35\p@
+ \let\item\@idxitem}
+ {\if@restonecol\onecolumn\else\clearpage\fi}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@idxitem}
+% \begin{macro}{\subitem}
+% \begin{macro}{\subsubitem}
+% 索引項目の字下げ幅です。|\@idxitem|は|\item|の項目の字下げ幅です。
+% \begin{macrocode}
+\newcommand{\@idxitem}{\par\hangindent 40\p@}
+\newcommand{\subitem}{\@idxitem \hspace*{20\p@}}
+\newcommand{\subsubitem}{\@idxitem \hspace*{30\p@}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\indexspace}
+% 索引の``文字''見出しの前に入るスペースです。
+% \begin{macrocode}
+\newcommand{\indexspace}{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{脚注}
+%
+% \begin{macro}{\footnoterule}
+% 本文と脚注の間に引かれる罫線です。
+% \changes{v1.7}{2016/11/12}{use \cs{@width} (sync with classes.dtx v1.3a)}
+% \begin{macrocode}
+\renewcommand{\footnoterule}{%
+ \kern-3\p@
+ \hrule\@width.4\columnwidth
+ \kern2.6\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@footnote}
+% reportとbookクラスでは、chapterレベルでリセットされます。
+% \begin{macrocode}
+%<!article>\@addtoreset{footnote}{chapter}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext}
+% このマクロにしたがって脚注が組まれます。
+%
+% |\@makefnmark|は脚注記号を組み立てるマクロです。
+% \changes{v1.7}{2016/11/12}{Replaced all \cs{hbox to} by
+% \cs{hb@xt@} (sync with classes.dtx v1.3a)}
+% \begin{macrocode}
+%<*tate>
+\newcommand\@makefntext[1]{\parindent 1\zw
+ \noindent\hb@xt@ 2\zw{\hss\@makefnmark}#1}
+%</tate>
+%<*yoko>
+\newcommand\@makefntext[1]{\parindent 1em
+ \noindent\hb@xt@ 1.8em{\hss\@makefnmark}#1}
+%</yoko>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \section{今日の日付}
+% 組版時における現在の日付を出力します。
+%
+% \iffalse meta-comment!
+% 注意:ここで \DisableCrossrefs, \EnableCrossrefs をしているのは、
+% platex jclasses.dtx で dvi を作るときにエラーになるため。
+% \fi
+% \DisableCrossrefs
+% \begin{macro}{\if西暦}
+% \begin{macro}{\西暦}
+% \begin{macro}{\和暦}
+% \changes{v1.0h}{1996/12/17}{Typo:和歴 to 和暦}
+% |\today|コマンドの`年'を、
+% 西暦か和暦のどちらで出力するかを指定するコマンドです。
+% 2018年7月以降の日本語\TeX{}開発コミュニティ版(v1.8)では、
+% デフォルトを和暦ではなく西暦に設定しています。
+% \changes{v1.8}{2018/07/03}{\cs{today}のデフォルトを和暦から西暦に変更}
+% \begin{macrocode}
+\newif\if西暦 \西暦true
+\def\西暦{\西暦true}
+\def\和暦{\西暦false}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \EnableCrossrefs
+%
+% \begin{macro}{\heisei}
+% \changes{v1.1m}{1998/04/07}{\cs{today}の計算手順を変更}
+% \changes{v1.8b}{2019/04/02}{\cs{heisei}の値は$\mbox{西暦}-1988$で固定}
+% |\today|コマンドを|\rightmark|で指定したとき、|\rightmark|を出力する部分
+% で和暦のための計算ができないので、クラスファイルを読み込む時点で計算して
+% おきます。
+% \begin{macrocode}
+\newcount\heisei \heisei\year \advance\heisei-1988\relax
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\today}
+% \begin{macro}{\pltx@today@year}
+% 縦組の場合は、漢数字で出力します。
+% \pLaTeX\ 2018-12-01以前では縦数式ディレクション時でも漢数字で出力していましたが、
+% \pLaTeX\ 2019-04-06以降からはそうしなくなりました。
+%
+% \changes{v1.6-ltj-9}{2015/01/01}{縦組では,この漢数字による日付出力でエラーになりました.
+% Lua\TeX-ja では,\cs{kansuji}の後に\cs{number}を続けることは出来ないので\cs{number}を削除しました.}
+% \changes{v1.8b}{2019/04/02}{\cs{today}の計算・出力方法を変更。}
+% \begin{macrocode}
+\def\pltx@today@year@#1{%
+ \ifnum\numexpr\year-#1=1 元\else
+ \ifnum\ltjgetparameter{direction}=3
+ \kansuji\numexpr\year-#1\relax
+ \else
+ \number\numexpr\year-#1\relax\nobreak
+ \fi
+ \fi 年
+}
+\def\pltx@today@year{%
+ \ifnum\numexpr\year*10000+\month*100+\day<19890108
+ 昭和\pltx@today@year@{1925}%
+ \else\ifnum\numexpr\year*10000+\month*100+\day<20190501
+ 平成\pltx@today@year@{1988}%
+ \else
+ 令和\pltx@today@year@{2018}%
+ \fi\fi}
+\def\today{{%
+ \if西暦
+ \ifnum\ltjgetparameter{direction}=3 \kansuji\year
+ \else\number\year\nobreak\fi 年
+ \else
+ \pltx@today@year
+ \fi
+ \ifnum\ltjgetparameter{direction}=3
+ \kansuji\month 月
+ \kansuji\day 日
+ \else
+ \number\month\nobreak 月
+ \number\day\nobreak 日
+ \fi}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \section{初期設定}
+%
+% \begin{macro}{\prepartname}
+% \begin{macro}{\postpartname}
+% \begin{macro}{\prechaptername}
+% \begin{macro}{\postchaptername}
+% \begin{macrocode}
+\newcommand{\prepartname}{第}
+\newcommand{\postpartname}{部}
+%<report|book>\newcommand{\prechaptername}{第}
+%<report|book>\newcommand{\postchaptername}{章}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\contentsname}
+% \begin{macro}{\listfigurename}
+% \begin{macro}{\listtablename}
+% \begin{macrocode}
+\newcommand{\contentsname}{目 次}
+\newcommand{\listfigurename}{図 目 次}
+\newcommand{\listtablename}{表 目 次}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% \begin{macro}{\bibname}
+% \begin{macro}{\indexname}
+% \begin{macrocode}
+%<article>\newcommand{\refname}{参考文献}
+%<report|book>\newcommand{\bibname}{関連図書}
+\newcommand{\indexname}{索 引}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \begin{macro}{\tablename}
+% \begin{macrocode}
+\newcommand{\figurename}{図}
+\newcommand{\tablename}{表}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\appendixname}
+% \begin{macro}{\abstractname}
+% \begin{macrocode}
+\newcommand{\appendixname}{付 録}
+%<article|report>\newcommand{\abstractname}{概 要}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% |stfloats|パッケージがシステムにインストールされている場合は、このパッケージを使って
+% p\LaTeX の標準時と同じようにボトムフロートの下に脚注が組まれるようにします。
+% \changes{v1.0d}{1996/02/29}{articleとreportのデフォルトを
+% \pstyle{plain}に修正}
+% \changes{v1.4}{2002/04/09}{縦組スタイルで\cs{flushbottom}しないようにした}
+% \changes{v1.7d-ltj-13}{2017/02/19}{p\LaTeX とLua\TeX-jaの|\@makecol|が違うことを
+% 考慮していなかった}
+% \begin{macrocode}
+%<book>\pagestyle{headings}
+%<!book>\pagestyle{plain}
+\pagenumbering{arabic}
+\raggedbottom
+\fnfixbottomtrue % 2017-02-19
+\IfFileExists{stfloats.sty}{\RequirePackage{stfloats}\fnbelowfloat}{}
+\if@twocolumn
+ \twocolumn
+ \sloppy
+\else
+ \onecolumn
+\fi
+% \end{macrocode}
+% |\@mparswitch|は傍注を左右(縦組では上下)どちらのマージンに
+% 出力するかの指定です。偽の場合、傍注は一方の側にしか出力されません。
+% このスイッチを真とすると、とくに縦組の場合、奇数ページでは本文の上に、
+% 偶数ページでは本文の下に傍注が出力されますので、おかしなことになります。
+%
+% また、縦組のときには、傍注を本文の下に出すようにしています。
+% |\reversemarginpar|とすると本文の上側に出力されます。
+% ただし、二段組の場合は、つねに隣接するテキスト側のマージンに出力されます。
+% \begin{macrocode}
+%<*tate>
+\normalmarginpar
+\@mparswitchfalse
+%</tate>
+%<*yoko>
+\if@twoside
+ \@mparswitchtrue
+\else
+ \@mparswitchfalse
+\fi
+%</yoko>
+%</article|report|book>
+% \end{macrocode}
+%
+% \section{各種パッケージへの対応}
+% もともと縦組での利用を想定されていないいくつかのパッケージについて、
+% 補正するためのコードを記述しておきます。
+% この節のコードは|filehook|パッケージ(Lua\TeX-ja読み込み時に自動でロードされます)
+% の機能を用いています。
+%
+% \subsection{\texttt{ftnright}パッケージ}
+% 脚注番号の書式が|ftnright|パッケージによって勝手に書き換えられるので、
+% パッケージ読み込み前に予め退避しておき、読み込み後に復帰させます。
+% \changes{v1.7d}{2017/02/19}{コード追加}
+% \begin{macrocode}
+%<*article|report|book>
+\AtBeginOfPackageFile*{ftnright}{\let\ltjt@orig@@makefntext=\@makefntext}
+\AtEndOfPackageFile*{ftnright}{\let\@makefntext=\ltjt@orig@@makefntext}
+%</article|report|book>
+% \end{macrocode}
+%
+%
+% \Finale
+%
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/ltjclasses.ins b/macros/luatex/generic/luatexja/src/ltjclasses.ins
new file mode 100644
index 0000000000..a4977146c7
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltjclasses.ins
@@ -0,0 +1,28 @@
+%
+% ltjclasses.ins
+%
+
+\input docstrip
+\keepsilent
+
+\generateFile{ltjarticle.cls}{f}{\from{ltjclasses.dtx}{article,yoko}}
+\generateFile{ltjreport.cls}{f}{\from{ltjclasses.dtx}{report,yoko}}
+\generateFile{ltjbook.cls}{f}{\from{ltjclasses.dtx}{book,yoko}}
+\generateFile{ltjsize10.clo}{f}{\from{ltjclasses.dtx}{10pt,yoko}}
+\generateFile{ltjsize11.clo}{f}{\from{ltjclasses.dtx}{11pt,yoko}}
+\generateFile{ltjsize12.clo}{f}{\from{ltjclasses.dtx}{12pt,yoko}}
+\generateFile{ltjbk10.clo}{f}{\from{ltjclasses.dtx}{10pt,bk,yoko}}
+\generateFile{ltjbk11.clo}{f}{\from{ltjclasses.dtx}{11pt,bk,yoko}}
+\generateFile{ltjbk12.clo}{f}{\from{ltjclasses.dtx}{12pt,bk,yoko}}
+
+\generateFile{ltjtarticle.cls}{f}{\from{ltjclasses.dtx}{article,tate}}
+\generateFile{ltjtreport.cls}{f}{\from{ltjclasses.dtx}{report,tate}}
+\generateFile{ltjtbook.cls}{f}{\from{ltjclasses.dtx}{book,tate}}
+\generateFile{ltjtsize10.clo}{f}{\from{ltjclasses.dtx}{10pt,tate}}
+\generateFile{ltjtsize11.clo}{f}{\from{ltjclasses.dtx}{11pt,tate}}
+\generateFile{ltjtsize12.clo}{f}{\from{ltjclasses.dtx}{12pt,tate}}
+\generateFile{ltjtbk10.clo}{f}{\from{ltjclasses.dtx}{10pt,bk,tate}}
+\generateFile{ltjtbk11.clo}{f}{\from{ltjclasses.dtx}{11pt,bk,tate}}
+\generateFile{ltjtbk12.clo}{f}{\from{ltjclasses.dtx}{12pt,bk,tate}}
+
+\endbatchfile
diff --git a/macros/luatex/generic/luatexja/src/ltjltxdoc.dtx b/macros/luatex/generic/luatexja/src/ltjltxdoc.dtx
new file mode 100644
index 0000000000..0a5c2b370f
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltjltxdoc.dtx
@@ -0,0 +1,218 @@
+% \iffalse meta-comment
+%% File: ltjltxdoc.dtx
+% -------------------------------------
+% Original: jltxdoc.dtx
+%
+% Copyright 1995,1996,1997 ASCII Corporation.
+%
+% This file is part of pLaTeX2e system.
+% -------------------------------------
+%
+% \fi
+%
+% \setcounter{StandardModuleDepth}{1}
+% \StopEventually{}
+%
+% \iffalse
+% \changes{v1.0a}{1997/01/23}{\LaTeX \texttt{!<1996/12/01!>}への対応に
+% 合わせて修正}
+% \changes{v1.0b}{1997/07/29}{\cs{}と\texttt{"}の\cs{xspcode}を変更}
+% \changes{v1.0b-ltj}{2011/09/27}{Lua\LaTeX-ja 用に修正}
+% \changes{v1.0b-ltj-2}{2014/07/03}{orを意味する縦棒の出力が異常だったので修正}
+% \changes{v1.0c}{2016/07/25}{docパッケージが上書きする\cs{verb}を再々定義}
+% \changes{v1.0d}{2017/09/24}{\cs{vadjust\{\}}を追加}
+% \changes{v1.0d-ltj-3}{2018/01/01}{\cs{Cjascale}を追加}
+% \fi
+%
+% \iffalse
+%<class>
+%<class>\NeedsTeXFormat{LaTeX2e}
+%<class>\ProvidesClass{ltjltxdoc}[2018/01/01 v1.0d-ltj-3 Standard LuaLaTeX-ja file]
+%<*driver>
+\documentclass{ltjltxdoc}
+\GetFileInfo{ltjltxdoc.cls}
+\usepackage[kozuka-pr6n]{luatexja-preset}
+\usepackage{unicode-math}
+\setmathfont{Latin Modern Math}
+\title{Lua\LaTeX-jaドキュメント記述用クラス}
+\author{Lua\TeX-jaプロジェクト}
+\date{\filedate}
+\begin{document}
+ \maketitle
+ \DocInput{ltjltxdoc.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \file{ltjltxdoc}クラスは、\file{ltxdoc}をテンプレートにして、日本語用の
+% 修正を加えています。
+% \begin{macrocode}
+%<*class>
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{ltxdoc}}
+\ProcessOptions
+\LoadClass{ltxdoc}
+% \end{macrocode}
+% \file{ltxdoc}の読み込み後に\file{luatexja}を読み込みます。
+%
+% \changes{v1.60d-ltj-3}{2018/01/01}{\cs{Cjascale}を追加しました。
+% これは、コミュニティ版p\kern-.05em\LaTeX で導入された、
+% 和文スケール($1\,\cs{zw} \div \hbox{要求サイズ}$)を表す実数値マクロです。}
+%
+% \begin{macrocode}
+\RequirePackage{luatexja}
+\def\Cjascale{0.962216}
+% \end{macrocode}
+%
+% \begin{macro}{\normalsize}
+% \begin{macro}{\small}
+% \begin{macro}{\parindent}
+% \changes{v1.0a}{1997/01/23}{\cs{normalsize}, \cs{small}などの再定義}
+% \file{ltxdoc}からロードされる\file{article}クラスでの行間などの設定値で、
+% 日本語の文章を組版すると、行間が狭いように思われるので、多少広くするように
+% 再設定します。また、段落先頭での字下げ量を全角一文字分とします。
+% \begin{macrocode}
+\renewcommand{\normalsize}{%
+ \@setfontsize\normalsize\@xpt{15}%
+ \abovedisplayskip 10\p@ \@plus2\p@ \@minus5\p@
+ \abovedisplayshortskip \z@ \@plus3\p@
+ \belowdisplayshortskip 6\p@ \@plus3\p@ \@minus3\p@
+ \belowdisplayskip \abovedisplayskip
+ \let\@listi\@listI}
+\renewcommand{\small}{%
+ \@setfontsize\small\@ixpt{11}%
+ \abovedisplayskip 8.5\p@ \@plus3\p@ \@minus4\p@
+ \abovedisplayshortskip \z@ \@plus2\p@
+ \belowdisplayshortskip 4\p@ \@plus2\p@ \@minus2\p@
+ \def\@listi{\leftmargin\leftmargini
+ \topsep 4\p@ \@plus2\p@ \@minus2\p@
+ \parsep 2\p@ \@plus\p@ \@minus\p@
+ \itemsep \parsep}%
+ \belowdisplayskip \abovedisplayskip}
+\normalsize
+\setlength\parindent{1\zw}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\file}
+% |\file|マクロは、ファイル名を示すのに用います。
+% \begin{macrocode}
+\providecommand*{\file}[1]{\texttt{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pstyle}
+% |\pstyle|マクロは、ページスタイル名を示すのに用います。
+% \begin{macrocode}
+\providecommand*{\pstyle}[1]{\textsl{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Lcount}
+% |\Lcount|マクロは、カウンタ名を示すのに用います。
+% \begin{macrocode}
+\providecommand*{\Lcount}[1]{\textsl{\small#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Lopt}
+% |\Lopt|マクロは、クラスオプションやパッケージオプションを示すのに用います。
+% \begin{macrocode}
+\providecommand*{\Lopt}[1]{\textsf{#1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dst}
+% |\dst|マクロは、``\dst''を出力する。
+% \begin{macrocode}
+\providecommand\dst{{\normalfont\scshape docstrip}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NFSS}
+% |\NFSS|マクロは、``\NFSS''を出力します。
+% \begin{macrocode}
+\providecommand\NFSS{\textsf{NFSS}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@clineno}
+% \begin{macro}{\mlineplus}
+% |\mlineplus|マクロは、その時点でのマクロコードの行番号に、引数に指定された
+% 行数だけを加えた数値を出力します。たとえば|\mlineplus{3}|とすれば、
+% 直前のマクロコードの行番号(\arabic{CodelineNo})に3を加えた数、
+% ``\mlineplus{3}''が出力されます。
+% \begin{macrocode}
+\newcounter{@clineno}
+\def\mlineplus#1{\setcounter{@clineno}{\arabic{CodelineNo}}%
+ \addtocounter{@clineno}{#1}\arabic{@clineno}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{tsample}
+% |tsample|環境は、環境内に指定された内容を罫線で囲って出力をします。
+% 第一引数は、出力するボックスの高さです。
+% このマクロ内では縦組になることに注意してください。
+% \begin{macrocode}
+\def\tsample#1{%
+ \hbox to\linewidth\bgroup\vrule width.1pt\hss
+ \vbox\bgroup\hrule height.1pt
+ \vskip.5\baselineskip
+ \vbox to\linewidth\bgroup\tate\hsize=#1\relax\vss}
+\def\endtsample{%
+ \vss\egroup
+ \vskip.5\baselineskip
+ \hrule height.1pt\egroup
+ \hss\vrule width.1pt\egroup}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\verb}
+% p\LaTeX{}では、|\verb|コマンドを修正して直前に|\xkanjiskip|が入るように
+% しています。しかし、\file{ltxdoc.cls}が読み込む\file{doc.sty}が上書き
+% してしまいますので、これを再々定義します。\file{doc.sty}での定義は
+%\begin{verbatim}
+% \def\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+% \bgroup \let\do\do@noligs \verbatim@nolig@list
+% \ttfamily \verb@eol@error \let\do\@makeother \dospecials
+% \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
+%\end{verbatim}
+% となっていますので、\file{plcore.dtx}と同様に|\null|を外して|\vadjust{}|を
+% 入れます。
+% \changes{v1.0c}{2016/07/25}{docパッケージが上書きする\cs{verb}を再々定義}
+% \changes{v1.0d}{2017/09/24}{\cs{vadjust\{\}}を追加}
+% \begin{macrocode}
+\def\verb{\relax\ifmmode\hbox\else\leavevmode\vadjust{}\fi
+ \bgroup \let\do\do@noligs \verbatim@nolig@list
+ \ttfamily \verb@eol@error \let\do\@makeother \dospecials
+ \@ifstar{\@sverb}{\@vobeyspaces \frenchspacing \@sverb}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{alxspmode}
+% コマンド名の|\|と16進数を示すための|"|の前にもスペースが入るよう、
+% これらの|alxspmode|の値を変更します。
+% \changes{v1.0b}{1997/07/29}{\cs{}と\texttt{"}の\cs{xspcode}を変更}
+% \changes{v1.0b-ltj}{2011/09/27}{\cs{xspcode}→\cs{ltjsetparameter{alxspmode={...}}}}
+% \begin{macrocode}
+\ltjsetparameter{alxspmode={"5C,3}} %% \
+\ltjsetparameter{alxspmode={"22,3}} %% "
+%</class>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{mod@math@codes}
+% docパッケージでは,ドライバ指定の表示の部分における\texttt{\char`\|}の
+% \cs{mathcode}は\texttt{"226A}になっており,これにより\texttt{\char`\|}が小文字のjで表示されて
+% しまう状況になっています.改善するため,\texttt{"207C}に変更します.
+% \begin{macrocode}
+\def\mod@math@codes{\mathcode`\|="207C \mathcode`\&="2026
+ \mathcode`\-="702D \mathcode`\+="702B
+ \mathcode`\:="703A \mathcode`\=="703D }
+% \end{macrocode}
+% \end{macro}
+% \Finale
+%
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/ltjltxdoc.ins b/macros/luatex/generic/luatexja/src/ltjltxdoc.ins
new file mode 100644
index 0000000000..e07f3bf365
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltjltxdoc.ins
@@ -0,0 +1,10 @@
+%
+% ltjltxdoc.ins
+%
+
+\input docstrip
+\keepsilent
+
+\generateFile{ltjltxdoc.cls}{f}{\from{ltjltxdoc.dtx}{class}}
+
+\endbatchfile
diff --git a/macros/luatex/generic/luatexja/src/ltjsclasses.dtx b/macros/luatex/generic/luatexja/src/ltjsclasses.dtx
new file mode 100644
index 0000000000..be67a2f68e
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltjsclasses.dtx
@@ -0,0 +1,5709 @@
+% \iffalse meta-comment
+%% File: ltjsclasses.dtx
+% -----------------------------------------
+% Original: jsclasses.dtx
+%
+% pLaTeX2ε新ドキュメントクラス(日本語 TeX 開発コミュニティ版)
+% 原作者:奥村晴彦 <okumura@okumuralab.org>
+%
+% Copyright 1993-2016
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% Copyright 1995-1999 ASCII Corporation.
+% Copyright 1999-2016 Haruhiko Okumura
+% Copyright 2016-2018 Japanese TeX Development Community
+% -----------------------------------------
+%
+% \fi
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \iffalse
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+%<article>\ProvidesClass{ltjsarticle}
+%<book>\ProvidesClass{ltjsbook}
+%<report>\ProvidesClass{ltjsreport}
+%<jspf>\ProvidesClass{ltjspf}
+%<kiyou>\ProvidesClass{ltjskiyou}
+%<*driver>
+\ProvidesFile{ltjsclasses.dtx}
+%</driver>
+ [2019/08/12 ltjsclasses ]
+%<*driver>
+\IfFileExists{luatex85.sty}{\RequirePackage{luatex85}}{}
+\documentclass[disablejfam]{ltjsarticle}
+\usepackage{hypdoc}
+\hypersetup{unicode=true}
+\begingroup
+ \suppressfontnotfounderror=1
+ \global\font\testfont=file:KozMinPr6N-Regular.otf
+\endgroup
+\ifx\testfont\nullfont
+ \usepackage[ipaex,nfssonly]{luatexja-preset}
+\else
+ \usepackage[kozuka-pr6n,nfssonly]{luatexja-preset}
+\fi
+\ltjsetparameter{alxspmode={`\*,allow}}
+\ltjsetparameter{alxspmode={`\\,allow}}
+%%%%\usepackage{unicode-math}
+%%%%\setmathfont{Latin Modern Math}
+\addtolength{\textwidth}{-1in}
+\addtolength{\evensidemargin}{1in}
+\addtolength{\oddsidemargin}{1in}
+\addtolength{\marginparwidth}{1in}
+\setlength\marginparpush{0pt}
+% \OnlyDescription
+\CodelineNumbered
+\EnableCrossrefs
+\setcounter{StandardModuleDepth}{1}
+\GetFileInfo{ltjsclasses.dtx}
+\begin{document}
+\DocInput{ltjsclasses.dtx}
+\end{document}
+%</driver>
+% \end{macrocode}
+%
+% \fi
+%
+% \title{Lua\LaTeX-ja用\texttt{jsclasses}互換クラス}
+% \author{Lua\TeX-jaプロジェクト}
+% \date{\filedate}
+% \maketitle
+% \tableofcontents
+%
+% \MakeShortVerb{\|}
+%
+% \section{はじめに}
+%
+% これは,元々奥村晴彦先生により作成され,現在は日本語\TeX 開発コミュニティにより
+% 管理されている\texttt{jsclasses.dtx}をLua\LaTeX-ja用に改変したものです。
+% 次のドキュメントクラス(スタイルファイル)を生成します。
+%
+% [2017-02-13] forum:2121の議論を機に,ltjsreportクラスを新設しました。
+% 従来のltjsbookの |report| オプションと比べると,|abstract| 環境の使い方
+% および挙動がアスキーのjreportに近づきました。
+%
+% \begin{quote}
+% \begin{tabular}{lll}
+% $\langle$\textsf{article}$\rangle$ & \texttt{ltjsarticle.cls} & 論文・レポート用 \\
+% $\langle$\textsf{book}$\rangle$ & \texttt{ltjsbook.cls} & 書籍用 \\
+% $\langle$\textsf{report}$\rangle$ & \texttt{ltjsreport.cls} & レポート用 \\
+% $\langle$\textsf{jspf}$\rangle$ & \texttt{ltjspf.cls} & 某学会誌用 \\
+% $\langle$\textsf{kiyou}$\rangle$ & \texttt{ltjskiyou.cls} & 某紀要用
+% \end{tabular}
+% \end{quote}
+%
+% \subsection{\texttt{jsclasses.dtx}からの主な変更点}
+% 全ての変更点を知りたい場合は,\texttt{jsclasses.dtx}と\texttt{ltjsclasses.dtx}でdiffを
+% とって下さい。zw, zh は全て |\zw|, |\zh| に置き換えられています。
+% \begin{itemize}
+% \item フォントメトリック関係のオプション\texttt{winjis}は単に無視されます。
+% \item 標準では\texttt{jfm-ujis.lua}(Lua\TeX-ja標準のメトリック,OTFパッケージのものがベース)を使用します。
+% \item \texttt{uplatex}オプション,\texttt{autodetect-engine}オプションを
+% 削除してあります(前者ではエラーを出すようにしています)。
+% \item \texttt{disablejfam}オプションはクラス側では何もしません(ただLua\TeX-ja本体に
+% 渡されるだけです).もし
+% \begin{quotation}
+% |! LaTeX Error: Too many math alphabets used in version ****.|
+% \end{quotation}
+% のエラーが起こった場合は,\texttt{lualatex-math}パッケージを読み込んでみて下さい。
+% \item \texttt{papersize}オプションの指定に関わらずPDFのページサイズは適切に
+% 設定されます。
+% \item Lua\TeX-ja同梱のメトリックを用いる限りは,段落の頭にグルーは挿入されません。
+% そのため,オリジナルの\texttt{jsclasses}内にあったhack (|\everyparhook|)は不要になったので,
+% 削除しました。
+% \item 「\texttt{amsmath}との衝突の回避」のコードは,上流で既に対処されているうえ,
+% これがあると\texttt{grfext.sty}を読み込んだ際にエラーを引き起こすので削除しました。
+% \item 本家\texttt{jsclasses}では |\mag| を用いて「10\,pt時の組版結果を本文フォントサイズに合わせ拡大縮小」
+% という方針でしたが,本\texttt{ltjsclasses}ではそのような方法を取っていません。
+% \begin{itemize}
+% \item \texttt{nomag}オプション指定時には,単にレイアウトに用いる各種長さの値をスケールさせるだけです。
+% そのため,例えば本文の文字サイズが17\,ptのときにはcmr10でなくcmr17を用いることになり,組版結果の印象が
+% 異なる恐れがあります。
+% \item \texttt{nomag*}オプション指定時には,上記に加えてオプティカルサイズを調整する(本文ではcmr17の代わりに
+% cmr10を拡大縮小する,など)ため,\LaTeX のフォント選択システムNFSSへパッチを当てます。
+% こうすることで前項に書いた不具合はなくなりますが,かえって別の不具合が起きる可能性
+% はあります\footnote{%
+% \texttt{nomag*}は\texttt{jsclasses}でも利用可能ですが,\texttt{ltjsclasses}では\texttt{jsclasses}とは
+% 別の実装をしています。
+% }。
+% \end{itemize}
+% 標準では\texttt{nomag*}オプションが有効になっています。\texttt{jsclasses}で用意され,かつ既定になっている
+% \texttt{usemag}オプションを指定すると警告を出します。
+% \end{itemize}
+%
+% [2014-02-07 LTJ] jsclasses 2014-02-07 ベースにしました。
+%
+% [2014-07-26 LTJ] 縦組用和文フォントの設定を加えました。
+%
+% [2014-12-24 LTJ] |\@setfontsize| 中の和欧文間空白の設定で if 文が抜けていたのを直しました。
+%
+% [2016-01-30 LTJ] |\rmfamily| 他で和文フォントファミリも変更するコードを
+% Lua\TeX-ja カーネル内に移しました。
+%
+% [2016-03-21 LTJ] Lua\TeX~beta-0.87.0 ではPDF出力時に|\mag|が使用できなくなったので,
+% ZRさんの\texttt{bxjscls}を参考に使わないように書き換えました。
+%
+% [2016-03-31 LTJ] \texttt{xreal}オプションを標準で有効にしました。
+%
+% [2016-07-12 LTJ] \texttt{jsclasses}開発版に合わせ,\texttt{real},~\texttt{xreal}オプションの名称を変更するなどの変更を行いました。
+%
+% [2016-07-18 LTJ] \texttt{usemag}オプションが指定されると警告を出すようにしました。
+%
+% [2016-07-21 LTJ] \LaTeX 等のロゴの再定義で,\texttt{jslogo}パッケージがあればそちらを読み込むことにしました。
+%
+% [2016-10-13 LTJ] \texttt{slide}オプションの使用時にエラーが出るのを修正.
+%
+% \StopEventually{}
+%
+% 以下では実際のコードに即して説明します。
+%
+% \begin{macro}{\jsc@clsname}
+%
+% 文書クラスの名前です。エラーメッセージ表示などで使われます。
+%
+% \begin{macrocode}
+%<article>\def\jsc@clsname{ltjsarticle}
+%<book>\def\jsc@clsname{ltjsbook}
+%<report>\def\jsc@clsname{ltjsreport}
+%<jspf>\def\jsc@clsname{ltjspf}
+%<kiyou>\def\jsc@clsname{ltjskiyou}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Lua\TeX-jaの読み込み}
+%
+% 和文スケール値を設定した後に,Lua\TeX-jaを読み込みます。
+% \begin{macrocode}
+%<!jspf>\def\Cjascale{0.924715}
+%<jspf>\def\Cjascale{0.903375}
+\RequirePackage{luatexja}
+% \end{macrocode}
+%
+% \section{オプション}
+%
+% これらのクラスは |\documentclass{ltjsarticle}|
+% あるいは |\documentclass[オプション]{ltjsarticle}|
+% のように呼び出します。
+%
+% まず,オプションに関連するいくつかのコマンドやスイッチ(論理変数)を定
+% 義します。
+%
+% \begin{macro}{\if@restonecol}
+%
+% 段組のときに真になる論理変数です。
+%
+% \begin{macrocode}
+\newif\if@restonecol
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@titlepage}
+%
+% これを真にすると表題,概要を独立したページに出力します。
+%
+% \begin{macrocode}
+\newif\if@titlepage
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@openright}
+%
+% |\chapter|,|\part| を右ページ起こしにするかどうかです。
+% 横組の書籍では真が標準で,要するに片起こし,奇数ページ起こしになります。
+%
+% \begin{macrocode}
+%<book|report>\newif\if@openright
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@openleft}
+%
+% [2017-02-24] |\chapter|,|\part| を左ページ起こしにするかどうかです。
+%
+% \begin{macrocode}
+%<book|report>\newif\if@openleft
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@mainmatter}
+%
+% 真なら本文,偽なら前付け・後付けです。
+% 偽なら |\chapter| で章番号が出ません。
+%
+% \begin{macrocode}
+%<book>\newif\if@mainmatter \@mainmattertrue
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\if@enablejfam}
+%
+% 和文フォントを数式フォントとして登録するかどうかを示すスイッチですが,
+% 実際には用いられません。
+%
+% \begin{macrocode}
+\newif\if@enablejfam \@enablejfamtrue
+% \end{macrocode}
+% \end{macro}
+%
+% 以下で各オプションを宣言します。
+%
+% \paragraph{用紙サイズ}
+%
+% JISやISOのA0判は面積 $1\,\mathrm{m}^2$,縦横比 $1:\sqrt{2}$
+% の長方形の辺の長さを mm 単位に切り捨てたものです。
+% これを基準として順に半截しては mm 単位に切り捨てたものがA1,A2,…です。
+%
+% B判はJISとISOで定義が異なります。
+% JISではB0判の面積が $1.5\,\mathrm{m}^2$ ですが,
+% ISOではB1判の辺の長さがA0判とA1判の辺の長さの幾何平均です。
+% したがってISOのB0判は $1000\,\mathrm{mm} \times 1414\,\mathrm{mm}$ です。
+% このため,\LaTeXe の \texttt{b5paper}
+% は $250\,\mathrm{mm} \times 176\,\mathrm{mm}$ ですが,
+% \pLaTeXe の \texttt{b5paper}
+% は $257\,\mathrm{mm} \times 182\,\mathrm{mm}$ になっています。
+% ここでは\pLaTeXe にならってJISに従いました。
+%
+% デフォルトは \texttt{a4paper} です。
+%
+% \texttt{b5var}(B5変形,182mm×230mm),
+% \texttt{a4var}(A4変形,210mm×283mm)を追加しました。
+%
+% \begin{macrocode}
+\DeclareOption{a3paper}{%
+ \setlength\paperheight {420mm}%
+ \setlength\paperwidth {297mm}}
+\DeclareOption{a4paper}{%
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5paper}{%
+ \setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}}
+\DeclareOption{a6paper}{%
+ \setlength\paperheight {148mm}%
+ \setlength\paperwidth {105mm}}
+\DeclareOption{b4paper}{%
+ \setlength\paperheight {364mm}%
+ \setlength\paperwidth {257mm}}
+\DeclareOption{b5paper}{%
+ \setlength\paperheight {257mm}%
+ \setlength\paperwidth {182mm}}
+\DeclareOption{b6paper}{%
+ \setlength\paperheight {182mm}%
+ \setlength\paperwidth {128mm}}
+\DeclareOption{a4j}{%
+ \setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{a5j}{%
+ \setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}}
+\DeclareOption{b4j}{%
+ \setlength\paperheight {364mm}%
+ \setlength\paperwidth {257mm}}
+\DeclareOption{b5j}{%
+ \setlength\paperheight {257mm}%
+ \setlength\paperwidth {182mm}}
+\DeclareOption{a4var}{%
+ \setlength\paperheight {283mm}%
+ \setlength\paperwidth {210mm}}
+\DeclareOption{b5var}{%
+ \setlength\paperheight {230mm}%
+ \setlength\paperwidth {182mm}}
+\DeclareOption{letterpaper}{%
+ \setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{legalpaper}{%
+ \setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}}
+\DeclareOption{executivepaper}{%
+ \setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}}
+% \end{macrocode}
+%
+% \paragraph{横置き}
+%
+% 用紙の縦と横の長さを入れ換えます。
+%
+% \begin{macrocode}
+\newif\if@landscape
+\@landscapefalse
+\DeclareOption{landscape}{\@landscapetrue}
+% \end{macrocode}
+%
+% \paragraph{slide}
+%
+% オプション \texttt{slide} を新設しました。
+%
+% [2016-10-08] \texttt{slide} オプションは article 以外では使い物にならなかったので,
+% 簡単のため article のみで使えるオプションとしました。
+%
+% \begin{macrocode}
+\newif\if@slide
+\@slidefalse
+% \end{macrocode}
+%
+% \paragraph{サイズオプション}
+%
+% 10pt,11pt,12pt のほかに,8pt,9pt,14pt,17pt,21pt,25pt,30pt,36pt,43pt を追加しました。
+% これは等比数列になるように選んだものです(従来の 20pt も残しました)。
+% |\@ptsize| の定義が変だったのでご迷惑をおかけしましたが,
+% 標準的なドキュメントクラスと同様にポイント数から10を引いたものに直しました。
+%
+% [2003-03-22] 14Qオプションを追加しました。
+%
+% [2003-04-18] 12Qオプションを追加しました。
+%
+% [2016-07-08] |\mag| を使わずに各種寸法をスケールさせるためのオプション \texttt{nomag} を新設しました。
+% \texttt{usemag} オプションの指定で従来通りの動作となります。デフォルトは \texttt{usemag} です。
+%
+% [2016-07-24] オプティカルサイズを調整するためにNFSSへパッチを当てるオプション \texttt{nomag*} を新設しました。
+%
+% \begin{macrocode}
+\def\jsc@magscale{1}
+%<*article>
+\DeclareOption{slide}{\@slidetrue\def\jsc@magscale{3.583}\@landscapetrue\@titlepagetrue}
+%</article>
+\DeclareOption{8pt} {\def\jsc@magscale{0.833}}% 1.2^(-1)
+\DeclareOption{9pt} {\def\jsc@magscale{0.913}}% 1.2^(-0.5}
+\DeclareOption{10pt}{\def\jsc@magscale{1}}
+\DeclareOption{11pt}{\def\jsc@magscale{1.095}}% 1.2^0.5
+\DeclareOption{12pt}{\def\jsc@magscale{1.200}}
+\DeclareOption{14pt}{\def\jsc@magscale{1.440}}
+\DeclareOption{17pt}{\def\jsc@magscale{1.728}}
+\DeclareOption{20pt}{\def\jsc@magscale{2}}
+\DeclareOption{21pt}{\def\jsc@magscale{2.074}}
+\DeclareOption{25pt}{\def\jsc@magscale{2.488}}
+\DeclareOption{30pt}{\def\jsc@magscale{2.986}}
+\DeclareOption{36pt}{\def\jsc@magscale{3.583}}
+\DeclareOption{43pt}{\def\jsc@magscale{4.300}}
+\DeclareOption{12Q} {\def\jsc@magscale{0.923}}% 1pt*12Q/13Q
+\DeclareOption{14Q} {\def\jsc@magscale{1.077}}% 1pt*14Q/13Q
+\DeclareOption{10ptj}{\def\jsc@magscale{1.085}}% 1pt*10bp/13Q
+\DeclareOption{10.5ptj}{\def\jsc@magscale{1.139}}
+\DeclareOption{11ptj}{\def\jsc@magscale{1.194}}
+\DeclareOption{12ptj}{\def\jsc@magscale{1.302}}
+% \end{macrocode}
+%
+% \paragraph{オプティカルサイズの補正}
+% \texttt{nomag*}オプション指定時には,本文のフォントサイズが10pt以外の場合に
+% オプティカルサイズの補正を行うためにNFSSにパッチを当てます。
+% 現在の\texttt{ltjsclasses}ではこのパッチ当ては標準では行いますが,
+% 将来どうなるかわからないので\texttt{nomag}で無効化することができるようにしました。
+%
+% \texttt{noxreal},~\texttt{real}は旧来の互換性として今は残してありますが,2017年7月に削除する予定です。
+%
+% [2018-01-14] \texttt{noxreal},~\texttt{real} を削除しました.また,内部命令の名称を
+% \texttt{jsclasses}に合わせました.
+%
+% \begin{macrocode}
+\newif\ifjsc@mag@xreal
+\jsc@mag@xrealtrue
+\DeclareOption{nomag*}{\jsc@mag@xrealtrue}
+\DeclareOption{nomag}{\jsc@mag@xrealfalse}
+\DeclareOption{usemag}{%
+ \ClassWarningNoLine{\jsc@clsname}{%
+ This \jsc@clsname\space cls does not support `usemag'\MessageBreak
+ option, since LuaTeX does not support \string\mag\MessageBreak in pdf output}%
+ \jsc@mag@xrealtrue}
+% \end{macrocode}
+%
+%
+% \paragraph{トンボオプション}
+%
+% トンボ(crop marks)を出力します。
+% 実際の処理は\texttt{lltjcore.sty}で行います。
+% オプション \texttt{tombow} で日付付きのトンボ,
+% オプション \texttt{tombo} で日付なしのトンボを出力します。
+% これらはアスキー版のままです。
+% カウンタ |\hour|,|\minute| は\texttt{luatexja-compat.sty}で宣言されています。
+%
+% \begin{macrocode}
+\hour\time \divide\hour by 60\relax
+\@tempcnta\hour \multiply\@tempcnta 60\relax
+\minute\time \advance\minute-\@tempcnta
+\DeclareOption{tombow}{%
+ \tombowtrue \tombowdatetrue
+ \setlength{\@tombowwidth}{.1\p@}%
+ \@bannertoken{%
+ \jobname\space(\number\year-\two@digits\month-\two@digits\day
+ \space\two@digits\hour:\two@digits\minute)}%
+ \maketombowbox}
+\DeclareOption{tombo}{%
+ \tombowtrue \tombowdatefalse
+ \setlength{\@tombowwidth}{.1\p@}%
+ \maketombowbox}
+% \end{macrocode}
+%
+% \paragraph{面付け}
+%
+% オプション \texttt{mentuke} で幅ゼロのトンボを出力します。
+% 面付けに便利です。これもアスキー版のままです。
+%
+% \begin{macrocode}
+\DeclareOption{mentuke}{%
+ \tombowtrue \tombowdatefalse
+ \setlength{\@tombowwidth}{\z@}%
+ \maketombowbox}
+% \end{macrocode}
+%
+% \paragraph{両面,片面オプション}
+%
+% \texttt{twoside} で奇数ページ・偶数ページのレイアウトが変わります。
+%
+% [2003-04-29] \texttt{vartwoside} でどちらのページも傍注が右側になります。
+%
+% \begin{macrocode}
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
+\DeclareOption{vartwoside}{\@twosidetrue \@mparswitchfalse}
+% \end{macrocode}
+%
+% \paragraph{二段組}
+%
+% \texttt{twocolumn} で二段組になります。
+%
+% \begin{macrocode}
+\DeclareOption{onecolumn}{\@twocolumnfalse}
+\DeclareOption{twocolumn}{\@twocolumntrue}
+% \end{macrocode}
+%
+% \paragraph{表題ページ}
+%
+% \texttt{titlepage} で表題・概要を独立したページに出力します。
+%
+% \begin{macrocode}
+\DeclareOption{titlepage}{\@titlepagetrue}
+\DeclareOption{notitlepage}{\@titlepagefalse}
+% \end{macrocode}
+%
+% \paragraph{右左起こし}
+%
+% 書籍では章は通常は奇数ページ起こしになりますが,横組ではこれを
+% \texttt{openright} と表すことにしてあります。
+% \texttt{openany} で偶数ページからでも始まるようになります。
+%
+% [2017-02-24] \texttt{openright} は横組では奇数ページ起こし,縦組では
+% 偶数ページ起こしを表します。ややこしいですが,これは\LaTeX の標準クラスが
+% 西欧の横組事情しか考慮せずに,奇数ページ起こしと右起こしを一緒にしてしまっ
+% たせいです。縦組での奇数ページ起こしと横組での偶数ページ起こしも表現したい
+% ので,ltjsclassesでは新たに \texttt{openleft} も追加しました。
+%
+% \begin{macrocode}
+%<book|report>\DeclareOption{openright}{\@openrighttrue\@openleftfalse}
+%<book|report>\DeclareOption{openleft}{\@openlefttrue\@openrightfalse}
+%<book|report>\DeclareOption{openany}{\@openrightfalse\@openleftfalse}
+% \end{macrocode}
+%
+% \paragraph{eqnarray環境と数式の位置}
+%
+% 森本さんのご教示にしたがって前に移動しました。
+%
+% \begin{environment}{eqnarray}
+%
+% \LaTeX の |eqnarray| 環境では |&| でできるアキが大きすぎる
+% ようですので,少し小さくします。
+% また,中央の要素も |\displaystyle| にします。
+%
+% \begin{macrocode}
+\def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue
+ \m@th
+ \global\@eqcnt\z@
+ \tabskip\@centering
+ \let\\\@eqncr
+ $$\everycr{}\halign to\displaywidth\bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@ $\displaystyle{##}$\hfil\tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip
+ \cr}
+% \end{macrocode}
+% \end{environment}
+%
+% \texttt{leqno} で数式番号が左側になります。
+% \texttt{fleqn} で数式が本文左端から一定距離のところに出力されます。
+% 森本さんにしたがって訂正しました。
+%
+% \begin{macrocode}
+\DeclareOption{leqno}{\input{leqno.clo}}
+\DeclareOption{fleqn}{\input{fleqn.clo}%
+% fleqn用のeqnarray環境の再定義
+ \def\eqnarray{%
+ \stepcounter{equation}%
+ \def\@currentlabel{\p@equation\theequation}%
+ \global\@eqnswtrue\m@th
+ \global\@eqcnt\z@
+ \tabskip\mathindent
+ \let\\=\@eqncr
+ \setlength\abovedisplayskip{\topsep}%
+ \ifvmode
+ \addtolength\abovedisplayskip{\partopsep}%
+ \fi
+ \addtolength\abovedisplayskip{\parskip}%
+ \setlength\belowdisplayskip{\abovedisplayskip}%
+ \setlength\belowdisplayshortskip{\abovedisplayskip}%
+ \setlength\abovedisplayshortskip{\abovedisplayskip}%
+ $$\everycr{}\halign to\linewidth% $$
+ \bgroup
+ \hskip\@centering$\displaystyle\tabskip\z@skip{##}$\@eqnsel
+ &\global\@eqcnt\@ne \hfil$\displaystyle{{}##{}}$\hfil
+ &\global\@eqcnt\tw@
+ $\displaystyle{##}$\hfil \tabskip\@centering
+ &\global\@eqcnt\thr@@ \hb@xt@\z@\bgroup\hss##\egroup
+ \tabskip\z@skip\cr
+ }}
+% \end{macrocode}
+%
+% \paragraph{文献リスト}
+%
+% 文献リストをopen形式(著者名や書名の後に改行が入る)で出力します。
+% これは使われることはないのでコメントアウトしてあります。
+%
+% \begin{macrocode}
+% \DeclareOption{openbib}{%
+% \AtEndOfPackage{%
+% \renewcommand\@openbib@code{%
+% \advance\leftmargin\bibindent
+% \itemindent -\bibindent
+% \listparindent \itemindent
+% \parsep \z@}%
+% \renewcommand\newblock{\par}}}
+% \end{macrocode}
+%
+% \paragraph{数式フォントとして和文フォントを登録しないオプション}
+%
+% \pTeX では数式中では16通りのフォントしか使えませんでしたが,Lua\TeX では
+% Omega拡張が取り込まれていて256通りのフォントが使えます。
+% ただし,\LaTeXe カーネルでは未だに数式ファミリの数は16個に制限されているので,
+% 実際に使用可能な数式ファミリの数を増やすためには\texttt{lualatex-math}パッケージを
+% 読み込む必要があることに注意が必要です。
+%
+% [2018-10-08 LTJ] Lua\TeX-ja本体が\texttt{disablejfam}オプションをサポートしたので,
+% クラスファイルからは削除します.
+%
+% [2019-08-12 LTJ] ……と思いましたが,``Unused global option(s): [disablejfam]''警告が
+% 出てしまいますので,「何もしない」クラスオプションとして形だけ定義します.
+% \begin{macrocode}
+%<*article|report|book>
+\DeclareOption{disablejfam}{}
+%</article|report|book>
+% \end{macrocode}
+%
+% \paragraph{ドラフト}
+%
+% \texttt{draft} でoverfull boxの起きた行末に5ptの罫線を引きます。
+%
+% [2016-07-13] |\ifdraft| を定義するのをやめました。
+%
+% \begin{macrocode}
+\DeclareOption{draft}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+% \end{macrocode}
+%
+% \paragraph{和文フォントメトリックの選択}
+%
+% ここではOTFパッケージのメトリックを元とした,\texttt{jfm-ujis.lua}メトリックを標準で使います。
+% 古い\texttt{min10},\texttt{goth10}互換のメトリックを使いたいときは\texttt{mingoth}
+% というオプションを指定します。
+% \pTeX でよく利用される\texttt{jis}フォントメトリックと互換のメトリックを使いたい場合は,
+% \texttt{ptexjis}というオプションを指定します。
+% \texttt{winjis}メトリックは用済みのため,\texttt{winjis}オプションは無視されます。
+%
+% [2016-11-09] pLaTeX / upLaTeX を自動判別するオプション \texttt{autodetect-engine} を新設しました。
+%
+% [2016-11-24 LTJ] \texttt{autodetect-engine} はLua\TeX-jaでは意味がないので警告を表示させます.
+%
+% [2018-07-30 LTJ] \texttt{uplatex} 指定時のエラーが正しく表示されなかったので修正しました.
+%
+% \begin{macrocode}
+\newif\ifmingoth
+\mingothfalse
+\newif\ifjisfont
+\jisfontfalse
+\newif\ifptexjis
+\ptexjisfalse
+\DeclareOption{winjis}{%
+ \ClassWarningNoLine{\jsc@clsname}{this class does not support `winjis' option}}
+\DeclareOption{uplatex}{%
+ \ClassError{\jsc@clsname}{this class does not support `uplatex' option}}
+\DeclareOption{autodetect-engine}{%
+ \ClassWarningNoLine{\jsc@clsname}{this class does not support `autodetect-engine' option}}
+\DeclareOption{mingoth}{\mingothtrue}
+\DeclareOption{ptexjis}{\ptexjistrue}
+\DeclareOption{jis}{\jisfonttrue}
+% \end{macrocode}
+%
+% \paragraph{papersizeスペシャルの利用}
+%
+% \texttt{ltjsclasses}では\texttt{papersize}オプションの有無に関わらず,
+% PDFのページサイズは適切に設定されるので,削除しました。
+%
+% \paragraph{英語化}
+%
+% オプション \texttt{english} を新設しました。
+%
+% \begin{macrocode}
+\newif\if@english
+\@englishfalse
+\DeclareOption{english}{\@englishtrue}
+% \end{macrocode}
+%
+% \paragraph{ltjsbookをltjsreportもどきに}
+%
+% オプション \texttt{report} を新設しました。
+%
+% [2017-02-13] 従来は「ltjsreport相当」をltjsbookの \texttt{report} オプションで提供して
+% いましたが,新しくltjsreportクラスも作りました。どちらでもお好きな方を使ってください。
+%
+% \begin{macrocode}
+%<*book>
+\newif\if@report
+\@reportfalse
+\DeclareOption{report}{\@reporttrue\@openrightfalse\@twosidefalse\@mparswitchfalse}
+%</book>
+% \end{macrocode}
+%
+% \paragraph{\texttt{jslogo}パッケージの読み込み}
+%
+% \LaTeX 関連のロゴを再定義する\texttt{jslogo}パッケージを
+% 読み込まないオプション\texttt{nojslogo}を新設しました。
+% \texttt{jslogo}オプションの指定で従来どおりの動作となります。
+% デフォルトは\texttt{jslogo}で,すなわちパッケージを読み込みます。
+% \begin{macrocode}
+\newif\if@jslogo \@jslogotrue
+\DeclareOption{jslogo}{\@jslogotrue}
+\DeclareOption{nojslogo}{\@jslogofalse}
+% \end{macrocode}
+%
+% \paragraph{オプションの実行}
+%
+% デフォルトのオプションを実行します。
+% |multicols| や |url| を |\RequirePackage| するのはやめました。
+%
+% \begin{macrocode}
+%<article>\ExecuteOptions{a4paper,oneside,onecolumn,notitlepage,final}
+%<book>\ExecuteOptions{a4paper,twoside,onecolumn,titlepage,openright,final}
+%<report>\ExecuteOptions{a4paper,oneside,onecolumn,titlepage,openany,final}
+%<jspf>\ExecuteOptions{a4paper,twoside,twocolumn,notitlepage,fleqn,final}
+%<kiyou>\ExecuteOptions{a4paper,twoside,twocolumn,notitlepage,final}
+\ProcessOptions
+% \end{macrocode}
+%
+% 後処理
+%
+% \begin{macrocode}
+\if@slide
+ \def\maybeblue{\@ifundefined{ver@color.sty}{}{\color{blue}}}
+\fi
+\if@landscape
+ \setlength\@tempdima {\paperheight}
+ \setlength\paperheight{\paperwidth}
+ \setlength\paperwidth {\@tempdima}
+\fi
+% \end{macrocode}
+%
+% \paragraph{基準となる行送り}
+%
+% \begin{macro}{\n@baseline}
+%
+% 基準となる行送りをポイント単位で表したものです。
+%
+% \begin{macrocode}
+%<article|book|report>\if@slide\def\n@baseline{13}\else\def\n@baseline{16}\fi
+%<jspf>\def\n@baseline{14.554375}
+%<kiyou>\def\n@baseline{14.897}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{拡大率の設定}
+%
+% サイズの変更は\TeX のプリミティブ |\mag| を使って行います。
+% 9ポイントについては行送りも若干縮めました。
+% サイズについては全面的に見直しました。
+%
+% [2008-12-26] 1000 / |\mag| に相当する |\inv@mag| を定義しました。
+% |truein| を使っていたところを |\inv@mag in| に直しましたので,
+% |geometry| パッケージと共存できると思います。
+% なお,新ドキュメントクラス側で |10pt| 以外にする場合の注意:
+% \begin{itemize}
+% \item |geometry| 側でオプション |truedimen| を指定してください。
+% \item |geometry| 側でオプション |mag| は使えません。
+% \end{itemize}
+%
+% [2016-03-21 LTJ] |\mag| を使わないように全面的に書き換えました。
+% |\ltjs@mpt| に「拡大率だけ大きくしたpt」の値が格納されます。
+% \texttt{bxjscls}と同様に,|\@ptsize| は |10pt|,~|11pt|,~|12pt| オプションが指定された時だけ
+% 従来通り0,~1,~2と設定し,それ以外の場合は$-20$とすることにしました。
+% |\inv@mag| はもはや定義していません。
+%
+% [2016-03-26 LTJ] |\ltjs@magscale| に拡大率を格納した後,それを用いて |\ltjs@mpt| を
+% 設定するようにしました。
+%
+% [2016-07-08] |\jsc@mpt| および |\jsc@mmm| に,それぞれ1ptおよび1mmを拡大させた値を格納します。
+% 以降のレイアウト指定ではこちらを使います。
+%
+% [2016-07-12 LTJ] |\ltjs@...| を本家に合わせて |\jsc@...| に名称変更しました。
+% \begin{macrocode}
+%<*kiyou>
+\def\jsc@magscale{0.9769230}
+%</kiyou>
+\newdimen\jsc@mpt
+\newdimen\jsc@mmm
+\jsc@mpt=\jsc@magscale\p@
+\jsc@mmm=\jsc@magscale mm
+\ifdim\jsc@mpt<.92\p@ % 8pt, 9pt 指定時
+ \def\n@baseline{15}%
+\fi
+\newcommand{\@ptsize}{0}
+\ifdim\jsc@mpt=1.0954\p@ \renewcommand{\@ptsize}{1}\else
+\ifdim\jsc@mpt=1.2\p@ \renewcommand{\@ptsize}{2}\else
+\renewcommand{\@ptsize}{-20}\fi\fi
+% \end{macrocode}
+%
+% \paragraph{オプティカルサイズの補正}
+% \leavevmode\par
+% [2016-03-26 LTJ] |xreal|オプションの指定時には,\texttt{bxjscls}の|magstyle=xreal|
+% オプションのように,オプティカルの補正を行うためにNFSSにパッチを当てます。
+% パッチは,概ねmiscさんによる「js*.cls 同様の文字サイズ設定を
+% |\mag|によらずに行う方法:試案」
+% (\texttt{http://oku.edu.mie-u.ac.jp/\textasciitilde okumura/texfaq/qa/28416.html})の
+% 方法に沿っていますが,拡大/縮小するところの計算にはLuaを用いています。
+%
+% なお,\TeX 内部で長さはsp単位の整数倍で表現されているので,数spの誤差は仕方がないです。
+% そのため,事前に\texttt{type1cm}パッケージを読みこんでおきます。
+%
+% [2016-03-28 LTJ] |\luafunction|を使うようにし,また本文のフォントサイズが10\,ptのときには
+% (不要なので)パッチを当てないことにしました。
+%
+% [2016-04-04 LTJ] NFSSへのパッチを修正。
+%
+% [2017-01-23 LTJ] \LaTeXe\ 2017-01-01以降ではTUエンコーディングが標準なので,
+% \texttt{type1cm}パッケージは読み込まないようにしました.
+%
+% [2017-02-17 LTJ] |\directlua|中で出力される数字のカテゴリーコードが12になるようにしました.
+% この保証をしないと例えば\texttt{listings}パッケージで無限ループになります.
+%
+% [2018-07-02 LTJ] 10ptオプションが指定されており,
+% 実際にはオプティカルサイズの補正が不要なときは「|xreal|オプションは指定されなかった」という
+% 扱いにしておきます.
+% \begin{macrocode}
+\ifjsc@mag@xreal
+\ifdim\jsc@mpt=\p@\jsc@mag@xrealfalse\else
+ \expandafter\let\csname OT1/cmr/m/n/10\endcsname\relax
+ \expandafter\let\csname TU/lmr/m/n/10\endcsname\relax
+ \expandafter\let\csname OMX/cmex/m/n/10\endcsname\relax
+ \newluafunction\ltjs@@magnify@font@calc
+ \begingroup\catcode`\%=12\relax
+ \directlua{
+ local getdimen, mpt=tex.getdimen, tex.getdimen('jsc@mpt')/65536
+ local t = lua.get_functions_table()
+ t[\the\ltjs@@magnify@font@calc] = function()
+ tex.sprint(-2,math.floor(0.5+mpt*getdimen('dimen@')))
+ end
+ function luatexja.ltjs_unmagnify_fsize(a)
+ local s = luatexja.print_scaled(math.floor(0.5+a/mpt*65536))
+ tex.sprint(-2, (s:match('%.0$')) and s:sub(1,-3) or s )
+ end
+ }
+ \endgroup
+ \def\ltjs@magnify@external@font#1 at#2 at#3\@nil{%
+ \def\@tempa{#1}\def\@tempb{#2}%
+ \ifx\@tempb\@empty
+ \edef\@tempb{ scaled\directlua{%
+ tex.sprint(-2,math.floor(0.5+\jsc@magscale*1000))
+ }}%
+ \else
+ \dimen@\@tempb\relax
+ \edef\@tempb{ at\luafunction\ltjs@@magnify@font@calc sp}%
+ \fi
+ \edef\@tempa{\def\noexpand\external@font{\@tempa\@tempb}}%
+ }
+ \let\ltjs@orig@get@external@font=\get@external@font
+ \def\get@external@font{%
+ \edef\f@size{\directlua{luatexja.ltjs_unmagnify_fsize(\f@size)}}%
+ \ltjs@orig@get@external@font
+ \begingroup
+ \edef\@tempa{\external@font\space at\space at}%
+ \expandafter\ltjs@magnify@external@font\@tempa\@nil
+ \expandafter\endgroup\@tempa
+ }
+\fi\fi
+% \end{macrocode}
+%
+% [2016-11-16] latex.ltx (ltspace.dtx)で定義されている |\smallskip| の,
+% 単位 |pt| を |\jsc@mpt| に置き換えた |\jsc@smallskip| を定義します。
+% これは |\maketitle| で用いられます。
+% |\jsc@medskip| と |\jsc@bigskip| は必要ないのでコメントアウトしています。
+%
+% \begin{macro}{\jsc@smallskip}
+% \begin{macro}{\jsc@medskip}
+% \begin{macro}{\jsc@bigskip}
+% \begin{macrocode}
+\def\jsc@smallskip{\vspace\jsc@smallskipamount}
+%\def\jsc@medskip{\vspace\jsc@medskipamount}
+%\def\jsc@bigskip{\vspace\jsc@bigskipamount}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\jsc@smallskipamount}
+% \begin{macro}{\jsc@medskipamount}
+% \begin{macro}{\jsc@bigskipamount}
+% \begin{macrocode}
+\newskip\jsc@smallskipamount
+\jsc@smallskipamount=3\jsc@mpt plus 1\jsc@mpt minus 1\jsc@mpt
+%\newskip\jsc@medskipamount
+%\jsc@medskipamount =6\jsc@mpt plus 2\jsc@mpt minus 2\jsc@mpt
+%\newskip\jsc@bigskipamount
+%\jsc@bigskipamoun =12\jsc@mpt plus 4\jsc@mpt minus 4\jsc@mpt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+% \paragraph{PDFの用紙サイズの設定}
+%
+% \begin{macro}{\pagewidth}
+% \begin{macro}{\pageheight}
+% \begin{macro}{\stockwidth}
+% \begin{macro}{\stockheight}
+% 出力のPDFの用紙サイズをここで設定しておきます。
+% |tombow| が真のときは2インチ足しておきます。
+%
+% [2015-10-18 LTJ] Lua\TeX\ 0.81.0ではプリミティブの名称変更がされたので,
+% それに合わせておきます。
+%
+% [2016-07-12 LTJ] luatex.defが新しくなったことに対応するaminophenさんのパッチを取り込みました。
+%
+% [2017-01-11] トンボオプションが指定されているとき「だけ」|\stockwidth|,
+% |\stockheight|を定義するようにしました。
+%
+% \begin{macrocode}
+\iftombow
+ \newlength{\stockwidth}
+ \newlength{\stockheight}
+ \setlength{\stockwidth}{\paperwidth}
+ \setlength{\stockheight}{\paperheight}
+ \advance \stockwidth 2in
+ \advance \stockheight 2in
+ \ifdefined\pdfpagewidth
+ \setlength{\pdfpagewidth}{\stockwidth}
+ \setlength{\pdfpageheight}{\stockheight}
+ \else
+ \setlength{\pagewidth}{\stockwidth}
+ \setlength{\pageheight}{\stockheight}
+ \fi
+\else
+ \ifdefined\pdfpagewidth
+ \setlength{\pdfpagewidth}{\paperwidth}
+ \setlength{\pdfpageheight}{\paperheight}
+ \else
+ \setlength{\pagewidth}{\paperwidth}
+ \setlength{\pageheight}{\paperheight}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{和文フォントの変更}
+%
+% JISの1ポイントは0.3514mm(約1/72.28インチ),
+% PostScriptの1ポイントは1/72インチですが,
+% \TeX では1/72.27インチを1pt(ポイント),
+% 1/72インチを1bp(ビッグポイント)と表します。
+% QuarkXPressなどのDTPソフトは標準で1/72インチを1ポイント
+% としますが,以下ではすべて1/72.27インチを1ptとしています。
+% 1インチは定義により25.4mmです。
+%
+% \pTeX (アスキーが日本語化した\TeX )では,例えば従来のフォントメトリック
+% \texttt{min10}やJISフォントメトリックでは「公称10ポイントの和文フォントは,
+% 実際には9.62216ptで出力される(メトリック側で0.962216倍される)」という
+% 仕様になっています。
+% 一方,Lua\TeX-jaの提供するメトリックでは,そのようなことはありません。
+% 公称10ポイントの和文フォントは,10ポイントで出力されます。
+%
+% この\texttt{ltjsclasses}でも,派生元の\texttt{jsclasses}と同じように,
+% この公称10ポイントのフォントをここでは13級に縮小して
+% 使うことにします。そのためには,$13\,\textrm{Q}/10\,\textrm{pt}\simeq 0.924715$倍
+% すればいいことになります。
+%
+% |\ltj@stdmcfont|,~|\ltj@stdgtfont| による,デフォルトで使われる明朝・ゴシックのフォントの
+% 設定に対応しました。この2つの命令の値はユーザが日々の利用でその都度指定するものではなく,
+% 何らかの理由で非埋め込みフォントが正しく利用できない場合にのみ\texttt{luatexja.cfg}によって
+% セットされるものです。
+%
+% [2014-07-26 LTJ] なお,現状のところ,縦組用JFMは\texttt{jfm-ujisv.lua}しか準備していません。
+%
+% [2016-03-21 LTJ] 拡大率の計算で1~ptを$1/72.27$インチでなく0.3514\,mmと間違えて扱っていたのを修正。
+%
+% [2017-12-31] 和文スケール($1\,\mathrm{zw} \div \hbox{要求サイズ}$)を
+% 表す実数値マクロ |\Cjascale| を定義しました。
+%
+%
+% これにより,公称10ポイントの和文フォントを0.924715倍したことにより,
+% 約9.25ポイント,
+% DTPで使う単位(1/72インチ)では9.21ポイントということになり,
+% 公称10ポイントといっても実は9ポイント強になります。
+%
+% 某学会誌では,
+% 和文フォントをPostScriptの9ポイントにするために,
+% $0.9*72.27/72 \simeq 0.903375$ 倍します。
+%
+% [2018-09-23 LTJ] 実際の|\Cjascale|の定義はLua\TeX-jaの読み込み前に移動しました.
+% こうすることによって「0.962216倍された和文フォント」という実際には使われない和文フォントを
+% 読み込む必要がなくなります.
+%
+%
+% 実際にフォントの再定義を行う部分です.
+%
+% [2018-09-23 LTJ] |\Cjascale|の設定を前倒ししたことに伴い,実際の再定義は
+% \texttt{mingoth}, \texttt{ptexjis}のときしか必要なくなりました.
+%
+% \begin{macrocode}
+\expandafter\let\csname JY3/mc/m/n/10\endcsname\relax
+\ifmingoth
+ \DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [\Cjascale] \ltj@stdmcfont:jfm=min}{}
+ \DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [\Cjascale] \ltj@stdgtfont:jfm=min}{}
+\else
+ \ifptexjis
+ \DeclareFontShape{JY3}{mc}{m}{n}{<-> s * [\Cjascale] \ltj@stdmcfont:jfm=jis}{}
+ \DeclareFontShape{JY3}{gt}{m}{n}{<-> s * [\Cjascale] \ltj@stdgtfont:jfm=jis}{}
+ \fi
+\fi
+% \end{macrocode}
+%
+% 和文でイタリック体,斜体,サンセリフ体,
+% タイプライタ体の代わりにゴシック体を使うことにします。
+%
+% [2014-03-25 LTJ] タイプライタ体に合わせるファミリを |\jttdefault| とし,
+% 通常のゴシック体と別にできるようにしました。|\jttdefault| は,標準で
+% |\gtdefault| と定義しています。
+%
+% [2003-03-16] イタリック体,斜体について,和文でゴシックを当てていましたが,
+% 数学の定理環境などで多量のイタリック体を使うことがあり,ゴシックに
+% すると黒々となってしまうという弊害がありました。
+% |amsthm| を使わない場合は定理の本文が明朝になるように |\newtheorem|
+% 環境を手直ししてしのいでいましたが,
+% \TeX が数学で多用されることを考えると,イタリック体に明朝体を
+% 当てたほうがいいように思えてきましたので,
+% イタリック体・斜体に対応する和文を明朝体に変えることにしました。
+%
+% [2004-11-03] |\rmfamily| も和文対応にしました。
+%
+% [2016-01-30 LTJ] |\rmfamily|, |\sffamily|, |\ttfamily| の再定義をLua\TeX-ja
+% カーネルに移動させたので,ここでは和文対応にするフラグ |\@ltj@match@family|\
+% を有効にさせるだけでよいです。
+%
+% [2018-06-09 LTJ] シリーズ|b|は同じ書体の|bx|と等価になるように宣言します。
+%
+% \begin{macrocode}
+\DeclareFontShape{JY3}{mc}{bx}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{bx}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JY3}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{bx}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{n}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{it}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{sl}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{mc}{m}{sc}{<->ssub*mc/m/n}{}
+\DeclareFontShape{JT3}{gt}{m}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{m}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{bx}{sl}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{it}{<->ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{sl}{<->ssub*gt/m/n}{}
+\renewcommand\jttdefault{\gtdefault}\@ltj@match@familytrue
+% \end{macrocode}
+%%
+% Lua\TeX-jaでは和文組版に伴うグルーはノードベースで挿入するようになり,また
+% 欧文・和文間のグルーとイタリック補正は干渉しないようになりました。
+% まだ「和文の斜体」についてはLua\LaTeX カーネル側でまともな対応がされていませんが,
+% \texttt{jsclasses}で行われていた |\textmc|, |\textgt| の再定義は不要のように思われます。
+%
+% \texttt{jsclasses.dtx}中で行われていた |\reDeclareMathAlphabet| の再定義は削除。
+% また,Yue ZHANGさん作の\texttt{fixjfm}パッケージ対応のコードもLua\TeX-jaでは削除しています.
+%
+% \begin{macrocode}
+\AtBeginDocument{%
+ \unless\ifltj@disablejfam
+ \reDeclareMathAlphabet{\mathrm}{\mathrm}{\mathmc}
+ \reDeclareMathAlphabet{\mathbf}{\mathbf}{\mathgt}
+ \fi
+}%
+% \end{macrocode}
+%
+% \begin{macro}{\textsterling}
+%
+% これは |\pounds| 命令で実際に呼び出される文字です。
+% 従来からのOT1エンコーディングでは |\$| のイタリック体が |\pounds|
+% なので \texttt{cmti} が使われていましたが,
+% 1994年春からは \texttt{cmu}(upright italic,直立イタリック体)
+% に変わりました。
+% しかし \texttt{cmu} はその性格からして実験的なものであり,
+% |\pounds| 以外で使われるとは思えないので,
+% ここでは \texttt{cmti} に戻してしまいます。
+%
+% [2003-08-20] Computer Modernフォントを使う機会も減り,T1エンコーディング
+% が一般的になってきました。この定義はもうあまり意味がないので消します。
+%
+% \begin{macrocode}
+% \DeclareTextCommand{\textsterling}{OT1}{{\itshape\char`\$}}
+% \end{macrocode}
+% \end{macro}
+%
+% アスキーの \texttt{kinsoku.dtx} では「’」「“」「”」前後のペナルティが5000に
+% なっていたので,\texttt{jsclasses.dtx} ではそれを 10000 に補正していました。
+% しかし,Lua\TeX-jaでは最初からこれらのパラメータは 10000 なので,
+% もはや補正する必要はありません。
+%
+% 「\TeX!」「〒515」の記号と数字の間に四分アキが入らないようにします。
+%
+% \begin{macrocode}
+\ltjsetparameter{jaxspmode={`!,2}}
+\ltjsetparameter{jaxspmode={`〒,1}}
+% \end{macrocode}
+%
+% 「CやC++では……」と書くと,C++の直後に四分アキが入らないのでバランスが悪くなります。
+% 四分アキが入るようにしました。\% の両側も同じです。
+%
+% \begin{macrocode}
+\ltjsetparameter{alxspmode={`+,3}}
+\ltjsetparameter{alxspmode={`\%,3}}
+% \end{macrocode}
+%
+% \texttt{jsclasses.dtx} では80〜ffの文字の |\xspcode| を全て3にしていましたが,
+% Lua\TeX-jaでは同様の内容が最初から設定されていますので,対応する部分は削除。
+%
+% \begin{macro}{\@}
+%
+% 欧文といえば,\LaTeX の |\def\@{\spacefactor\@m}| という定義(|\@m| は1000)
+% では |I watch TV\@.| と書くと V とピリオドのペアカーニングが効かなくなります。
+% そこで,次のような定義に直し,|I watch TV.\@| と書くことにします。
+%
+% [2016-07-14] 2015-01-01の\LaTeX で,auxiliary filesに書き出されたときに
+% スペースが食われないようにする修正が入りました。これに合わせて |{}| を補いました。
+%
+% \begin{macrocode}
+\def\@{\spacefactor3000{}}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{フォントサイズ}
+%
+% フォントサイズを変える命令(|\normalsize|,|\small| など)
+% の実際の挙動の設定は,三つの引数をとる命令 |\@setfontsize| を使って,
+% たとえば
+% \begin{quote}
+% |\@setfontsize{\normalsize}{10}{16}|
+% \end{quote}
+% のようにして行います。これは
+% \begin{quote}
+% |\normalsize| は10ポイントのフォントを使い,行送りは16ポイントである
+% \end{quote}
+% という意味です。
+% ただし,処理を速くするため,
+% 以下では10と同義の\LaTeX の内部命令 |\@xpt| を使っています。
+% この |\@xpt| の類は次のものがあり,\LaTeX 本体で定義されています。
+%\begin{verbatim}
+% \@vpt 5 \@vipt 6 \@viipt 7
+% \@viiipt 8 \@ixpt 9 \@xpt 10
+% \@xipt 10.95 \@xiipt 12 \@xivpt 14.4
+%\end{verbatim}
+%
+% \begin{macro}{\@setfontsize}
+%
+% ここでは |\@setfontsize| の定義を少々変更して,
+% 段落の字下げ |\parindent|,
+% 和文文字間のスペース |kanjiskip|,
+% 和文・欧文間のスペース |xkanjiskip| を変更しています。
+%
+% |kanjiskip| は |ltj-latex.sty| で |0pt plus 0.4pt minus 0.5pt| に
+% 設定していますが,
+% これはそもそも文字サイズの変更に応じて変わるべきものです。
+% それに,プラスになったりマイナスになったりするのは,
+% 追い出しと追い込みの混在が生じ,統一性を欠きます。
+% なるべく追い出しになるようにプラスの値だけにしたいところですが,
+% ごくわずかなマイナスは許すことにしました。
+%
+% |xkanjiskip| については,四分つまり全角の1/4を標準として,
+% 追い出すために三分あるいは二分まで延ばすのが一般的ですが,
+% ここではTimesやPalatinoのスペースがほぼ四分であることに着目して,
+% これに一致させています。これなら書くときにスペースを空けても
+% 空けなくても同じ出力になります。
+%
+% |\parindent| については,0(以下)でなければ全角幅(|1\zw|)に直します。
+%
+% [2008-02-18] |english| オプションで |\parindent| を 1em にしました。
+%
+% [2014-05-14 LTJ] |\ltjsetparameter|の実行は時間がかかるので,
+% |\ltjsetkanjiskip| と |\ltjsetxkanjiskip|(両者とも,
+% 実行前には |\ltj@setpar@global| の実行が必要)にしました。
+%
+% [2014-12-24 LTJ] |jsclasses| では,|\@setfontsize| 中で |xkanjiskip| を
+% 設定するのは現在の和欧文間空白の自然長が正の場合だけでした。
+% |ltjsclasses| では最初からこの判定が抜けてしまっていたので,復活させます。
+%
+% \begin{macrocode}
+\def\@setfontsize#1#2#3{%
+% \@nomath#1%
+ \ifx\protect\@typeset@protect
+ \let\@currsize#1%
+ \fi
+ \fontsize{#2}{#3}\selectfont
+ \ifdim\parindent>\z@
+ \if@english
+ \parindent=1em
+ \else
+ \parindent=1\zw
+ \fi
+ \fi
+ \ltj@setpar@global
+ \ltjsetkanjiskip\z@ plus .1\zw minus .01\zw
+ \@tempskipa=\ltjgetparameter{xkanjiskip}
+ \ifdim\@tempskipa>\z@
+ \if@slide
+ \ltjsetxkanjiskip .1em
+ \else
+ \ltjsetxkanjiskip .25em plus .15em minus .06em
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jsc@setfontsize}
+% クラスファイルの内部では,拡大率も考慮した |\jsc@setfontsize| を
+% |\@setfontsize| の変わりに用いることにします。
+% \begin{macrocode}
+\def\jsc@setfontsize#1#2#3{%
+ \@setfontsize#1{#2\jsc@mpt}{#3\jsc@mpt}}
+% \end{macrocode}
+% \end{macro}
+%
+% これらのグルーをもってしても行分割ができない場合は,
+% |\emergencystretch| に訴えます。
+%
+% \begin{macrocode}
+\emergencystretch 3\zw
+% \end{macrocode}
+%
+% \begin{macro}{\ifnarrowbaselines}
+% \begin{macro}{\narrowbaselines}
+% \begin{macro}{\widebaselines}
+%
+% 欧文用に行間を狭くする論理変数と,それを真・偽にするためのコマンドです。
+%
+% [2003-06-30] 数式に入るところで |\narrowbaselines|
+% を実行しているので |\abovedisplayskip| 等が初期化
+% されてしまうというshintokさんのご指摘に対して,
+% しっぽ愛好家さんが次の修正を教えてくださいました。
+%
+% [2008-02-18] |english| オプションで最初の段落のインデントをしないようにしました。
+%
+% TODO: Hasumiさん [qa:54539] のご指摘は考慮中です。
+%
+% [2015-01-07 LTJ] 遅くなりましたが,
+% \url{http://oku.edu.mie-u.ac.jp/tex/mod/forum/discuss.php?d=1005} にあったZRさんのパッチを取り込みました。
+%
+% \begin{macrocode}
+\newif\ifnarrowbaselines
+\if@english
+ \narrowbaselinestrue
+\fi
+\def\narrowbaselines{%
+ \narrowbaselinestrue
+ \skip0=\abovedisplayskip
+ \skip2=\abovedisplayshortskip
+ \skip4=\belowdisplayskip
+ \skip6=\belowdisplayshortskip
+ \@currsize\selectfont
+ \abovedisplayskip=\skip0
+ \abovedisplayshortskip=\skip2
+ \belowdisplayskip=\skip4
+ \belowdisplayshortskip=\skip6\relax}
+\def\widebaselines{\narrowbaselinesfalse\@currsize\selectfont}
+\def\ltj@@ifnarrowbaselines{%
+ \ifnarrowbaselines\expandafter\@firstoftwo
+ \else \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\normalsize}
+%
+% 標準のフォントサイズと行送りを選ぶコマンドです。
+%
+% 本文10ポイントのときの行送りは,
+% 欧文の標準クラスファイルでは12ポイント,
+% アスキーの和文クラスファイルでは15ポイントになっていますが,
+% ここでは16ポイントにしました。
+% ただし |\narrowbaselines| で欧文用の12ポイントになります。
+%
+% 公称10ポイントの和文フォントが約9.25ポイント
+% (アスキーのものの0.961倍)であることもあり,
+% 行送りがかなりゆったりとしたと思います。
+% 実際,$16/9.25 \approx 1.73$ であり,
+% 和文の推奨値の一つ「二分四分」(1.75)
+% に近づきました。
+%
+% \begin{macrocode}
+\renewcommand{\normalsize}{%
+ \ltj@@ifnarrowbaselines
+ {\jsc@setfontsize\normalsize\@xpt\@xiipt}%
+ {\jsc@setfontsize\normalsize\@xpt{\n@baseline}}%
+% \end{macrocode}
+%
+% 数式の上のアキ(|\abovedisplayskip|),
+% 短い数式の上のアキ(|\abovedisplayshortskip|),
+% 数式の下のアキ(|\belowdisplayshortskip|)の設定です。
+%
+% [2003-02-16] ちょっと変えました。
+%
+% [2009-08-26] \TeX\ Q\,\&\,A 52569から始まる議論について逡巡して
+% いましたが,結局,微調節してみることにしました。
+%
+% \begin{macrocode}
+ \abovedisplayskip 11\jsc@mpt \@plus3\jsc@mpt \@minus4\jsc@mpt
+ \abovedisplayshortskip \z@ \@plus3\jsc@mpt
+ \belowdisplayskip 9\jsc@mpt \@plus3\jsc@mpt \@minus4\jsc@mpt
+ \belowdisplayshortskip \belowdisplayskip
+% \end{macrocode}
+%
+% 最後に,リスト環境のトップレベルのパラメータ |\@listI| を,
+% |\@listi| にコピーしておきます。|\@listI| の設定は後で出てきます。
+%
+% \begin{macrocode}
+ \let\@listi\@listI}
+% \end{macrocode}
+%
+% ここで実際に標準フォントサイズで初期化します。
+%
+% \begin{macrocode}
+\mcfamily\selectfont\normalsize
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\Cht}
+% \begin{macro}{\Cdp}
+% \begin{macro}{\Cwd}
+% \begin{macro}{\Cvs}
+% \begin{macro}{\Chs}
+%
+% 基準となる長さの設定をします。
+% \texttt{lltjfont.sty}で宣言されている
+% パラメータに実際の値を設定します。
+% たとえば |\Cwd| は |\normalfont| の全角幅(|1\zw|)です。
+%
+% [2017-08-31] 基準とする文字を「全角空白」(EUCコード\texttt{0xA1A1})から
+% 「漢」(JISコード\texttt{0x3441})へ変更しました。
+%
+% [2017-09-19] 内部的に使った |\box0| を空にします。
+% \begin{macrocode}
+\setbox0\hbox{漢}
+\setlength\Cht{\ht0}
+\setlength\Cdp{\dp0}
+\setlength\Cwd{\wd0}
+\setlength\Cvs{\baselineskip}
+\setlength\Chs{\wd0}
+\setbox0=\box\voidb@x
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\small}
+%
+% |\small| も |\normalsize| と同様に設定します。
+% 行送りは,|\normalsize| が16ポイントなら,
+% 割合からすれば$16 \times 0.9 = 14.4$ポイントになりますが,
+% |\small| の使われ方を考えて,ここでは和文13ポイント,
+% 欧文11ポイントとします。
+% また,|\topsep| と |\parsep| は,元はそれぞれ$4 \pm 2$,$2 \pm 1$
+% ポイントでしたが,ここではゼロ(|\z@|)にしました。
+%
+% \begin{macrocode}
+\newcommand{\small}{%
+ \ltj@@ifnarrowbaselines
+%<!kiyou> {\jsc@setfontsize\small\@ixpt{11}}%
+%<kiyou> {\jsc@setfontsize\small{8.8888}{11}}%
+%<!kiyou> {\jsc@setfontsize\small\@ixpt{13}}%
+%<kiyou> {\jsc@setfontsize\small{8.8888}{13.2418}}%
+ \abovedisplayskip 9\jsc@mpt \@plus3\jsc@mpt \@minus4\jsc@mpt
+ \abovedisplayshortskip \z@ \@plus3\jsc@mpt
+ \belowdisplayskip \abovedisplayskip
+ \belowdisplayshortskip \belowdisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footnotesize}
+%
+% |\footnotesize| も同様です。
+% |\topsep| と |\parsep| は,元はそれぞれ$3 \pm 1$,$2 \pm 1$
+% ポイントでしたが,ここではゼロ(|\z@|)にしました。
+%
+% \begin{macrocode}
+\newcommand{\footnotesize}{%
+ \ltj@@ifnarrowbaselines
+%<!kiyou> {\jsc@setfontsize\footnotesize\@viiipt{9.5}}%
+%<kiyou> {\jsc@setfontsize\footnotesize{8.8888}{11}}%
+%<!kiyou> {\jsc@setfontsize\footnotesize\@viiipt{11}}%
+%<kiyou> {\jsc@setfontsize\footnotesize{8.8888}{13.2418}}%
+ \abovedisplayskip 6\jsc@mpt \@plus2\jsc@mpt \@minus3\jsc@mpt
+ \abovedisplayshortskip \z@ \@plus2\jsc@mpt
+ \belowdisplayskip \abovedisplayskip
+ \belowdisplayshortskip \belowdisplayskip
+ \def\@listi{\leftmargin\leftmargini
+ \topsep \z@
+ \parsep \z@
+ \itemsep \parsep}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\scriptsize}
+% \begin{macro}{\tiny}
+% \begin{macro}{\large}
+% \begin{macro}{\Large}
+% \begin{macro}{\LARGE}
+% \begin{macro}{\huge}
+% \begin{macro}{\Huge}
+% \begin{macro}{\HUGE}
+%
+% それ以外のサイズは,本文に使うことがないので,
+% 単にフォントサイズと行送りだけ変更します。
+% 特に注意すべきは |\large| で,
+% これは二段組のときに節見出しのフォントとして使い,
+% 行送りを |\normalsize| と同じにすることによって,
+% 節見出しが複数行にわたっても段間で行が揃うようにします。
+%
+% [2004-11-03] |\HUGE| を追加。
+%
+% \begin{macrocode}
+\newcommand{\scriptsize}{\jsc@setfontsize\scriptsize\@viipt\@viiipt}
+\newcommand{\tiny}{\jsc@setfontsize\tiny\@vpt\@vipt}
+\if@twocolumn
+%<!kiyou> \newcommand{\large}{\jsc@setfontsize\large\@xiipt{\n@baseline}}
+%<kiyou> \newcommand{\large}{\jsc@setfontsize\large{11.111}{\n@baseline}}
+\else
+%<!kiyou> \newcommand{\large}{\jsc@setfontsize\large\@xiipt{17}}
+%<kiyou> \newcommand{\large}{\jsc@setfontsize\large{11.111}{17}}
+\fi
+%<!kiyou>\newcommand{\Large}{\jsc@setfontsize\Large\@xivpt{21}}
+%<kiyou>\newcommand{\Large}{\jsc@setfontsize\Large{12.222}{21}}
+\newcommand{\LARGE}{\jsc@setfontsize\LARGE\@xviipt{25}}
+\newcommand{\huge}{\jsc@setfontsize\huge\@xxpt{28}}
+\newcommand{\Huge}{\jsc@setfontsize\Huge\@xxvpt{33}}
+\newcommand{\HUGE}{\jsc@setfontsize\HUGE{30}{40}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% 別行立て数式の中では |\narrowbaselines| にします。
+% 和文の行送りのままでは,行列や場合分けの行送り,
+% 連分数の高さなどが不釣合いに大きくなるためです。
+%
+% 本文中の数式の中では |\narrowbaselines| にしていません。
+% 本文中ではなるべく行送りが変わるような大きいものを使わず,
+% 行列は |amsmath| の |smallmatrix| 環境を使うのがいいでしょう。
+%
+% \begin{macrocode}
+\everydisplay=\expandafter{\the\everydisplay \narrowbaselines}
+% \end{macrocode}
+%
+% しかし,このおかげで別行数式の上下のスペースが少し違ってしまいました。
+% とりあえず |amsmath| の |equation| 関係は |okumacro| のほうで逃げていますが,
+% もっとうまい逃げ道があればお教えください。
+%
+% 見出し用のフォントは |\bfseries| 固定ではなく,|\headfont|
+% という命令で定めることにします。
+% これは太ゴシックが使えるときは |\sffamily| |\bfseries|
+% でいいと思いますが,通常の中ゴシックでは単に |\sffamily|
+% だけのほうがよさそうです。
+% 『p\LaTeXe 美文書作成入門』(1997年)では |\sffamily|
+% |\fontseries{sbc}| として新ゴMと合わせましたが,
+% |\fontseries{sbc}| はちょっと幅が狭いように感じました。
+%
+% \begin{macrocode}
+% \newcommand{\headfont}{\bfseries}
+\newcommand{\headfont}{\gtfamily\sffamily}
+% \newcommand{\headfont}{\sffamily\fontseries{sbc}\selectfont}
+% \end{macrocode}
+%
+% \section{レイアウト}
+%
+% \paragraph{二段組}
+%
+% \begin{macro}{\columnsep}
+% \begin{macro}{\columnseprule}
+%
+% |\columnsep| は二段組のときの左右の段間の幅です。
+% 元は10ptでしたが,|2\zw|にしました。
+% このスペースの中央に |\columnseprule| の幅の罫線が引かれます。
+%
+% \begin{macrocode}
+%<!kiyou>\setlength\columnsep{2\zw}
+%<kiyou>\setlength\columnsep{28truebp}
+\setlength\columnseprule{\z@}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{段落}
+%
+% \begin{macro}{\lineskip}
+% \begin{macro}{\normallineskip}
+% \begin{macro}{\lineskiplimit}
+% \begin{macro}{\normallineskiplimit}
+%
+% 上下の行の文字が |\lineskiplimit| より接近したら,
+% |\lineskip| より近づかないようにします。
+% 元は0ptでしたが1ptに変更しました。
+% \texttt{normal...} の付いた方は保存用です。
+%
+% \begin{macrocode}
+\setlength\lineskip{1\jsc@mpt}
+\setlength\normallineskip{1\jsc@mpt}
+\setlength\lineskiplimit{1\jsc@mpt}
+\setlength\normallineskiplimit{1\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\baselinestretch}
+%
+% 実際の行送りが |\baselineskip| の何倍かを表すマクロです。たとえば
+% \begin{quote}
+% |\renewcommand{\baselinestretch}{2}|
+% \end{quote}
+% とすると,行送りが通常の2倍になります。ただし,
+% これを設定すると,たとえ |\baselineskip| が伸縮するように
+% 設定しても,行送りの伸縮ができなくなります。
+% 行送りの伸縮はしないのが一般的です。
+%
+% \begin{macrocode}
+\renewcommand{\baselinestretch}{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\parskip}
+% \begin{macro}{\parindent}
+%
+% |\parskip| は段落間の追加スペースです。
+% 元は 0pt plus 1pt になっていましたが,ここではゼロにしました。
+% |\parindent| は段落の先頭の字下げ幅です。
+%
+% \begin{macrocode}
+\setlength\parskip{\z@}
+\if@slide
+ \setlength\parindent{0\zw}
+\else
+ \setlength\parindent{1\zw}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@lowpenalty}
+% \begin{macro}{\@medpenalty}
+% \begin{macro}{\@highpenalty}
+%
+% |\nopagebreak|,|\nolinebreak| は引数に応じて次のペナルティ値
+% のうちどれかを選ぶようになっています。
+% ここはオリジナル通りです。
+%
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\interlinepenalty}
+%
+% 段落中の改ページのペナルティです。デフォルトは 0 です。
+%
+% \begin{macrocode}
+% \interlinepenalty 0
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\brokenpenalty}
+%
+% ページの最後の行がハイフンで終わる際のペナルティです。
+% デフォルトは100です。
+%
+% \begin{macrocode}
+% \brokenpenalty 100
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{ページレイアウト}
+%
+% \paragraph{縦方向のスペース}
+%
+% \begin{macro}{\headheight}
+% \begin{macro}{\topskip}
+%
+% |\topskip| は本文領域上端と本文1行目のベースラインとの距離です。
+% あまりぎりぎりの値にすると,本文中に $\int$ のような高い文字が
+% 入ったときに1行目のベースラインが他のページより下がってしまいます。
+% ここでは本文の公称フォントサイズ(10pt)にします。
+%
+% [2003-06-26] |\headheight| はヘッダの高さで,
+% 元は12ptでしたが,新ドキュメントクラスでは |\topskip|
+% と等しくしていました。ところが,|fancyhdr| パッケージ
+% で |\headheight| が小さいとおかしいことになるようです
+% ので,2倍に増やしました。代わりに,版面の上下揃えの
+% 計算では |\headheight| ではなく |\topskip| を使う
+% ことにしました。
+%
+% [2016-08-17] 圏点やルビが一行目に来た場合に下がるのを防ぐた
+% め,|\topskip| を10ptから1.38zwに増やしました。
+% |\headheight| は従来と同じ20ptのままとします。
+%
+% [2016-08-17 LTJ] 1.38zwの代わりに1.38|\zh|にしています。
+%
+% \begin{macrocode}
+\setlength\topskip{1.38\zh}%% from 10\jsc@mpt (2016-08-17)
+\if@slide
+ \setlength\headheight{0\jsc@mpt}
+\else
+ \setlength\headheight{20\jsc@mpt}%% from 2\topskip (2016-08-17); from \topskip (2003-06-26)
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\footskip}
+%
+% |\footskip| は本文領域下端とフッタ下端との距離です。
+% 標準クラスファイルでは,book で0.35in(約8.89mm),
+% book 以外で30pt(約10.54mm)となっていましたが,
+% ここではA4判のときちょうど1cmとなるように,
+% |\paperheight| の0.03367倍(最小 |\baselineskip|)としました。
+% 書籍については,フッタは使わないことにして,ゼロにしました。
+%
+% \begin{macrocode}
+%<*article|kiyou>
+\if@slide
+ \setlength\footskip{\z@}
+\else
+ \setlength\footskip{0.03367\paperheight}
+ \ifdim\footskip<\baselineskip
+ \setlength\footskip{\baselineskip}
+ \fi
+\fi
+%</article|kiyou>
+%<jspf>\setlength\footskip{9\jsc@mmm}
+%<*book>
+\if@report
+ \setlength\footskip{0.03367\paperheight}
+ \ifdim\footskip<\baselineskip
+ \setlength\footskip{\baselineskip}
+ \fi
+\else
+ \setlength\footskip{\z@}
+\fi
+%</book>
+%<*report>
+\setlength\footskip{0.03367\paperheight}
+\ifdim\footskip<\baselineskip
+ \setlength\footskip{\baselineskip}
+\fi
+%</report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\headsep}
+%
+% |\headsep| はヘッダ下端と本文領域上端との距離です。
+% 元は book で18pt(約6.33mm),
+% それ以外で25pt(約8.79mm)になっていました。
+% ここでは article は |\footskip| $-$ |\topskip| としました。
+%
+% [2016-10-08] article の \texttt{slide} のとき,
+% および book の非 \texttt{report} と kiyou のときに |\headsep| を
+% 減らしそこねていたのを修正しました(2016-08-17での修正漏れ)。
+%
+% \begin{macrocode}
+%<*article>
+\if@slide
+ \setlength\headsep{0\jsc@mpt}
+ \addtolength\headsep{-\topskip}%% added (2016-10-08)
+ \addtolength\headsep{10\jsc@mpt}%% added (2016-10-08)
+\else
+ \setlength\headsep{\footskip}
+ \addtolength\headsep{-\topskip}
+\fi
+%</article>
+%<*book>
+\if@report
+ \setlength\headsep{\footskip}
+ \addtolength\headsep{-\topskip}
+\else
+ \setlength\headsep{6\jsc@mmm}
+ \addtolength\headsep{-\topskip}%% added (2016-10-08)
+ \addtolength\headsep{10\jsc@mpt}%% added (2016-10-08)
+\fi
+%</book>
+%<*report>
+\setlength\headsep{\footskip}
+\addtolength\headsep{-\topskip}
+%</report>
+%<*jspf>
+\setlength\headsep{9\jsc@mmm}
+\addtolength\headsep{-\topskip}
+%</jspf>
+%<*kiyou>
+\setlength\headheight{0\jsc@mpt}
+\setlength\headsep{0\jsc@mpt}
+\addtolength\headsep{-\topskip}%% added (2016-10-08)
+\addtolength\headsep{10\jsc@mpt}%% added (2016-10-08)
+%</kiyou>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maxdepth}
+%
+% |\maxdepth| は本文最下行の最大の深さで,
+% plain \TeX や\LaTeX~2.09では4ptに固定でした。
+% \LaTeX2e では |\maxdepth| $+$ |\topskip| を本文フォントサイズ
+% の1.5倍にしたいのですが,|\topskip| は本文フォントサイズ
+% (ここでは10pt)に等しいので,結局 |\maxdepth| は |\topskip|
+% の半分の値(具体的には5pt)にします。
+%
+% \begin{macrocode}
+\setlength\maxdepth{.5\topskip}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{本文の幅と高さ}
+%
+% \begin{macro}{\fullwidth}
+%
+% 本文の幅が全角40文字を超えると読みにくくなります。
+% そこで,書籍の場合に限って,
+% 紙の幅が広いときは外側のマージンを余分にとって全角40文字に押え,
+% ヘッダやフッタは本文領域より広く取ることにします。
+% このときヘッダやフッタの幅を表す |\fullwidth| という長さを定義します。
+%
+% \begin{macrocode}
+\newdimen\fullwidth
+% \end{macrocode}
+%
+% この |\fullwidth| は article では紙幅 |\paperwidth|の0.76倍を超えない
+% 全角幅の整数倍(二段組では全角幅の偶数倍)にします。0.76倍という数値は
+% A4縦置きの場合に紙幅から約2インチを引いた値になるように選びました。
+% book では紙幅から36ミリを引いた値にしました。
+%
+% \begin{macro}{\textwidth}
+%
+% 書籍以外では本文領域の幅 |\textwidth| は |\fullwidth| と等しくします。
+% |article| ではA4縦置きで49文字となります。
+% 某学会誌スタイルでは |50\zw|(25文字×2段)+段間8\,mmとします。
+%
+% \begin{macrocode}
+%<*article>
+\if@slide
+ \setlength\fullwidth{0.9\paperwidth}
+\else
+ \setlength\fullwidth{0.76\paperwidth}
+\fi
+\if@twocolumn \@tempdima=2\zw \else \@tempdima=1\zw \fi
+\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
+\setlength\textwidth{\fullwidth}
+%</article>
+%<*book>
+\if@report
+ \setlength\fullwidth{0.76\paperwidth}
+\else
+ \setlength\fullwidth{\paperwidth}
+ \addtolength\fullwidth{-36\jsc@mmm}
+\fi
+\if@twocolumn \@tempdima=2\zw \else \@tempdima=1\zw \fi
+\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
+\setlength\textwidth{\fullwidth}
+\if@report \else
+ \if@twocolumn \else
+ \ifdim \fullwidth>40\zw
+ \setlength\textwidth{40\zw}
+ \fi
+ \fi
+\fi
+%</book>
+%<*report>
+\setlength\fullwidth{0.76\paperwidth}
+\if@twocolumn \@tempdima=2\zw \else \@tempdima=1\zw \fi
+\divide\fullwidth\@tempdima \multiply\fullwidth\@tempdima
+\setlength\textwidth{\fullwidth}
+%</report>
+%<*jspf>
+\setlength\fullwidth{50\zw}
+\addtolength\fullwidth{8\jsc@mmm}
+\setlength\textwidth{\fullwidth}
+%</jspf>
+%<*kiyou>
+\setlength\fullwidth{48\zw}
+\addtolength\fullwidth{\columnsep}
+\setlength\textwidth{\fullwidth}
+%</kiyou>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\textheight}
+%
+% 紙の高さ |\paperheight| は,1インチと |\topmargin|
+% と |\headheight| と |\headsep| と |\textheight|
+% と |\footskip| とページ下部の余白を加えたものです。
+%
+% 本文部分の高さ |\textheight| は,
+% 紙の高さ |\paperheight| の0.83倍から,
+% ヘッダの高さ,ヘッダと本文の距離,本文とフッタ下端の距離,
+% |\topskip| を引き,
+% それを |\baselineskip| の倍数に切り捨て,
+% 最後に |\topskip| を加えます。
+% 念のため0.1ポイント余分に加えておきます。
+% 0.83倍という数値は,A4縦置きの場合に紙の高さから
+% 上下マージン各約1インチを引いた値になるように選びました。
+%
+% 某学会誌スタイルでは44行にします。
+%
+% [2003-06-26] |\headheight| を |\topskip| に直しました。
+% 以前はこの二つは値が同じであったので,変化はないはずです。
+%
+% [2016-08-26] |\topskip| を10ptから1.38zwに増やしましたので,
+% その分 |\textheight| を増やします(2016-08-17での修正漏れ)。
+%
+% [2016-10-08] article の slide のときに |\headheight| はゼロ
+% なので,さらに修正しました(2016-08-17での修正漏れ)。
+%
+% \begin{macrocode}
+%<*article|book|report>
+\if@slide
+ \setlength{\textheight}{0.95\paperheight}
+\else
+ \setlength{\textheight}{0.83\paperheight}
+\fi
+\addtolength{\textheight}{-10\jsc@mpt}%% from -\topskip (2016-10-08); from -\headheight (2003-06-26)
+\addtolength{\textheight}{-\headsep}
+\addtolength{\textheight}{-\footskip}
+\addtolength{\textheight}{-\topskip}
+\divide\textheight\baselineskip
+\multiply\textheight\baselineskip
+%</article|book|report>
+%<jspf>\setlength{\textheight}{51\baselineskip}
+%<kiyou>\setlength{\textheight}{47\baselineskip}
+\addtolength{\textheight}{\topskip}
+\addtolength{\textheight}{0.1\jsc@mpt}
+%<jspf>\setlength{\mathindent}{10\jsc@mmm}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\flushbottom}
+%
+% [2016-07-18] |\textheight| に念のため0.1ポイント余裕を持たせて
+% いるのと同様に,|\flushbottom| にも余裕を持たせます。
+% 元の\LaTeXe での完全な |\flushbottom| の定義は
+%\begin{verbatim}
+% \def\flushbottom{%
+% \let\@textbottom\relax \let\@texttop\relax}
+%\end{verbatim}
+% ですが,次のようにします。
+%
+% \begin{macrocode}
+\def\flushbottom{%
+ \def\@textbottom{\vskip \z@ \@plus.1\jsc@mpt}%
+ \let\@texttop\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\marginparsep}
+% \begin{macro}{\marginparpush}
+%
+% |\marginparsep| は欄外の書き込みと本文との間隔です。
+% |\marginparpush| は欄外の書き込みどうしの最小の間隔です。
+%
+% \begin{macrocode}
+\setlength\marginparsep{\columnsep}
+\setlength\marginparpush{\baselineskip}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\oddsidemargin}
+% \begin{macro}{\evensidemargin}
+%
+% それぞれ奇数ページ,偶数ページの左マージンから1インチ引いた値です。
+% 片面印刷では |\oddsidemargin| が使われます。
+% \TeX は上・左マージンに |1truein| を挿入しますが,
+% トンボ関係のオプションが指定されると |lltjcore.sty|
+% はトンボの内側に |1in| のスペース(|1truein| ではなく)を挿入するので,
+% 場合分けしています。
+%
+% [2011-10-03 LTJ] Lua\TeX{} (pdf\TeX?) では |1truein| ではなく
+% |1in| になるようです。
+%
+% \begin{macrocode}
+\setlength{\oddsidemargin}{\paperwidth}
+\addtolength{\oddsidemargin}{-\fullwidth}
+\setlength{\oddsidemargin}{.5\oddsidemargin}
+\addtolength{\oddsidemargin}{-1in}
+\setlength{\evensidemargin}{\oddsidemargin}
+\if@mparswitch
+ \addtolength{\evensidemargin}{\fullwidth}
+ \addtolength{\evensidemargin}{-\textwidth}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\marginparwidth}
+%
+% |\marginparwidth| は欄外の書き込みの横幅です。
+% 外側マージンの幅(|\evensidemargin| $+$ 1インチ)から1センチを引き,
+% さらに |\marginparsep|(欄外の書き込みと本文のアキ)を引いた値に
+% しました。最後に |1\zw| の整数倍に切り捨てます。
+%
+% \begin{macrocode}
+\setlength\marginparwidth{\paperwidth}
+\addtolength\marginparwidth{-\oddsidemargin}
+\addtolength\marginparwidth{-1in}
+\addtolength\marginparwidth{-\textwidth}
+\addtolength\marginparwidth{-10\jsc@mmm}
+\addtolength\marginparwidth{-\marginparsep}
+\@tempdima=1\zw
+\divide\marginparwidth\@tempdima
+\multiply\marginparwidth\@tempdima
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topmargin}
+%
+% 上マージン(紙の上端とヘッダ上端の距離)
+% から1インチ引いた値です。
+%
+% [2003-06-26] |\headheight| を |\topskip| に直しました。
+% 以前はこの二つは値が同じであったので,変化はないはずです。
+%
+% [2011-10-03 LTJ] ここも |\oddsidemargin| のときと同様に |-\inv@mag in| ではなく
+% |-1in| にします。
+%
+% [2016-08-17] |\topskip| を10ptから1.38zwに直しましたが,
+% |\topmargin| は従来の値から変わらないように調節しました。
+% …のつもりでしたが,|\textheight| を増やし忘れていたので
+% 変わってしまっていました(2016-08-26修正済み)。
+%
+% \begin{macrocode}
+\setlength\topmargin{\paperheight}
+\addtolength\topmargin{-\textheight}
+\if@slide
+ \addtolength\topmargin{-\headheight}
+\else
+ \addtolength\topmargin{-10\jsc@mpt}%% from -\topskip (2016-10-08); from -\headheight (2003-06-26)
+\fi
+\addtolength\topmargin{-\headsep}
+\addtolength\topmargin{-\footskip}
+\setlength\topmargin{0.5\topmargin}
+%<kiyou>\setlength\topmargin{81truebp}
+\addtolength\topmargin{-1in}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{脚注}
+%
+% \begin{macro}{\footnotesep}
+%
+% 各脚注の頭に入る支柱(strut)の高さです。
+% 脚注間に余分のアキが入らないように,
+% |\footnotesize| の支柱の高さ(行送りの0.7倍)に等しくします。
+%
+% \begin{macrocode}
+{\footnotesize\global\setlength\footnotesep{\baselineskip}}
+\setlength\footnotesep{0.7\footnotesep}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\footins}
+%
+% |\skip\footins| は本文の最終行と最初の脚注との間の距離です。
+% 標準の10ポイントクラスでは 9 plus 4 minus 2 ポイントになっていますが,
+% 和文の行送りを考えてもうちょっと大きくします。
+%
+% \begin{macrocode}
+\setlength{\skip\footins}{16\jsc@mpt \@plus 5\jsc@mpt \@minus 2\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{フロート関連}
+%
+% フロート(図,表)関連のパラメータは\LaTeXe 本体で定義されていますが,
+% ここで設定変更します。本文ページ(本文とフロートが共存するページ)
+% とフロートだけのページで設定が異なります。
+% ちなみに,カウンタは内部では |\c@| を名前に冠したマクロになっています。
+%
+% \begin{macro}{\c@topnumber}
+%
+% |topnumber| カウンタは本文ページ上部のフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{topnumber}{9}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topfraction}
+%
+% 本文ページ上部のフロートが占有できる最大の割合です。
+% フロートが入りやすいように,元の値 0.7 を 0.8 [2003-08-23: 0.85] に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\topfraction}{.85}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@bottomnumber}
+%
+% |bottomnumber| カウンタは本文ページ下部のフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{bottomnumber}{9}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bottomfraction}
+%
+% 本文ページ下部のフロートが占有できる最大の割合です。元は 0.3 でした。
+%
+% \begin{macrocode}
+\renewcommand{\bottomfraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@totalnumber}
+%
+% |totalnumber| カウンタは本文ページに入りうるフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{totalnumber}{20}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\textfraction}
+%
+% 本文ページに最低限入らなければならない本文の割合です。
+% フロートが入りやすいように元の 0.2 を 0.1 に変えました。
+%
+% \begin{macrocode}
+\renewcommand{\textfraction}{.1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatpagefraction}
+%
+% フロートだけのページでのフロートの最小割合です。
+% これも 0.5 を 0.8 に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\floatpagefraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@dbltopnumber}
+%
+% 二段組のとき本文ページ上部に出力できる
+% 段抜きフロートの最大数です。
+%
+% [2003-08-23] ちょっと増やしました。
+%
+% \begin{macrocode}
+\setcounter{dbltopnumber}{9}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dbltopfraction}
+%
+% 二段組のとき本文ページ上部に出力できる
+% 段抜きフロートが占めうる最大の割合です。
+% 0.7 を 0.8 に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\dbltopfraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\dblfloatpagefraction}
+%
+% 二段組のときフロートだけのページに入るべき
+% 段抜きフロートの最小割合です。
+% 0.5 を 0.8 に変えてあります。
+%
+% \begin{macrocode}
+\renewcommand{\dblfloatpagefraction}{.8}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\floatsep}
+% \begin{macro}{\textfloatsep}
+% \begin{macro}{\intextsep}
+%
+% |\floatsep| はページ上部・下部のフロート間の距離です。
+% |\textfloatsep| はページ上部・下部のフロートと本文との距離です。
+% |\intextsep| は本文の途中に出力されるフロートと本文との距離です。
+%
+% \begin{macrocode}
+\setlength\floatsep {12\jsc@mpt \@plus 2\jsc@mpt \@minus 2\jsc@mpt}
+\setlength\textfloatsep{20\jsc@mpt \@plus 2\jsc@mpt \@minus 4\jsc@mpt}
+\setlength\intextsep {12\jsc@mpt \@plus 2\jsc@mpt \@minus 2\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dblfloatsep}
+% \begin{macro}{\dbltextfloatsep}
+%
+% 二段組のときの段抜きのフロートについての値です。
+%
+% \begin{macrocode}
+\setlength\dblfloatsep {12\jsc@mpt \@plus 2\jsc@mpt \@minus 2\jsc@mpt}
+\setlength\dbltextfloatsep{20\jsc@mpt \@plus 2\jsc@mpt \@minus 4\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@fptop}
+% \begin{macro}{\@fpsep}
+% \begin{macro}{\@fpbot}
+%
+% フロートだけのページに入るグルーです。
+% |\@fptop| はページ上部,
+% |\@fpbot| はページ下部,
+% |\@fpsep| はフロート間に入ります。
+%
+% \begin{macrocode}
+\setlength\@fptop{0\jsc@mpt \@plus 1fil}
+\setlength\@fpsep{8\jsc@mpt \@plus 2fil}
+\setlength\@fpbot{0\jsc@mpt \@plus 1fil}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dblfptop}
+% \begin{macro}{\@dblfpsep}
+% \begin{macro}{\@dblfpbot}
+%
+% 段抜きフロートについての値です。
+%
+% \begin{macrocode}
+\setlength\@dblfptop{0\jsc@mpt \@plus 1fil}
+\setlength\@dblfpsep{8\jsc@mpt \@plus 2fil}
+\setlength\@dblfpbot{0\jsc@mpt \@plus 1fil}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \section{改ページ(日本語\TeX{}開発コミュニティ版のみ)}\label{sec:cleardoublepage}
+%
+% \begin{macro}{\pltx@cleartorightpage}
+% \begin{macro}{\pltx@cleartoleftpage}
+% \begin{macro}{\pltx@cleartooddpage}
+% \begin{macro}{\pltx@cleartoevenpage}
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% 同じ命令を追加しました。
+% \begin{enumerate}
+% \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令
+% \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令
+% \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令
+% \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令
+% \end{enumerate}
+% となっています。
+%
+% \begin{macrocode}
+%<*article|book|report>
+\def\pltx@cleartorightpage{\clearpage\if@twoside
+ \unless\ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+\def\pltx@cleartoleftpage{\clearpage\if@twoside
+ \ifodd\numexpr\c@page+\ltjgetparameter{direction}\relax
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+\def\pltx@cleartooddpage{\clearpage\if@twoside
+ \ifodd\c@page\else
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+\def\pltx@cleartoevenpage{\clearpage\if@twoside
+ \ifodd\c@page
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi\fi}
+%</article|book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cleardoublepage}
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% reportとbookクラスの場合に|\cleardoublepage|を再定義します。
+% \begin{macrocode}
+%<*book|report>
+\if@openleft
+ \let\cleardoublepage\pltx@cleartoleftpage
+\else\if@openright
+ \let\cleardoublepage\pltx@cleartorightpage
+\fi\fi
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{ページスタイル}\label{sec:pagestyle}
+%
+% ページスタイルとして,\LaTeXe (欧文版)の標準クラス
+% では |empty|,|plain|,|headings|,|myheadings| があります。
+% このうち |empty|,|plain| スタイルは\LaTeXe 本体
+% で定義されています。
+%
+% アスキーのクラスファイルでは |headnombre|,|footnombre|,
+% |bothstyle|,|jpl@in| が追加されていますが,
+% ここでは欧文標準のものだけにしました。
+%
+% ページスタイルは |\ps@...| の形のマクロで定義されています。
+%
+% \begin{macro}{\@evenhead}
+% \begin{macro}{\@oddhead}
+% \begin{macro}{\@evenfoot}
+% \begin{macro}{\@oddfoot}
+%
+% |\@oddhead|,|\@oddfoot|,|\@evenhead|,|\@evenfoot| は
+% 偶数・奇数ページの柱(ヘッダ,フッタ)を出力する命令です。
+% これらは |\fullwidth| 幅の |\hbox| の中で呼び出されます。
+% |\ps@...| の中で定義しておきます。
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% 柱の内容は,|\chapter| が呼び出す |\chaptermark{何々}|,
+% |\section| が呼び出す |\sectionmark{何々}| で設定します。
+% 柱を扱う命令には次のものがあります。
+%
+% \begin{quote}
+% \begin{tabbing}
+% |\markboth{左}{右} | \= 両方の柱を設定します。\\
+% |\markright{右}| \> 右の柱を設定します。\\
+% |\leftmark| \> 左の柱を出力します。\\
+% |\rightmark| \> 右の柱を出力します。
+% \end{tabbing}
+% \end{quote}
+%
+% 柱を設定する命令は,右の柱が左の柱の下位にある場合は十分まともに
+% 動作します。たとえば左マークを |\chapter|,右マークを |\section|
+% で変更する場合がこれにあたります。
+% しかし,同一ページに複数の |\markboth| があると,
+% おかしな結果になることがあります。
+%
+% |\tableofcontents| のような命令で使われる |\@mkboth| は,
+% |\ps@...| コマンド中で |\markboth| か |\@gobbletwo|(何もしない)
+% に |\let| されます。
+%
+% \begin{macro}{\ps@empty}
+%
+% |empty| ページスタイルの定義です。
+% \LaTeX 本体で定義されているものをコメントアウトした形で
+% 載せておきます。
+%
+% \begin{macrocode}
+% \def\ps@empty{%
+% \let\@mkboth\@gobbletwo
+% \let\@oddhead\@empty
+% \let\@oddfoot\@empty
+% \let\@evenhead\@empty
+% \let\@evenfoot\@empty}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ps@plainhead}
+% \begin{macro}{\ps@plainfoot}
+% \begin{macro}{\ps@plain}
+%
+% |plainhead| はシンプルなヘッダだけのページスタイルです。
+%
+% |plainfoot| はシンプルなフッタだけのページスタイルです。
+%
+% |plain| は |book| では |plainhead|,それ以外では |plainfoot| になります。
+%
+% \begin{macrocode}
+\def\ps@plainfoot{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \def\@oddfoot{\normalfont\hfil\thepage\hfil}%
+ \let\@evenhead\@empty
+ \let\@evenfoot\@oddfoot}
+\def\ps@plainhead{%
+ \let\@mkboth\@gobbletwo
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ \def\@evenhead{%
+ \if@mparswitch \hss \fi
+ \hbox to \fullwidth{\textbf{\thepage}\hfil}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{%
+ \hbox to \fullwidth{\hfil\textbf{\thepage}}\hss}}
+%<book>\if@report \let\ps@plain\ps@plainfoot \else \let\ps@plain\ps@plainhead \fi
+%<!book>\let\ps@plain\ps@plainfoot
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ps@headings}
+%
+% |headings| スタイルはヘッダに見出しとページ番号を出力します。
+% ここではヘッダにアンダーラインを引くようにしてみました。
+%
+% まず article の場合です。
+%
+% \begin{macrocode}
+%<*article|kiyou>
+\if@twoside
+ \def\ps@headings{%
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ \def\@evenhead{\if@mparswitch \hss \fi
+ \underline{\hbox to \fullwidth{\textbf{\thepage}\hfil\leftmark}}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{%
+ \underline{%
+ \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}}\hss}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{\markboth{%
+ \ifnum \c@secnumdepth >\z@ \thesection \hskip1\zw\fi
+ ##1}{}}%
+ \def\subsectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\@ne \thesubsection \hskip1\zw\fi
+ ##1}}%
+ }
+\else % if not twoside
+ \def\ps@headings{%
+ \let\@oddfoot\@empty
+ \def\@oddhead{%
+ \underline{%
+ \hbox to \fullwidth{{\rightmark}\hfil\textbf{\thepage}}}\hss}%
+ \let\@mkboth\markboth
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\z@ \thesection \hskip1\zw\fi
+ ##1}}}
+\fi
+%</article|kiyou>
+% \end{macrocode}
+%
+% 次は book および report の場合です。
+% [2011-05-10] しっぽ愛好家さん [qa:6370] のパッチを取り込ませていただきました
+% (北見さん [qa:55896] のご指摘ありがとうございます)。
+%
+% \begin{macrocode}
+%<*book|report>
+\newif\if@omit@number
+\def\ps@headings{%
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ \def\@evenhead{%
+ \if@mparswitch \hss \fi
+ \underline{\hbox to \fullwidth{\ltjsetparameter{autoxspacing={true}}
+ \textbf{\thepage}\hfil\leftmark}}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{\underline{\hbox to \fullwidth{\ltjsetparameter{autoxspacing={true}}
+ {\if@twoside\rightmark\else\leftmark\fi}\hfil\textbf{\thepage}}}\hss}%
+ \let\@mkboth\markboth
+ \def\chaptermark##1{\markboth{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \if@omit@number\else
+ \@chapapp\thechapter\@chappos\hskip1\zw
+ \fi
+%<book> \fi
+ \fi
+ ##1}{}}%
+ \def\sectionmark##1{\markright{%
+ \ifnum \c@secnumdepth >\z@ \thesection \hskip1\zw\fi
+ ##1}}}%
+%</book|report>
+% \end{macrocode}
+%
+% 最後は学会誌の場合です。
+%
+% \begin{macrocode}
+%<*jspf>
+\def\ps@headings{%
+ \def\@oddfoot{\normalfont\hfil\thepage\hfil}
+ \def\@evenfoot{\normalfont\hfil\thepage\hfil}
+ \def\@oddhead{\normalfont\hfil \@title \hfil}
+ \def\@evenhead{\normalfont\hfil プラズマ・核融合学会誌\hfil}}
+%</jspf>
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ps@myheadings}
+%
+% |myheadings| ページスタイルではユーザが |\markboth| や |\markright| で
+% 柱を設定するため,ここでの定義は非常に簡単です。
+%
+% [2004-01-17] 渡辺徹さんのパッチを適用しました。
+%
+% \begin{macrocode}
+\def\ps@myheadings{%
+ \let\@oddfoot\@empty\let\@evenfoot\@empty
+ \def\@evenhead{%
+ \if@mparswitch \hss \fi%
+ \hbox to \fullwidth{\thepage\hfil\leftmark}%
+ \if@mparswitch\else \hss \fi}%
+ \def\@oddhead{%
+ \hbox to \fullwidth{\rightmark\hfil\thepage}\hss}%
+ \let\@mkboth\@gobbletwo
+%<book|report> \let\chaptermark\@gobble
+ \let\sectionmark\@gobble
+%<!book&!report> \let\subsectionmark\@gobble
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{文書のマークアップ}
+%
+% \subsection{表題}
+%
+% \begin{macro}{\title}
+% \begin{macro}{\author}
+% \begin{macro}{\date}
+%
+% これらは\LaTeX 本体で次のように定義されています。
+% ここではコメントアウトした形で示します。
+%
+% \begin{macrocode}
+% \newcommand*{\title}[1]{\gdef\@title{#1}}
+% \newcommand*{\author}[1]{\gdef\@author{#1}}
+% \newcommand*{\date}[1]{\gdef\@date{#1}}
+% \date{\today}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\etitle}
+% \begin{macro}{\eauthor}
+% \begin{macro}{\keywords}
+%
+% 某学会誌スタイルで使う英語のタイトル,英語の著者名,キーワード,メールアドレスです。
+%
+% \begin{macrocode}
+%<*jspf>
+\newcommand*{\etitle}[1]{\gdef\@etitle{#1}}
+\newcommand*{\eauthor}[1]{\gdef\@eauthor{#1}}
+\newcommand*{\keywords}[1]{\gdef\@keywords{#1}}
+\newcommand*{\email}[1]{\gdef\authors@mail{#1}}
+\newcommand*{\AuthorsEmail}[1]{\gdef\authors@mail{author's e-mail:\ #1}}
+%</jspf>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\plainifnotempty}
+%
+% 従来の標準クラスでは,文書全体のページスタイルを |empty| に
+% しても表題のあるページだけ |plain| になってしまうことが
+% ありました。これは |\maketitle| の定義中
+% に |\thispagestyle|\hspace{0pt}|{plain}| が入っている
+% ためです。この問題を解決するために,
+% 「全体のページスタイルが |empty| でないなら
+% このページのスタイルを |plain| にする」という次の
+% 命令を作ることにします。
+%
+% \begin{macrocode}
+\def\plainifnotempty{%
+ \ifx \@oddhead \@empty
+ \ifx \@oddfoot \@empty
+ \else
+ \thispagestyle{plainfoot}%
+ \fi
+ \else
+ \thispagestyle{plainhead}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\maketitle}
+%
+% 表題を出力します。
+% 著者名を出力する部分は,欧文の標準クラスファイルでは |\large|,
+% 和文のものでは |\Large| になっていましたが,ここでは |\large|
+% にしました。
+%
+% [2016-11-16] スペーシングを元の |jsclasses| に合わせるため,|\smallskip| を
+% |\jsc@smallskip| に置き換えました。|\smallskip| のままでは
+% \texttt{nomag(*)} の場合にスケールしなくなり,レイアウトが変わってしまいます。
+%
+% \begin{macrocode}
+%<*article|book|report|kiyou>
+\if@titlepage
+ \newcommand{\maketitle}{%
+ \begin{titlepage}%
+ \let\footnotesize\small
+ \let\footnoterule\relax
+ \let\footnote\thanks
+ \null\vfil
+ \if@slide
+ {\footnotesize \@date}%
+ \begin{center}
+ \mbox{} \\[1\zw]
+ \large
+ {\maybeblue\hrule height0\jsc@mpt depth2\jsc@mpt\relax}\par
+ \jsc@smallskip
+ \@title
+ \jsc@smallskip
+ {\maybeblue\hrule height0\jsc@mpt depth2\jsc@mpt\relax}\par
+ \vfill
+ {\small \@author}%
+ \end{center}
+ \else
+ \vskip 60\jsc@mpt
+ \begin{center}%
+ {\LARGE \@title \par}%
+ \vskip 3em%
+ {\large
+ \lineskip .75em
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1.5em
+ {\large \@date \par}%
+ \end{center}%
+ \fi
+ \par
+ \@thanks\vfil\null
+ \end{titlepage}%
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ }%
+\else
+ \newcommand{\maketitle}{\par
+ \begingroup
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\advance\leftskip 3\zw
+ \parindent 1\zw\noindent
+ \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3\zw}##1}%
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi
+ \else
+ \newpage
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi
+ \plainifnotempty
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@maketitle}
+%
+% 独立した表題ページを作らない場合の表題の出力形式です。
+%
+% \begin{macrocode}
+ \def\@maketitle{%
+ \newpage\null
+ \vskip 2em
+ \begin{center}%
+ \let\footnote\thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em
+ {\large
+ \lineskip .5em
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em
+ {\large \@date}%
+ \end{center}%
+ \par\vskip 1.5em
+%<article|report|kiyou> \ifvoid\@abstractbox\else\centerline{\box\@abstractbox}\vskip1.5em\fi
+ }
+\fi
+%</article|book|report|kiyou>
+%<*jspf>
+\newcommand{\maketitle}{\par
+ \begingroup
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\advance\leftskip 3\zw
+ \parindent 1\zw\noindent
+ \llap{\@textsuperscript{\normalfont\@thefnmark}\hskip0.3\zw}##1}%
+ \twocolumn[\@maketitle]%
+ \plainifnotempty
+ \@thanks
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+% \global\let\@title\@empty % \@title は柱に使う
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ \ifx\authors@mail\@undefined\else{%
+ \def\@makefntext{\advance\leftskip 3\zw \parindent -3\zw}%
+ \footnotetext[0]{\itshape\authors@mail}%
+ }\fi
+ \global\let\authors@mail\@undefined}
+\def\@maketitle{%
+ \newpage\null
+ \vskip 6em % used to be 2em
+ \begin{center}
+ \let\footnote\thanks
+ \ifx\@title\@undefined\else{\LARGE\headfont\@title\par}\fi
+ \lineskip .5em
+ \ifx\@author\@undefined\else
+ \vskip 1em
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par
+ \fi
+ \ifx\@etitle\@undefined\else
+ \vskip 1em
+ {\large \@etitle \par}%
+ \fi
+ \ifx\@eauthor\@undefined\else
+ \vskip 1em
+ \begin{tabular}[t]{c}%
+ \@eauthor
+ \end{tabular}\par
+ \fi
+ \vskip 1em
+ \@date
+ \end{center}
+ \vskip 1.5em
+ \centerline{\box\@abstractbox}
+ \ifx\@keywords\@undefined\else
+ \vskip 1.5em
+ \centerline{\parbox{157\jsc@mmm}{\textsf{Keywords:}\\ \small\@keywords}}
+ \fi
+ \vskip 1.5em}
+%</jspf>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{章・節}
+%
+% \paragraph{構成要素}
+%
+% |\@startsection| マクロは6個の必須引数と,オプションとして |*| と
+% 1個のオプション引数と1個の必須引数をとります。
+%
+% \begin{quote}
+% |\@startsection{名}{レベル}{字下げ}{前アキ}{後アキ}{スタイル}| \\
+% | *[別見出し]{見出し}|
+% \end{quote}
+%
+% それぞれの引数の意味は次の通りです。
+%
+% \begin{description}
+% \item[名] ユーザレベルコマンドの名前です(例: section)。
+% \item[レベル] 見出しの深さを示す数値です
+% (chapter=1, section=2, \ldots )。
+% この数値が |secnumdepth| 以下のとき見出し番号を出力します。
+% \item[字下げ] 見出しの字下げ量です。
+% \item[前アキ] この値の絶対値が見出し上側の空きです。
+% 負の場合は,見出し直後の段落をインデントしません。
+% \item[後アキ] 正の場合は,見出しの下の空きです。
+% 負の場合は,絶対値が見出しの右の空きです
+% (見出しと同じ行から本文を始めます)。
+% \item[スタイル] 見出しの文字スタイルの設定です。
+% \item[\texttt{*}] この \texttt{*} 印がないと,見出し番号を付け,
+% 見出し番号のカウンタに1を加算します。
+% \item[別見出し] 目次や柱に出力する見出しです。
+% \item[見出し] 見出しです。
+% \end{description}
+%
+% 見出しの命令は通常 |\@startsection| とその最初の6個の引数として
+% 定義されます。
+%
+% 次は |\@startsection| の定義です。
+% 情報処理学会論文誌スタイルファイル(\texttt{ipsjcommon.sty})
+% を参考にさせていただきましたが,完全に行送りが |\baselineskip|
+% の整数倍にならなくてもいいから前の行と重ならないようにしました。
+%
+% \begin{macrocode}
+\def\@startsection#1#2#3#4#5#6{%
+ \if@noskipsec \leavevmode \fi
+ \par
+% 見出し上の空きを \@tempskipa にセットする
+ \@tempskipa #4\relax
+% \@afterindent は見出し直後の段落を字下げするかどうかを表すスイッチ
+ \if@english \@afterindentfalse \else \@afterindenttrue \fi
+% 見出し上の空きが負なら見出し直後の段落を字下げしない
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty
+% 次の行は削除
+% \addvspace\@tempskipa
+% 次の \noindent まで追加
+ \ifdim \@tempskipa >\z@
+ \if@slide\else
+ \null
+ \vspace*{-\baselineskip}%
+ \fi
+ \vskip\@tempskipa
+ \fi
+ \fi
+ \noindent
+% 追加終わり
+ \@ifstar
+ {\@ssect{#3}{#4}{#5}{#6}}%
+ {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
+% \end{macrocode}
+%
+% |\@sect| と |\@xsect| は,
+% 前のアキがちょうどゼロの場合にもうまくいくように,多少変えてあります。
+%
+% \begin{macrocode}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+% 見出し後の空きを \@tempskipa にセット
+ \@tempskipa #5\relax
+% 条件判断の順序を入れ換えました
+ \ifdim \@tempskipa<\z@
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec #8}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}}% 目次にフルネームを載せるなら #8
+ \else
+ \begingroup
+ \interlinepenalty \@M % 下から移動
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+% \interlinepenalty \@M % 上に移動
+ #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\csname the#1\endcsname}%
+ \fi
+ #7}% 目次にフルネームを載せるならここは #8
+ \fi
+ \@xsect{#5}}
+% \end{macrocode}
+%
+% 二つ挿入した |\everyparhook| のうち後者が |\paragraph| 類の後で2回実行され,
+% それ以降は前者が実行されます。
+%
+% [2011-10-05 LTJ] Lua\TeX-jaでは |\everyparhook| は不要なので削除。
+%
+% [2016-07-28] \texttt{slide}オプションと\texttt{twocolumn}オプションを
+% 同時に指定した場合の罫線の位置を微調整しました。
+%
+% \begin{macrocode}
+\def\@xsect#1{%
+% 見出しの後ろの空きを \@tempskipa にセット
+ \@tempskipa #1\relax
+% 条件判断の順序を変えました
+ \ifdim \@tempskipa<\z@
+ \@nobreakfalse
+ \global\@noskipsectrue
+ \everypar{%
+ \if@noskipsec
+ \global\@noskipsecfalse
+ {\setbox\z@\lastbox}%
+ \clubpenalty\@M
+ \begingroup \@svsechd \endgroup
+ \unskip
+ \@tempskipa #1\relax
+ \hskip -\@tempskipa\ltjfakeparbegin
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}%
+ \else
+ \par \nobreak
+ \vskip \@tempskipa
+ \@afterheading
+ \fi
+ \if@slide
+ {\vskip\if@twocolumn-5\jsc@mpt\else-6\jsc@mpt\fi
+ \maybeblue\hrule height0\jsc@mpt depth1\jsc@mpt
+ \vskip\if@twocolumn 4\jsc@mpt\else 7\jsc@mpt\fi\relax}%
+ \fi
+ \par % 2000-12-18
+ \ignorespaces}
+\def\@ssect#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa<\z@
+ \def\@svsechd{#4{\hskip #1\relax #5}}%
+ \else
+ \begingroup
+ #4{%
+ \@hangfrom{\hskip #1}%
+ \interlinepenalty \@M #5\@@par}%
+ \endgroup
+ \fi
+ \@xsect{#3}}
+% \end{macrocode}
+%
+% \paragraph{柱関係の命令}
+%
+% \begin{macro}{\chaptermark}
+% \begin{macro}{\sectionmark}
+% \begin{macro}{\subsectionmark}
+% \begin{macro}{\subsubsectionmark}
+% \begin{macro}{\paragraphmark}
+% \begin{macro}{\subparagraphmark}
+%
+% |\...mark| の形の命令を初期化します(第\ref{sec:pagestyle}節参照)。
+% |\chaptermark| 以外は\LaTeX 本体で定義済みです。
+%
+% \begin{macrocode}
+\newcommand*\chaptermark[1]{}
+% \newcommand*{\sectionmark}[1]{}
+% \newcommand*{\subsectionmark}[1]{}
+% \newcommand*{\subsubsectionmark}[1]{}
+% \newcommand*{\paragraphmark}[1]{}
+% \newcommand*{\subparagraphmark}[1]{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{カウンタの定義}
+%
+% \begin{macro}{\c@secnumdepth}
+%
+% |secnumdepth| は第何レベルの見出しまで
+% 番号を付けるかを決めるカウンタです。
+%
+% \begin{macrocode}
+%<!book&!report>\setcounter{secnumdepth}{3}
+%<book|report>\setcounter{secnumdepth}{2}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@chapter}
+% \begin{macro}{\c@section}
+% \begin{macro}{\c@subsection}
+% \begin{macro}{\c@subsubsection}
+% \begin{macro}{\c@paragraph}
+% \begin{macro}{\c@subparagraph}
+%
+% 見出し番号のカウンタです。
+% |\newcounter| の第1引数が新たに作るカウンタです。
+% これは第2引数が増加するたびに 0 に戻されます。
+% 第2引数は定義済みのカウンタです。
+%
+% \begin{macrocode}
+\newcounter{part}
+%<book|report>\newcounter{chapter}
+%<book|report>\newcounter{section}[chapter]
+%<!book&!report>\newcounter{section}
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\thepart}
+% \begin{macro}{\thechapter}
+% \begin{macro}{\thesection}
+% \begin{macro}{\thesubsection}
+% \begin{macro}{\thesubsubsection}
+% \begin{macro}{\theparagraph}
+% \begin{macro}{\thesubparagraph}
+%
+% カウンタの値を出力する命令 |\the何々| を定義します。
+%
+% カウンタを出力するコマンドには次のものがあります。
+%
+% \begin{quote}
+% |\arabic{COUNTER} | 1, 2, 3, \ldots \\
+% |\roman{COUNTER} | i, ii, iii, \ldots \\
+% |\Roman{COUNTER} | I, II, III, \ldots \\
+% |\alph{COUNTER} | a, b, c, \ldots \\
+% |\Alph{COUNTER} | A, B, C, \ldots \\
+% |\kansuji{COUNTER} | 一, 二, 三, \ldots
+% \end{quote}
+%
+% 以下ではスペース節約のため |@| の付いた内部表現を多用しています。
+%
+% \begin{macrocode}
+\renewcommand{\thepart}{\@Roman\c@part}
+%<!book&!report>% \renewcommand{\thesection}{\@arabic\c@section}
+%<!book&!report>\renewcommand{\thesection}{\presectionname\@arabic\c@section\postsectionname}
+%<!book&!report>\renewcommand{\thesubsection}{\@arabic\c@section.\@arabic\c@subsection}
+%<*book|report>
+\renewcommand{\thechapter}{\@arabic\c@chapter}
+\renewcommand{\thesection}{\thechapter.\@arabic\c@section}
+\renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}
+%</book|report>
+\renewcommand{\thesubsubsection}{%
+ \thesubsection.\@arabic\c@subsubsection}
+\renewcommand{\theparagraph}{%
+ \thesubsubsection.\@arabic\c@paragraph}
+\renewcommand{\thesubparagraph}{%
+ \theparagraph.\@arabic\c@subparagraph}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@chapapp}
+% \begin{macro}{\@chappos}
+%
+% |\@chapapp| の初期値は |\prechaptername|(第)です。
+%
+% |\@chappos| の初期値は |\postchaptername|(章)です。
+%
+% |\appendix| は |\@chapapp| を |\appendixname| に,
+% |\@chappos| を空に再定義します。
+%
+% [2003-03-02] |\@secapp| は外しました。
+%
+% \begin{macrocode}
+%<book|report>\newcommand{\@chapapp}{\prechaptername}
+%<book|report>\newcommand{\@chappos}{\postchaptername}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{前付,本文,後付}
+%
+% 本のうち章番号があるのが「本文」,
+% それ以外が「前付」「後付」です。
+%
+% \begin{macro}{\frontmatter}
+%
+% ページ番号をローマ数字にし,章番号を付けないようにします。
+%
+% [2017-03-05] |\frontmatter| と |\mainmatter| の2つの命令は,
+% 改丁または改ページした後で |\pagenumbering{...}| でノンブルを1に
+% リセットします。長い間 |\frontmatter| は \texttt{openany} のときに
+% 単なる改ページとしていましたが,これではノンブルをリセットする際に
+% 偶奇逆転が起こる場合がありました。\texttt{openany} かどうかに依らず
+% 奇数ページまで繰るように修正することで,問題を解消しました。
+% 実は,\LaTeX の標準クラスでは1998年に修正されていた問題です
+% (コミュニティ版\pLaTeX の標準クラス2017/03/05も参照)。
+%
+% \begin{macrocode}
+%<*book>
+\newcommand\frontmatter{%
+ \pltx@cleartooddpage
+ \@mainmatterfalse
+ \pagenumbering{roman}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mainmatter}
+%
+% ページ番号を算用数字にし,章番号を付けるようにします。
+%
+% \begin{macrocode}
+\newcommand\mainmatter{%
+ \pltx@cleartooddpage
+ \@mainmattertrue
+ \pagenumbering{arabic}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\backmatter}
+%
+% 章番号を付けないようにします。ページ番号の付け方は変わりません。
+%
+% \begin{macrocode}
+\newcommand\backmatter{%
+ \if@openleft
+ \cleardoublepage
+ \else\if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi\fi
+ \@mainmatterfalse}
+%</book>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{部}
+%
+% \begin{macro}{\part}
+%
+% 新しい部を始めます。
+%
+% |\secdef| を使って見出しを定義しています。
+% このマクロは二つの引数をとります。
+%
+% \begin{quote}
+% |\secdef{星なし}{星あり}|
+% \end{quote}
+%
+% \begin{description}
+% \item[星なし] \texttt{*} のない形の定義です。
+% \item[星あり] \texttt{*} のある形の定義です。
+% \end{description}
+%
+% |\secdef| は次のようにして使います。
+%
+%\begin{verbatim}
+% \def\chapter { ... \secdef \CMDA \CMDB }
+% \def\CMDA [#1]#2{....} % \chapter[...]{...} の定義
+% \def\CMDB #1{....} % \chapter*{...} の定義
+%\end{verbatim}
+%
+% まず |book| と |report| のクラス以外です。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcommand\part{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \addvspace{4ex}%
+ \if@english \@afterindentfalse \else \@afterindenttrue \fi
+ \secdef\@part\@spart}
+%</!book&!report>
+% \end{macrocode}
+%
+% |book| および |report| クラスの場合は,少し複雑です。
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand\part{%
+ \if@openleft
+ \cleardoublepage
+ \else\if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi\fi
+ \thispagestyle{empty}% 欧文用標準スタイルでは plain
+ \if@twocolumn
+ \onecolumn
+ \@restonecoltrue
+ \else
+ \@restonecolfalse
+ \fi
+ \null\vfil
+ \secdef\@part\@spart}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@part}
+%
+% 部の見出しを出力します。
+% |\bfseries| を |\headfont| に変えました。
+%
+% |book| および |report| クラス以外では |secnumdepth| が $-1$ より大きいとき
+% 部番号を付けます。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{%
+ \prepartname\thepart\postpartname\hspace{1\zw}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\parindent\z@
+ \raggedright
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+ \Large\headfont\prepartname\thepart\postpartname
+ \par\nobreak
+ \fi
+ \huge \headfont #2%
+ \markboth{}{}\par}%
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+%</!book&!report>
+% \end{macrocode}
+%
+% |book| および |report| クラスでは |secnumdepth| が $-2$ より大きいとき部番号を付けます。
+%
+% \begin{macrocode}
+%<*book|report>
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{%
+ \prepartname\thepart\postpartname\hspace{1\zw}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\centering
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \huge\headfont \prepartname\thepart\postpartname
+ \par\vskip20\jsc@mpt
+ \fi
+ \Huge \headfont #2\par}%
+ \@endpart}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@spart}
+%
+% 番号を付けない部です。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\def\@spart#1{{%
+ \parindent \z@ \raggedright
+ \interlinepenalty \@M
+ \normalfont
+ \huge \headfont #1\par}%
+ \nobreak
+ \vskip 3ex
+ \@afterheading}
+%</!book&!report>
+%<*book|report>
+\def\@spart#1{{%
+ \centering
+ \interlinepenalty \@M
+ \normalfont
+ \Huge \headfont #1\par}%
+ \@endpart}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@endpart}
+%
+% |\@part| と |\@spart| の最後で実行されるマクロです。
+% 両面印刷のときは白ページを追加します。
+% 二段組のときには,二段組に戻します。
+%
+% [2016-12-13] \texttt{openany} のときには白ページが追加されるのは変なので,
+% その場合は追加しないようにしました。このバグは\LaTeX では
+% classes.dtx v1.4b (2000/05/19)
+% で修正されています。
+%
+% \begin{macrocode}
+%<*book|report>
+\def\@endpart{\vfil\newpage
+ \if@twoside
+ \if@openleft %% added (2017/02/24)
+ \null\thispagestyle{empty}\newpage
+ \else\if@openright %% added (2016/12/13)
+ \null\thispagestyle{empty}\newpage
+ \fi\fi %% added (2016/12/13, 2017/02/24)
+ \fi
+ \if@restonecol
+ \twocolumn
+ \fi}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{章}
+%
+% \begin{macro}{\chapter}
+%
+% 章の最初のページスタイルは,全体が |empty| でなければ |plain| に
+% します。
+% また,|\@topnum| を 0 にして,
+% 章見出しの上に図や表が来ないようにします。
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand{\chapter}{%
+ \if@openleft\cleardoublepage\else
+ \if@openright\cleardoublepage\else\clearpage\fi\fi
+ \plainifnotempty % 元: \thispagestyle{plain}
+ \global\@topnum\z@
+ \if@english \@afterindentfalse \else \@afterindenttrue \fi
+ \secdef
+ {\@omit@numberfalse\@chapter}%
+ {\@omit@numbertrue\@schapter}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@chapter}
+%
+% 章見出しを出力します。
+% |secnumdepth| が0以上かつ |\@mainmatter| が真のとき章番号を出力します。
+%
+% \begin{macrocode}
+\def\@chapter[#1]#2{%
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \refstepcounter{chapter}%
+ \typeout{\@chapapp\thechapter\@chappos}%
+ \addcontentsline{toc}{chapter}%
+ {\protect\numberline
+ % {\if@english\thechapter\else\@chapapp\thechapter\@chappos\fi}%
+ {\@chapapp\thechapter\@chappos}%
+ #1}%
+%<book> \else\addcontentsline{toc}{chapter}{#1}\fi
+ \else
+ \addcontentsline{toc}{chapter}{#1}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\jsc@mpt}}%
+ \addtocontents{lot}{\protect\addvspace{10\jsc@mpt}}%
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else
+ \@makechapterhead{#2}%
+ \@afterheading
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makechapterhead}
+%
+% 実際に章見出しを組み立てます。
+% |\bfseries| を |\headfont| に変えました。
+%
+% \begin{macrocode}
+\def\@makechapterhead#1{%
+ \vspace*{2\Cvs}% 欧文は50pt
+ {\parindent \z@ \raggedright \normalfont
+ \ifnum \c@secnumdepth >\m@ne
+%<book> \if@mainmatter
+ \huge\headfont \@chapapp\thechapter\@chappos
+ \par\nobreak
+ \vskip \Cvs % 欧文は20pt
+%<book> \fi
+ \fi
+ \interlinepenalty\@M
+ \Huge \headfont #1\par\nobreak
+ \vskip 3\Cvs}} % 欧文は40pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@schapter}
+%
+% |\chapter*{...}| コマンドの本体です。
+% |\chaptermark| を補いました。
+%
+% \begin{macrocode}
+\def\@schapter#1{%
+ \chaptermark{#1}%
+ \if@twocolumn
+ \@topnewpage[\@makeschapterhead{#1}]%
+ \else
+ \@makeschapterhead{#1}\@afterheading
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makeschapterhead}
+%
+% 番号なしの章見出しです。
+%
+% \begin{macrocode}
+\def\@makeschapterhead#1{%
+ \vspace*{2\Cvs}% 欧文は50pt
+ {\parindent \z@ \raggedright
+ \normalfont
+ \interlinepenalty\@M
+ \Huge \headfont #1\par\nobreak
+ \vskip 3\Cvs}} % 欧文は40pt
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{下位レベルの見出し}
+%
+% \begin{macro}{\section}
+%
+% 欧文版では |\@startsection| の第4引数を負にして最初の段落の
+% 字下げを禁止していますが,
+% 和文版では正にして字下げするようにしています。
+%
+% 段組のときはなるべく左右の段が狂わないように工夫しています。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\section}{%
+%<jspf>\ifx\maketitle\relax\else\maketitle\fi
+ \@startsection{section}{1}{\z@}%
+%<!kiyou> {0.6\Cvs}{0.4\Cvs}%
+%<kiyou> {\Cvs}{0.5\Cvs}%
+% {\normalfont\large\headfont\@secapp}}
+ {\normalfont\large\headfont\raggedright}}
+\else
+ \newcommand{\section}{%
+ \if@slide\clearpage\fi
+ \@startsection{section}{1}{\z@}%
+ {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ
+ {.5\Cvs \@plus.3\Cdp}% 後アキ
+% {\normalfont\Large\headfont\@secapp}}
+ {\normalfont\Large\headfont\raggedright}}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subsection}
+%
+% 同上です。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {\z@}{\if@slide .4\Cvs \else \z@ \fi}%
+ {\normalfont\normalsize\headfont}}
+\else
+ \newcommand{\subsection}{\@startsection{subsection}{2}{\z@}%
+ {\Cvs \@plus.5\Cdp \@minus.2\Cdp}% 前アキ
+ {.5\Cvs \@plus.3\Cdp}% 後アキ
+ {\normalfont\large\headfont}}
+\fi
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\subsubsection}
+%
+% [2016-07-22] \texttt{slide}オプション指定時に |\subsubsection| の文字列
+% と罫線が重なる問題に対処しました(forum:1982)。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
+ {\z@}{\if@slide .4\Cvs \else \z@ \fi}%
+ {\normalfont\normalsize\headfont}}
+\else
+ \newcommand{\subsubsection}{\@startsection{subsubsection}{3}{\z@}%
+ {\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
+ {\if@slide .5\Cvs \@plus.3\Cdp \else \z@ \fi}%
+ {\normalfont\normalsize\headfont}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\paragraph}
+% \begin{macro}{\jsParagraphMark}
+%
+% 見出しの後ろで改行されません。
+%
+% [2016-11-16] 従来は |\paragraph| の最初に出るマークを「■」に固定して
+% いましたが,このマークを変更可能にするため |\jsParagraphMark| というマクロ
+% に切り出しました。これで,たとえば
+%\begin{verbatim}
+% \renewcommand{\jsParagraphMark}{★}
+%\end{verbatim}
+% とすれば「★」に変更できますし,マークを空にすることも容易です。
+% なお,某学会クラスでは従来どおりマークは付きません。
+%
+% \begin{macrocode}
+%<!jspf>\newcommand{\jsParagraphMark}{■}
+\if@twocolumn
+ \newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
+ {\z@}{\if@slide .4\Cvs \else -1\zw\fi}% 改行せず 1\zw のアキ
+%<jspf> {\normalfont\normalsize\headfont}}
+%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}}
+\else
+ \newcommand{\paragraph}{\@startsection{paragraph}{4}{\z@}%
+ {0.5\Cvs \@plus.5\Cdp \@minus.2\Cdp}%
+ {\if@slide .5\Cvs \@plus.3\Cdp \else -1\zw\fi}% 改行せず 1\zw のアキ
+%<jspf> {\normalfont\normalsize\headfont}}
+%<!jspf> {\normalfont\normalsize\headfont\jsParagraphMark}}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\subparagraph}
+%
+% 見出しの後ろで改行されません。
+%
+% \begin{macrocode}
+\if@twocolumn
+ \newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}%
+ {\z@}{\if@slide .4\Cvs \@plus.3\Cdp \else -1\zw\fi}%
+ {\normalfont\normalsize\headfont}}
+\else
+ \newcommand{\subparagraph}{\@startsection{subparagraph}{5}{\z@}%
+ {\z@}{\if@slide .5\Cvs \@plus.3\Cdp \else -1\zw\fi}%
+ {\normalfont\normalsize\headfont}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{リスト環境}
+%
+% 第 $k$ レベルのリストの初期化をするのが |\@list|$k$ です
+% ($k = \mathtt{i}, \mathtt{ii}, \mathtt{iii}, \mathtt{iv}$)。
+% |\@list|$k$ は |\leftmargin| を |\leftmargin|$k$ に設定します。
+%
+% \begin{macro}{\leftmargini}
+%
+% 二段組であるかないかに応じてそれぞれ 2em,2.5em でしたが,
+% ここでは全角幅の2倍にしました。
+%
+% [2002-05-11] |3\zw| に変更しました。
+%
+% [2005-03-19] 二段組は |2\zw| に戻しました。
+%
+% \begin{macrocode}
+\if@slide
+ \setlength\leftmargini{1\zw}
+\else
+ \if@twocolumn
+ \setlength\leftmargini{2\zw}
+ \else
+ \setlength\leftmargini{3\zw}
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\leftmarginii}
+% \begin{macro}{\leftmarginiii}
+% \begin{macro}{\leftmarginiv}
+% \begin{macro}{\leftmarginv}
+% \begin{macro}{\leftmarginvi}
+%
+% |ii|,|iii|,|iv| は |\labelsep| と
+% それぞれ `(m)',`vii.',`M.' の幅との和より大きくする
+% ことになっています。ここでは全角幅の整数倍に丸めました。
+%
+% \begin{macrocode}
+\if@slide
+ \setlength\leftmarginii {1\zw}
+ \setlength\leftmarginiii{1\zw}
+ \setlength\leftmarginiv {1\zw}
+ \setlength\leftmarginv {1\zw}
+ \setlength\leftmarginvi {1\zw}
+\else
+ \setlength\leftmarginii {2\zw}
+ \setlength\leftmarginiii{2\zw}
+ \setlength\leftmarginiv {2\zw}
+ \setlength\leftmarginv {1\zw}
+ \setlength\leftmarginvi {1\zw}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelsep}
+% \begin{macro}{\labelwidth}
+%
+% |\labelsep| はラベルと本文の間の距離です。
+% |\labelwidth| はラベルの幅です。
+% これは二分に変えました。
+%
+% \begin{macrocode}
+\setlength \labelsep {0.5\zw} % .5em
+\setlength \labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\partopsep}
+%
+% リスト環境の前に空行がある場合,
+% |\parskip| と |\topsep| に |\partopsep| を
+% 加えた値だけ縦方向の空白ができます。
+% 0 に改変しました。
+%
+% \begin{macrocode}
+\setlength\partopsep{\z@} % {2\p@ \@plus 1\p@ \@minus 1\p@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@beginparpenalty}
+% \begin{macro}{\@endparpenalty}
+% \begin{macro}{\@itempenalty}
+%
+% リストや段落環境の前後,リスト項目間に挿入されるペナルティです。
+%
+% \begin{macrocode}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listi}
+% \begin{macro}{\@listI}
+%
+% |\@listi| は |\leftmargin|,|\parsep|,|\topsep|,|\itemsep| などの
+% トップレベルの定義をします。
+% この定義は,フォントサイズコマンドによって変更されます
+% (たとえば |\small| の中では小さい値に設定されます)。
+% このため,|\normalsize| がすべてのパラメータを戻せるように,
+% |\@listI| で |\@listi| のコピーを保存します。
+% 元の値はかなり複雑ですが,ここでは簡素化してしまいました。
+% 特に最初と最後に行送りの半分の空きが入るようにしてあります。
+% アスキーの標準スタイルでは
+% トップレベルの |itemize|,|enumerate| 環境でだけ
+% 最初と最後に行送りの半分の空きが入るようになっていました。
+%
+% [2004-09-27] |\topsep| のグルー $_{-0.1}^{+0.2}$ |\baselineskip|
+% を思い切って外しました。
+%
+% \begin{macrocode}
+\def\@listi{\leftmargin\leftmargini
+ \parsep \z@
+ \topsep 0.5\baselineskip
+ \itemsep \z@ \relax}
+\let\@listI\@listi
+% \end{macrocode}
+%
+% 念のためパラメータを初期化します(実際には不要のようです)。
+%
+% \begin{macrocode}
+\@listi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@listii}
+% \begin{macro}{\@listiii}
+% \begin{macro}{\@listiv}
+% \begin{macro}{\@listv}
+% \begin{macro}{\@listvi}
+%
+% 第2〜6レベルのリスト環境のパラメータの設定です。
+%
+% \begin{macrocode}
+\def\@listii{\leftmargin\leftmarginii
+ \labelwidth\leftmarginii \advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep\parsep}
+\def\@listiii{\leftmargin\leftmarginiii
+ \labelwidth\leftmarginiii \advance\labelwidth-\labelsep
+ \topsep \z@
+ \parsep \z@
+ \itemsep\parsep}
+\def\@listiv {\leftmargin\leftmarginiv
+ \labelwidth\leftmarginiv
+ \advance\labelwidth-\labelsep}
+\def\@listv {\leftmargin\leftmarginv
+ \labelwidth\leftmarginv
+ \advance\labelwidth-\labelsep}
+\def\@listvi {\leftmargin\leftmarginvi
+ \labelwidth\leftmarginvi
+ \advance\labelwidth-\labelsep}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{enumerate環境}
+%
+% |enumerate| 環境はカウンタ |enumi|,|enumii|,|enumiii|,
+% |enumiv| を使います。|enum|$n$ は第 $n$ レベルの番号です。
+%
+% \begin{macro}{\theenumi}
+% \begin{macro}{\theenumii}
+% \begin{macro}{\theenumiii}
+% \begin{macro}{\theenumiv}
+%
+% 出力する番号の書式を設定します。
+% これらは\LaTeX 本体(\texttt{ltlists.dtx} 参照)で定義済みですが,
+% ここでは表し方を変えています。
+% |\@arabic|,|\@alph|,|\@roman|,|\@Alph| はそれぞれ
+% 算用数字,小文字アルファベット,小文字ローマ数字,大文字アルファベット
+% で番号を出力する命令です。
+%
+% \begin{macrocode}
+\renewcommand{\theenumi}{\@arabic\c@enumi}
+\renewcommand{\theenumii}{\@alph\c@enumii}
+\renewcommand{\theenumiii}{\@roman\c@enumiii}
+\renewcommand{\theenumiv}{\@Alph\c@enumiv}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\labelenumi}
+% \begin{macro}{\labelenumii}
+% \begin{macro}{\labelenumiii}
+% \begin{macro}{\labelenumiv}
+%
+% |enumerate| 環境の番号を出力する命令です。
+% 第2レベル以外は最後に欧文のピリオドが付きますが,
+% これは好みに応じて取り払ってください。
+% 第2レベルの番号のかっこは和文用に換え,
+% その両側に入る余分なグルーを |\inhibitglue| で
+% 取り除いています。
+%
+% \begin{macrocode}
+\newcommand{\labelenumi}{\theenumi.}
+\newcommand{\labelenumii}{\inhibitglue(\theenumii)\inhibitglue}
+\newcommand{\labelenumiii}{\theenumiii.}
+\newcommand{\labelenumiv}{\theenumiv.}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\p@enumii}
+% \begin{macro}{\p@enumiii}
+% \begin{macro}{\p@enumiv}
+%
+% |\p@enum|$n$ は |\ref| コマンドで |enumerate| 環境の第 $n$ レベルの
+% 項目が参照されるときの書式です。
+% これも第2レベルは和文用かっこにしました。
+%
+% \begin{macrocode}
+\renewcommand{\p@enumii}{\theenumi}
+\renewcommand{\p@enumiii}{\theenumi\inhibitglue(\theenumii)}
+\renewcommand{\p@enumiv}{\p@enumiii\theenumiii}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{itemize環境}
+%
+% \begin{macro}{\labelitemi}
+% \begin{macro}{\labelitemii}
+% \begin{macro}{\labelitemiii}
+% \begin{macro}{\labelitemiv}
+% |itemize| 環境の第 $n$ レベルのラベルを作るコマンドです。
+% \begin{macrocode}
+\newcommand\labelitemi{\textbullet}
+\newcommand\labelitemii{\normalfont\bfseries \textendash}
+\newcommand\labelitemiii{\textasteriskcentered}
+\newcommand\labelitemiv{\textperiodcentered}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{description環境}
+%
+% \begin{environment}{description}
+%
+% 本来の |description| 環境では,項目名が短いと,説明部分の頭が
+% それに引きずられて左に出てしまいます。
+% これを解決した新しい |description| の実装です。
+%
+% \begin{macrocode}
+\newenvironment{description}{%
+ \list{}{%
+ \labelwidth=\leftmargin
+ \labelsep=1\zw
+ \advance \labelwidth by -\labelsep
+ \let \makelabel=\descriptionlabel}}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\descriptionlabel}
+%
+% |description| 環境のラベルを出力するコマンドです。
+% 好みに応じて |#1| の前に適当な空き
+% (たとえば |\hspace{1\zw}|)を入れるのもいいと思います。
+%
+% \begin{macrocode}
+\newcommand*\descriptionlabel[1]{\normalfont\headfont #1\hfil}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{概要}
+%
+% \begin{environment}{abstract}
+%
+% 概要(要旨,梗概)を出力する環境です。
+% |book| クラスでは各章の初めにちょっとしたことを書くのに使います。
+% |titlepage| オプション付きの |article| クラスでは,
+% 独立したページに出力されます。
+% |abstract| 環境は元は |quotation| 環境で作られていましたが,
+% |quotation| 環境の右マージンをゼロにしたので,
+% |list| 環境で作り直しました。
+%
+% JSPFスタイルでは実際の出力は |\maketitle| で行われます。
+%
+% \begin{macrocode}
+%<*book>
+\newenvironment{abstract}{%
+ \begin{list}{}{%
+ \listparindent=1\zw
+ \itemindent=\listparindent
+ \rightmargin=0pt
+ \leftmargin=5\zw}\item[]}{\end{list}\vspace{\baselineskip}}
+%</book>
+%<*article|report|kiyou>
+\newbox\@abstractbox
+\if@titlepage
+ \newenvironment{abstract}{%
+ \titlepage
+ \null\vfil
+ \@beginparpenalty\@lowpenalty
+ \begin{center}%
+ \headfont \abstractname
+ \@endparpenalty\@M
+ \end{center}}%
+ {\par\vfil\null\endtitlepage}
+\else
+ \newenvironment{abstract}{%
+ \if@twocolumn
+ \ifx\maketitle\relax
+ \section*{\abstractname}%
+ \else
+ \global\setbox\@abstractbox\hbox\bgroup
+ \begin{minipage}[b]{\textwidth}
+ \small\parindent1\zw
+ \begin{center}%
+ {\headfont \abstractname\vspace{-.5em}\vspace{\z@}}%
+ \end{center}%
+ \list{}{%
+ \listparindent\parindent
+ \itemindent \listparindent
+ \rightmargin \leftmargin}%
+ \item\relax
+ \fi
+ \else
+ \small
+ \begin{center}%
+ {\headfont \abstractname\vspace{-.5em}\vspace{\z@}}%
+ \end{center}%
+ \list{}{%
+ \listparindent\parindent
+ \itemindent \listparindent
+ \rightmargin \leftmargin}%
+ \item\relax
+ \fi}{\if@twocolumn
+ \ifx\maketitle\relax
+ \else
+ \endlist\end{minipage}\egroup
+ \fi
+ \else
+ \endlist
+ \fi}
+\fi
+%</article|report|kiyou>
+%<*jspf>
+\newbox\@abstractbox
+\newenvironment{abstract}{%
+ \global\setbox\@abstractbox\hbox\bgroup
+ \begin{minipage}[b]{157\jsc@mmm}{\sffamily Abstract}\par
+ \small
+ \if@english \parindent6\jsc@mmm \else \parindent1\zw \fi}%
+ {\end{minipage}\egroup}
+%</jspf>
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{キーワード}
+%
+% \begin{environment}{keywords}
+%
+% キーワードを準備する環境です。
+% 実際の出力は |\maketitle| で行われます。
+%
+% \begin{macrocode}
+%<*jspf>
+%\newbox\@keywordsbox
+%\newenvironment{keywords}{%
+% \global\setbox\@keywordsbox\hbox\bgroup
+% \begin{minipage}[b]{157\jsc@mmm}{\sffamily Keywords:}\par
+% \small\parindent0\zw}%
+% {\end{minipage}\egroup}
+%</jspf>
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{verse環境}
+%
+% \begin{environment}{verse}
+%
+% 詩のための |verse| 環境です。
+%
+% \begin{macrocode}
+\newenvironment{verse}{%
+ \let \\=\@centercr
+ \list{}{%
+ \itemsep \z@
+ \itemindent -2\zw % 元: -1.5em
+ \listparindent\itemindent
+ \rightmargin \z@
+ \advance\leftmargin 2\zw}% 元: 1.5em
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{quotation環境}
+%
+% \begin{environment}{quotation}
+%
+% 段落の頭の字下げ量を1.5emから |\parindent| に変えました。
+% また,右マージンを 0 にしました。
+%
+% \begin{macrocode}
+\newenvironment{quotation}{%
+ \list{}{%
+ \listparindent\parindent
+ \itemindent\listparindent
+ \rightmargin \z@}%
+ \item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{quote環境}
+%
+% \begin{environment}{quote}
+%
+% |quote| 環境は,段落がインデントされないことを除き,
+% |quotation| 環境と同じです。
+%
+% \begin{macrocode}
+\newenvironment{quote}%
+ {\list{}{\rightmargin\z@}\item\relax}{\endlist}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{定理など}
+%
+% |ltthm.dtx| 参照。たとえば次のように定義します。
+%\begin{verbatim}
+% \newtheorem{definition}{定義}
+% \newtheorem{axiom}{公理}
+% \newtheorem{theorem}{定理}
+%\end{verbatim}
+%
+% [2001-04-26] 定理の中はイタリック体になりましたが,
+% これでは和文がゴシック体になってしまうので,
+% |\itshape| を削除しました。
+%
+% [2009-08-23] |\bfseries| を |\headfont| に直し,
+% |\labelsep| を |1\zw| にし,括弧を全角にしました。
+%
+% \begin{macrocode}
+\def\@begintheorem#1#2{\trivlist\labelsep=1\zw
+ \item[\hskip \labelsep{\headfont #1\ #2}]}
+\def\@opargbegintheorem#1#2#3{\trivlist\labelsep=1\zw
+ \item[\hskip \labelsep{\headfont #1\ #2(#3)}]}
+% \end{macrocode}
+%
+% \begin{environment}{titlepage}
+%
+% タイトルを独立のページに出力するのに使われます。
+%
+% [2017-02-24] コミュニティ版\pLaTeX の標準クラス2017/02/15に合わせて,
+% bookクラスでタイトルを必ず奇数ページに送るようにしました。といっても,
+% 横組クラスしかありませんでしたので,従来の挙動は何も変わっていません。
+% また,book以外の場合のページ番号のリセットもコミュニティ版\pLaTeX の
+% 標準クラス2017/02/15に合わせましたが,こちらも片面印刷あるいは
+% 独立のタイトルページを作らないクラスばかりでしたので,従来の挙動は
+% 何も変わらずに済みました。
+%
+% \begin{macrocode}
+\newenvironment{titlepage}{%
+%<book> \pltx@cleartooddpage %% 2017-02-24
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse\newpage
+ \fi
+ \thispagestyle{empty}%
+ \ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi
+ }%
+ {\if@restonecol\twocolumn \else \newpage \fi
+ \if@twoside\else
+ \setcounter{page}\@ne
+ \fi}
+% \end{macrocode}
+% \end{environment}
+%
+% \paragraph{付録}
+%
+% \begin{macro}{\appendix}
+%
+% 本文と付録を分離するコマンドです。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcommand{\appendix}{\par
+ \setcounter{section}{0}%
+ \setcounter{subsection}{0}%
+ \gdef\presectionname{\appendixname}%
+ \gdef\postsectionname{}%
+% \gdef\thesection{\@Alph\c@section}% [2003-03-02]
+ \gdef\thesection{\presectionname\@Alph\c@section\postsectionname}%
+ \gdef\thesubsection{\@Alph\c@section.\@arabic\c@subsection}}
+%</!book&!report>
+%<*book|report>
+\newcommand{\appendix}{\par
+ \setcounter{chapter}{0}%
+ \setcounter{section}{0}%
+ \gdef\@chapapp{\appendixname}%
+ \gdef\@chappos{}%
+ \gdef\thechapter{\@Alph\c@chapter}}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{パラメータの設定}
+%
+% \paragraph{arrayとtabular環境}
+%
+% \begin{macro}{\arraycolsep}
+%
+% |array| 環境の列間には |\arraycolsep| の2倍の幅の空きが入ります。
+%
+% \begin{macrocode}
+\setlength\arraycolsep{5\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tabcolsep}
+%
+% |tabular| 環境の列間には |\tabcolsep| の2倍の幅の空きが入ります。
+%
+% \begin{macrocode}
+\setlength\tabcolsep{6\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\arrayrulewidth}
+%
+% |array|,|tabular| 環境内の罫線の幅です。
+%
+% \begin{macrocode}
+\setlength\arrayrulewidth{.4\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\doublerulesep}
+%
+% |array|,|tabular| 環境での二重罫線間のアキです。
+%
+% \begin{macrocode}
+\setlength\doublerulesep{2\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{tabbing環境}
+%
+% \begin{macro}{\tabbingsep}
+%
+% |\'| コマンドで入るアキです。
+%
+% \begin{macrocode}
+\setlength\tabbingsep{\labelsep}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{minipage環境}
+%
+% \begin{macro}{\@mpfootins}
+%
+% |minipage| 環境の脚注の |\skip|\hspace{0pt}|\@mpfootins|
+% は通常のページの |\skip|\hspace{0pt}|\footins|
+% と同じ働きをします。
+%
+% \begin{macrocode}
+\skip\@mpfootins = \skip\footins
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{framebox環境}
+%
+% \begin{macro}{\fboxsep}
+%
+% |\fbox|,|\framebox| で内側のテキストと枠との間の空きです。
+%
+% \begin{macro}{\fboxrule}
+%
+% |\fbox|,|\framebox| の罫線の幅です。
+%
+% \begin{macrocode}
+\setlength\fboxsep{3\jsc@mpt}
+\setlength\fboxrule{.4\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{equationとeqnarray環境}
+%
+% \begin{macro}{\theequation}
+%
+% 数式番号を出力するコマンドです。
+%
+% \begin{macrocode}
+%<!book&!report>\renewcommand \theequation {\@arabic\c@equation}
+%<*book|report>
+\@addtoreset{equation}{chapter}
+\renewcommand\theequation
+ {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\jot}
+%
+% |eqnarray| の行間に余分に入るアキです。
+% デフォルトの値をコメントアウトして示しておきます。
+%
+% \begin{macrocode}
+% \setlength\jot{3pt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@eqnnum}
+%
+% 数式番号の形式です。
+% デフォルトの値をコメントアウトして示しておきます。
+%
+% |\inhibitglue(\theequation)\inhibitglue| のように和文かっこ
+% を使うことも可能です。
+%
+% \begin{macrocode}
+% \def\@eqnnum{(\theequation)}
+% \end{macrocode}
+% \end{macro}
+%
+% |amsmath| パッケージを使う場合は |\tagform@| を次のように修正します。
+%
+% \begin{macrocode}
+% \def\tagform@#1{\maketag@@@{(\ignorespaces#1\unskip\@@italiccorr)}}
+% \end{macrocode}
+%
+% \subsection{フロート}
+%
+% タイプ \texttt{TYPE} のフロートオブジェクトを
+% 扱うには,次のマクロを定義します。
+% \begin{description}
+% \item[\texttt{\bslash fps@TYPE}]
+% フロートを置く位置(float placement specifier)です。
+% \item[\texttt{\bslash ftype@TYPE}]
+% フロートの番号です。2の累乗(1,2,4,\ldots )でなければなりません。
+% \item[\texttt{\bslash ext@TYPE}]
+% フロートの目次を出力するファイルの拡張子です。
+% \item[\texttt{\bslash fnum@TYPE}]
+% キャプション用の番号を生成するマクロです。
+% \item[\texttt{\bslash @makecaption}{\meta{num}}{\meta{text}}]
+% キャプションを出力するマクロです。
+% \meta{num} は |\fnum@...| の生成する番号,
+% \meta{text} はキャプションのテキストです。
+% テキストは適当な幅の |\parbox| に入ります。
+% \end{description}
+%
+% \paragraph{figure環境}
+%
+% \begin{macro}{\c@figure}
+%
+% 図番号のカウンタです。
+%
+% \begin{macro}{\thefigure}
+%
+% 図番号を出力するコマンドです。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcounter{figure}
+\renewcommand \thefigure {\@arabic\c@figure}
+%</!book&!report>
+%<*book|report>
+\newcounter{figure}[chapter]
+\renewcommand \thefigure
+ {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@figure}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fps@figure}
+% \begin{macro}{\ftype@figure}
+% \begin{macro}{\ext@figure}
+% \begin{macro}{\fnum@figure}
+%
+% |figure| のパラメータです。
+% |\figurename| の直後に |~| が入っていましたが,
+% ここでは外しました。
+%
+% \begin{macrocode}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename\nobreak\thefigure}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{figure}
+% \begin{environment}{figure*}
+%
+% |*| 形式は段抜きのフロートです。
+%
+% \begin{macrocode}
+\newenvironment{figure}%
+ {\@float{figure}}%
+ {\end@float}
+\newenvironment{figure*}%
+ {\@dblfloat{figure}}%
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \paragraph{table環境}
+%
+% \begin{macro}{\c@table}
+% \begin{macro}{\thetable}
+%
+% 表番号カウンタと表番号を出力するコマンドです。
+% アスキー版では |\thechapter.| が |\thechapter{}・| になっていますが,
+% ここではオリジナルのままにしています。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcounter{table}
+\renewcommand\thetable{\@arabic\c@table}
+%</!book&!report>
+%<*book|report>
+\newcounter{table}[chapter]
+\renewcommand \thetable
+ {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@table}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\fps@table}
+% \begin{macro}{\ftype@table}
+% \begin{macro}{\ext@table}
+% \begin{macro}{\fnum@table}
+%
+% |table| のパラメータです。
+% |\tablename| の直後に |~| が入っていましたが,
+% ここでは外しました。
+%
+% \begin{macrocode}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename\nobreak\thetable}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{table}
+% \begin{environment}{table*}
+%
+% |*| は段抜きのフロートです。
+%
+% \begin{macrocode}
+\newenvironment{table}%
+ {\@float{table}}%
+ {\end@float}
+\newenvironment{table*}%
+ {\@dblfloat{table}}%
+ {\end@dblfloat}
+% \end{macrocode}
+% \end{environment}
+% \end{environment}
+%
+% \subsection{キャプション}
+%
+% \begin{macro}{\@makecaption}
+%
+% |\caption| コマンドにより呼び出され,
+% 実際にキャプションを出力するコマンドです。
+% 第1引数はフロートの番号,
+% 第2引数はテキストです。
+%
+% \begin{macro}{\abovecaptionskip}
+% \begin{macro}{\belowcaptionskip}
+%
+% それぞれキャプションの前後に挿入されるスペースです。
+% |\belowcaptionskip| が0になっていましたので,
+% キャプションを表の上につけた場合にキャプションと表が
+% くっついてしまうのを直しました。
+%
+% \begin{macrocode}
+\newlength\abovecaptionskip
+\newlength\belowcaptionskip
+\setlength\abovecaptionskip{5\jsc@mpt} % 元: 10\p@
+\setlength\belowcaptionskip{5\jsc@mpt} % 元: 0\p@
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% 実際のキャプションを出力します。
+% オリジナルと異なり,文字サイズを |\small| にし,
+% キャプションの幅を2cm狭くしました。
+%
+% [2003-11-05] ロジックを少し変えてみました。
+%
+% [2015-05-26] |listings| パッケージを使うときに|title| を指定すると次のエラーが出るのを修正。
+% \begin{verbatim}
+% ! Missing number, treated as zero.
+% \end{verbatim}
+%
+%
+% \begin{macrocode}
+%<*!jspf>
+% \long\def\@makecaption#1#2{{\small
+% \advance\leftskip10\jsc@mmm
+% \advance\rightskip10\jsc@mmm
+% \vskip\abovecaptionskip
+% \sbox\@tempboxa{#1{\hskip1\zw}#2}%
+% \ifdim \wd\@tempboxa >\hsize
+% #1{\hskip1\zw}#2\par
+% \else
+% \global \@minipagefalse
+% \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+% \fi
+% \vskip\belowcaptionskip}}
+\long\def\@makecaption#1#2{{\small
+ \advance\leftskip .0628\linewidth
+ \advance\rightskip .0628\linewidth
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{#1{\hskip1\zw}#2}%
+ \ifdim \wd\@tempboxa <\hsize \centering \fi
+ #1{\hskip1\zw}#2\par
+ \vskip\belowcaptionskip}}
+%</!jspf>
+%<*jspf>
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{\small\sffamily #1\quad #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ {\small\sffamily
+ \list{#1}{%
+ \renewcommand{\makelabel}[1]{##1\hfil}
+ \itemsep \z@
+ \itemindent \z@
+ \labelsep \z@
+ \labelwidth 11\jsc@mmm
+ \listparindent\z@
+ \leftmargin 11\jsc@mmm}\item\relax #2\endlist}
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+%</jspf>
+% \end{macrocode}
+% \end{macro}
+%
+% \section{フォントコマンド}
+%
+% ここでは\LaTeX~2.09で使われていたコマンドを定義します。
+% これらはテキストモードと数式モードのどちらでも動作します。
+% これらは互換性のためのもので,
+% できるだけ |\text...| と |\math...| を使ってください。
+%
+% [2016-07-15] KOMA-Script中の |\scr@DeclareOldFontCommand| に倣い,
+% これらの命令を使うときには警告を発することにしました。
+%
+% [2016-07-16] 警告を最初の一回だけ発することにしました。また,
+% 例外的に警告を出さないようにするスイッチも付けます。
+%
+% \begin{macro}{\if@jsc@warnoldfontcmd}
+% \begin{macro}{\if@jsc@warnoldfontcmdexception}
+% \begin{macrocode}
+\newif\if@jsc@warnoldfontcmd
+\@jsc@warnoldfontcmdtrue
+\newif\if@jsc@warnoldfontcmdexception
+\@jsc@warnoldfontcmdexceptionfalse
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\jsc@DeclareOldFontCommand}
+% \begin{macrocode}
+\newcommand*{\jsc@DeclareOldFontCommand}[3]{%
+ \DeclareOldFontCommand{#1}{%
+ \jsc@warnoldfontcmd{#1}#2%
+ }{%
+ \jsc@warnoldfontcmd{#1}#3%
+ }%
+}
+\DeclareRobustCommand*{\jsc@warnoldfontcmd}[1]{%
+ \if@jsc@warnoldfontcmdexception\else\if@jsc@warnoldfontcmd
+ \ClassWarning{\jsc@clsname}{%
+ deprecated old font command `\string#1' used.\MessageBreak
+ You should note, that since 1994 LaTeX2e provides a\MessageBreak
+ new font selection scheme called NFSS2 with several\MessageBreak
+ new, combinable font commands. This \jsc@clsname\MessageBreak
+ class has defined the old font commands like\MessageBreak
+ `\string#1' only for compatibility%
+ }%
+ \global\@jsc@warnoldfontcmdfalse
+ \fi\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mc}
+% \begin{macro}{\gt}
+% \begin{macro}{\rm}
+% \begin{macro}{\sf}
+% \begin{macro}{\tt}
+%
+% フォントファミリを変更します。
+%
+% \begin{macrocode}
+\jsc@DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{\mathmc}
+\jsc@DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{\mathgt}
+\jsc@DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\jsc@DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\jsc@DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bf}
+%
+% ボールドシリーズにします。通常のミーディアムシリーズに戻す
+% コマンドは |\mdseries| です。
+%
+% \begin{macrocode}
+\jsc@DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\it}
+% \begin{macro}{\sl}
+% \begin{macro}{\sc}
+%
+% フォントシェイプを変えるコマンドです。
+% 斜体とスモールキャップスは数式中では何もしません
+% (警告メッセージを出力します)。
+% 通常のアップライト体に戻すコマンドは |\upshape| です。
+%
+% \begin{macrocode}
+\jsc@DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
+\jsc@DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
+\jsc@DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\cal}
+% \begin{macro}{\mit}
+%
+% 数式モード以外では何もしません(警告を出します)。
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\cal}{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*{\mit}{\@fontswitch\relax\mathnormal}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \section{相互参照}
+%
+% \subsection{目次の類}
+%
+% |\section| コマンドは |.toc| ファイルに次のような行を出力します。
+% \begin{quote}
+% |\contentsline{section}{タイトル}{ページ}|
+% \end{quote}
+% たとえば |\section| に見出し番号が付く場合,上の「タイトル」は
+% \begin{quote}
+% |\numberline{番号}{見出し}|
+% \end{quote}
+% となります。
+% この「番号」は |\thesection| コマンドで生成された見出し番号です。
+%
+% |figure| 環境の |\caption| コマンドは |.lof| ファイルに
+% 次のような行を出力します。
+% \begin{quote}
+% |\contentsline{figure}{\numberline{番号}{キャプション}{ページ}|
+% \end{quote}
+% この「番号」は |\thefigure| コマンドで生成された図番号です。
+%
+% |table| 環境も同様です。
+%
+% |\contentsline{...}| は |\l@...| というコマンドを実行するので,
+% あらかじめ |\l@chapter|,|\l@section|,|\l@figure| などを
+% 定義しておかなければなりません。
+% これらの多くは |\@dottedtocline| コマンドを使って定義します。
+% これは
+% \begin{quote}
+% |\@dottedtocline{レベル}{インデント}{幅}{タイトル}{ページ}|
+% \end{quote}
+% という書式です。
+% \begin{description}
+% \item[レベル] この値が |tocdepth| 以下のときだけ出力されます。
+% |\chapter| はレベル0,|\section| はレベル1,等々です。
+% \item[インデント] 左側の字下げ量です。
+% \item[幅] 「タイトル」に |\numberline| コマンドが含まれる場合,
+% 節番号が入る箱の幅です。
+% \end{description}
+%
+% \begin{macro}{\@pnumwidth}
+%
+% ページ番号の入る箱の幅です。
+%
+% \begin{macro}{\@tocrmarg}
+%
+% 右マージンです。
+% |\@tocrmarg| $\ge$ |\@pnumwidth| とします。
+%
+% \begin{macro}{\@dotsep}
+%
+% 点の間隔です(単位 mu)。
+%
+% \begin{macro}{\c@tocdepth}
+%
+% 目次ページに出力する見出しレベルです。
+% 元は \texttt{article} で3,その他で2でしたが,
+% ここでは一つずつ減らしています。
+%
+% \begin{macrocode}
+\newcommand\@pnumwidth{1.55em}
+\newcommand\@tocrmarg{2.55em}
+\newcommand\@dotsep{4.5}
+%<!book&!report>\setcounter{tocdepth}{2}
+%<book|report>\setcounter{tocdepth}{1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{目次}
+%
+% \begin{macro}{\tableofcontents}
+%
+% 目次を生成します。
+%
+% \begin{macro}{\jsc@tocl@width}
+%
+% [2013-12-30] |\prechaptername| などから見積もった目次のラベルの長さです。(by ts)
+%
+% \begin{macrocode}
+\newdimen\jsc@tocl@width
+\newcommand{\tableofcontents}{%
+%<*book|report>
+ \settowidth\jsc@tocl@width{\headfont\prechaptername\postchaptername}%
+ \settowidth\@tempdima{\headfont\appendixname}%
+ \ifdim\jsc@tocl@width<\@tempdima \setlength\jsc@tocl@width{\@tempdima}\fi
+ \ifdim\jsc@tocl@width<2\zw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1\zw\fi
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse
+ \fi
+ \chapter*{\contentsname}%
+ \@mkboth{\contentsname}{}%
+%</book|report>
+%<*!book&!report>
+ \settowidth\jsc@tocl@width{\headfont\presectionname\postsectionname}%
+ \settowidth\@tempdima{\headfont\appendixname}%
+ \ifdim\jsc@tocl@width<\@tempdima\relax\setlength\jsc@tocl@width{\@tempdima}\fi
+ \ifdim\jsc@tocl@width<2\zw \divide\jsc@tocl@width by 2 \advance\jsc@tocl@width 1\zw\fi
+ \section*{\contentsname}%
+ \@mkboth{\contentsname}{\contentsname}%
+%</!book&!report>
+ \@starttoc{toc}%
+%<book|report> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}\end{macro}
+%
+% \begin{macro}{\l@part}
+%
+% 部の目次です。
+%
+% \begin{macrocode}
+\newcommand*{\l@part}[2]{%
+ \ifnum \c@tocdepth >-2\relax
+%<!book&!report> \addpenalty\@secpenalty
+%<book|report> \addpenalty{-\@highpenalty}%
+ \addvspace{2.25em \@plus\jsc@mpt}%
+ \begingroup
+ \parindent \z@
+% \@pnumwidth should be \@tocrmarg
+% \rightskip \@pnumwidth
+ \rightskip \@tocrmarg
+ \parfillskip -\rightskip
+ {\leavevmode
+ \large \headfont
+ \setlength\@lnumwidth{4\zw}%
+ #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par
+ \nobreak
+%<book|report> \global\@nobreaktrue
+%<book|report> \everypar{\global\@nobreakfalse\everypar{}}%
+ \endgroup
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@chapter}
+%
+% 章の目次です。|\@lnumwidth| を |4.683\zw| に増やしました。
+%
+% [2013-12-30] |\@lnumwidth| を |\jsc@tocl@width| から
+% 決めるようにしてみました。(by ts)
+%
+% \begin{macrocode}
+%<*book|report>
+\newcommand*{\l@chapter}[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}%
+ \addvspace{1.0em \@plus\jsc@mpt}
+% \vskip 1.0em \@plus\p@ % book.clsでは↑がこうなっている
+ \begingroup
+ \parindent\z@
+% \rightskip\@pnumwidth
+ \rightskip\@tocrmarg
+ \parfillskip-\rightskip
+ \leavevmode\headfont
+ % \if@english\setlength\@lnumwidth{5.5em}\else\setlength\@lnumwidth{4.683\zw}\fi
+ \setlength\@lnumwidth{\jsc@tocl@width}\advance\@lnumwidth 2.683\zw
+ \advance\leftskip\@lnumwidth \hskip-\leftskip
+ #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss#2}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@section}
+%
+% 節の目次です。
+%
+% \begin{macrocode}
+%<*!book&!report>
+\newcommand*{\l@section}[2]{%
+ \ifnum \c@tocdepth >\z@
+ \addpenalty{\@secpenalty}%
+ \addvspace{1.0em \@plus\jsc@mpt}%
+ \begingroup
+ \parindent\z@
+% \rightskip\@pnumwidth
+ \rightskip\@tocrmarg
+ \parfillskip-\rightskip
+ \leavevmode\headfont
+ %\setlength\@lnumwidth{4\zw}% 元1.5em [2003-03-02]
+ \setlength\@lnumwidth{\jsc@tocl@width}\advance\@lnumwidth 2\zw
+ \advance\leftskip\@lnumwidth \hskip-\leftskip
+ #1\nobreak\hfil\nobreak\hbox to\@pnumwidth{\hss#2}\par
+ \endgroup
+ \fi}
+%</!book&!report>
+% \end{macrocode}
+%
+% インデントと幅はそれぞれ1.5em,2.3emでしたが,
+% |1\zw|,|3.683\zw|に変えました。
+%
+% \begin{macrocode}
+%<book|report> % \newcommand*{\l@section}{\@dottedtocline{1}{1\zw}{3.683\zw}}
+% \end{macrocode}
+%
+% [2013-12-30] 上のインデントは |\jsc@tocl@width| から決めるように
+% しました。(by ts)
+%
+% \end{macro}
+%
+% \begin{macro}{\l@subsection}
+% \begin{macro}{\l@subsubsection}
+% \begin{macro}{\l@paragraph}
+% \begin{macro}{\l@subparagraph}
+%
+% さらに下位レベルの目次項目の体裁です。
+% あまり使ったことがありませんので,要修正かもしれません。
+%
+% [2013-12-30] ここも |\jsc@tocl@width| から決めるように
+% してみました。(by ts)
+%
+% \begin{macrocode}
+%<*!book&!report>
+% \newcommand*{\l@subsection} {\@dottedtocline{2}{1.5em}{2.3em}}
+% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{3.8em}{3.2em}}
+% \newcommand*{\l@paragraph} {\@dottedtocline{4}{7.0em}{4.1em}}
+% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{10em}{5em}}
+%
+% \newcommand*{\l@subsection} {\@dottedtocline{2}{1\zw}{3\zw}}
+% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{2\zw}{3\zw}}
+% \newcommand*{\l@paragraph} {\@dottedtocline{4}{3\zw}{3\zw}}
+% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{4\zw}{3\zw}}
+%
+\newcommand*{\l@subsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima -1\zw
+ \@dottedtocline{2}{\@tempdima}{3\zw}}
+\newcommand*{\l@subsubsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 0\zw
+ \@dottedtocline{3}{\@tempdima}{4\zw}}
+\newcommand*{\l@paragraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 1\zw
+ \@dottedtocline{4}{\@tempdima}{5\zw}}
+\newcommand*{\l@subparagraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 2\zw
+ \@dottedtocline{5}{\@tempdima}{6\zw}}
+%</!book&!report>
+%<*book|report>
+% \newcommand*{\l@subsection} {\@dottedtocline{2}{3.8em}{3.2em}}
+% \newcommand*{\l@subsubsection}{\@dottedtocline{3}{7.0em}{4.1em}}
+% \newcommand*{\l@paragraph} {\@dottedtocline{4}{10em}{5em}}
+% \newcommand*{\l@subparagraph} {\@dottedtocline{5}{12em}{6em}}
+\newcommand*{\l@section}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima -1\zw
+ \@dottedtocline{1}{\@tempdima}{3.683\zw}}
+\newcommand*{\l@subsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 2.683\zw
+ \@dottedtocline{2}{\@tempdima}{3.5\zw}}
+\newcommand*{\l@subsubsection}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 6.183\zw
+ \@dottedtocline{3}{\@tempdima}{4.5\zw}}
+\newcommand*{\l@paragraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 10.683\zw
+ \@dottedtocline{4}{\@tempdima}{5.5\zw}}
+\newcommand*{\l@subparagraph}{%
+ \@tempdima\jsc@tocl@width \advance\@tempdima 16.183\zw
+ \@dottedtocline{5}{\@tempdima}{6.5\zw}}
+%</book|report>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\numberline}
+% \begin{macro}{\@lnumwidth}
+%
+% 欧文版\LaTeX では |\numberline{...}| は幅 |\@tempdima| の箱に左詰め
+% で出力する命令ですが,
+% アスキー版では |\@tempdima| の代わりに |\@lnumwidth| という変数
+% で幅を決めるように再定義しています。
+% 後続文字が全角か半角かでスペースが変わらないように |\hspace|
+% を入れておきました。
+%
+% \begin{macrocode}
+\newdimen\@lnumwidth
+\def\numberline#1{\hb@xt@\@lnumwidth{#1\hfil}\hspace{0pt}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@dottedtocline}
+% \begin{macro}{\jsTocLine}
+%
+% \LaTeX 本体(\texttt{ltsect.dtx} 参照)での定義と同じですが,
+% |\@tempdima| を |\@lnumwidth| に変えています。
+%
+% [2018-06-23] デフォルトでは\jsTocLine のようにベースラインになります。\par
+% これを変更可能にするため,|\jsTocLine| というマクロに切り出しました。
+% 例えば,仮想ボディの中央
+% {\renewcommand{\jsTocLine}{\leaders \hbox {\hss ・\hss}\hfill}\jsTocLine}
+% に変更したい場合は
+%\begin{verbatim}
+% \renewcommand{\jsTocLine}{\leaders \hbox {\hss ・\hss}\hfill}
+%\end{verbatim}
+% とします。
+%
+% \begin{macrocode}
+\def\jsTocLine{\leaders\hbox{%
+ $\m@th \mkern \@dotsep mu\hbox{.}\mkern \@dotsep mu$}\hfill}
+\def\@dottedtocline#1#2#3#4#5{\ifnum #1>\c@tocdepth \else
+ \vskip \z@ \@plus.2\jsc@mpt
+ {\leftskip #2\relax \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent #2\relax\@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@lnumwidth #3\relax
+ \advance\leftskip \@lnumwidth \null\nobreak\hskip -\leftskip
+ {#4}\nobreak
+ \jsTocLine \nobreak\hb@xt@\@pnumwidth{%
+ \hfil\normalfont \normalcolor #5}\par}\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{図目次と表目次}
+%
+% \begin{macro}{\listoffigures}
+%
+% 図目次を出力します。
+%
+% \begin{macrocode}
+\newcommand{\listoffigures}{%
+%<*book|report>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+ \chapter*{\listfigurename}%
+ \@mkboth{\listfigurename}{}%
+%</book|report>
+%<*!book&!report>
+ \section*{\listfigurename}%
+ \@mkboth{\listfigurename}{\listfigurename}%
+%</!book&!report>
+ \@starttoc{lof}%
+%<book|report> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@figure}
+%
+% 図目次の項目を出力します。
+%
+% \begin{macrocode}
+\newcommand*{\l@figure}{\@dottedtocline{1}{1\zw}{3.683\zw}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\listoftables}
+%
+% 表目次を出力します。
+%
+% \begin{macrocode}
+\newcommand{\listoftables}{%
+%<*book|report>
+ \if@twocolumn\@restonecoltrue\onecolumn
+ \else\@restonecolfalse\fi
+ \chapter*{\listtablename}%
+ \@mkboth{\listtablename}{}%
+%</book|report>
+%<*!book&!report>
+ \section*{\listtablename}%
+ \@mkboth{\listtablename}{\listtablename}%
+%</!book&!report>
+ \@starttoc{lot}%
+%<book|report> \if@restonecol\twocolumn\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\l@table}
+%
+% 表目次は図目次と同じです。
+%
+% \begin{macrocode}
+\let\l@table\l@figure
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{参考文献}
+%
+% \begin{macro}{\bibindent}
+%
+% オープンスタイルの参考文献で使うインデント幅です。
+% 元は 1.5em でした。
+%
+% \begin{macrocode}
+\newdimen\bibindent
+\setlength\bibindent{2\zw}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{thebibliography}
+%
+% 参考文献リストを出力します。
+%
+% [2016-07-16] \LaTeX~2.09で使われていたフォントコマンドの警告を,
+% 文献スタイル(.bst)ではよく |\bf| がいまだに用いられることが多いため,
+% |thebibliography| 環境内では例外的に出さないようにしました。
+%
+% \begin{macrocode}
+\newenvironment{thebibliography}[1]{%
+ \global\@jsc@warnoldfontcmdexceptiontrue
+ \global\let\presectionname\relax
+ \global\let\postsectionname\relax
+%<article|jspf> \section*{\refname}\@mkboth{\refname}{\refname}%
+%<*kiyou>
+ \vspace{1.5\baselineskip}
+ \subsubsection*{\refname}\@mkboth{\refname}{\refname}%
+ \vspace{0.5\baselineskip}
+%</kiyou>
+%<book|report> \chapter*{\bibname}\@mkboth{\bibname}{}%
+%<book|report> \addcontentsline{toc}{chapter}{\bibname}%
+ \list{\@biblabel{\@arabic\c@enumiv}}%
+ {\settowidth\labelwidth{\@biblabel{#1}}%
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+%<kiyou> \small
+ \sloppy
+ \clubpenalty4000
+ \@clubpenalty\clubpenalty
+ \widowpenalty4000%
+ \sfcode`\.\@m}
+ {\def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist
+ \global\@jsc@warnoldfontcmdexceptionfalse}
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\newblock}
+%
+% |\newblock| はデフォルトでは小さなスペースを生成します。
+%
+% \begin{macrocode}
+\newcommand{\newblock}{\hskip .11em\@plus.33em\@minus.07em}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@openbib@code}
+%
+% |\@openbib@code| はデフォルトでは何もしません。
+% この定義は |openbib| オプションによって変更されます。
+%
+% \begin{macrocode}
+\let\@openbib@code\@empty
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@biblabel}
+%
+% |\bibitem[...]| のラベルを作ります。
+% \texttt{ltbibl.dtx} の定義の半角 [] を全角[]に変え,
+% 余分なスペースが入らないように |\inhibitglue| ではさみました。
+% とりあえずコメントアウトしておきますので,必要に応じて生かしてください。
+%
+% \begin{macrocode}
+% \def\@biblabel#1{\inhibitglue[#1]\inhibitglue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\cite}
+% \begin{macro}{\@cite}
+% \begin{macro}{\@citex}
+%
+% 文献の番号を出力する部分は \texttt{ltbibl.dtx} で定義されていますが,
+% コンマとかっこを和文フォントにするには次のようにします。
+% とりあえずコメントアウトしておきましたので,必要に応じて生かしてください。
+% かっこの前後に入るグルーを |\inhibitglue| で取っていますので,
+% オリジナル同様,\verb*+Knuth~\cite{knu} + のように半角空白
+% で囲んでください。
+%
+% \begin{macrocode}
+% \def\@citex[#1]#2{\leavevmode
+% \let\@citea\@empty
+% \@cite{\@for\@citeb:=#2\do
+% {\@citea\def\@citea{,\inhibitglue\penalty\@m\ }%
+% \edef\@citeb{\expandafter\@firstofone\@citeb\@empty}%
+% \if@filesw\immediate\write\@auxout{\string\citation{\@citeb}}\fi
+% \@ifundefined{b@\@citeb}{\mbox{\normalfont\bfseries ?}%
+% \G@refundefinedtrue
+% \@latex@warning
+% {Citation `\@citeb' on page \thepage \space undefined}}%
+% {\@cite@ofmt{\csname b@\@citeb\endcsname}}}}{#1}}
+% \def\@cite#1#2{\inhibitglue[{#1\if@tempswa ,#2\fi}]\inhibitglue}
+% \end{macrocode}
+%
+% 引用番号を上ツキの 1)のようなスタイルにするには次のようにします。
+% |\cite| の先頭に |\unskip| を付けて先行のスペース(\verb|~| も)
+% を帳消しにしています。
+%
+% \begin{macrocode}
+% \DeclareRobustCommand\cite{\unskip
+% \@ifnextchar [{\@tempswatrue\@citex}{\@tempswafalse\@citex[]}}
+% \def\@cite#1#2{$^{\hbox{\scriptsize{#1\if@tempswa
+% ,\inhibitglue\ #2\fi})}}$}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{索引}
+%
+% \begin{environment}{theindex}
+%
+% 2〜3段組の索引を作成します。
+% 最後が偶数ページのときにマージンがずれる現象を直しました(Thanks: 藤村さん)。
+%
+% \begin{macrocode}
+\newenvironment{theindex}{% 索引を3段組で出力する環境
+ \if@twocolumn
+ \onecolumn\@restonecolfalse
+ \else
+ \clearpage\@restonecoltrue
+ \fi
+ \columnseprule.4pt \columnsep 2\zw
+ \ifx\multicols\@undefined
+%<book|report> \twocolumn[\@makeschapterhead{\indexname}%
+%<book|report> \addcontentsline{toc}{chapter}{\indexname}]%
+%<!book&!report> \def\presectionname{}\def\postsectionname{}%
+%<!book&!report> \twocolumn[\section*{\indexname}]%
+ \else
+ \ifdim\textwidth<\fullwidth
+ \setlength{\evensidemargin}{\oddsidemargin}
+ \setlength{\textwidth}{\fullwidth}
+ \setlength{\linewidth}{\fullwidth}
+%<book|report> \begin{multicols}{3}[\chapter*{\indexname}%
+%<book|report> \addcontentsline{toc}{chapter}{\indexname}]%
+%<!book&!report> \def\presectionname{}\def\postsectionname{}%
+%<!book&!report> \begin{multicols}{3}[\section*{\indexname}]%
+ \else
+%<book|report> \begin{multicols}{2}[\chapter*{\indexname}%
+%<book|report> \addcontentsline{toc}{chapter}{\indexname}]%
+%<!book&!report> \def\presectionname{}\def\postsectionname{}%
+%<!book&!report> \begin{multicols}{2}[\section*{\indexname}]%
+ \fi
+ \fi
+%<book|report> \@mkboth{\indexname}{}%
+%<!book&!report> \@mkboth{\indexname}{\indexname}%
+ \plainifnotempty % \thispagestyle{plain}
+ \parindent\z@
+ \parskip\z@ \@plus .3\jsc@mpt\relax
+ \let\item\@idxitem
+ \raggedright
+ \footnotesize\narrowbaselines
+ }{
+ \ifx\multicols\@undefined
+ \if@restonecol\onecolumn\fi
+ \else
+ \end{multicols}
+ \fi
+ \clearpage
+ }
+% \end{macrocode}
+% \end{environment}
+%
+% \begin{macro}{\@idxitem}
+% \begin{macro}{\subitem}
+% \begin{macro}{\subsubitem}
+%
+% 索引項目の字下げ幅です。|\@idxitem| は |\item| の項目の字下げ幅です。
+%
+% \begin{macrocode}
+\newcommand{\@idxitem}{\par\hangindent 4\zw} % 元 40pt
+\newcommand{\subitem}{\@idxitem \hspace*{2\zw}} % 元 20pt
+\newcommand{\subsubitem}{\@idxitem \hspace*{3\zw}} % 元 30pt
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\indexspace}
+%
+% 索引で先頭文字ごとのブロックの間に入るスペースです。
+%
+% \begin{macrocode}
+\newcommand{\indexspace}{\par \vskip 10\jsc@mpt \@plus5\jsc@mpt \@minus3\jsc@mpt\relax}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\seename}
+% \begin{macro}{\alsoname}
+%
+% 索引の |\see|,|\seealso| コマンドで出力されるものです。
+% デフォルトはそれぞれ \emph{see},\emph{see also} という英語ですが,
+% ここではとりあえず両方とも「→」に変えました。
+% $\Rightarrow$(|$\Rightarrow$|)などでもいいでしょう。
+%
+% \begin{macrocode}
+\newcommand\seename{\if@english see\else →\fi}
+\newcommand\alsoname{\if@english see also\else →\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{脚注}
+%
+% \begin{macro}{\footnote}
+% \begin{macro}{\footnotemark}
+%
+% 和文の句読点・閉じかっこ類の直後で用いた際に
+% 余分なアキが入るのを防ぐため,
+% |\inhibitglue| を入れることにします。
+%
+% \begin{macrocode}
+\let\footnotes@ve=\footnote
+\def\footnote{\inhibitglue\footnotes@ve}
+\let\footnotemarks@ve=\footnotemark
+\def\footnotemark{\inhibitglue\footnotemarks@ve}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@makefnmark}
+%
+% 脚注番号を付ける命令です。
+% ここでは脚注番号の前に記号 $*$ を付けています。
+% 「注1」の形式にするには |\textasteriskcentered|
+% を |注\kern0.1em| にしてください。
+% |\@xfootnotenext| と合わせて,
+% もし脚注番号が空なら記号も出力しないようにしてあります。
+%
+% [2002-04-09] インプリメントの仕方を変えたため消しました。
+%
+% [2013-04-23] 新しい\pTeX では脚注番号のまわりにスペースが入りすぎることを防ぐため,
+% 北川さんのパッチ [qa:57090] を取り込みました。
+%
+% [2013-05-14] plcore.ltx に倣った形に書き直しました(Thanks: 北川さん)。
+%
+% [2014-07-02 LTJ] |\ifydir| を使わない形に書換えました。
+%
+% [2016-07-11] コミュニティ版p\LaTeX の変更に追随しました(Thanks: 角藤さん)。
+%
+% [2016-08-27 LTJ] 結果的に |\@makefnmark| の定義が
+% Lua\TeX-ja本体(lltjcore.sty)中のものと全く同じになっていたので,削除します,
+% \end{macro}
+%
+% \begin{macro}{\thefootnote}
+%
+% 脚注番号に * 印が付くようにしました。
+% ただし,番号がゼロのときは * 印も脚注番号も付きません。
+%
+% [2003-08-15] |\textasteriskcentered| ではフォントによって
+% 下がりすぎるので変更しました。
+%
+% [2016-10-08] TODO: 脚注番号が |newtxtext| や |newpxtext| の使用時に
+% おかしくなってしまいます。これらのパッケージは内部で |\thefootnote| を
+% 再定義していますので,気になる場合はパッケージを読み込むときに
+% \texttt{defaultsups} オプションを付けてください(qa:57284, qa:57287)。
+%
+% \begin{macrocode}
+\def\thefootnote{\ifnum\c@footnote>\z@\leavevmode\lower.5ex\hbox{*}\@arabic\c@footnote\fi}
+% \end{macrocode}
+%
+% 「注1」の形式にするには次のようにしてください。
+%
+% \begin{macrocode}
+% \def\thefootnote{\ifnum\c@footnote>\z@ 注\kern0.1\zw\@arabic\c@footnote\fi}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\footnoterule}
+%
+% 本文と脚注の間の罫線です。
+%
+% \begin{macrocode}
+\renewcommand{\footnoterule}{%
+ \kern-3\jsc@mpt
+ \hrule width .4\columnwidth height 0.4\jsc@mpt
+ \kern 2.6\jsc@mpt}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\c@footnote}
+%
+% 脚注番号は章ごとにリセットされます。
+%
+% [2018-03-11] |\next|などいくつかの内部命令を |\jsc@...| 付きの
+% ユニークな名前にしました。
+% \begin{macrocode}
+%<book|report>\@addtoreset{footnote}{chapter}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@footnotetext}
+%
+% 脚注で |\verb| が使えるように改変してあります。
+% Jeremy Gibbons, \textit{\TeX\ and TUG NEWS},
+% Vol.~2, No.~4 (1993), p.~9)
+%
+% [2018-03-11] |\next|などいくつかの内部命令を |\jsc@...| 付きの
+% ユニークな名前にしました。
+% \begin{macrocode}
+\long\def\@footnotetext{%
+ \insert\footins\bgroup
+ \normalfont\footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth \dp\strutbox \floatingpenalty \@MM
+ \hsize\columnwidth \@parboxrestore
+ \protected@edef\@currentlabel{%
+ \csname p@footnote\endcsname\@thefnmark
+ }%
+ \color@begingroup
+ \@makefntext{%
+ \rule\z@\footnotesep\ignorespaces}%
+ \futurelet\jsc@next\jsc@fo@t}
+\def\jsc@fo@t{\ifcat\bgroup\noexpand\jsc@next \let\jsc@next\jsc@f@@t
+ \else \let\jsc@next\jsc@f@t\fi \jsc@next}
+\def\jsc@f@@t{\bgroup\aftergroup\jsc@@foot\let\jsc@next}
+\def\jsc@f@t#1{#1\jsc@@foot}
+\def\jsc@@foot{\@finalstrut\strutbox\color@endgroup\egroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@makefntext}
+%
+% 実際に脚注を出力する命令です。
+% |\@makefnmark| は脚注の番号を出力する命令です。
+% ここでは脚注が左端から一定距離に来るようにしてあります。
+%
+% \begin{macrocode}
+\newcommand\@makefntext[1]{%
+ \advance\leftskip 3\zw
+ \parindent 1\zw
+ \noindent
+ \llap{\@makefnmark\hskip0.3\zw}#1}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@xfootnotenext}
+%
+% 最初の |\footnotetext{...}| は番号が付きません。
+% 著者の所属などを脚注の欄に書くときに便利です。
+%
+% すでに |\footnote| を使った後なら |\footnotetext[0]{...}|
+% とすれば番号を付けない脚注になります。
+% ただし,この場合は脚注番号がリセットされてしまうので,
+% 工夫が必要です。
+%
+% [2002-04-09] インプリメントの仕方を変えたため消しました。
+%
+% \begin{macrocode}
+% \def\@xfootnotenext[#1]{%
+% \begingroup
+% \ifnum#1>\z@
+% \csname c@\@mpfn\endcsname #1\relax
+% \unrestored@protected@xdef\@thefnmark{\thempfn}%
+% \else
+% \unrestored@protected@xdef\@thefnmark{}%
+% \fi
+% \endgroup
+% \@footnotetext}
+% \end{macrocode}
+% \end{macro}
+%
+% \section{段落の頭へのグルー挿入禁止}
+%
+% 段落頭のかぎかっこなどを見かけ1字半下げから全角1字下げに直します。
+%
+% [2012-04-24 LTJ] Lua\TeX-jaではJFMに段落開始時の括弧類の字下げ幅をコントロール
+% する機能がありますが,|\item| 直後ではラベル用のボックスが段落先頭になる
+% ため,うまく働きませんでした。形を変えて復活させます。
+%
+% [2017-04-03 LTJ] 従来クラスファイルで定義していた |\@inhibitglue| は,
+% Lua\TeX-jaのコアに |\ltjfakeparbegin| として正式に追加されたのでリネームします.
+%
+% |\item| 命令の直後です。
+%
+% \begin{macrocode}
+\let\@inhibitglue=\ltjfakeparbegin
+\def\@item[#1]{%
+ \if@noparitem
+ \@donoparitem
+ \else
+ \if@inlabel
+ \indent \par
+ \fi
+ \ifhmode
+ \unskip\unskip \par
+ \fi
+ \if@newlist
+ \if@nobreak
+ \@nbitem
+ \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep
+ \addvspace{-\parskip}%
+ \fi
+ \else
+ \addpenalty\@itempenalty
+ \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+ \fi
+ \everypar{%
+ \@minipagefalse
+ \global\@newlistfalse
+ \if@inlabel
+ \global\@inlabelfalse
+ {\setbox\z@\lastbox
+ \ifvoid\z@
+ \kern-\itemindent
+ \fi}%
+ \box\@labels
+ \penalty\z@
+ \fi
+ \if@nobreak
+ \@nobreakfalse
+ \clubpenalty \@M
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi\ltjfakeparbegin}%
+ \if@noitemarg
+ \@noitemargfalse
+ \if@nmbrlist
+ \refstepcounter\@listctr
+ \fi
+ \fi
+ \sbox\@tempboxa{\makelabel{#1}}%
+ \global\setbox\@labels\hbox{%
+ \unhbox\@labels
+ \hskip \itemindent
+ \hskip -\labelwidth
+ \hskip -\labelsep
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else
+ \hbox to\labelwidth {\unhbox\@tempboxa}%
+ \fi
+ \hskip \labelsep}%
+ \ignorespaces}
+% \end{macrocode}
+%
+% |\@gnewline| についてはちょっと複雑な心境です。
+% もともとのp\LaTeXe は段落の頭にグルーが入る方で統一されていました。
+% しかし |\\| の直後にはグルーが入らず,不統一でした。
+% そこで |\\| の直後にもグルーを入れるように直していただいた経緯があります。
+% しかし,ここでは逆にグルーを入れない方で統一したいので,
+% また元に戻してしまいました。
+%
+% しかし単に戻すだけでも駄目みたいなので,ここでも最後にグルーを消しておきます。
+%
+% [2016-12-05 LTJ] 本家[2016-11-29],lltjcore.styでの変更に追従させます.
+%
+% [2017-02-18 LTJ] lltjcore.sty側で戻したのを忘れていました.
+% \begin{macrocode}
+\def\@gnewline #1{%
+ \ifvmode
+ \@nolnerr
+ \else
+ \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
+ \inhibitglue \ignorespaces
+ \fi}
+% \end{macrocode}
+%
+% \section{いろいろなロゴ}
+%
+% \LaTeX 関連のロゴを作り直します。
+%
+% [2016-07-14] ロゴの定義は\texttt{jslogo}パッケージに移転しました。
+% 後方互換のため,\texttt{jsclasses}ではデフォルトでこれを読み込みます。
+% \texttt{nojslogo}オプションが指定されている場合は読み込みません。
+%
+% [2016-07-21 LTJ] \texttt{jsclasses} とLua\TeX-jaの更新タイミングが一致しない可能性を考慮し,
+% \texttt{jslogo}パッケージが存在しない場合は旧来の定義をそのまま使うことにしました。
+%
+% \begin{macrocode}
+\IfFileExists{jslogo.sty}{}{\@jslogofalse}%
+\if@jslogo
+ \RequirePackage{jslogo}
+ \def\小{\jslg@small}
+ \def\上小{\jslg@uppersmall}
+\else
+% \end{macrocode}
+%
+% 以下は\texttt{jslogo}パッケージがない場合の定義です。
+%
+% \begin{macro}{\小}
+% \begin{macro}{\上小}
+%
+% 文字を小さめに出したり上寄りに小さめに出したりする命令です。
+%
+% \begin{macrocode}
+\def\小#1{\hbox{$\m@th$%
+ \csname S@\f@size\endcsname
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ #1}}
+\def\上小#1{{\sbox\z@ T\vbox to\ht0{\小{#1}\vss}}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\TeX}
+% \begin{macro}{\LaTeX}
+%
+% これらは \texttt{ltlogos.dtx} で定義されていますが,
+% TimesやHelveticaでも見栄えがするように若干変更しました。
+%
+% [2003-06-12] Palatinoも加えました(要調整)。
+%
+% \begin{macrocode}
+\def\cmrTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ T\kern-.25em\lower.5ex\hbox{E}\kern-.125emX\@
+ \else
+ T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@
+ \fi}
+\def\cmrLaTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ L\kern-.32em\上小{A}\kern-.22em\cmrTeX
+ \else
+ L\kern-.36em\上小{A}\kern-.15em\cmrTeX
+ \fi}
+\def\sfTeX{T\kern-.1em\lower.4ex\hbox{E}\kern-.07emX\@}
+\def\sfLaTeX{L\kern-.25em\上小{A}\kern-.08em\sfTeX}
+\def\ptmTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ T\kern-.12em\lower.37ex\hbox{E}\kern-.02emX\@
+ \else
+ T\kern-.07em\lower.37ex\hbox{E}\kern-.05emX\@
+ \fi}
+\def\ptmLaTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ L\kern-.2em\上小{A}\kern-.1em\ptmTeX
+ \else
+ L\kern-.3em\上小{A}\kern-.1em\ptmTeX
+ \fi}
+\def\pncTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ T\kern-.2em\lower.5ex\hbox{E}\kern-.08emX\@
+ \else
+ T\kern-.13em\lower.5ex\hbox{E}\kern-.13emX\@
+ \fi}
+\def\pncLaTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ L\kern-.3em\上小{A}\kern-.1em\pncTeX
+ \else
+ L\kern-.3em\上小{A}\kern-.1em\pncTeX
+ \fi}
+\def\pplTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ T\kern-.17em\lower.32ex\hbox{E}\kern-.15emX\@
+ \else
+ T\kern-.12em\lower.34ex\hbox{E}\kern-.1emX\@
+ \fi}
+\def\pplLaTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ L\kern-.27em\上小{A}\kern-.12em\pplTeX
+ \else
+ L\kern-.3em\上小{A}\kern-.15em\pplTeX
+ \fi}
+\def\ugmTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ T\kern-.1em\lower.32ex\hbox{E}\kern-.06emX\@
+ \else
+ T\kern-.12em\lower.34ex\hbox{E}\kern-.1emX\@
+ \fi}
+\def\ugmLaTeX{%
+ \ifdim \fontdimen\@ne\font >\z@
+ L\kern-.2em\上小{A}\kern-.13em\ugmTeX
+ \else
+ L\kern-.3em\上小{A}\kern-.13em\ugmTeX
+ \fi}
+\DeclareRobustCommand{\TeX}{%
+ \def\@tempa{cmr}%
+ \ifx\f@family\@tempa\cmrTeX
+ \else
+ \def\@tempa{ptm}%
+ \ifx\f@family\@tempa\ptmTeX
+ \else
+ \def\@tempa{txr}%
+ \ifx\f@family\@tempa\ptmTeX
+ \else
+ \def\@tempa{pnc}%
+ \ifx\f@family\@tempa\pncTeX
+ \else
+ \def\@tempa{ppl}%
+ \ifx\f@family\@tempa\pplTeX
+ \else
+ \def\@tempa{ugm}%
+ \ifx\f@family\@tempa\ugmTeX
+ \else\sfTeX
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+
+\DeclareRobustCommand{\LaTeX}{%
+ \def\@tempa{cmr}%
+ \ifx\f@family\@tempa\cmrLaTeX
+ \else
+ \def\@tempa{ptm}%
+ \ifx\f@family\@tempa\ptmLaTeX
+ \else
+ \def\@tempa{txr}%
+ \ifx\f@family\@tempa\ptmLaTeX
+ \else
+ \def\@tempa{pnc}%
+ \ifx\f@family\@tempa\pncLaTeX
+ \else
+ \def\@tempa{ppl}%
+ \ifx\f@family\@tempa\pplLaTeX
+ \else
+ \def\@tempa{ugm}%
+ \ifx\f@family\@tempa\ugmLaTeX
+ \else\sfLaTeX
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\LaTeXe}
+%
+% |\LaTeXe| コマンドの |\mbox{\m@th ...| で始まる新しい定義では
+% 直後の和文との間に |xkanjiskip| が入りません。また,
+% |mathptmx| パッケージなどと併用すると,最後の $\varepsilon$ が
+% 下がりすぎてしまいます。そのため,ちょっと手を加えました。
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\LaTeXe}{$\mbox{%
+ \if b\expandafter\@car\f@series\@nil\boldmath\fi
+ \LaTeX\kern.15em2\raisebox{-.37ex}{$\textstyle\varepsilon$}}$}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pTeX}
+% \begin{macro}{\pLaTeX}
+% \begin{macro}{\pLaTeXe}
+%
+% \pTeX ,\pLaTeXe のロゴを出す命令です。
+%
+% \begin{macrocode}
+\def\pTeX{p\kern-.05em\TeX}
+\def\pLaTeX{p\LaTeX}
+\def\pLaTeXe{p\LaTeXe}
+% \end{macrocode}
+%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\AmSTeX}
+%
+% \texttt{amstex.sty} で定義されています。
+%
+% \begin{macrocode}
+\def\AmSTeX{\protect\AmS-\protect\TeX{}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\BibTeX}
+% \begin{macro}{\SliTeX}
+%
+% これらは \texttt{doc.dtx} から取ったものです。
+% ただし,|\BibTeX| だけはちょっと修正しました。
+%
+% \begin{macrocode}
+% \@ifundefined{BibTeX}
+% {\def\BibTeX{{\rmfamily B\kern-.05em%
+% \textsc{i\kern-.025em b}\kern-.08em%
+% T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}}{}
+\DeclareRobustCommand{\BibTeX}{B\kern-.05em\小{I\kern-.025em B}%
+ \ifx\f@family\cmr\kern-.08em\else\kern-.15em\fi\TeX}
+\DeclareRobustCommand{\SliTeX}{%
+ S\kern-.06emL\kern-.18em\上小{I}\kern -.03em\TeX}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \texttt{jslogo}パッケージがない場合の定義はここで終わりです。
+% \begin{macrocode}
+\fi
+% \end{macrocode}
+%
+% \section{初期設定}
+%
+% \paragraph{いろいろな語}
+%
+% \begin{macro}{\prepartname}
+% \begin{macro}{\postpartname}
+% \begin{macro}{\prechaptername}
+% \begin{macro}{\postchaptername}
+% \begin{macro}{\presectionname}
+% \begin{macro}{\postsectionname}
+% \begin{macrocode}
+\newcommand{\prepartname}{\if@english Part~\else 第\fi}
+\newcommand{\postpartname}{\if@english\else 部\fi}
+%<book|report>\newcommand{\prechaptername}{\if@english Chapter~\else 第\fi}
+%<book|report>\newcommand{\postchaptername}{\if@english\else 章\fi}
+\newcommand{\presectionname}{}% 第
+\newcommand{\postsectionname}{}% 節
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\contentsname}
+% \begin{macro}{\listfigurename}
+% \begin{macro}{\listtablename}
+% \begin{macrocode}
+\newcommand{\contentsname}{\if@english Contents\else 目次\fi}
+\newcommand{\listfigurename}{\if@english List of Figures\else 図目次\fi}
+\newcommand{\listtablename}{\if@english List of Tables\else 表目次\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\refname}
+% \begin{macro}{\bibname}
+% \begin{macro}{\indexname}
+% \begin{macrocode}
+\newcommand{\refname}{\if@english References\else 参考文献\fi}
+\newcommand{\bibname}{\if@english Bibliography\else 参考文献\fi}
+\newcommand{\indexname}{\if@english Index\else 索引\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\figurename}
+% \begin{macro}{\tablename}
+% \begin{macrocode}
+%<!jspf>\newcommand{\figurename}{\if@english Fig.~\else 図\fi}
+%<jspf>\newcommand{\figurename}{Fig.~}
+%<!jspf>\newcommand{\tablename}{\if@english Table~\else 表\fi}
+%<jspf>\newcommand{\tablename}{Table~}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\appendixname}
+% \begin{macro}{\abstractname}
+% \begin{macrocode}
+% \newcommand{\appendixname}{\if@english Appendix~\else 付録\fi}
+\newcommand{\appendixname}{\if@english \else 付録\fi}
+%<!book>\newcommand{\abstractname}{\if@english Abstract\else 概要\fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{今日の日付}
+%
+% \LaTeX で処理した日付を出力します。
+% ^^A |jarticle| などと違って,標準を西暦にし,
+% ^^A 余分な空白が入らないように改良しました。
+% ^^A -- 2018年7月以降は |jarticle| なども標準が西暦,
+% ^^A -- 2019年4月以降は余分な空白が入らなくなっています。
+% 和暦にするには |\和暦| と書いてください。
+% ちなみにこの文章の作成日は西暦では{\西暦\today}で,
+% 和暦では{\和暦\today}です。
+%
+% \begin{macro}{\today}
+% \begin{macrocode}
+\newif\if西暦 \西暦true
+\def\西暦{\西暦true}
+\def\和暦{\西暦false}
+\newcount\heisei \heisei\year \advance\heisei-1988\relax
+\def\pltx@today@year@#1{%
+ \ifnum\numexpr\year-#1=1 元\else
+ \ifnum\ltjgetparameter{direction}=3
+ \kansuji\numexpr\year-#1\relax
+ \else
+ \number\numexpr\year-#1\relax\nobreak
+ \fi
+ \fi 年
+}
+\def\pltx@today@year{%
+ \ifnum\numexpr\year*10000+\month*100+\day<19890108
+ 昭和\pltx@today@year@{1925}%
+ \else\ifnum\numexpr\year*10000+\month*100+\day<20190501
+ 平成\pltx@today@year@{1988}%
+ \else
+ 令和\pltx@today@year@{2018}%
+ \fi\fi}
+\def\today{%
+ \if@english
+ \ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi
+ \space\number\day, \number\year
+ \else\if西暦
+ \ifnum\ltjgetparameter{direction}=3 \kansuji\year
+ \else\number\year\nobreak\fi 年
+ \else
+ \pltx@today@year
+ \fi
+ \ifnum\ltjgetparameter{direction}=3
+ \kansuji\month 月
+ \kansuji\day 日
+ \else
+ \number\month\nobreak 月
+ \number\day\nobreak 日
+ \fi\fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{ハイフネーション例外}
+%
+% \TeX のハイフネーションルールの補足です(ペンディング:eng-lish)
+%
+% \begin{macrocode}
+\hyphenation{ado-be post-script ghost-script phe-nom-e-no-log-i-cal man-u-script}
+% \end{macrocode}
+%
+% \paragraph{ページ設定}
+%
+% ページ設定の初期化です。
+% |stfloats|パッケージがシステムにインストールされている場合は、このパッケージを使って
+% \pLaTeX の標準時と同じようにボトムフロートの下に脚注が組まれるようにします。
+%
+% [2017-02-19] \pLaTeX とLua\TeX-jaの|\@makecol|が違うことを
+% 考慮していませんでした。
+% \begin{macrocode}
+%<article>\if@slide \pagestyle{empty} \else \pagestyle{plain} \fi
+%<book>\if@report \pagestyle{plain} \else \pagestyle{headings} \fi
+%<report|kiyou>\pagestyle{plain}
+%<jspf>\pagestyle{headings}
+\pagenumbering{arabic}
+\fnfixbottomtrue % 2017-02-19
+\IfFileExists{stfloats.sty}{\RequirePackage{stfloats}\fnbelowfloat}{}
+\if@twocolumn
+ \twocolumn
+ \sloppy
+ \flushbottom
+\else
+ \onecolumn
+ \raggedbottom
+\fi
+\if@slide
+ \renewcommand\kanjifamilydefault{\gtdefault}
+ \renewcommand\familydefault{\sfdefault}
+ \raggedright
+ \ltj@setpar@global
+ \ltjsetxkanjiskip0.1em\relax
+\fi
+% \end{macrocode}
+%
+% 以上です。
+%
+% \Finale
+%
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/ltjsclasses.ins b/macros/luatex/generic/luatexja/src/ltjsclasses.ins
new file mode 100644
index 0000000000..957178678c
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/ltjsclasses.ins
@@ -0,0 +1,13 @@
+%
+% ltjsclasses.ins
+%
+
+\input docstrip.tex
+\keepsilent
+\generateFile{ltjsarticle.cls}{f}{\from{ltjsclasses.dtx}{article}}
+\generateFile{ltjsbook.cls}{f}{\from{ltjsclasses.dtx}{book}}
+\generateFile{ltjsreport.cls}{f}{\from{ltjsclasses.dtx}{report}}
+\generateFile{ltjspf.cls}{f}{\from{ltjsclasses.dtx}{jspf}}
+\generateFile{ltjskiyou.cls}{f}{\from{ltjsclasses.dtx}{kiyou}}
+
+\endbatchfile
diff --git a/macros/luatex/generic/luatexja/src/luatexja-compat.sty b/macros/luatex/generic/luatexja/src/luatexja-compat.sty
new file mode 100644
index 0000000000..f55bf51114
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/luatexja-compat.sty
@@ -0,0 +1,140 @@
+%
+% luatexja-compat.sty
+%
+
+%! 外から読まれるので仰々しくなってます
+%% Avoid multiple loading.
+\csname\if11luatexjacompatLoaded\fi\endcsname
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode33=\the\catcode33%
+\catcode35=\the\catcode35%
+\catcode40=\the\catcode40%
+\catcode41=\the\catcode41%
+\catcode42=\the\catcode42%
+\catcode43=\the\catcode43%
+\catcode44=\the\catcode44%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode58=\the\catcode58%
+\catcode59=\the\catcode59%
+\catcode60=\the\catcode60%
+\catcode61=\the\catcode61%
+\catcode62=\the\catcode62%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\catcode94=\the\catcode94%
+\catcode95=\the\catcode95%
+\catcode126=\the\catcode126%
+\endlinechar=\the\endlinechar
+\relax}
+\catcode32=10 %< >
+\catcode33=12 %<">
+\catcode35=6 %<#>
+\catcode40=12 %<(>
+\catcode41=12 %<)>
+\catcode42=12 %<*>
+\catcode43=12 %<+>
+\catcode44=12 %<,>
+\catcode45=12 %<->
+\catcode46=12 %<.>
+\catcode58=12 %<:>
+\catcode59=12 %<;>
+\catcode60=12 %<<>
+\catcode61=12 %<=>
+\catcode62=12 %<>>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\catcode94=7 %<^>
+\catcode95=8 %<_>
+\catcode126=13 %<~>
+\endlinechar=-1 %
+%! なお, 上のcatcode設定はcoreとcompatで同一にしておく.
+\edef\ltj@compat@AtEnd{\x
+ \noexpand\let\noexpand\ltj@compat@AtEnd\relax}
+\def\luatexjacompatLoaded{\endinput}
+
+%% Check if LaTeX is used.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax %<*!LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iffalse\endcsname
+\else %<*LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iftrue\endcsname
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{luatexja-compat}[2018/03/29 Compatibility with pTeX]
+\fi %</LaTeX>
+
+% Load core module if not yet.
+\ifx\luatexjacoreLoaded\@undefined
+ \ifltj@in@latex %<*LaTeX>
+ \RequirePackage{luatexja-core}
+ \else %<*!LaTeX>
+ \input luatexja-core.sty %
+ \fi %</LaTeX>
+\fi
+
+%% When environment check fails, exit now.
+\ifx\LuaTeXjaAvailable\@undefined
+ \ltj@compat@AtEnd
+\expandafter\endinput\fi\relax
+
+%% Load Lua modules.
+%\RequireLuaModule{luatexja.infomute}
+% not yet implemented.
+
+%% Silence info messages of luatexbase-mcb
+%\directlua{ luatexja.infomute.add_mute("luatexbase-mcb") }
+% not yet implemented.
+
+%%------------------
+\RequireLuaTeXjaSubmodule{compat}
+
+\def\euc{\ltj@code@conv{euc}}
+\def\kuten{\ltj@code@conv{kuten}}
+\def\jis{\ltj@code@conv{jis}}
+\def\sjis{\ltj@code@conv{sjis}}
+\def\ucs{\ltj@code@conv{ucs}}
+
+\def\ltj@code@conv#1{%
+ \directlua{luatexja.compat.from_#1(token.scan_int())}%
+}
+
+\def\kansuji{%
+ \directlua{luatexja.compat.to_kansuji(token.scan_int())}%
+}
+
+\define@key[ltj]{japaram}{kansujichar}{\ltj@@set@stack{KSJ}{0}{0x7FFFFFFF}#1 }
+
+\ltjsetparameter{kansujichar={0,`〇}}
+\ltjsetparameter{kansujichar={1,`一}}
+\ltjsetparameter{kansujichar={2,`二}}
+\ltjsetparameter{kansujichar={3,`三}}
+\ltjsetparameter{kansujichar={4,`四}}
+\ltjsetparameter{kansujichar={5,`五}}
+\ltjsetparameter{kansujichar={6,`六}}
+\ltjsetparameter{kansujichar={7,`七}}
+\ltjsetparameter{kansujichar={8,`八}}
+\ltjsetparameter{kansujichar={9,`九}}
+\ltj@@decl@array@param{kansujichar}
+
+\ifltj@in@latex
+% \pltx@next@inhibitglue (pLaTeX 2018-03-09)
+\protected\def\pltx@next@inhibitglue{%
+ \ifhmode\inhibitglue\else
+ \edef\@tempa{\everypar{%
+ \everypar{\unexpanded\expandafter{\the\everypar}}%
+ \unexpanded\expandafter{\the\everypar}\inhibitglue}}%
+\@tempa\fi}
+ \newcommand\printglossary{\@input@{\jobname.gls}}
+\csname newcount\endcsname\hour
+\csname newcount\endcsname\minute
+\fi
+
+%%------------------ all done
+\ltj@compat@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/luatexja-core.sty b/macros/luatex/generic/luatexja/src/luatexja-core.sty
new file mode 100644
index 0000000000..ba13695352
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/luatexja-core.sty
@@ -0,0 +1,742 @@
+%
+% luatexja-core.sty
+%
+
+%! 外から読まれるので仰々しくなってます
+%% Avoid multiple loading.
+\csname\if11luatexjacoreLoaded\fi\endcsname
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode33=\the\catcode33%
+\catcode35=\the\catcode35%
+\catcode40=\the\catcode40%
+\catcode41=\the\catcode41%
+\catcode42=\the\catcode42%
+\catcode43=\the\catcode43%
+\catcode44=\the\catcode44%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode58=\the\catcode58%
+\catcode59=\the\catcode59%
+\catcode60=\the\catcode60%
+\catcode61=\the\catcode61%
+\catcode62=\the\catcode62%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\catcode94=\the\catcode94%
+\catcode95=\the\catcode95%
+\catcode126=\the\catcode126%
+\endlinechar=\the\endlinechar
+\relax}
+\catcode32=10 %< >
+\catcode33=12 %<">
+\catcode35=6 %<#>
+\catcode40=12 %<(>
+\catcode41=12 %<)>
+\catcode42=12 %<*>
+\catcode43=12 %<+>
+\catcode44=12 %<,>
+\catcode45=12 %<->
+\catcode46=12 %<.>
+\catcode58=12 %<:>
+\catcode59=12 %<;>
+\catcode60=12 %<<>
+\catcode61=12 %<=>
+\catcode62=12 %<>>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\catcode94=7 %<^>
+\catcode95=8 %<_>
+\catcode126=13 %<~>
+\endlinechar=-1 %
+%! なお, 上のcatcode設定はcoreとcompatで同一にしておく.
+\edef\ltj@core@AtEnd{\x
+ \noexpand\let\noexpand\ltj@core@AtEnd\relax}
+\def\luatexjacoreLoaded{\endinput}
+
+%% Check if LaTeX is used.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax %<*!LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iffalse\endcsname
+\else %<*LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iftrue\endcsname
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{luatexja-core}[2017/11/12 Core of LuaTeX-ja]
+\fi %</LaTeX>
+
+%% Load prerequisite packages.
+\endlinechar=13 %
+\newif\ifltj@everyhook@avail\ltj@everyhook@availfalse
+%! 外部パッケージは普通の \endlinechar で読まないと危険.
+\ifltj@in@latex %<*LaTeX>
+ \RequirePackage{luatexbase}
+ \RequirePackage{luaotfload}
+ \RequirePackage{ltxcmds} [2011/11/09] % v1.22
+ \RequirePackage{pdftexcmds} [2011/11/29] % v0.20
+ \RequirePackage{xkeyval} [2012/10/14] % v2.6b
+ \RequirePackage{atbegshi}
+ \RequirePackage{etoolbox}
+ \AtBeginShipoutInit
+ \IfFileExists{everyhook.sty}{\RequirePackage{everyhook}\ltj@everyhook@availtrue}{}
+\else %<*!LaTeX>
+ \input luatexbase.sty
+ \input luaotfload.sty
+ \input ltxcmds.sty
+ \input pdftexcmds.sty
+ \input xkeyval
+ \input atbegshi.sty
+ \AtBeginShipoutInit
+\fi %</LaTeX>
+\endlinechar=-1 %
+
+%% Check if LuaTeX is used
+\ltx@LocalExpandAfter\ifx\csname directlua\endcsname\relax
+ % Loading is silently aborted, since the notice of the wrong
+ % engine is already shown in luaotfload.
+ \ltj@core@AtEnd
+\expandafter\endinput\fi\relax
+
+%% Check LuaTeX version.
+\ifnum\luatexversion<100
+ \@PackageError{luatexja-core}
+ {This LuaTeX engine is too old for this package;\MessageBreak
+ at least 1.0.0 is needed}
+ {Package loading is aborted now.\MessageBreak}
+\expandafter\endinput\fi\relax
+
+%% \LuaTeXjaAvailable
+%! 環境検査にパスした時に定義される.
+\let\LuaTeXjaAvailable=t %
+
+%%------------------
+\endlinechar=13
+
+%! ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
+% LuaTeX-ja core TeX source
+
+\newcount\ltjlineendcomment
+\ltjlineendcomment="FFFFF
+\catcode\ltjlineendcomment=14 %"
+
+\def\ltj@loaded{hoge}
+
+\newdimen\ltj@zw
+\newdimen\ltj@zh
+\newdimen\jQ \jQ=0.25mm
+\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''
+\newattribute\ltj@curtfnt % index for ``current vertical Japanese font''
+\newattribute\ltj@charclass %
+\newattribute\ltj@charcode %
+\newattribute\ltj@autospc % attribute for autospacing
+\newattribute\ltj@autoxspc % attribute for autoxspacing
+\newattribute\ltj@yablshift % attribute for yalbaselineshift
+\newattribute\ltj@ykblshift % attribute for yjabaselineshift
+\newattribute\ltj@tablshift % attribute for talbaselineshift
+\newattribute\ltj@tkblshift % attribute for tjabaselineshift
+\newattribute\jfam % index for current jfam
+\newattribute\ltj@vert@ori % <=0: UAX#50, >0: always upright
+
+\newattribute\ltj@dir
+\newlanguage\ltj@@japanese
+\ltj@dir\z@
+\ltj@icflag\z@
+\ltj@charclass\z@
+\ltj@curjfnt\m@ne
+\ltj@curtfnt\m@ne
+
+%%%%%%%% Attributes for character ranges
+\newcount\ltj@tempcnta
+\ltj@tempcnta\z@
+\loop\ifnum\ltj@tempcnta<7
+ \expandafter\newattribute%
+ \csname ltj@kcat\the\ltj@tempcnta\endcsname
+ \csname ltj@kcat\the\ltj@tempcnta\endcsname=0
+ \advance\ltj@tempcnta\@ne
+\repeat
+
+
+%%%%%%%% Loading luatexja.lua
+%% Quark tokens needed in ltj-base
+\protected\def\ltj@@q@escape{\ltj@@q@escape@}
+\protected\def\ltj@@q@escapenum{\ltj@@q@escapenum@}
+
+\directlua{%
+ luatexja = {};
+ luatexja.lang_ja = \the\ltj@@japanese;
+ dofile(assert(kpse.find_file('luatexja.lua', 'tex'),
+ "File `luatexja.lua' not found"))
+}
+
+%% \RequireLuaTeXjaSubmodule{name}[date]
+% A TeX version of luatexja.load_module(name)
+% The second optional argument [date] is simply ignored.
+\def\RequireLuaTeXjaSubmodule#1{%
+ \@ifnextchar[{\ltj@requirelua@submod{#1}}{\ltj@requirelua@submod{#1}[]}}
+\def\ltj@requirelua@submod#1[#2]{%
+ \directlua{luatexja.load_module("\luatexluaescapestring{#1}")}}
+
+
+%%%%%%%% Load all sub-packages.
+\ifltj@in@latex %<*LaTeX>
+ \RequirePackage{ltj-base}
+\else %<*!LaTeX>
+ \input ltj-base.sty %
+\fi %</LaTeX>
+
+%%%%%%%% \asluastring
+\def\asluastring#1{'\luatexluaescapestring{\detokenize{#1}}'}
+
+%%%%%%%% Redefine \/
+\newluafunction\ltj@@italic@inner
+\directlua{
+ local t = lua.get_functions_table()
+ t[\the\ltj@@italic@inner] = luatexja.jfont.append_italic
+}
+\protected\def\/{\relax\luafunction\ltj@@italic@inner}
+
+%%%%%%%% \jfont\CS={...:...;jfm=metric;...}, \globaljfont
+\protected\def\jfont#1{%
+ \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false, 'yoko','\luatexluaescapestring{\noexpand#1}')}}
+\protected\def\globaljfont#1{%
+ \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true, 'yoko','\luatexluaescapestring{\noexpand#1}')}}
+\newluafunction\ltj@@jfont@inner
+\directlua{
+ local t = lua.get_functions_table()
+ t[\the\ltj@@jfont@inner] = luatexja.jfont.jfontdefY
+}
+\def\ltj@@jfont{\luafunction\ltj@@jfont@inner}
+
+%%%%%%%% \tfont\CS={...:...;jfm=metric;...}, \globaltfont
+\protected\def\tfont#1{%
+ \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(false, 'tate','\luatexluaescapestring{\noexpand#1}')}}
+\protected\def\globaltfont#1{%
+ \afterassignment\ltj@@jfont\directlua{luatexja.jfont.jfontdefX(true, 'tate','\luatexluaescapestring{\noexpand#1}')}}
+
+%%%%%%%% \zw, \zh
+\newluafunction\ltj@zw@inner
+\newluafunction\ltj@zh@inner
+\directlua{
+ local t, setdimen, ltjf = lua.get_functions_table(), tex.setdimen, luatexja.jfont
+ t[\the\ltj@zw@inner] = function() setdimen('ltj@zw', ltjf.get_zw()) end
+ t[\the\ltj@zh@inner] = function() setdimen('ltj@zh', ltjf.get_zh()) end
+}
+\protected\def\zw{\luafunction\ltj@zw@inner\ltj@zw}
+\protected\def\zh{\luafunction\ltj@zh@inner\ltj@zh}
+
+%%%%%%%% \inhibitglue
+\newluafunction\ltj@reset@globaldefs@inner
+\newluafunction\ltj@restore@globaldefs@inner
+\newluafunction\ltj@@ihb@inner
+\newluafunction\ltj@@fakeparbegin@inner
+\newluafunction\ltj@@fakeboxbdd@inner
+\directlua{
+ local t = lua.get_functions_table()
+ t[\the\ltj@reset@globaldefs@inner]
+ = function() luatexja.global_temp = tex.globaldefs; tex.globaldefs = 0 end
+ t[\the\ltj@restore@globaldefs@inner]
+ = function() tex.globaldefs = luatexja.global_temp end
+ t[\the\ltj@@ihb@inner] = luatexja.jfmglue.create_inhibitglue_node
+ t[\the\ltj@@fakeparbegin@inner] = luatexja.jfmglue.create_beginpar_node
+ t[\the\ltj@@fakeboxbdd@inner] = luatexja.jfmglue.create_boxbdd_node
+}
+\protected\def\ltj@reset@globaldefs{\luafunction\ltj@reset@globaldefs@inner}
+\protected\def\ltj@restore@globaldefs{\luafunction\ltj@restore@globaldefs@inner}
+\protected\def\inhibitglue{\ifhmode\relax\luafunction\ltj@@ihb@inner\fi}
+\protected\def\ltjfakeparbegin{\ifhmode\relax\luafunction\ltj@@fakeparbegin@inner\fi}
+\protected\def\ltjfakeboxbdd{\ifhmode\relax\luafunction\ltj@@fakeboxbdd@inner\fi}
+
+
+%%%%%%%% \ltjdefcharrange<name>{100-200,3000-,5000,...}
+\protected\def\ltjdefcharrange#1#2{%
+ {\ltj@tempcntc=#1 \expandafter\ltj@@dcrange#2,,}\ignorespaces}
+\def\ltj@@dcrange#1,{\def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\let\@next=\relax\else
+ \ltj@@dcrangeA{#1}\let\@next=\ltj@@dcrange\fi\@next}
+\def\ltj@@dcrangeA#1{\ltj@@dcrangeB#1--\@nil}
+\def\ltj@@dcrangeB#1-#2-#3\@nil{\def\ltj@temp{#3}%
+ \ifx\ltj@temp\empty
+ \ltj@tempcnta=#1 \ltj@tempcntb=\ltj@tempcnta
+ \else
+ \def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\ltj@tempcnta='200\else\ltj@tempcnta=#1\fi\relax
+ \def\ltj@temp{#2}%
+ \ifx\ltj@temp\empty\ltj@tempcntb="10FFFF\else\ltj@tempcntb=#2\fi\relax%"
+ \fi
+ \directlua{luatexja.charrange.add_char_range(\the\ltj@tempcnta,\the\ltj@tempcntb,
+ \the\ltj@tempcntc)}%
+ }
+
+%%%%%%%% \ltjsetparameter
+\newcount\ltj@@stack \newcount\ltj@@group@level
+\ltj@@group@level\z@\ltj@@stack\z@
+
+\setbox\z@\hbox{%
+ \directlua{% This value depends on the version of LuaTeX.
+ luatexja.stack.hmode = -tex.nest[tex.nest.ptr].mode
+ }%
+}
+\setbox\z@\vbox{%
+ \directlua{% This value depends on the version of LuaTeX.
+ luatexja.stack.vmode = -tex.nest[tex.nest.ptr].mode
+ }%
+}
+\setbox\z@\box\voidb@x
+
+% prebreakpenalty = {<char_code>, <penalty>}
+\define@key[ltj]{japaram}{kcatcode}{\ltj@@set@stack{KCAT}{0}{0x7FFFFFFF}#1\relax}
+\define@key[ltj]{japaram}{prebreakpenalty}{\ltj@@set@stack{PRE}{-10000}{10000}#1\relax}
+\define@key[ltj]{japaram}{postbreakpenalty}{\ltj@@set@stack{POST}{-10000}{10000}#1\relax}
+\def\ltj@@set@stack#1#2#3{%
+ \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#1,#2,#3)}}
+%\def\ltj@@set@stack#1,#2:#3#4#5{%
+% \directlua{luatexja.stack.set_stack_perchar(luatexja.stack_table_index.#3,
+% \ltj@safe@num@or{nil}{#1},\ltj@safe@num@or{nil}{#2},#4,#5)}}
+
+% jatextfont = {<char_code>, <font_cs>}
+% only horizontal font is supported
+\define@key[ltj]{japaram}{jatextfont}{%
+ \expandafter\ltj@@set@stackfont#1:{MJT}}
+\define@key[ltj]{japaram}{jascriptfont}{%
+ \expandafter\ltj@@set@stackfont#1:{MJS}}
+\define@key[ltj]{japaram}{jascriptscriptfont}{%
+ \expandafter\ltj@@set@stackfont#1:{MJSS}}
+\protected\def\ltj@@set@stackfont#1,#2:#3{%
+ \ltj@reset@globaldefs
+ \ltj@tempcnta=\ltj@curjfnt\ltj@curjfnt\m@ne#2%
+ \ifnum\ltj@curjfnt=\m@ne
+ \@PackageError{luatexja-core}%
+ {\string#2 is not a control sequence that represents \MessageBreak
+ a Japanese font}{}%
+ \else
+ \directlua{luatexja.stack.set_stack_font(luatexja.stack_table_index.#3,
+ \ltj@safe@num@or{nil}{#1}, \the\ltj@curjfnt)}%
+ \fi
+ \ltj@curjfnt=\ltj@tempcnta
+ \ltj@restore@globaldefs
+ }
+
+% {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}
+
+% jaxspmode = {<char_code>, <mode>}
+% mode: inhibit, preonly, postonly, allow
+% or 0 1 2 3
+\define@key[ltj]{japaram}{jaxspmode}{% \inhibitxspcode
+ \expandafter\ltj@set@jaxspmode#1:\relax}
+\def\ltj@set@jaxspmode#1,#2:{%
+ \lowercase{\edef\ltj@temp{#2}}%
+ \def\ltj@tempa{inhibit}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{0}\fi
+ \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi
+ \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi
+ \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi
+ \ltj@@set@stack{XSP}03#1 \ltj@temp}
+
+% alxspmode = {<char_code>, <mode>}
+% mode: inhibit, preonly, postonly, allow
+% or 0 1 2 3
+\define@key[ltj]{japaram}{alxspmode}{% \inhibitxspcode
+ \expandafter\ltj@set@jaxspmode#1:\relax}% same code as jaxspmode
+
+% autospacing = <bool> (default: true)
+\define@boolkey[ltj]{japaram}{autospacing}[true]{%
+ \ifltj@japaram@autospacing
+ \directlua{luatexja.ext_print_global()}\ltj@autospc\@ne
+ \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
+ \else
+ \directlua{luatexja.ext_print_global()}\ltj@autoxspc\z@
+ \fi}
+
+% [x]]kanjiskip = <skip>
+\define@key[ltj]{japaram}{kanjiskip}{\ltjsetkanjiskip#1}
+\define@key[ltj]{japaram}{xkanjiskip}{\ltjsetxkanjiskip#1}
+\newluafunction\ltjsetkanjiskip@inner
+\newluafunction\ltjsetxkanjiskip@inner
+\directlua{
+ local t, scan_glue = lua.get_functions_table(), token.scan_glue
+ local sss, sti = luatexja.stack.set_stack_skip, luatexja.stack_table_index
+ t[\the\ltjsetkanjiskip@inner] = function()
+ local d = scan_glue(); sss(sti.KSK, d); node.free(d)
+ end
+ t[\the\ltjsetxkanjiskip@inner] = function()
+ local d = scan_glue(); sss(sti.XSK, d); node.free(d)
+ end
+}
+\protected\def\ltjsetkanjiskip{\luafunction\ltjsetkanjiskip@inner}
+\protected\def\ltjsetxkanjiskip{\luafunction\ltjsetxkanjiskip@inner}
+
+% jcharwidowpenalty = <count>
+\define@key[ltj]{japaram}{jcharwidowpenalty}{% %COUNT
+ \ltj@@set@stack{JWP}{-10000}{10000}\z@#1 }
+
+% differentjfm = { large | small | average | pleft | pright | paverage | both}
+\define@choicekey*+[ltj]{japaram}{differentjfm}[\ltj@temp\ltj@tempr]%
+ {large,small,average,pleft,pright,paverage,both}{%
+ \ifcase\ltj@tempr
+ \directlua{luatexja.jfmglue.diffmet_rule = math.max}\or
+ \directlua{luatexja.jfmglue.diffmet_rule = math.min}\or
+ \directlua{luatexja.jfmglue.diffmet_rule = math.two_average}\or
+ \directlua{luatexja.jfmglue.diffmet_rule = math.two_pleft}\or
+ \directlua{luatexja.jfmglue.diffmet_rule = math.two_pright}\or
+ \directlua{luatexja.jfmglue.diffmet_rule = math.two_paverage}\or
+ \directlua{luatexja.jfmglue.diffmet_rule = math.two_add}
+ \fi
+}{\ltj@PackageError{luatexja}{invalid argument `#1' for `differentjfm'}{%
+ Argument for `differentjfm' must be one of `large', `small', `average',^^J%
+ `pleft', `pright', 'paverage' or `both'. }}
+ % large, small, average, pleft, pright, paverage, both
+
+
+% jacharrange = { +-<range_number> }
+\define@key[ltj]{japaram}{jacharrange}{\expandafter\ltj@@scrange#1,,}
+\def\ltj@@scrange#1,{%
+ \edef\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\let\ltj@@next=\relax\else\let\ltj@@next=\ltj@@scrange
+ \directlua{luatexja.charrange.toggle_char_range(%
+ luatexja.is_global,\ltj@safe@num@or{nil}{#1})}%
+ \fi\ltj@@next
+}
+
+\protected\def\ltj@setpar@global{%
+ \relax\ifnum\globaldefs>0\directlua{luatexja.isglobal='global'}%
+ \else\directlua{luatexja.isglobal=''}\fi
+}
+\protected\def\ltjsetparameter#1{%
+ \directlua{luatexja.base.start_time_measure('set_par')}%
+ \ltj@setpar@global\setkeys[ltj]{japaram}{#1}%
+ \directlua{luatexja.base.stop_time_measure('set_par')}%
+ \ignorespaces}
+\protected\def\ltjglobalsetparameter#1{%
+ \relax\ifnum\globaldefs<0\directlua{luatexja.isglobal=''}%
+ \else\directlua{luatexja.isglobal='global'}\fi%
+ \directlua{luatexja.base.start_time_measure('set_par')}%
+ \setkeys[ltj]{japaram}{#1}%
+ \directlua{luatexja.base.stop_time_measure('set_par')}%
+ \ignorespaces}
+
+%%%%%%%% \ltjgetparameter
+\def\ltj@@decl@array@param#1{%
+ \expandafter\let\csname ltj@@array@param/#1\endcsname=t%
+}
+\ltj@@decl@array@param{prebreakpenalty}
+\ltj@@decl@array@param{postbreakpenalty}
+\ltj@@decl@array@param{jaxspmode}
+\ltj@@decl@array@param{alxspmode}
+\ltj@@decl@array@param{kcatcode}
+\ltj@@decl@array@param{jacharrange}
+\ltj@@decl@array@param{chartorange}
+\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
+ \expandafter\ltx@secondoftwo
+ \fi
+ {\ltj@@getparam@two{#1}}%
+ {\ltj@@getparam@one{#1}}%
+}
+\def\ltj@@getparam@one#1{%
+ \directlua{luatexja.ext_get_parameter_unary('#1')}%
+}%
+\def\ltj@@getparam@two#1#2{%
+ \directlua{luatexja.ext_get_parameter_binary('#1', \ltj@safe@num@or{nil}{#2})}%
+}
+
+%%%%%%%% \ltjalchar<number>, \ltjjachar<number>
+\let\ltj@@origchar=\char
+\newluafunction\ltj@alljachar@inner
+\directlua{
+ local t, set_attr = lua.get_functions_table(), tex.setattribute
+ local get_attr, floor = tex.getattribute, math.floor
+ local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+ local lang_ja = luatexja.lang_ja
+ 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)
+ end
+ end
+}
+\protected\def\ltj@alljachar{\luafunction\ltj@alljachar@inner}
+\protected\def\ltj@allalchar{\relax
+ \csname ltj@kcat0\endcsname="7FFFFFFF %"
+ \csname ltj@kcat1\endcsname="7FFFFFFF %"
+ \csname ltj@kcat2\endcsname="7FFFFFFF %"
+ \csname ltj@kcat3\endcsname="7FFFFFFF %"
+ \csname ltj@kcat4\endcsname="7FFFFFFF %"
+ \csname ltj@kcat5\endcsname="7FFFFFFF %"
+ \csname ltj@kcat6\endcsname="7FFFFFFF }%"
+
+\protected\def\ltjjachar{\afterassignment\ltj@@jachar\ltj@tempcnta}
+\def\ltj@@jachar{{\directlua{tex.globaldefs=0}\ltj@alljachar\ltj@@origchar\ltj@tempcnta}}
+\protected\def\ltjalchar{\afterassignment\ltj@@alchar\ltj@tempcnta}
+\def\ltj@@alchar{{\directlua{tex.globaldefs=0}\ltj@allalchar\ltj@@origchar\ltj@tempcnta}}
+
+%%%%%%%% \ltjsetmathletter<number>, \ltjunsetmathletter<number>
+\protected\def\ltjsetmathletter#1{%
+ \directlua{luatexja.math.is_math_letters[token.scan_int()]=true}#1\relax
+}
+\protected\def\ltjunsetmathletter#1{%
+ \directlua{luatexja.math.is_math_letters[token.scan_int()]=false}#1\relax
+}
+
+%%%%%%%% \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
+ \ltj@reset@globaldefs
+ \begingroup\ltj@curjfnt\m@ne\ltj@curtfnt\m@ne\relax
+ #1\directlua{luatexja.__temp = -(\the\ltj@curjfnt)*(\the\ltj@curtfnt)}\endgroup
+ \ltj@tempcntc=\directlua{tex.sprint(luatexja.__temp)}\relax
+ \ifnum\ltj@tempcntc=\m@ne
+ \@PackageError{luatexja-core}%
+ {\string#1 is not a control sequence that represents \MessageBreak
+ 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%
+ \expandafter\ltj@@altfont#3,,}\ignorespaces}
+\def\ltj@@altfont#1,{\def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\let\@next=\relax\else
+ \ltj@@altfontA{#1}\let\@next=\ltj@@altfont\fi\@next}
+\def\ltj@@altfontA#1{\ltj@@altfontB#1--\@nil}
+\def\ltj@@altfontB#1-#2-#3\@nil{\def\ltj@temp{#3}%
+ \ifx\ltj@temp\empty
+ \ltj@tempcnta=#1 \ltj@tempcntb=\ltj@tempcnta
+ \else
+ \def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\ltj@tempcnta='200\else\ltj@tempcnta=#1\fi\relax
+ \def\ltj@temp{#2}%
+ \ifx\ltj@temp\empty\ltj@tempcntb="10FFFF\else\ltj@tempcntb=#2\fi\relax%"
+ \fi
+ \directlua{luatexja.jfont.set_alt_font(
+ \the\ltj@tempcnta,\the\ltj@tempcntb,
+ \the\ltj@tempcntc, \the\@tempcnta)}%
+ }
+
+%%%%%%%% \ltjclearaltfont<font_cs>
+% <font_cs> の文字は全部 <font_cs> 本来の文字で組む
+\protected\def\ltjclearaltfont#1{%
+ {\ltj@@getjfontnumber#1%
+ \directlua{luatexja.jfont.clear_alt_font(\the\ltj@tempcntc)}}\ignorespaces}
+
+
+%%%%%%%% \yoko, \tate,\dtou
+\protected\def\tate{%
+ \directlua{luatexja.direction.set_list_direction(3, 'tate')}%
+}
+\protected\def\yoko{%
+ \directlua{luatexja.direction.set_list_direction(4, 'yoko')}%
+}
+\protected\def\dtou{%
+ \directlua{luatexja.direction.set_list_direction(1, 'dtou')}%
+}
+\protected\def\utod{% 「縦数式ディレクション」
+ \directlua{luatexja.direction.set_list_direction(11, 'utod')}%
+}
+\define@key[ltj]{japaram}{direction}{%% always local
+ \directlua{luatexja.direction.set_list_direction(1, 'ltjsetparameter')}%
+}
+
+\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\ltj@@insert@B\let\ltj@@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_hook('adj')}%
+ \aftergroup\ltj@@vadjust@check@dir\let\ltj@@next}
+\protected\def\ltj@@vadjust@check@dir{%
+ \directlua{luatexja.direction.check_adjust_direction()}%
+}
+
+%%%% \hbox, \vbox, \vtop
+\setbox\z@\hbox{%
+ \primitive\everymath{}
+ $\directlua{% This value depends on the version of LuaTeX.
+ luatexja.stack.mmode = -tex.nest[tex.nest.ptr].mode
+ }$%
+}
+\setbox\z@\box\voidb@x
+\ifltj@everyhook@avail% using everyhook package
+ \newluafunction\ltj@@box@dirhook
+ \directlua{
+ local t, ltjd = lua.get_functions_table(), luatexja.direction
+ t[\the\ltj@@box@dirhook]
+ = function() ltjd.set_list_direction_hook() end
+ }
+ \PushPreHook{hbox}{\luafunction\ltj@@box@dirhook\aftergroup\ltj@@reset@badness}
+ \PushPreHook{vbox}{\luafunction\ltj@@box@dirhook\aftergroup\ltj@@reset@badness}
+\else
+ \let\ltj@@everyhbox=\everyhbox\let\ltj@@everyvbox=\everyvbox
+ \newtoks\ltj@@i@everyhbox\newtoks\ltj@@i@everyvbox
+ \let\everyhbox=\ltj@@i@everyhbox\let\everyvbox=\ltj@@i@everyvbox
+ \newluafunction\ltj@@box@dirhook
+ \directlua{
+ local t, ltjd = lua.get_functions_table(), luatexja.direction
+ t[\the\ltj@@box@dirhook]
+ = function() ltjd.set_list_direction_hook() end
+ }
+ \ltj@@everyhbox{\luafunction\ltj@@box@dirhook
+ \aftergroup\ltj@@reset@badness\the\ltj@@i@everyhbox}
+ \ltj@@everyvbox{\luafunction\ltj@@box@dirhook
+ \aftergroup\ltj@@reset@badness\the\ltj@@i@everyvbox}
+\fi
+
+\newluafunction\ltj@@reset@badness@inner
+\directlua{
+ local t = lua.get_functions_table()
+ t[\the\ltj@@reset@badness@inner] = function()
+ if luatexja.global_temp then
+ tex.hbadness= tex.hbadness or luatexja.hbadness_temp
+ tex.vbadness= tex.vbadness or luatexja.vbadness_temp
+ tex.globaldefs= luatexja.global_temp or tex.globaldefs
+ end
+ end}
+\protected\def\ltj@@reset@badness{\luafunction\ltj@@reset@badness@inner}
+
+\AtBeginShipout{\directlua{luatexja.direction.finalize()}}
+
+%%%% \raise, \lower, \moveleft, \moveright
+\let\ltj@@orig@raise=\raise
+\let\ltj@@orig@lower=\lower
+\protected\def\raise{\ltj@reset@globaldefs\afterassignment\ltj@@raise\ltj@tempdima}
+\protected\def\lower{\ltj@reset@globaldefs\afterassignment\ltj@@raise\ltj@tempdima-}
+\protected\def\ltj@@raise{%
+ \ltj@restore@globaldefs
+ \edef\ltj@@raise@a{%
+ \noexpand\directlua{luatexja.direction.raise_box()}%
+ \ltj@@orig@raise\the\ltj@tempdima\noexpand\box\ltj@afbox
+ }\ltj@afterbox\ltj@@raise@a}
+\let\ltj@@orig@moveleft=\moveleft
+\let\ltj@@orig@moveright=\moveright
+\protected\def\moveleft{\ltj@reset@globaldefs\afterassignment\ltj@@moveleft\ltj@tempdima}
+\protected\def\moveright{\ltj@reset@globaldefs\afterassignment\ltj@@moveleft\ltj@tempdima-}
+\protected\def\ltj@@moveleft{%
+ \ltj@restore@globaldefs
+ \edef\ltj@@moveleft@a{%
+ \noexpand\directlua{luatexja.direction.raise_box()}%
+ \ltj@@orig@moveleft\the\ltj@tempdima\noexpand\box\ltj@afbox
+ }\ltj@afterbox\ltj@@moveleft@a}
+
+%%%%\vsplit
+\let\ltj@@orig@vsplit=\vsplit
+\protected\def\vsplit{\directlua{luatexja.direction.vsplit()}}
+%%%% \vcenter
+\let\ltj@@orig@vcenter=\vcenter
+\protected\def\vcenter{\ltj@afterbox\ltj@@vcenter\vbox}
+\protected\def\ltj@@vcenter{%
+ \directlua{luatexja.direction.raise_box()}%
+ \ltj@@orig@vcenter{\box\ltj@afbox}%
+}
+
+%%%% \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.unbox_check_dir()}%
+ \ltj@@orig@unhbox\ltj@tempcnta}
+\protected\def\ltj@@unvbox{%
+ \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
+\let\ltj@@orig@lastbox=\lastbox
+\protected\def\lastbox{%
+ \directlua{luatexja.direction.lastbox_hook()}\ltj@@orig@lastbox
+}
+
+%%%%%%%% \ltjgetwd<box_num> etc.
+\def\ltj@@getwd{%
+ \directlua{luatexja.direction.get_box_dim('width', token.scan_int())}}
+\def\ltj@@getht{%
+ \directlua{luatexja.direction.get_box_dim('height', token.scan_int())}}
+\def\ltj@@getdp{%
+ \directlua{luatexja.direction.get_box_dim('depth', token.scan_int())}}
+\let\ltjgetwd=\ltj@@getwd\let\ltjgetht=\ltj@@getht\let\ltjgetdp=\ltj@@getdp
+
+%%%%%%%% \ltjsetwd<box_num>=<dimen> etc.
+\protected\def\ltjsetwd{\directlua{luatexja.direction.set_box_dim('width')}}
+\protected\def\ltjsetht{\directlua{luatexja.direction.set_box_dim('height')}}
+\protected\def\ltjsetdp{\directlua{luatexja.direction.set_box_dim('depth')}}
+
+
+%%------------------ Load module for the format
+
+\ifltj@in@latex %<*LaTeX>
+ \RequirePackage{ltj-latex}
+\else\ifltj@in@plain %<*plain>
+ \input ltj-plain.sty %
+\fi\fi %</LaTeX|plain>
+
+\newcatcodetable\ltj@temp@cctb
+\def\ltj@overwrite@catcodetable#1{%
+ \setluatexcatcodetable\ltj@temp@cctb{\luatexcatcodetable#1}%
+ \setluatexcatcodetable#1{\luatexcatcodetable\ltj@temp@cctb\catcode\ltjlineendcomment=14}%"
+}
+\ltj@overwrite@catcodetable\CatcodeTableLaTeX
+\ltj@overwrite@catcodetable\CatcodeTableLaTeXAtLetter
+\ltj@overwrite@catcodetable\CatcodeTableExpl
+
+
+%%------------------ all done
+\ltj@core@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/luatexja.lua b/macros/luatex/generic/luatexja/src/luatexja.lua
new file mode 100644
index 0000000000..4a4de62b0d
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/luatexja.lua
@@ -0,0 +1,601 @@
+
+require('lualibs')
+tableunpack = table.unpack
+
+------------------------------------------------------------------------
+local function load_lua(fn)
+ local found = kpse.find_file(fn, 'tex')
+ if not found then
+ tex.error("LuaTeX-ja error: File `" .. fn .. "' not found")
+ else
+ texio.write_nl('(' .. found .. ')')
+ dofile(found)
+ end
+end
+luatexja.load_lua = load_lua
+function luatexja.load_module(name)
+ require('ltj-' .. name.. '.lua')
+end
+
+do
+ local setfield = node.direct.setfield
+ luatexja.setglue = node.direct.setglue or
+ function(g,w,st,sh,sto,sho)
+ setfield(g,'width', w or 0)
+ setfield(g,'stretch',st or 0)
+ setfield(g,'shrink', sh or 0)
+ setfield(g,'stretch_order',sto or 0)
+ setfield(g,'shrink_order', sho or 0)
+ end
+ local getfield = node.direct.getfield
+ luatexja.getglue = node.direct.getglue or
+ function(g)
+ return getfield(g,'width'),
+ getfield(g,'stretch'),
+ getfield(g,'shrink'),
+ getfield(g,'stretch_order'),
+ getfield(g,'shrink_order')
+ end
+end
+
+--- 以下は全ファイルで共有される定数
+local icflag_table = {}
+luatexja.icflag_table = icflag_table
+icflag_table.ITALIC = 1
+icflag_table.PACKED = 2
+icflag_table.KINSOKU = 3
+icflag_table.FROM_JFM = 4
+-- FROM_JFM: 4, 5, 6, 7, 8 →優先度高(伸びやすく,縮みやすい)
+-- 6 が標準
+icflag_table.KANJI_SKIP = 68 -- = 4+64
+icflag_table.KANJI_SKIP_JFM = 69
+icflag_table.XKANJI_SKIP = 70
+icflag_table.XKANJI_SKIP_JFM = 71
+icflag_table.LINEEND = 72
+icflag_table.PROCESSED = 73
+icflag_table.IC_PROCESSED = 74
+icflag_table.BOXBDD = 75
+icflag_table.PROCESSED_BEGIN_FLAG = 4096 -- sufficiently large power of 2
+
+local stack_table_index = {}
+luatexja.stack_table_index = stack_table_index
+stack_table_index.PRE = 0x200000 -- characterごと
+stack_table_index.POST = 0x400000 -- characterごと
+stack_table_index.KCAT = 0x600000 -- characterごと
+stack_table_index.XSP = 0x800000 -- characterごと
+stack_table_index.RIPRE = 0xA00000 -- characterごと,ruby pre
+stack_table_index.RIPOST = 0xC00000 -- characterごと,ruby post
+stack_table_index.JWP = 0 -- これだけ
+stack_table_index.KSK = 1 -- これだけ
+stack_table_index.XSK = 2 -- これだけ
+stack_table_index.MJT = 0x100 -- 0--255
+stack_table_index.MJS = 0x200 -- 0--255
+stack_table_index.MJSS = 0x300 -- 0--255
+stack_table_index.KSJ = 0x400 -- 0--9
+
+local userid_table = {}
+luatexja.userid_table = userid_table
+userid_table.IHB = luatexbase.newuserwhatsitid('inhibitglue', 'luatexja') -- \inhibitglue
+userid_table.STCK = luatexbase.newuserwhatsitid('stack_marker', 'luatexja') -- スタック管理
+userid_table.BPAR = luatexbase.newuserwhatsitid('begin_par', 'luatexja') -- 「段落始め」
+userid_table.DIR = luatexbase.newuserwhatsitid('direction', 'luatexja') -- 組方向
+userid_table.BOXB = luatexbase.newuserwhatsitid('box_boundary', 'luatexja') -- 「ボックス始め・終わり」
+userid_table.JA_AL_BDD = luatexbase.newuserwhatsitid('ja_al_boundary', 'luatexja')
+
+local dir_table = {}
+luatexja.dir_table = dir_table
+dir_table.dir_dtou = 1
+dir_table.dir_tate = 3
+dir_table.dir_yoko = 4
+dir_table.dir_math_mod = 8
+dir_table.dir_node_auto = 128 -- 組方向を合わせるために自動で作られたもの
+dir_table.dir_node_manual = 256 -- 寸法代入によって作られたもの
+dir_table.dir_utod = dir_table.dir_tate + dir_table.dir_math_mod
+ -- 「縦数式ディレクション」 in pTeX
+--- 定義終わり
+
+local load_module = luatexja.load_module
+load_module('base'); local ltjb = luatexja.base
+load_module('rmlgbm'); local ltjr = luatexja.rmlgbm -- must be 1st
+
+if luatexja_debug then load_module('debug') end
+
+load_module('charrange'); local ltjc = luatexja.charrange
+load_module('stack'); local ltjs = luatexja.stack
+load_module('direction'); local ltjd = luatexja.direction -- +1 hlist +1 attr_list
+load_module('lineskip'); local ltjl = luatexja.lineskip -- +1 hlist +1 attr_list
+load_module('jfont'); local ltjf = luatexja.jfont
+load_module('inputbuf'); local ltji = luatexja.inputbuf
+load_module('pretreat'); local ltjp = luatexja.pretreat
+load_module('setwidth'); local ltjw = luatexja.setwidth
+load_module('jfmglue'); local ltjj = luatexja.jfmglue -- +1 glue +1 gs +1 attr_list
+load_module('math'); local ltjm = luatexja.math
+load_module('base'); local ltjb = luatexja.base
+
+
+local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+local attr_jchar_code = luatexbase.attributes['ltj@charcode']
+local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+local attr_yablshift = luatexbase.attributes['ltj@yablshift']
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local attr_uniqid = luatexbase.attributes['ltj@uniqid']
+local attr_dir = luatexbase.attributes['ltj@dir']
+local cat_lp = luatexbase.catcodetables['latex-package']
+
+-- Three aux. functions, bollowed from tex.web
+
+local unity=65536
+local floor = math.floor
+
+local function print_scaled(s)
+ local out=''
+ local delta=10
+ if s<0 then
+ out=out..'-'; s=-s
+ end
+ out=out..tostring(floor(s/unity)) .. '.'
+ s=10*(s%unity)+5
+ repeat
+ if delta>unity then s=s+32768-50000 end
+ out=out .. tostring(floor(s/unity))
+ s=10*(s%unity)
+ delta=delta*10
+ until s<=delta
+ return out
+end
+luatexja.print_scaled = print_scaled
+
+local function print_glue(d,order)
+ local out=print_scaled(d)
+ if order>0 then
+ out=out..'fi'
+ while order>1 do
+ out=out..'l'; order=order-1
+ end
+ else
+ out=out..'pt'
+ end
+ return out
+end
+
+local function print_spec(p)
+ local out=print_scaled(p.width)..'pt'
+ if p.stretch~=0 then
+ out=out..' plus '..print_glue(p.stretch,p.stretch_order)
+ end
+ if p.shrink~=0 then
+ out=out..' minus '..print_glue(p.shrink,p.shrink_order)
+ end
+return out
+end
+
+
+------------------------------------------------------------------------
+-- CODE FOR GETTING/SETTING PARAMETERS
+------------------------------------------------------------------------
+
+-- EXT: print parameters that don't need arguments
+do
+ local tex_getattr = tex.getattribute
+ local function getattr(a)
+ local r = tex.getattribute(a)
+ return (r==-0x7FFFFFFF) and 0 or r
+ end
+ luatexja.unary_pars = {
+ yalbaselineshift = function(t)
+ return print_scaled(getattr('ltj@yablshift'))..'pt'
+ end,
+ yjabaselineshift = function(t)
+ return print_scaled(getattr('ltj@ykblshift'))..'pt'
+ end,
+ talbaselineshift = function(t)
+ return print_scaled(getattr('ltj@tablshift'))..'pt'
+ end,
+ tjabaselineshift = function(t)
+ return print_scaled(getattr('ltj@tkblshift'))..'pt'
+ end,
+ kanjiskip = function(t)
+ return print_spec(ltjs.get_stack_skip(stack_table_index.KSK, t))
+ end,
+ xkanjiskip = function(t)
+ return print_spec(ltjs.get_stack_skip(stack_table_index.XSK, t))
+ end,
+ jcharwidowpenalty = function(t)
+ return ltjs.get_stack_table(stack_table_index.JWP, 0, t)
+ end,
+ autospacing = function(t)
+ return getattr('ltj@autospc')
+ end,
+ autoxspacing = function(t)
+ return getattr('ltj@autoxspc')
+ end,
+ differentjfm = function(t)
+ local f, r = luatexja.jfmglue.diffmet_rule, '???'
+ if f == math.max then r = 'large'
+ elseif f == math.min then r = 'small'
+ elseif f == math.two_average then r = 'average'
+ elseif f == math.two_paverage then r = 'paverage'
+ elseif f == math.two_pleft then r = 'pleft'
+ elseif f == math.two_pright then r = 'pright'
+ elseif f == math.two_add then r = 'both'
+ end
+ return r
+ end,
+ direction = function()
+ local v = ltjd.get_dir_count()
+ if math.abs(tex.nest[tex.nest.ptr].mode) == ltjs.mmode and v == dir_table.dir_tate then
+ v = dir_table.dir_utod
+ end
+ return v
+ end,
+ adjustdir = ltjd.get_adjust_dir_count,
+ }
+
+ local unary_pars = luatexja.unary_pars
+ function luatexja.ext_get_parameter_unary(k)
+ if unary_pars[k] then
+ tex.write(tostring(unary_pars[k](tex.getcount('ltj@@stack'))))
+ end
+ ltjb.stop_time_measure('get_par')
+ end
+end
+
+
+-- EXT: print parameters that need arguments
+do
+ luatexja.binary_pars = {
+ jacharrange = function(c, t)
+ if type(c)~='number' or c<-1 or c>31*ltjc.ATTR_RANGE then
+ -- 0, -1 はエラーにしない(隠し)
+ ltjb.package_error('luatexja',
+ 'invalid character range number (' .. tostring(c) .. ')',
+ 'A character range number should be in the range 1..'
+ .. 31*ltjc.ATTR_RANGE .. ",\n"..
+ 'So I changed this one to ' .. 31*ltjc.ATTR_RANGE .. ".")
+ c=0 -- external range 217 == internal range 0
+ elseif c==31*ltjc.ATTR_RANGE then c=0
+ end
+ -- 負の値は <U+0080 の文字の文字範囲,として出てくる.この時はいつも欧文文字なので 1 を返す
+ return (c<0) and 1 or ltjc.get_range_setting(c)
+ end,
+ prebreakpenalty = function(c, t)
+ return ltjs.get_stack_table(stack_table_index.PRE
+ + ltjb.in_unicode(c, true), 0, t)
+ end,
+ postbreakpenalty = function(c, t)
+ return ltjs.get_stack_table(stack_table_index.POST
+ + ltjb.in_unicode(c, true), 0, t)
+ end,
+ kcatcode = function(c, t)
+ return ltjs.get_stack_table(stack_table_index.KCAT
+ + ltjb.in_unicode(c, false), 0, t)
+ end,
+ chartorange = function(c, t)
+ return ltjc.char_to_range(ltjb.in_unicode(c, false))
+ end,
+ jaxspmode = function(c, t)
+ return ltjs.get_stack_table(stack_table_index.XSP
+ + ltjb.in_unicode(c, true), 3, t)
+ end,
+ boxdir = function(c, t)
+ if type(c)~='number' or c<0 or c>65535 then
+ ltjb.package_error('luatexja',
+ 'Bad register code (' .. tostring(c) .. ')',
+ 'A register must be between 0 and 65535.\n'..
+ 'I changed this one to zero.')
+ c=0
+ end
+ return ltjd.get_register_dir(c)
+ end,
+ }
+ local binary_pars = luatexja.binary_pars
+
+ binary_pars.alxspmode = binary_pars.jaxspmode
+ function luatexja.ext_get_parameter_binary(k,c)
+ if binary_pars[k] then
+ tex.write(tostring(binary_pars[k](c,tex.getcount('ltj@@stack'))))
+ end
+ ltjb.stop_time_measure('get_par')
+ end
+end
+
+-- EXT: print \global if necessary
+function luatexja.ext_print_global()
+ if luatexja.isglobal=='global' then tex.sprint(cat_lp, '\\global') end
+end
+
+
+-- main process
+do
+ local start_time_measure, stop_time_measure
+ = ltjb.start_time_measure, ltjb.stop_time_measure
+ local nullfunc = function (n) return n end
+ local to_node = node.direct.tonode
+ local to_direct = node.direct.todirect
+ local ensure_tex_attr = ltjb.ensure_tex_attr
+
+ -- mode = true iff main_process is called from pre_linebreak_filter
+ local function main_process(head, mode, dir, gc)
+ ensure_tex_attr(attr_icflag, 0)
+ if gc == 'fin_row' then return head
+ else
+ --luatexja.ext_show_node_list(head, 'T> ', print)
+ start_time_measure('jfmglue')
+ local p = ltjj.main(to_direct(head),mode, dir)
+ stop_time_measure('jfmglue')
+ return to_node(p)
+ end
+ end
+
+ local function adjust_icflag(h)
+ -- kern from luaotfload will have icflag = 1
+ -- (same as italic correction)
+ ensure_tex_attr(attr_icflag, 1)
+ return h
+ end
+
+ -- callbacks
+ ltjb.add_to_callback(
+ 'pre_linebreak_filter',
+ function (head,groupcode)
+ return main_process(head, true, tex.textdir, groupcode)
+ end,'ltj.main',
+ luatexbase.priority_in_callback('pre_linebreak_filter', 'luaotfload.node_processor')+1)
+ ltjb.add_to_callback(
+ 'hpack_filter',
+ function (head,groupcode,size,packtype, dir)
+ return main_process(head, false, dir, groupcode)
+ end,'ltj.main',
+ luatexbase.priority_in_callback('hpack_filter', 'luaotfload.node_processor')+1)
+ ltjb.add_to_callback('pre_linebreak_filter', adjust_icflag, 'ltj.adjust_icflag', 1)
+ ltjb.add_to_callback('hpack_filter', adjust_icflag, 'ltj.adjust_icflag', 1)
+
+end
+
+-- cleanup process
+function luatexja.ext_cleanup()
+ ltjf.cleanup_size_cache()
+ ltjd.remove_end_whatsit()
+end
+
+
+-- lastnodechar
+do
+ local id_glyph = node.id('glyph')
+ function luatexja.pltx_composite_last_node_char()
+ local n = tex.nest[tex.nest.ptr].tail
+ local r = '-1'
+ if n then
+ if n.id==id_glyph then
+ while n.componetns and n.subtype and n.subtype%4 >= 2 do
+ n = node.tail(n)
+ end
+ r = tostring(n.char)
+ end
+ end
+ tex.sprint(r)
+ end
+end
+
+-- debug
+
+do
+
+local node_type = node.type
+local node_next = node.next
+local has_attr = node.has_attribute
+
+local id_penalty = node.id('penalty')
+local id_glyph = node.id('glyph')
+local id_glue = node.id('glue')
+local id_kern = node.id('kern')
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_rule = node.id('rule')
+local id_math = node.id('math')
+local id_whatsit = node.id('whatsit')
+local sid_user = node.subtype('user_defined')
+
+local function get_attr_icflag(p)
+ return (has_attr(p, attr_icflag) or 0) % icflag_table.PROCESSED_BEGIN_FLAG
+end
+
+local prefix, inner_depth
+local utfchar = utf.char
+local function debug_show_node_X(p,print_fn, limit)
+ local k = prefix
+ local s
+ local pt=node_type(p.id)
+ local base = prefix .. string.format('%X', get_attr_icflag(p))
+ .. ' ' .. pt .. ' ' .. tostring(p.subtype) .. ' '
+ if pt == 'glyph' then
+ s = base .. ' ' ..
+ (p.char>=0xF0000 and string.format('(U+%X)', p.char) or utfchar(p.char)) .. ' '
+ .. tostring(p.font) .. ' (' .. print_scaled(p.height) .. '+'
+ .. print_scaled(p.depth) .. ')x' .. print_scaled(p.width)
+ if p.xoffset~=0 or p.yoffset~=0 then
+ s = s .. ' off: (' .. print_scaled(p.xoffset)
+ .. ',' .. print_scaled(p.yoffset) .. ')'
+ end
+ print_fn(s)
+ elseif pt=='hlist' or pt=='vlist' or pt=='unset'or pt=='ins' then
+ if pt=='ins' then
+ s = base .. '(' .. print_scaled(p.height) .. '+'
+ .. print_scaled(p.depth) .. ')'
+ .. ', dir=' .. tostring(node.has_attribute(p, attr_dir))
+ else
+ s = base .. '(' .. print_scaled(p.height) .. '+'
+ .. print_scaled(p.depth) .. ')x' .. print_scaled(p.width)
+ .. ', dir=' .. tostring(node.has_attribute(p, attr_dir))
+ end
+ if (p.shift or 0)~=0 then
+ s = s .. ', shifted ' .. print_scaled(p.shift)
+ end
+ if p.glue_set and p.glue_sign ==2 or ( p.glue_sign==1 and p.glue_set>0) then
+ s = s .. ' glue set '
+ if p.glue_sign == 2 then s = s .. '-' end
+ s = s .. tostring(floor(p.glue_set*10000)/10000)
+ if p.glue_order == 0 then
+ s = s .. 'pt'
+ else
+ s = s .. 'fi'
+ for i = 2, p.glue_order do s = s .. 'l' end
+ end
+ end
+ if get_attr_icflag(p) == icflag_table.PACKED then
+ s = s .. ' (packed)'
+ end
+ print_fn(s);
+ local bid = inner_depth
+ prefix, inner_depth = prefix.. '.', inner_depth + 1
+ if inner_depth < limit then
+ for q in node.traverse(p.head) do
+ debug_show_node_X(q, print_fn, limit)
+ end
+ end
+ prefix=k
+ elseif pt=='rule' then
+ s = base .. '(' .. print_scaled(p.height) .. '+'
+ .. print_scaled(p.depth) .. ')x' .. print_scaled(p.width)
+ .. ', dir=' .. tostring(node.has_attribute(p, attr_dir))
+ print_fn(s)
+ elseif pt=='disc' then
+ print_fn(s)
+ local bid = inner_depth
+ if inner_depth < limit then
+ prefix, inner_depth = k.. 'p.', inner_depth + 1
+ for q in node.traverse(p.pre) do
+ debug_show_node_X(q, print_fn, limit)
+ end
+ prefix = k.. 'P.'
+ for q in node.traverse(p.post) do
+ debug_show_node_X(q, print_fn, limit)
+ end
+ prefix = k.. 'R.'
+ for q in node.traverse(p.replace) do
+ debug_show_node_X(q, print_fn, limit)
+ end
+ end
+ prefix=k
+ elseif pt == 'glue' then
+ s = base .. ' ' .. print_spec(p)
+ if get_attr_icflag(p)>icflag_table.KINSOKU
+ and get_attr_icflag(p)<icflag_table.KANJI_SKIP then
+ s = s .. ' (from JFM: priority ' .. get_attr_icflag(p)-icflag_table.FROM_JFM .. ')'
+ elseif get_attr_icflag(p)==icflag_table.KANJI_SKIP then
+ s = s .. ' (kanjiskip)'
+ elseif get_attr_icflag(p)==icflag_table.KANJI_SKIP_JFM then
+ s = s .. ' (kanjiskip, JFM specified)'
+ elseif get_attr_icflag(p)==icflag_table.XKANJI_SKIP then
+ s = s .. ' (xkanjiskip)'
+ elseif get_attr_icflag(p)==icflag_table.XKANJI_SKIP_JFM then
+ s = s .. ' (xkanjiskip, JFM specified)'
+ end
+ print_fn(s)
+ elseif pt == 'kern' then
+ s = base .. ' ' .. print_scaled(p.kern) .. 'pt'
+ if p.subtype==2 then
+ s = s .. ' (for accent)'
+ elseif get_attr_icflag(p)==icflag_table.IC_PROCESSED then
+ s = s .. ' (italic correction)'
+ elseif get_attr_icflag(p)==icflag_table.LINEEND then
+ s = s .. ' (end-of-line)'
+ -- elseif get_attr_icflag(p)==ITALIC then
+ -- s = s .. ' (italic correction)'
+ elseif get_attr_icflag(p)>icflag_table.KINSOKU
+ and get_attr_icflag(p)<icflag_table.KANJI_SKIP then
+ s = s .. ' (from JFM: priority ' .. get_attr_icflag(p)-icflag_table.FROM_JFM .. ')'
+ end
+ print_fn(s)
+ elseif pt == 'penalty' then
+ s = base .. ' ' .. tostring(p.penalty)
+ if get_attr_icflag(p)==icflag_table.KINSOKU then
+ s = s .. ' (for kinsoku)'
+ end
+ print_fn(s)
+ elseif pt == 'whatsit' then
+ s = base
+ if p.subtype==sid_user then
+ local t = tostring(p.user_id) .. ' (' ..
+ luatexbase.get_user_whatsit_name(p.user_id) .. ') '
+ if p.type ~= 110 then
+ s = s .. ' userid:' .. t .. p.value
+ print_fn(s)
+ else
+ s = s .. ' userid:' .. t .. '(node list)'
+ if p.user_id==userid_table.DIR then
+ s = s .. ' dir: ' .. tostring(node.has_attribute(p, attr_dir))
+ end
+ print_fn(s)
+ local bid = inner_depth
+ prefix, inner_depth =prefix.. '.', inner_depth + 1
+ if inner_depth < limit then
+ for q in node.traverse(p.value) do
+ debug_show_node_X(q, print_fn, limit)
+ end
+ end
+ prefix, inner_depth = k, bid
+ end
+ else
+ s = s .. (node.subtype(p.subtype) or '')
+ if p.subtype==1 then
+ s = s .. ' stream=' .. p.stream
+ print_fn(s)
+ for i=1,#p.data do
+ print_fn(s .. ' [' .. i .. '] = ' .. tostring(p.data[i].csname))
+ end
+ else
+ print_fn(s)
+ end
+ end
+ -------- math node --------
+ elseif pt=='noad' then
+ s = base ; print_fn(s)
+ if p.nucleus then
+ prefix = k .. 'N'; debug_show_node_X(p.nucleus, print_fn, limit);
+ end
+ if p.sup then
+ prefix = k .. '^'; debug_show_node_X(p.sup, print_fn, limit);
+ end
+ if p.sub then
+ prefix = k .. '_'; debug_show_node_X(p.sub, print_fn, limit);
+ end
+ prefix = k;
+ elseif pt=='math_char' then
+ s = base .. ' fam: ' .. p.fam .. ' , char = ' .. utfchar(p.char)
+ print_fn(s)
+ elseif pt=='sub_box' or pt=='sub_mlist' then
+ print_fn(base)
+ if p.head then
+ prefix = k .. '.';
+ for q in node.traverse(p.head) do
+ debug_show_node_X(q, print_fn)
+ end
+ end
+ else
+ print_fn(base)
+ end
+ p=node_next(p)
+end
+function luatexja.ext_show_node_list(head,depth,print_fn, lim)
+ prefix = depth
+ inner_depth = 0
+ if head then
+ while head do
+ debug_show_node_X(head, print_fn, lim or 1/0); head = node_next(head)
+ end
+ else
+ print_fn(prefix .. ' (null list)')
+ end
+end
+function luatexja.ext_show_node(head,depth,print_fn, lim)
+ prefix = depth
+ inner_depth = 0
+ if head then
+ debug_show_node_X(head, print_fn, lim or 1/0)
+ else
+ print_fn(prefix .. ' (null list)')
+ end
+end
+
+end
diff --git a/macros/luatex/generic/luatexja/src/luatexja.sty b/macros/luatex/generic/luatexja/src/luatexja.sty
new file mode 100644
index 0000000000..71f90ca327
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/luatexja.sty
@@ -0,0 +1,61 @@
+%
+% luatexja.sty
+%
+%! 外から読まれるので多少仰々しくなってます
+%% Avoid multiple loading.
+\csname\if11luatexjaLoaded\fi\endcsname
+\edef\x{%
+\catcode32=\the\catcode32%
+\catcode45=\the\catcode45%
+\catcode46=\the\catcode46%
+\catcode64=\the\catcode64%
+\catcode91=\the\catcode91%
+\catcode93=\the\catcode93%
+\endlinechar=\the\endlinechar
+\relax}
+\catcode32=10 %< >
+\catcode45=12 %<->
+\catcode46=12 %<.>
+\catcode64=11 %<@>
+\catcode91=12 %<[>
+\catcode93=12 %<]>
+\endlinechar=13 %
+%! あまり恩恵がないので \endlinechar=-1 はなし
+\edef\ltj@AtEnd{\x
+ \noexpand\let\noexpand\ltj@AtEnd\relax}
+\def\luatexjaLoaded{\endinput}
+\newif\ifltj@disablejfam
+
+%% Check if LaTeX is used.
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname RequirePackage\endcsname\relax %<*!LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iffalse\endcsname
+\else %<*LaTeX>
+ \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
+ \csname iftrue\endcsname
+ \NeedsTeXFormat{LaTeX2e}
+ \ProvidesPackage{luatexja}[2019/04/08 Japanese Typesetting with Lua(La)TeX]
+ \DeclareOption{disablejfam}{\ltj@disablejfamtrue}
+ \DeclareOption*{}
+ \ProcessOptions\relax
+\fi %</LaTeX>
+%%%% VERSION
+\def\LuaTeXjaversion{20190827.0}
+
+\directlua{require('ltj-unicode-ccfix.lua')}% catcode of ideographs
+
+%% Load all sub-packages.
+\ifltj@in@latex %<*LaTeX>
+ %% \RequirePackage{expl3} needed if the version of l3kernel is v6111
+ \RequirePackage{luatexja-core,luatexja-compat}
+\else %<*!LaTeX>
+ \input luatexja-core.sty %
+ \input luatexja-compat.sty %
+\fi %</LaTeX>
+
+\directlua{luatexja.base.start_time_measure('RUN')}
+%% all done
+\ltj@AtEnd
+\endinput
+%% EOF
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjcore.sty b/macros/luatex/generic/luatexja/src/patches/lltjcore.sty
new file mode 100644
index 0000000000..100a1c2b7e
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjcore.sty
@@ -0,0 +1,339 @@
+%
+% lltjcore.sty: derived from plcore.dtx in pLaTeX.
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjcore}[2018/06/15 Patch to LaTeX2e Kernel for LuaTeX-ja]
+\RequirePackage{etoolbox}
+
+\def\cleardoublepage{\clearpage\if@twoside
+ \ifodd\c@page
+ \ifnum\ltjgetparameter{direction}=3
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi
+ \else
+ \ifnum\ltjgetparameter{direction}=4
+ \hbox{}\thispagestyle{empty}\newpage
+ \if@twocolumn\hbox{}\newpage\fi
+ \fi
+ \fi\fi}
+\newif\iftombow \tombowfalse
+\newif\iftombowdate \tombowdatetrue
+\newdimen\@tombowwidth
+\setlength{\@tombowwidth}{.1\p@}
+\newbox\@TL\newbox\@Tl
+\newbox\@TC
+\newbox\@TR\newbox\@Tr
+\newbox\@BL\newbox\@Bl
+\newbox\@BC
+\newbox\@BR\newbox\@Br
+\newbox\@CL
+\newbox\@CR
+\font\@bannerfont=cmtt9
+\newtoks\@bannertoken
+\@bannertoken{}
+\def\maketombowbox{%
+ \setbox\@TL\hbox to\z@{\yoko\hss
+ \vrule width\dimexpr 10mm+\@tombowbleed\relax height\@tombowwidth depth\z@
+ \vrule height10mm width\@tombowwidth depth\z@
+ \iftombowdate
+ \raise4pt\hbox to\z@{\hskip5mm\@bannerfont\the\@bannertoken\hss}%
+ \fi}%
+ \setbox\@Tl\hbox to\z@{\yoko\hss
+ \vrule width10mm height\@tombowwidth depth\z@
+ \vrule height\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth depth\z@}%
+ \setbox\@TC\hbox{\yoko
+ \vrule width10mm height\@tombowwidth depth\z@
+ \vrule height10mm width\@tombowwidth depth\z@
+ \vrule width10mm height\@tombowwidth depth\z@}%
+ \setbox\@TR\hbox to\z@{\yoko
+ \vrule height10mm width\@tombowwidth depth\z@
+ \vrule width\dimexpr 10mm+\@tombowbleed\relax height\@tombowwidth depth\z@\hss}%
+ \setbox\@Tr\hbox to\z@{\yoko
+ \vrule height\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth depth\z@
+ \vrule width10mm height\@tombowwidth depth\z@\hss}%
+ \setbox\@BL\hbox to\z@{\yoko\hss
+ \vrule width\dimexpr 10mm+\@tombowbleed\relax depth\@tombowwidth height\z@
+ \vrule depth10mm width\@tombowwidth height\z@}%
+ \setbox\@Bl\hbox to\z@{\yoko\hss
+ \vrule width10mm depth\@tombowwidth height\z@
+ \vrule depth\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth height\z@}%
+ \setbox\@BC\hbox{\yoko
+ \vrule width10mm depth\@tombowwidth height\z@
+ \vrule depth10mm width\@tombowwidth height\z@
+ \vrule width10mm depth\@tombowwidth height\z@}%
+ \setbox\@BR\hbox to\z@{\yoko
+ \vrule depth10mm width\@tombowwidth height\z@
+ \vrule width\dimexpr 10mm+\@tombowbleed\relax depth\@tombowwidth height\z@\hss}%
+ \setbox\@Br\hbox to\z@{\yoko
+ \vrule depth\dimexpr 10mm+\@tombowbleed\relax width\@tombowwidth height\z@
+ \vrule width10mm depth\@tombowwidth height\z@\hss}%
+ \setbox\@CL\hbox to\z@{\yoko\hss
+ \vrule width10mm height.5\@tombowwidth depth.5\@tombowwidth
+ \vrule height10mm depth10mm width\@tombowwidth}%
+ \setbox\@CR\hbox to\z@{\yoko
+ \vrule height10mm depth10mm width\@tombowwidth
+ \vrule height.5\@tombowwidth depth.5\@tombowwidth width10mm\hss}%
+}
+\def\@outputtombow{%
+ \iftombow
+ \vbox to\z@{\kern-\dimexpr 10mm+\@tombowbleed\relax
+ \boxmaxdepth\maxdimen
+ \moveleft\@tombowbleed\vbox to\@@paperheight{%
+ \color@begingroup
+ \@tombowcolor
+ \hbox to\@@paperwidth{\hskip\@tombowbleed\relax
+ \copy\@TL\hfill\copy\@TC\hfill\copy\@TR\hskip\@tombowbleed}%
+ \kern-10mm
+ \hbox to\@@paperwidth{\copy\@Tl\hfill\copy\@Tr}%
+ \vfill
+ \hbox to\@@paperwidth{\copy\@CL\hfill\copy\@CR}%
+ \vfill
+ \hbox to\@@paperwidth{\copy\@Bl\hfill\copy\@Br}%
+ \kern-10mm
+ \hbox to\@@paperwidth{\hskip\@tombowbleed\relax
+ \copy\@BL\hfill\copy\@BC\hfill\copy\@BR\hskip\@tombowbleed}%
+ \color@endgroup
+ }\vss
+ }%
+ \fi
+}
+\def\@tombowcolor{\normalcolor}
+\def\@tombowbleed{3mm}
+\def\@tombowreset@@paper{%
+ \@@topmargin\topmargin
+ \iftombow
+ \@@paperwidth\paperwidth
+ \advance\@@paperwidth 2\dimexpr\@tombowbleed\relax
+ \@@paperheight\paperheight\advance\@@paperheight 10mm\relax
+ \advance\@@paperheight 2\dimexpr\@tombowbleed\relax
+ \advance\@@topmargin 1in\relax \advance\@themargin 1in\relax
+ \fi
+}
+\newdimen\@@paperheight
+\newdimen\@@paperwidth
+\newdimen\@@topmargin
+\def\@outputpage{%
+\begingroup % the \endgroup is put in by \aftergroup
+ \ifnum\ltjgetparameter{direction}=4\else
+ \dimen\z@\textwidth \textwidth\textheight \textheight\dimen\z@
+ \fi
+ \let \protect \noexpand
+ \language\document@default@language %LaTeX2e 2017/05/01
+ \@resetactivechars
+ \global\let\@@if@newlist\if@newlist
+ \global\@newlistfalse
+ \@parboxrestore
+ \shipout\vbox{\yoko
+ \set@typeset@protect
+ \aftergroup\endgroup
+ \aftergroup\set@typeset@protect
+ \if@specialpage
+ \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
+ \fi
+ \if@twoside
+ \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
+ \ifnum\ltjgetparameter{direction}=3 \let\@themargin\evensidemargin
+ \else\let\@themargin\oddsidemargin\fi
+ \else \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot
+ \ifnum\ltjgetparameter{direction}=3 \let\@themargin\oddsidemargin
+ \else\let\@themargin\evensidemargin\fi
+ \fi\fi
+ \@tombowreset@@paper
+ \reset@font
+ \normalsize
+ \normalsfcodes
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@
+ \@begindvi
+ \@outputtombow
+ \vskip \@@topmargin
+ \moveright\@themargin\vbox{%
+ \setbox\@tempboxa \vbox to\headheight{%
+ \vfil
+ \color@hbox
+ \normalcolor
+ \hb@xt@\textwidth{\@thehead}%
+ \color@endbox
+ }% %% 22 Feb 87
+ \dp\@tempboxa \z@
+ \box\@tempboxa
+ \vskip \headsep
+ \box\@outputbox
+ \baselineskip \footskip
+ \color@hbox
+ \normalcolor
+ \hb@xt@\textwidth{\@thefoot}%
+ \color@endbox
+ }%
+ }%
+ \global\let\if@newlist\@@if@newlist
+ \global \@colht \textheight
+ \stepcounter{page}%
+ \let\firstmark\botmark
+}
+
+%%% Remove extra xkanjiskip
+\renewcommand\@makefnmark{%
+ \unless\ifnum\ltjgetparameter{direction}=3
+ \hbox{}\hbox{\@textsuperscript{\normalfont\@thefnmark}}\hbox{}%
+ \else\hbox{\yoko \@textsuperscript{\normalfont\@thefnmark}}\fi}
+\begingroup
+\@ifpackageloaded{hyperref}
+ {\def\ltj@setrefprefix{real}}
+ {\def\ltj@setrefprefix{}}
+\expandafter\gdef\csname \ltj@setrefprefix @setref\endcsname#1#2#3{%
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{Reference `#3' on page \thepage \space
+ undefined}%
+ \else
+ \expandafter#2#1\protect\@setref@{}% change \null to \protect\@setref@{}
+ \fi}
+\gdef\@setref@{\ifhmode\spacefactor\@m\fi}
+\endgroup
+\if@compatibility\else
+\def\verb{\relax\ifmmode\hbox\else\leavevmode\vadjust{}\fi
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \language\l@nohyphenation
+ \@ifstar\@sverb\@verb}
+\fi
+\gdef\@stopfield{%
+ \inhibitglue\@tempskipa\lastskip\unskip
+ \hskip\@tempskipa\color@endgroup\egroup}
+\pretocmd{\footnote}{\inhibitglue}{}{}
+\pretocmd{\footnotemark}{\inhibitglue}{}{}
+\patchcmd{\@footnotemark}{\@makefnmark}{%
+ \unless\ifnum\ltjgetparameter{direction}=3 \@makefnmark%
+ \else\hbox to\z@{\hskip-.25\zw\raise.9\zh\@makefnmark\hss}\fi%
+}{}{}
+\let\@parboxto\@empty
+\long\def\@iiiparbox#1#2[#3]#4#5{%
+ \leavevmode
+ \@pboxswfalse
+ \setlength\@tempdima{#4}%
+ \@begin@tempboxa\vbox{\hsize\@tempdima\@parboxrestore#5\@@par}%
+ \ifx\relax#2\else
+ \setlength\@tempdimb{#2}%
+ \edef\@parboxto{to\the\@tempdimb}%
+ \fi
+ \if#1b\vbox
+ \else\if #1t\vtop
+ \else\ifmmode\vcenter
+ \else\@pboxswtrue\null$\vcenter% !!!
+ \fi\fi\fi
+ \@parboxto{\let\hss\vss\let\unhbox\unvbox
+ \csname bm@#3\endcsname}%
+ \if@pboxsw \m@th$\null\fi% !!!
+ \@end@tempboxa}
+\def\underline#1{%
+ \relax
+ \ifmmode\@@underline{#1}%
+ \else \leavevmode\null$\@@underline{\hbox{#1}}\m@th$\null\relax\fi}
+
+%%% AtBeginDvi
+\def \AtBeginDvi #1{%
+ \global \setbox \@begindvibox
+ \vbox{\yoko\unvbox \@begindvibox #1}%
+}
+
+\newif\iffnfixbottom
+\newif\ifltj@ftn@unvboxed
+%%% @makecol
+\gdef \@makecol {%
+ \ifvoid\footins
+ \ltj@ftn@unvboxedfalse
+ \setbox\@outputbox \box\@cclv
+ \else
+ \ltj@ftn@unvboxedtrue
+ \setbox\@outputbox \vbox {%
+ \boxmaxdepth \@maxdepth
+ \unvbox \@cclv
+ \iffnfixbottom\vskip\z@ \@plus.0001fil\fi
+ \vskip \skip\footins
+ \color@begingroup
+ \normalcolor
+ \footnoterule
+ \unvbox \footins
+ \color@endgroup
+ }%
+ \fi
+ \let\@elt\relax
+ \xdef\@freelist{\@freelist\@midlist}%
+ \global \let \@midlist \@empty
+ \@combinefloats
+ \ifvbox\@kludgeins
+ \@makespecialcolbox
+ \else
+ \setbox\@outputbox \vbox to\@colht {%
+ \@texttop
+ \dimen@ \dp\@outputbox
+ \unvbox \@outputbox
+ \ifnum\ltjgetparameter{direction}=4\else\vbox{\hskip\z@}\fi %%% LuaTeX-ja
+ \vskip -\dimen@
+ \ifltj@ftn@unvboxed\iffnfixbottom\else\@textbottom\fi\else\@textbottom\fi
+ }%
+ \fi
+ \global \maxdepth \@maxdepth
+}
+\let\ltj@orig@makecol=\@makecol
+
+\patchcmd\@makespecialcolbox{\@textbottom}{\ifltj@ftn@unvboxed\iffnfixbottom\else\@textbottom\fi\else\@textbottom\fi}{}{}
+
+\def\@gnewline #1{%
+ \ifvmode
+ \@nolnerr
+ \else
+ \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break \null
+ % \null は \break の効果が行頭禁則文字で打ち消されないために必要
+ \ignorespaces
+\fi}
+
+
+%%%%%% tabular (platex/#43) \@tabclassz
+\def\ltj@sharp{\relax\pltx@next@inhibitglue\ltjfakeboxbdd\ignorespaces\@sharp\unskip\ltjfakeboxbdd}
+\def\@tabclassz{%
+ \ifcase\@lastchclass
+ \@acolampacol
+ \or
+ \@ampacol
+ \or
+ \or
+ \or
+ \@addamp
+ \or
+ \@acolampacol
+ \or
+ \@firstampfalse\@acol
+ \fi
+ \edef\@preamble{%
+ \@preamble{%
+ \ifcase\@chnum
+ \hfil\hskip1sp\ltj@sharp\hfil
+ \or
+ \hskip1sp\ltj@sharp\hfil
+ \or
+ \hfil\hskip1sp\ltj@sharp
+ \fi}}}
+\patchcmd\@classv{%
+ \ignorespaces\@sharp
+}{%
+ \everypar\expandafter{\the\everypar\ltjfakeboxbdd}\ignorespaces\@sharp\unskip
+}{}{}
+\patchcmd{\@tabular}{\leavevmode}{\leavevmode\null}{}{}
+\apptocmd{\endtabular}{\null}{}{}
+\expandafter \let \csname endtabular*\endcsname = \endtabular
+
+%%%%%% tabbing (platex/#53)
+\patchcmd\@startline{\strut}{\strut\inhibitglue}{}{}
+\def\ltj@unhbox@curfield{\ltjfakeboxbdd\unhbox\@curfield\ltjfakeboxbdd}
+%\patchcmd\@contfield{\unhbox\@curfield}{\ltj@unhbox@curfield}{}{}
+\patchcmd\@addfield{\unhbox\@curfield}{\ltj@unhbox@curfield}{}{}
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
new file mode 100644
index 0000000000..52649e8426
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjdefs.sty
@@ -0,0 +1,230 @@
+%
+% lltjdefs.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjdefs}[2019/08/21 Default font settings of LuaTeX-ja]
+
+\ifdefined\ltj@stdmcfont\else\def\ltj@stdmcfont{IPAExMincho}\fi
+\ifdefined\ltj@stdgtfont\else\def\ltj@stdgtfont{IPAExGothic}\fi
+\ifdefined\ltj@stdyokojfm\else\def\ltj@stdyokojfm{ujis}\fi
+\ifdefined\ltj@stdtatejfm\else\def\ltj@stdtatejfm{ujisv}\fi
+\InputIfFileExists{luatexja.cfg}{%
+ \typeout{*************************^^J%
+ * Loading luatexja.cfg.^^J%
+ *************************}%
+}{}
+
+\DeclareKanjiEncodingDefaults{}{}
+\DeclareErrorKanjiFont{JY3}{mc}{m}{n}{10}
+\kanjifamily{mc}
+\kanjiseries{m}
+\kanjishape{n}
+\fontsize{10}{10}
+\DeclareYokoKanjiEncoding{JY3}{}{}
+\DeclareKanjiSubstitution{JY3}{mc}{m}{n}
+\DeclareTateKanjiEncoding{JT3}{}{}
+\DeclareKanjiSubstitution{JT3}{mc}{m}{n}
+
+\newcommand\mcdefault{mc}
+\newcommand\gtdefault{gt}
+\newcommand\jttdefault{\mcdefault}
+\newcommand\kanjiencodingdefault{JY3}
+\newcommand\kanjifamilydefault{\mcdefault}
+\newcommand\kanjiseriesdefault{\mddefault}
+\newcommand\kanjishapedefault{\updefault}
+
+\DeclareKanjiFamily{JY3}{mc}{}
+\DeclareFontShape{JY3}{mc}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi] \ltj@stdmcfont:jfm=\ltj@stdyokojfm}{}
+\DeclareKanjiFamily{JY3}{gt}{}
+\DeclareFontShape{JY3}{gt}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi] \ltj@stdgtfont:jfm=\ltj@stdyokojfm}{}
+\DeclareFontShape{JY3}{mc}{bx}{n}{<-> ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{gt}{bx}{n}{<-> ssub*gt/m/n}{}
+\DeclareFontShape{JY3}{mc}{b}{n}{<-> ssub*mc/bx/n}{}
+\DeclareFontShape{JY3}{gt}{b}{n}{<-> ssub*gt/bx/n}{}
+
+\DeclareKanjiFamily{JT3}{mc}{}
+\DeclareFontShape{JT3}{mc}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi] \ltj@stdmcfont:jfm=\ltj@stdtatejfm}{}
+\DeclareKanjiFamily{JT3}{gt}{}
+\DeclareFontShape{JT3}{gt}{m}{n}{<-> s*[\ifdefined\Cjascale\Cjascale\else 0.962216\fi] \ltj@stdgtfont:jfm=\ltj@stdtatejfm}{}
+\DeclareFontShape{JT3}{mc}{bx}{n}{<-> ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{gt}{bx}{n}{<-> ssub*gt/m/n}{}
+\DeclareFontShape{JT3}{mc}{b}{n}{<-> ssub*mc/bx/n}{}
+\DeclareFontShape{JT3}{gt}{b}{n}{<-> ssub*gt/bx/n}{}
+\KanjiEncodingPair{JY3}{JT3}
+
+\DeclareRelationFont{JY3}{gt}{m}{}{TU}{lmr}{bx}{}
+\DeclareRelationFont{JY3}{mc}{m}{}{TU}{lmr}{m}{}
+\DeclareRelationFont{JY3}{mc}{bx}{}{TU}{lmr}{bx}{}
+\DeclareRelationFont{JY3}{mc}{b}{}{TU}{lmr}{b}{}
+\DeclareRelationFont{JT3}{gt}{m}{}{TU}{lmr}{bx}{}
+\DeclareRelationFont{JT3}{mc}{m}{}{TU}{lmr}{m}{}
+\DeclareRelationFont{JT3}{mc}{bx}{}{TU}{lmr}{bx}{}
+\DeclareRelationFont{JT3}{mc}{b}{}{TU}{lmr}{b}{}
+
+\kanjiencoding{JY3}\selectfont\adjustbaseline
+
+\DeclareTextFontCommand{\textmc}{\mcfamily}
+\DeclareTextFontCommand{\textgt}{\gtfamily}
+\DeclareOldFontCommand{\mc}{\normalfont\mcfamily}{}
+\DeclareOldFontCommand{\gt}{\normalfont\gtfamily}{}
+
+\unless\ifltj@disablejfam
+ \DeclareSymbolFont{mincho}{JY3}{mc}{m}{n}
+ \jfam\symmincho
+ \SetSymbolFont{mincho}{bold}{JY3}{gt}{m}{n}
+ \DeclareSymbolFontAlphabet{\mathmc}{mincho}
+ \DeclareMathAlphabet{\mathgt}{JY3}{gt}{m}{n}
+\fi
+
+\newif\if@ltj@match@family
+\@ltj@match@familyfalse
+\def\verbatim@font{\normalfont\ttfamily\kanjifamily\jttdefault\selectfont}
+\DeclareRobustCommand\rmfamily
+ {\not@math@alphabet\rmfamily\mathrm
+ \romanfamily\rmdefault
+ \if@ltj@match@family\kanjifamily\mcdefault\fi\selectfont}
+\DeclareRobustCommand\sffamily
+ {\not@math@alphabet\sffamily\mathsf
+ \romanfamily\sfdefault
+ \if@ltj@match@family\kanjifamily\gtdefault\fi\selectfont}
+\DeclareRobustCommand\ttfamily
+ {\not@math@alphabet\ttfamily\mathtt
+ \romanfamily\ttdefault
+ \if@ltj@match@family\kanjifamily\jttdefault\fi\selectfont}
+%%% \eminnershape
+\DeclareRobustCommand\em
+ {\@nomath\em \ifdim \fontdimen\@ne\font >\z@
+ \eminnershape \else \gtfamily \itshape \fi}
+\def\eminnershape{\mcfamily \upshape}
+
+\ltjdefcharrange{1}{"80-"36F, "1E00-"1EFF}
+\ltjdefcharrange{2}{"370-"4FF, "1F00-"1FFF}
+\ltjdefcharrange{3}{%
+ "2000-"243F, "2500-"27BF, "2900-"29FF, "2B00-"2BFF}
+\ltjdefcharrange{4}{%
+ "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
+ "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A95F, "A980-"ABFF, "E000-"F8FF,
+ "FB00-"FE0F, "FE20-"FE2F, "FE70-"FEFF, "10000-"1AFFF, "1B170-"1F0FF,
+ "1F300-"1FFFF
+} % non-Japanese
+\ltjdefcharrange{5}{"D800-"DFFF, "E0000-"E00FF, "E01F0-"10FFFF}
+\ltjdefcharrange{6}{%
+ "2460-"24FF, "2E80-"2EFF, "3000-"30FF, "3190-"319F, "31F0-"4DBF,
+ "4E00-"9FFF, "F900-"FAFF, "FE10-"FE1F, "FE30-"FE6F, "FF00-"FFEF,
+ "1B000-"1B16F, "1F100-"1F2FF, "20000-"2FFFF, "E0100-"E01EF
+}
+\ltjdefcharrange{7}{%
+ "1100-"11FF, "2F00-"2FFF, "3100-"318F, "31A0-"31EF, "A000-"A4CF,
+ "A960-"A97F, "AC00-"D7FF
+}
+\ltjdefcharrange{8}{"A7, "A8, "B0, "B1, "B4, "B6, "D7, "F7}
+\ltjsetparameter{jacharrange={-1, +2, +3, -4, -5, +6, +7, -8}}
+
+\directlua{for x=128,255 do luatexja.math.is_math_letters[x] = true end}
+\protected\def\<{\ifvmode\leavevmode\fi\inhibitglue}
+
+\directlua{luatexja.jfont.register_vert_replace{
+ [',']='、', ['.']='。', ['“']=0x301D, ['”']=0x301F,
+}}
+
+% END OF FILE
+\endinput
+
+======== comment ========
+
+MIDDLE
+
+\ltjdefcharrange{1}{"80-"36F, "1E00-"1EFF}
+ % 2 "80-"FF num = 471/128 name = Latin-1 Supplement
+ % 3 "100-"17F num = 484/128 name = Latin Extended-A
+ % 4 "180-"24F num = 87/208 name = Latin Extended-B
+ % 5 "250-"2AF num = 154/96 name = IPA Extensions
+ % 6 "2B0-"2FF num = 42/80 name = Spacing Modifier Letters
+ % 7 "300-"36F num = 98/112 name = Combining Diacritical Marks
+ % 64 "1E00-"1EFF num = 16/256 name = Latin Extended Additional
+
+\ltjdefcharrange{2}{"370-"4FF, "1F00-"1FFF}
+ % Greek and Coptic, Cyrillic, Greek Extended
+
+\ltjdefcharrange{3}{%
+ "2000-"243F, "2500-"27BF, "2900-"29FF, "2B00-"2BFF}
+ % 66 "2000-"206F num = 140/112 name = General Punctuation
+ % 67 "2070-"209F num = 68/48 name = Superscripts and Subscripts
+ % 68 "20A0-"20CF num = 5/48 name = Currency Symbols
+ % 69 "20D0-"20FF num = 2/48 name = Combining Diacritical Marks for Symbols
+ % 70 "2100-"214F num = 46/80 name = Letterlike Symbols
+ % 71 "2150-"218F num = 90/64 name = Number Forms
+ % 72 "2190-"21FF num = 39/112 name = Arrows
+ % 73 "2200-"22FF num = 210/256 name = Mathematical Operators
+ % 74 "2300-"23FF num = 69/256 name = Miscellaneous Technical
+ % 75 "2400-"243F num = 1/64 name = Control Pictures
+ % 78 "2500-"257F num = 241 name = Box Drawing
+ % 79 "2580-"259F num = 17 name = Block Elements
+ % 80 "25A0-"25FF num = 70 name = Geometric Shapes
+ % 81 "2600-"26FF num = 49 name = Miscellaneous Symbols
+ % 82 "2700-"27BF num = 23 name = Dingbats
+ % 86 "2900-"297F num = 2 name = Supplemental Arrows-B
+ % 87 "2980-"29FF num = 4 name = Miscellaneous Mathematical Symbols-B
+ % 89 "2B00-"2BFF num = 3 name = Miscellaneous Symbols and Arrows
+
+\ltjdefcharrange{4}{%
+ "500-"10FF, "1200-"1DFF, "2440-"245F, "27C0-"28FF, "2A00-"2AFF,
+ "2C00-"2E7F, "4DC0-"4DFF, "A4D0-"A95F, "A980-"ABFF, "E000-"F8FF,
+ "FB00-"FE0F, "FE20-"FE2F, "FE70-"FEFF, "10000-"1AFFF, "1B170-"1F0FF,
+ "1F300-"1FFFF
+} % non-Japanese
+
+\ltjdefcharrange{5}{"D800-"DFFF, "E0000-"E00FF, "E01F0-"10FFFF}
+ % Surrogates, Tags
+ % 208 "F0000-"FFFFF num = 0/65536 name = Supplementary Private Use Area-A
+ % 209 "100000-"10FFFF num = 0/65536 name = Supplementary Private Use Area-B
+
+POSITIVE
+
+% Japanese
+\ltjdefcharrange{6}{%
+ "2460-"24FF, "2E80-"2EFF, "3000-"30FF, "3190-"319F, "31F0-"4DBF,
+ "4E00-"9FFF, "F900-"FAFF, "FE10-"FE1F, "FE30-"FE6F, "FF00-"FFEF,
+ "1B000-"1B16F, "1F100-"1F2FF, "20000-"2FFFF, "E0100-"E01EF
+}
+% 77 "2460-"24FF num = 150/160 name = Enclosed Alphanumerics
+% 98 "2E80-"2EFF num = 21 name = CJK Radicals Supplement
+% 101 "3000-"303F num = 144 name = CJK Symbols and Punctuation
+% 102 "3040-"309F num = 1074 name = Hiragana
+% 103 "30A0-"30FF num = 985 name = Katakana
+% 106 "3190-"319F num = 16/16 name = Kanbun
+% 109 "31F0-"31FF num = 128 name = Katakana Phonetic Extensions
+% 110 "3200-"32FF num = 143 name = Enclosed CJK Letters and Months
+% 111 "3300-"33FF num = 255 name = CJK Compatibility
+% 112 "3400-"4DBF num = 203 name = CJK Unified Ideographs Extension A
+% 114 "4E00-"9FFF num = 14087 name = CJK Unified Ideographs
+% 143 "F900-"FAFF num = 110/512 name = CJK Compatibility Ideographs
+% 147 "FE10-"FE1F num = 0/16 name = Vertical Forms
+% 149 "FE30-"FE4F num = 8/32 name = CJK Compatibility Forms
+% 150 "FE50-"FE6F num = 0/32 name = Small Form Variants
+% "FF00-"FFEF name = Halfwidth and Fullwidth Forms
+% "1B000-"1B0FF name = Kana Supplement
+% "1B100-"1B12F name = Kana Extended-A
+% "1B130-"1B16F name = Small Kana Extension
+% "1F100-"1F1FF name = Enclosed Alphanumeric Supplement
+% "1F200-"1F2FF name = Enclosed Ideographic Supplement
+% SIP
+% "E0000-"E01EF name = Variation Selectors Supplement
+
+\ltjdefcharrange{7}{%
+ "1100-"11FF, "2F00-"2FFF, "3100-"318F, "31A0-"31EF, "A000-"A4CF,
+ "A960-"A97F, "AC00-"D7FF
+}
+ % 35 "1100-"11FF num = 1 name = Hangul Jamo
+ % 99 "2F00-"2FDF num = 0/224 name = Kangxi Radicals
+ % 100 "2FF0-"2FFF num = 0/16 name = Ideographic Description Characters
+ % 104 "3100-"312F num = 0/48 name = Bopomofo
+ % 105 "3130-"318F num = 0/96 name = Hangul Compatibility Jamo
+ % 107 "31A0-"31BF num = 0/32 name = Bopomofo Extended
+ % 108 "31C0-"31EF num = 0/48 name = CJK Strokes
+ % 115 "A000-"A48F num = 0/1168 name = Yi Syllables
+ % 116 "A490-"A4CF num = 0/64 name = Yi Radicals
+ % "A960-"A97F name = Hangul Jamo Extended-A
+ % 137 "AC00-"D7AF num = 0/11184 name = Hangul Syllables
+ % 138 "D7B0-"D7FF num = 0/80 name = Hangul Jamo Extended-B
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty
new file mode 100644
index 0000000000..8068d3326b
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty
@@ -0,0 +1,874 @@
+%
+% lltjfont.sty: derived from plfonts.dtx in pLaTeX.
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjfont}[2019/08/21 Patch to NFSS2 for LuaTeX-ja]
+
+\def\ltj@chardef@text@cmd#1{%
+ \let\@ifdefinable\@@ifdefinable%
+ \edef\ltj@chardef@text@cmd@name{\expandafter\@gobble\string#1}%
+ \afterassignment\ltj@chardef@text@cmd@\ltj@tempcnta
+}
+\def\ltj@chardef@text@cmd@{%
+ \ifnum\ltj@tempcnta>"7F
+ \expandafter\edef\csname \ltj@chardef@text@cmd@name\endcsname{%
+ \noexpand\ltjalchar\the\ltj@tempcnta\space
+ }%
+ \else
+ \expandafter\chardef\csname \ltj@chardef@text@cmd@name\endcsname\ltj@tempcnta
+ \fi
+}
+\def\DeclareTextSymbol#1#2#3{%
+ \@dec@text@cmd\ltj@chardef@text@cmd#1{#2}#3\relax
+}
+
+\ifdefined\UnicodeEncodingName
+ \let\ltj@temp@DeclareTextComposite=\DeclareTextComposite
+ \def\DeclareTextComposite#1#2#3#4{}%
+ \input{tuenc.def}
+ \let\DeclareTextComposite=\ltj@temp@DeclareTextComposite
+ \expandafter\patchcmd\csname TU\string\textasteriskcentered\endcsname{\char}{\ltjalchar}{}{}
+\fi
+
+
+\let\k@encoding\@empty
+\let\ck@encoding\@empty
+% LuaTeX-ja uses JY3 and JT3 encodings.
+\def\cy@encoding{JY3}\def\ct@encoding{JT3}
+
+\let\k@family\@empty
+\let\k@series\@empty
+\let\k@shape\@empty
+\def\curr@kfontshape{\k@encoding/\k@family/\k@series/\k@shape}
+\def\rel@fontshape{\f@encoding/\f@family/\f@series/\f@shape}
+\ifdefined\Cht\else\newdimen\Cht\fi
+\ifdefined\cht\else\newdimen\cht\fi
+\ifdefined\Cdp\else\newdimen\Cdp\fi
+\ifdefined\cdp\else\newdimen\cdp\fi
+\ifdefined\Cwd\else\newdimen\Cwd\fi
+\ifdefined\cwd\else\newdimen\cwd\fi
+\ifdefined\Cvs\else\newdimen\Cvs\fi
+\ifdefined\cvs\else\newdimen\cvs\fi
+\ifdefined\Chs\else\newdimen\Chs\fi
+\ifdefined\chs\else\newdimen\chs\fi
+\ifdefined\cHT\else\newdimen\cHT\fi
+%\let\afont\font
+
+\let\ystrutbox\strutbox
+\newbox\dstrutbox
+\newbox\tstrutbox
+\newbox\zstrutbox
+\def\strutbox{%
+ \ifnum\ltjgetparameter{direction}=1 \dstrutbox % dtou
+ \else\ifnum\ltjgetparameter{direction}=4 \ystrutbox % yoko
+ \else\tstrutbox % tate and utod
+ \fi\fi
+}
+\def\strut{\relax
+ \ifnum\ltjgetparameter{direction}=1 % dtou
+ \ifmmode\copy\dstrutbox\else\unhcopy\dstrutbox\fi
+ \else\ifnum\ltjgetparameter{direction}=4 % yoko
+ \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi
+ \else % tate and utod
+ \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi
+ \fi\fi
+}
+
+\def\ystrut{\relax\hbox{\ltj@@orig@yoko
+ \ifmmode\copy\ystrutbox\else\unhcopy\ystrutbox\fi}}
+\def\tstrut{\relax\hbox{\ltj@@orig@tate
+ \ifmmode\copy\tstrutbox\else\unhcopy\tstrutbox\fi}}
+\def\dstrut{\relax\hbox{\ltj@@orig@dtou
+ \ifmmode\copy\dstrutbox\else\unhcopy\dstrutbox\fi}}
+\def\zstrut{\relax\hbox{\ltj@@orig@utod
+ \ifmmode\copy\zstrutbox\else\unhcopy\zstrutbox\fi}}
+
+{%
+ \def\cdp@elt#1#2#3#4{%
+ \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}}%
+ \cdp@list%
+}
+
+\def\DeclareFontEncoding{%
+ \begingroup
+ \nfss@catcodes
+ \expandafter\endgroup
+ \DeclareFontEncoding@}
+\def\DeclareFontEncoding@#1#2#3{%
+ \expandafter
+ \ifx\csname T@#1\endcsname\relax
+ \def\cdp@elt{\noexpand\cdp@elt}%
+ \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
+ {\default@family}{\default@series}%
+ {\default@shape}}%
+ \expandafter\let\csname#1-cmd\endcsname\@changed@cmd
+ \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}%
+ \else
+ \@font@info{Redeclaring font encoding #1}%
+ \fi
+ \global\@namedef{T@#1}{#2}%
+ \global\@namedef{M@#1}{\default@M#3}%
+ \xdef\LastDeclaredEncoding{#1}%
+ }
+\def\DeclareKanjiEncoding#1{%
+ \@latex@warning{%
+ The \string\DeclareKanjiEncoding\space is obsoleted command. Please use
+ \MessageBreak
+ the \string\DeclareTateKanjiEncoding\space for `Tate-kumi' encoding, and
+ \MessageBreak
+ the \string\DeclareYokoKanjiEncoding\space for `Yoko-kumi' encoding.
+ \MessageBreak
+ I treat the `#1' encoding as `Yoko-kumi'.}
+ \DeclareYokoKanjiEncoding{#1}%
+}
+\def\DeclareYokoKanjiEncoding{%
+ \begingroup
+ \nfss@catcodes
+ \expandafter\endgroup
+ \DeclareYokoKanjiEncoding@}
+\def\DeclareYokoKanjiEncoding@#1#2#3{%
+ \expandafter\ifx\csname T@#1\endcsname\relax
+ \def\cdp@elt{\noexpand\cdp@elt}%
+ \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
+ {\default@k@family}{\default@k@series}%
+ {\default@k@shape}}%
+ \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
+ \directlua{luatexja.jfont.add_kyenc_list('\luatexluaescapestring{#1}')}%
+ \else
+ \@font@info{Redeclaring KANJI (yoko) font encoding #1}%
+ \fi
+ \global\@namedef{T@#1}{#2}%
+ \global\@namedef{M@#1}{\default@KM#3}%
+ }
+\def\DeclareTateKanjiEncoding{%
+ \begingroup
+ \nfss@catcodes
+ \expandafter\endgroup
+ \DeclareTateKanjiEncoding@}
+\def\DeclareTateKanjiEncoding@#1#2#3{%
+ \expandafter\ifx\csname T@#1\endcsname\relax
+ \def\cdp@elt{\noexpand\cdp@elt}%
+ \xdef\cdp@list{\cdp@list\cdp@elt{#1}%
+ {\default@k@family}{\default@k@series}%
+ {\default@k@shape}}%
+ \expandafter\let\csname#1-cmd\endcsname\@changed@kcmd
+ \directlua{luatexja.jfont.add_ktenc_list('\luatexluaescapestring{#1}')}%
+ \else
+ \@font@info{Redeclaring KANJI (tate) font encoding #1}%
+ \fi
+ \global\@namedef{T@#1}{#2}%
+ \global\@namedef{M@#1}{\default@KM#3}%
+ }
+\@onlypreamble\DeclareKanjiEncoding
+\@onlypreamble\DeclareYokoKanjiEncoding
+\@onlypreamble\DeclareYokoKanjiEncoding@
+\@onlypreamble\DeclareTateKanjiEncoding
+\@onlypreamble\DeclareTateKanjiEncoding@
+\def\DeclareKanjiEncodingDefaults#1#2{%
+ \ifx\relax#1\else
+ \ifx\default@KT\@empty\else
+ \@font@info{Overwriting KANJI encoding scheme text defaults}%
+ \fi
+ \gdef\default@KT{#1}%
+ \fi
+ \ifx\relax#2\else
+ \ifx\default@KM\@empty\else
+ \@font@info{Overwriting KANJI encoding scheme math defaults}%
+ \fi
+ \gdef\default@KM{#2}%
+ \fi}
+\let\default@KT\@empty
+\let\default@KM\@empty
+\@onlypreamble\DeclareKanjiEncodingDefaults
+\def\DeclareFontFamily#1#2#3{%
+ \@ifundefined{T@#1}%
+ {\@latex@error{Encoding scheme `#1' unknown}\@eha}%
+ {\def\reserved@a{#3}%
+ \global
+ \expandafter\let\csname #1+#2\expandafter\endcsname
+ \ifx \reserved@a\@empty
+ \@empty
+ \else \reserved@a
+ \fi
+ \directlua{luatexja.jfont.add_ffam('\luatexluaescapestring{#2}')}%
+ }%
+}
+\def\DeclareKanjiFamily#1#2#3{%
+ \@ifundefined{T@#1}%
+ {\@latex@error{KANJI Encoding scheme `#1' unknown}\@eha}%
+ {\def\reserved@a{#3}%
+ \global
+ \expandafter\let\csname #1+#2\expandafter\endcsname
+ \ifx \reserved@a\@empty
+ \@empty
+ \else \reserved@a
+ \fi
+ \directlua{luatexja.jfont.add_kfam('\luatexluaescapestring{#2}')}%
+ }%
+}
+\def\DeclareKanjiSubstitution#1#2#3#4{%
+ \expandafter\ifx\csname T@#1\endcsname\relax
+ \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
+ \else
+ \begingroup
+ \def\reserved@a{#1}%
+ \toks@{}%
+ \def\cdp@elt##1##2##3##4{%
+ \def\reserved@b{##1}%
+ \ifx\reserved@a\reserved@b
+ \addto@hook\toks@{\cdp@elt{#1}{#2}{#3}{#4}}%
+ \else
+ \addto@hook\toks@{\cdp@elt{##1}{##2}{##3}{##4}}%
+ \fi}%
+ \cdp@list
+ \xdef\cdp@list{\the\toks@}%
+ \endgroup
+ \global\@namedef{D@#1}{\def\default@family{#2}%
+ \def\default@series{#3}%
+ \def\default@shape{#4}}%
+ \fi}
+\@onlypreamble\DeclareKanjiSubstitution
+\def\DeclareErrorKanjiFont#1#2#3#4#5{%
+ \xdef\error@kfontshape{%
+ \noexpand\expandafter\noexpand\split@name\noexpand\string
+ \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
+ \noexpand\@nil}%
+ \gdef\default@k@family{#2}%
+ \gdef\default@k@series{#3}%
+ \gdef\default@k@shape{#4}%
+ }
+\@onlypreamble\DeclareErrorKanjiFont
+
+\newif\ifltjselectfont@force@define
+\def\DeclareFixedFont#1#2#3#4#5#6{%
+ \begingroup
+ \math@fontsfalse
+ \every@math@size{}%
+ \fontsize{#6}\z@
+ \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@%
+ \ltjselectfont@force@definetrue
+ \usekanji{#2}{#3}{#4}{#5}%
+ \global\let#1\getjfont
+ \ltjselectfont@force@definefalse
+ \else
+ \directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{#2}')}\ifin@%
+ \ltjselectfont@force@definetrue
+ \usekanji{#2}{#3}{#4}{#5}%
+ \global\let#1\gettfont
+ \ltjselectfont@force@definefalse
+ \else
+ \useroman{#2}{#3}{#4}{#5}%
+ \global\expandafter\let\expandafter#1\the\font
+ \fi
+ \fi
+ \endgroup
+ }
+\def\DLMfontsw@standard#1#2#3{#1{#2{#3}}}
+\def\reDeclareMathAlphabet#1#2#3{%
+ \ifdefined#2
+ \@temptokena\expandafter{#2}%
+ \else
+ \@temptokena{#2}%
+ \fi
+ \ifdefined#3
+ \toks0\expandafter{#3}%
+ \else
+ \toks0{#3}%
+ \fi
+ \long\protected\edef#1{%
+ \noexpand\DLMfontsw@standard{\the\@temptokena}{\the\toks0}}%
+}
+\@onlypreamble\reDeclareMathAlphabet
+\def\all@shape{all}%
+\def\DeclareRelationFont#1#2#3#4#5#6#7#8{%
+ \def\rel@shape{#4}%
+ \ifx\rel@shape\@empty
+ \global
+ \expandafter\def\csname rel@#1/#2/#3/all\endcsname{%
+ \romanencoding{#5}\romanfamily{#6}%
+ \romanseries{#7}}%
+ \else
+ \global
+ \expandafter\def\csname rel@#1/#2/#3/#4\endcsname{%
+ \romanencoding{#5}\romanfamily{#6}%
+ \romanseries{#7}\romanshape{#8}}%
+ \fi
+}
+\def\SetRelationFont#1#2#3#4#5#6#7#8{%
+ \def\rel@shape{#4}%
+ \ifx\rel@shape\@empty
+ \expandafter\def\csname rel@#1/#2/#3/all\endcsname{%
+ \romanencoding{#5}\romanfamily{#6}%
+ \romanseries{#7}}%
+ \else
+ \expandafter\def\csname rel@#1/#2/#3/#4\endcsname{%
+ \romanencoding{#5}\romanfamily{#6}%
+ \romanseries{#7}\romanshape{#8}}%
+ \fi
+}
+\newif\if@knjcmd
+\def\userelfont{\@knjcmdtrue}
+
+
+\RequirePackage{everysel}
+\let\ltj@@EverySelectfont@Init=\@EverySelectfont@Init
+\expandafter\expandafter\expandafter\let
+\expandafter\expandafter\csname ltj@@orig@selectfont\endcsname\csname selectfont\space\endcsname
+\@EverySelectfont@Init
+%\let\ltj@@font@info\@font@info
+%\let\ltj@@font@warning\@font@warning
+\def\@EverySelectfont@Init{%
+ \expandafter\let\csname selectfont\space \endcsname \ltj@@orig@selectfont
+ \ltj@@EverySelectfont@Init
+}
+\def\ltj@selectfont@tate{%
+ \let\k@encoding\ct@encoding
+ \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
+ \pickup@tfont
+ \ifnum\ltjgetparameter{direction}=3 \font@name
+ \ltj@@does@alt@set{\curr@kfontshape}{%
+ % alt fonts の定義
+ \directlua{luatexja.jfont.output_alt_font_cmd('t', '\luatexluaescapestring{\curr@kfontshape}')}%
+ % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする
+ \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
+ }%
+ \fi}
+\def\ltj@selectfont@yoko{%
+ \let\k@encoding\cy@encoding
+ \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
+ \pickup@jfont
+ \unless\ifnum\ltjgetparameter{direction}=3 \font@name
+ \ltj@@does@alt@set{\curr@kfontshape}{%
+ % alt fonts の定義
+ \directlua{luatexja.jfont.output_alt_font_cmd('y', '\luatexluaescapestring{\curr@kfontshape}')}%
+ % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする
+ \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
+ }%
+ \fi}
+\def\ltj@selectfont@patch{%
+ \directlua{luatexja.base.start_time_measure('selectfont')}%
+ \let\tmp@error@fontshape\error@fontshape
+ \let\error@fontshape\error@kfontshape
+ \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
+ \let\cy@encoding\k@encoding
+ \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
+ \else
+ \directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
+ \let\ct@encoding\k@encoding
+ \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}%
+ \else
+ \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
+ \fi
+ \fi
+ \global\let\ltj@afont@name=\font@name
+ \ltj@selectfont@tate\ltj@selectfont@yoko
+%
+ \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item
+ \kenc@update
+ \global\let\font@name=\ltj@afont@name
+ \let\error@fontshape\tmp@error@fontshape
+ \if@knjcmd \@knjcmdfalse
+ \expandafter\ifx
+ \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\relax
+ \expandafter\ifx
+ \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\relax
+ \else
+ \csname rel@\k@encoding/\k@family/\k@series/all\endcsname\selectfont
+ % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり
+ \fi
+ \else
+ \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname\selectfont
+ % 警告: 再び \selectfont を呼んでいる.無限ループの可能性あり
+ \fi
+ \fi
+ \global\let\font@name=\ltj@afont@name
+ \directlua{luatexja.base.stop_time_measure('selectfont')}%
+}
+\EverySelectfont{\ltj@selectfont@patch}
+
+\bgroup
+ \def\ltj@@dir@patch#1#2#3{%
+ \global\csletcs{ltj@@orig@#1}{#1}%
+ \protected\expandafter\xdef\csname #1\endcsname{%
+ \csname ltj@@orig@#1\endcsname
+ \unexpanded{\ifnum#3<\z@\let\ltj@@protect\protect\set@typeset@protect}%
+ \unexpanded{\global\let\ltj@afont@name=\font@name}%
+ \expandonce{\csname ltj@selectfont@#2\endcsname}%
+ \unexpanded{\global\let\font@name=\ltj@afont@name}%
+ \unexpanded{\let\protect\ltj@@protect\fi}%
+ }%
+ }
+ \ltj@@dir@patch{yoko}{yoko}{\ltj@curjfnt}
+ \ltj@@dir@patch{tate}{tate}{\ltj@curtfnt}
+ \ltj@@dir@patch{utod}{yoko}{\ltj@curjfnt}
+ \ltj@@dir@patch{dtou}{yoko}{\ltj@curjfnt}
+\egroup
+
+\def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}}
+\def\set@fontsize#1#2#3{%
+ \@defaultunits\@tempdimb#2pt\relax\@nnil
+ \edef\f@size{\strip@pt\@tempdimb}%
+ \@defaultunits\@tempskipa#3pt\relax\@nnil
+ \edef\f@baselineskip{\the\@tempskipa}%
+ \edef\f@linespread{#1}%
+ \let\baselinestretch\f@linespread
+ \def\size@update{%
+ \baselineskip\f@baselineskip\relax
+ \baselineskip\f@linespread\baselineskip
+ \normalbaselineskip\baselineskip
+ \adjustbaseline
+ \setbox\ystrutbox\hbox{\ltj@@orig@yoko
+ \vrule\@width\z@
+ \@height.7\baselineskip \@depth.3\baselineskip}%
+ \setbox\dstrutbox\hbox{\ltj@@orig@dtou
+ \vrule\@width\z@
+ \@height.7\baselineskip \@depth.3\baselineskip}%
+ \setbox\tstrutbox\hbox{\ltj@@orig@tate
+ \vrule\@width\z@
+ \@height.5\baselineskip \@depth.5\baselineskip}%
+ \setbox\zstrutbox\hbox{\ltj@@orig@utod
+ \vrule\@width\z@
+ \@height.7\baselineskip \@depth.3\baselineskip}%
+ \let\size@update\relax}}
+
+\newluafunction\ltj@@adjust@baseline@inner
+\begingroup\catcode`\~=12
+\directlua{%
+ local nulltable = {}
+ local t = lua.get_functions_table()
+ local getfont, dir_tate = font.getfont, luatexja.dir_table.dir_tate
+ local fmt, get_attr = luatexja.jfont.font_metric_table, tex.getattribute
+ local getcount=tex.getcount
+ local setdimen, set_attr = tex.setdimen, tex.setattribute
+ local dir = luatexja.unary_pars.direction
+ t[\the\ltj@@adjust@baseline@inner] = function()
+ local ft = fmt[get_attr('ltj@curtfnt')] or nulltable
+ ft = ft.char_type or nulltable
+ local fk = ft[0] or nulltable
+ local ht, dp, wd = fk.height or 0, fk.depth or 0,
+ fk.width or ft.zw or 0
+ local fm
+ = ((getfont(font.current()) or nulltable)
+ .characters or nulltable)[77] or nulltable %% 'M'
+ set_attr('ltj@tablshift',
+ tex.round(0.5*((fm.height or 0)- (fm.depth or 0) - ht+ dp)))
+ if dir() ~= dir_tate then
+ ft = fmt[get_attr('ltj@curjfnt')] or nulltable
+ ft = ft.char_type or nulltable
+ fk = ft[0] or nulltable
+ ht, dp, wd = fk.height or 0, fk.depth or 0,
+ fk.width or ft.zw or 0
+ end
+ setdimen('cht', ht); setdimen('cdp', dp)
+ setdimen('cwd', wd); setdimen('chs', wd)
+ setdimen('cHT', ht+dp)
+ end
+}\endgroup
+\def\adjustbaseline{\luafunction\ltj@@adjust@baseline@inner
+ \cvs\normalbaselineskip}
+\DeclareRobustCommand\romanencoding[1]{%
+ \expandafter\ifx\csname T@#1\endcsname\relax
+ \@latex@error{Encoding scheme `#1' unknown}\@eha
+ \else
+ \edef\f@encoding{#1}%
+ \ifx\cf@encoding\f@encoding
+ \let\enc@update\relax
+ \else
+ \let\enc@update\@@enc@update
+ \fi
+ \fi
+}
+\DeclareRobustCommand\kanjiencoding[1]{%
+ \expandafter\ifx\csname T@#1\endcsname\relax
+ \@latex@error{KANJI Encoding scheme `#1' unknown}\@eha
+ \else
+ \edef\k@encoding{#1}%
+ \ifx\ck@encoding\k@encoding
+ \let\kenc@update\relax
+ \else
+ \let\kenc@update\@@kenc@update
+ \fi
+ \fi
+}
+\DeclareRobustCommand\fontencoding[1]{%
+ \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#1}')}\ifin@%
+ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
+\def\@@kenc@update{%
+ \default@KT
+ \csname T@\k@encoding\endcsname
+ \csname D@\k@encoding\endcsname
+ \let\kenc@update\relax
+ \let\ck@encoding\k@encoding
+ \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}%
+ \directlua{luatexja.jfont.is_kyenc(\tmp@enc)}\ifin@%
+ \let\cy@encoding\k@encoding
+ \else
+ \directlua{luatexja.jfont.is_ktenc(\tmp@enc)}\ifin@%
+ \let\ct@encoding\k@encoding
+ \else
+ \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha
+ \fi
+ \fi
+}
+\let\kenc@update\relax
+\def\@changed@kcmd#1#2{%
+ \ifx\protect\@typeset@protect
+ \@inmathwarn#1%
+ \expandafter\ifx\csname\ck@encoding\string#1\endcsname\relax
+ \expandafter\ifx\csname ?\string#1\endcsname\relax
+ \expandafter\def\csname ?\string#1\endcsname{%
+ \TextSymbolUnavailable#1%
+ }%
+ \fi
+ \global\expandafter\let
+ \csname\cf@encoding \string#1\expandafter\endcsname
+ \csname ?\string#1\endcsname
+ \fi
+ \csname\ck@encoding\string#1%
+ \expandafter\endcsname
+ \else
+ \noexpand#1%
+ \fi}
+\newif\if@notkfam
+\newif\if@notffam
+\newif\if@tempswz
+\def\@ltj@use@fd{true}
+\DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
+\DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
+\DeclareRobustCommand\fontfamily[1]{%
+ \@notkfamfalse\@notffamfalse
+ \edef\tmp@item{'\luatexluaescapestring{#1}'}%
+ %
+ \directlua{luatexja.jfont.search_kfam(\tmp@item, \@ltj@use@fd)}%
+ \ifin@\edef\k@family{#1}\else\@notkfamtrue\fi
+ %
+ % alphabetic fonts part
+ \directlua{luatexja.jfont.is_ffam(\tmp@item)}%
+ \ifin@\edef\f@family{#1}\else
+ % checking is_stored_ffam is not sufficient,
+ % since LuaTeX-ja doesn't know whats fonts are defined before LuaTeX-ja is loaded.
+ \ifcsname \f@encoding+#1\endcsname % easy case
+ \directlua{luatexja.jfont.add_ffam(\tmp@item)}\edef\f@family{#1}%
+ \else
+ \@tempswafalse
+ \def\cdp@elt##1{\ifcsname ##1+#1\endcsname\@tempswatrue\fi}%
+ \directlua{luatexja.jfont.search_ffam_declared()}%
+ \if@tempswz
+ \directlua{luatexja.jfont.add_ffam(\tmp@item)}\edef\f@family{#1}%
+ \else
+ % now we search Nffam_list and font definition files.
+ \directlua{luatexja.jfont.search_ffam_fd(\tmp@item)}%
+ \ifin@\edef\f@family{#1}\else\@notffamtrue\fi
+ \fi
+ \fi
+ \fi
+ %
+ \if@notkfam\if@notffam
+ \edef\k@family{#1}\edef\f@family{#1}%
+ \fi\fi
+}
+\DeclareRobustCommand\romanseries[1]{\edef\f@series{#1}}
+\DeclareRobustCommand\kanjiseries[1]{\edef\k@series{#1}}
+\DeclareRobustCommand\fontseries[1]{\kanjiseries{#1}\romanseries{#1}}
+\DeclareRobustCommand\romanshape[1]{\edef\f@shape{#1}}
+\DeclareRobustCommand\kanjishape[1]{\edef\k@shape{#1}}
+\DeclareRobustCommand\fontshape[1]{\kanjishape{#1}\romanshape{#1}}
+\def\usekanji#1#2#3#4{%
+ \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}%
+ \selectfont\ignorespaces}
+\def\useroman#1#2#3#4{%
+ \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
+ \selectfont\ignorespaces}
+\protected\def\usefont#1#2#3#4{%
+ \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@%
+ \usekanji{#1}{#2}{#3}{#4}%
+ \else\useroman{#1}{#2}{#3}{#4}%
+ \fi}
+\DeclareRobustCommand\normalfont{%
+ \kanjiencoding{\kanjiencodingdefault}%
+ \kanjifamily{\kanjifamilydefault}%
+ \kanjiseries{\kanjiseriesdefault}%
+ \kanjishape{\kanjishapedefault}%
+ \romanencoding{\encodingdefault}%
+ \romanfamily{\familydefault}%
+ \romanseries{\seriesdefault}%
+ \romanshape{\shapedefault}%
+ \selectfont\ignorespaces}
+\let\reset@font\normalfont
+\DeclareRobustCommand\mcfamily{%
+ \unless\ifltj@disablejfam\not@math@alphabet\mcfamily\mathmc\fi
+ \kanjifamily\mcdefault\selectfont}
+\DeclareRobustCommand\gtfamily{%
+ \unless\ifltj@disablejfam\not@math@alphabet\gtfamily\mathgt\fi
+ \kanjifamily\gtdefault\selectfont}
+\let\romanprocess@table\process@table
+\def\kanjiprocess@table{%
+ \kanjiencoding{\kanjiencodingdefault}%
+ \kanjifamily{\kanjifamilydefault}%
+ \kanjiseries{\kanjiseriesdefault}%
+ \kanjishape{\kanjishapedefault}%
+}
+\def\process@table{%
+ \romanprocess@table
+ \kanjiprocess@table
+}
+\@onlypreamble\romanprocess@table
+\@onlypreamble\kanjiprocess@table
+
+%%%%%% LuaTeX-ja specific
+
+% #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入
+\def\ltj@@IsFontJapanese#1{%
+ \directlua{luatexja.jfont.is_kenc(string.match(
+ '\luatexluaescapestring{#1}', '[^/]+'))}}
+
+
+\let\extract@afont\extract@font
+\def\pickup@jfont{%
+ \ifnum
+ \unless\ifnum\ltjgetparameter{direction}=3 1\else
+ \ifltjselectfont@force@define 1\else 0\fi\fi =1 %
+ \expandafter \ifx \font@name \relax
+ \let\extract@font\extract@jfont
+ \define@newfont
+ \let\extract@font\extract@afont
+ \fi
+ \let\getjfont\font@name
+ \else
+ \begingroup\escapechar\m@ne
+ \ifcsname ltj@@fontjfm/\expandafter\string\font@name\endcsname\else
+ \let\extract@font\extract@jfont@onlyjfm
+ \define@newfont
+ \let\extract@font\extract@afont
+ \fi
+ \endgroup
+ \csname ltj@@fontjfm/\expandafter\expandafter\expandafter\@gobble\expandafter\string\font@name\endcsname
+ \fi
+}
+\def\pickup@tfont{%
+ \ifnum
+ \ifnum\ltjgetparameter{direction}=3 1\else
+ \ifltjselectfont@force@define 1\else 0\fi\fi =1 %
+ \expandafter \ifx \font@name \relax
+ \let\extract@font\extract@tfont
+ \define@newfont
+ \let\extract@font\extract@afont
+ \fi
+ \let\gettfont\font@name
+ \else
+ \begingroup\escapechar\m@ne
+ \ifcsname ltj@@fontjfm/\expandafter\string\font@name\endcsname\else
+ \let\extract@font\extract@tfont@onlyjfm
+ \define@newfont
+ \let\extract@font\extract@afont
+ \fi
+ \endgroup
+ \csname ltj@@fontjfm/\expandafter\expandafter\expandafter\@gobble\expandafter\string\font@name\endcsname
+ \fi
+}
+
+% 異なる和文 enc/fam/ser/shape からは異なるフォント番号が振られるように
+% わざと「ゴミをつける」
+\def\ltj@@patch@external@font#1 at{%
+ \directlua{
+ local s = '\luatexluaescapestring{#1}'
+ local is_braced, is_quoted
+ if s:sub(1,1)=='{' and s:sub(-1)=='}' then is_braced=true; s=s:sub(2,-2) end
+ if s:sub(1,1)=='"' and s:sub(-1)=='"' then is_quoted=true; s=s:sub(2,-2) end
+ s=s..luatexja.jfont.print_aftl_address()
+ if is_braced then s='{'..s..'}' elseif is_quoted then s='"'..s..'"' end
+ %print(s, is_quoted, is_braced)
+ tex.sprint(-2, s)}%
+ \space at%
+}
+\def\extract@jfont{%
+ \get@external@font
+ \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}{%
+ \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}%
+ }%
+ \expandafter\globaljfont\font@name\external@font\relax\font@name% ここで時間がかかる
+ \csname \f@encoding+\f@family\endcsname
+ \csname\curr@fontshape\endcsname}
+\def\extract@tfont{%
+ \get@external@font
+ \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}{%
+ \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}%
+ }%
+ \expandafter\globaltfont\font@name\external@font\relax\font@name
+ \csname \f@encoding+\f@family\endcsname
+ \csname\curr@fontshape\endcsname}
+\def\extract@jfont@onlyjfm{%
+ \get@external@font
+ \csxdef{ltj@@fontjfm/\expandafter\string\font@name}{%
+ \directlua{%
+ luatexja.jfont.load_jfmonly('\luatexluaescapestring{\external@font}', 'yoko')
+ }%
+ }}
+\def\extract@tfont@onlyjfm{%
+ \get@external@font
+ \csxdef{ltj@@fontjfm/\expandafter\string\font@name}{%
+ \directlua{%
+ luatexja.jfont.load_jfmonly('\luatexluaescapestring{\external@font}', 'tate')
+ }%
+ }}
+
+\let\ltj@@al@do@subst@correction=\do@subst@correction
+\def\ltj@@ja@do@subst@correction{%
+ \xdef\subst@correction{%
+ \font@name
+ \global\expandafter\let\csname \curr@fontshape/\f@size\endcsname\font@name%
+ \relax}%
+ \aftergroup\subst@correction
+}
+\def\do@subst@correction{%
+ \ltj@@IsFontJapanese{\curr@fontshape}\ifin@%
+ \ltj@@ja@do@subst@correction
+ \else
+ \ltj@@al@do@subst@correction
+ \fi
+}
+\let\@@italiccorr=\/
+
+%%%%%% Japanese font for math mode
+\unless\ifltj@disablejfam
+
+% \M@<enc> から その <enc> が和文用か調べる
+{\catcode`M=12%
+\gdef\ltj@@mathJapaneseFonts#1M#2#3\relax{\ltj@@IsFontJapanese{#3}}}
+
+\let\ltj@@al@getanddefine@fonts=\getanddefine@fonts
+\def\ltj@@ja@getanddefine@fonts#1#2{%
+ \csletcs{if@ltj@tempif}{ifltjselectfont@force@define}%
+ \ltjselectfont@force@definetrue
+ \xdef\font@name{\csname \string#2/\tf@size\endcsname}%
+ \pickup@jfont\let\textfont@name\font@name
+ \xdef\font@name{\csname \string#2/\sf@size\endcsname}%
+ \pickup@jfont\let\scriptfont@name\font@name
+ \xdef\font@name{\csname \string#2/\ssf@size\endcsname}%
+ \pickup@jfont
+ \csletcs{ifltjselectfont@force@define}{if@ltj@tempif}%
+ \edef\math@fonts{\math@fonts\ltj@setpar@global%
+ \ltj@@set@stackfont#1,\textfont@name:{MJT}%
+ \ltj@@set@stackfont#1,\scriptfont@name:{MJS}%
+ \ltj@@set@stackfont#1,\font@name:{MJSS}%
+ }%
+}
+
+\def\getanddefine@fonts#1#2{%
+ \ltj@tempcnta=#1\ltj@@IsFontJapanese{\string#2}%
+ \ifin@\let\ltj@temp=\ltj@@ja@getanddefine@fonts%
+ \else \let\ltj@temp=\ltj@@al@getanddefine@fonts\fi
+ \ltj@temp{#1}{#2}%
+}
+\def\use@mathgroup#1#2{\relax\ifmmode
+ \math@bgroup
+ \expandafter\ifx\csname M@\f@encoding\endcsname#1\else
+ #1\fi\ltj@tempcnta=#2 \expandafter\ltj@@mathJapaneseFonts\string#1\relax%
+ \ifin@\jfam#2\relax\else\mathgroup#2\relax\fi
+ \expandafter\math@egroup\fi}%
+
+\fi
+
+%%%%%% Alternate Japanese Fonts
+%%%% \DeclareAlternateKanjiFont<Benc><Bfam><Bser><Bshape><Aenc><Afam><Aser><Ashape><range>
+% いつも global
+\def\DeclareAlternateKanjiFont#1#2#3#4#5#6#7#8#9{%
+ \edef\@temp{#9}%
+ \ifx\@temp\@empty\else
+ {\def\ltj@temp@bfont{#1/#2/#3/#4}\def\ltj@temp@afont{#5/#6/#7/#8}%
+ \expandafter\ltj@@altfont@latex#9,,}\ignorespaces
+ \fi}
+\def\ltj@@altfont@latex#1,{\def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\let\@next=\relax\else
+ \ltj@@altfont@latexA{#1}\let\@next=\ltj@@altfont@latex\fi\@next}
+\def\ltj@@altfont@latexA#1{\ltj@@altfont@latexB#1--\@nil}
+\def\ltj@@altfont@latexB#1-#2-#3\@nil{\def\ltj@temp{#3}%
+ \ifx\ltj@temp\empty
+ \ltj@tempcnta=#1\relax\ltj@tempcntb=\ltj@tempcnta
+ \else
+ \def\ltj@temp{#1}%
+ \ifx\ltj@temp\empty\ltj@tempcnta='200\else\ltj@tempcnta=#1\fi\relax
+ \def\ltj@temp{#2}%
+ \ifx\ltj@temp\empty\ltj@tempcntb="10FFFF\else\ltj@tempcntb=#2\fi\relax%"
+ \fi
+ \directlua{luatexja.jfont.set_alt_font_latex(
+ \the\ltj@tempcnta,\the\ltj@tempcntb,
+ '\luatexluaescapestring{\ltj@temp@afont}',
+ '\luatexluaescapestring{\ltj@temp@bfont}')}%
+ }
+
+%%%% \ClearAlternateKanjiFont<Benc><Bfam><Bser><Bshape>
+% いつも global
+\def\ClearAlternateKanjiFont#1#2#3#4{%
+ \directlua{luatexja.jfont.clear_alt_font_latex('\luatexluaescapestring{#1/#2/#3/#4}')}}
+
+\def\ltj@pickup@altfont@auxy#1{%
+ \begingroup\edef\font@name{\csname #1/\f@size\endcsname}\pickup@jfont\endgroup%
+}
+\def\ltj@pickup@altfont@auxt#1{%
+ \begingroup\edef\font@name{\csname #1/\f@size\endcsname}\pickup@tfont\endgroup%
+}
+\def\ltj@pickup@altfont@copy#1#2{%
+ \ltj@@getjfontnumber#1%
+ \directlua{luatexja.jfont.pickup_alt_font_b(\the\ltj@tempcntc,'\luatexluaescapestring{#2}')}%
+}
+
+\def\ltj@@does@alt@set#1#2{%
+ \directlua{luatexja.jfont.does_alt_set'\luatexluaescapestring{#1}'}{#2}}
+
+%%%% patch \@text@composite because of {y,t}albaselineshift
+
+% %% \pltx@isletter from plfonts.dtx
+% \def\pltx@mark{\pltx@mark@}
+% \let\pltx@scanstop\relax
+% \long\def\pltx@cond#1\fi{%
+% #1\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi}
+% \long\def\pltx@isletter#1{%
+% \expandafter\pltx@isletter@i#1\pltx@scanstop}
+% \long\def\pltx@isletter@i#1\pltx@scanstop{%
+% \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi{\@firstoftwo}%
+% {\pltx@isletter@ii\pltx@scanstop#1\pltx@scanstop{}#1\pltx@mark}}
+% \long\def\pltx@isletter@ii#1\pltx@scanstop#{%
+% \pltx@cond\ifx\pltx@mark#1\pltx@mark\fi%
+% {\pltx@isletter@iii}{\pltx@isletter@iv}}
+% \long\def\pltx@isletter@iii#1\pltx@mark{\@secondoftwo}
+% \long\def\pltx@isletter@iv#1#2#3\pltx@mark{%
+% \pltx@cond\ifx\pltx@mark#3\pltx@mark\fi{%
+% \pltx@cond{\ifnum0\ifcat A\noexpand#21\fi\ifcat=\noexpand#21\fi>\z@}\fi
+% {\@firstoftwo}{\@secondoftwo}%
+% }{\@secondoftwo}}
+%
+% \def\@text@composite@x#1#2{%
+% \ifx#1\relax
+% #2%
+% \else\pltx@isletter{#1}{#1}{%
+% \begingroup
+% \setbox\z@\hbox\bgroup%
+% \ltj@yablshift\z@ \ltj@tablshift\z@
+% #1%
+% \@tempcntb\directlua{luatexja.pltx_composite_last_node_char()}%)
+% \xdef\pltx@composite@temp{\noexpand\@tempcntb=\the\@tempcntb\relax}%
+% \aftergroup\pltx@composite@temp
+% \egroup
+% \ifnum\ltjgetparameter{direction}=3 %
+% \@tempdima=\ltj@tablshift sp\else\@tempdima=\ltj@yablshift sp\fi
+% \ifnum\@tempcntb<\z@\@tempcnta\z@\else
+% \@tempcnta=\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{\@tempcntb}}\relax
+% \ifnum\@tempcnta=\z@\@tempdima\z@\fi
+% \fi
+% \ifnum\@tempcnta>\z@
+% \ifodd\ltjgetparameter{alxspmode}{\@tempcntb}\else\leavevmode\hbox{}\fi
+% \begingroup\mathsurround\z@$%
+% \hbox{\lower\@tempdima\box\z@}
+% $\endgroup%
+% \ifnum\ltjgetparameter{alxspmode}{\@tempcntb}<2\hbox{}\fi
+% \else
+% \ifdim\@tempdima=\z@{\ltj@yablshift\z@ \ltj@tablshift\z@#1}%
+% \else\lower\@tempdima\box\z@\fi
+% \fi
+% \endgroup}%
+% \fi
+% }
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
new file mode 100644
index 0000000000..989fd8ce9d
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-array.sty
@@ -0,0 +1,26 @@
+%
+% lltjp-array.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjp-array}[2018/03/29 Patch to array for LuaTeX-ja]
+
+\RequirePackage{etoolbox,array}
+
+\patchcmd\insert@column{%
+ \ignorespaces\@sharp\unskip
+}{%
+ \ltj@sharp
+}{}{}
+
+\@ifpackageloaded{lltjext}{}{%
+%% remove extra \xkanjiskip (pLaTeX2e 2016/04/17)
+\def\@tabular{%
+ \leavevmode \null
+ \hbox \bgroup $\col@sep\tabcolsep \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray}
+\def\endtabular{\endarray $\egroup\null}
+\expandafter \let \csname endtabular*\endcsname = \endtabular
+}
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty
new file mode 100644
index 0000000000..6f469fc08f
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-fontspec.sty
@@ -0,0 +1,155 @@
+%
+% lltjp-fontspec.sty 2018-08-24
+%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{fontspec}
+\ExplSyntaxOn
+
+% <= v2.6g uses \l__fontspec_nfss_enc_tl instead of \g__fontspec_nfss_enc_tl
+\ifdefined \g__fontspec_nfss_enc_tl \else
+ \def \g__fontspec_nfss_enc_tl { \l__fontspec_nfss_enc_tl }
+\fi
+
+%%%%%%%% fontspec v2.5c overwrites \rmfamily etc. in \setmainfont
+\@ifpackagelater{fontspec}{2018/07/29}{ %% 2.6h or later
+\cs_set:Nn \__fontspec_main_setmainfont:nn
+ {
+ \fontspec_set_family:Nnn \l__fontspec_rmfamily_family_tl {#1} {#2}
+ \tl_set_eq:NN \rmdefault \l__fontspec_rmfamily_family_tl
+ \use:x
+ {
+ \exp_not:n { \DeclareRobustCommand \rmfamily }
+ {
+ \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
+ \exp_not:N \fontfamily { \l__fontspec_rmfamily_family_tl }
+ \exp_not:N\if@ltj@match@family\exp_not:N\kanjifamily\exp_not:N\mcdefault\exp_not:N\fi%%%
+ \exp_not:N \selectfont
+ }
+ }
+ \str_if_eq_x:nnT {\familydefault} {\rmdefault}
+ { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
+ \__fontspec_setmainfont_hook:nn {#1} {#2}
+ \normalfont
+ }
+\cs_set:Nn \__fontspec_main_setsansfont:nn
+ {
+ \fontspec_set_family:Nnn \l__fontspec_sffamily_family_tl {#1} {#2}
+ \tl_set_eq:NN \sfdefault \l__fontspec_sffamily_family_tl
+ \use:x
+ {
+ \exp_not:n { \DeclareRobustCommand \sffamily }
+ {
+ \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
+ \exp_not:N \fontfamily { \l__fontspec_sffamily_family_tl }
+ \exp_not:N\if@ltj@match@family\exp_not:N\kanjifamily\exp_not:N\gtdefault\exp_not:N\fi%%%
+ \exp_not:N \selectfont
+ }
+ }
+ \str_if_eq_x:nnT {\familydefault} {\sfdefault}
+ { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
+ \__fontspec_setsansfont_hook:nn {#1} {#2}
+ \normalfont
+ }
+\cs_set:Nn \__fontspec_main_setmonofont:nn
+ {
+ \fontspec_set_family:Nnn \l__fontspec_ttfamily_family_tl {#1} {#2}
+ \tl_set_eq:NN \ttdefault \l__fontspec_ttfamily_family_tl
+ \use:x
+ {
+ \exp_not:n { \DeclareRobustCommand \ttfamily }
+ {
+ \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
+ \exp_not:N \fontfamily { \l__fontspec_ttfamily_family_tl }
+ \exp_not:N\if@ltj@match@family\exp_not:N\kanjifamily\exp_not:N\jttdefault\exp_not:N\fi%%%
+ \exp_not:N \selectfont
+ }
+ }
+ \str_if_eq_x:nnT {\familydefault} {\ttdefault}
+ { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
+ \__fontspec_setmonofont_hook:nn {#1} {#2}
+ \normalfont
+ }
+}{ %% <= 2.6g
+\DeclareDocumentCommand \setmainfont { O{} m O{} }
+ {
+ \fontspec_set_family:Nnn \g__fontspec_rmfamily_family {#1,#3} {#2}
+ \tl_set_eq:NN \rmdefault \g__fontspec_rmfamily_family
+ \use:x { \exp_not:n { \DeclareRobustCommand \rmfamily }
+ {
+ \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
+ \exp_not:N \fontfamily { \g__fontspec_rmfamily_family }
+ \exp_not:N\if@ltj@match@family\exp_not:N\kanjifamily\exp_not:N\mcdefault\exp_not:N\fi%%%
+ \exp_not:N \selectfont
+ }
+ }
+ \str_if_eq_x:nnT {\familydefault} {\rmdefault}
+ { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
+ \normalfont
+ \ignorespaces
+ }
+\DeclareDocumentCommand \setsansfont { O{} m O{} }
+ {
+ \fontspec_set_family:Nnn \g__fontspec_sffamily_family {#1,#3} {#2}
+ \tl_set_eq:NN \sfdefault \g__fontspec_sffamily_family
+ \use:x { \exp_not:n { \DeclareRobustCommand \sffamily }
+ {
+ \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
+ \exp_not:N \fontfamily { \g__fontspec_sffamily_family }
+ \exp_not:N\if@ltj@match@family\exp_not:N\kanjifamily\exp_not:N\gtdefault\exp_not:N\fi%%%
+ \exp_not:N \selectfont
+ }
+ }
+ \str_if_eq_x:nnT {\familydefault} {\sfdefault}
+ { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
+ \normalfont
+ \ignorespaces
+ }
+\DeclareDocumentCommand \setmonofont { O{} m O{} }
+ {
+ \fontspec_set_family:Nnn \g__fontspec_ttfamily_family {#1,#3} {#2}
+ \tl_set_eq:NN \ttdefault \g__fontspec_ttfamily_family
+ \use:x { \exp_not:n { \DeclareRobustCommand \ttfamily }
+ {
+ \exp_not:N \fontencoding { \g__fontspec_nfss_enc_tl }
+ \exp_not:N \fontfamily { \g__fontspec_ttfamily_family }
+ \exp_not:N\if@ltj@match@family\exp_not:N\kanjifamily\exp_not:N\jttdefault\exp_not:N\fi%%%
+ \exp_not:N \selectfont
+ }
+ }
+ \str_if_eq_x:nnT {\familydefault} {\ttdefault}
+ { \tl_set_eq:NN \encodingdefault \g__fontspec_nfss_enc_tl }
+ \normalfont
+ \ignorespaces
+ }
+}
+
+\cs_set:Nn \fontspec_visible_space:
+ {
+ \__fontspec_primitive_font_glyph_if_exist:NnTF \font {"2423}
+ { \ltjalchar"2423\scan_stop: }
+ { \fontspec_visible_space_fallback: }
+ }
+
+\AtBeginDocument{
+ \cs_if_exist:NF \verbvisiblespace {
+ % >= LaTeX2e <2018-12-01> does not need the following patch
+ \def\verb
+ {
+ \relax\ifmmode\hbox\else\leavevmode\fi % same as lltjcore
+ \bgroup
+ \verb@eol@error \let\do\@makeother \dospecials
+ \verbatim@font\@noligs
+ \@ifstar\__fontspecsverb\@verb
+ }
+ }
+}
+\cs_set:Npn \emshape { \gtfamily \itshape }
+\cs_set:Npn \eminnershape { \mcfamily \upshape }
+
+\ExplSyntaxOff
+\expandafter\patchcmd\csname TU\string\textasteriskcentered\endcsname{\char}{\ltjalchar}{}{}
+
+\endinput
+
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty
new file mode 100644
index 0000000000..f74c496308
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-footmisc.sty
@@ -0,0 +1,58 @@
+%
+% lltjp-footmiscs.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjp-footmisc}[2017/05/05 Patch to footmisc for LuaTeX-ja]
+\RequirePackage{footmisc}
+
+\let \if@tempswa \ifFN@bottom
+\ifFN@para \@tempswatrue \fi
+\if@tempswa
+ \ifFN@bottom
+ \toks@{\setbox\@outputbox \box\@cclv
+ \xdef\@freelist{\@freelist\@midlist}%
+ \global\let\@midlist\@empty
+ \@combinefloats
+ \ifvoid\footins
+ \else
+ \setbox\@outputbox \vbox\bgroup
+ \boxmaxdepth\@maxdepth
+ \unvbox\@outputbox
+ \vfill\relax
+ }
+ \the\FN@temptoken
+ \toks@\expandafter{\the\toks@\egroup\fi}
+ \else
+ \toks@{\ifvoid\footins
+ \setbox\@outputbox\box\@cclv
+ \else
+ \setbox\@outputbox \vbox\bgroup
+ \boxmaxdepth\@maxdepth
+ \unvbox\@cclv
+ }
+ \the\FN@temptoken
+ \toks@\expandafter{\the\toks@
+ \egroup
+ \fi
+ \xdef\@freelist{\@freelist\@midlist}%
+ \global\let\@midlist\@empty
+ \@combinefloats
+ }%
+ \fi
+ \toks@\expandafter{\the\toks@
+ \ifvbox\@kludgeins
+ \@makespecialcolbox
+ \else
+ \setbox\@outputbox \vbox to\@colht{%
+ \@texttop \dimen@\dp\@outputbox
+ \unvbox\@outputbox
+ \ifnum\ltjgetparameter{direction}=3 \vbox{\hskip\z@}\fi %%% LuaTeX-ja
+ \vskip -\dimen@\@textbottom
+ }%
+ \fi
+ \global\maxdepth\@maxdepth
+ }
+ \edef\@makecol{\the\toks@}
+\fi
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty
new file mode 100644
index 0000000000..678556e55e
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-geometry.sty
@@ -0,0 +1,513 @@
+%
+% lltjp-geometry.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjp-geometry}[2018/01/19 Patch to geometry for LuaTeX-ja with vertical writing mode]
+\ifdefined\if@ltj@@geometry@tate\expandafter\endinput\fi
+\newif\if@ltj@@geometry@tate
+\newif\if@ltj@@geometry@forceoff
+\@ltj@@geometry@tatefalse
+\@ltj@@geometry@forceofffalse
+\DeclareOption{force}{\@ltj@@geometry@tatetrue}
+\DeclareOption{disable}{\@ltj@@geometry@forceofftrue}
+
+\ProcessOptions\relax
+
+\RequirePackage{ifluatex}
+\ifluatex
+ \ifdefined\luatexjaLoaded\else
+ \PackageError{lltjp-geometry}{%
+ lltjp-geometry does not work without luatexja.
+ }{}
+\fi
+\else % pTeX
+\def \AtBeginDvi #1{%
+ \global \setbox \@begindvibox
+ \vbox{\yoko\unvbox \@begindvibox #1}%
+}
+\fi
+
+\RequirePackage{filehook}
+\RequirePackage{etoolbox}
+\newif\ifGm@ltj@layoutswitch
+\let\orig@PackageWarningNoLine=\PackageWarningNoLine
+% define ifGm@swap@papersize if it is undefined
+\expandafter\newif\csname ifGm@swap@papersize\endcsname
+
+\AtBeginOfPackageFile{geometry}{%
+ \edef\Gm@ltj@topskip{\the\topskip}
+ \edef\Gm@ltj@headsep{\the\headsep}
+ \edef\Gm@ltj@footskip{\the\footskip}
+\ifluatex
+ \ifnum\ltjgetparameter{direction}=3 \@ltj@@geometry@tatetrue\fi
+\else
+ \@gobble\iftrue\csname iftdir\endcsname\@ltj@@geometry@tatetrue\fi
+\fi
+\patchcmd\@begindocumenthook{\tate}{\tate}{\@ltj@@geometry@tatetrue}{}%
+\if@ltj@@geometry@tate
+ \if@ltj@@geometry@forceoff
+ \@ltj@@geometry@tatefalse
+ \else
+ \let\PackageWarningNoLine\@gobbletwo% 警告抑止
+ \fi
+\fi
+}
+\AtEndOfPackageFile{geometry}{%
+\let\PackageWarningNoLine=\orig@PackageWarningNoLine
+\if@ltj@@geometry@tate
+ \let\PackageWarningNoLine=\orig@PackageWarningNoLine
+%%% ここからパッチ開始
+
+% TODO:
+% * pTeX, LuaTeX ともに truedimen が正しく動作しない
+% * pTeX resetpaper が正しく動作しない
+%
+% `h', `v' は「水平」「垂直」を意味するが:
+% ユーザー側では「紙の物理的な水平方向」「物理的な垂直方向」を,
+% しかしパッケージ内部処理では「字送り方向」「行送り方向」を表す.
+% そのため,key-value interface 内で h, v の交換を行う必要がある.
+
+% twoside 指定時は,lmargin は小口側,rmargin はノド側の余白を指す.
+% また,bindingoffset 偶数ページを右に,奇数ページを左にずらす.
+\define@key{Gm}{hdivide}{\Gm@parse@divide{#1}{lmargin}{height}{rmargin}}%
+
+\define@key{Gm}{vscale}{\Gm@hbodytrue\edef\Gm@hscale{#1}}%
+\define@key{Gm}{hscale}{\Gm@vbodytrue\edef\Gm@vscale{#1}}%
+\define@key{Gm}{vdivide}{\Gm@parse@divide{#1}{tmargin}{width}{bmargin}}%
+\define@key{Gm}{divide}{\Gm@parse@divide{#1}{tmargin}{width}{bmargin}%
+ \Gm@parse@divide{#1}{lmargin}{height}{rmargin}}%
+\define@key{Gm}{vmargin}{\Gm@branch{#1}{tmargin}{bmargin}}%
+\define@key{Gm}{hmargin}{\Gm@branch{#1}{lmargin}{rmargin}}%
+\define@key{Gm}{margin}{\Gm@branch{#1}{tmargin}{lmargin}%
+ \Gm@branch{#1}{bmargin}{rmargin}}%
+\define@key{Gm}{headsep}{\Gm@defbylen{ltj@headsep}{#1}}%
+\define@key{Gm}{footskip}{\Gm@defbylen{ltj@footskip}{#1}}%
+\let\KV@Gm@foot\KV@Gm@footskip
+\define@key{Gm}{vmarginratio}{\edef\Gm@hmarginratio{#1}}%
+\define@key{Gm}{hmarginratio}{\edef\Gm@vmarginratio{#1}}%
+\define@key{Gm}{nohead}[true]{\Gm@doifelse{nohead}{#1}%
+ {\Gm@setlength\headheight\z@\Gm@defbylen{ltj@headsep}\z@}{}}%
+\define@key{Gm}{nofoot}[true]{\Gm@doifelse{nofoot}{#1}%
+ {\Gm@defbylen{ltj@footskip}\z@}{}}%
+\define@key{Gm}{noheadfoot}[true]{\Gm@doifelse{noheadfoot}{#1}%
+ {\Gm@setlength\headheight\z@\Gm@defbylen{ltj@headsep}\z@
+ \Gm@defbylen{ltj@footskip}\z@}{}}%
+\define@key{Gm}{layoutwidth}{\Gm@layouttrue\Gm@setlength\Gm@layoutheight{#1}}%
+\define@key{Gm}{layoutheight}{\Gm@layouttrue\Gm@setlength\Gm@layoutwidth{#1}}%
+\define@key{Gm}{layoutsize}{\Gm@branch{#1}{layoutwidth}{layoutheight}}%
+\define@key{Gm}{layout}{\Gm@layouttrue\@nameuse{Gm@#1}{Gm@layout}%
+ \Gm@setlength\@tempdima{\Gm@layoutheight}%
+ \Gm@setlength\Gm@layoutheight{\Gm@layoutwidth}%
+ \Gm@setlength\Gm@layoutwidth{\@tempdima}%
+}%
+
+% \@mparswitch は傍注の出力位置を左右ページで変えるスイッチだが,
+% geometry.sty はこれを左右ページのレイアウトを変えるか否かの判定にも使っている.
+% 縦組クラスの場合は \@mparswitch は常に偽でないとおかしなことになるので
+% \@mparswitch -> \Gm@ltj@layoutswitch と名称変更する.
+
+\let\Gm@ltj@layoutswitch\@mparswitch
+\@mparswitchfalse
+\define@key{Gm}{twoside}[true]{\Gm@doifelse{twoside}{#1}%
+ {\@twosidetrue\Gm@ltj@layoutswitchtrue}{\@twosidefalse\Gm@ltj@layoutswitchfalse}}%
+\define@key{Gm}{asymmetric}[true]{\Gm@doifelse{asymmetric}{#1}%
+ {\@twosidetrue\Gm@ltj@layoutswitchfalse}{}}%
+
+% includemp 指定時は,\headsep (if reversemp || twocolumn) や,
+% \footskip (if !reversemp || twocolumn) を傍注幅だけ増加させる.
+
+% h <-> v
+\def\Gm@Dhratio{2:3}% = top:bottom default
+\def\Gm@Dvratio{1:1}% = left:right default for oneside
+\def\Gm@Dvratiotwo{3:2}% = inner:outer default for twoside.
+\ifGm@swap@papersize
+ % geometry.sty ロード時に landscape オプションが指定されていた場合,
+ % それによって用紙サイズの縦横が入れ替わってしまっているので補正する.
+ \setlength\@tempdima{\paperwidth}%
+ \setlength\paperwidth{\paperheight}%
+ \setlength\paperheight{\@tempdima}%
+\fi
+
+% save length
+\def\Gm@save{%
+ \Gm@savelength{paperwidth}%
+ \Gm@savelength{paperheight}%
+ \Gm@savelength{textwidth}%
+ \Gm@savelength{textheight}%
+ \Gm@savelength{evensidemargin}%
+ \Gm@savelength{oddsidemargin}%
+ \Gm@savelength{topmargin}%
+ \Gm@savelength{headheight}%
+ %\Gm@savelength{headsep}%
+ \Gm@savelength{topskip}%
+ %\Gm@savelength{footskip}%
+ \Gm@savelength{baselineskip}%
+ \Gm@savelength{marginparwidth}%
+ \Gm@savelength{marginparsep}%
+ \Gm@savelength{columnsep}%
+ \Gm@savelength{hoffset}%
+ \Gm@savelength{voffset}
+ \Gm@savelength{Gm@layoutwidth}%
+ \Gm@savelength{Gm@layoutheight}%
+ \Gm@savelength{Gm@layouthoffset}%
+ \Gm@savelength{Gm@layoutvoffset}%
+ \Gm@saveboolean{@twocolumn}%
+ \Gm@saveboolean{@twoside}%
+ \Gm@saveboolean{Gm@ltj@layoutswitch}%
+ \Gm@saveboolean{@reversemargin}}%
+
+% frame
+\ifluatex
+ \def\Gm@pageframe@cmd{\vb@xt@\z@}
+\else
+ \def\Gm@pageframe@cmd{\vb@xt@\z@\bgroup\yoko\aftergroup\egroup}
+\fi
+\renewcommand*{\Gm@pageframes}{%
+ \Gm@pageframe@cmd{%
+ \ifGm@showcrop
+ \vb@xt@\z@{\vskip-1\Gm@truedimen in\vskip\Gm@layoutvoffset%
+ \hb@xt@\z@{\hskip-1\Gm@truedimen in\hskip\Gm@layouthoffset%
+ \vb@xt@\Gm@layoutwidth{%
+ \let\protect\relax
+ \hb@xt@\Gm@layoutheight{\Gm@cropmark(-1,1,-3,3)\hfil\Gm@cropmark(1,1,3,3)}%
+ \vfil
+ \hb@xt@\Gm@layoutheight{\Gm@cropmark(-1,-1,-3,-3)\hfil\Gm@cropmark(1,-1,3,-3)}}%
+ \hss}%
+ \vss}%
+ \fi%
+ \ifGm@showframe
+ \if@twoside
+ \ifodd\count\z@
+ \let\@themargin\oddsidemargin
+ \else
+ \let\@themargin\evensidemargin
+ \fi
+ \fi
+ \moveright\@themargin%
+ \vb@xt@\z@{%
+ \vskip\topmargin\vb@xt@\z@{\vss\Gm@hrule}%
+ \vskip\headheight\vb@xt@\z@{\vss\Gm@hruled}%
+ \vskip\headsep\vb@xt@\z@{\vss\Gm@hrule}%
+ \if@reversemargin\vb@xt@\z@{%
+ \vss\vb@xt@\z@{\vss\Gm@hrule}%
+ \vskip\marginparwidth\vb@xt@\z@{\vss\Gm@hrule}%
+ \vskip\marginparsep
+ }\fi
+ \hb@xt@\textwidth{\llap{\Gm@vrule}\hfil\Gm@vrule}%
+ \vb@xt@\z@{\vss\Gm@hruled}%
+ \unless\if@reversemargin\vb@xt@\z@{%
+ \vskip\marginparsep\vb@xt@\z@{\vss\Gm@hrule}%
+ \vskip\marginparwidth\vb@xt@\z@{\vss\Gm@hruled}\vss%
+ }\fi%
+ \vskip\footskip\vb@xt@\z@{\vss\Gm@hruled}%
+ \vss}%
+ \fi%
+ }}
+\def\Gm@detall#1#2#3#4{%
+ \@tempcnta\z@
+ \if#1h
+ \let\Gm@mratio\Gm@hmarginratio
+ \edef\Gm@Dmratio{\Gm@Dhratio}%
+ \else
+ \let\Gm@mratio\Gm@vmarginratio
+ \edef\Gm@Dmratio{\if@twoside\Gm@Dvratiotwo\else\Gm@Dvratio\fi}%
+ \fi
+ \if#1h
+ \ifx\Gm@tmargin\@undefined\else\advance\@tempcnta4\relax\fi
+ \ifGm@hbody\advance\@tempcnta2\relax\fi
+ \ifx\Gm@bmargin\@undefined\else\advance\@tempcnta1\relax\fi
+ \Gm@cnth\@tempcnta
+ \else
+ \ifx\Gm@lmargin\@undefined\else\advance\@tempcnta4\relax\fi
+ \ifGm@vbody\advance\@tempcnta2\relax\fi
+ \ifx\Gm@rmargin\@undefined\else\advance\@tempcnta1\relax\fi
+ \Gm@cntv\@tempcnta
+ \fi
+ \ifcase\@tempcnta
+ \if#1h
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \fi
+ \Gm@detiiandiii{#2}{#3}{#4}%
+ \or
+ \ifx\Gm@mratio\@undefined
+ \if#1h
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \fi
+ \setlength\@tempdimc{\@nameuse{Gm@#4}}%
+ \Gm@detiiandiii{#2}{#3}{#4}%
+ \expandafter\let\csname Gm@#2\endcsname\@undefined
+ \Gm@defbylen{#4}{\@tempdimc}%
+ \else
+ \Gm@setbyratio[f]{#1}{#4}{#3}%
+ \fi
+ \Gm@detiv{#2}{#3}{#4}{#2}%
+ \or\Gm@detiiandiii{#2}{#3}{#4}%
+ \or\Gm@detiv{#2}{#2}{#4}{#3}%
+ \or
+ \ifx\Gm@mratio\@undefined
+ \if#1h
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \fi
+ \setlength\@tempdimc{\@nameuse{Gm@#3}}%
+ \Gm@detiiandiii{#2}{#4}{#3}%
+ \expandafter\let\csname Gm@#2\endcsname\@undefined
+ \Gm@defbylen{#3}{\@tempdimc}%
+ \else
+ \Gm@setbyratio[b]{#1}{#3}{#4}%
+ \fi
+ \Gm@detiv{#2}{#3}{#4}{#2}%
+ \or\Gm@detiv{#2}{#3}{#4}{#2}%
+ \or\Gm@detiv{#2}{#2}{#3}{#4}%
+ \or\Gm@warning{Over-specification in `#1'-direction.%
+ ^^J\@spaces `#2' (\@nameuse{Gm@#2}) is ignored}%
+ \Gm@detiv{#2}{#3}{#4}{#2}%
+ \else\fi}%
+\def\Gm@clean{%
+ \ifnum\Gm@cnth<4\let\Gm@tmargin\@undefined\fi
+ \ifodd\Gm@cnth\else\let\Gm@bmargin\@undefined\fi
+ \ifnum\Gm@cntv<4\let\Gm@lmargin\@undefined\fi
+ \ifodd\Gm@cntv\else\let\Gm@rmargin\@undefined\fi
+ \ifGm@hbody\else
+ \let\Gm@hscale\@undefined
+ \let\Gm@width\@undefined
+ \let\Gm@textwidth\@undefined
+ \fi
+ \ifGm@vbody\else
+ \let\Gm@vscale\@undefined
+ \let\Gm@height\@undefined
+ \let\Gm@textheight\@undefined
+ \fi
+ }%
+\def\Gm@adjustpaper{%
+ \ifdim\paperwidth>\p@\else
+ \PackageError{geometry}{%
+ \string\paperwidth\space(\the\paperwidth) too short}{%
+ Set a paper type (e.g., `a4paper').}%
+ \fi
+ \ifdim\paperheight>\p@\else
+ \PackageError{geometry}{%
+ \string\paperheight\space(\the\paperheight) too short}{%
+ Set a paper type (e.g., `a4paper').}%
+ \fi
+ \ifGm@swap@papersize
+ \setlength\@tempdima{\paperwidth}%
+ \setlength\paperwidth{\paperheight}%
+ \setlength\paperheight{\@tempdima}%
+ \fi
+ \ifGm@layout\else
+ \setlength\Gm@layoutwidth{\paperheight}%
+ \setlength\Gm@layoutheight{\paperwidth}%
+ \fi}%
+\def\Gm@adjustbody{
+ \ifGm@hbody
+ \ifx\Gm@width\@undefined
+ \ifx\Gm@hscale\@undefined
+ \Gm@defbylen{width}{\Gm@Dhscale\Gm@layoutwidth}%
+ \else
+ \Gm@defbylen{width}{\Gm@hscale\Gm@layoutwidth}%
+ \fi
+ \fi
+ \ifx\Gm@textwidth\@undefined\else
+ \setlength\@tempdima{\Gm@textwidth}%
+ \ifGm@includemp
+ \advance\@tempdima\Gm@wd@mp
+ \fi
+ \ifGm@includehead
+ \addtolength\@tempdima{\headheight}%
+ \addtolength\@tempdima{\headsep}%
+ \fi
+ \ifGm@includefoot
+ \addtolength\@tempdima{\footskip}%
+ \fi
+ \edef\Gm@width{\the\@tempdima}%
+ \fi
+ \fi
+ \ifGm@vbody
+ \ifx\Gm@height\@undefined
+ \ifx\Gm@vscale\@undefined
+ \Gm@defbylen{height}{\Gm@Dvscale\Gm@layoutheight}%
+ \else
+ \Gm@defbylen{height}{\Gm@vscale\Gm@layoutheight}%
+ \fi
+ \fi
+ \setlength\topskip\Gm@ltj@topskip
+ \ifx\Gm@lines\@undefined\else
+ \@tempdima=\f@size\p@ \@tempdima=.5\@tempdima
+ \ifluatex
+ \advance\@tempdima\ltjgetparameter{talbaselineshift}%
+ \else
+ \advance\@tempdima\tbaselineshift
+ \fi
+ \ifdim\maxdepth<\@tempdima
+ \PackageWarningNoLine{lltjp-geometry}%
+ {\noexpand\maxdepth was changed from \the\maxdepth\space
+ to \the\@tempdima}
+ \maxdepth\@tempdima
+ \fi
+ \setbox\z@=\hbox{\tate% next \ifdim must be executed in tate dir.
+ \ifdim\topskip<\ht\tstrutbox
+ \@tempdima\topskip
+ \global\topskip\ht\tstrutbox
+ \PackageWarningNoLine{lltjp-geometry}%
+ {\noexpand\topskip was changed from \the\@tempdima\space
+ to \the\topskip}
+ \fi}%
+ \setlength\@tempdima{\baselineskip}%
+ \multiply\@tempdima\Gm@lines
+ \addtolength\@tempdima{\topskip}%
+ \addtolength\@tempdima{-\baselineskip}%
+ \edef\Gm@textheight{\the\@tempdima}%
+ \fi
+ \ifx\Gm@textheight\@undefined\else
+ \edef\Gm@height{\Gm@textheight}%
+ \fi
+ \fi}%
+
+\def\Gm@adjustmp{%
+ \ifGm@includemp
+ \@tempdimb\marginparwidth
+ \advance\@tempdimb\marginparsep
+ \Gm@wd@mp\@tempdimb
+ \if@twocolumn
+ \Gm@wd@mp2\@tempdimb
+ \fi
+ \fi}%
+\def\Gm@@process{%
+ \Gm@expandlengths
+ \Gm@adjustpaper
+ \addtolength\Gm@layoutheight{-\Gm@bindingoffset}%
+ \Gm@adjustmp
+ \Gm@adjustbody
+ \Gm@detall{h}{width}{tmargin}{bmargin}%
+ \Gm@detall{v}{height}{lmargin}{rmargin}%
+ \setlength\textwidth{\Gm@width}%
+ \setlength\textheight{\Gm@height}%
+ \setlength\headsep{\Gm@ltj@headsep}%
+ \setlength\footskip{\Gm@ltj@footskip}%
+ \setlength\topmargin{\Gm@tmargin}%
+ \setlength\oddsidemargin{\Gm@lmargin}%
+ \addtolength\oddsidemargin{-1\Gm@truedimen in}%
+ \ifGm@ltj@layoutswitch
+ \setlength\evensidemargin{\Gm@rmargin}%
+ \addtolength\evensidemargin{-1\Gm@truedimen in}%
+ \else
+ \evensidemargin\oddsidemargin
+ \fi
+ \advance\evensidemargin\Gm@bindingoffset
+ \addtolength\topmargin{-1\Gm@truedimen in}%
+ \ifGm@includehead
+ \addtolength\textwidth{-\headheight}%
+ \addtolength\textwidth{-\headsep}%
+ \else
+ \addtolength\topmargin{-\headheight}%
+ \addtolength\topmargin{-\headsep}%
+ \fi
+ \ifGm@includefoot
+ \addtolength\textwidth{-\footskip}%
+ \fi
+ \ifGm@includemp
+ \advance\textwidth-\Gm@wd@mp
+ \if@twocolumn
+ \advance\headsep.5\Gm@wd@mp
+ \advance\footskip.5\Gm@wd@mp
+ \else\if@reversemargin
+ \advance\headsep\Gm@wd@mp
+ \else
+ \advance\footskip\Gm@wd@mp
+ \fi\fi
+ \fi
+ \ifGm@heightrounded
+ \setlength\@tempdima{\textheight}%
+ \addtolength\@tempdima{-\topskip}%
+ \@tempcnta\@tempdima
+ \@tempcntb\baselineskip
+ \divide\@tempcnta\@tempcntb
+ \setlength\@tempdimb{\baselineskip}%
+ \multiply\@tempdimb\@tempcnta
+ \advance\@tempdima-\@tempdimb
+ \multiply\@tempdima\tw@
+ \ifdim\@tempdima>\baselineskip
+ \addtolength\@tempdimb{\baselineskip}%
+ \fi
+ \addtolength\@tempdimb{\topskip}%
+ \textheight\@tempdimb
+ \fi
+ \advance\oddsidemargin\Gm@layouthoffset%
+ \advance\evensidemargin\Gm@layouthoffset%
+ \advance\topmargin\Gm@layoutvoffset%
+ \addtolength\Gm@layoutheight{\Gm@bindingoffset}%
+}% end of \Gm@@process
+% log
+\def\Gm@logcontent#1{%
+ *geometry* verbose mode - [ #1 ] result:^^J%
+ \ifGm@pass * pass: disregarded the geometry package!^^J%
+ \else
+ * driver: \if\Gm@driver<none>\else\Gm@driver\fi^^J%
+ * paper: \ifx\Gm@paper\@undefined<default>\else\Gm@paper\fi^^J%
+ * layout: \ifGm@layout<custom>\else<same size as paper>\fi^^J%
+ \ifGm@layout
+ * layout(width,height): (\the\Gm@layoutwidth,\the\Gm@layoutheight)^^J%
+ \fi
+ * layoutoffset:(h,v)=(\the\Gm@layouthoffset,\the\Gm@layoutvoffset)^^J%
+ \@ifundefined{Gm@lines}{}{* lines: \Gm@lines^^J}%
+ \@ifundefined{Gm@hmarginratio}{}{* hratio: \Gm@hmarginratio^^J}%
+ \@ifundefined{Gm@vmarginratio}{}{* vratio: \Gm@vmarginratio^^J}%
+ \ifdim\Gm@bindingoffset=\z@\else
+ * bindingoffset: \the\Gm@bindingoffset^^J\fi
+ * modes: %
+ \Gm@showbool{landscape}%
+ \Gm@showbool{includehead}%
+ \Gm@showbool{includefoot}%
+ \Gm@showbool{includemp}%
+ \if@twoside twoside\space\fi%
+ \ifGm@ltj@layoutswitch\else\if@twoside asymmetric\space\fi\fi%
+ \Gm@showbool{heightrounded}%
+ \ifx\Gm@truedimen\@empty\else truedimen\space\fi%
+ \Gm@showbool{showframe}%
+ \Gm@showbool{showcrop}%
+ ^^J%
+ * h-part:(L,W,R)=(\Gm@lmargin, \Gm@height, \Gm@rmargin)^^J%
+ * v-part:(T,H,B)=(\Gm@tmargin, \Gm@width, \Gm@bmargin)^^J%
+ \fi
+ \Gm@showdim{\paperwidth}%
+ \Gm@showdim{\paperheight}%
+ \Gm@showdim{\textwidth}%
+ \Gm@showdim{\textheight}%
+ \Gm@showdim{\oddsidemargin}%
+ \Gm@showdim{\evensidemargin}%
+ \Gm@showdim{\topmargin}%
+ \Gm@showdim{\headheight}%
+ \Gm@showdim{\headsep}%
+ \Gm@showdim{\topskip}%
+ \Gm@showdim{\footskip}%
+ \Gm@showdim{\marginparwidth}%
+ \Gm@showdim{\marginparsep}%
+ \Gm@showdim{\columnsep}%
+ * \string\skip\string\footins=\the\skip\footins^^J%
+ \Gm@showdim{\hoffset}%
+ \Gm@showdim{\voffset}%
+ \Gm@showdim{\mag}%
+ * \string\@twocolumn\if@twocolumn true\else false\fi^^J%
+ * \string\@twoside\if@twoside true\else false\fi^^J%
+ * \string\@mparswitch\if@mparswitch true\else false\fi^^J%
+ * \string\@reversemargin\if@reversemargin true\else false\fi^^J%
+ * (1in=72.27pt=25.4mm, 1cm=28.453pt)^^J}%
+
+
+\Gm@initall
+\Gm@processconfig
+\ProcessOptionsKV[c]{Gm}%
+\Gm@setdefaultpaper
+\ProcessOptionsKV[p]{Gm}%
+\Gm@process
+
+%%% 終了
+\fi}
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-listings.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-listings.sty
new file mode 100644
index 0000000000..13f75e302e
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-listings.sty
@@ -0,0 +1,440 @@
+%
+% lltjp-listings.sty 2018-09-17
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\RequirePackage{listings,luatexbase-cctb}
+
+%%%%%%%%%%%%%%%% Japanese support
+%% whether letter-space in a fixed mode box is doubled or not
+\newif\if@ltj@lst@double
+\lst@Key{doubleletterspace}f[t]{\lstKV@SetIf{#1}\if@ltj@lst@double}
+
+%% IVS support
+\newif\if@ltj@lst@vsraw
+\def\ltj@lst@vscmd{}
+\lst@Key{vsraw}f[t]{\lstKV@SetIf{#1}\if@ltj@lst@vsraw}
+\lst@Key{vscmd}\relax{\def\ltj@lst@vscmd{#1}}
+
+% 既定の IVS 出力コマンド
+\def\ltjlistingsvsstdcmd#1{\@tempdima=\f@size pt%
+ \smash{\raisebox{.35\@tempdima}{\tt%
+ \fboxsep=.1\@tempdima\fbox{\fontsize{.5\@tempdima}{\z@}\selectfont
+ \oalign{\hss VS\hss\crcr\hss#1\hss\crcr}}}}}
+\def\ltj@lst@vscmd{\ltjlistingsvsstdcmd}
+
+% override \lst@FillFixed@
+% \ltj@hst@hss is \ltj@lst@hss@ivs or \ltj@lst@hss@normal,
+% according to vsraw = true or not.
+\def\lst@FillFixed@#1{%
+ \ifx\@empty#1\else\ltj@lst@hss#1\expandafter\lst@FillFixed@\fi}
+
+\directlua{
+ local cat_str = luatexbase.catcodetables['string']
+ local cat_lp = luatexbase.catcodetables['latex-package']
+ local ubyte = unicode.utf8.byte
+ local spccmd = string.char(0x5C) .. 'ltj@lst@hss@normal'
+ luatexja.listings = {}
+ function luatexja.listings.althss(t)
+ t = ubyte(t)
+ if not (t>=0xE0100 and t<0xE01F0) then
+ tex.sprint(cat_lp, spccmd)
+ end
+ end
+}
+\def\ltj@lst@hss@ivs#1{%
+ \directlua{luatexja.listings.althss('\luatexluaescapestring{#1}')}#1%
+}
+\def\ltj@lst@hss@double{\lst@hss\lst@hss}
+
+% lowest level
+\newif\if@ltj@lst@kanji
+\lst@AddToHook{InitVars}{\@ltj@lst@kanjifalse}
+
+\def\lst@AppendLetter{%
+ \ltj@lst@setletterflag\lst@Append}
+\def\lst@AppendOther{%
+ \lst@ifletter\lst@Output\lst@letterfalse\fi\@ltj@lst@kanjifalse
+ \futurelet\lst@lastother\lst@Append}
+
+\def\ltj@lst@setletterflag{%
+ \lst@ifletter
+ \if@ltj@lst@kanji\lst@Output\@ltj@lst@kanjifalse\fi
+ \else
+ \lst@lettertrue\if@ltj@lst@kanji\@ltj@lst@kanjifalse\else\lst@OutputOther\fi
+ \fi}
+
+\def\ltj@lst@setkanjiflag{%
+ \lst@ifletter
+ \lst@Output
+ \else
+ \if@ltj@lst@kanji\else\lst@OutputOther\fi\lst@lettertrue
+ \fi\@ltj@lst@kanjitrue}
+
+\def\ltj@lst@setopenflag{%
+ \lst@ifletter
+ \lst@letterfalse\lst@Output
+ \else
+ \if@ltj@lst@kanji\else\lst@OutputOther\fi
+ \fi\@ltj@lst@kanjitrue}
+
+\def\ltj@lst@setcloseflag{%
+ \lst@ifletter\else\lst@lettertrue\fi\@ltj@lst@kanjitrue}
+
+% Processing Japanese characters
+\def\ltj@lst@ProcessJALetter#1{%
+ \lst@whitespacefalse
+ \ifnum\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{`#1}}=0
+ \ifnum\ltjgetparameter{postbreakpenalty}{`#1}>0
+ \ltj@lst@setopenflag % 開き括弧類
+ \else
+ \ifnum\ltjgetparameter{prebreakpenalty}{`#1}>0
+ \ltj@lst@setcloseflag % 閉じ括弧類,句読点
+ \else
+ \ltj@lst@setkanjiflag % 通常の和文文字
+ \fi\fi
+ \advance\lst@length\@ne % 和文文字は通常の2倍の幅
+ \else
+ \ltj@lst@setletterflag
+ \fi
+ \lst@Append#1}
+
+% 半角カナ処理命令
+\def\ltj@lst@ProcessJALetterHalf#1{%
+ \lst@whitespacefalse
+ \ifnum\ltjgetparameter{jacharrange}{\ltjgetparameter{chartorange}{`#1}}=0
+ \ifnum\ltjgetparameter{postbreakpenalty}{`#1}>0
+ \ltj@lst@setopenflag % 開き括弧類
+ \else
+ \ifnum\ltjgetparameter{prebreakpenalty}{`#1}>0
+ \ltj@lst@setcloseflag % 閉じ括弧類
+ \else
+ \ltj@lst@setkanjiflag % 通常の和文文字
+ \fi\fi
+ % 半角カナは欧文文字と同じ幅
+ \else
+ \ltj@lst@setletterflag
+ \fi
+ \lst@Append#1}
+
+% 漢字用異体字セレクタ命令
+\def\ltj@lst@ProcessIVS#1{%
+ \lst@whitespacefalse
+ \if@ltj@lst@vsraw
+ \lst@Append#1\advance\lst@length\m@ne
+ \else
+ \lst@TrackNewLines\lst@OutputLostSpace \lst@PrintToken
+ \setbox\@tempboxa\hbox to 2\lst@width{\hss
+ \expandafter\expandafter\expandafter\ltj@lst@vscmd
+ \expandafter{\the\numexpr`#1-"E00EF\relax}%"
+ \hss}%
+ \lst@CalcLostSpaceAndOutput\lst@whitespacefalse
+ \fi
+}
+
+% Variation Selector
+\def\ltj@lst@ProcessVS#1{%
+ \lst@whitespacefalse
+ \if@ltj@lst@vsraw
+ \lst@Append#1\advance\lst@length\m@ne
+ \else
+ \lst@TrackNewLines\lst@OutputLostSpace \lst@PrintToken
+ \setbox\@tempboxa\hbox to 2\lst@width{\hss
+ \expandafter\expandafter\expandafter\ltj@lst@vscmd
+ \expandafter{\the\numexpr`#1-"FDFF\relax}%"
+ \hss}%
+ \lst@CalcLostSpaceAndOutput\lst@whitespacefalse
+ \fi
+}
+
+
+% 半角カナ,異体字セレクタはアクティブ化
+\def\ltj@@listing@jpsetN#1#2#3{% for (not large) range
+ \@tempcnta=\numexpr#1-1\relax\@tempcntb=\numexpr 1+#2\relax
+ \loop \global\advance\@tempcnta\@ne\ifnum\@tempcnta<\@tempcntb\relax
+ \ltj@@listing@jpsetN@{\@tempcnta}{#3}\repeat
+}
+
+\def\ltj@@listing@jpsetN@#1#2{{%
+ \@tempcnta=#1 \lccode`\~=\@tempcnta \lccode`\/=\@tempcnta
+ \lowercase{\gdef\@temp{\gdef~{#2/}}}}%
+ \@temptokena\expandafter\expandafter\expandafter\expandafter%
+ \expandafter\expandafter\expandafter{\expandafter\expandafter%
+ \expandafter\the\expandafter\@temptokena\@temp}%
+}
+\@temptokena{}
+\ltj@@listing@jpsetN{65377}{65439}{\ltj@lst@ProcessJALetterHalf}
+\ltj@@listing@jpsetN{65024}{65039}{\ltj@lst@ProcessVS}
+\ltj@@listing@jpsetN{917760}{917999}{\ltj@lst@ProcessIVS}
+\xdef\ltj@@listing@jpcmd{\the\@temptokena}\@temptokena{}
+
+% catcode 対策
+\newluatexcatcodetable\CatcodeTableLTJlistings
+\setluatexcatcodetable\CatcodeTableLTJlistings{%
+ \luatexcatcodetable\CatcodeTableLaTeXAtLetter
+ \catcode\ltjlineendcomment=13%"
+ \SetCatcodeRange{"FF61}{"FF9F}{13}% 半角カナ
+ \SetCatcodeRange{"E0100}{"E01EF}{13}% 漢字用異体字セレクタ
+ \SetCatcodeRange{"FE00}{"FE0F}{13}% Variation Selector
+}
+
+% redefine \lstinline and its inner commands to support Japanese characters
+\renewcommand\lstinline[1][]{%
+ \leavevmode\bgroup % \hbox\bgroup --> \bgroup
+ \def\lst@boxpos{b}%
+ \lsthk@PreSet\lstset{flexiblecolumns,#1}%
+ \lsthk@TextStyle
+ \@ifnextchar\bgroup \ltj@lst@InlineG \ltj@lstinline@}
+\def\ltj@lstinline@#1{%
+ \edef\ltj@lst@temp{\the\catcode`#1}\lst@Init\relax\catcode`#1\ltj@lst@temp
+ \lst@InlineJ#1}
+\def\ltj@lst@InlineG{%
+ \lst@Init\relax\edef\ltj@lst@temp{\the\catcode`\}}\catcode`\}=2 \catcode`\ =12\relax
+ \let\lst@arg\@empty\afterassignment\ltj@lst@InlineG@@\@temptokena}
+\def\ltj@lst@InlineG@@{%
+ \catcode`\}=\ltj@lst@temp%
+ \expandafter\expandafter\expandafter\lst@InsideConvert%
+ \expandafter{\the\@temptokena}\lst@arg\lst@DeInit\egroup}
+
+%%%%%%%%%%%%%%%% \lstMakeShortInline
+\patchcmd\lstMakeShortInline@{\lst@shortinlinedef#1}{\lst@shortinlinedef~}{}{}
+
+% We redefine \lst@BeginDropInput, since now we have
+% two additional `process macros'.
+\def\lst@BeginDropInput#1{%
+ \lst@EnterMode{#1}%
+ {\lst@modetrue
+ \let\lst@OutputBox\@gobble
+ \let\lst@ifdropinput\iftrue
+ \let\lst@ProcessLetter\@gobble
+ \let\lst@ProcessDigit\@gobble
+ \let\lst@ProcessOther\@gobble
+ \let\lst@ProcessSpace\@empty
+ \let\lst@ProcessTabulator\@empty
+ \let\lst@ProcessFormFeed\@empty
+ \let\ltj@lst@ProcessJALetter\@gobble % added
+ \let\ltj@lst@ProcessJALetterHalf\@gobble % added
+}}
+
+\directlua{
+ local utfchar, getcount = unicode.utf8.char, tex.getcount
+ luatexja.listings.insert_cb = function()
+ if not luatexja.listings.patched then
+ luatexja.listings.patched = 1
+ luatexbase.add_to_callback('process_input_buffer',
+ function(buf)
+ local ret = ''
+ for i = 1, utf.len(buf) do
+ local c = utf.sub(buf, i, i)
+ local cu = utf.byte(c)
+ if cu >= 0x80 and tex.getcatcode(cu) \string~= 13 then
+ ret = ret .. utfchar(getcount('ltjlineendcomment'))
+ end
+ ret = ret .. c
+ end
+ return ret
+ end, 'ltj.listings_unicode', 1)
+ end
+ end
+ luatexja.listings.remove_cb = function()
+ if luatexja.listings.patched then
+ luatexja.listings.patched = nil
+ luatexbase.remove_from_callback('process_input_buffer',
+ 'ltj.listings_unicode')%
+ end
+ end}
+
+% hook!
+\lst@AddToHook{Init}{%
+ \luatexcatcodetable\CatcodeTableLTJlistings\ltj@@listing@jpcmd
+ \lccode`\~=\ltjlineendcomment\lowercase{\def~{\ltj@lst@ProcessJALetter}}%"
+ \directlua{luatexja.listings.insert_cb()}%
+ \if@ltj@lst@double
+ \let\ltj@lst@hss@normal=\ltj@lst@hss@double
+ \else
+ \let\ltj@lst@hss@normal=\lst@hss
+ \fi
+ \if@ltj@lst@vsraw
+ \let\ltj@lst@hss=\ltj@lst@hss@ivs
+ \else
+ \let\ltj@lst@hss=\ltj@lst@hss@normal
+ \fi
+}
+
+\def\ltj@lst@MakeActive#1{%
+ \let\lst@temp\@empty \ltj@lst@MakeActive@#1\relax}
+\begingroup
+\catcode`\^^A=12
+\catcode`\^^@=\active
+\lccode`\$=\ltjlineendcomment \catcode`\$=13 %"
+\lowercase{%
+\gdef\ltj@lst@MakeActive@#1{\let\lst@next\relax%
+ \ifx#1\relax
+ \else\let\lst@next\ltj@lst@MakeActive@
+ \ifnum`#1>127
+ \lccode`\^^A=`#1
+ \lowercase{\lst@lAddTo\lst@temp{$^^A}}%$
+ \else
+ \lccode`\^^@=`#1
+ \lowercase{\lst@lAddTo\lst@temp{^^@}}%
+ \fi\fi\lst@next}}
+\endgroup
+
+
+\begingroup \lccode`\~=`\ \relax \lowercase{%
+\gdef\lst@InsideConvert@#1 #2{%
+ \ltj@lst@MakeActive{#1}%
+ \ifx\@empty#2%
+ \lst@lExtend\lst@arg{\lst@temp}%
+ \else
+ \lst@lExtend\lst@arg{\lst@temp~}%
+ \expandafter\lst@InsideConvert@
+ \fi#2}
+}\endgroup
+
+\lst@AddToHook{ExitVars}{%
+ \directlua{luatexja.listings.remove_cb()}%
+}
+
+% 白線対策
+\newif\ifltj@lst@frame@top
+\newdimen\ltj@lst@frame@lslimit
+\gdef\lst@frameInit{%
+ \ltj@lst@frame@toptrue
+ \ifx\lst@framelshape\@empty \let\lst@frameL\@empty \fi
+ \ifx\lst@framershape\@empty \let\lst@frameR\@empty \fi
+ \def\lst@framevrule{\vrule\@width\lst@framerulewidth\relax}%
+ \lst@ifframeround
+ \lst@frameCalcDimA\z@ \@getcirc\@tempdima
+ \@tempdimb\@tempdima \divide\@tempdimb\tw@
+ \advance\@tempdimb -\@wholewidth
+ \edef\lst@frametextsep{\the\@tempdimb}%
+ \edef\lst@framerulewidth{\the\@wholewidth}%
+ \lst@frameCalcDimA\@ne \@getcirc\@tempdima
+ \@tempdimb\@tempdima \divide\@tempdimb\tw@
+ \advance\@tempdimb -\tw@\@wholewidth
+ \advance\@tempdimb -\lst@frametextsep
+ \edef\lst@rulesep{\the\@tempdimb}%
+ \fi
+ \lst@frameMakeBoxV\lst@framebox{\ht\strutbox}{\dp\strutbox}%
+ %%%% ここから
+ \@tempdima\z@
+ \ifdim\ht\strutbox<\cht\@tempdima=\dimexpr\cht-\ht\strutbox\relax\fi
+ \ifdim\dp\strutbox<\cdp\@tempdima=\dimexpr\cdp-\dp\strutbox\relax\fi
+ \ltj@lst@frame@lslimit=-\@tempdima
+ \def\lst@framelr{%
+ \ifltj@lst@frame@top\ltj@lst@frame@topfalse\else\lineskiplimit\ltj@lst@frame@lslimit\fi
+ \copy\lst@framebox}%
+ %%%% ここまで
+ \ifx\lst@frametshape\@empty\else
+ \lst@frameH T\lst@frametshape
+ \ifvoid\z@\else
+ \par\lst@parshape
+ \@tempdima-\baselineskip \advance\@tempdima\ht\z@
+ \ifdim\prevdepth<\@cclvi\p@\else
+ \advance\@tempdima\prevdepth
+ \fi
+ \ifdim\@tempdima<\z@
+ \vskip\@tempdima\vskip\lineskip
+ \fi
+ \noindent\box\z@\par
+ \lineskiplimit\maxdimen \lineskip\z@
+ \fi
+ \lst@frameSpreadV\lst@framextopmargin
+ \fi}
+
+
+
+%%%%%%%%%%%%%%%% escape to \LaTeX
+\lstloadaspects{escape}
+\gdef\lst@Escape#1#2#3#4{%
+ \lst@CArgX #1\relax\lst@CDefX
+ {}%
+ {\lst@ifdropinput\else
+ \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken
+ \lst@InterruptModes
+ \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}%
+ \ifx\^^M#2%
+ \lst@CArg #2\relax\lst@ActiveCDefX
+ {}%
+ {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes}%
+ {\lst@MProcessListing}%
+ \else
+ \lst@CArg #2\relax\lst@ActiveCDefX
+ {}%
+ {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes
+ \lst@newlines\z@ \lst@whitespacefalse}%
+ {}%
+ \fi%
+ \ltj@lst@escape@setup#2%
+ #3\catcode\ltjlineendcomment=9\lst@escapebegin\expandafter\lst@next%"
+ \fi}%
+ {}}
+\def\ltj@lst@emptygrp{{}}
+\def\ltj@lst@escape@setup#1{%
+ \begingroup\lccode`\~=`#1\lowercase{%
+ \gdef\lst@next##1~{%
+ \let\lst@arg\@empty\ltj@lst@remove@jacmd{##1}%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
+ \scantokens\expandafter\expandafter\expandafter{\expandafter\ltj@lst@emptygrp\lst@arg\empty}%
+ ~}%
+ }\endgroup
+}
+\begingroup
+ \lccode`\|=\ltjlineendcomment \lowercase{%"
+ \gdef\ltj@lst@remove@jacmd#1{%
+ \expandafter\ltj@lst@remove@jacmd@\detokenize{#1}|\@nil|}
+ \gdef\ltj@lst@remove@jacmd@#1|{%
+ \ifx#1\@nil\else
+ \lst@lAddTo\lst@arg{#1}%
+ \expandafter\ltj@lst@remove@jacmd@
+ \fi}}
+\endgroup
+
+%%%%%%%%%%%%%%%% texcl
+\lst@AddToHook{AfterBeginComment}
+ {\ifnum\lst@mode=\lst@TeXLmode
+ \catcode`\^^M=13\relax
+ \catcode\ltjlineendcomment=9\relax
+ \fi}
+
+%%%%%%%%%%%%%%%%
+\lstloadaspects{writefile}
+\begingroup \catcode`\^^I=11
+\gdef\lst@WFBegin#1#2{%
+ \begingroup
+ \let\lst@OutputBox#1%
+ \def\lst@Append##1{%
+ \advance\lst@length\@ne
+ \expandafter\lst@token\expandafter{\the\lst@token##1}%
+ \ifx ##1\lst@outputspace \else
+ \lst@WFAppend##1%
+ \fi}%
+ \lst@lAddTo\lst@PreGotoTabStop{\lst@WFAppend{^^I}}%
+ \lst@lAddTo\lst@ProcessSpace{\lst@WFAppend{ }}%
+ \def\ltj@lst@ProcessIVS##1{\lst@whitespacefalse\lst@Append##1}%
+ \def\ltj@lst@ProcessVS##1{\lst@whitespacefalse\lst@Append##1}%
+ \let\lst@DeInit\lst@WFDeInit
+ \let\lst@MProcessListing\lst@WFMProcessListing
+ \lst@WFifopen\else
+ \immediate\openout\lst@WF=#2\relax
+ \global\let\lst@WFifopen\iftrue
+ \@gobbletwo\fi\fi
+ \fi}
+\endgroup
+
+
+% \begin{修正事項}{1.3} from jlisting.sty
+% ちょっとした修正
+\gdef\lst@breakProcessOther#1{\lst@ProcessOther#1}
+% ソースコード目次における文字と番号の空き
+\let \l@lstlisting = \l@figure
+
+%%%%
+% キャプションとソースコード目次に対する日本語対応
+%\def\lstlistingname{ソースコード}
+%\def\lstlistlistingname{ソースコード目次}
+% \end{修正事項}
+%%%%
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-microtype.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-microtype.sty
new file mode 100644
index 0000000000..db2fac8481
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-microtype.sty
@@ -0,0 +1,67 @@
+%
+% lltjp-microtype.sty 2019-08-12
+%
+% (Work in Progress)
+%
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{etoolbox}
+\makeatletter
+
+\def\MT@register@font{%
+ \xdef\MT@font@list{\expandonce{\MT@font@list\MT@font},}% !!!
+}
+\def\MT@register@subst@font{\MT@exp@one@n\MT@in@clist\font@name\MT@font@list
+ \ifMT@inlist@\else
+ \xdef\MT@font@list{\expandonce{\MT@font@list\font@name},}% !!!
+ \fi}
+\let\ltj@MT@tracking@\MT@tracking@
+\def\MT@tracking@{%
+ \MT@exp@one@n\MT@in@clist\MT@font\MT@tr@font@list
+ \ifMT@inlist@\else
+ \MT@maybe@do{tr}%
+ \ifMT@do\else
+ \xdef\MT@tr@font@list{\expandonce{\MT@tr@font@list\MT@font,}}% !!!
+ \fi
+ \fi
+}
+\ifx\MT@tracking\ltj@MT@tracking@\let\MT@tracking\MT@tracking@\fi
+
+
+%\endinput
+\begingroup
+ \catcode`\/=\z@
+ /MT@map@tlist@n{/\LτJCHAREX}/@makeother /lccode`/τ=`/t
+ /lowercase{%
+ /def/x{/endgroup
+ /def/MT@charstring{\CHAR"}%
+ /def/MT@is@char##1\CHAR"##2##3##4/relax{%
+ %/message{MIC <##1><##2><##3><##4>}%
+ /ifx/relax##4/relax
+ /expandafter/MT@is@char@ltja/MT@strip@prefix##1>/relax\LτJALCHAR\LτJALCHAR/relax
+ /else
+ /ifx/relax##1/relax
+ /if##3\/relax
+ /edef/MT@char@{/number"##2}%
+ /MT@ifstreq/MT@charstring{##3##4}/relax/MT@norestfalse
+ /else
+ /edef/MT@char@{/number"##2##3}%
+ /MT@ifstreq/MT@charstring{##4}/relax
+ {/MT@is@xchar##2##3|##4\CHAR"/relax}%
+ /fi
+ /fi
+ /fi
+ }%
+ /def/MT@ltjs@drop@##1>##2/relax{##1}%
+ /def/MT@is@char@ltja##1\LτJALCHAR##2\LτJALCHAR##3/relax{%
+ %/typeout{MICLTJA <##1><##2><##3>}%
+ /ifx/relax##1/relax
+ /ifx/relax##2/relax/else
+ /edef/MT@char@{/expandafter/number/MT@ltjs@drop@##2>/relax}%
+ /fi
+ /fi
+ }%
+ }%
+ }
+/x
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-preview.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-preview.sty
new file mode 100644
index 0000000000..00602884ea
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-preview.sty
@@ -0,0 +1,22 @@
+%
+% lltjp-preview.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjp-preview}[2018/01/20 Patch to preview for LuaTeX-ja]
+
+\RequirePackage{etoolbox,preview}
+\newbox\ltj@preview@box
+
+\patchcmd\pr@endbox{%
+ \pr@ship@end
+}{%
+ \setbox\ltj@preview@box=\box\AtBeginShipoutBox
+ \setbox\AtBeginShipoutBox=\vbox{\yoko\box\pr@box}%
+ \directlua{luatexja.direction.finalize()}%
+ \setbox\pr@box=\box\AtBeginShipoutBox
+ \setbox\AtBeginShipoutBox=\box\ltj@preview@box
+ \pr@ship@end
+}{}{}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty
new file mode 100644
index 0000000000..c6bebc36cd
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-siunitx.sty
@@ -0,0 +1,96 @@
+%
+% lltjp-siunitx.sty 2019-06-06
+%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{siunitx}
+\makeatletter
+\ExplSyntaxOn
+\cs_generate_variant:Nn \tl_if_in:NnT { coT }
+\cs_new:Nn \__ltj_siunix_patch_inner:n {
+ \cs_if_exist:cT { #1_tl } {
+ \tl_if_in:coT { #1_tl } { \tex_char:D } {
+ \tl_replace_all:cnn { #1_tl } { \tex_char:D } { \ltjalchar }
+ }
+ }
+}
+\cs_new:Nn \__ltj_siunix_patch_inner_math:n {
+ \__ltj_siunix_patch_inner:n { l__siunitx_#1_math }
+ \__ltj_siunix_patch_inner:n { l__siunitx_#1_text }
+}
+\AtBeginDocument {
+ \__ltj_siunix_patch_inner:n { c__siunitx_minus }
+ \__ltj_siunix_patch_inner:n { c__siunitx_mu }
+ \__ltj_siunix_patch_inner_math:n { angstrom }
+ \__ltj_siunix_patch_inner_math:n { arcminute }
+ \__ltj_siunix_patch_inner_math:n { arcsecond }
+ \__ltj_siunix_patch_inner_math:n { ohm }
+}
+
+%%%% new table column: S and s
+\bool_new:N \l__ltj_siunitx_table_collect_relax_bool
+\cs_set_protected:Npn \__siunitx_table_collect_begin_s: {
+ \bool_set_false:N \l__ltj_siunitx_table_collect_relax_bool
+ \cs_set_eq:NN \__siunitx_table_collect_token:N
+ \__siunitx_table_collect_token_s:N
+ \cs_set_eq:NN \__siunitx_table_print: \__siunitx_table_print_s:
+ \__siunitx_table_collect_init_s:
+ \__siunitx_table_collect_get:
+}
+
+\cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1
+ {
+ \token_if_eq_meaning:NNTF #1 \tex_relax:D {
+ \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool {
+ \__siunitx_table_collect_not_braced_aux_i:N #1
+ } {
+ \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool
+ }
+ } {
+ \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd {
+ \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue {
+ \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D
+ {
+ \token_if_eq_meaning:NNF #1 \tex_unskip:D
+ { \__siunitx_table_collect_not_braced_aux_i:N #1 }
+ }
+ }}}
+ \__siunitx_table_collect_next:
+ }
+
+\AtBeginDocument
+ {
+ \@ifpackageloaded { mdwtab }
+ {
+ \cs_set_protected:Npn \__siunitx_table_collect_not_braced:N #1
+ {
+ \token_if_eq_meaning:NNTF #1 \tex_relax:D {
+ \bool_if:NTF \l__ltj_siunitx_table_collect_relax_bool {
+ \__siunitx_table_collect_not_braced_aux_i:N #1
+ } {
+ \bool_set_true:N \l__ltj_siunitx_table_collect_relax_bool
+ }
+ } {
+ \token_if_eq_meaning:NNF #1 \ltjfakeboxbdd {
+ \token_if_eq_meaning:NNF #1 \pltx@next@inhibitglue {
+ \token_if_eq_meaning:NNF #1 \tex_ignorespaces:D
+ {
+ \token_if_eq_meaning:NNF #1 \tex_unskip:D
+ {
+ \token_if_eq_meaning:NNF #1 \tab@setcr
+ {
+ \token_if_eq_meaning:NNF #1 \@maybe@unskip
+ { \__siunitx_table_collect_not_braced_aux_i:N #1 }
+ }
+ }
+ }
+ }}}
+ \__siunitx_table_collect_next:
+ }
+ }
+ { }
+ }
+
+\ExplSyntaxOff
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-stfloats.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-stfloats.sty
new file mode 100644
index 0000000000..e7535bd7e1
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-stfloats.sty
@@ -0,0 +1,27 @@
+%
+% lltjp-stfloats.sty 2017-05-05
+%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{stfloats}
+\RequirePackage{etoolbox}
+
+\newif\ifltj@stfloats@fnbelowfloat
+\let\ltj@fn@makecol=\fn@makecol
+\ifx\@makecol\ltj@fn@makecol\ltj@stfloats@fnbelowfloattrue\fi % \fnbelowfloat 発行済
+\let\ltj@fn@makecol=\relax
+\global\let\org@makecol\ltj@orig@makecol
+
+\patchcmd\fn@makecol{\vskip -\dimen@\@textbottom}%
+ {\ifnum\ltjgetparameter{direction}=4\else\vbox{\hskip\z@}\fi %%% LuaTeX-ja
+ \vskip -\dimen@
+ \ifltj@ftn@unvboxed\iffnfixbottom\else\@textbottom\fi\else\@textbottom\fi}{}{}
+\patchcmd\fn@makecol{\vskip\skip\footins}{\iffnfixbottom\vskip\z@\@plus.0001fil\fi\vskip\skip\footins}{}{}
+\patchcmd\fn@makecol{\ifvoid\footins}{\ifvoid\footins\ltj@ftn@unvboxedfalse}{}{}
+\patchcmd\fn@makecol{\setbox\@outputbox \vbox}{\ltj@ftn@unvboxedtrue\setbox\@outputbox \vbox}{}{}
+
+\ifltj@stfloats@fnbelowfloat
+ \global\let\@makecol\fn@makecol
+\fi
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-tascmac.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-tascmac.sty
new file mode 100644
index 0000000000..d0ac424701
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-tascmac.sty
@@ -0,0 +1,142 @@
+%
+% lltjp-tascmac.sty
+% based on tascmac.sty [2016/04/15 v2.0b (community edition)]
+% \tbaselineshift=\z@ ==> \ltj@tablshift=\z@
+% \ybaselineshift=\z@ ==> \ltj@yablshift=\z@
+% \dimen...=\tbaselineshift ==> \dimen...=\ltj@tablshift sp
+% \dimen...=\ybaselineshift ==> \dimen...=\ltj@yablshift sp
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjp-tascmac}[2017/12/23 Patch to (t)ascmac for LuaTeX-ja]
+
+\RequirePackage{tascmac}
+
+%% use Type1 font for ascgrp
+\pdfextension mapline{+ascgrp <ascgrp.pfb}
+
+%% oval command
+\def\ascmac@parse@ovarg#1{%
+ \ifnum\ltjgetparameter{direction}=3\relax
+ \def\ascmac@ovarg{}%
+ \@tfor\reserved@a:=#1\do{%
+ \if l\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg t}%
+ \else\if t\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg r}%
+ \else\if r\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg b}%
+ \else\if b\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg l}%
+ \fi\fi\fi\fi}%
+ \else
+ \def\ascmac@ovarg{#1}%
+ \fi
+}
+
+%% boxnote environment
+\def\boxnote{\par\vspace{.3\baselineskip}%
+ \@saveybaselineshift\ltj@yablshift sp\ltj@yablshift\z@
+ \@savetbaselineshift\ltj@tablshift sp\ltj@tablshift\z@
+ \setbox\@nbox=\hbox{\@ascgrp\vrule width1.08pt depth35pt b\hss a\hss b}
+ \@whiledim \wd\@nbox<\hsize \do{
+ \setbox\@nbox=\hbox{\@ascgrp\unhbox\@nbox \hss a\hss b}}
+ \setbox\@nbox=\hbox to\hsize{\@ascgrp\unhbox\@nbox \hss a\hss b%
+ \vrule width1.08pt depth35pt}
+ \@bw=\wd\@nbox\advance\@bw -40pt
+ \begin{lrbox}{\@nbody}\begin{minipage}{\@bw}% (KN:1998/02/27)
+ \ltj@yablshift\@saveybaselineshift \ltj@tablshift\@savetbaselineshift}%
+
+%% screen environment
+\def\screen{%
+ \@saveybaselineshift\ltj@yablshift sp\ltj@yablshift\z@
+ \@savetbaselineshift\ltj@tablshift sp\ltj@tablshift\z@
+ \@ifnextchar[{\@screen}{\@screen[0]}}
+\def\@screen[#1]{\ifcase#1\def\@r{20}\def\@s{9.8pt}\def\@sx{10pt}\or
+ \def\@r{18}\def\@s{8.8pt}\def\@sx{9pt}\or
+ \def\@r{16}\def\@s{7.8pt}\def\@sx{8pt}\or
+ \def\@r{14}\def\@s{6.8pt}\def\@sx{7pt}\or
+ \def\@r{12}\def\@s{5.8pt}\def\@sx{6pt}\or
+ \def\@r{10}\def\@s{4.8pt}\def\@sx{5pt}\or
+ \def\@r{8}\def\@s{3.8pt}\def\@sx{4pt}\or
+ \def\@r{6}\def\@s{2.8pt}\def\@sx{3pt}\else
+ \def\@r{4}\def\@s{1.8pt}\def\@sx{2pt}\fi
+ \par\vspace{.3\baselineskip}\@scw\linewidth \advance\@scw -\@r pt
+ \setbox\scb@x=\hbox to\@scw\bgroup\begin{minipage}{\@scw}% (KN:1998/02/27)
+ \ltj@yablshift\@saveybaselineshift \ltj@tablshift\@savetbaselineshift}%
+
+%% itembox environment
+\def\@itembox[#1]#2{%
+ \@saveybaselineshift\ltj@yablshift sp\ltj@yablshift\z@
+ \@savetbaselineshift\ltj@tablshift sp\ltj@tablshift\z@
+ \par\vspace{.3\baselineskip}%
+ \setbox\@iboxstr=\hbox{%
+ \ltj@yablshift\@saveybaselineshift \ltj@tablshift\@savetbaselineshift #2}%
+ \@itemh\ht\@iboxstr\advance\@itemh\dp\@iboxstr
+ \vspace{.5\@itemh}\bgroup\@scw\linewidth
+ \advance\@scw-20pt\@iboxpos={#1}%
+ \setbox\scb@x=\hbox to\@scw\bgroup\begin{minipage}{\@scw}%
+ \ltj@yablshift\@saveybaselineshift
+ \ltj@tablshift\@savetbaselineshift
+ \vspace*{.5\@itemh}}%
+
+%% \keytop
+\def\@keytop[#1]#2{%
+ {\setbox0=\hbox{\shortstack{#2}}\ltj@yablshift\z@\ltj@tablshift\z@%
+ \dimen0=\wd0\advance\dimen0 5pt\dimen1=\dp0\advance\dimen1 2.5pt%
+ \setbox\scscb@x=\hbox to\dimen0{%
+ \@scw\wd0\hfil\vtop{\offinterlineskip
+ \thinlines\setlength{\unitlength}{1pt}\hrule\kern2.3pt\@hobox{tl}{tr}5%
+ \kern-2.4pt\box0\@hobox{bl}{br}5\kern-.4pt\hrule}\hfil}%
+ \dimen0=\dp\scscb@x\advance\dimen0 -.4pt
+ \setbox0=\vbox{\hbox{\hbox to.2pt{\vtop to\dimen0{\@vrf@{2.3pt}{.4pt}}\hss}%
+ \box\scscb@x\hbox to.2pt{\hss\vtop to\dimen0{\@vrf@{2.3pt}{.4pt}}}}}%
+ \if #1c\mbox{}$\vcenter{\box0}$\mbox{}\else
+ \if #1t\else\if #1b\boxmaxdepth=0pt\else
+ \boxmaxdepth=\dimen1\fi\fi \mbox{}\vbox{\box0}\fi}}
+
+%% \mask
+\def\mask#1#2{{\setbox\@bwsp=\hbox{#1}%
+ \setbox0=\hbox{\ltj@yablshift\z@\ltj@tablshift\z@ \@ascgrp#2}%
+ \dimen0=\wd\@bwsp\dimen1=\ht\@bwsp\advance\dimen1\dp\@bwsp\dimen2=-\dimen1
+ \setdim@{\dimen0}{\wd0}\setdim@{\dimen1}{\ht0}%
+ \setbox\@@bwsp=\hbox to\dimen0{\leaders
+ \vtop to\dimen1{\leaders\box0\vfil}\hfil}%
+ \advance\dimen2\dp\@@bwsp\divide\dimen2 2
+ \advance\dimen2\dp\@bwsp\boxmaxdepth=\dimen2
+ \setbox\@@bwsp=\vbox{\box\@@bwsp}%
+ \mbox{}\hbox to\wd\@@bwsp{\hbox to0pt{\box\@@bwsp\hss}\hss\unhbox\@bwsp\hss}}}
+
+%% \maskbox
+\def\Maskbox#1#2#3#4#5#6{{%
+ \setbox0=\hbox{\ltj@yablshift\z@\ltj@tablshift\z@ \@ascgrp#3}%
+ \dimen0=#1\@setdim{\dimen0}{\wd0}\dimen1=#2\@setdim{\dimen1}{\ht0}%
+ \ifx#4c\skip0=0pt plus1fil\skip1=\skip0\fi
+ \ifx#4r\skip0=0pt plus1fil\skip1=0pt\fi
+ \ifx#4l\skip1=0pt plus1fil\skip0=0pt\fi
+ \leavevmode
+ \hbox{\hbox to0pt{\hbox to\dimen0{\leaders\vbox to\dimen1{\leaders
+ \box0\vfil}\hfil}\hss}%
+ \vrule width#5\vbox to\dimen1{\hrule height#5\vfil
+ \dimen3=#5\advance\dimen0-2\dimen3\advance\dimen0 .15pt
+ \hbox to\dimen0{\hskip\skip0\relax#6\hskip\skip1}%
+ \vfil\hrule height#5}\vrule width#5}}}
+
+%% shadebox environment
+\def\shadebox{\par\vspace{.3\baselineskip}%
+ \@saveybaselineshift\ltj@yablshift sp\ltj@yablshift\z@
+ \@savetbaselineshift\ltj@tablshift sp\ltj@tablshift\z@
+ \dimen0\linewidth \advance\dimen0-20pt
+ \advance\dimen0-2\fboxrule \advance\dimen0-\shaderule
+ \setbox\@tempboxa=\hbox\bgroup\minipage{\dimen0}%
+ \ltj@yablshift\@saveybaselineshift \ltj@tablshift\@savetbaselineshift}
+
+%% \yen
+%
+% \changes{1996/03/13}{v1.1}{Append \cs{leavevmode} in
+% \cs{yen}, \cs{return}, \cs{Return} command.}
+%
+\def\yen{\leavevmode\hbox{\yoko%
+\setbox0=\hbox{Y}Y\kern-.97\wd0\vbox{\hrule height.1ex width.98\wd0
+\kern.33ex\hrule height.1ex width.98\wd0\kern.45ex}}}
+%
+%% return-key
+\def\return{\leavevmode\hbox{\yoko\@ascgrp\char"20}}
+\def\Return{\leavevmode\hbox{\yoko\@ascgrp @}}
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty
new file mode 100644
index 0000000000..d8c4055d14
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-unicode-math.sty
@@ -0,0 +1,87 @@
+%
+% lltjp-unicode-math.sty 2018-10-09
+%
+
+\NeedsTeXFormat{LaTeX2e}
+
+\RequirePackage{unicode-math,etoolbox}
+
+\ExplSyntaxOn
+
+\cs_set:Nn \__um_define_math_chars: {
+ \group_begin:
+ \cs_set:Npn \__um_sym:nnn ##1##2##3
+ {
+ \ltjsetmathletter{ ##1 }
+ \tl_if_in:nnT
+ { \mathord \mathalpha \mathbin \mathrel \mathpunct \mathop \mathfence }
+ {##3}
+ {
+ \exp_last_unbraced:NNx \cs_gset_eq:NN ##2 { \char_generate:nn {##1} {12} }
+ }
+ }
+ \__um_input_math_symbol_table:
+ \group_end:
+}
+\unless\ifltj@disablejfam
+\cs_set:Npn \use@mathgroup #1 #2
+{
+ %\typeout{UM <#1><#2>}
+ \mode_if_math:T % <- not sure
+ {
+ \math@bgroup
+ \cs_if_eq:cNF {M@\f@encoding} #1 {#1}
+ \__um_switchto_literal:
+ \ltj@tempcnta=#2 \expandafter\ltj@@mathJapaneseFonts\string#1\relax%
+ \ifin@ \jfam #2 \relax \else \mathgroup #2 \relax \fi
+ \math@egroup
+ }
+}
+\fi
+
+\ifcsname jsc@mag@xrealtrue \endcsname \else
+ \expandafter\expandafter\expandafter \ExplSyntaxOff \expandafter \endinput
+\fi
+\ifjsc@mag@xreal
+ \cs_if_exist:cTF { ltjs@orig@get@external@font } {
+ % ltjsclasses: use lua
+ \cs_new:Nn \lltjp_um_unmag_fsize:
+ {
+ \cs_gset:Nx \lltjp_um_f@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\f@size)}}
+ \cs_gset:Nx \lltjp_um_sf@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\sf@size)}}
+ \cs_gset:Nx \lltjp_um_ssf@size: {\directlua{luatexja.ltjs_unmagnify_fsize(\ssf@size)}}
+ }
+ }{
+ % bxjscls: use \jsc@preadjust@extract@font
+ \cs_new:Nn \lltjp_um_unmag_fsize:
+ {
+ \group_begin:
+ \jsc@preadjust@extract@font
+ \cs_gset_eq:NN \lltjp_um_f@size: \f@size
+ \group_end:
+ \group_begin:
+ \cs_set_eq:NN \f@size \sf@size \jsc@preadjust@extract@font
+ \cs_gset_eq:NN \lltjp_um_sf@size: \f@size
+ \group_end:
+ \group_begin:
+ \cs_set_eq:NN \f@size \ssf@size \jsc@preadjust@extract@font
+ \cs_gset_eq:NN \lltjp_um_ssf@size: \f@size
+ \group_end:
+ }
+ }
+ \pretocmd { \__um_fontspec_select_font: } {
+ \cs_set_eq:NN \lltjp_um_orig_fsize: \f@size
+ \lltjp_um_unmag_fsize:
+ \cs_set_eq:NN \f@size \lltjp_um_f@size:
+ \cs_set_eq:NN \tf@size \lltjp_um_f@size:
+ \cs_set_eq:NN \sf@size \lltjp_um_sf@size:
+ \cs_set_eq:NN \ssf@size \lltjp_um_ssf@size:
+ } {} {}
+ \apptocmd { \__um_fontspec_select_font: } {
+ \cs_set_eq:NN \f@size \lltjp_um_orig_fsize:
+ } {} {}
+\fi
+
+\ExplSyntaxOff
+
+\endinput
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjp-xunicode.sty b/macros/luatex/generic/luatexja/src/patches/lltjp-xunicode.sty
new file mode 100644
index 0000000000..3d6e49fbaa
--- /dev/null
+++ b/macros/luatex/generic/luatexja/src/patches/lltjp-xunicode.sty
@@ -0,0 +1,99 @@
+%
+% lltjp-xunicode.sty
+%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lltjp-xunicode}[2017/05/05 Patch to xunicode for LuaTeX-ja]
+
+\def\XeTeXpicfile{}
+\RequirePackage{xunicode}
+{\catcode`\"=12
+\gdef\check@hexcom@digits@#1#2#3#4#5@!@#6#7#8{%
+ \ifx @#4\relax
+ \UTFacc@warning@{insufficient hex digits #7 for #6-\string#8}%
+ \else
+ \ifcat \active\noexpand#8%
+ \ifx\add@flag\@ne %
+ \expandafter\def\csname\UTFencname\string#8\endcsname{\ltjalchar"#1#2#3#4\relax}%
+ \ifx\unDeFiNed@#8%
+ \ifx\cf@encoding\UTFencname
+ \DeclareTextCommand{#8}{OT1}{\undefined}%
+ \else
+ \DeclareTextCommand{#8}{\cf@encoding}{\undefined}%
+ \fi
+ \else {% macro #8 exists already ...
+ \let\protect\noexpand
+ \edef\UTF@testi{#8}\def\UTF@testii{#8}%
+ \ifx\UTF@testi\UTF@testii\aftergroup\UTF@ignore
+ \else\aftergroup\UTF@doit\fi
+ }%
+ \iffalse
+ % ... but when it isn't robust, make it so
+ \expandafter\let\csname?-\string#8\endcsname#8\relax
+ \edef\next@UTF@{{\cf@encoding}%
+ {\expandafter\noexpand\csname?-\string#8\endcsname}}%
+ \expandafter\DeclareTextCommand\expandafter
+ {\expandafter#8\expandafter}\next@UTF@
+ \fi
+ \fi %
+ \else % \add@flag \z@
+ \expandafter\global\expandafter
+ \let\csname\UTFencname\string#8\endcsname\relax
+ \fi % end of \add@flag switch
+ \else % not active catcode --- shouldn't happen
+ % \typeout{*** did you really mean #8 ? ***}%
+ \ifx\add@flag\@ne %
+ \edef\tmp@name{\expandafter\string\csname\UTFencname\endcsname
+ \expandafter\string\csname#8\endcsname}%
+ \expandafter\def\csname\tmp@name\endcsname{\ltjalchar"#1#2#3#4\relax}%
+ \ifx\cf@encoding\UTFencname
+ \expandafter\DeclareTextCommand\expandafter
+ {\csname#8\endcsname}{OT1}{\undefined}%
+ \else
+ \expandafter\DeclareTextCommand\expandafter
+ {\csname#8\endcsname}{\cf@encoding}{\undefined}%
+ \fi
+ \else % \add@flag \z@
+ \expandafter\global\expandafter\let\csname#8\endcsname\relax
+ \fi % end of \add@flag switch
+ \fi % end of \ifcat
+ \fi}
+\gdef\check@hex@digits@#1#2#3#4#5@!@#6#7#8#9{%
+ \ifx @#4\relax
+ \UTFacc@warning@{insufficient hex digits #7 for #6-\string#8#9}%
+ \else
+ \def\UTFchar{\ltjalchar"#1#2#3#4\relax}%
+ \expandafter\expandafter\expandafter\declare@utf@composite
+ \expandafter\expandafter\expandafter
+ {\expandafter\csname#6\endcsname}{\UTFchar}{#8}{#9}\relax
+ \fi}
+\gdef\add@UTF@accent#1#2#3{\ifx\relax#2\relax\ltjalchar"#3\else
+ \ifx\ #2\relax\ltjalchar"#3\else
+ \expandafter\ifx\UTF@space#2\relax\ltjalchar"#3\else
+ \ifx~#2\ltjalchar"#3\else#2\ltjalchar"#1\fi\fi\fi\fi\relax}
+\gdef\add@UTF@accents#1#2#3{#2\ltjalchar"#1\ltjalchar"#3\relax}
+}
+% If unicode-math is already loaded, the following error occurs:
+% ! Undefined control sequence.
+% \hbar ->\hslash
+% Therefore temporarily set \hbar=\relax.
+\let\ltj@tmpa\hbar
+\let\hbar\relax
+
+\let\ltj@tmpb\iftipaonetoken
+\let\iftipaonetoken\relax
+%\typeout{UTFencname: \UTFencname}
+\let\ltj@temp=\@temp
+\edef\@temp{\noexpand\ReloadXunicode{\UTFencname}}\@temp
+\makeatletter
+\let\@temp=\ltj@temp\let\ltj@temp\relax
+\let\hbar\ltj@tmpa
+\let\iftipaonetoken\ltj@tmpb
+\let\ltj@tmpb\relax % no more an if-token
+
+%% ticket 30501
+{\catcode`\!0\catcode`\\11!catcode`!2 11!catcode`!?11!catcode`!-11
+ !expandafter!gdef!csname!UTFencname \nobreakspace!endcsname{!?-\nobreakspace}%
+}
+
+\endinput