summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/luatexja/src/patches/lltjfont.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/generic/luatexja/src/patches/lltjfont.sty')
-rw-r--r--macros/luatex/generic/luatexja/src/patches/lltjfont.sty237
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}%