diff options
Diffstat (limited to 'macros/luatex/generic/luatexja/src/patches/lltjfont.sty')
-rw-r--r-- | macros/luatex/generic/luatexja/src/patches/lltjfont.sty | 237 |
1 files changed, 164 insertions, 73 deletions
diff --git a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty index 69ab7441c2..e5f79a8c44 100644 --- a/macros/luatex/generic/luatexja/src/patches/lltjfont.sty +++ b/macros/luatex/generic/luatexja/src/patches/lltjfont.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjfont}[2020/03/20 Patch to NFSS2 for LuaTeX-ja] +\ProvidesPackage{lltjfont}[2020-04-12 Patch to NFSS2 for LuaTeX-ja] %% patching \DeclareTextComposite \def\ltj@chardef@text@cmd#1{% @@ -83,11 +83,31 @@ \DeclareRobustCommand\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% + + +\newluafunction\ltj@@add@fenc@@inner +\newluafunction\ltj@@add@kyenc@@inner +\newluafunction\ltj@@add@ktenc@@inner +\newluafunction\ltj@@is@kyenc@@inner +\newluafunction\ltj@@is@ktenc@@inner +\newluafunction\ltj@@is@kenc@@inner +\directlua{% + local lf = lua.get_functions_table() + lf[\the\ltj@@add@fenc@@inner] = luatexja.jfont.add_fenc_list + lf[\the\ltj@@add@kyenc@@inner] = luatexja.jfont.add_kyenc_list + lf[\the\ltj@@add@ktenc@@inner] = luatexja.jfont.add_ktenc_list + lf[\the\ltj@@is@kyenc@@inner] = luatexja.jfont.is_kyenc + lf[\the\ltj@@is@ktenc@@inner] = luatexja.jfont.is_ktenc + lf[\the\ltj@@is@kenc@@inner] = luatexja.jfont.is_kenc } +\luadef\ltj@@add@fenc \ltj@@add@fenc@@inner +\luadef\ltj@@add@kyenc\ltj@@add@kyenc@@inner +\luadef\ltj@@add@ktenc\ltj@@add@ktenc@@inner +\luadef\ltj@@is@kyenc \ltj@@is@kyenc@@inner +\luadef\ltj@@is@ktenc \ltj@@is@ktenc@@inner +\luadef\ltj@@is@kenc \ltj@@is@kenc@@inner + +{\def\cdp@elt#1#2#3#4{\ltj@@add@fenc{#1}}\cdp@list} \def\DeclareFontEncoding{% \begingroup @@ -102,7 +122,7 @@ {\default@family}{\default@series}% {\default@shape}}% \expandafter\let\csname#1-cmd\endcsname\@changed@cmd - \directlua{luatexja.jfont.add_fenc_list('\luatexluaescapestring{#1}')}% + \ltj@@add@fenc{#1}% \else \@font@info{Redeclaring font encoding #1}% \fi @@ -133,7 +153,7 @@ {\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}')}% + \ltj@@add@kyenc{#1}% \else \@font@info{Redeclaring KANJI (yoko) font encoding #1}% \fi @@ -152,7 +172,7 @@ {\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}')}% + \ltj@@add@ktenc{#1}% \else \@font@info{Redeclaring KANJI (tate) font encoding #1}% \fi @@ -223,10 +243,22 @@ \cdp@list \xdef\cdp@list{\the\toks@}% \endgroup - \global\@namedef{D@#1}{\def\default@family{#2}% - \def\default@series{#3}% - \def\default@shape{#4}}% + \global\@namedef{D@#1}{\def\default@k@family{#2}% + \def\default@k@series{#3}% + \def\default@k@shape{#4}}% \fi} +\let\wrong@ja@fontshape\wrong@fontshape +\let\wrong@al@fontshape\wrong@fontshape +\patchcmd\wrong@ja@fontshape{\default@shape}{\default@k@shape}{}{} +\patchcmd\wrong@ja@fontshape{\default@series}{\default@k@series}{}{} +\patchcmd\wrong@ja@fontshape{\default@family}{\default@k@family}{}{} +\def\wrong@fontshape{% + \ltj@@is@kenc{\f@encoding}\ifin@% + \wrong@ja@fontshape + \else + \wrong@al@fontshape + \fi +} \@onlypreamble\DeclareKanjiSubstitution \def\DeclareErrorKanjiFont#1#2#3#4#5{% \xdef\error@kfontshape{% @@ -245,13 +277,13 @@ \math@fontsfalse \every@math@size{}% \fontsize{#6}\z@ - \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@% + \ltj@@is@kyenc{#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@% + \ltj@@is@ktenc{#2}\ifin@% \ltjselectfont@force@definetrue \usekanji{#2}{#3}{#4}{#5}% \global\let#1\gettfont @@ -346,16 +378,18 @@ }% \fi} \def\ltj@selectfont@patch{% - \directlua{luatexja.base.start_time_measure('selectfont')}% + \ltj@@start@time@measure{selectfont}% \let\tmp@error@fontshape\error@fontshape \let\error@fontshape\error@kfontshape - \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@% + \ltj@@is@kyenc{\k@encoding}\ifin@% \let\cy@encoding\k@encoding + \ensure@KanjiEncodingPair{t}% \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}% + \ltj@@is@ktenc{\k@encoding}\ifin@% + \let\ct@encoding\k@encoding + \ensure@KanjiEncodingPair{y}% + \edef\cy@encoding{\csname y@enc@\k@encoding\endcsname}% \else \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha \fi @@ -382,7 +416,7 @@ \fi \fi \global\let\font@name=\ltj@afont@name - \directlua{luatexja.base.stop_time_measure('selectfont')}% + \ltj@@stop@time@measure{selectfont}% } \EverySelectfont{\ltj@selectfont@patch} @@ -405,6 +439,15 @@ \egroup \def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}} +\def\ensure@KanjiEncodingPair#1{% + \edef\reserved@a{\csname #1@enc@\k@encoding\endcsname}% + \edef\reserved@b{\csname c#1@encoding\endcsname}% + \ifcat\relax\reserved@a + \@latex@error + {KANJI Encoding pair for `\k@encoding' undefined}% + {Use \string\KanjiEncodingPair, falling back to `\reserved@b'...}% + \expandafter\edef\reserved@a{\reserved@b}% + \fi} \def\set@fontsize#1#2#3{% \@defaultunits\@tempdimb#2pt\relax\@nnil \edef\f@size{\strip@pt\@tempdimb}% @@ -491,19 +534,17 @@ \fi } \DeclareRobustCommand\fontencoding[1]{% - \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#1}')}\ifin@% - \kanjiencoding{#1}\else\romanencoding{#1}\fi} + \ltj@@is@kyenc{#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@% + \ltj@@is@kyenc{\k@encoding}\ifin@ \let\cy@encoding\k@encoding \else - \directlua{luatexja.jfont.is_ktenc(\tmp@enc)}\ifin@% + \ltj@@is@ktenc{\k@encoding}\ifin@ \let\ct@encoding\k@encoding \else \@latex@error{KANJI Encoding scheme `\k@encoding' unknown}\@eha @@ -671,19 +712,6 @@ \fi \fi } -\def\set@safe@kanji@shape#1#2{% - \edef\reserved@b{\k@encoding /\k@family /\k@series/#1}% - \ifcsname \reserved@b\endcsname - \edef\k@shape{#1}% - #2% - \else - \@kanji@shape@nochange@info{\reserved@b}% - \fi -} -\def\@kanji@shape@nochange@info#1{% - \@font@info{Kanji font shape `#1' undefined\MessageBreak - No change}% -} \ifnum\ltj@@latex@plv=300 % !!! pl3, 4 \DeclareRobustCommand\romanseries[1]{\merge@font@series{#1}} \DeclareRobustCommand\kanjiseries[1]{\merge@kanji@series{#1}} @@ -727,7 +755,7 @@ \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}} +\DeclareRobustCommand\fontshape[1]{\set@safe@kanji@shape{#1}{}\romanshape{#1}} \DeclareRobustCommand\usekanji[4]{% \kanjiencoding{#1}\kanjifamily{#2}\kanjiseries{#3}\kanjishape{#4}% \selectfont\ignorespaces} @@ -737,9 +765,23 @@ %%%% LaTeX 2019-10-01 END \fi %%%% + +\def\set@safe@kanji@shape#1#2{% + \edef\reserved@b{\k@encoding /\k@family /\k@series/#1}% + \ifcsname \reserved@b\endcsname + \edef\k@shape{#1}% + #2% + \else + \@kanji@shape@nochange@info{\reserved@b}% + \fi +} +\def\@kanji@shape@nochange@info#1{% + \@font@info{Kanji font shape `#1' undefined\MessageBreak + No change}% +} + \protected\def\usefont#1#2#3#4{% - \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@% - \usekanji{#1}{#2}{#3}{#4}% + \ltj@@is@kenc{#1}\ifin@\usekanji{#1}{#2}{#3}{#4}% \else\useroman{#1}{#2}{#3}{#4}% \fi} \DeclareRobustCommand\normalfont{% @@ -769,29 +811,71 @@ \patchcmd\update@series@target@value@kanji{\f@series}{\k@series}{}{} \def\@meta@family@list@kanji{\@elt{mc}\@elt{gt}\@elt{jtt}} +\ifdefined\@setbfseriesdefaultshook % after 2020-04-07 + \g@addto@macro\@setbfseriesdefaultshook{% + \let\bfseries@mc\bfdef@ult + \let\bfseries@gt\bfdef@ult + \let\bfseries@jtt\bfdef@ult + } +\else % 2020-02-02 + \expandafter\patchcmd\csname bfseries \endcsname{% + \let\bfseries@rm\bfdef@ult + \let\bfseries@sf\bfdef@ult + \let\bfseries@tt\bfdef@ult + }{% + \let\bfseries@rm\bfdef@ult + \let\bfseries@sf\bfdef@ult + \let\bfseries@tt\bfdef@ult + \let\bfseries@mc\bfdef@ult + \let\bfseries@gt\bfdef@ult + \let\bfseries@jtt\bfdef@ult + }{}{} +\fi +\ifdefined\@setmdseriesdefaultshook % after 2020-04-07 + \g@addto@macro\@setmdseriesdefaultshook{% + \let\mdseries@mc\mddef@ult + \let\mdseries@gt\mddef@ult + \let\mdseries@jtt\mddef@ult + } +\else % 2020-02-02 + \expandafter\patchcmd\csname mdseries \endcsname{% + \let\mdseries@rm\mddef@ult + \let\mdseries@sf\mddef@ult + \let\mdseries@tt\mddef@ult + }{% + \let\mdseries@rm\mddef@ult + \let\mdseries@sf\mddef@ult + \let\mdseries@tt\mddef@ult + \let\mdseries@mc\mddef@ult + \let\mdseries@gt\mddef@ult + \let\mdseries@jtt\mddef@ult + }{}{} +\fi \expandafter\patchcmd\csname bfseries \endcsname{% - \let\bfseries@rm\bfdef@ult - \let\bfseries@sf\bfdef@ult - \let\bfseries@tt\bfdef@ult + \ifx\f@family\rmdef@ult \fontseries\bfseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt + \else \fontseries\bfdefault + \fi\fi\fi }{% - \let\bfseries@rm\bfdef@ult - \let\bfseries@sf\bfdef@ult - \let\bfseries@tt\bfdef@ult - \let\bfseries@mc\bfdef@ult - \let\bfseries@gt\bfdef@ult - \let\bfseries@jtt\bfdef@ult + \ifx\f@family\rmdef@ult \romanseries\bfseries@rm + \else\ifx\f@family\sfdef@ult \romanseries\bfseries@sf + \else\ifx\f@family\ttdef@ult \romanseries\bfseries@tt + \else \romanseries\bfdefault + \fi\fi\fi }{}{} \expandafter\patchcmd\csname mdseries \endcsname{% - \let\mdseries@rm\mddef@ult - \let\mdseries@sf\mddef@ult - \let\mdseries@tt\mddef@ult + \ifx\f@family\rmdef@ult \fontseries\mdseries@rm + \else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf + \else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt + \else \fontseries\mddefault + \fi\fi\fi }{% - \let\mdseries@rm\mddef@ult - \let\mdseries@sf\mddef@ult - \let\mdseries@tt\mddef@ult - \let\mdseries@mc\mddef@ult - \let\mdseries@gt\mddef@ult - \let\mdseries@jtt\mddef@ult + \ifx\f@family\rmdef@ult \romanseries\mdseries@rm + \else\ifx\f@family\sfdef@ult \romanseries\mdseries@sf + \else\ifx\f@family\ttdef@ult \romanseries\mdseries@tt + \else \romanseries\mddefault + \fi\fi\fi }{}{} \expandafter\patchcmd\csname bfseries \endcsname{\selectfont}% {% @@ -811,12 +895,21 @@ \fi\fi\fi \selectfont }{}{} -\appto\expand@font@defaults{% - \edef\mcdef@ult{\mcdefault}% - \edef\gtdef@ult{\gtdefault}% - \edef\jttdef@ult{\jttdefault}% - \edef\kanjidef@ult{\kanjifamilydefault}% -} +\ifdefined\@expandfontdefaultshook % 2020-04-07 + \g@addto@macro\@expandfontdefaultshook{% + \edef\mcdef@ult{\mcdefault}% + \edef\gtdef@ult{\gtdefault}% + \edef\jttdef@ult{\jttdefault}% + \edef\kanjidef@ult{\kanjifamilydefault}% + } +\else % 2020-02-02 + \appto\expand@font@defaults{% + \edef\mcdef@ult{\mcdefault}% + \edef\gtdef@ult{\gtdefault}% + \edef\jttdef@ult{\jttdefault}% + \edef\kanjidef@ult{\kanjifamilydefault}% + } +\fi \appto\init@series@setup{% \ifx\kanjidef@ult\mcdef@ult \mcfamily \else\ifx\kanjidef@ult\gtdef@ult \gtfamily @@ -856,11 +949,8 @@ %%%%%% LuaTeX-ja specific -% #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入 -\def\ltj@@IsFontJapanese#1{% - \directlua{luatexja.jfont.is_kenc(string.match( - '\luatexluaescapestring{#1}', '[^/]+'))}} - +% #1/#2 の展開結果から encoding 部分 (#1) をとりだし,それが和文用かどうかの結果を \ifin@ に代入 +\def\ltj@@IsFontJapanese#1/#2\relax{\ltj@@is@kenc{#1}} \let\extract@afont\extract@font \def\pickup@jfont{% @@ -960,7 +1050,7 @@ \aftergroup\subst@correction } \def\do@subst@correction{% - \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}\ifin@% + \ltj@@is@kenc{\f@encoding}\ifin@% \ltj@@ja@do@subst@correction \else \ltj@@al@do@subst@correction @@ -973,7 +1063,7 @@ % \M@<enc> から その <enc> が和文用か調べる {\catcode`M=12% -\gdef\ltj@@mathJapaneseFonts#1M#2#3\relax{\ltj@@IsFontJapanese{#3}}} +\gdef\ltj@@mathJapaneseFonts#1M#2#3/#4\relax{\ltj@@is@kenc{#3}}} \let\ltj@@al@getanddefine@fonts=\getanddefine@fonts \def\ltj@@ja@getanddefine@fonts#1#2{% @@ -994,7 +1084,7 @@ } \def\getanddefine@fonts#1#2{% - \ltj@tempcnta=#1\ltj@@IsFontJapanese{\string#2}% + \ltj@tempcnta=#1\expandafter\ltj@@IsFontJapanese\string#2/\relax% \ifin@\let\ltj@temp=\ltj@@ja@getanddefine@fonts% \else \let\ltj@temp=\ltj@@al@getanddefine@fonts\fi \ltj@temp{#1}{#2}% @@ -1002,7 +1092,8 @@ \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% + #1\fi\ltj@tempcnta=#2 + \expandafter\ltj@@mathJapaneseFonts\string#1/\relax% \ifin@\jfam#2\relax\else\mathgroup#2\relax\fi \expandafter\math@egroup\fi}% |