texlive[50978] Master/texmf-dist: luatexja (4may19)

commits+karl at tug.org commits+karl at tug.org
Sat May 4 23:10:21 CEST 2019


Revision: 50978
          http://tug.org/svn/texlive?view=revision&revision=50978
Author:   karl
Date:     2019-05-04 23:10:21 +0200 (Sat, 04 May 2019)
Log Message:
-----------
luatexja (4may19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/luatex/luatexja/README
    trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja-en.pdf
    trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja-ja.pdf
    trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja.dtx
    trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-ajmacros.sty
    trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-otf.sty
    trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-compat.lua
    trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-inputbuf.lua
    trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-jfont.lua
    trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
    trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-plain.sty
    trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua
    trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.lua
    trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.sty
    trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjdefs.sty
    trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjp-fontspec.sty

Modified: trunk/Master/texmf-dist/doc/luatex/luatexja/README
===================================================================
--- trunk/Master/texmf-dist/doc/luatex/luatexja/README	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/doc/luatex/luatexja/README	2019-05-04 21:10:21 UTC (rev 50978)
@@ -1,4 +1,4 @@
-The LuaTeX-ja Package 20190408.0
+The LuaTeX-ja Package 20190504.0
 --------------------------------
 Copyright (c) 2011--2019 The LuaTeX-ja project
 License: modified BSD (see COPYING)
@@ -40,9 +40,9 @@
 2. If you must/want to install manually:
 
    a. Download the source archive from CTAN,
-      or tagged as 20190408.0 in the Git repository by
+      or tagged as 20190504.0 in the Git repository by
       <http://git.osdn.jp/view?p=luatex-ja/luatexja.git
-                              ;a=snapshot;h=refs/tags/20190408.0;sf=tgz>
+                              ;a=snapshot;h=refs/tags/20190504.0;sf=tgz>
 
    b. Extract the archive and process following three files by LuaLaTeX
       to generate classes for Japanese typesetting:
@@ -87,4 +87,4 @@
 
 * src/*.{ins.dtx} and src/ltj-kinsoku_make.tex are not needed in regular use.
 
-Last commit date: Mon Apr 8 20:12:43 2019 +0900
+Last commit date: Sat May 4 18:31:06 2019 +0900

Modified: trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja-en.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja-ja.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja.dtx
===================================================================
--- trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja.dtx	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/doc/luatex/luatexja/luatexja.dtx	2019-05-04 21:10:21 UTC (rev 50978)
@@ -1141,7 +1141,7 @@
   \texttt{ltjsarticle.cls},~\texttt{ltjsbook.cls}, \texttt{ltjsreport.cls},~\texttt{ltjskiyou.cls}.}.
 
 Original \Pkg{jsclasses} use \cs{mag}~primitive to set the main document font size.
-However, \LuaTeX\ beta-0.87.0~or~later does not support \cs{mag} in PDF~output,
+However, \LuaTeX\ does not support \cs{mag} in PDF~output,
 so \Pkg{ltjsclasses} uses the \texttt{nomag*} option\footnote{Same effect as 
   the \Pkg{BXjscls} classes (by Takayuki Yato) and \Pkg{jsclasses}.
   However, these classes uses only \TeX\ code, but \Pkg{ltjsclasses} uses Lua code.}
@@ -1163,7 +1163,7 @@
 がそれぞれ\LuaTeX-ja標準で用意されている.
 
 元々の\Pkg{jsclasses}では本文のフォントサイズを設定するのに\cs{mag}プリミティブが使われていたが,
-\LuaTeX~beta-0.87.0以降ではPDF出力時の\cs{mag}のサポートが廃止された.
+\LuaTeX ではPDF出力時の\cs{mag}のサポートが廃止された.
 そのため,\Pkg{ltjsclasses}では\texttt{nomag*}オプション
 \footnote{\Pkg{jsclasses}や,八登崇之氏による\Pkg{BXjscls}クラスにおける同名のオプションと
   同じ.上記クラスは\TeX コードのみで実装しているが,\Pkg{ltjsclasses}ではLuaコードも用いている.}が標準で
@@ -2410,7 +2410,7 @@
 ``ア'', not 20.
 %</en>
 %<*ja>
-\subsection{禁則処理関連パラメータとOpenTypeのfont feature}
+\subsection{禁則処理関連パラメータとOpenType機能}
 禁則処理や \Param{kanjiskip}, \Param{xkanjiskip} の挿入に関連したパラメータのうち
 \begin{quote}
  \Param{jaxspmode},~\Param{alxspmode}, \Param{prebreakpenalty},
@@ -2419,8 +2419,8 @@
 は,文字コードごとに設定する量である.
 
 \Pkg{fontspec}パッケージを使う(\ref{ssec:fontspec}節)場合など,
-各種のOpenType featureを適用することもあると思うが,前段落に述べたパラメータ類は,
-\emph{OpenType featureの適用前の文字コードによって適用される.}
+各種のOpenType機能を適用することもあると思うが,前段落に述べたパラメータ類は,
+\emph{OpenType機能の適用前の文字コードによって適用される.}
 例えば,以下の例において10行目の「ア」は,\verb+hwid+ featureの適用により半角カタカナの「ア」
 に置き換わる.しかし,その直後に挿入される \Param{postbreakpenalty}は,置換前の「ア」に対する値10である.
 %</ja>
@@ -3561,7 +3561,7 @@
 
 %<*ja>
 \paragraph{\texttt{extend}と\texttt{slant}}
-OpenType font featureと見かけ上同じような形式で指定できるものに,
+OpenType機能と見かけ上同じような形式で指定できるものに,
 \begin{description}
 \item[\texttt{extend=}<extend>] 横方向に<extend>倍拡大する.
 \item[\texttt{slant=}<slant>] <slant>に指定された割合だけ傾ける.
@@ -3646,8 +3646,8 @@
 
 %<en>\subsection{\cs{tfont}}
 %<ja>\subsection{\cs{tfont} 命令}
+\label{ssec:tfont}
 
-
 \begin{comment}
   {\catcode`\<=12\catcode`\>=12
 \begin{table}[t]
@@ -3729,6 +3729,23 @@
 \item[\tt jfm-tmin.lua] A counterpart for \verb+tmin10.tfm+, which is one
   of the default Japanese font metric shipped with \pTeX.
 \end{description}
+\begin{figure}[!tb]
+\begin{LTXexample}[pos=b]
+\jfont\X=[KozMinPr6N-Regular.otf]:jfm=ujis
+\tfont\U=[KozMinPr6N-Regular.otf]:jfm=ujisv
+\tfont\V=[KozMinPr6N-Regular.otf]:jfm=ujisv;jpotf
+\def\TEST#1#2{\leavevmode\hbox{#1#2\string#2 “引用,と句読点.”}}
+\ttfamily\centering\TEST\yoko\X \quad \TEST\tate\U \quad \TEST\tate\V
+\end{LTXexample}
+\caption{\texttt{jpotf} ``feature''}
+\label{fig:jpotf}
+\end{figure}
+  
+ \item If \texttt{vert}~and/or~\texttt{vrt2} features are activated,
+  one can specify \texttt{jpotf} to additional substitutions.
+  By default, it substitutes ideographic comma/period for fullwidth comma/period,
+  and double prime quotation marks for double quotation marks
+  (See~\autoref{fig:jpotf}).
 \end{itemize}
 %</en>
 %<*ja>
@@ -3738,7 +3755,7 @@
 以下の点が \cs{jfont} による横組用和文フォントとは異なる:
 \begin{itemize}
  \item 明示的に \texttt{vert}, \texttt{vrt2}(のいずれか)の
-  有効・無効を指定した場合を除き,自動的に OpenType feature~\texttt{vrt2} の有効化が
+  有効・無効を指定した場合を除き,自動的に OpenType機能 \texttt{vrt2} の有効化が
   指定されたものとみなされる
  \footnote{もしフォントが\texttt{vrt2}を定義していなかった場合,代わりに
  \texttt{vert}を用いる.}.
@@ -3774,6 +3791,43 @@
   である \verb+tmin10.tfm+ に相当し,\texttt{min10.tfm} と同様に
   「っ」など一部の文字幅が狭められている.
 \end{description}
+
+\begin{figure}[!tb]
+\begin{LTXexample}[pos=b]
+\jfont\X=[KozMinPr6N-Regular.otf]:jfm=ujis
+\tfont\U=[KozMinPr6N-Regular.otf]:jfm=ujisv
+\tfont\V=[KozMinPr6N-Regular.otf]:jfm=ujisv;jpotf
+\def\TEST#1#2{\leavevmode\hbox{#1#2\string#2 “引用,と句読点.”}}
+\ttfamily\centering\TEST\yoko\X \quad \TEST\tate\U \quad \TEST\tate\V
+\end{LTXexample}
+\caption{\texttt{jpotf} ``feature''}
+\label{fig:jpotf}
+\end{figure}
+  
+ \item \texttt{vert}, \texttt{vrt2}の少なくとも片方が(明示的・自動的を問わず)
+  有効になっていた場合,さらに\texttt{jpotf}を指定することで
+  「通常では行わない縦組用字形への変換」を行うことができる.
+
+  標準では,この「変換」は全角のコンマ・ピリオドを句読点に,
+  また全角の二重引用符をダブルミニュートへ置き換える
+  \footnote{%
+	\texttt{jpotf}という名前にしたのは,
+	OTFパッケージの縦組用和文TFMでほぼ同じの処理(そちらではさらに一重引用符を
+	「シングルミニュート」に置換する機能もあった)を行っていたことに由来する.
+  }.\autoref{fig:jpotf}を参照.
+
+  ユーザ側で「変換」をカスタマイズしたい場合,
+  \verb+luatexja.jfont.register_vert_replace+ 関数に変更内容を記したテーブルを渡す.
+  例えば縦組中では「あ」を「い」に置換し,また「,」は(「、」に置換せず)「,」のままに
+  したい場合は次のようにすれば良い.
+\begin{lstlisting}
+\directlua{luatexja.jfont.register_vert_replace{
+  ['あ']='い', [',']=false,
+}}
+\end{lstlisting}
+  \verb+luatexja.jfont.register_vert_replace+ による変更はこの関数の\emph{実行後}に定義される
+  フォントについてのみ有効である.
+  
 \end{itemize}
 
 なお,\pTeX では,\cs{font},~\cs{jfont},~\cs{tfont}のどれでも欧文フォント・横組用和文フォン
@@ -3881,7 +3935,7 @@
 ので注意してほしい.
 
 \emph{\texttt{psft} プリフィックスの下では
-\texttt{+jp90} などのOpenType font featureの効力はない.
+\texttt{+jp90} などのOpenType機能の効力はない.
 非埋込フォントをPDFに使用すると,実際にどのようなフォントが
 表示に用いられるか予測できないからである.}\
 \texttt{extend} と \texttt{slant} 指定は単なる変形のため
@@ -3907,12 +3961,12 @@
 \texttt{cid}キーに値を指定すると,そのCIDを持った非埋込フォントを定義することができる:
 %</ja>
 \begin{lstlisting}[numbers=left]
-\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-7;jfm=jis}     % Japanese
-\jfont\testD={psft:Ryumin-Light:jfm=jis}                        % default value is Adobe-Japan1-7
-\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-7;jfm=jis} % Traditional Chinese
-\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis}              % Simplified Chinese
-\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis}           % Korean
-\jfont\testKR={psft:SourceHanSerifAKR9:cid=Adobe-KR-9;jfm=jis}  % Korean
+\jfont\testJ={psft:Ryumin-Light:cid=Adobe-Japan1-7;jfm=jis}    % Japanese
+\jfont\testD={psft:Ryumin-Light:jfm=jis}                       % default: Adobe-Japan1-7
+\jfont\testC={psft:AdobeMingStd-Light:cid=Adobe-CNS1-7;jfm=jis}% Traditional Chinese
+\jfont\testG={psft:SimSun:cid=Adobe-GB1-5;jfm=jis}             % Simplified Chinese
+\jfont\testK={psft:Batang:cid=Adobe-Korea1-2;jfm=jis}          % Korean
+\jfont\testKR={psft:SourceHanSerifAKR9:cid=Adobe-KR-9;jfm=jis} % Korean
 \end{lstlisting}
 %<*en>
 Note that the code above specifies \texttt{jfm-jis.lua}, which is for Japanese fonts,
@@ -4596,7 +4650,7 @@
 \item JFMによれば,この「ヒ」のグリフの文字クラスは2000である.
 \item 以上により文字クラス2000とみなされるため,結果として「ヒ」の幅は半角だと認識される.
 \end{enumerate}
-この例は,\emph{文字クラスの決定はfont featureの適用によるグリフ置換の結果に基づく}ことを
+この例は,\emph{文字クラスの決定はOpenType機能の適用によるグリフ置換の結果に基づく}ことを
 示している.
 %</ja>
 
@@ -4627,7 +4681,7 @@
 %<*ja>
 ここで,句点「。」(\texttt{U+3002})の文字クラスは,以下のようにして決まる.
 \begin{enumerate}
-\item \Pkg{luaotfload} によって縦組用句点のグリフに置き換わる.
+\item \Pkg{luaotfload}によって縦組用句点のグリフに置き換わる.
 \item 置換後のグリフは \texttt{U+FE12} であり,JFMに従えば文字クラスは\emph{0}と判定される.
 \item この場合,置換前の横組用句点のグリフによって文字クラスを判定する.
 \item 結果として,上の出力例中の句点の文字クラスは2000となる.
@@ -4953,10 +5007,10 @@
 \begin{itemize}
   \item 間に入るものがカーンであれば,この値は\
 \texttt{[$j$]=\{[1]=<kern\_node>, ratio=<ratio>\}} であり,
-<kern\_node>はカーンを表すノードそのものである\footnote{%
-バージョン20150420.0以降ではノードのアクセス手法にdirect access
-      modelを用いている.そのため,例えば\LuaTeX\ beta-0.78.2では,単なる自然数のようにし
-      か見えないことに注意.
+<kern\_node>はカーンを表すノードである\footnote{%
+      バージョン20150420.0以降ではノードのアクセス手法にdirect access
+      modelを用いているため,ノードそのものを表すユーザーデータではなく,
+      内部で参照のために使われる添字(整数)である.
 }.
   \item グルーであれば,この値は以下のキーを持つテーブルである.
   \begin{description}
@@ -4972,7 +5026,9 @@
   \end{description}
 \end{itemize}
 \item[ascent\textrm{, }descent]
-……
+  縦組時に個々のグリフを90度回転させる場合,そのグリフは(実際の高さ・深さにかかわらず)
+  便宜的に高さ\texttt{ascent},深さ\texttt{descent}を持つものだと想定して回転させる.
+  この仕様は\Pkg{luaotfload}がOpenTypeフォントのVORGテーブルを読まないための暫定的なものである.
 \item[chars\_cbcache]
 文字クラス決定の処理で.キャッシュとして使われる.
 \end{cslist}
@@ -6879,7 +6935,9 @@
 もし現在の和文フォントがAdobe-Japan1,~Adobe-GB1, Adobe-CNS1, Adobe-Korea1,~Adobe-KRの
   いずれのCID-keyed fontでもない場合,<number>はAdobe-Japan1のCID番号であると解釈し
   「適切なグリフ」\footnote{%
-  例えばフォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて
+  特に縦組用グリフのCID番号を指定した場合は(LuaTeX-ja 20190504.0以降では若干改良されているが)
+  意図しない結果になる可能性が高い.
+  また,フォントにIVDコレクションAdobe-Japan1が含まれていれば,その情報を用いて
   グリフを選択する.
 }を出力する.
 %</ja>
@@ -6929,12 +6987,20 @@
 \item 常に\textbf{JAchar}として扱われる.
 %</ja>
 %<*en>
-\item Processing codes for supporting OpenType features (\textit{e.g.},
+\item In vertical direction, \texttt{vert}/\texttt{vrt2} feature are automatically applied to
+      characters by \cs{UTF}, regardless these feature are not activated in current Japanese font.
+%</en>
+%<*ja>
+\item 縦組時には,現在の縦組用和文フォントで \texttt{vert}/\texttt{vrt2} 機能が
+  有効か無効かを問わず,\cs{UTF} で出力される文字にはこれらのOpenType機能が働いた字形になる.
+%</ja>
+%<*en>
+\item Processing codes for supporting other OpenType features (for example,
       glyph replacement and kerning) by the \Pkg{luaotfload} package
       is not performed to these characters.
 %</en>
 %<*ja>
-\item OpenType機能(例えばグリフ置換やカーニング)をサポートするための
+\item その他のOpenType機能(例えばグリフ置換やカーニング)をサポートするための
   \Pkg{luaotfload}パッケージのコードはこれらの文字には働かない.
 %</ja>
 \end{itemize}
@@ -7107,7 +7173,8 @@
 	  \item \cs{prevdepth}の値とその$h'$の深さの値が一致している
 	\end{itemize}
 	場合にのみ発動するようにしている.
-	\item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身までは参照しない.
+	\item 行の中身に水平ボックス$h''$が入ってくることもあるが,その場合は$h''$の中身の高さ・深さまでは
+	参照せず,あくまでも$h''$自身の高さ・深さのみを参照する.
 	参照するようにしてしまうと,\cs{smash}など手動で行った高さ・深さ調整の意味がなくなってしまうからである.
   \end{itemize}
   
@@ -7747,7 +7814,7 @@
 %<*ja>
 横組・縦組専用仮名を用いる.また,\cs{rubyfamily} でルビ用仮名が使用可能となる\footnote{%
   \cs{rubyfamily}とはいいつつ,実際にはフォントファミリを切り替えるのではない(通常では
-  font featureの追加,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替え).
+  OpenType機能の有効化であり,\texttt{nfssonly} 指定時にはシェイプを \texttt{rb} に切り替える).
 }.
 %</ja>
 \item[bold]
@@ -10668,53 +10735,6 @@
 %</ja>
 
 %<*ja>
-\section{IVS対応}
-\verb+luatexja.otf.enable_ivs()+ を実行し,IVS対応を有効にした状態では,
-\verb+pre_linebreak_filter+ や \verb+hpack_filter+ コールバックには
-次の4つが順に実行される状態となっている:
-\begin{description}
-\item[\tt ltj.do\_ivs] \textit{glyph\_node}~$p$の直後に,異体字セレクタ(を表す\textit{glyph\_node})
-が連続した場合に,$p$のフォントに対応したが持つ「異体字情報」に従って出力するグリフを変える.
-
-しかし,単に$p.\textit{char}$を変更するだけでは,後から
-OpenType機能の適用(すぐ下)により置換される可能性がある.そのため,
-\cs{CID} や \cs{UTF} と同じように,\textit{glyph\_node}~$p$の代わりに
-\texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを用いている.
-\item[(\Pkg{luaotfload} によるfont featureの適用)]
-\item[\tt ltj.otf] \texttt{user\_id} が\textit{char\_by\_cid}であるようなuser-defined whatsitを
-きちんと\textit{glyph\_node}に変換する.この処理は,\cs{CID}, \cs{UTF}やIVSによる置換が,
-OpenType機能の適用で上書きされてしまうのを防止するためである.
-\item[\tt ltj.main\_process] \textbf{JAglue}の挿入処理(\ref{sec-jfmglue}章)と,
-JFMの指定に従って各\textbf{JAchar}の「寸法を補正」することを行う.
-\end{description}
-
-問題は各フォントの持っているIVS情報をどのように取得するか,である.
-\Pkg{luaotfload} はフォント番号<font\_number>の情報を\
-\texttt{fonts.hashes.identifiers[<font\_number>]} 以下に格納している.
-しかし,OpenTypeフォントのIVS情報は格納されていないようである%
-\footnote{TrueTypeフォントに関しては,
-\begin{center}
-\texttt{fonts.hashes.idenfiers[<font\_number>]%
-  .resources.variants[<selector>][<base\_char>]}
-\end{center}
-に,<base\_char>番の文字の後に異体字セレクタ<selector>が続いた場合に
-出力すべきグリフが書かれてある.}.
-%例えば,小塚明朝Pr6N~Rでは,
-
-一方,\LuaTeX 内部の \texttt{fontloader} の返すテーブルには
-OpenTypeフォントでもTrueTypeフォントでもIVS情報が格納されている.
-具体的には……
-
-そのため,\LuaTeX-jaのIVS対応においては,\LuaTeX 内部の\
-\texttt{fontloader} を直接用いることで,フォントのIVS情報を取得している.
-20140114.0以降でキャッシュを用いるようにした要因はここにあり,
-\texttt{fontloader} の呼び出しでかなり時間を消費することから,
-%%% to_table を使わなくしたことで,メモリ使用量は減った
-IVS情報をキャッシュに保存することで2回目以降の実行時間を節約している.
-%</ja>
-
-
-%<*ja>
 \section{複数フォントの「合成」(未完)}
 \section{\LuaTeX-jaにおけるキャッシュ}
 \Pkg{luaotfload}パッケージが,各TrueType・OpenTypeフォントの情報を
@@ -11143,6 +11163,51 @@
  }
 \]
 のようになる.
+
+\subsection{縦組用字形の取得}
+縦組時には,「\hbox to \zw{、}」(\texttt{U+3001})から「\ltjjachar"FE11」(\texttt{U+FE11})%"
+のように縦組用字形への置き換えに関係する処理は,以下のようになっている.
+  \begin{itemize}
+	\item 各縦組用和文フォントは読み込み時に以下の属性が設定される:
+	\begin{description}
+	  \item[\textit{vert\_activated}] 真となるのは,
+	  明示的に \texttt{-vert} も \texttt{-vrt2} のいずれも指定されていないちょうどその時.
+	  \item[\textit{auto\_enable\_vrt2}] 真となるのは,
+	  \texttt{vert}, \texttt{vrt2}のいずれについても有効・無効が指定されていないちょうどその時.
+	\end{description}
+	\textit{vert\_activated}については\texttt{luatexja.define\_jfont}コールバックで渡される引数
+	\texttt{jfont\_info}から取得可能である.
+
+	\item \textit{auto\_enable\_vrt2}が真の場合は,現在のscript tagとlanguage system identifierの値で
+	\texttt{vrt2}機能が利用可能か調べる.利用可能ならば\texttt{vrt2}を,そうでなければ
+	\texttt{vert}を有効化する.
+	\item また,各和文フォント読み込み時には,
+	「OpenType機能による置換以前に行う縦組形への置換」を格納したテーブル\textit{vform}も作成する.
+	\begin{enumerate}
+	  \item \LuaTeX-jaには,「\hbox to \zw{、}」(\texttt{U+3001})→「\ltjjachar"FE11」(\texttt{U+FE11})といった
+	  いくつかの置換がハードコードされている.そのような各置換$i\longmapsto v$に対して,
+	  \begin{quote}
+		置換元$i$が(あるscript, languageにおける)\texttt{vert}では置換対象でなく,
+		かつ置換先$v$がフォント内に存在する文字コードである
+	  \end{quote}
+	  ならば,$i\longmapsto v$を\textit{vform}に登録する.
+	  \item \ref{ssec:tfont}節にある\texttt{jpotf}が指定された場合,
+	  ……
+	  \item もし\texttt{vert}も\texttt{vrt2}も現在のscript, languageでは有効にできない場合,
+	  どこかのscript, languageにおける\texttt{vert}で定義されている
+	  置換$i\longmapsto v$をすべて\textit{vform}に登録する.
+	\end{enumerate}
+	
+	あとで説明するように,\textit{vform}は\textit{vert\_activated}が真であるような縦組用和文フォントでしか
+	利用されない.
+	
+	\item 「現在の水平リスト」内の\textbf{JAchar}を(欧文フォントから)和文フォントへ置き換える処理において,
+    その時点での組方向が縦組であり,かつ処理対象の各ノードの縦組用フォントで
+	\textit{vert\_activated}が真である場合,\textit{vform}に従いグリフが置き換えられる.
+
+	\Pkg{luaotfload}が行う,OpenType機能に沿ったグリフ置換はこの後の処理となる.G
+  \end{itemize}
+
 %</ja>
 
 \newpage

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-ajmacros.sty
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-ajmacros.sty	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-ajmacros.sty	2019-05-04 21:10:21 UTC (rev 50978)
@@ -2,7 +2,7 @@
 % luatexja-ajmacros.sty
 %
 % Original:
-% \ProvidesPackage{ajmacros}[2005/12/25 13:52 iNOUE Koich! <inoue at ma.ns.musashi-tech.ac.jp>]
+% \ProvidesPackage{ajmacros}[2019/04/01 21:00 iNOUE Koich! <inoue at ma.ns.musashi-tech.ac.jp>]
 %
 
 
@@ -347,7 +347,8 @@
 	\@ajligdef{#1}{\number\@tempcnta}\advance\@tempcnta\@ne
 	\expandafter\@ajligaturedef\fi}
 \def\@aj at ligdef#1#2#3{\expandafter\xdef\csname ajLig\@ajmojifam#1\endcsname
-	{\noexpand\CID{\noexpand\unless\noexpand\ifnum\noexpand\ltjgetparameter\noexpand{direction\noexpand}=3 #2\noexpand\else#3\noexpand\fi}}}
+	{\unexpanded{\unless\ifnum\ltjgetparameter{direction}=3 }%
+	 \noexpand\CID{#2}\noexpand\else\noexpand\CID{#3}\noexpand\fi}}
 \def\@aj at ligaturedef#1{\ifx\@nil#1\else
 	\@aj at ligdef{#1}{\number\@tempcnta}{\number\@tempcntb}%
 	\advance\@tempcnta\@ne\advance\@tempcntb\@ne
@@ -441,6 +442,7 @@
 \@ajligdef{より}{12181}
 \@ajligdef{升}{16194}
 \@ajligdef{コト}{16195}
+\@aj at ligdef{令和}{23058}{23059}%AJ1-7
 %
 \def\@ajmojifam{○}
 \@tempcnta7613

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-otf.sty
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-otf.sty	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/addons/luatexja-otf.sty	2019-05-04 21:10:21 UTC (rev 50978)
@@ -90,7 +90,7 @@
 \protected\def\CID#1{\ifvmode\leavevmode\fi\ltj at tempcnta#1\relax\directlua{luatexja.otf.cid(\the\ltj at tempcnta)}\relax}
 
 %% \UTF compatible with the OTF package for pLaTeX
-\protected\def\UTF#1{\ifvmode\leavevmode\fi\directlua{luatexja.otf.append_jglyph(0x#1)}}
+\protected\def\UTF#1{\ifvmode\leavevmode\fi\directlua{luatexja.otf.utf(0x#1)}}
 
 %% Load ajmacros
 \ifltj at in@latex                 %<*LaTeX>

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-compat.lua
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-compat.lua	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-compat.lua	2019-05-04 21:10:21 UTC (rev 50978)
@@ -18,6 +18,7 @@
 
 
 -- \kuten, \jis, \euc, \sjis, \ucs, \kansuji
+local utfchar=utf.char
 local function to_kansuji(num)
    if not num then num=0; return
    elseif num<0 then
@@ -25,7 +26,7 @@
    end
    local s = ""
    while num~=0 do
-      s = utf.char(
+      s = utfchar(
 	 ltjs.get_stack_table(luatexja.stack_table_index.KSJ + num%10,
 				'', tex.getcount('ltj@@stack'))) .. s
       num=math.floor(num/10)

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-inputbuf.lua
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-inputbuf.lua	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-inputbuf.lua	2019-05-04 21:10:21 UTC (rev 50978)
@@ -6,9 +6,9 @@
 luatexja.load_module('charrange'); local ltjc = luatexja.charrange
 
 require("unicode")
-local utflen = unicode.utf8.len
-local utfbyte = unicode.utf8.byte
-local utfchar = unicode.utf8.char
+local utflen = utf.len
+local utfbyte = utf.byte
+local utfchar = utf.char
 local node_new = node.new
 local node_free = node.free
 local id_glyph = node.id('glyph')

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-jfont.lua
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-jfont.lua	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-jfont.lua	2019-05-04 21:10:21 UTC (rev 50978)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.jfont',
-  date = '2019/02/11',
+  date = '2019/05/01',
   description = 'Loader for Japanese fonts',
 })
 
@@ -43,7 +43,7 @@
 
 local jfm_file_name, jfm_var, jfm_ksp
 local defjfm_res
-local jfm_dir, is_def_jfont, is_vert_enabled, auto_enable_vrt2
+local jfm_dir, is_def_jfont, vert_activated, auto_enable_vrt2
 
 local function norm_val(a)
    if (not a) or (a==0.) then
@@ -297,10 +297,10 @@
    end
 
 -- EXT
-   local utf8 = unicode.utf8
+   local utfbyte = utf.byte
    function luatexja.jfont.jfontdefX(g, dir, csname)
       jfm_dir, is_def_jfont = dir, true
-      cstemp = csname:sub( (utf8.byte(csname,1,1) == tex.escapechar) and 2 or 1, -1)
+      cstemp = csname:sub( (utfbyte(csname,1,1) == tex.escapechar) and 2 or 1, -1)
       cstemp = cstemp:sub(1, ((cstemp:sub(-1,-1)==' ') and (cstemp:len()>=2)) and -2 or -1)
       global_flag = g and '\\global' or ''
       tex.sprint(cat_lp, '\\expandafter\\font\\csname ',
@@ -338,7 +338,7 @@
                         chars = sz.chars, char_type = sz.char_type,
                         kanjiskip = sz.kanjiskip, xkanjiskip = sz.xkanjiskip,
                         chars_cbcache = {},
-                        vert_activated = is_vert_enabled,
+                        vert_activated = vert_activated,
       }
       local t = identifiers[fn]
       if auto_enable_vrt2 then
@@ -434,11 +434,11 @@
          jfm_ksp = not (x=='-')
       end
       if jfm_dir == 'tate' then
-         is_vert_enabled = (not name:match('[:;]%-vert')) and (not  name:match('[:;]%-vrt2'))
+         vert_activated = (not name:match('[:;]%-vert')) and (not  name:match('[:;]%-vrt2'))
          auto_enable_vrt2 
            = (not name:match('[:;][+%-]?vert')) and (not name:match('[:;][+%-]?vrt2'))
       else
-         is_vert_enabled, auto_enable_vrt2 = nil, nil
+         vert_activated, auto_enable_vrt2 = nil, nil
       end
       return name
    end
@@ -1093,18 +1093,34 @@
      [0x300C]=0xFE41, [0x300D]=0xFE42, [0x300E]=0xFE43, [0x300F]=0xFE44,
      [0xFF3B]=0xFE47, [0xFF3D]=0xFE48, 
   }
-  local function add_vform(coverage, vform, ft, add_vert)
-     if type(coverage)~='table' then return end
-     for i,v in pairs(vert_form_table) do
-         if not coverage[i] and ft.characters[v] then
-             vform[i] = v
-         end
-     end
-     if add_vert then -- vert feature が有効にならない場合
-        for i,v in pairs(coverage) do vform[i] = vform[i] or v end
-     end
+  local vert_jpotf_table = {}
+  local function add_vform(coverage, vform, ft, add_vert, jpotf_vert)
+    if type(coverage)~='table' then return end
+    for i,v in pairs(vert_form_table) do
+       if not coverage[i] and ft.characters[v] then vform[i] = v end
+    end
+    if jpotf_vert then
+      for i,v in pairs(vert_jpotf_table) do
+	if ft.characters[v] then  vform[i] = coverage[v] or vform[v] or v end
+      end
+    end
+    if add_vert then -- vert feature が有効にならない場合
+      for i,v in pairs(coverage) do vform[i] = vform[i] or v end
+    end
   end
 
+  local utfbyte, utfsub = utf.byte, utf.sub
+  luatexja.jfont.register_vert_replace = function(t)
+    for i,v in pairs(t) do
+      local ic = (type(i)=='number') and i or 
+        ((type(i)=='string') and utfbyte(utfsub(i,1,1)) or nil)
+      if ic then
+        vert_jpotf_table[ic] = (type(v)=='number') and v or 
+          ((type(v)=='string') and utfbyte(utfsub(v,1,1)) or nil)
+      end
+    end  
+  end
+
 luatexbase.add_to_callback(
    "luatexja.define_jfont",
    function (fmtable, fnum)
@@ -1114,11 +1130,14 @@
          local add_vert  
            = not (provides_feature(fnum, t.properties.script, t.properties.language, 'vert'))
              and not (provides_feature(fnum, t.properties.script, t.properties.language, 'vrt2'))
+         local jpotf_vert = t.shared.features.jpotf
          -- 現在の language, script で vert もvrt2 も有効にできない場合,強制的に vert 適用
          for _,i in pairs(t.resources.sequences) do
             if i.order[1]== 'vert' and i.type == 'gsub_single' and i.steps then
                for _,j in pairs(i.steps) do
-                  if type(j)=='table' then add_vform(j.coverage,vform, t, add_vert) end
+                  if type(j)=='table' then
+		      add_vform(j.coverage,vform, t, add_vert, jpotf_vert)
+		  end
                end
             end
           end

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua	2019-05-04 21:10:21 UTC (rev 50978)
@@ -82,19 +82,49 @@
    elseif v<0xF0000 then -- 素直に Unicode にマップ可能
       return v
    else -- privete use area
-      local w = ltjr_cidfont_data["Adobe-Japan1"].characters[v]. tounicode
-      -- must be non-nil!
-      local i = string.len(w)
-      if i==4 then -- UCS2
-         return tonumber(w,16)
-      elseif i==8 then
-         i,w = tonumber(string.sub(w,1,4),16), tonumber(string.sub(w,-4),16)
-         if (w>=0xD800) and (w<=0xDB7F) and (i>=0xDC00) and (i<=0xDFFF) then -- Surrogate pair
-            return (w-0xD800)*0x400 + (i-0xDC00)
-         else
-            return 0
+      local r, aj = nil, ltjr_cidfont_data["Adobe-Japan1"] 
+      -- 先に ltj_vert_table を見る
+      for i,w in pairs(aj.shared.ltj_vert_table) do
+         if w==v then r=i; break end
+      end
+      if not r then
+         -- なければ ToUnicode から引く
+         local w = aj.characters[v].tounicode -- must be non-nil!
+         local i = string.len(w)
+         if i==4 then -- UCS2
+            r = tonumber(w,16)
+         elseif i==8 then
+            i,w = tonumber(string.sub(w,1,4),16), tonumber(string.sub(w,-4),16)
+            if (w>=0xD800) and (w<=0xDB7F) and (i>=0xDC00) and (i<=0xDFFF) then -- Surrogate pair
+               r = (w-0xD800)*0x400 + (i-0xDC00)
+            else
+               r = 0
+            end
          end
       end
+      if aj.shared.ltj_vert_table[r] then
+         -- CID が縦組用字形だった場合
+         local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+                                        and attr_curtfnt or attr_curjfnt)
+         local t = identifiers[curjfnt_num]
+         if t.resources.sequences then
+            for _,i in pairs(t.resources.sequences) do
+               if (i.order[1]=='vert' or i.order[1]=='vrt2')
+                  and i.type == 'gsub_single' and i.steps then
+                  for _,j in pairs(i.steps) do
+                     if type(j)=='table' then 
+                        if type(j.coverage)=='table' then
+                           for i,k in pairs(j.coverage) do
+                              if i==r then return k end
+                           end
+                        end
+                     end
+                  end
+               end
+            end
+         end
+      end
+      return r
    end
 end
 
@@ -108,10 +138,39 @@
    node_write(p)
 end
 
+local utf
+do
+   utf = function (ucs)
+      local char = ucs
+      if ltjd_get_dir_count()==dir_tate then
+         local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+                                        and attr_curtfnt or attr_curjfnt)
+         local t = identifiers[curjfnt_num]
+         if t.resources.sequences then
+            for _,i in pairs(t.resources.sequences) do
+               if (i.order[1]=='vert' or i.order[1]=='vrt2')
+                  and i.type == 'gsub_single' and i.steps then
+                  for _,j in pairs(i.steps) do
+                     if type(j)=='table' then 
+                        if type(j.coverage)=='table' then
+                           for i,k in pairs(j.coverage) do
+                              if i==char then return append_jglyph(k) end
+                           end
+                        end
+                     end
+                  end
+               end
+            end
+         end
+      end
+      return append_jglyph(char)
+   end
+end
+
 local cid
 do
    cid = function (key)
-      if key==0 then return append_jglyph(char) end
+      if key==0 then return append_jglyph(0) end
       local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
                                         and attr_curtfnt or attr_curjfnt)
       local curjfnt = identifiers[curjfnt_num]
@@ -235,7 +294,7 @@
   append_jglyph = append_jglyph,
   enable_ivs = enable_ivs,  -- 隠し機能: IVS
   disable_ivs = disable_ivs,  -- 隠し機能: IVS
-  cid = cid,
+  cid = cid, utf = utf,
 }
 
 

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-plain.sty
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-plain.sty	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-plain.sty	2019-05-04 21:10:21 UTC (rev 50978)
@@ -14,7 +14,7 @@
 \ifltj at in@latex                 %<*LaTeX>
   \NeedsTeXFormat{LaTeX2e}
   \PackageWarning{ltj-plain}{Don't load this package directly; load luatexja.sty instead.}
-  \ProvidesPackage{ltj-plain}[2019/02/11]
+  \ProvidesPackage{ltj-plain}[2019/05/01]
 \fi                             %</LaTeX>
 
 %%------------------
@@ -100,6 +100,10 @@
 \protected\def\@@end{%
   \directlua{luatexja.ext_cleanup()}\ltj@@orig at end}
 
+\directlua{luatexja.jfont.register_vert_replace{
+  [',']='、', ['.']='。', ['“']=0x301D, ['”']=0x301F,
+}}
+
 %%------------------ all done
 \ltj at plain@AtEnd
 \endinput

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/ltj-rmlgbm.lua	2019-05-04 21:10:21 UTC (rev 50978)
@@ -185,7 +185,7 @@
       for i = 0,kx[2] do cidm[i] = -1 end
       open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
       for i,v in pairs(tt) do
-         ttv[i] =  cidmo[v.index]
+	 ttv[i] =  cidmo[v.index] -- "unicode" of vertical variant
       end
 
       -- tounicode エントリ

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.lua
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.lua	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.lua	2019-05-04 21:10:21 UTC (rev 50978)
@@ -400,7 +400,7 @@
 end
 
 local prefix, inner_depth
-
+local utfchar = utf.char
 local function debug_show_node_X(p,print_fn, limit)
    local k = prefix
    local s
@@ -409,7 +409,7 @@
    .. ' ' .. pt .. ' ' .. tostring(p.subtype) .. ' '
    if pt == 'glyph' then
       s = base .. ' ' .. 
-         (p.char>=0xF0000 and string.format('(U+%X)', p.char) or utf.char(p.char)) .. ' '
+         (p.char>=0xF0000 and string.format('(U+%X)', p.char) or utfchar(p.char)) .. ' '
          .. tostring(p.font) .. ' (' .. print_scaled(p.height) .. '+'
          .. print_scaled(p.depth) .. ')x' .. print_scaled(p.width)
       if p.xoffset~=0 or p.yoffset~=0 then
@@ -561,7 +561,7 @@
       end
       prefix = k;
    elseif pt=='math_char' then
-      s = base .. ' fam: ' .. p.fam .. ' , char = ' .. utf.char(p.char)
+      s = base .. ' fam: ' .. p.fam .. ' , char = ' .. utfchar(p.char)
       print_fn(s)
    elseif pt=='sub_box' or pt=='sub_mlist' then
       print_fn(base)

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.sty
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.sty	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/luatexja.sty	2019-05-04 21:10:21 UTC (rev 50978)
@@ -41,7 +41,7 @@
   \ProcessOptions\relax
 \fi                             %</LaTeX>
 %%%% VERSION
-\def\LuaTeXjaversion{20190408.0}
+\def\LuaTeXjaversion{20190504.0}
 
 \directlua{require('ltj-unicode-ccfix.lua')}% catcode of ideographs
 

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjdefs.sty
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjdefs.sty	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjdefs.sty	2019-05-04 21:10:21 UTC (rev 50978)
@@ -3,7 +3,7 @@
 %
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{lltjdefs}[2019/02/11 Default font settings of LuaTeX-ja]
+\ProvidesPackage{lltjdefs}[2019/05/01 Default font settings of LuaTeX-ja]
 
 \ifdefined\ltj at stdmcfont\else\def\ltj at stdmcfont{IPAExMincho}\fi
 \ifdefined\ltj at stdgtfont\else\def\ltj at stdgtfont{IPAExGothic}\fi
@@ -120,6 +120,10 @@
 \directlua{for x=128,255 do luatexja.math.is_math_letters[x] = true end}
 \protected\def\<{\ifvmode\leavevmode\fi\inhibitglue}
 
+\directlua{luatexja.jfont.register_vert_replace{
+  [',']='、', ['.']='。', ['“']=0x301D, ['”']=0x301F,
+}}
+
 % END OF FILE
 \endinput
 

Modified: trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjp-fontspec.sty
===================================================================
--- trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjp-fontspec.sty	2019-05-04 21:09:35 UTC (rev 50977)
+++ trunk/Master/texmf-dist/tex/luatex/luatexja/patches/lltjp-fontspec.sty	2019-05-04 21:10:21 UTC (rev 50978)
@@ -132,15 +132,19 @@
    { \fontspec_visible_space_fallback: }
  }
 
-\def\verb
- {
-  \relax\ifmmode\hbox\else\leavevmode\fi % same as lltjcore
-  \bgroup
-    \verb at eol@error \let\do\@makeother \dospecials
-    \verbatim at font\@noligs
-    \@ifstar\__fontspecsverb\@verb
- }
-
+\AtBeginDocument{
+  \cs_if_exist:NF \verbvisiblespace {
+    % >= LaTeX2e <2018-12-01> does not need the following patch
+    \def\verb
+    {
+      \relax\ifmmode\hbox\else\leavevmode\fi % same as lltjcore
+      \bgroup
+        \verb at eol@error \let\do\@makeother \dospecials
+        \verbatim at font\@noligs
+        \@ifstar\__fontspecsverb\@verb
+    }
+  }
+}
 \cs_set:Npn \emshape { \gtfamily \itshape }
 \cs_set:Npn \eminnershape { \mcfamily \upshape }
 



More information about the tex-live-commits mailing list