summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/base/languages.opm
blob: 9fa480d96af2a73d78e9b184110270455d1fcd79 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
%% This is part of OpTeX project, see http://petr.olsak.net/optex

\_codedecl \_mtext {Languages <2020-04-29>} % preloaded in format 

   \_doc -----------------------------
   Only four words are generated by \OpTeX/ macros: \"Chapter",
   \"Table", \"Figure" and \"Subject". These phrases can be generated depending 
   on the current value of `\language` register, if you use \`\_mtext``{<phrase-id>}`, 
   specially `\_mtext{chap}`, `\_mtext{t}`, `\_mtext{f}` or `\_mtext{subj}`. 
   If your macros generate more words then 
   you can define such words by `\sdef{_mt:<phrase-id>:<lang>}` where
   `<phrase-id>` is a label for declared word and `<lang>` is language shortcut
   (iso code). 
   \_cod -----------------------------

\_def\_mtext#1{\_trycs{_mt:#1:\_trycs{_lan:\_the\_language}{en}}
   {\_csname _mt:#1:en\_endcsname}}

\_sdef{_mt:chap:en}{Chapter} \_sdef{_mt:chap:cs}{Kapitola} \_sdef{_mt:chap:sk}{Kapitola}
\_sdef{_mt:t:en}{Table}      \_sdef{_mt:t:cs}{Tabulka}     \_sdef{_mt:t:sk}{Tabuľka}
\_sdef{_mt:f:en}{Figure}     \_sdef{_mt:f:cs}{Obrázek}     \_sdef{_mt:f:sk}{Obrázok}
\_sdef{_mt:subj:en}{Subject} \_sdef{_mt:subj:cs}{Věc}      \_sdef{_mt:subj:sk}{Vec}

   \_doc -----------------------------
   Using \`\_langw` `<lang> <chapter> <table> <figure> <subject>` you can
   declare these words more effectively: 
   \maxlines=13
   \_cod -----------------------------

\_def \_langw #1 #2 #3 #4 #5 {%
   \_sdef{_mt:chap:#1}{#2}\_sdef{_mt:t:#1}{#3}\_sdef{_mt:f:#1}{#4}%
   \_sdef{_mt:subj:#1}{#5}%
}

\_langw en  Chapter      Table       Figure       Subject
%--------------------------------------------------------------
\_langw cs  Kapitola     Tabulka     Obrázek      Věc
\_langw de  Kapitel      Tabelle     Abbildung    Betreff
\_langw es  Capítulo     Tabla       Figura       Sujeto
\_langw fr  Chaptire     Tableau     Figure       Matière
\_langw it  Capitolo     Tabella     Fig.         Oggetto
\_langw pl  Rozdział     Tabela      Ilustracja   Temat
\_langw gr  Κεφάλαιο     Πίνακας     Σχήμα        θέμα
\_langw ru  Глава        Таблица     Рисунок      Предмет
\_langw sk  Kapitola     Tabuľka     Obrázok      Vec

   \_doc -----------------------------
   You can add more words as you wish. For example \`\today` macro:
   \_cod -----------------------------

\_def \_monthw #1 #2 #3 #4 #5 #6 #7 {%
   \_sdef{_mt:m1:#1}{#2}\_sdef{_mt:m2:#1}{#3}\_sdef{_mt:m3:#1}{#4}%
   \_sdef{_mt:m4:#1}{#5}\_sdef{_mt:m5:#1}{#5}\_sdef{_mt:m6:#1}{#5}%
   \_monthwB #1
}
\_def \_monthwB #1 #2 #3 #4 #5 #6 #7 {%
   \_sdef{_mt:m7:#1}{#2}\_sdef{_mt:m8:#1}{#3}\_sdef{_mt:m9:#1}{#4}%
   \_sdef{_mt:m10:#1}{#5}\_sdef{_mt:m11:#1}{#5}\_sdef{_mt:m12:#1}{#5}%
}

\_monthw en  January February March April May June
             July August September October November December
\_monthw cs  ledna února března dubna května června
             července srpna září října listopadu prosince
\_monthw sk  januára februára marca apríla mája júna
             júla augusta septembra októbra novembra decembra
\_monthw it  gennaio febbraio marzo aprile maggio giugno
             luglio agosto settembre ottobre novembre dicembre
             

\_sdef{_mt:today:en}{\_mtext{m\_the\_month} \_the\_day, \_the\_year}
\_sdef{_mt:today:cs}{\_the\_day.~\_mtext{m\_the\_month} \_the\_year}
\_slet{_mt:today:sk}{_mt:today:cs}

\_def\_today{\_mtext{today}}
\_public \today ;

   \_doc -----------------------------
   Quotes should be tagged by `\"<text>"` and `\'<text>'` if `\<iso-code>quotes` 
   is declared at beginning of the document (for example `\enquotes`). 
   If not, then the control
   sequences `\"` and `\'` are undefined. Remember, that they are used in
   another meaning when `\oldaccents` command is used.
   The macros `\"` and `\'` are not defined as `\protected` because we need
   their expansion when `\outlines` are created.
   User can declare quotes by \^`\quoteschars``<clqq><crqq><clq><crq>`, where
   `<clqq>...<crqq>` are normal quotes and `<clq>...<crq>` are alternative quotes.
   or use \`\altquotes` to swap between meaning of these two types of quotes.
   \nl
   \`\enquotes`, \`\csquotes`, \`\dequotes`, \`\frquotes` etc. are defined here.
   \_cod -----------------------------

\_def \_enquotes {\_quoteschars “”‘’}
\_def \_csquotes {\_quoteschars „“‚‘}
\_def \_frquotes {\_quoteschars “”«»}
\_let \_plquotes = \_frquotes
\_let \_esquotes = \_frquotes
\_let \_grquotes = \_frquotes
\_let \_ruquotes = \_frquotes
\_let \_itquotes = \_frquotes
\_let \_skquotes = \_csquotes
\_let \_dequotes = \_csquotes

   \_doc -----------------------------
   The \`\quoteschars``<lqq><rqq><lq><rq>` defines `\"` and `\"` as `\_qqA`
   in in normal mode and as expadable macros in outline mode.
   We want to well process the common cases: \code{\\"`&`"} or \code{\\"`\{`"}.
   This is reason why the quotes parameter is read in verbatim mode and retokenized
   again by `\scantextokens`. We want to allow to quote the quoutes mark
   itself by \code{\\"{`"`}"}. This is reason why the sub-verbatim mode is
   used when first character is \code{\{} in the parameter.\nl
   The `\"` is defined as `\_qqA\_qqB<lqq><rqq>` and `\'` as `\_qqA\_qqC<lq><rq>`.
   The \`\_qqA``\_qqB<clqq><crqq>` runs \`\_qqB``<lqq><rqq><text>"`.
   \_cod -----------------------------

\_def \_quoteschars #1#2#3#4{\_def\_altquotes{\_quoteschars#3#4#1#2}\_public\altquotes;%
   \_protected\_def \"{\_qqA\_qqB#1#2}\_protected\_def \'{\_qqA\_qqC#3#4}%
   \_regmacro{}{}{\_def \"##1"{#1##1#2}\_def \'##1'{#3##1#4}}}

\_def\_qqA#1#2#3{\_bgroup\_setverb \_catcode`\ =10
   \_isnextchar\_bgroup{\_catcode`\{=1 \_catcode`\}=2 #1#2#3}{#1#2#3}}
\_long\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2}
\_long\_def\_qqC#1#2#3'{\_egroup#1\_scantextokens{#3}#2}

   \_doc -----------------------------
   Sometimes should be usable to leave the markup `"such"` or `'such'` i.e.~without
   the first backslash. Then you can make the characters `"` and `'` active
   by the \`\activequotes` macro and leave quotes without first backslash. 
   First, declare `\<iso-code>quotes`, then \^`\altquotes` (if needed) and finally 
   \^`\activequotes`.

   \`\_resetaquotes` redefines expandable version of `\"<text>"` and `\'<text>'`
   used in outlines in order to the delimiter is {\em active} character. We
   are testing if \^`\quoteschars` were used now because the error in outlines
   can be more confusing.
   \_cod -----------------------------

\_def\_activequotes{\_adef"{\"}\_adef'{\'}\_resetaquotes}

\_bgroup \_catcode`,=13 \_lccode`\~=`\" \_lccode`\,=`\' \_lowercase{\_egroup
   \_def\_resetaquotes{%
      \_bgroup \_the\_regoul \_edef\_tmp{\"?"}\_egroup % test if \quoteschar were used
      \_regmacro{}{}{\_edef\"##1~{\"##1"}\_edef\'##1,{\'##1'}}}
}

\_public \quoteschars \activequotes \enquotes \csquotes \skquotes \frquotes \plquotes 
   \esquotes \grquotes \ruquotes \itquotes \dequotes ;

\_endcode % -------------------------------------

2020-04-29 Obrazek -> Abbildung: bug fixed
2020-03-15 introduced