[latex3-commits] [latex3/latex3] main: Retain breathing marks on first char. in uppercase Greek (closes #1228) (5b6d93912)
github at latex-project.org
github at latex-project.org
Mon Jun 12 10:17:01 CEST 2023
Repository : https://github.com/latex3/latex3
On branch : main
Link : https://github.com/latex3/latex3/commit/5b6d9391261afd3d69347e8a264c5f2eb072f5d5
>---------------------------------------------------------------
commit 5b6d9391261afd3d69347e8a264c5f2eb072f5d5
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Mon Jun 12 09:16:05 2023 +0100
Retain breathing marks on first char. in uppercase Greek (closes #1228)
>---------------------------------------------------------------
5b6d9391261afd3d69347e8a264c5f2eb072f5d5
l3kernel/CHANGELOG.md | 2 +
l3kernel/l3text-case.dtx | 194 +++++++++++++++++++++++++++++++-
l3kernel/testfiles/m3text002.luatex.tlg | 22 ++--
l3kernel/testfiles/m3text002.lvt | 4 +
l3kernel/testfiles/m3text002.ptex.tlg | 22 ++--
l3kernel/testfiles/m3text002.tlg | 22 ++--
l3kernel/testfiles/m3text002.uptex.tlg | 22 ++--
l3kernel/testfiles/m3text002.xetex.tlg | 22 ++--
8 files changed, 269 insertions(+), 41 deletions(-)
diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index d469598b6..a9887046e 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -10,6 +10,8 @@ this project uses date-based 'snapshot' version identifiers.
### Changed
- Exclude entries in `\l_text_case_exclude_arg_tl` from expansion in `\text_expand:n`
(latex3/latex2e\#904)
+- Retain breathing marks on first letter in a word when uppercasing Greek
+ (issue \#1228)
## [2023-06-05]
diff --git a/l3kernel/l3text-case.dtx b/l3kernel/l3text-case.dtx
index dd903f104..8012a7e5e 100644
--- a/l3kernel/l3text-case.dtx
+++ b/l3kernel/l3text-case.dtx
@@ -1587,7 +1587,7 @@
{ \@@_codepoint_compare_p:nNn {#3} = { "1F2A } }
}
{ \@@_change_case_boundary_upper_el:nnnw {#1} {#2} {#3} }
- { \@@_change_case_loop:nnw {#1} {#2} #3 }
+ { \@@_change_case_breather:nnn {#1} {#2} {#3} }
}
\cs_new:Npn \@@_change_case_boundary_upper_el:nnnw
#1#2#3#4 \q_@@_recursion_stop
@@ -1609,6 +1609,198 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \begin{macro}[EXP]{\@@_change_case_breather:nnn}
+% \begin{macro}[EXP]{\@@_change_case_breather:nnnn}
+% \begin{macro}[EXP]{\@@_change_case_breather:nnnnw}
+% \begin{macro}[EXP]{\@@_change_case_breather:nnnnnw}
+% \begin{macro}[EXP]{\@@_change_case_breather_aux:nnnnn}
+% \begin{macro}[EXP]{\@@_change_case_breather_aux:nnnnw}
+% \begin{macro}[EXP]{\@@_change_case_breather_aux:nnnnN}
+% \begin{macro}[EXP]{\@@_change_case_breather_dialytika:nnnnn}
+% \begin{macro}[EXP]{\@@_change_case_breather_preserve:nnnn}
+% \begin{macro}[EXP]{\@@_change_case_breather_preserve:n}
+% \begin{macro}[EXP]
+% {
+% \@@_change_case_breather_psili: ,
+% \@@_change_case_breather_dasia:
+% }
+% In Greek, breathing diacritics are normally dropped when uppercasing:
+% see the code for the general case. However, for the first grapheme
+% of a word, that's not the situation: see
+% \url{https://unicode-org.atlassian.net/browse/ICU-12845#icft=ICU-12845}.
+% Here, we retain the breather \emph{unless} the next codpoint takes
+% a \emph{dialytika}. We start by checking if the current codepoint is
+% in the Greek range, then decomposing.
+% \begin{macrocode}
+\cs_new:Npn \@@_change_case_breather:nnn #1#2#3
+ {
+ \@@_change_case_if_greek:nTF {#3}
+ {
+ \exp_args:Ne \@@_change_case_breather:nnnn
+ {
+ \codepoint_to_nfd:n
+ { \@@_codepoint_from_chars:Nw #3 }
+ }
+ {#1} {#2} {#3}
+ }
+ { \@@_change_case_loop:nnw {#1} {#2} #3 }
+ }
+\cs_new:Npn \@@_change_case_breather:nnnn #1#2#3#4
+ {
+ \@@_codepoint_process:nN
+ { \@@_change_case_breather:nnnnw {#2} {#3} {#4} }
+ #1 \q_mark
+ }
+% \end{macrocode}
+% Normal form decomposition will always give between one and three
+% codepoints. Luckily, the two breathing marks (\emph{psili} and
+% \emph{dasia}) will be in a predictable position: last. So we can
+% quickly establish first that there was a change on decomposition,
+% and second if the final resulting codepoint is one of the two we
+% care about.
+% \begin{macrocode}
+\cs_new:Npn \@@_change_case_breather:nnnnw #1#2#3#4#5 \q_mark
+ {
+ \tl_if_blank:nTF {#5}
+ { \@@_change_case_loop:nnw {#1} {#2} #3 }
+ {
+ \@@_codepoint_process:nN
+ { \@@_change_case_breather:nnnnnw {#1} {#2} {#3} {#4} }
+ #5 \q_mark
+ }
+ }
+\cs_new:Npn \@@_change_case_breather:nnnnnw #1#2#3#4#5#6 \q_mark
+ {
+ \tl_if_blank:nTF {#6}
+ {
+ \@@_change_case_breather_aux:nnnnn
+ {#1} {#2} {#3} {#4} {#5}
+ }
+ {
+ \@@_change_case_breather_aux:nnnnn
+ {#1} {#2} {#3} {#4} {#6}
+ }
+ }
+\cs_new:Npn \@@_change_case_breather_aux:nnnnn #1#2#3#4#5
+ {
+ \bool_lazy_or:nnTF
+ { \@@_codepoint_compare_p:nNn {#5} = { "0313 } }
+ { \@@_codepoint_compare_p:nNn {#5} = { "0314 } }
+ { \@@_change_case_breather_aux:nnnnw {#1} {#2} {#4} {#5} }
+ { \@@_change_case_loop:nnw {#1} {#2} #3 }
+ }
+% \end{macrocode}
+% Now the lookahead can be fired: check the next codepoint and assess
+% whether it takes a \emph{dialytika}. The code paths then split: either
+% retain the breathing mark or generate the \emph{dialytika}: the
+% latter is code shared with the general mechanism.
+% \begin{macrocode}
+\cs_new:Npn \@@_change_case_breather_aux:nnnnw #1#2#3#4#5
+ \q_@@_recursion_stop
+ {
+ \tl_if_head_is_N_type:nTF {#5}
+ { \@@_change_case_breather_aux:nnnnN }
+ { \@@_change_case_breather_preserve:nnnn }
+ {#1} {#2} {#3} {#4} #5 \q_@@_recursion_stop
+ }
+\cs_new:Npn \@@_change_case_breather_aux:nnnnN #1#2#3#4#5
+ {
+ \@@_codepoint_process:nN
+ { \@@_change_case_breather_dialytika:nnnnn {#1} {#2} {#3} {#4} } #5
+ }
+\cs_new:Npn \@@_change_case_breather_dialytika:nnnnn #1#2#3#4#5
+ {
+ \@@_change_case_if_takes_dialytika:nTF {#5}
+ {
+ \@@_change_case_store:e
+ { \@@_change_case_codepoint:nn { upper } {#3} }
+ \@@_change_case_upper_el_dialytika:n {#5}
+ \@@_change_case_loop:nnw {#1} {#2}
+ }
+ {
+ \@@_change_case_breather_preserve:nnnn {#1} {#2} {#3} {#4}
+ #5
+ }
+ }
+% \end{macrocode}
+% Finally, generate the correct output codepoint to retain the
+% breather: there are two of those, and a limited number of
+% codepoints they apply two, so we simply list out all of the
+% cases by hand. There isn't a pre-composed uppercase upsilon with
+% \emph{psili}: at present, we therefore still drop that particular
+% diacritic (it's not clear why the codepoint is absent but suggests
+% there is no reason to support it).
+% \begin{macrocode}
+\cs_new:Npn \@@_change_case_breather_preserve:nnnn #1#2#3#4
+ {
+ \@@_change_case_store:e
+ {
+ \exp_args:Ne \@@_change_case_breather_preserve:n
+ {
+ \@@_codepoint_compare:nNnTF {#4} = { "0313 }
+ { \@@_change_case_breather_psili:n }
+ { \@@_change_case_breather_dasia:n }
+ {#3}
+ }
+ }
+ \@@_change_case_loop:nnw {#1} {#2}
+ }
+\cs_new:Npn \@@_change_case_breather_preserve:n #1
+ { \codepoint_generate:nn {#1} { \char_value_catcode:n {#1} } }
+\cs_new:Npn \@@_change_case_breather_psili:n #1
+ {
+ \int_case:nn { \@@_codepoint_from_chars:Nw #1 }
+ {
+ { "0391 } { "1F08 }
+ { "03B1 } { "1F08 }
+ { "0395 } { "1F18 }
+ { "03B5 } { "1F18 }
+ { "0397 } { "1F28 }
+ { "03B7 } { "1F28 }
+ { "0399 } { "1F38 }
+ { "03B9 } { "1F38 }
+ { "039F } { "1F48 }
+ { "03BF } { "1F48 }
+ { "03A5 } { "03A9 }
+ { "03C5 } { "03A9 }
+ { "03A9 } { "1F68 }
+ { "03C9 } { "1F68 }
+ }
+ }
+\cs_new:Npn \@@_change_case_breather_dasia:n #1
+ {
+ \int_case:nn { \@@_codepoint_from_chars:Nw #1 }
+ {
+ { "0391 } { "1F09 }
+ { "03B1 } { "1F09 }
+ { "0395 } { "1F19 }
+ { "03B5 } { "1F19 }
+ { "0397 } { "1F29 }
+ { "03B7 } { "1F29 }
+ { "0399 } { "1F39 }
+ { "03B9 } { "1F39 }
+ { "039F } { "1F49 }
+ { "03BF } { "1F49 }
+ { "03A5 } { "1F59 }
+ { "03C5 } { "1F59 }
+ { "03A9 } { "1F69 }
+ { "03C9 } { "1F69 }
+ { "03A1 } { "1FEC }
+ { "03C1 } { "1FEC }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
% \begin{macro}[EXP]{\@@_change_case_title_el:nnnn}
% Titlecasing retains accents, but to prevent the uppercasing code
% from kicking in, there has to be an explicit function here.
diff --git a/l3kernel/testfiles/m3text002.luatex.tlg b/l3kernel/testfiles/m3text002.luatex.tlg
index 9a830d284..856b4e810 100644
--- a/l3kernel/testfiles/m3text002.luatex.tlg
+++ b/l3kernel/testfiles/m3text002.luatex.tlg
@@ -180,7 +180,7 @@ TEST 17: Greek
ΝΟΜΙΚΟΎ Ή ΔΙΕΘΝΟΎΣ
ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ
ἘΠΕΙΔῊ Ἡ ἈΝΑΓΝΏΡΙΣΗ
-ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ
+ἘΠΕΙΔΗ Ἡ ἈΝΑΓΝΩΡΙΣΗ
ΝΟΜΙΚΟΥ͂ Ἢ ΔΙΕΘΝΟΥ͂Σ
ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ
ΝΈΟ, ΔΗΜΙΟΥΡΓΊΑ
@@ -202,19 +202,19 @@ TEST 17: Greek
ῌ
ΗΙ
ἈἉἊἋἌἍἎἏ
-ΑΑΑΑΑΑΑΑ
+ἈΑΑΑΑΑΑΑ
ἘἙἚἛἜἝ
-ΕΕΕΕΕΕ
+ἘΕΕΕΕΕ
ἨἩἪἫἬἭἮἯ
-ΗΗΗΗΗΗΗΗ
+ἨΗΗΗΗΗΗΗ
ἸἹἺἻἼἽἾἿ
-ΙΙΙΙΙΙΙΙ
+ἸΙΙΙΙΙΙΙ
ὈὉὊὋὌὍ
-ΟΟΟΟΟΟ
+ὈΟΟΟΟΟ
Υ̓ὙΥ̓̀ὛΥ̓́ὝΥ̓͂Ὗ
-ΥΥΥΥΥΥΥΥ
+ΩΥΥΥΥΥΥΥ
ὨὩὪὫὬὭὮὯ
-ΩΩΩΩΩΩΩΩ
+ὨΩΩΩΩΩΩΩ
ᾼᾼᾼᾼᾼᾼᾼᾼ
ΑΙΑΙΑΙΑΙΑΙΑΙΑΙΑΙ
ῌῌῌῌῌῌῌῌ
@@ -229,6 +229,12 @@ TEST 17: Greek
ͺ῀`^^b4῾᾽᾿῍῎῝῞῟῏῭^^a8῁
;
;
+ΠΎΡ̓ῬΟΣ
+ΠΥΡΡΟΣ
+ῬΌΔΟΝ
+ῬΟΔΟΝ
+ΠΆΤΕΡ ἩΜΩ͂Ν Ὁ ἘΝ ΤΟΙ͂Σ ΟΥ̓ΡΑΝΟΙ͂Σ
+ΠΑΤΕΡ ἩΜΩΝ Ὁ ἘΝ ΤΟΙΣ ΟΥΡΑΝΟΙΣ
============================================================
============================================================
TEST 18: Turkish/Azeri
diff --git a/l3kernel/testfiles/m3text002.lvt b/l3kernel/testfiles/m3text002.lvt
index 1d513d8b7..8304902ff 100644
--- a/l3kernel/testfiles/m3text002.lvt
+++ b/l3kernel/testfiles/m3text002.lvt
@@ -224,6 +224,10 @@
\greektest:n { Το~ένα~Ή~το~άλλο } \NEWLINE
\greektest:n { ͺ ῀ ` ´ ῾ ᾽ ᾿ ῍ ῎ ῝ ῞ ῟ ῏ ῭ ΅ ῁ } \NEWLINE
\greektest:n { ; } \NEWLINE
+ % Taken from https://unicode-org.atlassian.net/browse/ICU-12845#icft=ICU-12845
+ \greektest:n { Πύῤῥος } \NEWLINE
+ \greektest:n { ῥόδον } \NEWLINE
+ \greektest:n { Πάτερ~ἡμῶν~ὁ~ἐν~τοῖς~οὐρανοῖς } \NEWLINE
}
\TESTEXP { Turkish/Azeri }
diff --git a/l3kernel/testfiles/m3text002.ptex.tlg b/l3kernel/testfiles/m3text002.ptex.tlg
index b9bdd227d..b15553f98 100644
--- a/l3kernel/testfiles/m3text002.ptex.tlg
+++ b/l3kernel/testfiles/m3text002.ptex.tlg
@@ -180,7 +180,7 @@ TEST 17: Greek
νομικο^^ce^^8e ^^ce^^89 διεθνο^^ce^^8e^^ce^^a3
νομικο^^ce^^a5 ^^ce^^89 διεθνο^^ce^^a5^^ce^^a3
^^e1^^bc^^98πειδ^^e1^^bf^^8a ^^e1^^bc^^a9 ^^e1^^bc^^88ναγν^^ce^^8fριση
-^^ce^^95πειδ^^ce^^97 ^^ce^^97 ^^ce^^91ναγν^^ce^^a9ριση
+^^e1^^bc^^98πειδ^^ce^^97 ^^e1^^bc^^a9 ^^e1^^bc^^88ναγν^^ce^^a9ριση
νομικο^^ce^^a5^^cd^^82 ^^e1^^bc^^aa διεθνο^^ce^^a5^^cd^^82^^ce^^a3
νομικο^^ce^^a5 ^^ce^^89 διεθνο^^ce^^a5^^ce^^a3
Ν^^ce^^88ο, Δημιουργ^^ce^^8aα
@@ -202,19 +202,19 @@ TEST 17: Greek
^^e1^^bf^^8c
^^ce^^97^^ce^^99
^^e1^^bc^^88^^e1^^bc^^89^^e1^^bc^^8a^^e1^^bc^^8b^^e1^^bc^^8c^^e1^^bc^^8d^^e1^^bc^^8e^^e1^^bc^^8f
-^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
+^^e1^^bc^^88^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
^^e1^^bc^^98^^e1^^bc^^99^^e1^^bc^^9a^^e1^^bc^^9b^^e1^^bc^^9c^^e1^^bc^^9d
-^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
+^^e1^^bc^^98^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
^^e1^^bc^^a8^^e1^^bc^^a9^^e1^^bc^^aa^^e1^^bc^^ab^^e1^^bc^^ac^^e1^^bc^^ad^^e1^^bc^^ae^^e1^^bc^^af
-^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
+^^e1^^bc^^a8^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
^^e1^^bc^^b8^^e1^^bc^^b9^^e1^^bc^^ba^^e1^^bc^^bb^^e1^^bc^^bc^^e1^^bc^^bd^^e1^^bc^^be^^e1^^bc^^bf
-^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
+^^e1^^bc^^b8^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
^^e1^^bd^^88^^e1^^bd^^89^^e1^^bd^^8a^^e1^^bd^^8b^^e1^^bd^^8c^^e1^^bd^^8d
-^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
+^^e1^^bd^^88^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
^^ce^^a5^^cc^^93^^e1^^bd^^99^^ce^^a5^^cc^^93^^cc^^80^^e1^^bd^^9b^^ce^^a5^^cc^^93^^cc^^81^^e1^^bd^^9d^^ce^^a5^^cc^^93^^cd^^82^^e1^^bd^^9f
-^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
+^^ce^^a9^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
^^e1^^bd^^a8^^e1^^bd^^a9^^e1^^bd^^aa^^e1^^bd^^ab^^e1^^bd^^ac^^e1^^bd^^ad^^e1^^bd^^ae^^e1^^bd^^af
-^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
+^^e1^^bd^^a8^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc
^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99
^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c
@@ -229,6 +229,12 @@ TEST 17: Greek
^^cd^^ba^^e1^^bf^^80`^^b4^^e1^^bf^^be^^e1^^be^^bd^^e1^^be^^bf^^e1^^bf^^8d^^e1^^bf^^8e^^e1^^bf^^9d^^e1^^bf^^9e^^e1^^bf^^9f^^e1^^bf^^8f^^e1^^bf^^ad^^c2^^a8^^e1^^bf^^81
^^cd^^be
^^cd^^be
+Π^^ce^^8e^^ce^^a1^^cc^^93^^e1^^bf^^acο^^ce^^a3
+Π^^ce^^a5^^ce^^a1^^ce^^a1ο^^ce^^a3
+^^e1^^bf^^ac^^ce^^8cδον
+^^e1^^bf^^ac^^ce^^9fδον
+Π^^ce^^86τερ ^^e1^^bc^^a9μ^^ce^^a9^^cd^^82ν ^^e1^^bd^^89 ^^e1^^bc^^98ν το^^ce^^99^^cd^^82^^ce^^a3 ο^^ce^^a5^^cc^^93ρανο^^ce^^99^^cd^^82^^ce^^a3
+Π^^ce^^91τερ ^^e1^^bc^^a9μ^^ce^^a9ν ^^e1^^bd^^89 ^^e1^^bc^^98ν το^^ce^^99^^ce^^a3 ο^^ce^^a5ρανο^^ce^^99^^ce^^a3
============================================================
============================================================
TEST 18: Turkish/Azeri
diff --git a/l3kernel/testfiles/m3text002.tlg b/l3kernel/testfiles/m3text002.tlg
index 850df5226..801a02f40 100644
--- a/l3kernel/testfiles/m3text002.tlg
+++ b/l3kernel/testfiles/m3text002.tlg
@@ -180,7 +180,7 @@ TEST 17: Greek
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^8e ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^8e^^ce^^a3
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5 ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^ce^^a3
^^e1^^bc^^98^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^e1^^bf^^8a ^^e1^^bc^^a9 ^^e1^^bc^^88^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^8f^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
-^^ce^^95^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^97 ^^ce^^97 ^^ce^^91^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^a9^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
+^^e1^^bc^^98^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^97 ^^e1^^bc^^a9 ^^e1^^bc^^88^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^a9^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5^^cd^^82 ^^e1^^bc^^aa ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^cd^^82^^ce^^a3
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5 ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^ce^^a3
^^ce^^9d^^ce^^88^^ce^^9f, ^^ce^^94^^ce^^97^^ce^^9c^^ce^^99^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^93^^ce^^8a^^ce^^91
@@ -202,19 +202,19 @@ TEST 17: Greek
^^e1^^bf^^8c
^^ce^^97^^ce^^99
^^e1^^bc^^88^^e1^^bc^^89^^e1^^bc^^8a^^e1^^bc^^8b^^e1^^bc^^8c^^e1^^bc^^8d^^e1^^bc^^8e^^e1^^bc^^8f
-^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
+^^e1^^bc^^88^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
^^e1^^bc^^98^^e1^^bc^^99^^e1^^bc^^9a^^e1^^bc^^9b^^e1^^bc^^9c^^e1^^bc^^9d
-^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
+^^e1^^bc^^98^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
^^e1^^bc^^a8^^e1^^bc^^a9^^e1^^bc^^aa^^e1^^bc^^ab^^e1^^bc^^ac^^e1^^bc^^ad^^e1^^bc^^ae^^e1^^bc^^af
-^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
+^^e1^^bc^^a8^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
^^e1^^bc^^b8^^e1^^bc^^b9^^e1^^bc^^ba^^e1^^bc^^bb^^e1^^bc^^bc^^e1^^bc^^bd^^e1^^bc^^be^^e1^^bc^^bf
-^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
+^^e1^^bc^^b8^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
^^e1^^bd^^88^^e1^^bd^^89^^e1^^bd^^8a^^e1^^bd^^8b^^e1^^bd^^8c^^e1^^bd^^8d
-^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
+^^e1^^bd^^88^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
^^ce^^a5^^cc^^93^^e1^^bd^^99^^ce^^a5^^cc^^93^^cc^^80^^e1^^bd^^9b^^ce^^a5^^cc^^93^^cc^^81^^e1^^bd^^9d^^ce^^a5^^cc^^93^^cd^^82^^e1^^bd^^9f
-^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
+^^ce^^a9^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
^^e1^^bd^^a8^^e1^^bd^^a9^^e1^^bd^^aa^^e1^^bd^^ab^^e1^^bd^^ac^^e1^^bd^^ad^^e1^^bd^^ae^^e1^^bd^^af
-^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
+^^e1^^bd^^a8^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc
^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99
^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c
@@ -229,6 +229,12 @@ TEST 17: Greek
^^cd^^ba^^e1^^bf^^80`^^c2^^b4^^e1^^bf^^be^^e1^^be^^bd^^e1^^be^^bf^^e1^^bf^^8d^^e1^^bf^^8e^^e1^^bf^^9d^^e1^^bf^^9e^^e1^^bf^^9f^^e1^^bf^^8f^^e1^^bf^^ad^^c2^^a8^^e1^^bf^^81
^^cd^^be
^^cd^^be
+^^ce^^a0^^ce^^8e^^ce^^a1^^cc^^93^^e1^^bf^^ac^^ce^^9f^^ce^^a3
+^^ce^^a0^^ce^^a5^^ce^^a1^^ce^^a1^^ce^^9f^^ce^^a3
+^^e1^^bf^^ac^^ce^^8c^^ce^^94^^ce^^9f^^ce^^9d
+^^e1^^bf^^ac^^ce^^9f^^ce^^94^^ce^^9f^^ce^^9d
+^^ce^^a0^^ce^^86^^ce^^a4^^ce^^95^^ce^^a1 ^^e1^^bc^^a9^^ce^^9c^^ce^^a9^^cd^^82^^ce^^9d ^^e1^^bd^^89 ^^e1^^bc^^98^^ce^^9d ^^ce^^a4^^ce^^9f^^ce^^99^^cd^^82^^ce^^a3 ^^ce^^9f^^ce^^a5^^cc^^93^^ce^^a1^^ce^^91^^ce^^9d^^ce^^9f^^ce^^99^^cd^^82^^ce^^a3
+^^ce^^a0^^ce^^91^^ce^^a4^^ce^^95^^ce^^a1 ^^e1^^bc^^a9^^ce^^9c^^ce^^a9^^ce^^9d ^^e1^^bd^^89 ^^e1^^bc^^98^^ce^^9d ^^ce^^a4^^ce^^9f^^ce^^99^^ce^^a3 ^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^91^^ce^^9d^^ce^^9f^^ce^^99^^ce^^a3
============================================================
============================================================
TEST 18: Turkish/Azeri
diff --git a/l3kernel/testfiles/m3text002.uptex.tlg b/l3kernel/testfiles/m3text002.uptex.tlg
index 25f0bb600..2e46c031d 100644
--- a/l3kernel/testfiles/m3text002.uptex.tlg
+++ b/l3kernel/testfiles/m3text002.uptex.tlg
@@ -180,7 +180,7 @@ TEST 17: Greek
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^8e ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^8e^^ce^^a3
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5 ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^ce^^a3
Ἐ^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^e1^^bf^^8a ^^e1^^bc^^a9 ^^e1^^bc^^88^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^8f^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
-^^ce^^95^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^97 ^^ce^^97 ^^ce^^91^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^a9^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
+^^e1^^bc^^98^^ce^^a0^^ce^^95^^ce^^99^^ce^^94^^ce^^97 ^^e1^^bc^^a9 ^^e1^^bc^^88^^ce^^9d^^ce^^91^^ce^^93^^ce^^9d^^ce^^a9^^ce^^a1^^ce^^99^^ce^^a3^^ce^^97
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5^^cd^^82 ^^e1^^bc^^aa ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^cd^^82^^ce^^a3
^^ce^^9d^^ce^^9f^^ce^^9c^^ce^^99^^ce^^9a^^ce^^9f^^ce^^a5 ^^ce^^89 ^^ce^^94^^ce^^99^^ce^^95^^ce^^98^^ce^^9d^^ce^^9f^^ce^^a5^^ce^^a3
Ν^^ce^^88^^ce^^9f, Δ^^ce^^97^^ce^^9c^^ce^^99^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^93^^ce^^8a^^ce^^91
@@ -202,19 +202,19 @@ TEST 17: Greek
^^e1^^bf^^8c
^^ce^^97^^ce^^99
^^e1^^bc^^88^^e1^^bc^^89^^e1^^bc^^8a^^e1^^bc^^8b^^e1^^bc^^8c^^e1^^bc^^8d^^e1^^bc^^8e^^e1^^bc^^8f
-^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
+^^e1^^bc^^88^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91^^ce^^91
^^e1^^bc^^98^^e1^^bc^^99^^e1^^bc^^9a^^e1^^bc^^9b^^e1^^bc^^9c^^e1^^bc^^9d
-^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
+^^e1^^bc^^98^^ce^^95^^ce^^95^^ce^^95^^ce^^95^^ce^^95
^^e1^^bc^^a8^^e1^^bc^^a9^^e1^^bc^^aa^^e1^^bc^^ab^^e1^^bc^^ac^^e1^^bc^^ad^^e1^^bc^^ae^^e1^^bc^^af
-^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
+^^e1^^bc^^a8^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97^^ce^^97
^^e1^^bc^^b8^^e1^^bc^^b9^^e1^^bc^^ba^^e1^^bc^^bb^^e1^^bc^^bc^^e1^^bc^^bd^^e1^^bc^^be^^e1^^bc^^bf
-^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
+^^e1^^bc^^b8^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99^^ce^^99
^^e1^^bd^^88^^e1^^bd^^89^^e1^^bd^^8a^^e1^^bd^^8b^^e1^^bd^^8c^^e1^^bd^^8d
-^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
+^^e1^^bd^^88^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f^^ce^^9f
^^ce^^a5^^cc^^93^^e1^^bd^^99^^ce^^a5^^cc^^93^^cc^^80^^e1^^bd^^9b^^ce^^a5^^cc^^93^^cc^^81^^e1^^bd^^9d^^ce^^a5^^cc^^93^^cd^^82^^e1^^bd^^9f
-^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
+^^ce^^a9^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5^^ce^^a5
^^e1^^bd^^a8^^e1^^bd^^a9^^e1^^bd^^aa^^e1^^bd^^ab^^e1^^bd^^ac^^e1^^bd^^ad^^e1^^bd^^ae^^e1^^bd^^af
-^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
+^^e1^^bd^^a8^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9^^ce^^a9
^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc
^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99^^ce^^91^^ce^^99
^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c^^e1^^bf^^8c
@@ -229,6 +229,12 @@ TEST 17: Greek
ͺ῀`^^b4῾᾽᾿῍῎῝῞῟῏῭^^c2^^a8῁
;
;
+Π^^ce^^8e^^ce^^a1^^cc^^93^^e1^^bf^^ac^^ce^^9f^^ce^^a3
+^^ce^^a0^^ce^^a5^^ce^^a1^^ce^^a1^^ce^^9f^^ce^^a3
+^^e1^^bf^^ac^^ce^^8c^^ce^^94^^ce^^9f^^ce^^9d
+^^e1^^bf^^ac^^ce^^9f^^ce^^94^^ce^^9f^^ce^^9d
+Π^^ce^^86^^ce^^a4^^ce^^95^^ce^^a1 ^^e1^^bc^^a9^^ce^^9c^^ce^^a9^^cd^^82^^ce^^9d ^^e1^^bd^^89 ^^e1^^bc^^98^^ce^^9d ^^ce^^a4^^ce^^9f^^ce^^99^^cd^^82^^ce^^a3 ^^ce^^9f^^ce^^a5^^cc^^93^^ce^^a1^^ce^^91^^ce^^9d^^ce^^9f^^ce^^99^^cd^^82^^ce^^a3
+^^ce^^a0^^ce^^91^^ce^^a4^^ce^^95^^ce^^a1 ^^e1^^bc^^a9^^ce^^9c^^ce^^a9^^ce^^9d ^^e1^^bd^^89 ^^e1^^bc^^98^^ce^^9d ^^ce^^a4^^ce^^9f^^ce^^99^^ce^^a3 ^^ce^^9f^^ce^^a5^^ce^^a1^^ce^^91^^ce^^9d^^ce^^9f^^ce^^99^^ce^^a3
============================================================
============================================================
TEST 18: Turkish/Azeri
diff --git a/l3kernel/testfiles/m3text002.xetex.tlg b/l3kernel/testfiles/m3text002.xetex.tlg
index 9a830d284..856b4e810 100644
--- a/l3kernel/testfiles/m3text002.xetex.tlg
+++ b/l3kernel/testfiles/m3text002.xetex.tlg
@@ -180,7 +180,7 @@ TEST 17: Greek
ΝΟΜΙΚΟΎ Ή ΔΙΕΘΝΟΎΣ
ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ
ἘΠΕΙΔῊ Ἡ ἈΝΑΓΝΏΡΙΣΗ
-ΕΠΕΙΔΗ Η ΑΝΑΓΝΩΡΙΣΗ
+ἘΠΕΙΔΗ Ἡ ἈΝΑΓΝΩΡΙΣΗ
ΝΟΜΙΚΟΥ͂ Ἢ ΔΙΕΘΝΟΥ͂Σ
ΝΟΜΙΚΟΥ Ή ΔΙΕΘΝΟΥΣ
ΝΈΟ, ΔΗΜΙΟΥΡΓΊΑ
@@ -202,19 +202,19 @@ TEST 17: Greek
ῌ
ΗΙ
ἈἉἊἋἌἍἎἏ
-ΑΑΑΑΑΑΑΑ
+ἈΑΑΑΑΑΑΑ
ἘἙἚἛἜἝ
-ΕΕΕΕΕΕ
+ἘΕΕΕΕΕ
ἨἩἪἫἬἭἮἯ
-ΗΗΗΗΗΗΗΗ
+ἨΗΗΗΗΗΗΗ
ἸἹἺἻἼἽἾἿ
-ΙΙΙΙΙΙΙΙ
+ἸΙΙΙΙΙΙΙ
ὈὉὊὋὌὍ
-ΟΟΟΟΟΟ
+ὈΟΟΟΟΟ
Υ̓ὙΥ̓̀ὛΥ̓́ὝΥ̓͂Ὗ
-ΥΥΥΥΥΥΥΥ
+ΩΥΥΥΥΥΥΥ
ὨὩὪὫὬὭὮὯ
-ΩΩΩΩΩΩΩΩ
+ὨΩΩΩΩΩΩΩ
ᾼᾼᾼᾼᾼᾼᾼᾼ
ΑΙΑΙΑΙΑΙΑΙΑΙΑΙΑΙ
ῌῌῌῌῌῌῌῌ
@@ -229,6 +229,12 @@ TEST 17: Greek
ͺ῀`^^b4῾᾽᾿῍῎῝῞῟῏῭^^a8῁
;
;
+ΠΎΡ̓ῬΟΣ
+ΠΥΡΡΟΣ
+ῬΌΔΟΝ
+ῬΟΔΟΝ
+ΠΆΤΕΡ ἩΜΩ͂Ν Ὁ ἘΝ ΤΟΙ͂Σ ΟΥ̓ΡΑΝΟΙ͂Σ
+ΠΑΤΕΡ ἩΜΩΝ Ὁ ἘΝ ΤΟΙΣ ΟΥΡΑΝΟΙΣ
============================================================
============================================================
TEST 18: Turkish/Azeri
More information about the latex3-commits
mailing list.