Skip to content

Commit

Permalink
Uppercasing Greek: correct el-x-iota output
Browse files Browse the repository at this point in the history
  • Loading branch information
josephwright committed Feb 2, 2023
1 parent 75f0ce8 commit d413122
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 39 deletions.
100 changes: 67 additions & 33 deletions l3kernel/l3text-case.dtx
Expand Up @@ -861,8 +861,6 @@
% \@@_change_case_upper_el_aux:nnnn ,
% \@@_change_case_upper_el-x-iota:nnnn
% }
% \begin{macro}[EXP]
% {\@@_change_case_upper_el:n, \@@_change_case_upper_el-x-iota:n}
% \begin{macro}[EXP]{\@@_change_case_upper_el:nnn}
% \begin{macro}[EXP]{\@@_change_case_upper_el:nnnw}
% \begin{macro}[EXP]
Expand All @@ -873,8 +871,14 @@
% \begin{macro}[EXP]{\@@_change_case_upper_el_dialytika:nnn}
% \begin{macro}[EXP]{\@@_change_case_upper_el_dialytika:n}
% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnnw}
% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnN}
% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnn}
% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnnN}
% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnnn}
% \begin{macro}[EXP]
% {
% \@@_change_case_upper_el_ypogegrammeni:n ,
% \@@_change_case_upper_el-x-iota_ypogegrammeni:n ,
% \@@_change_case_upper_el_ypogegrammeni_aux:n
% }
% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnw}
% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnN}
% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnn}
Expand Down Expand Up @@ -915,7 +919,8 @@
{
\@@_change_case_store:e
{
\use:c { @@_change_case_upper_ #3 :n } {#4}
\codepoint_generate:nn { "0399 }
{ \char_value_catcode:n { "0399 } }
}
\@@_change_case_loop:nnw {#2} {#3}
}
Expand All @@ -924,13 +929,6 @@
}
\cs_new_eq:cN { @@_change_case_upper_el-x-iota:nnnn }
\@@_change_case_upper_el:nnnn
\cs_new:Npn \@@_change_case_upper_el:n #1
{
\codepoint_generate:nn { "0399 }
{ \char_value_catcode:n { "0399 } }
}
\cs_new:cpn { @@_change_case_upper_el-x-iota:n } #1
{ \exp_not:n {#1} }
\cs_new:Npn \@@_change_case_upper_el:nnn #1#2#3
{
\@@_codepoint_process:nN
Expand Down Expand Up @@ -1033,19 +1031,19 @@
{ \@@_change_case_upper_el_hiatus:nnnw {#2} {#3} {#1} }
{
\@@_change_case_if_greek_diacritic:nTF {#4}
{
\@@_change_case_store:e
{ \@@_change_case_codepoint:nn { upper } {#1} }
\@@_change_case_upper_el_gobble:nnw {#2} {#3}
}
{ \@@_change_case_upper_el:nnn {#1} {#2} {#3} }
{
\@@_codepoint_compare:nNnTF {#4} = { "0345 }
{ \@@_change_case_store:e { [XXX] } }
{
\@@_change_case_store:e
{ \use:c { @@_change_case_upper_ #3 _ypogegrammeni:n } {#1} }
\@@_change_case_loop:nnw {#2} {#3}
}
{
\@@_change_case_store:e
{ \@@_change_case_codepoint:nn { upper } {#1} }
\@@_change_case_loop:nnw {#2} {#3} #4
}
\@@_change_case_loop:nnw {#2} {#3} #4
}
}
}
Expand Down Expand Up @@ -1089,32 +1087,65 @@
\cs_new:Npn \@@_change_case_upper_el_hiatus:nnnw
#1#2#3#4 \q_@@_recursion_stop
{
\@@_change_case_store:e
{ \@@_change_case_codepoint:nn { upper } {#3} }
\tl_if_head_is_N_type:nTF {#4}
{ \@@_change_case_upper_el_hiatus:nnN }
{ \@@_change_case_loop:nnw }
{ \@@_change_case_upper_el_hiatus:nnnN {#3} }
{
\@@_change_case_store:e
{ \@@_change_case_codepoint:nn { upper } {#3} }
\@@_change_case_loop:nnw
}
{#1} {#2} #4 \q_@@_recursion_stop
}
\cs_new:Npn \@@_change_case_upper_el_hiatus:nnN #1#2#3
\cs_new:Npn \@@_change_case_upper_el_hiatus:nnnN #1#2#3#4
{
\token_if_cs:NTF #3
{ \@@_change_case_loop:nnw {#1} {#2} #3 }
\token_if_cs:NTF #4
{
\@@_change_case_store:e
{ \@@_change_case_codepoint:nn { upper } {#1} }
\@@_change_case_loop:nnw {#2} {#3} #4
}
{
\@@_codepoint_process:nN
{ \@@_change_case_upper_el_hiatus:nnn {#1} {#2} } #3
{ \@@_change_case_upper_el_hiatus:nnnn {#1} {#2} {#3} } #4
}
}
\cs_new:Npn \@@_change_case_upper_el_hiatus:nnn #1#2#3
\cs_new:Npn \@@_change_case_upper_el_hiatus:nnnn #1#2#3#4
{
\@@_change_case_if_takes_dialytika:nTF {#3}
\@@_change_case_if_takes_dialytika:nTF {#4}
{
\@@_change_case_upper_el_dialytika:n {#3}
\@@_change_case_upper_el_gobble:nnw {#1} {#2}
\@@_change_case_store:e
{ \@@_change_case_codepoint:nn { upper } {#1} }
\@@_change_case_upper_el_dialytika:n {#4}
\@@_change_case_upper_el_gobble:nnw {#2} {#3}
}
{ \@@_change_case_loop:nnw {#1} {#2} #3 }
{ \@@_change_case_upper_el:nnn {#1} {#2} {#3} #4 }
}
% \end{macrocode}
% Handling the \emph{ypogegrammeni} output depends on the selected approach
% \begin{macrocode}
\cs_new:Npn \@@_change_case_upper_el_ypogegrammeni:n #1
{
\@@_change_case_codepoint:nn { upper } {#1}
\codepoint_generate:nn { "0399 }
{ \char_value_catcode:n { "0399 } }
}
\cs_new:cpn { @@_change_case_upper_el-x-iota_ypogegrammeni:n } #1
{
\int_case:nnF
{ \@@_codepoint_from_chars:Nw #1 }
{
{ "0391 } { \@@_change_case_upper_el_ypogegrammeni_aux:n { "1FBC } }
{ "03B1 } { \@@_change_case_upper_el_ypogegrammeni_aux:n { "1FBC } }
{ "0397 } { \@@_change_case_upper_el_ypogegrammeni_aux:n { "1FCC } }
{ "03B7 } { \@@_change_case_upper_el_ypogegrammeni_aux:n { "1FCC } }
{ "03A9 } { \@@_change_case_upper_el_ypogegrammeni_aux:n { "1FFC } }
{ "03C9 } { \@@_change_case_upper_el_ypogegrammeni_aux:n { "1FFC } }
}
{ \@@_change_case_upper_el_ypogegrammeni:n {#1} }
}
\cs_new:Npn \@@_change_case_upper_el_ypogegrammeni_aux:n #1
{ \codepoint_generate:nn {#1} { \char_value_catcode:n {#1} } }
% \end{macrocode}
% For clearing out trailing combining marks after we have dealt with
% the first one.
% \begin{macrocode}
Expand Down Expand Up @@ -1316,7 +1347,8 @@
% \end{macro}
% \end{macro}
% \end{macro}
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:Nnnw}
% \begin{macro}[EXP]
% {\@@_change_case_boundary_upper_el:Nnnw, \@@_change_case_boundary_upper_el-x-iota:Nnnw}
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnN}
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnn}
% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnnw}
Expand All @@ -1333,6 +1365,8 @@
{ \@@_change_case_loop:nnw }
{#2} {#3} #4 \q_@@_recursion_stop
}
\cs_new_eq:cN { @@_change_case_boundary_upper_el-x-iota:Nnnw }
\@@_change_case_boundary_upper_el:Nnnw
\cs_new:Npn \@@_change_case_boundary_upper_el:nnN #1#2#3
{
\token_if_cs:NTF #3
Expand Down
10 changes: 8 additions & 2 deletions l3kernel/testfiles/m3text002.luatex.tlg
Expand Up @@ -193,10 +193,10 @@ TEST 17: Greek
Ὀδυσσεύς
ΉΙ
ΗΙ
ῌ
ΗΊ
ΗΙ
ῌ
ἈἉἊἋἌἍἎἏ
ΑΑΑΑΑΑΑΑ
ἘἙἚἛἜἝ
Expand All @@ -211,6 +211,12 @@ TEST 17: Greek
ΥΥΥΥΥΥΥΥ
ὨὩὪὫὬὭὮὯ
ΩΩΩΩΩΩΩΩ
ΑΙΑΙΑΙΑΙΑΙΑΙΑΙΑΙ
ᾼᾼᾼᾼᾼᾼᾼᾼ
ΗΙΗΙΗΙΗΙΗΙΗΙΗΙΗΙ
ῌῌῌῌῌῌῌῌ
ΩΙΩΙΩΙΩΙΩΙΩΙΩΙΩΙ
ῼῼῼῼῼῼῼῼ
============================================================
============================================================
TEST 18: Turkish/Azeri
Expand Down
8 changes: 8 additions & 0 deletions l3kernel/testfiles/m3text002.lvt
Expand Up @@ -176,6 +176,11 @@
\text_uppercase:n {#1} \NEWLINE
\text_uppercase:nn { el } {#1}
}
\cs_set:Npn \greektestiota:n #1
{
\text_uppercase:nn { el } {#1} \NEWLINE
\text_uppercase:nn { el-x-iota } {#1}
}
\TIMO

\TESTEXP { Greek }
Expand Down Expand Up @@ -213,6 +218,9 @@
\greektest:n { ὀὁὂὃὄὅ } \NEWLINE
\greektest:n { ὐὑὒὓὔὕὖὗ } \NEWLINE
\greektest:n { ὠὡὢὣὤὥὦὧ } \NEWLINE
\greektestiota:n { ᾀᾁᾂᾃᾄᾅᾆᾇ } \NEWLINE
\greektestiota:n { ᾐᾑᾒᾓᾔᾕᾖᾗ } \NEWLINE
\greektestiota:n { ᾠᾡᾢᾣᾤᾦᾧᾥ } \NEWLINE
}

\TESTEXP { Turkish/Azeri }
Expand Down
10 changes: 8 additions & 2 deletions l3kernel/testfiles/m3text002.tlg
Expand Up @@ -193,10 +193,10 @@ TEST 17: Greek
^^e1^^bd^^88^^ce^^b4^^cf^^85^^cf^^83^^cf^^83^^ce^^b5^^cf^^8d^^cf^^82
^^ce^^89^^ce^^99
^^ce^^97^^ce^^99
^^ce^^97^^cd^^85
^^e1^^bf^^8c
^^ce^^97^^ce^^99^^cc^^81
^^ce^^97^^ce^^99
^^ce^^97^^cd^^85
^^e1^^bf^^8c
^^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^^98^^e1^^bc^^99^^e1^^bc^^9a^^e1^^bc^^9b^^e1^^bc^^9c^^e1^^bc^^9d
Expand All @@ -211,6 +211,12 @@ TEST 17: Greek
^^ce^^a5^^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
^^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^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc^^e1^^be^^bc
^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^ce^^99^^ce^^97^^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
^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99^^ce^^a9^^ce^^99
^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc^^e1^^bf^^bc
============================================================
============================================================
TEST 18: Turkish/Azeri
Expand Down
10 changes: 8 additions & 2 deletions l3kernel/testfiles/m3text002.xetex.tlg
Expand Up @@ -193,10 +193,10 @@ TEST 17: Greek
Ὀδυσσεύς
ΉΙ
ΗΙ
ῌ
ΗΊ
ΗΙ
ῌ
ἈἉἊἋἌἍἎἏ
ΑΑΑΑΑΑΑΑ
ἘἙἚἛἜἝ
Expand All @@ -211,6 +211,12 @@ TEST 17: Greek
ΥΥΥΥΥΥΥΥ
ὨὩὪὫὬὭὮὯ
ΩΩΩΩΩΩΩΩ
ΑΙΑΙΑΙΑΙΑΙΑΙΑΙΑΙ
ᾼᾼᾼᾼᾼᾼᾼᾼ
ΗΙΗΙΗΙΗΙΗΙΗΙΗΙΗΙ
ῌῌῌῌῌῌῌῌ
ΩΙΩΙΩΙΩΙΩΙΩΙΩΙΩΙ
ῼῼῼῼῼῼῼῼ
============================================================
============================================================
TEST 18: Turkish/Azeri
Expand Down

0 comments on commit d413122

Please sign in to comment.