summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/lang-ini.mkxl
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2020-10-31 00:09:22 +0100
committerContext Git Mirror Bot <phg@phi-gamma.net>2020-10-31 00:09:22 +0100
commit7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896 (patch)
tree92ffcd258fb29e37b4a136eb071fbfd0717be29e /tex/context/base/mkiv/lang-ini.mkxl
parenta0270f13065d116355a953c6f246cbba26289fc2 (diff)
downloadcontext-7043cd3b7046f6a11112a5d49c4ae5e2dc0c6896.tar.gz
2020-10-30 22:27:00
Diffstat (limited to 'tex/context/base/mkiv/lang-ini.mkxl')
-rw-r--r--tex/context/base/mkiv/lang-ini.mkxl149
1 files changed, 79 insertions, 70 deletions
diff --git a/tex/context/base/mkiv/lang-ini.mkxl b/tex/context/base/mkiv/lang-ini.mkxl
index f5831a5ea..6d0649fa8 100644
--- a/tex/context/base/mkiv/lang-ini.mkxl
+++ b/tex/context/base/mkiv/lang-ini.mkxl
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D This module needs a further cleanup (real split between ii/iv).
+% We can protect \currentlanguage etc too.
% \cldcontext{languages.numbers[tex.count.mainlanguagenumber]}
@@ -22,7 +22,7 @@
\writestatus{loading}{ConTeXt Language Macros / Initialization}
-\registerctxluafile{lang-ini}{}
+\registerctxluafile{lang-ini}{autosuffix}
\registerctxluafile{lang-def}{}
\registerctxluafile{lang-cnt}{}
@@ -74,14 +74,14 @@
\def\currentusedlanguage{\currentlanguage}
-\def\defaultlanguage#1%
+\permanent\def\defaultlanguage#1%
{\ifcsname\??language#1\s!default\endcsname
\expandafter\defaultlanguage\lastnamedcs
\else
#1%
\fi}
-\def\languageparameter#1%
+\permanent\def\languageparameter#1%
{\ifcsname\??language\currentlanguage#1\endcsname
\lastnamedcs
\orelse\ifcsname\??language\currentlanguage\s!default\endcsname
@@ -90,7 +90,7 @@
\lastnamedcs
\fi}
-\def\specificlanguageparameter#1#2%
+\permanent\def\specificlanguageparameter#1#2%
{\ifcsname\??language#1#2\endcsname
\lastnamedcs
\orelse\ifcsname\??language#1\s!default\endcsname
@@ -99,7 +99,7 @@
\lastnamedcs
\fi}
-\def\mainlanguageparameter#1%
+\permanent\def\mainlanguageparameter#1%
{\ifcsname\??language\currentmainlanguage#1\endcsname
\lastnamedcs
\orelse\ifcsname\??language\currentmainlanguage\s!default\endcsname
@@ -108,9 +108,9 @@
\lastnamedcs
\fi}
-\let\usedlanguageparameter\languageparameter
+\aliased\let\usedlanguageparameter\languageparameter
-\def\askedlanguageparameter#1% assumes \currentusedlanguage being set
+\permanent\def\askedlanguageparameter#1% assumes \currentusedlanguage being set
{\ifcsname\??language\currentusedlanguage#1\endcsname
\lastnamedcs
\orelse\ifcsname\??language\currentusedlanguage\s!default\endcsname
@@ -119,25 +119,25 @@
\lastnamedcs
\fi}
-\unexpanded\def\setusedlanguage#1%
+\permanent\protected\def\setusedlanguage#1%
{\edef\currentusedlanguage{\reallanguagetag{#1}}%
\ifempty\currentusedlanguage
\let\currentusedlanguage \currentlanguage
- \let\usedlanguageparameter\languageparameter
+ \enforced\let\usedlanguageparameter\languageparameter
\orelse\ifx\currentusedlanguage\v!global
\let\currentusedlanguage \currentmainlanguage
- \let\usedlanguageparameter\mainlanguageparameter
+ \enforced\let\usedlanguageparameter\mainlanguageparameter
\orelse\ifx\currentusedlanguage\v!local
\let\currentusedlanguage \currentlanguage
- \let\usedlanguageparameter\languageparameter
+ \enforced\let\usedlanguageparameter\languageparameter
\else
- \let\usedlanguageparameter\askedlanguageparameter
+ \enforced\let\usedlanguageparameter\askedlanguageparameter
\fi}
-\unexpanded\def\setupcurrentlanguage[#1]%
+\permanent\protected\def\setupcurrentlanguage[#1]%
{\setcurrentlanguage\currentmainlanguage{#1}}
-\unexpanded\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current)
+\permanent\protected\def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current)
{\edef\xaskedlanguage{#1}% otherwise clash with \askedlanguage
\ifempty\xaskedlanguage \else
\ifempty\currentmainlanguage\else\resetsystemmode{\systemmodeprefix\currentmainlanguage}\fi
@@ -176,9 +176,9 @@
\newtoks \everysetuplanguage
-\def\installedlanguages{\clf_installedlanguages}
+\aliased\let\installedlanguages\clf_installedlanguages % no need for \clf_
-\unexpanded\def\doifelselanguage#1%
+\permanent\protected\def\doifelselanguage#1%
{\ifcsname\??language#1\c!state\endcsname
\expandafter\firstoftwoarguments
\else
@@ -187,15 +187,12 @@
\let\doiflanguageelse\doifelselanguage
-\def\reallanguagetag#1%
+\permanent\def\reallanguagetag#1%
{\ifcsname\??languagelinked#1\endcsname\lastnamedcs\else#1\fi}
% \language[#1] gave unwanted side effect of loading language specifics
-\unexpanded\def\installlanguage
- {\dodoubleargument\lang_basics_install}
-
-\def\lang_basics_install[#1][#2]%
+\permanent\tolerant\protected\def\installlanguage[#1]#*[#2]%
{\ifcondition\validassignment{#2}%
\doifelselanguage{#1}
{\getparameters[\??language#1][#2]}
@@ -218,7 +215,7 @@
%D feature is present because we used dutch mnemonics in the dutch version, but
%D nowadays conform a standard.
-\unexpanded\def\doifelsepatterns#1%
+\permanent\protected\def\doifelsepatterns#1%
{\begingroup % will change
\lang_basics_set_current[#1]%
\ifnum\normallanguage>\zerocount
@@ -227,7 +224,7 @@
\endgroup\expandafter\secondoftwoarguments
\fi}
-\let\doifpatternselse\doifelsepatterns
+\aliased\let\doifpatternselse\doifelsepatterns
%D \macros
%D {setuplanguage}
@@ -238,27 +235,26 @@
%D
%D Beware, this command can only be used when a language is installed.
-\unexpanded\def\setuplanguage
- {\dodoubleempty\lang_basics_setup}
-
\ifdefined\lang_basics_synchronize \else
\let\lang_basics_synchronize\relax % be nice for setups till we have one
\fi
\installmacrostack\currentlanguage
-\def\lang_basics_setup[#1][#2]%
- {\ifsecondargument
+\permanent\tolerant\protected\def\setuplanguage[#1]#*[#2]%
+ {\ifarguments
+ % only synchronize
+ \or
+ \let\currentsetuplanguage\currentlanguage
+ \getparameters[\??language\currentsetuplanguage][#1]%
+ \the\everysetuplanguage
+ \or
\push_macro_currentlanguage % can be default
\edef\currentsetuplanguage{\reallanguagetag{#1}}%
\getparameters[\??language\currentsetuplanguage][#2]%
\the\everysetuplanguage
\pop_macro_currentlanguage
%\doif\currentsetuplanguage\currentlanguage we can have influenced inheritance (default)
- \else
- \let\currentsetuplanguage\currentlanguage
- \getparameters[\??language\currentsetuplanguage][#1]%
- \the\everysetuplanguage
\fi
\lang_basics_synchronize}
@@ -316,8 +312,8 @@
%D
%D Just to make things easy we can ask for the current date specification by saying:
-\def\currentdatespecification{\languageparameter\c!date}
-\def\currenttimespecification{\languageparameter\c!time}
+\permanent\def\currentdatespecification{\languageparameter\c!date}
+\permanent\def\currenttimespecification{\languageparameter\c!time}
%D Carefull reading of these macros shows that it's legal to say
%D
@@ -398,9 +394,9 @@
% This is the old implementation: a hack that sets the min values, because we want
% to keep the language set:
%
-% \unexpanded\def\nohyphens % nicer for url's
+% \protected\def\nohyphens % nicer for url's
% {\ifx\dohyphens\relax
-% \unexpanded\edef\dohyphens
+% \protected\edef\dohyphens
% {\hyphenminoffset\the\hyphenminoffset\relax
% \lang_basics_synchronize_min_max}%
% \fi
@@ -433,10 +429,10 @@
+ \permitmathreplacehyphenationmodecode % and again we're more permissive
\relax
-\unexpanded\def\dohyphens{\hyphenationmode\completehyphenationmodecode}
-\unexpanded\def\nohyphens{\hyphenationmode\zerocount}
+\permanent\protected\def\dohyphens{\hyphenationmode\completehyphenationmodecode}
+\permanent\protected\def\nohyphens{\hyphenationmode\zerocount}
-\unexpanded\def\usehyphensparameter#1%
+\permanent\protected\def\usehyphensparameter#1%
{\edef\p_hyphens{#1\c!hyphens}%
\ifx\p_hyhens\v!no
\nohyphens
@@ -446,17 +442,17 @@
%D The rest stays the same as in mkiv:
-\unexpanded\def\lesshyphens
+\permanent\protected\def\lesshyphens
{\advance\hyphenminoffset\plusone
\lang_basics_synchronize_min_max}
-\unexpanded\def\morehyphens
+\permanent\protected\def\morehyphens
{\ifcase\hyphenminoffset \else
\advance\hyphenminoffset\minusone
\fi
\lang_basics_synchronize_min_max}
-\unexpanded\def\lang_basics_synchronize_min_max % maybe store this at the lua end
+\protected\def\lang_basics_synchronize_min_max % maybe store this at the lua end
{% these values are stored along with glyph nodes
\lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax
\righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax
@@ -469,7 +465,7 @@
\lang_basics_synchronize_min_max
\to \everylanguage
-\unexpanded\def\unhyphenated
+\permanent\protected\def\unhyphenated
{\groupedcommand{\lefthyphenmin\maxdimen}\donothing}
% \appendtoks
@@ -509,7 +505,7 @@
% new experimental feature
-\unexpanded\def\setuplanguages
+\permanent\protected\def\setuplanguages
{\setuplanguage[\s!default]}
% \setuplanguages[\c!font=\v!auto]
@@ -537,36 +533,40 @@
\fi
\fi}
-\unexpanded\def\uselanguageparameter#1%
+\protected\def\uselanguageparameter#1%
{\edef\askedlanguage{#1\c!language}%
\ifempty\askedlanguage\else\lang_basics_switch_asked\fi}
-\unexpanded\def\douselanguageparameter#1% fast setter
+\protected\def\douselanguageparameter#1% fast setter
{\edef\askedlanguage{#1}%
\ifempty\askedlanguage\else\lang_basics_switch_asked\fi}
-\unexpanded\def\lang_basics_set_current[#1]%
+\protected\def\lang_basics_set_current[#1]%
{\edef\askedlanguage{#1}%
\ifempty\askedlanguage\else\lang_basics_switch_asked\fi}
-\unexpanded\def\language
- {\doifelsenextoptionalcs\lang_basics_set_current\normallanguage}
+\pushoverloadmode
-\let\setlanguage\language % we make these synonyms
+ \permanent\protected\def\language
+ {\doifelsenextoptionalcs\lang_basics_set_current\normallanguage}
-\let\patterns\gobbleoneargument
+ \let\setlanguage\language % we make these synonyms
+
+ \let\patterns\gobbleoneargument
+
+\popoverloadmode
\newcount\mainlanguagenumber
%D Beware: you might need to use \type {\dontleavehmode} outside and|/|or \type {\par}
%D inside the group!
-\unexpanded\def\startlanguage
+\permanent\protected\def\startlanguage
{\begingroup\language}
-\let\stoplanguage\endgroup
+\permanent\let\stoplanguage\endgroup
-\unexpanded\def\mainlanguage[#1]%
+\permanent\protected\def\mainlanguage[#1]%
{\edef\askedlanguage{#1}%
\ifempty\askedlanguage
\orelse\ifcsname\??languagelinked\askedlanguage\endcsname
@@ -590,10 +590,10 @@
%D Used at all?
-\def\splitsequence#1#2%
+\permanent\def\splitsequence#1#2%
{\doifelse{#1}\v!no{#2}{\doifelse{#1}\v!yes{\languageparameter\c!limittext}{#1}}}
-\def\splitsymbol#1%
+\permanent\def\splitsymbol#1%
{\splitsequence{#1}{\languageparameter\c!limittext}}
%D Just like with subsentence boundary symbols, quotes placement depends on the
@@ -704,25 +704,22 @@
%D \stoptable
%D \protect
-\unexpanded\def\nopatterns{\normallanguage\minusone}
+\permanent\protected\def\nopatterns{\normallanguage\minusone}
%D We default to the language belonging to the interface. This is one of the few
%D places outside the interface modules where \type {\startinterface} is used.
\setupcurrentlanguage[\s!en]
-\unexpanded\def\initializemainlanguage
+\permanent\protected\def\initializemainlanguage
{\mainlanguage[\currentlanguage]%
\showmessage\m!languages9\currentlanguage}
%D New:
-\let\stopexceptions\relax
+\permanent\let\stopexceptions\relax
-\unexpanded\def\startexceptions
- {\dosingleempty\lang_basics_start_exceptions}
-
-\def\lang_basics_start_exceptions[#1]#2\stopexceptions % multilingual or not?
+\tolerant\permanent\protected\def\startexceptions[#1]#:#2\stopexceptions
{\begingroup
\edef\askedlanguage{\reallanguagetag{#1}}%
\ifempty\askedlanguage
@@ -731,26 +728,38 @@
\clf_setlanguageexceptions{\askedlanguage}{#2}%
\endgroup}
-\unexpanded\def\hyphenation
+\pushoverloadmode
+
+\permanent\protected\def\hyphenation
{\clf_setlanguageexceptions{\currentlanguage}}
+\popoverloadmode
+
%D New:
-\unexpanded\def\traceddiscretionary#1#%
+\permanent\protected\def\traceddiscretionary#1#%
{\dontleavehmode\lang_basics_traced_discretionary{#1}}
-\unexpanded\def\lang_basics_traced_discretionary#1#2#3#4%
+\protected\def\lang_basics_traced_discretionary#1#2#3#4%
{\normaldiscretionary#1{\darkred#2}{\darkgreen#3}{\darkblue#4}}
\installtextracker
{discretionaries}
- {\let\discretionary\traceddiscretionary}
- {\let\discretionary\normaldiscretionary}
+ {\enforced\let\discretionary\traceddiscretionary}
+ {\enforced\let\discretionary\normaldiscretionary}
-\unexpanded\def\samplediscretionary
+\permanent\protected\def\samplediscretionary
{\traceddiscretionary
{pre\clf_currentprehyphenchar}%
{\clf_currentposthyphenchar post}%
{replace}}
+%D Also new:
+
+\immutable\chardef\nokerningcode \numexpr\noleftkerncode +\norightkerncode \relax
+\immutable\chardef\noligaturingcode\numexpr\noleftligaturecode+\norightligaturecode\relax
+
+\permanent\protected\def\nokerning {\bitwiseflip\glyphoptions\nokerningcode}
+\permanent\protected\def\noligaturing{\bitwiseflip\glyphoptions\noligaturingcode}
+
\protect \endinput