OSDN Git Service

ltj-charrange.lua: definition of jcr_cjk and jcr_noncjk was too late.
[luatex-ja/luatexja.git] / src / patches / lltjfont.sty
index 06d5f2b..6c9529f 100644 (file)
@@ -3,7 +3,7 @@
 % 
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjfont}[2011/11/22 Patch to NFSS2 for LuaLaTeX-ja]
+\ProvidesPackage{lltjfont}[2014/01/23 Patch to NFSS2 for LuaTeX-ja]
 
 \let\k@encoding\@empty
 \let\ck@encoding\@empty
 \ifdefined\chs\else\newdimen\chs\fi
 \ifdefined\cHT\else\newdimen\cHT\fi
 %\let\afont\font
-\def\inlist@#1#2{%
-  \def\in@@##1<#1>##2##3\in@@{%
-    \ifx\in@##2\in@false\else\in@true\fi}%
-  \in@@#2<#1>\in@\in@@}
-\def\fam@elt{\noexpand\fam@elt}
-\def\enc@elt{\noexpand\enc@elt}
-\let\kenc@list\@empty
-\let\kyenc@list\@empty
-\let\ktenc@list\@empty
+
 \newbox\tstrutbox
 \newbox\zstrutbox
 \def\strut{\relax
   \expandafter\endgroup
   \DeclareYokoKanjiEncoding@}
 \def\DeclareYokoKanjiEncoding@#1#2#3{%
