リビジョン | 1925336f0bdb2330c354ab0c6e93bd2cd943c5d9 (tree) |
---|---|
日時 | 2019-05-04 17:53:39 |
作者 | Hironori Kitagawa <h_kitagawa2001@yaho...> |
コミッター | Hironori Kitagawa |
documentation and \UTF
@@ -2410,7 +2410,7 @@ However, the penalty inserted after it is 10 which is the \Param{postbreakpenalt | ||
2410 | 2410 | ``ア'', not 20. |
2411 | 2411 | %</en> |
2412 | 2412 | %<*ja> |
2413 | -\subsection{禁則処理関連パラメータとOpenTypeのfont feature} | |
2413 | +\subsection{禁則処理関連パラメータとOpenType機能} | |
2414 | 2414 | 禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち |
2415 | 2415 | \begin{quote} |
2416 | 2416 | \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty}, |
@@ -2419,8 +2419,8 @@ However, the penalty inserted after it is 10 which is the \Param{postbreakpenalt | ||
2419 | 2419 | は,文字コードごとに設定する量である. |
2420 | 2420 | |
2421 | 2421 | \Pkg{fontspec}パッケージを使う(\ref{ssec:fontspec}節)場合など, |
2422 | -各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は, | |
2423 | -\emph{OpenType featureの適用前の文字コードによって適用される.} | |
2422 | +各種のOpenType機能を適用することもあると思うが,前段落に述べたパラメータ類は, | |
2423 | +\emph{OpenType機能の適用前の文字コードによって適用される.} | |
2424 | 2424 | 例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」 |
2425 | 2425 | に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である. |
2426 | 2426 | %</ja> |
@@ -3561,7 +3561,7 @@ NFSS2用の命令(\ref{ssec:chgfnt}節,\ref{ssec:nfsspat}節)における | ||
3561 | 3561 | |
3562 | 3562 | %<*ja> |
3563 | 3563 | \paragraph{\texttt{extend}と\texttt{slant}} |
3564 | -OpenType font featureと見かけ上同じような形式で指定できるものに, | |
3564 | +OpenType機能と見かけ上同じような形式で指定できるものに, | |
3565 | 3565 | \begin{description} |
3566 | 3566 | \item[\texttt{extend=}<extend>] 横方向に<extend>倍拡大する. |
3567 | 3567 | \item[\texttt{slant=}<slant>] <slant>に指定された割合だけ傾ける. |
@@ -3646,7 +3646,7 @@ This functionality is disabled by \texttt{-ltjksp} specification. | ||
3646 | 3646 | |
3647 | 3647 | %<en>\subsection{\cs{tfont}} |
3648 | 3648 | %<ja>\subsection{\cs{tfont} 命令} |
3649 | - | |
3649 | +\label{ssec:tfont} | |
3650 | 3650 | |
3651 | 3651 | \begin{comment} |
3652 | 3652 | {\catcode`\<=12\catcode`\>=12 |
@@ -3755,7 +3755,7 @@ A font defined by~\cs{tfont} differs the following points from that by~\cs{jfont | ||
3755 | 3755 | 以下の点が \cs{jfont} による横組用和文フォントとは異なる: |
3756 | 3756 | \begin{itemize} |
3757 | 3757 | \item 明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の |
3758 | - 有効・無効を指定した場合を除き,自動的に OpenType feature~\texttt{vrt2} の有効化が | |
3758 | + 有効・無効を指定した場合を除き,自動的に OpenType機能 \texttt{vrt2} の有効化が | |
3759 | 3759 | 指定されたものとみなされる |
3760 | 3760 | \footnote{もしフォントが\texttt{vrt2}を定義していなかった場合,代わりに |
3761 | 3761 | \texttt{vert}を用いる.}. |
@@ -3935,7 +3935,7 @@ Identity-Hとなり,PDFの標準規格ISO32000-1:2008~(\cite{pdfstd})に非準 | ||
3935 | 3935 | ので注意してほしい. |
3936 | 3936 | |
3937 | 3937 | \emph{\texttt{psft} プリフィックスの下では |
3938 | -\texttt{+jp90} などのOpenType font featureの効力はない. | |
3938 | +\texttt{+jp90} などのOpenType機能の効力はない. | |
3939 | 3939 | 非埋込フォントをPDFに使用すると,実際にどのようなフォントが |
3940 | 3940 | 表示に用いられるか予測できないからである.}\ |
3941 | 3941 | \texttt{extend} と \texttt{slant} 指定は単なる変形のため |
@@ -4650,7 +4650,7 @@ applying font features by \Pkg{luaotfload}}. | ||
4650 | 4650 | \item JFMによれば,この「ヒ」のグリフの文字クラスは2000である. |
4651 | 4651 | \item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される. |
4652 | 4652 | \end{enumerate} |
4653 | -この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを | |
4653 | +この例は,\emph{文字クラスの決定はOpenType機能の適用によるグリフ置換の結果に基づく}ことを | |
4654 | 4654 | 示している. |
4655 | 4655 | %</ja> |
4656 | 4656 |
@@ -6935,7 +6935,9 @@ CID番号が<number>の文字を出力する. | ||
6935 | 6935 | もし現在の和文フォントがAdobe-Japan1,~Adobe-GB1, Adobe-CNS1, Adobe-Korea1,~Adobe-KRの |
6936 | 6936 | いずれのCID-keyed fontでもない場合,<number>はAdobe-Japan1のCID番号であると解釈し |
6937 | 6937 | 「適切なグリフ」\footnote{% |
6938 | - 例えばフォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて | |
6938 | + 特に縦組用グリフのCID番号を指定した場合は(LuaTeX-ja 20190504.0以降では若干改良されているが) | |
6939 | + 意図しない結果になる可能性が高い. | |
6940 | + また,フォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて | |
6939 | 6941 | グリフを選択する. |
6940 | 6942 | }を出力する. |
6941 | 6943 | %</ja> |
@@ -6985,12 +6987,20 @@ ordinary characters in the following points: | ||
6985 | 6987 | \item 常に\textbf{JAchar}として扱われる. |
6986 | 6988 | %</ja> |
6987 | 6989 | %<*en> |
6988 | -\item Processing codes for supporting OpenType features (\textit{e.g.}, | |
6990 | +\item In vertical direction, \texttt{vert}/\texttt{vrt2} feature are automatically applied to | |
6991 | + characters by \cs{UTF}, regardless these feature are not activated in current Japanese font. | |
6992 | +%</en> | |
6993 | +%<*ja> | |
6994 | +\item 縦組時には,現在の縦組用和文フォントで \texttt{vert}/\texttt{vrt2} 機能が | |
6995 | + 有効か無効かを問わず,\cs{UTF} で出力される文字にはこれらのOpenType機能が働いた字形になる. | |
6996 | +%</ja> | |
6997 | +%<*en> | |
6998 | +\item Processing codes for supporting other OpenType features (for example, | |
6989 | 6999 | glyph replacement and kerning) by the \Pkg{luaotfload} package |
6990 | 7000 | is not performed to these characters. |
6991 | 7001 | %</en> |
6992 | 7002 | %<*ja> |
6993 | -\item OpenType機能(例えばグリフ置換やカーニング)をサポートするための | |
7003 | +\item その他のOpenType機能(例えばグリフ置換やカーニング)をサポートするための | |
6994 | 7004 | \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない. |
6995 | 7005 | %</ja> |
6996 | 7006 | \end{itemize} |
@@ -7163,7 +7173,8 @@ for making the difference obvious.} | ||
7163 | 7173 | \item \cs{prevdepth}の値とその$h'$の深さの値が一致している |
7164 | 7174 | \end{itemize} |
7165 | 7175 | 場合にのみ発動するようにしている. |
7166 | - \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身までは参照しない. | |
7176 | + \item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身の高さ・深さまでは | |
7177 | + 参照せず,あくまでも$h''$自身の高さ・深さのみを参照する. | |
7167 | 7178 | 参照するようにしてしまうと,\cs{smash}など手動で行った高さ・深さ調整の意味がなくなってしまうからである. |
7168 | 7179 | \end{itemize} |
7169 | 7180 |
@@ -7803,7 +7814,7 @@ characters designed for ruby. | ||
7803 | 7814 | %<*ja> |
7804 | 7815 | 横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{% |
7805 | 7816 | \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では |
7806 | - font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え). | |
7817 | + OpenType機能の有効化であり,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替える). | |
7807 | 7818 | }. |
7808 | 7819 | %</ja> |
7809 | 7820 | \item[bold] |
@@ -10724,53 +10735,6 @@ $|\textit{total}|$の分だけが,行中のグルーの伸び量,あるい | ||
10724 | 10735 | %</ja> |
10725 | 10736 | |
10726 | 10737 | %<*ja> |
10727 | -\section{IVS対応} | |
10728 | -\verb+luatexja.otf.enable_ivs()+ を実行し,IVS対応を有効にした状態では, | |
10729 | -\verb+pre_linebreak_filter+ や \verb+hpack_filter+ コールバックには | |
10730 | -次の4つが順に実行される状態となっている: | |
10731 | -\begin{description} | |
10732 | -\item[\tt ltj.do\_ivs] \textit{glyph\_node}~$p$の直後に,異体字セレクタ(を表す\textit{glyph\_node}) | |
10733 | -が連続した場合に,$p$のフォントに対応したが持つ「異体字情報」に従って出力するグリフを変える. | |
10734 | - | |
10735 | -しかし,単に$p.\textit{char}$を変更するだけでは,後から | |
10736 | -OpenType機能の適用(すぐ下)により置換される可能性がある.そのため, | |
10737 | -\cs{CID} や \cs{UTF} と同じように,\textit{glyph\_node}~$p$の代わりに | |
10738 | -\texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを用いている. | |
10739 | -\item[(\Pkg{luaotfload} によるfont featureの適用)] | |
10740 | -\item[\tt ltj.otf] \texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを | |
10741 | -きちんと\textit{glyph\_node}に変換する.この処理は,\cs{CID}, \cs{UTF}やIVSによる置換が, | |
10742 | -OpenType機能の適用で上書きされてしまうのを防止するためである. | |
10743 | -\item[\tt ltj.main\_process] \textbf{JAglue}の挿入処理(\ref{sec-jfmglue}章)と, | |
10744 | -JFMの指定に従って各\textbf{JAchar}の「寸法を補正」することを行う. | |
10745 | -\end{description} | |
10746 | - | |
10747 | -問題は各フォントの持っているIVS情報をどのように取得するか,である. | |
10748 | -\Pkg{luaotfload} はフォント番号<font\_number>の情報を\ | |
10749 | -\texttt{fonts.hashes.identifiers[<font\_number>]} 以下に格納している. | |
10750 | -しかし,OpenTypeフォントのIVS情報は格納されていないようである% | |
10751 | -\footnote{TrueTypeフォントに関しては, | |
10752 | -\begin{center} | |
10753 | -\texttt{fonts.hashes.idenfiers[<font\_number>]% | |
10754 | - .resources.variants[<selector>][<base\_char>]} | |
10755 | -\end{center} | |
10756 | -に,<base\_char>番の文字の後に異体字セレクタ<selector>が続いた場合に | |
10757 | -出力すべきグリフが書かれてある.}. | |
10758 | -%例えば,小塚明朝Pr6N~Rでは, | |
10759 | - | |
10760 | -一方,\LuaTeX 内部の \texttt{fontloader} の返すテーブルには | |
10761 | -OpenTypeフォントでもTrueTypeフォントでもIVS情報が格納されている. | |
10762 | -具体的には…… | |
10763 | - | |
10764 | -そのため,\LuaTeX-jaのIVS対応においては,\LuaTeX 内部の\ | |
10765 | -\texttt{fontloader} を直接用いることで,フォントのIVS情報を取得している. | |
10766 | -20140114.0以降でキャッシュを用いるようにした要因はここにあり, | |
10767 | -\texttt{fontloader} の呼び出しでかなり時間を消費することから, | |
10768 | -%%% to_table を使わなくしたことで,メモリ使用量は減った | |
10769 | -IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している. | |
10770 | -%</ja> | |
10771 | - | |
10772 | - | |
10773 | -%<*ja> | |
10774 | 10738 | \section{複数フォントの「合成」(未完)} |
10775 | 10739 | \section{\LuaTeX-jaにおけるキャッシュ} |
10776 | 10740 | \Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を |
@@ -11199,6 +11163,51 @@ direction~whatsit内部のノードリストに,\textit{dir\_box}として格 | ||
11199 | 11163 | } |
11200 | 11164 | \] |
11201 | 11165 | のようになる. |
11166 | + | |
11167 | +\subsection{縦組用字形の取得} | |
11168 | +縦組時には,「\hbox to \zw{、}」(\texttt{U+3001})から「\ltjjachar"FE11」(\texttt{U+FE11})%" | |
11169 | +のように縦組用字形への置き換えに関係する処理は,以下のようになっている. | |
11170 | + \begin{itemize} | |
11171 | + \item 各縦組用和文フォントは読み込み時に以下の属性が設定される: | |
11172 | + \begin{description} | |
11173 | + \item[\textit{vert\_activated}] 真となるのは, | |
11174 | + 明示的に \texttt{-vert} も \texttt{-vrt2} のいずれも指定されていないちょうどその時. | |
11175 | + \item[\textit{auto\_enable\_vrt2}] 真となるのは, | |
11176 | + \texttt{vert}, \texttt{vrt2}のいずれについても有効・無効が指定されていないちょうどその時. | |
11177 | + \end{description} | |
11178 | + \textit{vert\_activated}については\texttt{luatexja.define\_jfont}コールバックで渡される引数 | |
11179 | + \texttt{jfont\_info}から取得可能である. | |
11180 | + | |
11181 | + \item \textit{auto\_enable\_vrt2}が真の場合は,現在のscript tagとlanguage system identifierの値で | |
11182 | + \texttt{vrt2}機能が利用可能か調べる.利用可能ならば\texttt{vrt2}を,そうでなければ | |
11183 | + \texttt{vert}を有効化する. | |
11184 | + \item また,各和文フォント読み込み時には, | |
11185 | + 「OpenType機能による置換以前に行う縦組形への置換」を格納したテーブル\textit{vform}も作成する. | |
11186 | + \begin{enumerate} | |
11187 | + \item \LuaTeX-jaには,「\hbox to \zw{、}」(\texttt{U+3001})→「\ltjjachar"FE11」(\texttt{U+FE11})といった | |
11188 | + いくつかの置換がハードコードされている.そのような各置換$i\longmapsto v$に対して, | |
11189 | + \begin{quote} | |
11190 | + 置換元$i$が(あるscript, languageにおける)\texttt{vert}では置換対象でなく, | |
11191 | + かつ置換先$v$がフォント内に存在する文字コードである | |
11192 | + \end{quote} | |
11193 | + ならば,$i\longmapsto v$を\textit{vform}に登録する. | |
11194 | + \item \ref{ssec:tfont}節にある\texttt{jpotf}が指定された場合, | |
11195 | + …… | |
11196 | + \item もし\texttt{vert}も\texttt{vrt2}も現在のscript, languageでは有効にできない場合, | |
11197 | + どこかのscript, languageにおける\texttt{vert}で定義されている | |
11198 | + 置換$i\longmapsto v$をすべて\textit{vform}に登録する. | |
11199 | + \end{enumerate} | |
11200 | + | |
11201 | + あとで説明するように,\textit{vform}は\textit{vert\_activated}が真であるような縦組用和文フォントでしか | |
11202 | + 利用されない. | |
11203 | + | |
11204 | + \item 「現在の水平リスト」内の\textbf{JAchar}を(欧文フォントから)和文フォントへ置き換える処理において, | |
11205 | + その時点での組方向が縦組であり,かつ処理対象の各ノードの縦組用フォントで | |
11206 | + \textit{vert\_activated}が真である場合,\textit{vform}に従いグリフが置き換えられる. | |
11207 | + | |
11208 | + \Pkg{luaotfload}が行う,OpenType機能に沿ったグリフ置換はこの後の処理となる.G | |
11209 | + \end{itemize} | |
11210 | + | |
11202 | 11211 | %</ja> |
11203 | 11212 | |
11204 | 11213 | \newpage |
@@ -90,7 +90,7 @@ | ||
90 | 90 | \protected\def\CID#1{\ifvmode\leavevmode\fi\ltj@tempcnta#1\relax\directlua{luatexja.otf.cid(\the\ltj@tempcnta)}\relax} |
91 | 91 | |
92 | 92 | %% \UTF compatible with the OTF package for pLaTeX |
93 | -\protected\def\UTF#1{\ifvmode\leavevmode\fi\directlua{luatexja.otf.append_jglyph(0x#1)}} | |
93 | +\protected\def\UTF#1{\ifvmode\leavevmode\fi\directlua{luatexja.otf.utf(0x#1)}} | |
94 | 94 | |
95 | 95 | %% Load ajmacros |
96 | 96 | \ifltj@in@latex %<*LaTeX> |
@@ -43,7 +43,7 @@ luatexbase.create_callback("luatexja.load_jfm", "data", function (ft, jn) return | ||
43 | 43 | |
44 | 44 | local jfm_file_name, jfm_var, jfm_ksp |
45 | 45 | local defjfm_res |
46 | -local jfm_dir, is_def_jfont, is_vert_enabled, auto_enable_vrt2 | |
46 | +local jfm_dir, is_def_jfont, vert_activated, auto_enable_vrt2 | |
47 | 47 | |
48 | 48 | local function norm_val(a) |
49 | 49 | if (not a) or (a==0.) then |
@@ -338,7 +338,7 @@ do | ||
338 | 338 | chars = sz.chars, char_type = sz.char_type, |
339 | 339 | kanjiskip = sz.kanjiskip, xkanjiskip = sz.xkanjiskip, |
340 | 340 | chars_cbcache = {}, |
341 | - vert_activated = is_vert_enabled, | |
341 | + vert_activated = vert_activated, | |
342 | 342 | } |
343 | 343 | local t = identifiers[fn] |
344 | 344 | if auto_enable_vrt2 then |
@@ -434,11 +434,11 @@ do | ||
434 | 434 | jfm_ksp = not (x=='-') |
435 | 435 | end |
436 | 436 | if jfm_dir == 'tate' then |
437 | - is_vert_enabled = (not name:match('[:;]%-vert')) and (not name:match('[:;]%-vrt2')) | |
437 | + vert_activated = (not name:match('[:;]%-vert')) and (not name:match('[:;]%-vrt2')) | |
438 | 438 | auto_enable_vrt2 |
439 | 439 | = (not name:match('[:;][+%-]?vert')) and (not name:match('[:;][+%-]?vrt2')) |
440 | 440 | else |
441 | - is_vert_enabled, auto_enable_vrt2 = nil, nil | |
441 | + vert_activated, auto_enable_vrt2 = nil, nil | |
442 | 442 | end |
443 | 443 | return name |
444 | 444 | end |
@@ -138,10 +138,39 @@ local function append_jglyph(char) | ||
138 | 138 | node_write(p) |
139 | 139 | end |
140 | 140 | |
141 | +local utf | |
142 | +do | |
143 | + utf = function (ucs) | |
144 | + local char = ucs | |
145 | + if ltjd_get_dir_count()==dir_tate then | |
146 | + local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate) | |
147 | + and attr_curtfnt or attr_curjfnt) | |
148 | + local t = identifiers[curjfnt_num] | |
149 | + if t.resources.sequences then | |
150 | + for _,i in pairs(t.resources.sequences) do | |
151 | + if (i.order[1]=='vert' or i.order[1]=='vrt2') | |
152 | + and i.type == 'gsub_single' and i.steps then | |
153 | + for _,j in pairs(i.steps) do | |
154 | + if type(j)=='table' then | |
155 | + if type(j.coverage)=='table' then | |
156 | + for i,k in pairs(j.coverage) do | |
157 | + if i==char then return append_jglyph(k) end | |
158 | + end | |
159 | + end | |
160 | + end | |
161 | + end | |
162 | + end | |
163 | + end | |
164 | + end | |
165 | + end | |
166 | + return append_jglyph(char) | |
167 | + end | |
168 | +end | |
169 | + | |
141 | 170 | local cid |
142 | 171 | do |
143 | 172 | cid = function (key) |
144 | - if key==0 then return append_jglyph(char) end | |
173 | + if key==0 then return append_jglyph(0) end | |
145 | 174 | local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate) |
146 | 175 | and attr_curtfnt or attr_curjfnt) |
147 | 176 | local curjfnt = identifiers[curjfnt_num] |
@@ -265,7 +294,7 @@ luatexja.otf = { | ||
265 | 294 | append_jglyph = append_jglyph, |
266 | 295 | enable_ivs = enable_ivs, -- 隠し機能: IVS |
267 | 296 | disable_ivs = disable_ivs, -- 隠し機能: IVS |
268 | - cid = cid, | |
297 | + cid = cid, utf = utf, | |
269 | 298 | } |
270 | 299 | |
271 | 300 |