%% This is part of the OpTeX project, see http://petr.olsak.net/optex

\_codedecl \_mtext {Languages <2022-11-18>} % 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}}
\_def\_qqB#1#2#3"{\_egroup#1\_scantextokens{#3}#2}
\_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-11-18 \"..." are not \long now
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
