summaryrefslogtreecommitdiff
path: root/macros/optex/base/languages.opm
blob: 4ae66ef1f474017f8ac91fa8b3154f6e88b18d92 (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
%% This is part of the OpTeX project, see http://petr.olsak.net/optex

\_codedecl \_mtext {Languages <2022-02-19>} % preloaded in format

   \_doc -----------------------------
   Four words are generated by \OpTeX/ macros: \"Chapter",
   \"Table", \"Figure" and \"Subject". These phrases are generated depending
   on the current value of the `\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-tag>}` where
   `<phrase-id>` is a label for the declared word and `<lang-tag>` is a language shortcut
   declared by \~`\_preplang`.
   \_cod -----------------------------

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

   \_doc -----------------------------
   We can declare such language-dependent words by
   \begtt
   \_sdef{_mt:chap:en}{Chapter} \_sdef{_mt:chap:cs}{Kapitola}
   \_sdef{_mt:t:en}{Table}      \_sdef{_mt:t:cs}{Tabulka}
   \endtt
   etc. but we use more \"compact" macro
   \`\_langw` `<lang-tag> <chapter> <table> <figure> <subject>`
   for declaring them.
   \_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}%
}

   \_doc -----------------------------
   More phrases are auto-generated in bibliography references. They are declared by\nl
   \`\_langb` `<lang-tag> {<and>} {<et-al>} {<ed>} {<cit>} {<vol>} {<no>} {<pp>} {<p>} {<ed>} {<eds>}`\nl
   `  {<avail-from>} {<avali-to>} {<ba-thesis>} {<ma-thesis>} {<phd-thesis>}`.
   It is used similar way as the \^`\_langw` above. Both these macros are used
   in `lang-data.opm` file, see the end of section~\ref[langdecl].
   \_cod -----------------------------

\_def\_langb#1 #2#3#4#5#6#7#8#9{\_def\_mbib##1##2{\_sdef{_mt:bib.##2:#1}{##1}}%
   \_mbib{#2}{and}\_mbib{#3}{etal}\_mbib{#4}{edition}\_mbib{#5}{citedate}\_mbib{#6}{volume}%
   \_mbib{#7}{number}\_mbib{#8}{prepages}\_mbib{#9}{postpages}\_langbA}
\_def\_langbA#1#2#3#4#5#6#7{\_mbib{#1}{editor}\_mbib{#2}{editors}\_mbib{#3}{available}%
   \_mbib{#4}{availablealso}\_mbib{#5}{bachthesis}\_mbib{#6}{masthesis}\_mbib{#7}{phdthesis}}

   \_doc -----------------------------
   \`\today` macro needs auto-generated words for each name of the month.\nl
   \`\_monthw` `<lang-tag> <January> <February> ... <December>` is used for
   decaring them.\nl
   The language-dependent format for printing date should be declared like
   \begtt
   \_sdef{_mt:today:en}{\_mtext{m\_the\_month} \_the\_day, \_the\_year}
   \endtt
   This example declares date format for English where <lang-tag> is `en`.
   \_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}{#6}\_sdef{_mt:m6:#1}{#7}%
   \_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}{#6}\_sdef{_mt:m12:#1}{#7}%
}
\_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 the `\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 the meaning of these two types of quotes.
   \`\enquotes`, \`\csquotes`, \`\frquotes`, \`\dequotes`, \`\skquotes` are defined here.
   Languages in general provide the \`\quotes` declaration macro. It declares the
   quotation marks depending on the actual selected language. For example,
   `\eslang \quotes` declares Spanish language including its quotation marks
   used for `\"<text>"` and `\'<text>'`. The language-dependent quotation
   marks should be declared by \`\_quotationmarks` `<lang-tag> {<clqq><crqq><clq><crq>}`
   in the `lang-data.opm` file.
   \_cod -----------------------------

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

\_def \_quotes {\_trycs{_qt:\_trycs{_lan:\_the\_language}{en}}{\_enquotes}}
\_def \_quotationmarks #1 #2{\_sdef{_qt:#1}{\_quoteschars #2}}

\_public \quotes \enquotes \csquotes \frquotes \dequotes \skquotes ;

   \_doc -----------------------------
   The \`\quoteschars``<lqq><rqq><lq><rq>` defines `\"` and `\"` as `\_qqA`
   in normal mode and as expadable macros in outline mode.
   We want to well process the common cases: \code{\\"`&`"} or \code{\\"`\{`"}.
   This is the reason why the quotes parameter is read in verbatim mode and retokenized
   again by `\scantextokens`. We want to allow to quote the quotes mark
   itself by \code{\\"{`"`}"}. This is the reason why the sub-verbatim mode is
   used when the 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>"`.\nl
   The \`\_regquotes``\""<L><R>` does `\def\"#1"{<L>#1<R>}` for outlines but the `"`
   separator is active (because `"` and `'` are active in \^`\pdfunidef`).
   \_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{}{}{\_regquotes\""#1#2\_regquotes\''#3#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}
\_def\_regquotes#1#2#3#4{\_bgroup \_lccode`~=`#2\_lowercase{\_egroup \_def#1##1~}{#3##1#4}}

   \_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 the first backslash.
   First, declare `\<iso-code>quotes`, then \^`\altquotes` (if needed) and finally
   \^`\activequotes`.
   \_cod -----------------------------

\_def\_activequotes{\_let\_actqq=\"\_adef"{\_actqq}\_let\_actq=\'\_adef'{\_actq}%
   \_regmacro{}{}{\_adef"{\"}\_adef'{\'}}}

\_public \quoteschars \activequotes ;

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

2022-02-19 \quotes, \_quotationmarks introduced
2022-02-04 \_langinput, words-lan.opm introduced
2021-05-23 \_monthw: bug fix
2021-01-21 more robust quotes in outlines
2020-12-05 bib phrases moved here
2020-04-29 Obrazek -> Abbildung: bug fixed
2020-03-15 introduced