--
luatexbase.provides_module({
name = 'luatexja.jfont',
- date = '2011/05/11',
+ date = '2013/12/31',
description = 'Loader for Japanese fonts',
})
module('luatexja.jfont', package.seeall)
-- EXT
function set_alt_font(b,e,ind,bfnt)
-- ind: 新フォント, bfnt: 基底フォント
- if b<0x80 or e>=ucs_out then
- ltjb.package_warning('luatexja',
- 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ if b>e then b, e = e, b end
+ if b*e<=0 then
+ ltjb.package_eror('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
'I take the intersection with [0x80, 0x10ffff].')
- elseif b>e then
- local j=b; e=b; b=j
+ b, e = math.max(0x80,b),math.min(ucs_out-1,e)
+ elseif e<0 then -- b<e<0
+ -- do nothing
+ elseif b<0x80 or e>=ucs_out then
+ ltjb.package_warning('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ b, e = math.max(0x80,b), math.min(ucs_out-1,e)
end
if bfnt==ind then ind = nil end -- ind == bfnt の場合はテーブルから削除
if not alt_font_table[bfnt] then alt_font_table[bfnt]={} end
local t = alt_font_table[bfnt]
- for i=math.max(0x80,b),math.min(ucs_out-1,e) do
- t[i]=ind
+ if e>=0 then -- character range
+ for i=b, e do
+ t[i]=ind
+ end
+ else
+ b, e = -e, -b
+ local tx = font_metric_table[bfnt].chars
+ for i,v in pairs(tx) do
+ if b<=v and v<=e then t[i]=ind end
+ end
end
end
-- EXT
function set_alt_font_latex(b,e,ind,bbase)
-- ind: Alt font の enc/fam/ser/shape, bbase: 基底フォントの enc/fam/ser/shape
- if b<0x80 or e>=ucs_out then
- ltjb.package_warning('luatexja',
- 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ if b>e then b, e = e, b end
+ if b*e<=0 then
+ ltjb.package_eror('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
'I take the intersection with [0x80, 0x10ffff].')
- elseif b>e then
- local j=b; e=b; b=j
+ b, e = math.max(0x80,b),math.min(ucs_out-1,e)
+ elseif e<0 then -- b<e<0
+ -- do nothing
+ elseif b<0x80 or e>=ucs_out then
+ ltjb.package_warning('luatexja',
+ 'bad character range ([' .. b .. ',' .. e .. ']). ' ..
+ 'I take the intersection with [0x80, 0x10ffff].')
+ b, e = math.max(0x80,b), math.min(ucs_out-1,e)
end
+
if not alt_font_table_latex[bbase] then alt_font_table_latex[bbase]={} end
local t = alt_font_table_latex[bbase]
if not t[ind] then t[ind] = {} end
- for i=math.max(0x80,b),math.min(ucs_out-1,e) do
+ for i=b, e do
for j,v in pairs(t) do
if v[i] then -- remove old entry
if j~=ind then v[i]=nil end; break
end
end
t[ind][i]=true
- end
- -- remove the empty tables
- for j,v in pairs(t) do
- local flag_clear = true
- for k,_ in pairs(v) do flag_clear = false; break end
- if flag_clear then t[j]=nil end
- end
- if ind==bbase then t[bbase] = nil end
+ end
+ -- remove the empty tables
+ for j,v in pairs(t) do
+ local flag_clear = true
+ for k,_ in pairs(v) do flag_clear = false; break end
+ if flag_clear then t[j]=nil end
+ end
+ if ind==bbase then t[bbase] = nil end
end
-- ここから先は 新 \selectfont の内部でしか実行されない
do
local alt_font_base, alt_font_base_num
-
+
-- EXT
function output_alt_font_cmd(bbase)
alt_font_base = bbase
end
end
end
-
+
-- EXT
function pickup_alt_font_a(size_str)
local t = alt_font_table_latex[alt_font_base]
end
end
end
-
+
+ local function pickup_alt_font_class(class, afnt_num)
+ local t = alt_font_table[alt_font_base_num]
+ local tx = font_metric_table[alt_font_base_num].chars
+ for i,v in pairs(tx) do
+ if v==class then t[i]=afnt_num end
+ end
+ end
+
-- EXT
function pickup_alt_font_b(afnt_num, afnt_base)
local t = alt_font_table[alt_font_base_num]
if not t then t = {}; alt_font_table[alt_font_base_num] = t end
for i,v in pairs(alt_font_table_latex[alt_font_base]) do
if i == afnt_base then
- for j,_ in pairs(v) do t[j]=afnt_num end
+ for j,_ in pairs(v) do
+ if j>=0 then
+ t[j]=afnt_num
+ else -- -n (n>=1) means that the character class n,
+ -- which is defined in the JFM
+ pickup_alt_font_class(-j, afnt_num)
+ end
+ end
return
end
end
end
+
+
end
%#!lualatex
\documentclass{ltjsarticle}
+\usepackage{fontspec}% 欧文フォントを OpenType にしたいだけ
%%% この文書のタイプセットには,
-%%% MogaMincho, MogaGothic 及びそれらの太字が必要.
-%%% Y. Oz Vox (http://yozvox.web.fc2.com/) より入手可能.
+%%% KozMinPr6N-Regular.otf, KozGoPr6N-Medium.otf,
+%%% ipag.ttf が必要
\DeclareKanjiFamily{JY3}{mcX}{}
\DeclareKanjiFamily{JY3}{gtX}{}
-\DeclareFontShape{JY3}{mcX}{m}{n}{<-> s*[0.962216] MogaMincho:jfm=ujis}{}
-\DeclareFontShape{JY3}{gtX}{m}{n}{<-> s*[0.962216] MogaGothic:jfm=ujis}{}
+\DeclareFontShape{JY3}{mcX}{m}{n}{<-> s*[0.962216] KozMinPr6N-Regular:jfm=ujis}{}
+\DeclareFontShape{JY3}{gtX}{m}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis}{}
\DeclareFontShape{JY3}{mcX}{bx}{n}{<-> ssub*gtX/m/n}{}
\def\mcdefault{mcX}
\def\gtdefault{gtX}
\begin{document}
%%%%%%%% plain TeX
-\jfont\jaA={MogaMincho:jfm=ujis} at 9.24872pt
-\jfont\jaB={MogaGothic:jfm=ujis} at 9.24872pt
-\jfont\jaC={MogaGothic Bold:jfm=ujis} at 9.24872pt
+\jfont\jaA={KozMinPr6N-Regular:jfm=ujis} at 9.24872pt
+\jfont\jaB={KozGoPr6N-Medium:jfm=ujis} at 9.24872pt
+\jfont\jaC={IPAGothic:jfm=ujis} at 9.24872pt
\jaA
あア漢字% 置換なし
\ltjclearaltfont\jaA
あア漢字% 置換なし
+% 文字クラスベースの指定
+\jfont\jaR={IPAGothic:jfm=ujis;color=FF0000} at 9.24872pt
+\jfont\jaP={IPAGothic:jfm=ujis;color=7F007F} at 9.24872pt
+\jaA
+\ltjdeclarealtfont\jaA\jaR{{-1}-{-2}}
+\ltjdeclarealtfont\jaA\jaP{{-6}-{-6}}
+この文章は,(あんまり)意味がないサンプルテキストです⁈
+
+\scrollmode
+\font\g=cmr10
+\ltjdeclarealtfont\jaA\g{"3000-"30FF}% error
+\ltjdeclarealtfont\g\jaA{"3000-"30FF}% error
+\errorstopmode
+
%%%%%%%% LaTeX
-\DeclareAlternateKanjiFont{JY3}{mc}{m}{n}{JY3}{gt}{m}{n}{`い,`う}
+\DeclareAlternateKanjiFont{JY3}{mcX}{m}{n}{JY3}{gtX}{m}{n}{`い,`う}
\mc
あいうえお% \selectfont しないと有効にはならない
\selectfont あいうえお% 「い」「う」が置換
{\Large あいうえお}
{%
- \DeclareAlternateKanjiFont{JY3}{mc}{m}{n}{JY3}{mc}{m}{n}{`い}%
+ \DeclareAlternateKanjiFont{JY3}{mcX}{m}{n}{JY3}{mcX}{m}{n}{`い}%
}% always global
-\DeclareAlternateKanjiFont{JY3}{mc}{m}{n}{JY3}{gt}{m}{n}{`お}
+\DeclareAlternateKanjiFont{JY3}{mcX}{m}{n}{JY3}{gtX}{m}{n}{`お}
\selectfont あいうえお% 「う」「お」が置換
{\Large あいうえお}
-\ClearAlternateKanjiFont{JY3}{mc}{m}{n}
+\ClearAlternateKanjiFont{JY3}{mcX}{m}{n}
{\Large あいうえお}% 置換なし
あいうえお% まだ「う」「お」が置換のまま
\section{例1}
-% (A) \DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] MogaGothic:jfm=ujis}{}
-% (B) \DeclareFontShape{JY3}{gtX}{an}{n}{<-> ssub*gtX/m/n}{}
-\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] MogaGothic:jfm=ujis;foo}{}% (C)
+%\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis}{} (A)
+%\DeclareFontShape{JY3}{gtX}{an}{n}{<-> ssub*gtX/m/n}{} (B)
+\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;foo}{}% (C)
-\DeclareFontShape{JY3}{mcX}{bx}{kana}{<-> s*[0.962216] MogaMincho Bold:jfm=ujis}{}
+\DeclareFontShape{JY3}{mcX}{bx}{kana}{<-> s*[0.962216] KozMinPr6N-Regular:jfm=ujis}{}
\DeclareAlternateKanjiFont{JY3}{gtX}{an}{n}{JY3}{mcX}{bx}{kana}{"3000-"30FF}
% (A), (B) では失敗する.例えばサイズが 10 pt のとき,
%%% なんとか解決できないだろうか?
{\Large\gt
-漢字をゴシック体,仮名を太明朝を使って
+漢字をゴシック体,仮名を明朝を使って
{\kanjiseries{an}\selectfont このように文章を組む}
-ことが時々ある.}
+ことが可能になった(太さが合わないのは気にしない).}
+
+\section{例2:メトリックの文字クラスによる指定}
+
+\ClearAlternateKanjiFont{JY3}{gtX}{an}{n}% 一旦リセットして……
+\DeclareFontShape{JY3}{gtX}{m}{red}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;color=FF0000}{}
+\DeclareFontShape{JY3}{gtX}{m}{blue}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;color=0000FF}{}
+\DeclareAlternateKanjiFont{JY3}{gtX}{an}{n}{JY3}{gtX}{m}{red}{{-7}-{-7}}% 半角カナ
+% ... {{-7}} のようにはできないので注意
+\DeclareAlternateKanjiFont{JY3}{gtX}{an}{n}{JY3}{gtX}{m}{blue}{{-1}-{-2}}% 括弧類
+{\kanjifamily{gtX}\kanjiseries{an}\selectfont
+半角カタカナとか「括弧類」だけ色を変えてみた(うまくいっているだろうか?).
+}
+
+\paragraph{fwid feature}
+\DeclareFontShape{JY3}{gtX}{af}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;foo;+fwid}{}
+ % fwid weature 使用
+
+{\kanjifamily{gtX}\kanjiseries{af}\selectfont
+fwid featureノタメ通常デハ半角カナハ全角化サレル
+
+\DeclareAlternateKanjiFont{JY3}{gtX}{af}{n}{JY3}{gtX}{m}{red}{{-7}-{-7}}% 半角カナ
+\DeclareAlternateKanjiFont{JY3}{gtX}{af}{n}{JY3}{gtX}{m}{blue}{{-1}-{-2}}% 括弧類
+\selectfont
+シカシ \verb+\DeclareAlternateKanjiFont+ ニヨル置キ換エハfont featureニヨル置換ノマエニ実施
+サレル.なおかつ置き換え先のフォントにはfwid featureは設定されていないので,
+コノヨウニ半角カナハ赤字・半角ノママ.
+}
\newpage
\DeclareKanjiFamily{JY3}{edm}{}
\DeclareFontShape{JY3}{edm}{m}{n}{<-> s*[0.962216]
- MogaMincho:jfm=ujis;foo}{} % foo をつけている理由は JY3/gtX/an/n と一緒
+ KozMinPr6N-Regular:jfm=ujis;foo}{} % foo をつけている理由は JY3/gtX/an/n と一緒
\DeclareFontShape{JY3}{edm}{m}{blue}{<-> s*[0.962216]
- MogaGothic:jfm=ujis;color=0000FF}{}
+ KozGoPr6N-Medium:jfm=ujis;color=0000FF}{}
\DeclareFontShape{JY3}{edm}{m}{green}{<-> s*[0.962216]
- MogaMincho:jfm=ujis;color=007F00}{}
+ KozMinPr6N-Regular:jfm=ujis;color=007F00}{}
%%% 16進表記の A--F は大文字で!