%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{luatexja-fontspec}[2013/08/17 fontspec support of LuaTeX-ja]
+\ProvidesPackage{luatexja-fontspec}[2014/01/23 fontspec support of LuaTeX-ja]
\RequirePackage{fontspec,luatexja}
\ExplSyntaxOn
%%%%%%%% Now we completely ignore kanjifont definition file.
\DeclareRobustCommand\fontfamily[1]{%
- \@notkfamfalse\@notffamfalse\edef\tmp@item{{#1}}%
+ \@notkfamfalse\@notffamfalse
+ \edef\tmp@item{'\luatexluaescapestring{#1}'}%
+ \edef\tmp@enc{'\luatexluaescapestring{\f@encoding}'}%
\ifcsname \k@encoding+#1\endcsname % if \k@encoding+#1 is already defined
\edef\k@family{#1}%
- \else
- \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\k@encoding+%
- \@notkfamtrue
- \fi
+ \else\@notkfamtrue\fi
\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}%
- \ifin@\edef\f@family{#1}\else
- \edef\@templist{\@nameuse{notffam@list@\f@encoding}}%
- \expandafter\expandafter\expandafter\inlist@\expandafter\tmp@item\expandafter{\@templist}%
- \ifin@\@notffamtrue\else
- \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
- \message{(I search font definition file. \@@temp)}%
- \IfFileExists{\@@temp}{\@tempswztrue}{\@tempswzfalse}%
- \if@tempswz
- \expandafter\xdef\csname ffam@list@\f@encoding\endcsname
- {\@nameuse{ffam@list@\f@encoding}\fam@elt<#1>}\edef\f@family{#1}%
- \else
- \expandafter\xdef\csname notffam@list@\f@encoding\endcsname
- {\@nameuse{notffam@list@\f@encoding}\fam@elt<#1>}\@notffamtrue%
- \fi
- \fi
- \fi
+ \directlua{luatexja.jfont.is_ffam(\tmp@enc, \tmp@item)}%
+ \ifin@\edef\k@family{#1}\else%
+ \directlua{luatexja.jfont.is_Nffam(\tmp@enc, \tmp@item)}%
+ \ifin@\@notffamtrue\else%
+ \def\@temp##1+{\lowercase{\def\@@temp{##1#1.fd}}}\expandafter\@temp\f@encoding+%
+ \message{(I search kanjifont definition file: \@@temp)}%
+ \IfFileExists{\@@temp#1.fd}{\@tempswztrue}{\@tempswzfalse}%
+ \if@tempswz
+ \directlua{luatexja.jfont.add_ffam_list(\tmp@enc, \tmp@item)}%
+ \edef\f@family{#1}%
+ \else
+ \directlua{luatexja.jfont.add_Nffam_list(\tmp@enc, \tmp@item)}%
+ \@notffamtrue%
+ \fi
+ \fi
+ \fi
\fi
\if@notkfam\if@notffam
{\ifcsname D@\k@encoding\endcsname\@nameuse{D@\k@encoding}\fi
\def\try@load@fontshape{%
\expandafter
\ifx\csname \f@encoding+\f@family\endcsname\relax
- \edef\tmp@item{{\directlua{%
- tex.print(luatexbase.catcodetables["latex-package"], '\f@encoding')}%
- }}% \f@encoding の展開結果の catcode は 12 であるため,これで補正.
- \expandafter\expandafter\expandafter
- \inlist@\expandafter\tmp@item\expandafter{\kenc@list}%
+ \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{\f@encoding}')}%
\ifin@ % Japanese font: we don't search fd.
\@font@warning{We don't search kanjifont definition
\MessageBreak for \f@encoding/\f@family}%
\else % Alphabetic font
- \@font@info{Try loading font information for
- \f@encoding+\f@family}%
+ \@font@info{Try loading font information for \f@encoding+\f@family}%
\global\expandafter\let
\csname\f@encoding+\f@family\endcsname\@empty
\nfss@catcodes
--
luatexbase.provides_module({
name = 'luatexja.jfont',
- date = '2014/01/02',
+ date = '2014/01/23',
description = 'Loader for Japanese fonts',
})
module('luatexja.jfont', package.seeall)
end
------------------------------------------------------------------------
+-- LATEX INTERFACE
+------------------------------------------------------------------------
+do
+ local kyenc_list, ktenc_list = {}, {}
+ function add_kyenc_list(enc) kyenc_list[enc] = 'true ' end
+ function add_ktenc_list(enc) ktenc_list[enc] = 'true ' end
+ function is_kyenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+ end
+ function is_kyenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+ end
+ function 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 add_kfam_list(enc, fam)
+ if not kfam_list[enc] then kfam_list[enc] = {} end
+ kfam_list[enc][fam] = 'true '
+ end
+ function add_Nkfam_list(enc, fam)
+ if not Nkfam_list[enc] then Nkfam_list[enc] = {} end
+ Nkfam_list[enc][fam] = 'true '
+ end
+ function is_kfam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (kfam_list[enc] and kfam_list[enc][fam] or 'false ')) end
+ function is_Nkfam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (Nkfam_list[enc] and Nkfam_list[enc][fam] or 'false ')) end
+
+ local ffam_list, Nffam_list = {}, {}
+ function add_ffam_list(enc, fam)
+ if not ffam_list[enc] then ffam_list[enc] = {} end
+ ffam_list[enc][fam] = 'true '
+ end
+ function add_Nffam_list(enc, fam)
+ if not Nffam_list[enc] then Nffam_list[enc] = {} end
+ Nffam_list[enc][fam] = 'true '
+ end
+ function is_ffam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (ffam_list[enc] and ffam_list[enc][fam] or 'false ')) end
+ function is_Nffam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (Nffam_list[enc] and Nffam_list[enc][fam] or 'false ')) end
+end
+------------------------------------------------------------------------
-- ALTERNATE FONTS
------------------------------------------------------------------------
alt_font_table = {}
%
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjfont}[2013/05/14 Patch to NFSS2 for LuaTeX-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#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#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
\romanencoding{#1}\romanfamily{#2}\romanseries{#3}\romanshape{#4}%
\selectfont\ignorespaces}
\protected\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}%
+ \directlua{luatexja.jfont.is_kenc('\luatexluaescapestring{#1}')}\ifin@%
+ \usekanji{#1}{#2}{#3}{#4}%
\else\useroman{#1}{#2}{#3}{#4}%
\fi}
\DeclareRobustCommand\normalfont{%
% #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
\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
%%%% \ClearAlternateKanjiFont<Benc><Bfam><Bser><Bshape>
% いつも global
\def\ClearAlternateKanjiFont#1#2#3#4{%
- \directlua{luatexja.jfont.clear_alt_font_latex(
- '\luatexluaescapestring{#1/#2/#3/#4}')}}
-
-% \selectfont 上書き
-\let\ltj@@alt@selectfont@orig=\selectfont
-\def\selectfont{%
- \ltj@@alt@selectfont@orig
- \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
-}
-%\let\selectfont=\ltj@@alt@selectfont@orig
+ \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}%