• R/O
  • HTTP
  • SSH
  • HTTPS

luatexja: コミット

ソースコードの管理場所


コミットメタ情報

リビジョンdc4bfddd78aca475291a7f1b035494baf77afa8e (tree)
日時2011-04-13 10:07:24
作者Hironori Kitagawa <h_kitagawa2001@yaho...>
コミッターHironori Kitagawa

ログメッセージ

直前のコミットがうまくいっていなかったことへの修正.

変更サマリ

差分

--- a/doc/s1sty.tex
+++ b/doc/s1sty.tex
@@ -22,39 +22,37 @@
2222
2323 % Japanese fonts
2424 \input luatexja-core.sty
25-\loadjfontmetric{mt}{ujis}
26-\loadjfontmetric{zero}{mono}
27-\def\minfnt{psft:Ryumin-Light:jfm=mt }
28-\def\gothfnt{psft:GothicBBB-Medium:jfm=mt }
29-\jfont\eightipam=\minfnt at 10.5\jQ
30-\jfont\eightipag=\gothfnt at 10.5\jQ
31-\jfont\tenipam=\minfnt at 13.5\jQ
32-\jfont\tenjtt={psft:GothicBBB-Medium:jfm=zero} at 13.5\jQ
33-\jfont\tenipag=\gothfnt at 13.5\jQ
34-\jfont\twelveipam=\minfnt at 16\jQ
35-\jfont\twelveipag=\gothfnt at 16\jQ
36-\jfont\bigipag=\gothfnt at 28\jQ
25+\def\minfnt{psft:Ryumin-Light:jfm=ujis }
26+\def\gothfnt{psft:GothicBBB-Medium:jfm=ujis }
27+\jfont\eightmc=\minfnt at 10.5\jQ
28+\jfont\eightgt=\gothfnt at 10.5\jQ
29+\let\tenmc=\tenmin
30+\jfont\tenjtt={psft:GothicBBB-Medium:jfm=mono} at 13.5\jQ
31+\let\tengt=\tengt
32+\jfont\twelvemc=\minfnt at 16\jQ
33+\jfont\twelvegt=\gothfnt at 16\jQ
34+\jfont\biggt=\gothfnt at 28\jQ
3735
3836 % Size
3937 \def\large{\def\rm{\textfont0=\twelverm\twelverm\fam0}\def\bf{\twelvebf\gt}%
4038 \let\it=\twelveit \let\sl=\twelvesl \let\mus=\twelvemus
4139 \let\sc=\twelvesc \let\tt=\twelvett
42- \let\mc=\twelveipam \let\gt=\twelveipag
40+ \let\mc=\twelvemc \let\gt=\twelvegt
4341 \baselineskip=18pt\rm\mc\xkanjiskip=0.25\zw plus 0.10\zw minus 0.10\zw}
4442
45-\def\big{\bigbf\bigipag\xkanjiskip=0.25\zw plus 0.10\zw minus 0.10\zw}
43+\def\big{\bigbf\biggt\xkanjiskip=0.25\zw plus 0.10\zw minus 0.10\zw}
4644
4745 \def\normalsize{\def\rm{\textfont0=\tenrm\tenrm\fam0}\def\bf{\tenbf\gt}%
4846 \let\it=\tenit \let\sl=\tensl \let\mus=\tenmus
4947 \let\sc=\tensc \def\tt{\tentt\tenjtt}%
50- \let\mc=\tenipam \let\gt=\tenipag
51- \baselineskip=15pt\rm\mc\xkanjiskip=0.25\zw plus 0.10\zw minus 0.10\zw}
48+ \let\mc=\tenmc \let\gt=\tengt
49+ \baselineskip=15pt\rm\mc\xkanjiskip=0.25\zw plus 1pt minus 1pt}
5250 \def\small{\def\rm{\textfont0=\eightrm\eightrm\fam0}\def\bf{\eightbf\gt}%
5351 \let\it=\eightit \let\sl=\eightsl \let\mus=\eightmus
5452 \let\sc=\eightsc \def\tt{\eighttt\eightjtt}%
55- \let\mc=\eightipam \let\gt=\eightipag%
56- \rm\mc\xkanjiskip=0.25\zw plus 0.10\zw minus 0.10\zw%
57- \ykbaselineshift=-49807\yabaselineshift=-49807
53+ \let\mc=\eightmc \let\gt=\eightgt%
54+ \rm\mc\xkanjiskip=0.25\zw plus 1pt minus 1pt%
55+ \setjaparameter{ykbaselineshift=-0.76pt, yabaselineshift=-0.76pt}
5856 }
5957
6058
@@ -62,7 +60,7 @@
6260 % layout
6361 \normalsize\parindent=1\zw\parskip=0pt
6462 \pdfpagewidth=210mm\pdfpageheight=297mm
65-\hsize=40\zw\hoffset=\dimexpr(\pdfpagewidth-\hsize)/2-1in\relax
63+\hsize=43\zw\hoffset=\dimexpr(\pdfpagewidth-\hsize)/2-1in\relax
6664 \vsize=246mm
6765
6866 % heading
Binary files a/doc/sample1.pdf and b/doc/sample1.pdf differ
--- a/doc/sample1.tex
+++ b/doc/sample1.tex
@@ -4,7 +4,6 @@
44 \message{BB}
55 \overfullrule=0pt
66 \def\LaTeX{L\kern-.36em\setbox0=\hbox{T}\vbox to\ht0{\hbox{\sevenrm A}\vss}\kern-.15em\TeX}
7-\xkanjiskip=0.25\zw plus .10\zw minus .10\zw
87 \font\mff=manfnt at 10pt
98 \def\mf{{\mff META{\rm\-}FONT}}
109 \def\textfontii{\the\textfont2 }
@@ -63,9 +62,9 @@
6362 {\bf 現時点で\LaTeX での使用は全く考慮されていない.}
6463 \item {\tt luatexja-core.lua}: コア部分に使われるLuaコード.
6564 \item {\tt luatexja-jfont.lua}: 和文フォント定義部のLuaコード.
66-\item {\tt luatexja-rmlgbm.lua}: 非埋込和文フォント (Ryumin-Light etc.) 定義部.
6765 \item {\tt luatexja-rmlgbm-data.lua}: 非埋込和文フォント用のデータ(小塚明朝Pr6N R由来).
6866 \item {\tt mk-rmlgbm-data.lua}: {\tt luatexja-rmlgbm-data.lua}作成用Luaスクリプト({\tt texlua}で実行;小塚明朝を{\tt luaotfload}で読み込んだ時のキャッシュが必要).
67+\item {\tt mk\_lua.py}: {\tt luatexja-ucs2aj16.lua}作成用Pythonスクリプト.
6968
7069 \item {\tt luatexja-kinsoku.tex}: 禁則用ペナルティ等のパラメータを書いたファイル.
7170 下のファイルによって{\tt ukinsoku.tex} (in up\TeX-0.30) から自動生成されたもの.
@@ -79,12 +78,10 @@
7978 大雑把に言うと,plain \TeX の状況で,以下のようにすればよい.
8079 \begintt
8180 \input luatexja-core.sty % ←マクロ本体を読み込み
82-\loadjfontmetric{mt}{ujis} % ←メトリックの読み込み
83-\jfont\tenipam={file:ipam.ttf:jfm=mt}at13.5\jQ
81+\jfont\tenipam={file:ipam.ttf:jfm=ujis} at 13.5\jQ
8482 \tenipam\parindent=1\zw
85-\yabaselineshift=32768 % (例)32768 sp = 0.5 pt
8683
87-\rm abcほげほげ)(あいう本文本文……
84+\rm\tenipam abcほげほげ)(あいう本文本文……
8885 \endtt
8986
9087 \beginsection 実装解説
@@ -92,7 +89,7 @@
9289 \beginparagraph attributes, dimensions,$\,\ldots$
9390
9491 以下はLua\TeX-jaパッケージ内で使用するattributeやその他の種類のレジスタである.
95-上4つは内部処理用なので利用者が意識することはない.それ以外は,p\TeX に類似の名前の
92+上6つは内部処理用なので利用者が意識することはない.それ以外は,p\TeX に類似の名前の
9693 primitiveがあることから,意味は容易にわかるだろう:
9794
9895 \item attribute |\luatexja@curjfnt|: 現在の和文フォント番号
@@ -111,12 +108,12 @@ p\TeX では,|\kern|由来のkernと,イタリック補正由来のkernを
111108
112109 \item language |\luatexja@japanese|: 「日本語」に対応する|\language|番号
113110
114-\item attribute |\yabaselineshift|: 欧文文字ベースラインの補正量.
111+\item attribute |\luatexja@yabaselineshift|: 欧文文字ベースラインの補正量.
115112 \itemitem {\bf sp$\fam\bffam {}=2^{-16}\,{\bf pt}$単位の整数値}で指定.
116113 正の値を指定すると,その分だけ欧文文字は下にずれる.
117114 \itemitem 数式中では,boxやruleもこの量だけずれる\hfil\break
118115 (よって,行中数式は全体が|\yabaselineshift|だけずれたように見える).
119-\item attribute |\ykbaselineshift|: 和文文字ベースラインの補正量.
116+\item attribute |\luatexja@ykbaselineshift|: 和文文字ベースラインの補正量.
120117
121118 p\TeX では「和文が主」という考えからか,常に和文文字のベースラインが基準であり,
122119 欧文文字の方をずらすことになっていた.しかし,「欧文の中に和文をちょっと入れる」ような場合では,
@@ -126,6 +123,7 @@ p\TeX では「和文が主」という考えからか,常に和文文字の
126123 {\small 異なる文字サイズの文字を「上下中央揃え」で組む}ことも可能.
127124 \item skip |\kanjiskip|: 和文文字同士の間に入る空白量.
128125 \item skip |\xkanjiskip|: 和文文字と欧文文字の間に入る空白量.
126+\item count |\jcharwidowpenalty|: {\bf 未実装}
129127 \item dimen |\zw|, |\zh|: 現在の和文フォントの「幅」/「高さ」(メトリックから指定)
130128 \item dimen |\jQ|, |\jH|${}= 0.25\,{\rm mm}$
131129 \enditem
@@ -134,66 +132,116 @@ p\TeX では「和文が主」という考えからか,常に和文文字の
134132 \beginparagraph 和文フォントの定義
135133
136134 Lua\TeX-jaでは,大雑把にいうと
137-和文フォントは「実際の字形」と「和文用のメトリック情報」の組である.
138-\item メトリック情報は,和文文字の幅や,和文文字間の空白の入り方などを規定する.
139-p\TeX における{\tt JFM}ファイルのようなものと考えてよい.
140-\enditem
141-
142-このため,和文フォントを使うには,以下のような手順が必要である.
143-
144-\enum |\loadjfontmetric{<key>}{<file>}|
135+和文フォントは「実際の字形」と「和文用のメトリック情報 (JFM)」の組である.
136+JFM は和文文字の幅や,和文文字間の空白の入り方などを規定するもの%
137+{\small (p\TeX におけるJFMファイルとほぼ同じ内容)}であり,
138+|jfm-<name>.lua|という名称のファイルにLuaコードの形で書かれている.
145139
146-Luaソース|luatj-<file>.lua|に書かれたメトリック情報を読み込む.
147-内部では<key>というキーで参照されることとなる.同じkeyで2回以上読み込むことはできないが,
148-同じメトリック情報に異なるキーをつけることは差し支えない.
140+和文フォントを使うには,
141+\TeX の|\font| primitiveと同様の書式を持った次の命令を用いて和文フォントを定義する:
149142
150-\enum |\jfont<font>={<fontname>:jfm=<key>} [at <size>/scaled <scale>]|
151-
152-\TeX の|\font| primitiveと同様の書式を持った|\jfont|命令を用いて和文フォントを定義する.
153-少し正確に言うと,制御綴<font>の意味を,「$\hbox{|\luatexja@curjfnt|}\leftarrow v$」というように
154-変更する.
143+\begintt
144+ \jfont<font>={<fontname>:<features>} <size> % local に定義
145+ \gjfont<font>={<fontname>:<features>} <size> % global に定義
146+\endtt
155147
156-\itemitem 内部でluaotfloadパッケージを読み込んでいる.そのため,
157-<fontname>の部分は |file:ipam.ttf| 等のように,TrueType/OpenTypeフォントを指定することが可能.
158148
159-\itemitem 但し,<fontname>が|psft:<ps-font>|であった場合は,
160-<ps-font>で指定された名前の和文フォント(非埋込)となる.
149+\item {\bf <fontname> の指定について}\par\noindent
150+内部でluaotfloadパッケージを読み込んでいる.大きくわけて,以下の4種類がある.
151+このうち,前の2つはluaotfloadパッケージの機能である.
152+\itemitem |file:<filename>|\par\noindent
153+TrueType/OpenTypeフォントをファイル名<filename>で指定.
154+\itemitem |name:<fontname>|\par\noindent
155+システム内のフォント名を<fontname>に指定することも可能.
156+\itemitem |psft:<PSfontname>|\par\noindent
157+PSフォント名<PSfontname>を直接指定することもでき,
158+この場合はフォントは名前だけ(非埋込)となる.
161159 例えば,本文章では,
162160 \begintt
163-\jfont\tenipam={psft:Ryumin-Light:jfm=mt} at 13.5\jQ
164-\jfont\tenipag={psft:GothicBBB-Medium:jfm=mt} at 13.5\jQ
161+\jfont\tenmc={psft:Ryumin-Light:jfm=ujis} at 13.5\jQ
162+\jfont\tengt={psft:GothicBBB-Medium:jfm=ujis} at 13.5\jQ
165163 \endtt
166164 のような定義をし,標準和文フォントRyumin-Light, GothicBBB-Mediumを用いている.
167-\itemitem luaotfload packageの他の機能,例えば各種のfeature,を用いてもよい.例えば,次のように:
165+%\itemitem |vf:<vfname>|
166+
167+\item {\bf JFMの指定}:<features>欄に次を指定する.\par\noindent
168+\itemitem |jfm=<jfmfile>|: JFMとして|jfm-<jfmfile>.lua|を用いることを示す.必須.
169+\itemitem |jfmvar=<varkey>|\par\noindent
170+和文文字間の空白の挿入処理は,使用するJFMと,この<varkey>の値とのペアによって行われる.
171+
172+\item luaotfload packageの他の機能,例えば各種のfeature,を用いてもよい:
168173 \begintt
169174 \jfont\tenipam={file:ipaexm.ttf:script=latn;+jp90;jfm=mt}
170175 \endtt
171176
172-
173177 \enditem
174178
175-\beginparagraph その他命令類
179+\beginparagraph 組版パラメタの調整
176180
177-\item |\(set/get)inhibitxspcode{<code>}{<num>}|, \hfil\break
178-|\(set/get)xspcode{<code>}{<num>}|,\hfil\break
179-|\(set/get)prebreakpenalty{<code>}{<num>}|,\hfil\break
180-|\(set/get)postbreakpenalty{<code>}{<num>}|
181-
182-これらはp\TeX の(|set|/|get|を抜かした)命令と意味は概ね同じであるが,以下の点が異なる.
183-
184-\itemitem 同じ文字コードについて|\prebreakpenalty|, |\postbreakpenalty|を両方指定することが
185-可能.
186-\itemitem |\(set/get)xspcode|(欧文文字用)は|\(set/get)inhibitxspcode|(和文文字用)の別名であり,
181+日本語組版用の各種パラメタの調整には,次の命令を用いる.
187182 \begintt
188-\setxspcode{12289}{1} \setinhibitxspcode{12289}{1}
183+ \setjaparameter{<key>=<value>, ...} % local に変更
184+ \globalsetjaparameter{<key>=<value>, ...} % global に変更
189185 \endtt
190-は全く同じ意味である.|\setxspcode|, |\setinhibitxspcode|の第2引数の意味は異なるが,
191-両者の意味は文字コードにより判断している.
192186
193-\item |\inhibitglue|: 指定箇所での和文フォントメトリック由来のglue/kernの挿入を禁止する.
187+<key> に許される値は次の通りである.
188+
189+\enum ★がついているものは,段落や水平ボックス構成時の値が全体に影響するものである.
190+
191+\enum ◎がついているものは,自動的にglobalな代入となってしまうもの.
192+
193+\item |prebreakpenalty={<chrcode>, <penalty>}|★◎\par\noindent
194+p\TeX の|\prebreakpenalty|に対応した設定項目である.
195+\itemitem <chrcode>: 文字コードを指定する.一旦補助カウンタに代入されるので,
196+16進法での数値の指定 (|"abcd|) や,%"
197+文字トークンによる指定 (|`あ|) も可能である.
198+\itemitem <penalty>: penalty の値を0から10000までの自然数で指定する
199+{\small(範囲外でも可能だが)\inhibitglue}.
200+
201+\item |postbreakpenalty={<chrcode>, <penalty>}|★◎\par\noindent
202+同様に,p\TeX の|\postbreakpenalty|に対応した設定項目である.
203+p\TeX では,同一文字に対して|\prebreakpenalty|, |\postbreakpenalty|の両方を定義する
204+ことはできなかったが,Lua\TeX-jaでは可能である.
205+
206+\item |cjkxspmode={<chrcode>, <mode>}|★◎\par\noindent
207+p\TeX の|\inhibitxspcode|に対応した設定項目である.<mode>で許される値は,
208+\itemitem 0, 1, 2, 3: p\TeX の対応するprimitiveと同じ意味.
209+\itemitem |inhibit|: 前後の欧文文字との間の|\xkanjiskip|自動挿入を禁止.
210+\itemitem |preonly|: 前の欧文文字との間の|\xkanjiskip|自動挿入のみを許可.
211+\itemitem |postonly|: 後の欧文文字との間の|\xkanjiskip|自動挿入のみを許可.
212+\itemitem |allow|: 前後の欧文文字との間の|\xkanjiskip|自動挿入を許可.
213+\item |asciixspmode={<chrcode>, <mode>}|★◎\par\noindent
214+同様に,p\TeX の|\xspcode|に対応した設定項目である.
215+\item |yabaselineshift=<dimen>|:
216+欧文文字のベースライン補正量をdimensionで指定する.
217+\item |ykbaselineshift=<dimen>|:
218+和文文字のベースライン補正量をdimensionで指定する.
219+\item |kanjiskip=<skip>|★\inhibitglue: |\kanjiskip=<skip>|と同じ意味.
220+\item |xkanjiskip=<skip>|★\inhibitglue: |\xkanjiskip=<skip>|と同じ意味.
221+\item |jcharwidowpenalty=<penalty>|★\inhibitglue: |\jcharwidowpenalty=<penalty>|と同じ意味.
222+\item |autospacing[=<bool>]|★◎\par\noindent
223+和文文字間のglue(|\kanjiskip|)の自動挿入をするかしないかを制御.
224+\item |autoxspacing[=<bool>]|★◎\par\noindent
225+和欧文間のglue(|\xkanjiskip|)の自動挿入をするかしないかを制御.
226+
227+\item |differentjfm=(large/small/average/both)|★◎\par\noindent
228+異なる$(\hbox{<jfm>}, \hbox{<varkey>})$である2つの和文文字の間の
229+glue/kernの計算方法を設定する.
230+左側文字由来,右側文字由来のものが両方存在した場合にのみ効力をもつ.
231+\itemitem {\tt large}: glue/kernの幅が両者のうち大きい方になるように定める.
232+\itemitem {\tt small}: 両者のうち小さい方.
233+\itemitem {\tt average}: 両者の相加平均.
234+\itemitem {\tt both}: 両者の合計値の幅をもつglue/kernを挿入する.
235+
236+
237+\enditem
238+
239+\beginparagraph inhibitglue
240+
241+|\inhibitglue|
242+: 指定箇所での和文フォントメトリック由来のglue/kernの挿入を禁止する.
194243 内部的には,|user_id|が30111のwhatsit nodeを作成している{\small(メトリック由来の
195244 glue/kern挿入処理で役目を終え,削除される)\inhibitglue}.
196-\enditem
197245
198246
199247 \beginparagraph 大まかな処理の流れ
@@ -240,18 +288,14 @@ $p$は「現在の和文フォント」の番号もattribute |\luatexja@curjfnt|
240288 両者のフォントのmetric keyとsizeが一致した場合は,
241289 挿入処理においては「同じフォント」であるかのように扱う.
242290 \itemitem そうでない場合は,両者の間に「文字コード|'diffmet'|の文字」があると見做して,
243-両和文文字からそれぞれglue/kern |gb|, |ga|を計算し,そこから実際に入るglue/kernを,
244-関数|ltj.calc_between_two_jchar_aux|で計算している:
245-\itemT |gb|, |ga|の片方がglue,もう片方がkernの場合は,glue側のみ挿入.
246-\itemT そうでないときは,両者の平均値の空白を挿入する.
291+両和文文字からそれぞれglue/kern |gb|, |ga|を計算し,そこから実際に入るglue/kernを
292+計算している(|\setjaparameter|中の|differentjfm|キーを参照).
247293
248294 \item |\kanjiskip|, |\xkanjiskip|の挿入: |pre_linebreak_filter|, |hpack_filter|
249295
250296 p\TeX の|adjust_hlist| procedureとほぼ同様の処理を用いて,
251297 和文間glue |\kanjiskip|や和欧文間glue |\xkanjiskip|を
252298 挿入する.
253-\itemitem p\TeX と同様に,これらの自動挿入は(box/段落ごとに)
254-|\[no]auto[x]spacing|を用いて制御できる.
255299 \itemitem 数式境界 (|math_node|) との間に|\xkanjiskip|を自動挿入するかの決定は,
256300 p\TeX では数字{\tt 0}との間に挿入するかどうかで判定していたが,Lua\TeX-jaでは
257301 「文字コード|'math'|の文字」で判定している.
--- a/src/luatexja-core-aux.lua
+++ b/src/luatexja-core-aux.lua
@@ -18,7 +18,69 @@ end
1818 -- ga: 後側の和文文字 a 由来の glue/kern (maybe nil)
1919 -- 両者から,b と a の間に入る glue/kern を計算する
2020
21-function ltj.calc_between_two_jchar_aux(gb,ga)
21+function ltj.calc_between_two_jchar_aux_large(gb,ga)
22+ if not gb then
23+ return ga
24+ else
25+ if not ga then return gb end
26+ local k = node.type(gb.id) .. node.type(ga.id)
27+ if k == 'glueglue' then
28+ -- 両方とも glue.大きい方をとる
29+ gb.spec.width = math.max(gb.spec.width,ga.spec.width)
30+ gb.spec.stretch = math.max(gb.spec.stretch,ga.spec.shrink)
31+ gb.spec.shrink = math.min(gb.spec.shrink,ga.spec.shrink)
32+ return gb
33+ elseif k == 'kernkern' then
34+ -- 両方とも kern.
35+ gb.kern = math.max(gb.kern,ga.kern)
36+ return gb
37+ elseif k == 'kernglue' then
38+ -- gb: kern, ga: glue
39+ ga.spec.width = math.max(gb.kern,ga.spec.width)
40+ ga.spec.stretch = math.max(ga.spec.stretch,0)
41+ ga.spec.shrink = math.min(ga.spec.shrink,0)
42+ return ga
43+ else
44+ -- gb: glue, ga: kern
45+ gb.spec.width = math.max(ga.kern,gb.spec.width)
46+ gb.spec.stretch = math.max(gb.spec.stretch,0)
47+ gb.spec.shrink = math.min(gb.spec.shrink,0)
48+ return gb
49+ end
50+ end
51+end
52+function ltj.calc_between_two_jchar_aux_small(gb,ga)
53+ if not gb then
54+ return ga
55+ else
56+ if not ga then return gb end
57+ local k = node.type(gb.id) .. node.type(ga.id)
58+ if k == 'glueglue' then
59+ -- 両方とも glue.大きい方をとる
60+ gb.spec.width = math.min(gb.spec.width,ga.spec.width)
61+ gb.spec.stretch = math.min(gb.spec.stretch,ga.spec.shrink)
62+ gb.spec.shrink = math.max(gb.spec.shrink,ga.spec.shrink)
63+ return gb
64+ elseif k == 'kernkern' then
65+ -- 両方とも kern.
66+ gb.kern = math.min(gb.kern,ga.kern)
67+ return gb
68+ elseif k == 'kernglue' then
69+ -- gb: kern, ga: glue
70+ ga.spec.width = math.min(gb.kern,ga.spec.width)
71+ ga.spec.stretch = math.min(ga.spec.stretch,0)
72+ ga.spec.shrink = math.max(ga.spec.shrink,0)
73+ return ga
74+ else
75+ -- gb: glue, ga: kern
76+ gb.spec.width = math.min(ga.kern,gb.spec.width)
77+ gb.spec.stretch = math.min(gb.spec.stretch,0)
78+ gb.spec.shrink = math.max(gb.spec.shrink,0)
79+ return gb
80+ end
81+ end
82+end
83+function ltj.calc_between_two_jchar_aux_average(gb,ga)
2284 if not gb then
2385 return ga
2486 else
@@ -29,15 +91,50 @@ function ltj.calc_between_two_jchar_aux(gb,ga)
2991 gb.spec.width = tex.round((gb.spec.width+ga.spec.width)/2)
3092 gb.spec.stretch = tex.round((gb.spec.stretch+ga.spec.shrink)/2)
3193 gb.spec.shrink = tex.round((gb.spec.shrink+ga.spec.shrink)/2)
94+ return gb
3295 elseif k == 'kernkern' then
3396 -- 両方とも kern.平均をとる
3497 gb.kern = tex.round((gb.kern+ga.kern)/2)
98+ return gb
99+ elseif k == 'kernglue' then
100+ -- gb: kern, ga: glue
101+ ga.spec.width = tex.round((gb.kern+ga.spec.width)/2)
102+ ga.spec.stretch = tex.round(ga.spec.stretch/2)
103+ ga.spec.shrink = tex.round(ga.spec.shrink/2)
104+ return ga
105+ else
106+ -- gb: glue, ga: kern
107+ gb.spec.width = tex.round((ga.kern+gb.spec.width)/2)
108+ gb.spec.stretch = tex.round(gb.spec.stretch/2)
109+ gb.spec.shrink = tex.round(gb.spec.shrink/2)
110+ return gb
111+ end
112+ end
113+end
114+function ltj.calc_between_two_jchar_aux_both(gb,ga)
115+ if not gb then
116+ return ga
117+ else
118+ if not ga then return gb end
119+ local k = node.type(gb.id) .. node.type(ga.id)
120+ if k == 'glueglue' then
121+ gb.spec.width = tex.round((gb.spec.width+ga.spec.width))
122+ gb.spec.stretch = tex.round((gb.spec.stretch+ga.spec.shrink))
123+ gb.spec.shrink = tex.round((gb.spec.shrink+ga.spec.shrink))
124+ return gb
125+ elseif k == 'kernkern' then
126+ gb.kern = tex.round((gb.kern+ga.kern))
127+ return gb
35128 elseif k == 'kernglue' then
36129 -- gb: kern, ga: glue
130+ ga.spec.width = tex.round((gb.kern+ga.spec.width))
37131 return ga
38132 else
39133 -- gb: glue, ga: kern
134+ gb.spec.width = tex.round((ga.kern+gb.spec.width))
40135 return gb
41136 end
42137 end
43138 end
139+
140+ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_average
--- a/src/luatexja-core.lua
+++ b/src/luatexja-core.lua
@@ -1,6 +1,6 @@
11 -- error messages
2-function ltj.error(s)
3- tex.error("LuaTeX-ja error: " .. s );
2+function ltj.error(s,t)
3+ tex.error('LuaTeX-ja error: ' .. s ,t)
44 end
55
66 -- return true if and only if p is a Japanese character node
@@ -26,20 +26,77 @@ function ltj.get_penalty_table(m,c)
2626 i=(ltj.penalty_table[c])[m]
2727 end
2828 if not i then i=0 end
29- tex.swrite(i)
29+ tex.write(i)
3030 end
3131
3232 ltj.inhibit_xsp_table = {}
3333 function ltj.set_inhibit_xsp_table(c,p)
3434 ltj.inhibit_xsp_table[c]=p
3535 end
36-function ltj.get_inhibit_xsp_table(c,p)
37- local i=ltj.inhibit_xsp_table[c]
38- if not i then i=3 end
39- tex.swrite(i)
36+function ltj.get_inhibit_xsp_table(c)
37+ return ltj.inhibit_xsp_table[c] or 3
38+end
39+
40+--------
41+function ltj.out_ja_parameter_one(k)
42+ if k == 'yabaselineshift' then
43+ tex.write(tex.getattribute('luatexja@yablshift')/65536 .. 'pt')
44+ elseif k == 'ykbaselineshift' then
45+ tex.write(tex.getattribute('luatexja@ykblshift')/65536 .. 'pt')
46+ elseif k == 'kanjiskip' then
47+ tex.sprint('\\the\\kanjiskip')
48+ elseif k == 'xkanjiskip' then
49+ tex.sprint('\\the\\xkanjiskip')
50+ elseif k == 'jcharwidowpenalty' then
51+ tex.write(tex.getattribute('jcharwidowpenalty'))
52+ elseif k == 'autospacing' then
53+ tex.write(tostring(ltj.auto_spacing))
54+ elseif k == 'autoxspacing' then
55+ tex.write(tostring(ltj.auto_xspacing))
56+ elseif k == 'differentjfm' then
57+ if ltj.calc_between_two_jchar_aux==ltj.calc_between_two_jchar_aux_large then
58+ tex.write('large')
59+ elseif ltj.calc_between_two_jchar_aux==ltj.calc_between_two_jchar_aux_small then
60+ tex.write('small')
61+ elseif ltj.calc_between_two_jchar_aux==ltj.calc_between_two_jchar_aux_average then
62+ tex.write('average')
63+ elseif ltj.calc_between_two_jchar_aux==ltj.calc_between_two_jchar_aux_both then
64+ tex.write('both')
65+ else
66+ tex.write('???')
67+ end
68+ end
69+end
70+
71+function ltj.out_ja_parameter_two(k,c)
72+ print(k,c)
73+ if k == 'prebreakpenalty' then
74+ tex.write(ltj.get_penalty_table('pre',c))
75+ elseif k == 'postbreakpenalty' then
76+ tex.write(ltj.get_penalty_table('post',c))
77+ elseif k == 'cjkxspmode' then
78+ local i = ltj.get_inhibit_xsp_table(c)
79+ if i==0 then tex.write('inhibit')
80+ elseif i==1 then tex.write('postonly')
81+ elseif i==2 then tex.write('preonly')
82+ else tex.write('allow')
83+ end
84+ elseif k == 'asciixspmode' then
85+ local i = ltj.get_inhibit_xsp_table(c)
86+ if i==0 then tex.write('inhibit')
87+ elseif i==2 then tex.write('postonly')
88+ elseif i==1 then tex.write('preonly')
89+ else tex.write('allow')
90+ end
91+ end
92+end
93+
94+
95+---------
96+function ltj.print_global()
97+ if ltj.isglobal=='global' then tex.sprint('\\global') end
4098 end
4199
42-----------
43100 function ltj.create_ihb_node()
44101 local g=node.new(node.id('whatsit'), node.subtype('user_defined'))
45102 g.user_id=30111; g.type=number; g.value=1
@@ -226,13 +283,13 @@ ltj.cx = nil
226283 -- 0: ``no_skip'', 1: ``after_schar'', 2: ``after_wchar''
227284 -- These variables are ``global'', because we want to avoid to write one large function.
228285 function ltj.insert_kanji_skip(head)
229- if tex.count['luatexja@autospc']==0 then
286+ if ltj.auto_spacing then
230287 ltj.kanji_skip=tex.skip['kanjiskip']
231288 else
232289 ltj.kanji_skip=node.new(node.id('glue_spec'))
233290 ltj.kanji_skip.width=0; ltj.kanji_skip.stretch=0; ltj.kanji_skip.shrink=0
234291 end
235- if tex.count['luatexja@autoxspc']==0 then
292+ if ltj.auto_xspacing then
236293 ltj.xkanji_skip=tex.skip['xkanjiskip']
237294 else
238295 ltj.xkanji_skip=node.new(node.id('glue_spec'))
@@ -274,7 +331,7 @@ end
274331 -- Insert \xkanjiskip before p, a glyph node
275332 -- TODO; ligature
276333 function ltj.insks_around_char(head,q,p)
277- local a=ltj.inhibit_xsp_table[p.char]
334+ local a=ltj.get_inhibit_xsp_table(p.char)
278335 if ltj.is_japanese_glyph_node(p) then
279336 ltj.cx=p.char
280337 if ltj.is_japanese_glyph_node(q) then
@@ -286,7 +343,6 @@ function ltj.insks_around_char(head,q,p)
286343 end
287344 ltj.insert_skip=2
288345 else
289- if not a then a=3 end
290346 if ltj.insert_skip==2 then
291347 ltj.insert_kaxsp(head,q,a)
292348 end
@@ -299,11 +355,9 @@ function ltj.insks_around_char(head,q,p)
299355 end
300356
301357 function ltj.insert_akxsp(head,q)
302- local f = ltj.inhibit_xsp_table[ltj.cx]
358+ local f = ltj.get_inhibit_xsp_table(ltj.cx)
303359 local g
304- if f then
305- if f<=1 then return end
306- end
360+ if f<=1 then return end
307361 g = node.new(node.id('glue'))
308362 g.subtype=0; g.spec=node.copy(ltj.xkanji_skip)
309363 node.insert_after(head,q,g)
@@ -311,11 +365,9 @@ end
311365
312366 function ltj.insert_kaxsp(head,q,a)
313367 local g=true
314- local f=ltj.inhibit_xsp_table[ltj.cx]
368+ local f=ltj.get_inhibit_xsp_table(ltj.cx)
315369 if a%2 == 1 then
316- if f then
317- if f%2==0 then g=false end
318- end
370+ if f%2==0 then g=false end
319371 else
320372 g=false
321373 end
@@ -387,8 +439,7 @@ function ltj.insks_around_hbox(head,q,p)
387439 end
388440 ltj.insert_skip=2
389441 elseif ltj.first_char then
390- local a=ltj.inhibit_xsp_table[ltj.first_char.char]
391- if not a then a=3 end
442+ local a=ltj.get_inhibit_xsp_table(ltj.first_char.char)
392443 if ltj.insert_skip==2 then
393444 local g = node.new(node.id('glue'))
394445 g.subtype=0; g.spec=node.copy(ltj.kanji_skip)
@@ -409,8 +460,7 @@ function ltj.insks_around_hbox(head,q,p)
409460 end
410461 ltj.insert_skip=2
411462 elseif ltj.last_char then
412- local a=ltj.inhibit_xsp_table[ltj.last_char.char]
413- if not a then a=3 end
463+ local a=ltj.get_inhibit_xsp_table(ltj.last_char.char)
414464 if a>=2 then
415465 ltj.insert_skip=1
416466 else
@@ -428,7 +478,7 @@ end
428478 function ltj.insks_around_penalty(head,q,p)
429479 local r=node.next(p)
430480 if r and node.type(r.id)=='glyph' then
431- local a=ltj.inhibit_xsp_table[r.char]
481+ local a=ltj.get_inhibit_xsp_table(r.char)
432482 if ltj.is_japanese_glyph_node(r) then
433483 ltj.cx=r.char
434484 if ltj.is_japanese_glyph_node(p) then
@@ -441,7 +491,6 @@ function ltj.insks_around_penalty(head,q,p)
441491 q=p; p=node.next(p)
442492 ltj.insert_skip=2
443493 else
444- if not a then a=3 end
445494 if ltj.insert_skip==2 then
446495 ltj.insert_kaxsp(head,p,a)
447496 end
@@ -472,8 +521,7 @@ end
472521
473522 -- Insert \xkanjiskip around p, a math_node
474523 function ltj.insks_around_math(head,q,p)
475- local a=ltj.inhibit_xsp_table['math']
476- if not a then a=3 end
524+ local a=ltj.get_inhibit_xsp_table('math')
477525 if (p.subtype==0) and (ltj.insert_skip==2) then
478526 ltj.insert_kaxsp(head,q,a)
479527 ltj.insert_skip=0
@@ -594,7 +642,6 @@ end
594642
595643 --- the following function is modified from jafontspec.lua (by K. Maeda).
596644 --- Instead of "%", we use U+FFFFF for suppressing spaces.
597-utf = unicode.utf8
598645 function ltj.process_input_buffer(buffer)
599646 if utf.len(buffer) > 0
600647 and ltj.is_ucs_in_japanese_char(utf.byte(buffer, utf.len(buffer))) then
--- a/src/luatexja-core.sty
+++ b/src/luatexja-core.sty
@@ -1,28 +1,36 @@
1+% LuaTeX-ja core TeX source
2+
13 \catcode`\@=11
24 \catcode"FFFFF=14 %"
35
46 \input luaotfload.sty
7+\input xkeyval.tex
8+\input infwarerr.sty
59 \ifdefined\luatexja@loaded\endinput\fi
610 \def\luatexja@loaded{hoge}
711
812 \newcount\luatexja@tempcnta
13+\newcount\luatexja@tempcntb
914 \newdimen\luatexja@tempdima
10-%\newcount\jcharwidowpenalty
11-\newskip\kanjiskip\kanjiskip=0pt minus.4pt
15+
16+\newcount\luatexja@autospc
17+\newcount\luatexja@autoxspc
18+
19+\newcount\jcharwidowpenalty
20+\newskip\kanjiskip
1221 \newskip\xkanjiskip
1322 \newdimen\zw
1423 \newdimen\zh
1524 \newdimen\jQ \jQ=0.25mm
1625 \newdimen\jH \jH=0.25mm
17-\newcount\luatexja@autospc
18-\newcount\luatexja@autoxspc
1926
27+%%%%%%%% Loading lua files
2028 \directlua{%
2129 utf = unicode.utf8
2230 ltj = {}
2331 function ltj.loadlua(file)
2432 local path = assert(kpse.find_file(file, 'tex'),
25- "File '"..file.."' no found")
33+ "File '"..file.."' not found")
2634 texio.write_nl("("..path..")")
2735 dofile(path)
2836 end
@@ -33,58 +41,158 @@
3341 ltj.loadlua('luatexja-core-aux.lua')
3442 }
3543
36-% Attributes for Japanese typesetting.
44+%%%%%%%% Attributes for Japanese typesetting.
3745 \newluatexattribute\luatexja@curjfnt % index for ``current Japanese font''
3846 \newluatexattribute\luatexja@charclass %
3947 \newluatexattribute\luatexja@yablshift % attribute for \yabaselineshift
4048 \newluatexattribute\luatexja@ykblshift % attribute for \ykbaselineshift
49+\newluatexattribute\luatexja@icflag % attribute for italic correction
50+\newlanguage\luatexja@japanese\directlua{ltj.ja_lang_number=\the\luatexja@japanese}
4151
42-% for italic correction
43-\newluatexattribute\luatexja@icflag
44-\let\luatexja@ic=\/
45-\protected\def\/{{\luatexja@icflag=1\luatexja@ic}}
46-
47-% for hyphenation
48-\newlanguage\luatexja@japanese
49-\directlua{ltj.ja_lang_number=\the\luatexja@japanese}
52+%%%%%%%% \asluastring
53+\def\asluastring#1{'\luaescapestring{\detokenize{#1}}'}
5054
55+%%%%%%%% Redefine \/
56+\let\luatexja@ic=\/ \protected\def\/{{\luatexja@icflag=1\luatexja@ic}}
5157
52-% \jfont\CS={...:...;jfm=metric;...}
53-\def\jfont{\afterassignment\@jfont\directlua{ltj.jfontdefX(true)}}
58+%%%%%%%% \jfont\CS={...:...;jfm=metric;...}, \gjfont
59+\def\jfont{\afterassignment\@jfont\directlua{ltj.jfontdefX('false')}}
60+\def\gjfont{\afterassignment\@jfont\directlua{ltj.jfontdefX('true')}}
5461 \def\@jfont{\directlua{ltj.jfontdefY()}}
5562
56-% \loadjfontmetric<metric name><filename> :
57-% load <filename> which contains a font metric for a Japanese font.
58-\def\loadjfontmetric#1#2{% #1: key, #2: file name
59-\directlua{
60- jfm.name='#1'; jfm.char_type={}; jfm.glue={}; jfm.kern={}
61- ltj.loadlua('luatj-#2.lua'); ltj.loadjfontmetric()}
63+%%%%%%%% \inhibitglue
64+\def\inhibitglue{\directlua{ltj.create_ihb_node()}}
65+
66+%%%%%%%% \setjaparameter
67+
68+% prebreakpenalty = {<char_code>, <penalty>}
69+\define@key[ltj]{japaram}{prebreakpenalty}{%
70+ \expandafter\luatexja@setbp#1:{pre}}
71+\define@key[ltj]{japaram}{postbreakpenalty}{%
72+ \expandafter\luatexja@setbp#1:{post}}
73+\def\luatexja@setbp#1,#2:#3{
74+ \luatexja@tempcnta=#1\relax
75+ \luatexja@tempcntb=#2\relax
76+ \directlua{ltj.set_penalty_table(\asluastring{#3},
77+ tex.getcount('luatexja@tempcnta'),tex.getcount('luatexja@tempcntb'))}}
78+
79+% yabaselineshift = <dimen>
80+\define@key[ltj]{japaram}{yabaselineshift}{%
81+ \luatexja@tempdima=#1\relax%
82+ \directlua{tex.setattribute(ltj.isglobal,
83+ luatexbase.attributes['luatexja@yablshift'],
84+ tex.getdimen('luatexja@tempdima'))}}
85+\define@key[ltj]{japaram}{ykbaselineshift}{%
86+ \luatexja@tempdima=#1\relax%
87+ \directlua{tex.setattribute(ltj.isglobal,
88+ luatexbase.attributes['luatexja@ykblshift'],
89+ tex.getdimen('luatexja@tempdima'))}}
90+
91+% cjkxspmode = {<char_code>, <mode>}
92+% mode: inhibit, preonly, postonly, allow
93+% or 0 2 1 3
94+\define@key[ltj]{japaram}{cjkxspmode}{% \inhibitxspcode
95+ \expandafter\luatexja@setjxspmode#1:\relax}
96+\def\luatexja@setjxspmode#1,#2:{%
97+ \lowercase{\edef\ltj@temp{#2}}%
98+ \def\ltj@tempa{inhibit}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{0}\fi
99+ \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi
100+ \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi
101+ \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi
102+ \luatexja@tempcnta=#1\relax\luatexja@tempcntb=\ltj@temp\relax
103+ \directlua{ltj.set_inhibit_xsp_table(tex.getcount('luatexja@tempcnta'),
104+ tex.getcount('luatexja@tempcntb'))}}
105+
106+% asciixspmode = {<char_code>, <mode>}
107+% mode: inhibit, preonly, postonly, allow
108+% or 0 1 2 3
109+\define@key[ltj]{japaram}{asciixspmode}{% \inhibitxspcode
110+ \expandafter\luatexja@setaxspmode#1:\relax}
111+\def\luatexja@setaxspmode#1,#2:{%
112+ \lowercase{\edef\ltj@temp{#2}}%
113+ \def\ltj@tempa{inhibit}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{0}\fi
114+ \def\ltj@tempa{preonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{1}\fi
115+ \def\ltj@tempa{postonly}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{2}\fi
116+ \def\ltj@tempa{allow}\ifx\ltj@temp\ltj@tempa\def\ltj@temp{3}\fi
117+ \luatexja@tempcnta=#1\relax\luatexja@tempcntb=\ltj@temp\relax
118+ \directlua{ltj.set_inhibit_xsp_table(tex.getcount('luatexja@tempcnta'),
119+ tex.getcount('luatexja@tempcntb'))}}
120+
121+% autospacing = <bool> (default: true)
122+\define@boolkey[ltj]{japaram}{autospacing}[true]{%
123+ \ifltj@japaram@autospacing
124+ \directlua{ltj.auto_spacing=true}%
125+ \else
126+ \directlua{ltj.auto_spacing=false}%
127+ \fi
128+ }
129+
130+% autoxspacing = <bool> (default: true)
131+\define@boolkey[ltj]{japaram}{autoxspacing}[true]{%
132+ \ifltj@japaram@autoxspacing
133+ \directlua{ltj.auto_xspacing=true}%
134+ \else
135+ \directlua{ltj.auto_xspacing=false}%
136+ \fi
137+ }
138+
139+\define@key[ltj]{japaram}{kanjiskip}{% % SKIP
140+ \directlua{ltj.print_global()}\kanjiskip=#1 }
141+\define@key[ltj]{japaram}{xkanjiskip}{% % SKIP
142+ \directlua{ltj.print_global()}\xkanjiskip=#1 }
143+\define@key[ltj]{japaram}{jcharwidowpenalty}{% %COUNT
144+ \directlua{ltj.print_global()}\jcharwidowpenalty=#1 }
145+
146+% differentjfm = { large | small | average | both }
147+\define@choicekey*+[ltj]{japaram}{differentjfm}[\ltj@temp\ltj@tempcnta]%
148+ {large,small,average,both}{%
149+ \ifcase\ltj@tempcnta
150+ \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_large}\or
151+ \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_small}\or
152+ \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_average}\or
153+ \directlua{ltj.calc_between_two_jchar_aux=ltj.calc_between_two_jchar_aux_both}%
154+ \fi
155+}{\@PackageWarning{luatexja}{ignored invalid argument '#1' for 'differentjfm'}}
156+ % large, small, average(OK), both(OK)
157+
158+\def\setjaparameter#1{\directlua{ltj.isglobal=''}%
159+ \setkeys[ltj]{japaram}{#1}}
160+\def\globalsetjaparameter#1{\directlua{ltj.isglobal='global'}%
161+ \setkeys[ltj]{japaram}{#1}}
162+
163+%%%%%%%%
164+\def\getjaparameter#1{%
165+ \lowercase{\edef\ltj@temp{#1}}\let\@next=\getjaparameter@one%
166+ \def\ltj@tempa{prebreakpenalty}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
167+ \def\ltj@tempa{postbreakpenalty}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
168+ \def\ltj@tempa{cjkxspmode}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
169+ \def\ltj@tempa{asciixspmode}\ifx\ltj@temp\ltj@tempa\let\@next=\getjaparameter@two\fi
170+ \@next
171+}
172+\def\getjaparameter@one{\directlua{ltj.out_ja_parameter_one('\ltj@temp')}}
173+\def\getjaparameter@two#1{%
174+ \luatexja@tempcnta=#1
175+ \directlua{ltj.out_ja_parameter_two('\ltj@temp', tex.getcount('luatexja@tempcnta'))}%
62176 }
63177
64-% ybaselineshift
65-\let\yabaselineshift=\luatexja@yablshift % 欧文文字
66-\let\ykbaselineshift=\luatexja@ykblshift % 和文文字
67-\luatexja@yablshift=0 \luatexja@ykblshift=0
68-
69-% \inhibitxspcode, \xspcode
70-\def\setinhibitxspcode#1#2{\directlua{ltj.set_inhibit_xsp_table(#1,#2)}}
71-\def\getinhibitxspcode#1{\directlua{ltj.get_inhibit_xsp_table(#1)}}
72-\let\setxspcode=\setinhibitxspcode
73-\let\getxspcode=\getinhibitxspcode
74-% \prebreakpenalty, \postbreakpenalty
75-\def\setprebreakpenalty#1#2{\directlua{ltj.set_penalty_table('pre',#1,#2)}}
76-\def\setpostbreakpenalty#1#2{\directlua{ltj.set_penalty_table('post',#1,#2)}}
77-\def\getprebreakpenalty#1{\directlua{ltj.get_penalty_table('pre',#1)}}
78-\def\getpostbreakpenalty#1{\directlua{ltj.get_penalty_table('post',#1)}}
79-
80-\def\autospacing{\luatexja@autospc=0 }
81-\def\noautospacing{\luatexja@autospc=1 }
82-\def\autoxspacing{\luatexja@autoxspc=0 }
83-\def\noautoxspacing{\luatexja@autoxspc=1 }
84-\autospacing\autoxspacing
85-% \inhibitglue
86-\def\inhibitglue{\directlua{ltj.create_ihb_node()}}
87178
88-\input luatexja-kinsoku.tex
179+
180+%%%%%%%% commands for ``compatibility''
181+% \def\setinhibitxspcode#1#2{\setjaparameter{cjkxspmode={#1,#2}}}
182+% \def\setxspcode#1#2{\setjaparameter{asciixspmode={#1,#2}}}
183+% \def\setprebreakpenalty#1#2{\setjaparameter{prebreakpenalty={#1,#2}}}
184+% \def\setpostbreakpenalty#1#2{\setjaparameter{prebreakpenalty={#1,#2}}}
185+% \def\getprebreakpenalty#1{\directlua{ltj.get_penalty_table('pre',#1)}\luatexja@tempcnta}
186+% \def\getpostbreakpenalty#1{\directlua{ltj.get_penalty_table('post',#1)}\luatexja@tempcnta}
187+% \def\autospacing{\luatexja@autospc=0 }
188+% \def\noautospacing{\luatexja@autospc=1 }
189+% \def\autoxspacing{\luatexja@autoxspc=0 }
190+% \def\noautoxspacing{\luatexja@autoxspc=1 }
191+
192+\def\ltj@temp{plain}
193+\ifx\fmtname\ltj@temp
194+ \message{plain format: loading luatexja-plain.tex}
195+\fi
196+\input luatexja-plain.tex
89197 \catcode`\@=12
90198 \endinput
--- a/src/luatexja-jfont.lua
+++ b/src/luatexja-jfont.lua
@@ -33,24 +33,28 @@ function ltj.search_metric(key)
3333 return nil
3434 end
3535
36-function ltj.loadjfontmetric()
37- if string.len(jfm.name)==0 then
38- ltj.error("the key of font metric is null"); return nil
39- elseif ltj.search_metric(jfm.name) then
40- ltj.error("the metric '" .. jfm.name .. "' is already loaded"); return nil
36+function ltj.load_jfont_metric()
37+ if ltj.jfmfname=='' then
38+ ltj.error('no JFM specified',
39+ {[1]='To load and define a Japanese font, the name of JFM must be specified.',
40+ [2]="The JFM 'ujis' will be used for now."})
41+ ltj.jfmfname='ujis'
42+ end
43+ jfm.name=ltj.jfmfname .. ':' .. ltj.jfmvar;
44+ local i = ltj.search_metric(jfm.name)
45+ local t = {}
46+ if i then return i end
47+ jfm.char_type={}; jfm.glue={}; jfm.kern={}
48+ ltj.loadlua('jfm-' .. ltj.jfmfname .. '.lua');
49+ if jfm.dir~='yoko' then
50+ ltj.error("jfm.dir must be 'yoko'", {}); return nil
4151 end
42- if jfm.dir~='yoko' then
43- ltj.error("jfm.dir must be 'yoko'"); return nil
44- end
45- local t={}
4652 t.name=jfm.name
47- t.dir=jfm.dir
48- t.zw=jfm.zw
49- t.zh=jfm.zh
53+ t.dir=jfm.dir; t.zw=jfm.zw; t.zh=jfm.zh
5054 t.char_type=jfm.char_type
51- t.glue=jfm.glue
52- t.kern=jfm.kern
55+ t.glue=jfm.glue; t.kern=jfm.kern
5356 table.insert(ltj.metrics,t)
57+ return #ltj.metrics
5458 end
5559
5660 function ltj.find_char_type(c,m)
@@ -69,40 +73,40 @@ end
6973
7074 --====== \setjfont\CS={...:...;jfm=metric;...}
7175
72-function ltj.jfontdefX(b)
76+function ltj.jfontdefX(g)
7377 local t = token.get_next()
7478 ltj.cstemp=token.csname_name(t)
75- ltj.mettemp=''
79+ if g then ltj.is_global = '\\global' else ltj.is_global = '' end
7680 tex.sprint('\\expandafter\\font\\csname ' .. ltj.cstemp .. '\\endcsname')
7781 end
82+
7883 function ltj.jfontdefY() -- for horizontal font
79- local j=ltj.search_metric(ltj.mettemp)
80- if not j then
81- ltj.error("metric named '" .. ltj.mettemp .. "' didn't loaded")
82- return
83- end
84+ local j=ltj.load_jfont_metric()
8485 local fn=font.id(ltj.cstemp)
8586 local f = font.fonts[fn]
8687 ltj.font_metric_table[fn]={}
8788 ltj.font_metric_table[fn].jfm=j; ltj.font_metric_table[fn].size=f.size
88- tex.sprint('\\protected\\expandafter\\def\\csname ' .. ltj.cstemp .. '\\endcsname'
89- .. '{\\csname luatexja@curjfnt\\endcsname=' .. fn
90- .. ' \\zw=' .. tex.round(f.size*ltj.metrics[j].zw) .. 'sp'
91- .. '\\zh=' .. tex.round(f.size*ltj.metrics[j].zh) .. 'sp\\relax}')
89+ tex.sprint(ltj.is_global .. '\\protected\\expandafter\\def\\csname '
90+ .. ltj.cstemp .. '\\endcsname'
91+ .. '{\\csname luatexja@curjfnt\\endcsname=' .. fn
92+ .. ' \\zw=' .. tex.round(f.size*ltj.metrics[j].zw) .. 'sp'
93+ .. '\\zh=' .. tex.round(f.size*ltj.metrics[j].zh) .. 'sp\\relax}')
9294 end
9395
94-
9596 local dr_orig = fonts.define.read
9697 function fonts.define.read(name, size, id)
97- ltj.mettemp = ltj.determine_metric(name)
98- -- In hthe present imple., we don't remove "jfm=..." from name.
98+ ltj.extract_metric(name)
99+ -- In the present imple., we don't remove "jfm=..." from name.
99100 local fontdata = dr_orig(name, size, id)
100101 return fontdata
101102 end
102103
103-function ltj.determine_metric(name)
104+-- extract ltj.jfmfname and ltj.jfmvar
105+function ltj.extract_metric(name)
104106 local basename=name
105107 local tmp = utf.sub(basename, 1, 5)
108+ ltj.jfmfname = ''
109+ ltj.jfmvar = ''
106110 if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then
107111 basename = utf.sub(basename, 6)
108112 end
@@ -110,16 +114,18 @@ function ltj.determine_metric(name)
110114 local p = utf.find(basename, ":")
111115 if p then
112116 basename = utf.sub(basename, p+1)
113- else return ''
117+ else return
114118 end
115119
116120 p=1
117121 while p do
118122 local q= utf.find(basename, ";",p+1) or utf.len(basename)+1
119123 if utf.sub(basename,p,p+3)=='jfm=' and q>p+4 then
120- return utf.sub(basename,p+4,q-1)
124+ ltj.jfmfname = utf.sub(basename,p+4,q-1)
125+ elseif utf.sub(basename,p,p+6)=='jfmvar=' and q>p+6 then
126+ ltj.jfmvar = utf.sub(basename,p+7,q-1)
121127 end
122128 if utf.len(basename)+1==q then p=nil else p=q+1 end
123129 end
124- return ''
130+ return
125131 end
--- a/src/luatexja-kinsoku.tex
+++ b/src/luatexja-kinsoku.tex
@@ -1,352 +1,406 @@
1-%0}{0}
2-\setprebreakpenalty{33}{10000}
3-\setprebreakpenalty{34}{10000}
4-\setpostbreakpenalty{35}{500}
5-\setpostbreakpenalty{36}{500}
6-\setpostbreakpenalty{37}{500}
7-\setpostbreakpenalty{38}{500}
8-\setpostbreakpenalty{96}{10000}
9-\setprebreakpenalty{39}{10000}
10-\setprebreakpenalty{41}{10000}
11-\setpostbreakpenalty{40}{10000}
12-\setprebreakpenalty{42}{500}
13-\setprebreakpenalty{43}{500}
14-\setprebreakpenalty{45}{10000}
15-\setprebreakpenalty{46}{10000}
16-\setprebreakpenalty{44}{10000}
17-\setprebreakpenalty{47}{500}
18-\setprebreakpenalty{59}{10000}
19-\setprebreakpenalty{63}{10000}
20-\setprebreakpenalty{58}{10000}
21-\setprebreakpenalty{93}{10000}
22-\setpostbreakpenalty{91}{10000}
23-\setprebreakpenalty{12289}{10000}
24-\setprebreakpenalty{12290}{10000}
25-\setprebreakpenalty{65292}{10000}
26-\setprebreakpenalty{65294}{10000}
27-\setprebreakpenalty{12539}{10000}
28-\setprebreakpenalty{65306}{10000}
29-\setprebreakpenalty{65307}{10000}
30-\setprebreakpenalty{65311}{10000}
31-\setprebreakpenalty{65281}{10000}
32-\setprebreakpenalty{12443}{10000}
33-\setprebreakpenalty{12444}{10000}
34-\setprebreakpenalty{180}{10000}
35-\setpostbreakpenalty{65344}{10000}
36-\setprebreakpenalty{12293}{10000}
37-\setprebreakpenalty{8230}{250}
38-\setprebreakpenalty{8229}{250}
39-\setpostbreakpenalty{8216}{10000}
40-\setprebreakpenalty{8217}{10000}
41-\setpostbreakpenalty{8220}{10000}
42-\setprebreakpenalty{8221}{10000}
43-\setprebreakpenalty{65289}{10000}
44-\setpostbreakpenalty{65288}{10000}
45-\setprebreakpenalty{65373}{10000}
46-\setpostbreakpenalty{65371}{10000}
47-\setprebreakpenalty{65341}{10000}
48-\setpostbreakpenalty{65339}{10000}
49-\setpostbreakpenalty{12308}{10000}
50-\setprebreakpenalty{12309}{10000}
51-\setpostbreakpenalty{12296}{10000}
52-\setprebreakpenalty{12297}{10000}
53-\setpostbreakpenalty{12298}{10000}
54-\setprebreakpenalty{12299}{10000}
55-\setpostbreakpenalty{12300}{10000}
56-\setprebreakpenalty{12301}{10000}
57-\setpostbreakpenalty{12302}{10000}
58-\setprebreakpenalty{12303}{10000}
59-\setpostbreakpenalty{12304}{10000}
60-\setprebreakpenalty{12305}{10000}
61-\setprebreakpenalty{12540}{10000}
62-\setprebreakpenalty{65291}{200}
63-\setprebreakpenalty{8722}{200}
64-\setprebreakpenalty{65293}{200}
65-\setprebreakpenalty{65309}{200}
66-\setpostbreakpenalty{65283}{200}
67-\setpostbreakpenalty{65284}{200}
68-\setpostbreakpenalty{65285}{200}
69-\setpostbreakpenalty{65286}{200}
70-\setprebreakpenalty{12353}{150}
71-\setprebreakpenalty{12355}{150}
72-\setprebreakpenalty{12357}{150}
73-\setprebreakpenalty{12359}{150}
74-\setprebreakpenalty{12361}{150}
75-\setprebreakpenalty{12387}{150}
76-\setprebreakpenalty{12419}{150}
77-\setprebreakpenalty{12421}{150}
78-\setprebreakpenalty{12423}{150}
79-\setprebreakpenalty{12430}{150}
80-\setprebreakpenalty{12449}{150}
81-\setprebreakpenalty{12451}{150}
82-\setprebreakpenalty{12453}{150}
83-\setprebreakpenalty{12455}{150}
84-\setprebreakpenalty{12457}{150}
85-\setprebreakpenalty{12483}{150}
86-\setprebreakpenalty{12515}{150}
87-\setprebreakpenalty{12517}{150}
88-\setprebreakpenalty{12519}{150}
89-\setprebreakpenalty{12526}{150}
90-\setprebreakpenalty{12533}{150}
91-\setprebreakpenalty{12534}{150}
92-\setprebreakpenalty{12541}{10000}
93-\setprebreakpenalty{12542}{10000}
94-\setprebreakpenalty{12445}{10000}
95-\setprebreakpenalty{12446}{10000}
96-\setprebreakpenalty{12339}{10000}
97-\setprebreakpenalty{12340}{10000}
98-\setprebreakpenalty{12341}{10000}
99-\setprebreakpenalty{12347}{10000}
100-\setpostbreakpenalty{10629}{10000}
101-\setprebreakpenalty{10630}{10000}
102-\setpostbreakpenalty{65375}{10000}
103-\setprebreakpenalty{65376}{10000}
104-\setpostbreakpenalty{12312}{10000}
105-\setprebreakpenalty{12313}{10000}
106-\setpostbreakpenalty{12310}{10000}
107-\setprebreakpenalty{12311}{10000}
108-\setpostbreakpenalty{171}{10000}
109-\setprebreakpenalty{187}{10000}
110-\setpostbreakpenalty{12317}{10000}
111-\setprebreakpenalty{12319}{10000}
112-\setprebreakpenalty{8252}{10000}
113-\setprebreakpenalty{8263}{10000}
114-\setprebreakpenalty{8264}{10000}
115-\setprebreakpenalty{8265}{10000}
116-\setpostbreakpenalty{161}{10000}
117-\setpostbreakpenalty{191}{10000}
118-\setprebreakpenalty{720}{10000}
119-\setprebreakpenalty{170}{10000}
120-\setprebreakpenalty{186}{10000}
121-\setprebreakpenalty{185}{10000}
122-\setprebreakpenalty{178}{10000}
123-\setprebreakpenalty{179}{10000}
124-\setpostbreakpenalty{8364}{10000}
125-\setprebreakpenalty{12437}{150}
126-\setprebreakpenalty{12438}{150}
127-\setprebreakpenalty{12784}{150}
128-\setprebreakpenalty{12785}{150}
129-\setprebreakpenalty{12786}{150}
130-\setprebreakpenalty{12787}{150}
131-\setprebreakpenalty{12788}{150}
132-\setprebreakpenalty{12789}{150}
133-\setprebreakpenalty{12790}{150}
134-\setprebreakpenalty{12791}{150}
135-\setprebreakpenalty{12792}{150}
136-\setprebreakpenalty{12793}{150}
137-\setprebreakpenalty{12794}{150}
138-\setprebreakpenalty{12795}{150}
139-\setprebreakpenalty{12796}{150}
140-\setprebreakpenalty{12797}{150}
141-\setprebreakpenalty{12798}{150}
142-\setprebreakpenalty{12799}{150}
143-\setprebreakpenalty{8482}{10000}
144-\setprebreakpenalty{65377}{10000}
145-\setprebreakpenalty{65380}{10000}
146-\setprebreakpenalty{65438}{10000}
147-\setprebreakpenalty{65439}{10000}
148-\setprebreakpenalty{65379}{10000}
149-\setpostbreakpenalty{65378}{10000}
150-\setxspcode{40}{1}
151-\setxspcode{41}{2}
152-\setxspcode{91}{1}
153-\setxspcode{93}{2}
154-\setxspcode{96}{1}
155-\setxspcode{39}{2}
156-\setxspcode{59}{2}
157-\setxspcode{44}{2}
158-\setxspcode{46}{2}
159-\setxspcode{128}{3}
160-\setxspcode{129}{3}
161-\setxspcode{130}{3}
162-\setxspcode{131}{3}
163-\setxspcode{132}{3}
164-\setxspcode{133}{3}
165-\setxspcode{134}{3}
166-\setxspcode{135}{3}
167-\setxspcode{136}{3}
168-\setxspcode{137}{3}
169-\setxspcode{138}{3}
170-\setxspcode{139}{3}
171-\setxspcode{140}{3}
172-\setxspcode{141}{3}
173-\setxspcode{142}{3}
174-\setxspcode{143}{3}
175-\setxspcode{144}{3}
176-\setxspcode{145}{3}
177-\setxspcode{146}{3}
178-\setxspcode{147}{3}
179-\setxspcode{148}{3}
180-\setxspcode{149}{3}
181-\setxspcode{150}{3}
182-\setxspcode{151}{3}
183-\setxspcode{152}{3}
184-\setxspcode{153}{3}
185-\setxspcode{154}{3}
186-\setxspcode{155}{3}
187-\setxspcode{156}{3}
188-\setxspcode{157}{3}
189-\setxspcode{158}{3}
190-\setxspcode{159}{3}
191-\setxspcode{160}{3}
192-\setxspcode{161}{3}
193-\setxspcode{162}{3}
194-\setxspcode{163}{3}
195-\setxspcode{164}{3}
196-\setxspcode{165}{3}
197-\setxspcode{166}{3}
198-\setxspcode{167}{3}
199-\setxspcode{168}{3}
200-\setxspcode{169}{3}
201-\setxspcode{170}{3}
202-\setxspcode{171}{3}
203-\setxspcode{172}{3}
204-\setxspcode{173}{3}
205-\setxspcode{174}{3}
206-\setxspcode{175}{3}
207-\setxspcode{176}{3}
208-\setxspcode{177}{3}
209-\setxspcode{178}{3}
210-\setxspcode{179}{3}
211-\setxspcode{180}{3}
212-\setxspcode{181}{3}
213-\setxspcode{182}{3}
214-\setxspcode{183}{3}
215-\setxspcode{184}{3}
216-\setxspcode{185}{3}
217-\setxspcode{186}{3}
218-\setxspcode{187}{3}
219-\setxspcode{188}{3}
220-\setxspcode{189}{3}
221-\setxspcode{190}{3}
222-\setxspcode{191}{3}
223-\setxspcode{192}{3}
224-\setxspcode{193}{3}
225-\setxspcode{194}{3}
226-\setxspcode{195}{3}
227-\setxspcode{196}{3}
228-\setxspcode{197}{3}
229-\setxspcode{198}{3}
230-\setxspcode{199}{3}
231-\setxspcode{200}{3}
232-\setxspcode{201}{3}
233-\setxspcode{202}{3}
234-\setxspcode{203}{3}
235-\setxspcode{204}{3}
236-\setxspcode{205}{3}
237-\setxspcode{206}{3}
238-\setxspcode{207}{3}
239-\setxspcode{208}{3}
240-\setxspcode{209}{3}
241-\setxspcode{210}{3}
242-\setxspcode{211}{3}
243-\setxspcode{212}{3}
244-\setxspcode{213}{3}
245-\setxspcode{214}{3}
246-\setxspcode{215}{3}
247-\setxspcode{216}{3}
248-\setxspcode{217}{3}
249-\setxspcode{218}{3}
250-\setxspcode{219}{3}
251-\setxspcode{220}{3}
252-\setxspcode{221}{3}
253-\setxspcode{222}{3}
254-\setxspcode{223}{3}
255-\setxspcode{224}{3}
256-\setxspcode{225}{3}
257-\setxspcode{226}{3}
258-\setxspcode{227}{3}
259-\setxspcode{228}{3}
260-\setxspcode{229}{3}
261-\setxspcode{230}{3}
262-\setxspcode{231}{3}
263-\setxspcode{232}{3}
264-\setxspcode{233}{3}
265-\setxspcode{234}{3}
266-\setxspcode{235}{3}
267-\setxspcode{236}{3}
268-\setxspcode{237}{3}
269-\setxspcode{238}{3}
270-\setxspcode{239}{3}
271-\setxspcode{240}{3}
272-\setxspcode{241}{3}
273-\setxspcode{242}{3}
274-\setxspcode{243}{3}
275-\setxspcode{244}{3}
276-\setxspcode{245}{3}
277-\setxspcode{246}{3}
278-\setxspcode{247}{3}
279-\setxspcode{248}{3}
280-\setxspcode{249}{3}
281-\setxspcode{250}{3}
282-\setxspcode{251}{3}
283-\setxspcode{252}{3}
284-\setxspcode{253}{3}
285-\setxspcode{254}{3}
286-\setxspcode{255}{3}
287-\setinhibitxspcode{12289}{1}
288-\setinhibitxspcode{12290}{1}
289-\setinhibitxspcode{65292}{1}
290-\setinhibitxspcode{65294}{1}
291-\setinhibitxspcode{65307}{1}
292-\setinhibitxspcode{65311}{1}
293-\setinhibitxspcode{65289}{1}
294-\setinhibitxspcode{65288}{2}
295-\setinhibitxspcode{65341}{1}
296-\setinhibitxspcode{65339}{2}
297-\setinhibitxspcode{65373}{1}
298-\setinhibitxspcode{65371}{2}
299-\setinhibitxspcode{8216}{2}
300-\setinhibitxspcode{8217}{1}
301-\setinhibitxspcode{8220}{2}
302-\setinhibitxspcode{8221}{1}
303-\setinhibitxspcode{12308}{2}
304-\setinhibitxspcode{12309}{1}
305-\setinhibitxspcode{12296}{2}
306-\setinhibitxspcode{12297}{1}
307-\setinhibitxspcode{12298}{2}
308-\setinhibitxspcode{12299}{1}
309-\setinhibitxspcode{12300}{2}
310-\setinhibitxspcode{12301}{1}
311-\setinhibitxspcode{12302}{2}
312-\setinhibitxspcode{12303}{1}
313-\setinhibitxspcode{12304}{2}
314-\setinhibitxspcode{12305}{1}
315-\setinhibitxspcode{8212}{0}
316-\setinhibitxspcode{8213}{0}
317-\setinhibitxspcode{12316}{0}
318-\setinhibitxspcode{65374}{0}
319-\setinhibitxspcode{8230}{0}
320-\setinhibitxspcode{165}{0}
321-\setinhibitxspcode{65509}{0}
322-\setinhibitxspcode{176}{1}
323-\setinhibitxspcode{8242}{1}
324-\setinhibitxspcode{8243}{1}
325-\setinhibitxspcode{10629}{2}
326-\setinhibitxspcode{10630}{1}
327-\setinhibitxspcode{65375}{2}
328-\setinhibitxspcode{65376}{1}
329-\setinhibitxspcode{12312}{2}
330-\setinhibitxspcode{12313}{1}
331-\setinhibitxspcode{12310}{2}
332-\setinhibitxspcode{12311}{1}
333-\setinhibitxspcode{171}{2}
334-\setinhibitxspcode{187}{1}
335-\setinhibitxspcode{12317}{2}
336-\setinhibitxspcode{12319}{1}
337-\setinhibitxspcode{8252}{1}
338-\setinhibitxspcode{8263}{1}
339-\setinhibitxspcode{8264}{1}
340-\setinhibitxspcode{8265}{1}
341-\setinhibitxspcode{161}{2}
342-\setinhibitxspcode{191}{2}
343-\setinhibitxspcode{170}{1}
344-\setinhibitxspcode{186}{1}
345-\setinhibitxspcode{185}{1}
346-\setinhibitxspcode{178}{1}
347-\setinhibitxspcode{179}{1}
348-\setinhibitxspcode{8364}{2}
349-\setinhibitxspcode{8482}{1}
350-\setinhibitxspcode{65377}{1}
351-\setinhibitxspcode{65380}{1}
352-\setinhibitxspcode{65378}{2}
1+%
2+% 行頭、行末禁則パラメータ
3+%
4+% 1byte characters
5+\setjaparameter{prebreakpenalty={`!,10000}}
6+\setjaparameter{prebreakpenalty={`",10000}}
7+\setjaparameter{postbreakpenalty={`\#,500}}
8+\setjaparameter{postbreakpenalty={`\$,500}}
9+\setjaparameter{postbreakpenalty={`\%,500}}
10+\setjaparameter{postbreakpenalty={`\&,500}}
11+\setjaparameter{postbreakpenalty={`\`,10000}}
12+\setjaparameter{prebreakpenalty={`',10000}}
13+\setjaparameter{prebreakpenalty={`),10000}}
14+\setjaparameter{postbreakpenalty={`(,10000}}
15+\setjaparameter{prebreakpenalty={`*,500}}
16+\setjaparameter{prebreakpenalty={`+,500}}
17+\setjaparameter{prebreakpenalty={`-,10000}}
18+\setjaparameter{prebreakpenalty={`.,10000}}
19+\setjaparameter{prebreakpenalty={47,10000}}
20+\setjaparameter{prebreakpenalty={`/,500}}
21+\setjaparameter{prebreakpenalty={`;,10000}}
22+\setjaparameter{prebreakpenalty={`?,10000}}
23+\setjaparameter{prebreakpenalty={`:,10000}}
24+\setjaparameter{prebreakpenalty={`],10000}}
25+\setjaparameter{postbreakpenalty={`[,10000}}
26+%全角文字
27+\setjaparameter{prebreakpenalty={`、,10000}}
28+\setjaparameter{prebreakpenalty={`。,10000}}
29+\setjaparameter{prebreakpenalty={`,,10000}}
30+\setjaparameter{prebreakpenalty={`.,10000}}
31+\setjaparameter{prebreakpenalty={`・,10000}}
32+\setjaparameter{prebreakpenalty={`:,10000}}
33+\setjaparameter{prebreakpenalty={`;,10000}}
34+\setjaparameter{prebreakpenalty={`?,10000}}
35+\setjaparameter{prebreakpenalty={`!,10000}}
36+\setjaparameter{prebreakpenalty={`゛,10000}}%\jis"212B
37+\setjaparameter{prebreakpenalty={`゜,10000}}%\jis"212C
38+\setjaparameter{prebreakpenalty={`´,10000}}%\jis"212D
39+\setjaparameter{postbreakpenalty={``,10000}}%\jis"212E
40+\setjaparameter{prebreakpenalty={`々,10000}}%\jis"2139
41+\setjaparameter{prebreakpenalty={`…,250}}%\jis"2144
42+\setjaparameter{prebreakpenalty={`‥,250}}%\jis"2145
43+\setjaparameter{postbreakpenalty={`‘,10000}}%\jis"2146
44+\setjaparameter{prebreakpenalty={`’,10000}}%\jis"2147
45+\setjaparameter{postbreakpenalty={`“,10000}}%\jis"2148
46+\setjaparameter{prebreakpenalty={`”,10000}}%\jis"2149
47+\setjaparameter{prebreakpenalty={`),10000}}
48+\setjaparameter{postbreakpenalty={`(,10000}}
49+\setjaparameter{prebreakpenalty={`},10000}}
50+\setjaparameter{postbreakpenalty={`{,10000}}
51+\setjaparameter{prebreakpenalty={`],10000}}
52+\setjaparameter{postbreakpenalty={`[,10000}}
53+%\setjaparameter{postbreakpenalty={`‘,10000}}
54+%\setjaparameter{prebreakpenalty={`’,10000}}
55+\setjaparameter{postbreakpenalty={`〔,10000}}%\jis"214C
56+\setjaparameter{prebreakpenalty={`〕,10000}}%\jis"214D
57+\setjaparameter{postbreakpenalty={`〈,10000}}%\jis"2152
58+\setjaparameter{prebreakpenalty={`〉,10000}}%\jis"2153
59+\setjaparameter{postbreakpenalty={`《,10000}}%\jis"2154
60+\setjaparameter{prebreakpenalty={`》,10000}}%\jis"2155
61+\setjaparameter{postbreakpenalty={`「,10000}}%\jis"2156
62+\setjaparameter{prebreakpenalty={`」,10000}}%\jis"2157
63+\setjaparameter{postbreakpenalty={`『,10000}}%\jis"2158
64+\setjaparameter{prebreakpenalty={`』,10000}}%\jis"2159
65+\setjaparameter{postbreakpenalty={`【,10000}}%\jis"215A
66+\setjaparameter{prebreakpenalty={`】,10000}}%\jis"215B
67+\setjaparameter{prebreakpenalty={`ー,10000}}
68+\setjaparameter{prebreakpenalty={`+,200}}
69+\setjaparameter{prebreakpenalty={`−,200}}% U+2212 MINUS SIGN
70+\setjaparameter{prebreakpenalty={`-,200}}% U+FF0D FULLWIDTH HYPHEN-MINUS
71+\setjaparameter{prebreakpenalty={`=,200}}
72+\setjaparameter{postbreakpenalty={`#,200}}
73+\setjaparameter{postbreakpenalty={`$,200}}
74+\setjaparameter{postbreakpenalty={`%,200}}
75+\setjaparameter{postbreakpenalty={`&,200}}
76+\setjaparameter{prebreakpenalty={`ぁ,150}}
77+\setjaparameter{prebreakpenalty={`ぃ,150}}
78+\setjaparameter{prebreakpenalty={`ぅ,150}}
79+\setjaparameter{prebreakpenalty={`ぇ,150}}
80+\setjaparameter{prebreakpenalty={`ぉ,150}}
81+\setjaparameter{prebreakpenalty={`っ,150}}
82+\setjaparameter{prebreakpenalty={`ゃ,150}}
83+\setjaparameter{prebreakpenalty={`ゅ,150}}
84+\setjaparameter{prebreakpenalty={`ょ,150}}
85+\setjaparameter{prebreakpenalty={`ゎ,150}}%\jis"246E
86+\setjaparameter{prebreakpenalty={`ァ,150}}
87+\setjaparameter{prebreakpenalty={`ィ,150}}
88+\setjaparameter{prebreakpenalty={`ゥ,150}}
89+\setjaparameter{prebreakpenalty={`ェ,150}}
90+\setjaparameter{prebreakpenalty={`ォ,150}}
91+\setjaparameter{prebreakpenalty={`ッ,150}}
92+\setjaparameter{prebreakpenalty={`ャ,150}}
93+\setjaparameter{prebreakpenalty={`ュ,150}}
94+\setjaparameter{prebreakpenalty={`ョ,150}}
95+\setjaparameter{prebreakpenalty={`ヮ,150}}%\jis"256E
96+\setjaparameter{prebreakpenalty={`ヵ,150}}%\jis"2575
97+\setjaparameter{prebreakpenalty={`ヶ,150}}%\jis"2576
98+% kinsoku JIS X 0208 additional
99+\setjaparameter{prebreakpenalty={`ヽ,10000}}
100+\setjaparameter{prebreakpenalty={`ヾ,10000}}
101+\setjaparameter{prebreakpenalty={`ゝ,10000}}
102+\setjaparameter{prebreakpenalty={`ゞ,10000}}
103+
104+%
105+% kinsoku JIS X 0213
106+%
107+\setjaparameter{prebreakpenalty={`〳,10000}}
108+\setjaparameter{prebreakpenalty={`〴,10000}}
109+\setjaparameter{prebreakpenalty={`〵,10000}}
110+\setjaparameter{prebreakpenalty={`〻,10000}}
111+\setjaparameter{postbreakpenalty={`⦅,10000}}
112+\setjaparameter{prebreakpenalty={`⦆,10000}}
113+\setjaparameter{postbreakpenalty={`⦅,10000}}
114+\setjaparameter{prebreakpenalty={`⦆,10000}}
115+\setjaparameter{postbreakpenalty={`〘,10000}}
116+\setjaparameter{prebreakpenalty={`〙,10000}}
117+\setjaparameter{postbreakpenalty={`〖,10000}}
118+\setjaparameter{prebreakpenalty={`〗,10000}}
119+\setjaparameter{postbreakpenalty={`«,10000}}
120+\setjaparameter{prebreakpenalty={`»,10000}}
121+\setjaparameter{postbreakpenalty={`〝,10000}}
122+\setjaparameter{prebreakpenalty={`〟,10000}}
123+\setjaparameter{prebreakpenalty={`‼,10000}}
124+\setjaparameter{prebreakpenalty={`⁇,10000}}
125+\setjaparameter{prebreakpenalty={`⁈,10000}}
126+\setjaparameter{prebreakpenalty={`⁉,10000}}
127+\setjaparameter{postbreakpenalty={`¡,10000}}
128+\setjaparameter{postbreakpenalty={`¿,10000}}
129+\setjaparameter{prebreakpenalty={`ː,10000}}
130+\setjaparameter{prebreakpenalty={`ª,10000}}
131+\setjaparameter{prebreakpenalty={`º,10000}}
132+\setjaparameter{prebreakpenalty={`¹,10000}}
133+\setjaparameter{prebreakpenalty={`²,10000}}
134+\setjaparameter{prebreakpenalty={`³,10000}}
135+\setjaparameter{postbreakpenalty={`€,10000}}
136+\setjaparameter{prebreakpenalty={`ゕ,150}}
137+\setjaparameter{prebreakpenalty={`ゖ,150}}
138+\setjaparameter{prebreakpenalty={`ㇰ,150}}
139+\setjaparameter{prebreakpenalty={`ㇱ,150}}
140+\setjaparameter{prebreakpenalty={`ㇲ,150}}
141+\setjaparameter{prebreakpenalty={`ㇳ,150}}
142+\setjaparameter{prebreakpenalty={`ㇴ,150}}
143+\setjaparameter{prebreakpenalty={`ㇵ,150}}
144+\setjaparameter{prebreakpenalty={`ㇶ,150}}
145+\setjaparameter{prebreakpenalty={`ㇷ,150}}
146+\setjaparameter{prebreakpenalty={`ㇸ,150}}
147+\setjaparameter{prebreakpenalty={`ㇹ,150}}
148+%\setjaparameter{prebreakpenalty={`ㇷ゚,150}}
149+\setjaparameter{prebreakpenalty={`ㇺ,150}}
150+\setjaparameter{prebreakpenalty={`ㇻ,150}}
151+\setjaparameter{prebreakpenalty={`ㇼ,150}}
152+\setjaparameter{prebreakpenalty={`ㇽ,150}}
153+\setjaparameter{prebreakpenalty={`ㇾ,150}}
154+\setjaparameter{prebreakpenalty={`ㇿ,150}}
155+%
156+% kinsoku JIS X 0212
157+%
158+%\setjaparameter{postbreakpenalty={`¡,10000}}
159+%\setjaparameter{postbreakpenalty={`¿,10000}}
160+%\setjaparameter{prebreakpenalty={`º,10000}}
161+%\setjaparameter{prebreakpenalty={`ª,10000}}
162+\setjaparameter{prebreakpenalty={`™,10000}}
163+%
164+% kinsoku 半角片仮名
165+%
166+\setjaparameter{prebreakpenalty={`。,10000}}
167+\setjaparameter{prebreakpenalty={`、,10000}}
168+\setjaparameter{prebreakpenalty={`゙,10000}}
169+\setjaparameter{prebreakpenalty={`゚,10000}}
170+\setjaparameter{prebreakpenalty={`」,10000}}
171+\setjaparameter{postbreakpenalty={`「,10000}}
172+%
173+% xspcode
174+\setjaparameter{asciixspmode={`(,preonly}}
175+\setjaparameter{asciixspmode={`),postonly}}
176+\setjaparameter{asciixspmode={`[,preonly}}
177+\setjaparameter{asciixspmode={`],postonly}}
178+\setjaparameter{asciixspmode={``,preonly}}
179+\setjaparameter{asciixspmode={`',postonly}}
180+\setjaparameter{asciixspmode={`;,postonly}}
181+\setjaparameter{asciixspmode={47,postonly}}
182+\setjaparameter{asciixspmode={`.,postonly}}
183+% for 8bit Latin
184+\setjaparameter{asciixspmode={"80,allow}}
185+\setjaparameter{asciixspmode={"81,allow}}
186+\setjaparameter{asciixspmode={"82,allow}}
187+\setjaparameter{asciixspmode={"83,allow}}
188+\setjaparameter{asciixspmode={"84,allow}}
189+\setjaparameter{asciixspmode={"85,allow}}
190+\setjaparameter{asciixspmode={"86,allow}}
191+\setjaparameter{asciixspmode={"87,allow}}
192+\setjaparameter{asciixspmode={"88,allow}}
193+\setjaparameter{asciixspmode={"89,allow}}
194+\setjaparameter{asciixspmode={"8A,allow}}
195+\setjaparameter{asciixspmode={"8B,allow}}
196+\setjaparameter{asciixspmode={"8C,allow}}
197+\setjaparameter{asciixspmode={"8D,allow}}
198+\setjaparameter{asciixspmode={"8E,allow}}
199+\setjaparameter{asciixspmode={"8F,allow}}
200+\setjaparameter{asciixspmode={"90,allow}}
201+\setjaparameter{asciixspmode={"91,allow}}
202+\setjaparameter{asciixspmode={"92,allow}}
203+\setjaparameter{asciixspmode={"93,allow}}
204+\setjaparameter{asciixspmode={"94,allow}}
205+\setjaparameter{asciixspmode={"95,allow}}
206+\setjaparameter{asciixspmode={"96,allow}}
207+\setjaparameter{asciixspmode={"97,allow}}
208+\setjaparameter{asciixspmode={"98,allow}}
209+\setjaparameter{asciixspmode={"99,allow}}
210+\setjaparameter{asciixspmode={"9A,allow}}
211+\setjaparameter{asciixspmode={"9B,allow}}
212+\setjaparameter{asciixspmode={"9C,allow}}
213+\setjaparameter{asciixspmode={"9D,allow}}
214+\setjaparameter{asciixspmode={"9E,allow}}
215+\setjaparameter{asciixspmode={"9F,allow}}
216+\setjaparameter{asciixspmode={"A0,allow}}
217+\setjaparameter{asciixspmode={"A1,allow}}
218+\setjaparameter{asciixspmode={"A2,allow}}
219+\setjaparameter{asciixspmode={"A3,allow}}
220+\setjaparameter{asciixspmode={"A4,allow}}
221+\setjaparameter{asciixspmode={"A5,allow}}
222+\setjaparameter{asciixspmode={"A6,allow}}
223+\setjaparameter{asciixspmode={"A7,allow}}
224+\setjaparameter{asciixspmode={"A8,allow}}
225+\setjaparameter{asciixspmode={"A9,allow}}
226+\setjaparameter{asciixspmode={"AA,allow}}
227+\setjaparameter{asciixspmode={"AB,allow}}
228+\setjaparameter{asciixspmode={"AC,allow}}
229+\setjaparameter{asciixspmode={"AD,allow}}
230+\setjaparameter{asciixspmode={"AE,allow}}
231+\setjaparameter{asciixspmode={"AF,allow}}
232+\setjaparameter{asciixspmode={"B0,allow}}
233+\setjaparameter{asciixspmode={"B1,allow}}
234+\setjaparameter{asciixspmode={"B2,allow}}
235+\setjaparameter{asciixspmode={"B3,allow}}
236+\setjaparameter{asciixspmode={"B4,allow}}
237+\setjaparameter{asciixspmode={"B5,allow}}
238+\setjaparameter{asciixspmode={"B6,allow}}
239+\setjaparameter{asciixspmode={"B7,allow}}
240+\setjaparameter{asciixspmode={"B8,allow}}
241+\setjaparameter{asciixspmode={"B9,allow}}
242+\setjaparameter{asciixspmode={"BA,allow}}
243+\setjaparameter{asciixspmode={"BB,allow}}
244+\setjaparameter{asciixspmode={"BC,allow}}
245+\setjaparameter{asciixspmode={"BD,allow}}
246+\setjaparameter{asciixspmode={"BE,allow}}
247+\setjaparameter{asciixspmode={"BF,allow}}
248+\setjaparameter{asciixspmode={"C0,allow}}
249+\setjaparameter{asciixspmode={"C1,allow}}
250+\setjaparameter{asciixspmode={"C2,allow}}
251+\setjaparameter{asciixspmode={"C3,allow}}
252+\setjaparameter{asciixspmode={"C4,allow}}
253+\setjaparameter{asciixspmode={"C5,allow}}
254+\setjaparameter{asciixspmode={"C6,allow}}
255+\setjaparameter{asciixspmode={"C7,allow}}
256+\setjaparameter{asciixspmode={"C8,allow}}
257+\setjaparameter{asciixspmode={"C9,allow}}
258+\setjaparameter{asciixspmode={"CA,allow}}
259+\setjaparameter{asciixspmode={"CB,allow}}
260+\setjaparameter{asciixspmode={"CC,allow}}
261+\setjaparameter{asciixspmode={"CD,allow}}
262+\setjaparameter{asciixspmode={"CE,allow}}
263+\setjaparameter{asciixspmode={"CF,allow}}
264+\setjaparameter{asciixspmode={"D0,allow}}
265+\setjaparameter{asciixspmode={"D1,allow}}
266+\setjaparameter{asciixspmode={"D2,allow}}
267+\setjaparameter{asciixspmode={"D3,allow}}
268+\setjaparameter{asciixspmode={"D4,allow}}
269+\setjaparameter{asciixspmode={"D5,allow}}
270+\setjaparameter{asciixspmode={"D6,allow}}
271+\setjaparameter{asciixspmode={"D7,allow}}
272+\setjaparameter{asciixspmode={"D8,allow}}
273+\setjaparameter{asciixspmode={"D9,allow}}
274+\setjaparameter{asciixspmode={"DA,allow}}
275+\setjaparameter{asciixspmode={"DB,allow}}
276+\setjaparameter{asciixspmode={"DC,allow}}
277+\setjaparameter{asciixspmode={"DD,allow}}
278+\setjaparameter{asciixspmode={"DE,allow}}
279+\setjaparameter{asciixspmode={"DF,allow}}
280+\setjaparameter{asciixspmode={"E0,allow}}
281+\setjaparameter{asciixspmode={"E1,allow}}
282+\setjaparameter{asciixspmode={"E2,allow}}
283+\setjaparameter{asciixspmode={"E3,allow}}
284+\setjaparameter{asciixspmode={"E4,allow}}
285+\setjaparameter{asciixspmode={"E5,allow}}
286+\setjaparameter{asciixspmode={"E6,allow}}
287+\setjaparameter{asciixspmode={"E7,allow}}
288+\setjaparameter{asciixspmode={"E8,allow}}
289+\setjaparameter{asciixspmode={"E9,allow}}
290+\setjaparameter{asciixspmode={"EA,allow}}
291+\setjaparameter{asciixspmode={"EB,allow}}
292+\setjaparameter{asciixspmode={"EC,allow}}
293+\setjaparameter{asciixspmode={"ED,allow}}
294+\setjaparameter{asciixspmode={"EE,allow}}
295+\setjaparameter{asciixspmode={"EF,allow}}
296+\setjaparameter{asciixspmode={"F0,allow}}
297+\setjaparameter{asciixspmode={"F1,allow}}
298+\setjaparameter{asciixspmode={"F2,allow}}
299+\setjaparameter{asciixspmode={"F3,allow}}
300+\setjaparameter{asciixspmode={"F4,allow}}
301+\setjaparameter{asciixspmode={"F5,allow}}
302+\setjaparameter{asciixspmode={"F6,allow}}
303+\setjaparameter{asciixspmode={"F7,allow}}
304+\setjaparameter{asciixspmode={"F8,allow}}
305+\setjaparameter{asciixspmode={"F9,allow}}
306+\setjaparameter{asciixspmode={"FA,allow}}
307+\setjaparameter{asciixspmode={"FB,allow}}
308+\setjaparameter{asciixspmode={"FC,allow}}
309+\setjaparameter{asciixspmode={"FD,allow}}
310+\setjaparameter{asciixspmode={"FE,allow}}
311+\setjaparameter{asciixspmode={"FF,allow}}
312+%
313+% inhibitxspcode
314+\setjaparameter{cjkxspmode={`、,postonly}}
315+\setjaparameter{cjkxspmode={`。,postonly}}
316+\setjaparameter{cjkxspmode={`,,postonly}}
317+\setjaparameter{cjkxspmode={`.,postonly}}
318+\setjaparameter{cjkxspmode={`;,postonly}}
319+\setjaparameter{cjkxspmode={`?,postonly}}
320+\setjaparameter{cjkxspmode={`),postonly}}
321+\setjaparameter{cjkxspmode={`(,preonly}}
322+\setjaparameter{cjkxspmode={`],postonly}}
323+\setjaparameter{cjkxspmode={`[,preonly}}
324+\setjaparameter{cjkxspmode={`},postonly}}
325+\setjaparameter{cjkxspmode={`{,preonly}}
326+\setjaparameter{cjkxspmode={`‘,preonly}}
327+\setjaparameter{cjkxspmode={`’,postonly}}
328+\setjaparameter{cjkxspmode={`“,preonly}}
329+\setjaparameter{cjkxspmode={`”,postonly}}
330+\setjaparameter{cjkxspmode={`〔,preonly}}
331+\setjaparameter{cjkxspmode={`〕,postonly}}
332+\setjaparameter{cjkxspmode={`〈,preonly}}
333+\setjaparameter{cjkxspmode={`〉,postonly}}
334+\setjaparameter{cjkxspmode={`《,preonly}}
335+\setjaparameter{cjkxspmode={`》,postonly}}
336+\setjaparameter{cjkxspmode={`「,preonly}}
337+\setjaparameter{cjkxspmode={`」,postonly}}
338+\setjaparameter{cjkxspmode={`『,preonly}}
339+\setjaparameter{cjkxspmode={`』,postonly}}
340+\setjaparameter{cjkxspmode={`【,preonly}}
341+\setjaparameter{cjkxspmode={`】,postonly}}
342+\setjaparameter{cjkxspmode={`—,inhibit}}% U+2014 EM DASH
343+\setjaparameter{cjkxspmode={`―,inhibit}}% U+2015 HORIZONTAL BAR
344+\setjaparameter{cjkxspmode={`〜,inhibit}}% U+301C WAVE DASH
345+\setjaparameter{cjkxspmode={`~,inhibit}}% U+FF5E FULLWIDTH TILDE
346+\setjaparameter{cjkxspmode={`…,inhibit}}
347+\setjaparameter{cjkxspmode={`¥,inhibit}}% U+00A5 YEN SIGN
348+\setjaparameter{cjkxspmode={`¥,inhibit}}% U+FFE5 FULLWIDTH YEN SIGN
349+\setjaparameter{cjkxspmode={`°,postonly}}
350+\setjaparameter{cjkxspmode={`′,postonly}}
351+\setjaparameter{cjkxspmode={`″,postonly}}
352+%
353+% inhibitxspcode JIS X 0213
354+%
355+\setjaparameter{cjkxspmode={`⦅,preonly}}
356+\setjaparameter{cjkxspmode={`⦆,postonly}}
357+\setjaparameter{cjkxspmode={`⦅,preonly}}
358+\setjaparameter{cjkxspmode={`⦆,postonly}}
359+\setjaparameter{cjkxspmode={`〘,preonly}}
360+\setjaparameter{cjkxspmode={`〙,postonly}}
361+\setjaparameter{cjkxspmode={`〖,preonly}}
362+\setjaparameter{cjkxspmode={`〗,postonly}}
363+\setjaparameter{cjkxspmode={`«,preonly}}
364+\setjaparameter{cjkxspmode={`»,postonly}}
365+\setjaparameter{cjkxspmode={`〝,preonly}}
366+\setjaparameter{cjkxspmode={`〟,postonly}}
367+\setjaparameter{cjkxspmode={`‼,postonly}}
368+\setjaparameter{cjkxspmode={`⁇,postonly}}
369+\setjaparameter{cjkxspmode={`⁈,postonly}}
370+\setjaparameter{cjkxspmode={`⁉,postonly}}
371+\setjaparameter{cjkxspmode={`¡,preonly}}
372+\setjaparameter{cjkxspmode={`¿,preonly}}
373+\setjaparameter{cjkxspmode={`ª,postonly}}
374+\setjaparameter{cjkxspmode={`º,postonly}}
375+\setjaparameter{cjkxspmode={`¹,postonly}}
376+\setjaparameter{cjkxspmode={`²,postonly}}
377+\setjaparameter{cjkxspmode={`³,postonly}}
378+\setjaparameter{cjkxspmode={`€,preonly}}
379+%
380+% inhibitxspcode JIS X 0212
381+%
382+%\setjaparameter{cjkxspmode={`¡,postonly}}
383+%\setjaparameter{cjkxspmode={`¿,postonly}}
384+%\setjaparameter{cjkxspmode={`º,postonly}}
385+%\setjaparameter{cjkxspmode={`ª,postonly}}
386+\setjaparameter{cjkxspmode={`™,postonly}}
387+%
388+% inhibitxspcode 半角片仮名
389+%
390+\setjaparameter{cjkxspmode={`。,postonly}}
391+\setjaparameter{cjkxspmode={`、,postonly}}
392+\setjaparameter{cjkxspmode={`「,preonly}}
393+\setjaparameter{cjkxspmode={`」,postonly}}
394+
395+\endinput
396+cat `locate ukinsoku.tex` \
397+ | sed "s/prebreakpenalty\(.*\)=\([0-9]*\)/setjaparameter{prebreakpenalty={\1,\2}}/" \
398+ | sed "s/postbreakpenalty\(.*\)=\([0-9]*\)/setjaparameter{postbreakpenalty={\1,\2}}/" \
399+ | sed "s/inhibitxspcode\(.*\)=0/setjaparameter{cjkxspmode={\1,inhibit}}/" \
400+ | sed "s/inhibitxspcode\(.*\)=1/setjaparameter{cjkxspmode={\1,postonly}}/" \
401+ | sed "s/inhibitxspcode\(.*\)=2/setjaparameter{cjkxspmode={\1,preonly}}/" \
402+ | sed "s/inhibitxspcode\(.*\)=3/setjaparameter{cjkxspmode={\1,allow}}/" \
403+ | sed "s/xspcode\(.*\)=0/setjaparameter{asciixspmode={\1,inhibit}}/" \
404+ | sed "s/xspcode\(.*\)=2/setjaparameter{asciixspmode={\1,postonly}}/" \
405+ | sed "s/xspcode\(.*\)=1/setjaparameter{asciixspmode={\1,preonly}}/" \
406+ | sed "s/xspcode\(.*\)=3/setjaparameter{asciixspmode={\1,allow}}/" > luatexja-kinsoku.tex
\ No newline at end of file
--- a/src/luatj-mono.lua
+++ /dev/null
@@ -1,3 +0,0 @@
1-jfm.dir = 'yoko'
2-jfm.zw= 1.0; jfm.zh = 1.0
3-jfm.define_type_dim(0, 0.0 , 0.0 , 1.0 , 0.88, 0.12, 0.0)
\ No newline at end of file
--- a/src/luatj-ujis.lua
+++ /dev/null
@@ -1,87 +0,0 @@
1--- A sample of Japanese font metric for pluatex
2--- The unit of <height>, <depth>:
3--- The unit of other dimension: the design size
4-
5-jfm.dir = 'yoko'
6--- 'yoko'
7-
8-jfm.zw= 1.0; jfm.zh = 1.0
9--- amount of ``1zw'' and ``1zh'' (these units are used in pTeX)
10-
11-
12--- character type
13--- jfm.define_char_type(<type>, <letters>)
14-jfm.define_char_type(1, {
15- 0x2018, 0x201C, 0x3008, 0x300A, 0x300C, 0x300E, 0x3010, 0x3014, 0x3016,
16- 0x3018, 0x301D, 0xFF08, 0xFF3B, 0xFF5B, 0xFF5F
17- }) -- 開き括弧類
18-jfm.define_char_type(2, {
19- 0x2019, 0x201D, 0x3001, 0x3009, 0x300B, 0x300D, 0x300F, 0x3011, 0x3015,
20- 0x3017, 0x3019, 0x301F, 0xFF09, 0xFF0C, 0xFF3D, 0xFF5D, 0xFF60
21- }) -- 閉じ括弧類
22-jfm.define_char_type(3, {0x30FB, 0xFF1A, 0xFF1B}) -- 中点類
23-jfm.define_char_type(4, {0x3002, 0xFF0E}) -- 句点類
24-jfm.define_char_type(5, {0x2015, 0x2025, 0x2026}) -- ダッシュ
25-jfm.define_char_type(6, {'boxbdd'})
26-jfm.define_char_type(7, {
27- 0xFF61, 0xFF62, 0xFF63, 0xFF64, 0xFF65, 0xFF66, 0xFF67, 0xFF68, 0xFF69,
28- 0xFF6A, 0xFF6B, 0xFF6C, 0xFF6D, 0xFF6E, 0xFF6F, 0xFF70, 0xFF71, 0xFF72,
29- 0xFF73, 0xFF74, 0xFF75, 0xFF76, 0xFF77, 0xFF78, 0xFF79, 0xFF7A, 0xFF7B,
30- 0xFF7C, 0xFF7D, 0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82, 0xFF83, 0xFF84,
31- 0xFF85, 0xFF86, 0xFF87, 0xFF88, 0xFF89, 0xFF8A, 0xFF8B, 0xFF8C, 0xFF8D,
32- 0xFF8E, 0xFF8F, 0xFF90, 0xFF91, 0xFF92, 0xFF93, 0xFF94, 0xFF95, 0xFF96,
33- 0xFF97, 0xFF98, 0xFF99, 0xFF9A, 0xFF9B, 0xFF9C, 0xFF9D, 0xFF9E, 0xFF9F
34-}) -- 半角カナ
35-
36-
37--- 'boxbdd' matches
38--- o the beginning of paragraphs and hboxes
39--- o the ending of paragraphs and hboxes
40--- o just after the hbox created by \parindent
41-
42--- 'jcharbdd' matches the boundary between two Japanese characters whose metrics (or sizes)
43--- are different.
44-
45--- 'diffmet' matches the boundary between a Japanese character
46--- and a material which is not a Japanese character.
47-
48--- dimension
49--- jfm.define_type_dim(<type>, <left>, <down>, <width>,
50--- <height>, <depth>, <italic correction>)
51-jfm.define_type_dim(0, 0.0 , 0.0 , 1.0 , 0.88, 0.12, 0.0)
52-jfm.define_type_dim(1, 0.5 , 0.0 , 0.5 , 0.88, 0.12, 0.0)
53-jfm.define_type_dim(2, 0.0 , 0.0 , 0.5 , 0.88, 0.12, 0.0)
54-jfm.define_type_dim(3, 0.25, 0.0 , 0.5 , 0.88, 0.12, 0.0)
55-jfm.define_type_dim(4, 0.0 , 0.0 , 0.5 , 0.88, 0.12, 0.0)
56-jfm.define_type_dim(5, 0.0 , 0.0 , 1.0 , 0.88, 0.12, 0.0)
57--- jfm.define_type_dim(6, 0.0 , 0.0 , 1.0 , 0.88, 0.12, 0.0): does not needed
58-jfm.define_type_dim(7, 0.0 , 0.0 , 0.5 , 0.88, 0.12, 0.0)
59-
60--- glue/kern
61--- jfm.define_glue(<btype>, <atype>, <width>, <stretch>, <shrink>)
62--- jfm.define_kern(<btype>, <atype>, <width>)
63-jfm.define_glue(0,1, 0.5 , 0.0, 0.5 )
64-jfm.define_glue(7,1, 0.5 , 0.0, 0.5 )
65-jfm.define_glue(0,3, 0.25, 0.0, 0.25)
66-jfm.define_glue(7,3, 0.25, 0.0, 0.25)
67-jfm.define_glue(1,3, 0.25, 0.0, 0.25)
68-jfm.define_glue(2,0, 0.5 , 0.0, 0.5 )
69-jfm.define_glue(2,7, 0.5 , 0.0, 0.5 )
70-jfm.define_glue(2,1, 0.5 , 0.0, 0.5 )
71-jfm.define_glue(2,3, 0.25, 0.0, 0.25)
72-jfm.define_glue(2,5, 0.5 , 0.0, 0.5 )
73-jfm.define_glue(3,0, 0.25, 0.0, 0.25)
74-jfm.define_glue(3,7, 0.25, 0.0, 0.25)
75-jfm.define_glue(3,1, 0.25, 0.0, 0.25)
76-jfm.define_glue(3,2, 0.25, 0.0, 0.25)
77-jfm.define_glue(3,3, 0.5 , 0.0, 0.5 )
78-jfm.define_glue(3,4, 0.25, 0.0, 0.25)
79-jfm.define_glue(3,5, 0.25, 0.0, 0.25)
80-jfm.define_glue(4,0, 0.5 , 0.0, 0.0 )
81-jfm.define_glue(4,7, 0.5 , 0.0, 0.0 )
82-jfm.define_glue(4,1, 0.5 , 0.0, 0.0 )
83-jfm.define_glue(4,3, 0.75, 0.0, 0.25)
84-jfm.define_glue(4,5, 0.5 , 0.0, 0.0 )
85-jfm.define_glue(5,1, 0.5 , 0.0, 0.5 )
86-jfm.define_glue(5,3, 0.25, 0.0, 0.25)
87-jfm.define_kern(5,5, 0.0)
\ No newline at end of file
Binary files a/test/test01-noembed.pdf and b/test/test01-noembed.pdf differ
--- a/test/test01-noembed.tex
+++ b/test/test01-noembed.tex
@@ -1,22 +1,21 @@
11 %#! luatex
22 \input luatexja-core.sty
33
4-\loadjfontmetric{mt}{ujis}
5-\jfont\tenmin={psft:Ryumin-Light:jfm=mt}\tenmin
6-\jfont\tengoth={psft:GothicBBB-Medium:jfm=mt}
7-\jfont\jisse={psft:Ryumin-Light:script=latn;+jp78;jfm=mt}
8-\jfont\jisexpt={psft:Ryumin-Light:script=latn;+expt;jfm=mt}
9-\jfont\jishwid={psft:Ryumin-Light:script=latn;+hwid;jfm=mt}
4+\jfont\tenmin={psft:Ryumin-Light:jfm=ujis}\tenmin
5+\jfont\tengoth={psft:GothicBBB-Medium:jfm=ujis}
6+\jfont\jisse={psft:Ryumin-Light:script=latn;+jp78;jfm=ujis}
7+\jfont\jisexpt={psft:Ryumin-Light:script=latn;+expt;jfm=ujis}
8+\jfont\jishwid={psft:Ryumin-Light:script=latn;+hwid;jfm=ujis}
109 %\font\tmihwid={psft:Ryumin-Light:script=latn;+hwid}
11-\jfont\jisnalt={psft:Ryumin-Light:script=latn;+nalt;jfm=mt}
12-\jfont\jistrad={psft:Ryumin-Light:script=latn;+trad;jfm=mt}
13-\jfont\jissups={psft:Ryumin-Light:script=latn;+sups;jfm=mt}
14-\jfont\jisliga={psft:Ryumin-Light:script=latn;+liga;jfm=mt}
10+\jfont\jisnalt={psft:Ryumin-Light:script=latn;+nalt;jfm=ujis}
11+\jfont\jistrad={psft:Ryumin-Light:script=latn;+trad;jfm=ujis}
12+\jfont\jissups={psft:Ryumin-Light:script=latn;+sups;jfm=ujis}
13+\jfont\jisliga={psft:Ryumin-Light:script=latn;+liga;jfm=ujis}
1514 %\font\tmiliga={psft:Ryumin-Light:script=latn;+liga}
16-\jfont\jisvert={psft:Ryumin-Light:script=latn;+vert;jfm=mt}
15+\jfont\jisvert={psft:Ryumin-Light:script=latn;+vert;jfm=ujis}
1716 \parskip=\smallskipamount\parindent=1\zw
1817
19-{\noindent\bf\tengoth luatj-ujis.lua を使用}
18+{\noindent\bf\tengoth jfm-ujis.lua を使用}
2019
2120 \bigskip
2221
@@ -52,5 +51,41 @@
5251
5352 {\tt'boxbdd'}のテスト2: \vrule\hbox{「」}\vrule ←正しい実装ならば2本の罫線の間は全角幅
5453
54+
55+\bigskip
56+{\noindent\bf\tengt ■{\tt differentjfm}による挙動の違い}
57+
58+\jfont\tenMa={psft:Ryumin-Lightfile:jfm=ujis}
59+\jfont\tenMb={psft:Ryumin-Lightfile:jfm=ujis;jfmvar=a}
60+\jfont\tenGa={psft:GothicBBB-Medium:jfm=ujis} at 15pt
61+\jfont\tenGb={psft:GothicBBB-Medium:jfm=ujis;jfmvar=a} at 15pt\relax
62+
63+\def\djtest{%
64+{\tt Ma-Ma}: \setbox0=\hbox{{\tenMa )}{\tenMa ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
65+{\tt Ma-Mb}: \setbox0=\hbox{{\tenMa )}{\tenMb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
66+{\tt Mb-Mb}: \setbox0=\hbox{{\tenMb )}{\tenMb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
67+
68+{\tt Ma-Ga}: \setbox0=\hbox{{\tenMa )}{\tenGa ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
69+{\tt Ma-Gb}: \setbox0=\hbox{{\tenMa )}{\tenGb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
70+{\tt Mb-Gb}: \setbox0=\hbox{{\tenMb )}{\tenGb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)}%
71+}
72+
73+{\noindent\bf\tengt {\tt differentjfm=small}(小さい方)}
74+
75+\setjaparameter{differentjfm=small}\djtest
76+
77+{\noindent\bf\tengt {\tt differentjfm=large}(大きい方)}
78+
79+\setjaparameter{differentjfm=LARGE}\djtest
80+
81+{\noindent\bf\tengt {\tt differentjfm=average}(default,平均)}
82+
83+\setjaparameter{differentjfm=AVERAGE}\djtest
84+
85+{\noindent\bf\tengt {\tt differentjfm=both}(両方挿入)}
86+
87+\setjaparameter{differentjfm=Both}\djtest
88+
89+
5590 \end
5691
Binary files a/test/test01.pdf and b/test/test01.pdf differ
--- a/test/test01.tex
+++ b/test/test01.tex
@@ -1,26 +1,23 @@
1-%#! luatex
1+%#! time luatex test01
22 \input luatexja-core.sty
33
4-\loadjfontmetric{mt}{ujis}
5-\jfont\tenmin={file:ipaexm.ttf:jfm=mt}\tenmin
6-\jfont\tengoth={file:ipaexg.ttf:jfm=mt}
7-\jfont\jisninety={file:ipaexm.ttf:script=latn;+jp90;jfm=mt}
8-\jfont\jisexpt={file:ipaexm.ttf:script=latn;+expt;jfm=mt}
9-\jfont\jishwid={file:ipaexm.ttf:script=latn;+hwid;jfm=mt}
4+\jfont\jisninety={file:ipaexm.ttf:script=latn;+jp90;jfm=ujis}
5+\jfont\jisexpt={file:ipaexm.ttf:script=latn;+expt;jfm=ujis}
6+\jfont\jishwid={file:ipaexm.ttf:script=latn;+hwid;jfm=ujis}
107 %\font\tmihwid={file:ipaexm.ttf:script=latn;+hwid}
11-\jfont\jisnalt={file:ipaexm.ttf:script=latn;+nalt;jfm=mt}
12-\jfont\jistrad={file:ipaexm.ttf:script=latn;+trad;jfm=mt}
13-\jfont\jissups={file:ipaexm.ttf:script=latn;+sups;jfm=mt}
14-\jfont\jisliga={file:ipaexm.ttf:script=latn;+liga;jfm=mt}
8+\jfont\jisnalt={file:ipaexm.ttf:script=latn;+nalt;jfm=ujis}
9+\jfont\jistrad={file:ipaexm.ttf:script=latn;+trad;jfm=ujis}
10+\jfont\jissups={file:ipaexm.ttf:script=latn;+sups;jfm=ujis}
11+\jfont\jisliga={file:ipaexm.ttf:script=latn;+liga;jfm=ujis}
1512 %\font\tmiliga={file:ipaexm.ttf:script=latn;+liga}
16-\jfont\jisvert={file:ipaexm.ttf:script=latn;+vert;jfm=mt}
13+\jfont\jisvert={file:ipaexm.ttf:script=latn;+vert;jfm=ujis}
1714 \parskip=\smallskipamount\parindent=1\zw
1815
19-{\noindent\bf\tengoth luatj-ujis.lua を使用}
16+{\noindent\bf\tengt jfm-ujis.lua を使用}
2017
2118 \bigskip
2219
23-{\noindent\bf\tengoth luaotf\/load による feature との共存状況}
20+{\noindent\bf\tengt ■luaotf\/load による feature との共存状況}
2421
2522 {\tentt expt} feature: 剥→{\jisexpt 剥}
2623
@@ -50,5 +47,41 @@
5047
5148 {\tt'boxbdd'}のテスト2: \vrule\hbox{「」}\vrule ←正しい実装ならば2本の罫線の間は全角幅
5249
50+
51+\bigskip
52+{\noindent\bf\tengt ■{\tt differentjfm}による挙動の違い}
53+
54+\jfont\tenMa={file:ipaexm.ttf:jfm=ujis}
55+\jfont\tenMb={file:ipaexm.ttf:jfm=ujis;jfmvar=a}
56+\jfont\tenGa={file:ipaexg.ttf:jfm=ujis} at 15pt
57+\jfont\tenGb={file:ipaexg.ttf:jfm=ujis;jfmvar=a} at 15pt\relax
58+
59+\def\djtest{%
60+{\tt Ma-Ma}: \setbox0=\hbox{{\tenMa )}{\tenMa ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
61+{\tt Ma-Mb}: \setbox0=\hbox{{\tenMa )}{\tenMb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
62+{\tt Mb-Mb}: \setbox0=\hbox{{\tenMb )}{\tenMb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
63+
64+{\tt Ma-Ga}: \setbox0=\hbox{{\tenMa )}{\tenGa ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
65+{\tt Ma-Gb}: \setbox0=\hbox{{\tenMa )}{\tenGb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)},
66+{\tt Mb-Gb}: \setbox0=\hbox{{\tenMb )}{\tenGb ・}}\hbox to 90pt{\copy0\hss(\the\wd0)}%
67+}
68+
69+{\noindent\bf\tengt {\tt differentjfm=small}(小さい方)}
70+
71+\setjaparameter{differentjfm=small}\djtest
72+
73+{\noindent\bf\tengt {\tt differentjfm=large}(大きい方)}
74+
75+\setjaparameter{differentjfm=LARGE}\djtest
76+
77+{\noindent\bf\tengt {\tt differentjfm=average}(default,平均)}
78+
79+\setjaparameter{differentjfm=AVERAGE}\djtest
80+
81+{\noindent\bf\tengt {\tt differentjfm=both}(両方挿入)}
82+
83+\setjaparameter{differentjfm=Both}\djtest
84+
85+
5386 \end
5487
Binary files a/test/test02-latex.pdf and b/test/test02-latex.pdf differ
--- a/test/test02-latex.tex
+++ b/test/test02-latex.tex
@@ -3,7 +3,6 @@
33 \usepackage{fontspec,pdftexcmds}
44
55 \input luatexja-core.sty
6-\loadjfontmetric{mt}{ujis}
76
87 \ExplSyntaxOn
98 \xetex_or_luatex:nnn { \tl_set:Nn \l_fontspec_pre_feat_sclist }
@@ -12,7 +11,7 @@
1211 \tl_if_empty:NF \l_fontspec_script_tl
1312 {
1413 script = \l_fontspec_script_tl ;
15- language = \l_fontspec_lang_tl ;jfm=mt;
14+ language = \l_fontspec_lang_tl ;jfm=ujis;
1615 }
1716 }
1817 }
@@ -21,7 +20,7 @@
2120 \tl_if_empty:NF \l_fontspec_script_tl
2221 {
2322 script = \l_fontspec_script_tl ;
24- language = \l_fontspec_lang_tl ;jfm=mt;
23+ language = \l_fontspec_lang_tl ;jfm=ujis;
2524 }
2625 }
2726 \ExplSyntaxOff
@@ -34,8 +33,7 @@
3433 \def\extract@font{%
3534 \get@external@font
3635 \ifnum\pdf@strcmp{\f@encoding}{EU2}=0
37- \expandafter\jfont\font@name\external@font\relax
38- \global\expandafter\font@name{\font@name}%
36+ \expandafter\gjfont\font@name\external@font\relax
3937 \font@name\global\zw=\zw\global\zh=\zh
4038 \else
4139 \global\expandafter\font\font@name\external@font\relax
Binary files a/test/test03-after.pdf and b/test/test03-after.pdf differ
--- a/test/test03-after.tex
+++ b/test/test03-after.tex
@@ -1,23 +1,48 @@
11 %#!luatex
22 \input luatexja-core.sty
3-\loadjfontmetric{mta}{ujis}
4-
53 \def\\{\hfill\break}
6-\tentt\meaning\tenipam
4+\tentt\tenmin
5+
6+\catcode`\@=11
7+\the\luatexja@ykblshift
8+\setjaparameter{ykbaselineshift=\maxdimen,autoxspacing=false}
9+\the\luatexja@ykblshift\
10+\getjaparameter{ykbaselineshift}
11+
12+\getjaparameter{kanjiskip},
13+\getjaparameter{xkanjiskip},
14+\getjaparameter{autospacing},
15+\getjaparameter{autoxspacing},
16+\getjaparameter{differentjfm}.
17+\setjaparameter{ykbaselineshift=0pt,autoxspacing=true}
18+
19+
20+あいうえお{\setjaparameter{ykbaselineshift=2pt}かきくけこ}さしすせそ
21+
22+あいうえお{\globalsetjaparameter{ykbaselineshift=2pt}かきくけこ}さしすせそ
723
24+\getjaparameter{prebreakpenalty}{`(},
25+\getjaparameter{prebreakpenalty}{`)},
26+\getjaparameter{prebreakpenalty}{`あ}
827
9-{\jfont\tenipam={file:ipam.ttf:script=latn;jfm=mta}%
10-aiu\tenipam あい円うえ()(お辻abc\\\meaning\tenipam
1128
12-↑defined by \char"5C jfont}
29+\getjaparameter{postbreakpenalty}{`(},
30+\getjaparameter{postbreakpenalty}{`)},
31+\getjaparameter{postbreakpenalty}{`あ}
1332
14-\tentt\meaning\tenipam
33+a\inhibitglue (a)\inhibitglue aあa〜a
1534
16-\font\tenipax={file:ipam.ttf:script=latn;jfm=mta}\message{\the\font}%
17-aiu\tenipax あい円うえ()(お辻abc\\\meaning\tenipax
35+\getjaparameter{cjkxspmode}{`(},
36+\getjaparameter{cjkxspmode}{`)},
37+\getjaparameter{cjkxspmode}{`あ},
38+\getjaparameter{cjkxspmode}{`〜}
1839
19-↑defined by \char"5C font
40+\setjaparameter{asciixspmode={`\b,inhibit}}
41+あ[あ]あaあbあ
2042
21-\tentt\meaning\tenipam
43+\getjaparameter{asciixspmode}{`[},
44+\getjaparameter{asciixspmode}{`]},
45+\getjaparameter{asciixspmode}{`a},
46+\getjaparameter{asciixspmode}{`b}
2247
2348 \end
旧リポジトリブラウザで表示