X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fpatches%2Flltjfont.sty;h=43ef5593e234e179b65c498ba8e171bb77729cfd;hb=c3bc0f3aa98ff13cb5fa9392eaf58ea71012384a;hp=a32c9abdc569454546163a137d51e2854d04e808;hpb=d5538914e0a05ff682b1d0aa4aba188c6eeee8fa;p=luatex-ja%2Fluatexja.git diff --git a/src/patches/lltjfont.sty b/src/patches/lltjfont.sty index a32c9ab..43ef559 100644 --- a/src/patches/lltjfont.sty +++ b/src/patches/lltjfont.sty @@ -3,7 +3,7 @@ % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{lltjfont}[2018/10/08 Patch to NFSS2 for LuaTeX-ja] +\ProvidesPackage{lltjfont}[2019/01/29 Patch to NFSS2 for LuaTeX-ja] \def\ltj@chardef@text@cmd#1{% \let\@ifdefinable\@@ifdefinable% @@ -243,18 +243,24 @@ \gdef\f@baselineskip{#5pt}} \@onlypreamble\DeclareKanjiSubstitution \@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 @@ -314,6 +320,8 @@ \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 @@ -384,19 +392,21 @@ \EverySelectfont{\ltj@selectfont@patch} \bgroup - \def\ltj@@dir@patch#1#2{% + \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{\let\ltj@@protect\protect\set@typeset@protect}% + \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}% + \unexpanded{\let\protect\ltj@@protect\fi}% }% } - \ltj@@dir@patch{yoko}{yoko}\ltj@@dir@patch{tate}{tate} - \ltj@@dir@patch{utod}{yoko}\ltj@@dir@patch{dtou}{yoko} + \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}} @@ -433,16 +443,13 @@ 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 dir = dir() - local ft = (dir==dir_tate - and fmt[get_attr('ltj@curtfnt')] or luatexja.jfont.tfont_jfmonly_result) - or nulltable - %local ft = fmt[get_attr('ltj@curtfnt')] or nulltable - ft = ft and ft.char_type or nulltable - local fk = ft and ft[0] or nulltable + 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 @@ -450,10 +457,10 @@ .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 + if dir() ~= dir_tate then ft = fmt[get_attr('ltj@curjfnt')] or nulltable - ft = ft and ft.char_type or nulltable - fk = ft and ft[0] 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 @@ -623,49 +630,92 @@ \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} + \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} + \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{% - #1\directlua{luatexja.jfont.print_aftl_address()}\space 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 - \unless\ifnum\ltjgetparameter{direction}=3\relax - \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% ここで時間がかかる - \fi + \get@external@font + \ltj@@does@alt@set{\f@encoding/\f@family/\f@series/\f@shape}{% + \edef\external@font{\expandafter\ltj@@patch@external@font\romannumeral-`0\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 - \ifnum\ltjgetparameter{direction}=3\relax - \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 - \else - \directlua{% - luatexja.jfont.load_tfont_jfmonly('\luatexluaescapestring{\external@font}') - }% - \fi + \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{% @@ -693,12 +743,15 @@ \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}%