summaryrefslogtreecommitdiff
path: root/macros/luatex/generic
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/generic')
-rw-r--r--macros/luatex/generic/luatexko/ChangeLog8
-rw-r--r--macros/luatex/generic/luatexko/README2
-rw-r--r--macros/luatex/generic/luatexko/luatexko-doc.pdfbin324254 -> 324950 bytes
-rw-r--r--macros/luatex/generic/luatexko/luatexko-doc.tex188
-rw-r--r--macros/luatex/generic/luatexko/luatexko-normalize.lua4
-rw-r--r--macros/luatex/generic/luatexko/luatexko-uhc2utf8.lua4
-rw-r--r--macros/luatex/generic/luatexko/luatexko.lua83
-rw-r--r--macros/luatex/generic/luatexko/luatexko.sty2
8 files changed, 167 insertions, 124 deletions
diff --git a/macros/luatex/generic/luatexko/ChangeLog b/macros/luatex/generic/luatexko/ChangeLog
index 4e09cacd1c..5ffa9cd5f2 100644
--- a/macros/luatex/generic/luatexko/ChangeLog
+++ b/macros/luatex/generic/luatexko/ChangeLog
@@ -1,3 +1,11 @@
+2020-03-14 Dohyun Kim <nomos at ktug org>
+
+ Version 2.7
+
+ * luatexko.lua:
+ use post_linebreak_filter callback;
+ support expansion/protrusion in harf mode
+
2020-02-17 Dohyun Kim <nomos at ktug org>
Version 2.6
diff --git a/macros/luatex/generic/luatexko/README b/macros/luatex/generic/luatexko/README
index a60676bd2a..494b40edf9 100644
--- a/macros/luatex/generic/luatexko/README
+++ b/macros/luatex/generic/luatexko/README
@@ -1,4 +1,4 @@
-LuaTeX-ko Package version 2.6 (2020/02/17)
+LuaTeX-ko Package version 2.7 (2020/03/14)
===========================================
This is a Lua(La)TeX macro package that supports typesetting Korean
diff --git a/macros/luatex/generic/luatexko/luatexko-doc.pdf b/macros/luatex/generic/luatexko/luatexko-doc.pdf
index 8e76e957c1..b37128dcbb 100644
--- a/macros/luatex/generic/luatexko/luatexko-doc.pdf
+++ b/macros/luatex/generic/luatexko/luatexko-doc.pdf
Binary files differ
diff --git a/macros/luatex/generic/luatexko/luatexko-doc.tex b/macros/luatex/generic/luatexko/luatexko-doc.tex
index 759a46bfb9..7d57dee230 100644
--- a/macros/luatex/generic/luatexko/luatexko-doc.tex
+++ b/macros/luatex/generic/luatexko/luatexko-doc.tex
@@ -11,45 +11,47 @@
\documentclass[a4paper]{article}
\usepackage[hmargin=3.8cm]{geometry}
\usepackage[svgnames]{xcolor}
+\usepackage{luacolor}
\usepackage[hangul]{luatexko}
\directlua{
- fonts.protrusions.setups.notoserifcjk = {
- [171] = { 0.5, 0 },
- [187] = { 0, 0.5 },
- [1002965] = { 0, 0.5 },
- [1002968] = { 0.5, 0 },
- [1002969] = { 0, 0.5 },
- [1002970] = { 0, 1 },
- [1002971] = { 0, 0.5 },
- [1002972] = { 0, 1 },
- [1002974] = { 0, 0.5 },
- [1002975] = { 0, 0.5 },
- [1002976] = { 0, 0.5 },
- [1002985] = { 1, 0 },
- [1002986] = { 0, 1 },
- [1002988] = { 0.5, 0 },
- [1002989] = { 0, 0.5 },
+ local gidoffset = 0x120000
+ local notoserifcjkkr_hb = {
+ [171] = { 0.5, 0 }, % «
+ [187] = { 0, 0.5 }, % »
+ [62253+gidoffset] = { 0.5, 0 }, % (
+ [62254+gidoffset] = { 0, 0.5 }, % )
+ [62255+gidoffset] = { 0, 1 }, % ,
+ [62257+gidoffset] = { 0, 1 }, % .
+ [62259+gidoffset] = { 0, 0.5 }, % :
+ [62260+gidoffset] = { 0, 0.5 }, % ;
+ [62270+gidoffset] = { 1, 0 }, % ‘
+ [62271+gidoffset] = { 0, 1 }, % ’
+ [62273+gidoffset] = { 0.5, 0 }, % “
+ [62274+gidoffset] = { 0, 0.5 }, % ”
}
+ fonts.protrusions.setups.notoserifcjk = notoserifcjkkr_hb
}
+\defaultfontfeatures+{Renderer=OpenType}
+\setmainfont{Latin Modern Roman}[Expansion] % for hb tlig
\setmainhangulfont{Noto Serif CJK KR}[
Scale=0.98,
AutoFakeSlant,
Script=Hangul,
Language=Korean,
- LocalForms=On,
UprightFont=* Light,
BoldFont=* Bold,
InterLatinCJK=.125em,
Expansion, Protrusion=notoserifcjk,
]
+\setsansfont{Latin Modern Sans}
\setsanshangulfont{Noto Sans CJK KR}[
- \ifluahbtex Renderer=OpenType\fi,
Scale=0.98,
Script=Hangul,
Language=Korean,
UprightFont=* DemiLight,
BoldFont=* Bold,
InterLatinCJK=.125em,
+ CompressPunctuations,
]
\setmonofont{Inconsolatazi4}[
Scale=0.98,
@@ -72,6 +74,20 @@
{Size=9-, Font=* DemiLight},
},
]
+\newhangulfontfamily\verticalhangulfont{Noto Sans CJK KR}[
+ Renderer=Node,
+ Script=Hangul,
+ Language=Korean,
+ UprightFont=* DemiLight,
+ BoldFont=* Bold,
+ InterLatinCJK=.125em,
+ Vertical=Alternates,
+ RawFeature=vertical,
+ CompressPunctuations,
+ InterCharStretch=1pt,
+ CharRaise=3.6pt,
+ CharacterWidth=Full,
+]
\newhangulfontface\rubyfont{Noto Serif CJK KR Medium}[
Script=Hangul,
Language=Korean,
@@ -104,7 +120,7 @@
\author{Dohyun Kim \normalsize |<nomos at ktug org>| \and
Soojin Nam \normalsize |<jsunam at gmail com>| \and
\normalsize <\url{http://github.com/dohyunkim/luatexko}>}
-\date{Version 2.6\quad 2020/02/17}
+\date{Version 2.7\quad 2020/03/14}
\maketitle
\begin{quote}\small
@@ -256,9 +272,8 @@ fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있
\footnote{%
옛한글 식자를 위해서는 적어도 |Script=Hangul|
(플레인텍이라면 |script=hang|)을 주어야 한다.
- 옛한글이 아니더라도 한글을 쓴다면 이 옵션은 주는 것이 좋다.
- 또한 폰트가 지원한다면 |LocalForms=On| (플레인텍이라면 |+locl|)과
- 함께 쓰는 것이 권장된다. }\,%
+ 옛한글이 아니더라도 한글을 쓴다면 이 옵션과 |Language=Korean|
+ (플레인텍은 |language=KOR|)을 주는 것이 좋다. }\,%
\footnote{%
|PunctRaise|, |NoEmbedding| 옵션은 v2.0부터 더는 제공하지 않는다. }
@@ -266,9 +281,9 @@ fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있
\noindent\textbf{%
世솅〮宗조ᇰ御ᅌᅥᆼ〮製졩〮訓훈〮民민正져ᇰ〮音ᅙᅳᆷ
}\par
- 製졩〮ᄂᆞᆫ〮글〮지ᅀᅳᆯ〮씨〮니〮御ᅌᅥᆼ〮製졩〮ᄂᆞᆫ〮님〯금〮지〯ᅀᅳ샨〮그〮리라〮訓훈〮은〮ᄀᆞᄅᆞ칠〮씨〮오〮民%
- 민ᄋᆞᆫ〮百ᄇᆡᆨ〮姓셔ᇰ〮이〮오〮音ᅙᅳᆷ은〮소리〮니〮訓훈〮民%
- 민正져ᇰ〮音ᅙᅳᆷ은〮百ᄇᆡᆨ〮姓셔ᇰ〮ᄀᆞᄅᆞ치〮시논〮正져ᇰ〮ᄒᆞᆫ소리〮라〮
+ 製졩〮ᄂᆞᆫ〮글〮지ᅀᅳᆯ〮씨〮니〮御ᅌᅥᆼ〮製졩〮ᄂᆞᆫ〮님〯금〮지〯ᅀᅳ샨〮그〮리라〮%
+ 訓훈〮은〮ᄀᆞᄅᆞ칠〮씨〮오〮民민ᄋᆞᆫ〮百ᄇᆡᆨ〮姓셔ᇰ〮이〮오〮音ᅙᅳᆷ은〮소리〮니〮%
+ 訓훈〮民민正져ᇰ〮音ᅙᅳᆷ은〮百ᄇᆡᆨ〮姓셔ᇰ〮ᄀᆞᄅᆞ치〮시논〮正져ᇰ〮ᄒᆞᆫ소리〮라〮
\par\medskip
\noindent\textbf{%
國귁〮之징語ᅌᅥᆼ〯音ᅙᅳᆷ이〮
@@ -280,8 +295,9 @@ fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있
\noindent\textbf{%
異잉〮乎ᅘᅩᆼ中듀ᇰ國귁〮ᄒᆞ〮야〮
}\par
- 異잉〮ᄂᆞᆫ〮다ᄅᆞᆯ씨라乎ᅘᅩᆼᄂᆞᆫ〮아〯모〮그ᅌᅦᄒᆞ〮논겨〮체ᄡᅳ〮는字ᄍᆞᆼ〮ㅣ라〮中듀ᇰ國귁〮ᄋᆞᆫ〮%
- 皇ᅘᅪᇰ帝뎽〮겨〯신나라〮히니〮우〮리〮나랏〮常쌰ᇰ談땀애〮江가ᇰ南남이〮라〮ᄒᆞ〮ᄂᆞ〮니라〮
+ 異잉〮ᄂᆞᆫ〮다ᄅᆞᆯ씨라乎ᅘᅩᆼᄂᆞᆫ〮아〯모〮그ᅌᅦᄒᆞ〮논겨〮체ᄡᅳ〮는字ᄍᆞᆼ〮ㅣ라〮%
+ 中듀ᇰ國귁〮ᄋᆞᆫ〮皇ᅘᅪᇰ帝뎽〮겨〯신나라〮히니〮우〮리〮나랏〮常쌰ᇰ談땀애〮%
+ 江가ᇰ南남이〮라〮ᄒᆞ〮ᄂᆞ〮니라〮
\par
中듀ᇰ國귁〮에〮달아〮
}
@@ -289,10 +305,10 @@ fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있
\begin{figure}
\fboxsep=1em
\fbox{\parbox{\dimexpr\linewidth-2.1em\relax}{\sffamily
- \parindent1em
- \hunmintxt
-}}
-\caption{옛한글 조판 보기}\label{fig:yethangul}
+ \parindent1em
+ \hunmintxt
+ }}
+ \caption{옛한글 조판 보기}\label{fig:yethangul}
\end{figure}
\begin{description}
@@ -366,13 +382,14 @@ fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있
\item[Protrusion] \pkgkwd*{Protrusion}%
특정 글자가 행 끝에 왔을 때 판면 바깥으로 끌어내는
- 기능이다. Lua\TeX은 기본값으로 온점 반점 등을 완전 글자내밀기 한다.
+ 기능이다. \luatex은 기본값으로 온점 반점 등을 완전 글자내밀기 한다.
|Protrusion|은 |Protrusion=default|와 같은 뜻이다.%
\footnote{%
플레인텍에서는 |protrusion=default|. }
자신만의 설정을 만들어 지정할 수 있다.%
\footnote{%
- default 설정을 고치는 방법은 이를테면 다음과 같다:\par
+ default 설정을 고치는 방법은 이를테면 다음과 같다
+ (이 매뉴얼의 소스 앞부분을 참고하라):\par
\leftskip=3em\noindent
\cs{directlua{ fonts.protrusions.setups.default[0x201C] = { 1, 0 } }} }
@@ -387,23 +404,21 @@ fontspec의 글꼴 옵션 외에 \luatexko가 따로 제공하는 것들이 있
\section{고문헌}\label{sec:classic}
\def\analectstext{%
-子曰:「學而時習之,不亦說乎?有朋自遠方來,不亦樂乎?人不知而不慍,
-不亦君子乎?」\par
-有子曰:「其爲人也孝弟,而好犯上者,鮮矣!不好犯上,而好作亂者,未之有也!
-君子務本,本立而道生;孝弟也者,其爲仁之本與?」\par
+子曰:「學而時習之,不亦說乎?有朋自遠方來,不亦樂乎?人不知而不慍,不亦君子乎?」\par
+有子曰:「其爲人也孝弟,而好犯上者,鮮矣!不好犯上,而好作亂者,未之有也!君子務本,本立而道生;孝弟也者,其爲仁之本與?」\par
子曰:「巧言令色,鮮矣仁!」\par
-曾子曰:「吾日三省吾身:爲人謀,而不忠乎?與朋友交,而不信乎?傳,
-不習乎?」\par
+曾子曰:「吾日三省吾身:爲人謀,而不忠乎?與朋友交,而不信乎?傳,不習乎?」\par
子曰:「道千乘之國,敬事而信,節用而愛人,使民以時。」\par
子曰:「弟子入則孝,出則弟;謹而信,汎愛衆;而親仁,行有餘力,則以學文。」
}
\begin{figure}
\centering
\fbox{\parbox{37em}{\typesetclassic\sffamily
- \addhangulfontfeature{CompressPunctuations}
- \analectstext
+ \analectstext
}}
-\caption{고문헌 조판 보기. typesetclassic 환경을 이용했다.}\label{fig:gomun}
+ \caption{고문헌 조판 보기. typesetclassic 환경을 이용했다.
+ 글꼴에 |CompressPunctuations| 옵션을 주었다.
+ }\label{fig:gomun}
\end{figure}
고문헌 조판을 위해 \pkgkwd{typesetclassic} 환경을 제공한다.%
@@ -441,8 +456,9 @@ v2.0부터는 고문헌 조판에서 한글^^b7한자와 영문자가 붙어 나
|vmtx| 정보를 가지고 있지 않은 글꼴은 세로쓰기에 적합치 않은 글꼴이다.
|otfinfo -t <파일>| 명령으로 글꼴에 들어있는 테이블 정보를 알 수 있다. }\,%
\footnote{%
- 폰트 옵션 |Renderer=OpenType| 등(플레인텍에서는 |mode=harf| 옵션)을 주고
- |luahblatex|으로 컴파일하여 Harfbuzz 모듈을 이용하려는 경우 세로쓰기가
+ 폰트 옵션 |Renderer=OpenType| 또는 |Renderer=HarfBuzz| 등
+ (플레인텍에서는 |mode=harf| 옵션)을 주고
+ 컴파일하여 Harfbuzz 모듈을 이용하려는 경우 세로쓰기가
현재로서는 지원되지 않는다. 세로쓰기를 하려면 이 옵션을 빼고 디폴트 값인
|Renderer=Node| (플레인텍에서는 |mode=node|)를 사용하라.}
세로쓰기에서 |CharRaise| 옵션의 효과에 대해서는 제\ref{sec:fontoption}절을
@@ -452,26 +468,28 @@ v2.0부터는 고문헌 조판에서 한글^^b7한자와 영문자가 붙어 나
기본으로 셋팅되어 있다. 일종의 고문헌 조판으로 보는 것이다.
\begin{figure}
-\framebox[\linewidth]{\begin{vertical}{19.6em}\sffamily
- \addhangulfontfeature{Renderer=Node, Vertical=Alternates, RawFeature=vertical}
- \linespread{1.5}\selectfont
- \hunmintxt
-\end{vertical}}
-\caption{세로쓰기의 예. 박스 높이 |20em|을 지시했다.}\label{fig:vertical}
+ \framebox[\linewidth]{
+ \begin{vertical}{20em}
+ \linespread{1.5}\sffamily \verticalhangulfont
+ \hunmintxt
+ \end{vertical}
+ }
+ \caption{세로쓰기의 예. 박스 높이 |20em|을 지시했다.}\label{fig:vertical}
\end{figure}
\begin{figure}
-\framebox[\linewidth]{\begin{vertical}{18.62em}\sffamily
- \addhangulfontfeature{Renderer=Node, Vertical=Alternates, RemoveClassicSpaces,
- InterCharStretch=1pt, CompressPunctuations, RawFeature=vertical}
- \linespread{1.5}\selectfont
- \parindent=-1em \leftskip=1em
- \analectstext
-\end{vertical}}
-\caption{세로쓰기의 다른 예. 박스 높이 |19em|을 지시했다.
- 글꼴옵션으로 |RemoveClassicSpaces|, |CompressPunctuations|와 더불어
- |InterCharStretch=1pt|를 추가했다. 공백이 없는 문서는 자간늘이기 값을
- 넉넉하게 주는 것이 좋다.}\label{fig:vertical3}
+ \framebox[\linewidth]{
+ \begin{vertical}{19em}
+ \linespread{1.5}\sffamily \verticalhangulfont
+ \parindent0pt \everypar{\hangindent1em \hangafter1 }
+ \analectstext
+ \end{vertical}
+ }
+ \caption{세로쓰기의 다른 예. 박스 높이 |19em|을 지시했다.
+ 글꼴에 |CompressPunctuations|와 더불어
+ |InterCharStretch=1pt|를 옵션으로 주었다. 공백이 없는 문서는 자간늘이기 값을
+ 넉넉하게 주는 것이 좋다.
+ }\label{fig:vertical3}
\end{figure}
문서의 일부를 세로쓰기하려면
@@ -494,29 +512,31 @@ v2.0부터는 고문헌 조판에서 한글^^b7한자와 영문자가 붙어 나
\footnote{폰트 지시는 |horizontal| 환경 안에서 행하는 것을 권장한다.}
\begin{figure}
-\framebox[\linewidth]{\begin{vertical}{16.66em}\sffamily
- \addhangulfontfeature{Renderer=Node, Vertical=Alternates, CharRaise=3.2pt,
- CompressPunctuations, CharacterWidth=Full, RawFeature=vertical}
- \parindent-1em\leftskip1em \linespread{1.5}\selectfont
- \spaceskip=.5em plus.25em minus.125em
- \noindent 님의 침묵(The Silent Beloved)
- \smallbreak
- \hfil\hfil 한 용 운\hfil
- \bigbreak
- 님은 갓슴니다 아아 사랑하는나의님은 갓슴니다\par
- 푸른산빗을깨치고 단풍나무숩을향하야난 적은길을 거러서 참어떨치고
- 갓슴니다\par
- 黃金의꽃가티 굿고빗나든 옛盟誓는 차듸찬띠끌이되야서 한숨의 微風에
- 나러갓슴니다\par
- 날카로은 첫〈키쓰〉의追憶은 나의運命의指針을 돌너노코 뒷거름처서 사러젓슴니다\par
- \hellipsis\par
- 아아 님은갓지마는 나는 님을보내지 아니하얏슴니다\par
- 제곡조를못이기는 사랑의노래는 님의沈默을 휩싸고돔니다\par
-\end{vertical}}
-\caption{세로쓰기의 또 다른 예. 박스 높이 |17em|을 지시했다.
- Noto Sans CJK 글꼴의 세로쓰기 공백은 원래 |1em|,
- 즉 전각크기로 매우 크기 때문에, 여기서는 \cs{spaceskip} 명령을 이용하여
- 반각 크기로 강제했다.}\label{fig:vertical2}
+ \framebox[\linewidth]{
+ \begin{vertical}{17em}
+ \linespread{1.5}\sffamily \verticalhangulfont
+ \parindent0pt \everypar{\hangindent1em \hangafter1 }
+ \spaceskip=.5em plus.25em minus.125em
+ \quad 님의 침묵(The Silent Beloved)
+ \smallbreak
+ \hfil\hfil 한 용 운\hfil
+ \bigbreak
+ 님은 갓슴니다 아아 사랑하는나의님은 갓슴니다\par
+ 푸른산빗을깨치고 단풍나무숩을향하야난 적은길을 거러서 참어떨치고
+ 갓슴니다\par
+ 黃金의꽃가티 굿고빗나든 옛盟誓는 차듸찬띠끌이되야서 한숨의 微風에
+ 나러갓슴니다\par
+ 날카로은 첫〈키쓰〉의追憶은 나의運命의指針을 돌너노코 뒷거름처서 사러젓슴니다\par
+ \hellipsis\par
+ 아아 님은갓지마는 나는 님을보내지 아니하얏슴니다\par
+ 제곡조를못이기는 사랑의노래는 님의沈默을 휩싸고돔니다\par
+ \end{vertical}
+ }
+ \caption{세로쓰기의 또 다른 예. 박스 높이 |17em|을 지시했다.
+ Noto Sans CJK 글꼴의 세로쓰기 공백은 원래 |1em|,
+ 즉 전각크기로 매우 크기 때문에, 여기서는 \cs{spaceskip} 명령을 이용하여
+ 반각 크기로 강제했다.
+ }\label{fig:vertical2}
\end{figure}
\section{드러냄표}\label{sec:dotemph}
diff --git a/macros/luatex/generic/luatexko/luatexko-normalize.lua b/macros/luatex/generic/luatexko/luatexko-normalize.lua
index 41e5d3498d..0b4553f18f 100644
--- a/macros/luatex/generic/luatexko/luatexko-normalize.lua
+++ b/macros/luatex/generic/luatexko/luatexko-normalize.lua
@@ -13,8 +13,8 @@
luatexbase.provides_module({
name = "luatexko-normalize",
- version = "2.6",
- date = "2020/02/17",
+ version = "2.7",
+ date = "2020/03/14",
author = "Dohyun Kim, Soojin Nam",
description = "Hangul normalization",
license = "LPPL v1.3+",
diff --git a/macros/luatex/generic/luatexko/luatexko-uhc2utf8.lua b/macros/luatex/generic/luatexko/luatexko-uhc2utf8.lua
index df71e43f9d..70b30b96e3 100644
--- a/macros/luatex/generic/luatexko/luatexko-uhc2utf8.lua
+++ b/macros/luatex/generic/luatexko/luatexko-uhc2utf8.lua
@@ -13,8 +13,8 @@
luatexbase.provides_module({
name = "luatexko-uhc2utf8",
- version = "2.6",
- date = "2020/02/17",
+ version = "2.7",
+ date = "2020/03/14",
author = "Dohyun Kim, Soojin Nam",
description = "UHC (CP949) input encoding",
license = "LPPL v1.3+",
diff --git a/macros/luatex/generic/luatexko/luatexko.lua b/macros/luatex/generic/luatexko/luatexko.lua
index 3f21e7c970..0720a4ecd9 100644
--- a/macros/luatex/generic/luatexko/luatexko.lua
+++ b/macros/luatex/generic/luatexko/luatexko.lua
@@ -13,8 +13,8 @@
luatexbase.provides_module {
name = 'luatexko',
- date = '2020/02/17',
- version = '2.6',
+ date = '2020/03/14',
+ version = '2.7',
description = 'typesetting Korean with LuaTeX',
author = 'Dohyun Kim, Soojin Nam',
license = 'LPPL v1.3+',
@@ -36,11 +36,9 @@ local insert_before = node.insert_before
local nodecopy = node.copy
local nodecount = node.count
local nodefree = node.free
-local nodeid = node.id
local nodenew = node.new
local noderemove = node.remove
local nodeslide = node.slide
-local nodesubtype = node.subtype
local nodewrite = node.write
local rangedimensions = node.rangedimensions
local setglue = node.setglue
@@ -83,19 +81,19 @@ local function warning (...)
return module_warning("luatexko", stringformat(...))
end
-local dirid = nodeid"dir"
-local discid = nodeid"disc"
-local glueid = nodeid"glue"
-local glyphid = nodeid"glyph"
-local hlistid = nodeid"hlist"
-local kernid = nodeid"kern"
-local mathid = nodeid"math"
-local penaltyid = nodeid"penalty"
-local ruleid = nodeid"rule"
-local vlistid = nodeid"vlist"
-local whatsitid = nodeid"whatsit"
-local literal_whatsit = nodesubtype"pdf_literal"
-local user_whatsit = nodesubtype"user_defined"
+local dirid = node.id"dir"
+local discid = node.id"disc"
+local glueid = node.id"glue"
+local glyphid = node.id"glyph"
+local hlistid = node.id"hlist"
+local kernid = node.id"kern"
+local mathid = node.id"math"
+local penaltyid = node.id"penalty"
+local ruleid = node.id"rule"
+local vlistid = node.id"vlist"
+local whatsitid = node.id"whatsit"
+local literal_whatsit = node.subtype"pdf_literal"
+local user_whatsit = node.subtype"user_defined"
local directmode = 2
local fontkern = 0
local userkern = 1
@@ -1125,10 +1123,8 @@ local josa_code = setmetatable({
end
end })
-local ignore_parens = false
-
-local function prevjosacode (n, parenlevel)
- local parenlevel, josacode = parenlevel or 0
+local function prevjosacode (n, parenlevel, ignore_parens)
+ local josacode
while n do
local id = n.id
if id == glyphid then
@@ -1144,7 +1140,7 @@ local function prevjosacode (n, parenlevel)
elseif id == hlistid or id == vlistid then
local list = n.list
if list then
- josacode, parenlevel = prevjosacode(nodeslide(list), parenlevel)
+ josacode, parenlevel = prevjosacode(nodeslide(list), parenlevel, ignore_parens)
if josacode then break end
end
end
@@ -1170,8 +1166,7 @@ local function process_josa (head)
end
local t = josa_table[cc]
if t then
- ignore_parens = autojosaattr > 0
- cc = t[prevjosacode(getprev(curr)) or 3]
+ cc = t[prevjosacode(getprev(curr), 0, autojosaattr > 0) or 3]
if cc then
curr.char = cc
else
@@ -1976,13 +1971,33 @@ local font_opt_procs = {
}
local font_opt_procs_single = {
- expansion = function()
+ expansion = function(fontdata)
+ if is_harf(fontdata) then -- for now, no support in harf mode
+ local val = option_in_font(fontdata, "expansion")
+ local setup = fonts.expansions.setups[val] or {}
+ fontdata.stretch = fontdata.stretch or (setup.stretch or 2)*10
+ fontdata.shrink = fontdata.shrink or (setup.shrink or 2)*10
+ fontdata.step = fontdata.step or (setup.step or .5)*10
+ end
if tex.adjustspacing == 0 then
texset("global", "adjustspacing", 2)
end
end,
protrusion = function(fontdata)
+ if is_harf(fontdata) then -- for now, no support in harf mode
+ local val = option_in_font(fontdata, "protrusion")
+ local setup = fonts.protrusions.setups[val] or {}
+ local quad = fontdata.parameters.quad
+ for i, v in pairs(setup) do
+ local chr = fontdata.characters[i]
+ if chr then
+ local wdq = chr.width/quad
+ chr.left_protruding = chr.left_protruding or wdq*v[1]*1000
+ chr.right_protruding = chr.right_protruding or wdq*v[2]*1000
+ end
+ end
+ end
if tex.protrudechars == 0 then
texset("global", "protrudechars", 2)
end
@@ -2043,17 +2058,17 @@ add_to_callback("luaotfload.patch_font_unsafe", process_patch_font,
local auxiliary_procs = {
dotemph = {
- hpack_filter = process_dotemph,
- vpack_filter = process_dotemph,
+ hpack_filter = process_dotemph,
+ post_linebreak_filter = process_dotemph,
},
uline = {
- hpack_filter = process_uline,
- vpack_filter = process_uline,
+ hpack_filter = process_uline,
+ post_linebreak_filter = process_uline,
},
ruby = {
- pre_linebreak_filter = process_ruby_pre_linebreak,
- hpack_filter = process_ruby_post_linebreak,
- vpack_filter = process_ruby_post_linebreak,
+ pre_linebreak_filter = process_ruby_pre_linebreak,
+ hpack_filter = process_ruby_post_linebreak,
+ post_linebreak_filter = process_ruby_post_linebreak,
},
autojosa = {
luatexko_hpack_first = process_josa,
@@ -2070,7 +2085,7 @@ local function activate (name)
local fun
if cbnam == "hpack_filter" then
fun = function(h, gc)
- if gc == "align_set" then
+ if gc == "hbox" or gc == "adjusted_hbox" or gc == "align_set" then
h = cbfun(h)
end
return h
@@ -2118,7 +2133,7 @@ local function deactivate_all (str)
luatexko.deactivated = {}
for _, name in ipairs{ "hpack_filter",
"pre_linebreak_filter",
- "vpack_filter",
+ "post_linebreak_filter",
"hyphenate",
"luaotfload.patch_font_unsafe", -- added for harf
"luaotfload.patch_font" } do
diff --git a/macros/luatex/generic/luatexko/luatexko.sty b/macros/luatex/generic/luatexko/luatexko.sty
index 61835450fb..dd25d17b77 100644
--- a/macros/luatex/generic/luatexko/luatexko.sty
+++ b/macros/luatex/generic/luatexko/luatexko.sty
@@ -14,7 +14,7 @@
\ifdefined\luatexkohangulfontattr \endinput\fi
\ifdefined\selectfont
\NeedsTeXFormat{LaTeX2e}[2020/02/02]
- \ProvidesPackage{luatexko}[2020/02/17 v2.6 typesetting Korean with LuaTeX]
+ \ProvidesPackage{luatexko}[2020/03/14 v2.7 typesetting Korean with LuaTeX]
\RequirePackage{luatexbase}
\RequirePackage{fontspec}[2020/02/03]
\else