-  \expandafter
-  \ifx\csname T@#1\endcsname\relax
+  \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
-    \def\enc@elt{\noexpand\enc@elt}%
-    \xdef\kyenc@list{\kyenc@list\enc@elt<#1>}%
-    \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
+     \directlua{luatexja.jfont.add_kyenc_list('\luatexluaescapestring{#1}')}%
   \else
     \@font@info{Redeclaring KANJI (yoko) font encoding #1}%
   \fi
   \expandafter\endgroup
   \DeclareTateKanjiEncoding@}
 \def\DeclareTateKanjiEncoding@#1#2#3{%
-  \expandafter
-  \ifx\csname T@#1\endcsname\relax
+  \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
-    \def\enc@elt{\noexpand\enc@elt}%
-    \xdef\ktenc@list{\ktenc@list\enc@elt<#1>}%
-    \xdef\kenc@list{\kenc@list\enc@elt<#1>}%
+    \directlua{luatexja.jfont.add_ktenc_list('\luatexluaescapestring{#1}')}%
   \else
     \@font@info{Redeclaring KANJI (tate) font encoding #1}%
   \fi
       \math@fontsfalse
       \every@math@size{}%
       \fontsize{#6}\z@
-      \edef\tmp@item{{#2}}%
-      \expandafter\expandafter\expandafter
-      \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
-      \ifin@
+      \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{#2}')}\ifin@%
         \usekanji{#2}{#3}{#4}{#5}%
         \global\let#1\getjfont
       \else
-        %\expandafter\expandafter\expandafter
-        %\inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
-        %\ifin@
+        %\directlua{luatexja.jfont.is_ktenc('\luatexluaescapestring{#2}')}\ifin@%
         %  \usekanji{#2}{#3}{#4}{#5}%
         %  \let\font\tfont
         %\else
 \DeclareRobustCommand\selectfont{%
   \let\tmp@error@fontshape\error@fontshape
   \let\error@fontshape\error@kfontshape
-  \edef\tmp@item{{\k@encoding}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
-  \ifin@
+  \directlua{luatexja.jfont.is_kyenc('\luatexluaescapestring{\k@encoding}')}\ifin@%
     \let\cy@encoding\k@encoding
     \edef\ct@encoding{\csname t@enc@\k@encoding\endcsname}%
   \else
-    \expandafter\expandafter\expandafter
-    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
-    \ifin@
-      \let\ct@encoding\k@encoding
-      \edef\cy@encoding{\csname y@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
   \fi
-  %\let\font\tfont
-  %\let\k@encoding\ct@encoding
-  %\xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
-  %\pickup@font
-  %\font@name
   \let\k@encoding\cy@encoding
   \xdef\font@name{\csname\curr@kfontshape/\f@size\endcsname}%
   \pickup@jfont
   \font@name
-  \expandafter\def\expandafter\k@encoding\tmp@item
+  \edef\tmp@item{{\k@encoding}}\expandafter\def\expandafter\k@encoding\tmp@item
   \kenc@update
   \let\error@fontshape\tmp@error@fontshape
   \if@knjcmd \@knjcmdfalse
        \csname rel@\k@encoding/\k@family/\k@series/\k@shape\endcsname
     \fi
   \fi
-  %\let\font\afont
   \xdef\font@name{\csname\curr@fontshape/\f@size\endcsname}%
   \pickup@font
   \font@name
   \ifx\f@linespread\baselinestretch \else
     \set@fontsize\baselinestretch\f@size\f@baselineskip
   \fi
-  \size@update}
+  \size@update
+% ここからは altfont 用
+  \ltj@@does@alt@set{\curr@kfontshape}%
+    % alt fonts の定義
+    \directlua{luatexja.jfont.output_alt_font_cmd('\luatexluaescapestring{\curr@kfontshape}')}%
+    % 定義した alt fonts のデータを \ltjdeclarealtfont に渡すのと同等の処理をする
+    \directlua{luatexja.jfont.pickup_alt_font_a('\f@size')}%
+  \fi
+}
 \def\KanjiEncodingPair#1#2{\@namedef{t@enc@#1}{#2}\@namedef{y@enc@#2}{#1}}
 \KanjiEncodingPair{JY3}{JT3}
 \def\set@fontsize#1#2#3{%
     \fi
 }
 \DeclareRobustCommand\fontencoding[1]{%
-  \edef\tmp@item{{#1}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
-  \ifin@ \kanjiencoding{#1}\else\romanencoding{#1}\fi}
+  \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@item{{\k@encoding}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kyenc@list}%
-  \ifin@ \let\cy@encoding\k@encoding
+  \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}
+  \directlua{luatexja.jfont.is_kyenc(\tmp@enc)}\ifin@%
+    \let\cy@encoding\k@encoding
   \else
-    \expandafter\expandafter\expandafter
-    \inlist@\expandafter\tmp@item\expandafter{\ktenc@list}%
-    \ifin@ \let\ct@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
   \fi
 }
 \let\kenc@update\relax
 \newif\if@tempswz
 \DeclareRobustCommand\romanfamily[1]{\edef\f@family{#1}}
 \DeclareRobustCommand\kanjifamily[1]{\edef\k@family{#1}}
-% \notkfam@list@<enc>: list of non-defined kanji families under <enc>
-% \kfam@list@<enc>:    list of kanji families under <enc>, defined in a .fd file
 \DeclareRobustCommand\fontfamily[1]{%
-  \@notkfamfalse\@notffamfalse\edef\tmp@item{{#1}}%
+  \@notkfamfalse\@notffamfalse
+  \edef\tmp@item{'\luatexluaescapestring{#1}'}%
+  \edef\tmp@enc{'\luatexluaescapestring{\k@encoding}'}%
   \ifcsname \k@encoding+#1\endcsname % if \k@encoding+#1 is already defined
     \edef\k@family{#1}%
   \else % search font definition file...
-     \ifcsname kfam@list@\k@encoding\endcsname\else
-       \expandafter\gdef\csname kfam@list@\k@encoding\endcsname{}%
-       \expandafter\gdef\csname notkfam@list@\k@encoding\endcsname{}%
-     \fi
-     \edef\@templist{\@nameuse{kfam@list@\k@encoding}}%
-     \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+     \directlua{luatexja.jfont.is_kfam(\tmp@enc, \tmp@item)}%
      \ifin@\edef\k@family{#1}\else%
-       \edef\@templist{\@nameuse{notkfam@list@\k@encoding}}%
-       \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+       \directlua{luatexja.jfont.is_Nkfam(\tmp@enc, \tmp@item)}%
        \ifin@\@notkfamtrue\else%
-         \def\@temp##1+{\lowercase{\def\@@temp{##1}}}\expandafter\@temp\k@encoding+%
-         \message{(I search kanjifont definition file: \@@temp#1.fd)}%
+         \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\k@encoding+%
+         \message{(I search kanjifont definition file: \@@temp)}%
          \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
          \if@tempswz
-           \expandafter\xdef\csname kfam@list@\k@encoding\endcsname
-             {\@nameuse{kfam@list@\k@encoding}\fam@elt<#1>}\edef\k@family{#1}%
+           \directlua{luatexja.jfont.add_kfam_list(\tmp@enc, \tmp@item)}%
+          \edef\k@family{#1}%
          \else
-           \expandafter\xdef\csname notkfam@list@\k@encoding\endcsname
-             {\@nameuse{notkfam@list@\k@encoding}\fam@elt<#1>}\@notkfamtrue%
+           \directlua{luatexja.jfont.add_Nkfam_list(\tmp@enc, \tmp@item)}%
+          \@notkfamtrue%
          \fi
        \fi
      \fi
   \fi
+  \edef\tmp@enc{'\luatexluaescapestring{\f@encoding}'}%
   \ifcsname \f@encoding+#1\endcsname
     \edef\f@family{#1}%
   \else % search font definition file...
-     \ifcsname ffam@list@\f@encoding\endcsname\else
-       \expandafter\gdef\csname ffam@list@\f@encoding\endcsname{}%
-       \expandafter\gdef\csname notffam@list@\f@encoding\endcsname{}%
-     \fi
-     \edef\@templist{\@nameuse{ffam@list@\f@encoding}}%
-     \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+     \directlua{luatexja.jfont.is_ffam(\tmp@enc, \tmp@item)}%
      \ifin@\edef\f@family{#1}\else
-       \edef\@templist{\@nameuse{notffam@list@\f@encoding}}%
-       \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
+       \directlua{luatexja.jfont.is_Nffam(\tmp@enc, \tmp@item)}%
        \ifin@\@notffamtrue\else
-         \def\@temp##1+{\lowercase{\def\@@temp{##1}}}\expandafter\@temp\f@encoding+%
-         \message{(I search font definition file: \@@temp#1.fd)}%
+         \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
+         \message{(I search font definition file: \@@temp)}%
          \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
          \if@tempswz
-           \expandafter\xdef\csname ffam@list@\f@encoding\endcsname
-             {\@nameuse{ffam@list@\f@encoding}\fam@elt<#1>}\edef\f@family{#1}%
+           \directlua{luatexja.jfont.add_ffam_list(\tmp@enc, \tmp@item)}%
+          \edef\f@family{#1}%
          \else
-           \expandafter\xdef\csname notffam@list@\f@encoding\endcsname
-             {\@nameuse{notffam@list@\f@encoding}\fam@elt<#1>}\@notffamtrue%
+           \directlua{luatexja.jfont.add_Nffam_list(\tmp@enc, \tmp@item)}%
+           \@notffamtrue%
          \fi
        \fi
      \fi
 \def\useroman#1#2#3#4{%
     \romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
     \selectfont\ignorespaces}
-\def\usefont#1#2#3#4{%
-  \edef\tmp@item{{#1}}%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
-  \ifin@ \usekanji{#1}{#2}{#3}{#4}%
+\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{%
     \romanseries{\seriesdefault}%
     \romanshape{\shapedefault}%
     \selectfont\ignorespaces}
-\adjustbaseline
 \let\reset@font\normalfont
 \DeclareRobustCommand\mcfamily
         {\not@math@alphabet\mcfamily\mathmc
 
 % #1 の展開結果から encoding 部分をとりだし,それが和文用かどうかの結果を \ifin@ に代入
 \def\ltj@@IsFontJapanese#1{%
-  \expandafter\ltj@@IsFontJapaneseX#1//:%
-  \expandafter\expandafter\expandafter
-  \inlist@\expandafter\tmp@item\expandafter{\kenc@list}}
-\def\ltj@@IsFontJapaneseX#1/#2/:{\edef\tmp@item{{\directlua{%
-  tex.print(luatexbase.catcodetables["latex-package"], '#1')}%
-}}}
+  \directlua{luatexja.jfont.is_kenc(string.match(
+      '\luatexluaescapestring{#1}', '[^/]+'))}}
 
 
 \let\extract@afont\extract@font
     \fi
     \let\getjfont\font@name}
 
+% 異なる和文 enc/fam/ser/shape からは異なるフォント番号が振られるように
+% わざと「ゴミをつける」
+\def\ltj@@patch@external@font#1 at{%
+  #1\directlua{luatexja.jfont.print_aftl_address()}\space at%
+}
 \def\extract@jfont{%
-    \get@external@font
+   \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}%
+    \fi
     \expandafter\globaljfont\font@name\external@font\relax
     \font@name%\global\zw=\zw\global\zh=\zh
     \csname \f@encoding+\f@family\endcsname
     \aftergroup\subst@correction
 }
 \def\do@subst@correction{%
-   \ltj@@IsFontJapanese{\curr@fontshape}\ifin@
+   \ltj@@IsFontJapanese{\curr@fontshape}\ifin@%
      \ltj@@ja@do@subst@correction
    \else
      \ltj@@al@do@subst@correction
   \xdef\font@name{\csname \string#2/\ssf@size\endcsname}%
   \pickup@jfont
   \edef\math@fonts{\math@fonts\ltj@setpar@global%
-    \ltj@@set@stackfont#1,\textfont@name:{mjtext}%
-    \ltj@@set@stackfont#1,\scriptfont@name:{mjscr}%
-    \ltj@@set@stackfont#1,\font@name:{mjss}%
+    \ltj@@set@stackfont#1,\textfont@name:{MJT}%
+    \ltj@@set@stackfont#1,\scriptfont@name:{MJS}%
+    \ltj@@set@stackfont#1,\font@name:{MJSS}%
   }%
 }
 
     \ifin@\jfam#2\relax\else\mathgroup#2\relax\fi
   \expandafter\math@egroup\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{%
+  {\def\ltj@temp@bfont{#1/#2/#3/#4}\def\ltj@temp@afont{#5/#6/#7/#8}%
+   \expandafter\ltj@@altfont@latex#9,,}\ignorespaces}
+\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@aux#1{%
+  {\edef\font@name{\csname #1/\f@size\endcsname}\pickup@jfont}%
+}
+\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{%
+  \directlua{luatexja.jfont.does_alt_set'\luatexluaescapestring{#1}'}}
+
 \endinput