diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/lang-ini.mkiv')
-rw-r--r-- | Master/texmf-dist/tex/context/base/lang-ini.mkiv | 245 |
1 files changed, 128 insertions, 117 deletions
diff --git a/Master/texmf-dist/tex/context/base/lang-ini.mkiv b/Master/texmf-dist/tex/context/base/lang-ini.mkiv index 45bb71b85d9..5dccab4dc82 100644 --- a/Master/texmf-dist/tex/context/base/lang-ini.mkiv +++ b/Master/texmf-dist/tex/context/base/lang-ini.mkiv @@ -13,6 +13,8 @@ %D This module needs a further cleanup (real split between ii/iv). +% \ctxlua{tex.sprint(languages.numbers[tex.count.mainlanguagenumber])} + %D This module implements the (for the moment still simple) %D multi||language support of \CONTEXT, which should not be %D confused with the multi||lingual interface. This support @@ -21,6 +23,7 @@ \writestatus{loading}{ConTeXt Language Macros / Initialization} \registerctxluafile{lang-ini}{1.001} +\registerctxluafile{lang-def}{1.001} \unprotect @@ -73,6 +76,34 @@ \let\currentlanguage \empty \let\currentmainlanguage\empty +%D \macros +%D {defaultlanguage,languageparameter,specificlanguageparameter} + +\def\defaultlanguage#1% + {\ifcsname\??la#1\s!default\endcsname + \expandafter\defaultlanguage\csname\??la#1\s!default\endcsname + \else + #1% + \fi} + +\def\languageparameter#1% + {\ifcsname\??la\currentlanguage#1\endcsname + \csname\??la\currentlanguage#1\endcsname + \else\ifcsname\??la\currentlanguage\s!default\endcsname + \expandafter\specificlanguageparameter\csname\??la\currentlanguage\s!default\endcsname{#1}% + \else\ifcsname\??la\s!default#1\endcsname + \csname\??la\s!default#1\endcsname + \fi\fi\fi} + +\def\specificlanguageparameter#1#2% + {\ifcsname\??la#1#2\endcsname + \csname\??la#1#2\endcsname + \else\ifcsname\??la#1\s!default\endcsname + \expandafter\specificlanguageparameter\csname\??la#1\s!default\endcsname{#2}% + \else\ifcsname\??la\s!default#2\endcsname + \csname\??la\s!default#2\endcsname + \fi\fi\fi} + \unexpanded\def\setupcurrentlanguage[#1]{\setcurrentlanguage\currentmainlanguage{#1}} \def\setcurrentlanguage#1#2% sets modes: **id (currentmain) *id (current) @@ -123,10 +154,10 @@ %D implementations support run time addition of patterns to a %D preloaded format). -\def\dodoinstalllanguage#1#2% #2 added - {\expanded{\noexpand\uppercase{\noexpand\edef\noexpand\ascii{#1}}}% - \ifcsname #1\endcsname\else\setvalue {#1}{\complexlanguage[#2]}\fi - \ifcsname\ascii\endcsname\else\setvalue\ascii{\complexlanguage[#2]}\fi} +% move to lua end + +\def\dodoinstalllanguage#1#2% + {\ifcsname#1\endcsname\else\setuvalue{#1}{\complexlanguage[#2]}\fi} %D \macros %D {preloadlanguages} @@ -137,47 +168,31 @@ %D reports which patterns are loaded and what hyphenmin %D values are set. -\let\installedlanguages\empty +\newtoks \everysetuplanguage -\def\doiflanguageelse#1{\doifdefinedelse{\??la#1\c!state}} +\def\installedlanguages{\ctxlua{languages.installed()}} -\def\doloadpatterns#1#2% - {\ctxlua{languages.register( - "#1", - "#2", - "\truefilename{\f!languageprefix#2.\f!patternsextension}", - "\truefilename{\f!languageprefix#2.\f!hyphensextension }") - }} - -\def\doloadlanguagefiles#1% - {\edef\languagesuffix{\specificlanguageparameter{#1}\s!patterns}% - \ifx\languagesuffix\empty - \edef\languagesuffix{\defaultlanguage{#1}}% - \else\ifx\languagesuffix\relax - \edef\languagesuffix{\defaultlanguage{#1}}% - \fi\fi - \ifx\languagesuffix\empty - \edef\languagesuffix{#1}% - \fi - \doloadpatterns{#1}\languagesuffix} +\def\doiflanguageelse#1{\doifdefinedelse{\??la#1\c!state}} \def\doinstalllanguage[#1][#2]% {\doifassignmentelse{#2} {\doiflanguageelse{#1} {\getparameters[\??la#1][#2]} {\setvalue{\l!prefix!#1}{#1}% - \addtocommalist{#1}\installedlanguages \dodoinstalllanguage{#1}{#1}% \getparameters[\??la#1][\c!state=\v!start,#2]}% - \doloadlanguagefiles{#1}} + \edef\currentsetuplanguage{#1}% + \ctxlua{languages.define("#1","\specificlanguageparameter{#1}\s!default")}% + \the\everysetuplanguage} {\setvalue{\l!prefix!#1}{#2}% - \getparameters[\??la#1][\s!default=#2]% + \ctxlua{languages.synonym("#1","#2")}% + %\getparameters[\??la#1][\s!default=#2]% \dodoinstalllanguage{#1}{#2}}} \def\reallanguagetag#1% {\ifcsname\l!prefix!#1\endcsname\csname\l!prefix!#1\endcsname\else#1\fi} -% ^^ \language[#1] gave unwanted side effect of loading language specifics +% \language[#1] gave unwanted side effect of loading language specifics \def\installlanguage {\dodoubleargument\doinstalllanguage} @@ -188,7 +203,13 @@ %D conform a standard. \def\doifpatternselse#1% - {\ctxlua{cs.testcase(languages.loadable("#1"))}} + {\bgroup % will change + \language[#1]% + \ifnum\normallanguage>\zerocount + \bgroup\expandafter\firstoftwoarguments + \else + \bgroup\expandafter\secondoftwoarguments + \fi} %D \macros %D {setuplanguage} @@ -202,24 +223,40 @@ \unexpanded\def\setuplanguage {\dodoubleempty\dosetuplanguage} -\def\dosetuplanguage[#1][#2]% handy patch for testing +\ifdefined\docomplexlanguage \else \let\docomplexlanguage\relax \fi + +\def\dosetuplanguage[#1][#2]% {\ifsecondargument - \getparameters[\??la#1][#2]% - \doif{#1}\currentlanguage\docomplexlanguage + \pushmacro\currentlanguage % can be default + \edef\currentsetuplanguage{\reallanguagetag{#1}}% + \getparameters[\??la\currentsetuplanguage][#2]% + \the\everysetuplanguage + \popmacro\currentlanguage + %\doif\currentsetuplanguage\currentlanguage we can have influenced inheritance (default) + \docomplexlanguage \else - \getparameters[\??la\currentlanguage][#1]% + \let\currentsetuplanguage\currentlanguage + \getparameters[\??la\currentsetuplanguage][#1]% + \the\everysetuplanguage \docomplexlanguage \fi} +\appendtoks + \ctxlua{languages.setdirty("\currentsetuplanguage")}% +\to \everysetuplanguage + \setuplanguage [\s!default] - [\s!lefthyphenmin=2, + [\s!patterns=, + \s!lefthyphenmin=2, \s!righthyphenmin=2, - \s!patterns=, - \c!spacing=\v!packed, + \s!lefthyphenchar=-1, + \s!righthyphenchar=45, + % used in compound i.e. interfaced with c! and can be anything so no numbers \c!lefthyphen=, \c!righthyphen=-, \c!hyphen=-, + \c!spacing=\v!packed, \c!midsentence=---, \c!leftsentence=---, \c!rightsentence=---, @@ -244,6 +281,12 @@ \c!rightcompoundhyphen=\compoundhyphen, \c!leftcompoundhyphen=] +% to be tested: +% +% \setuplanguage +% [\s!default] +% [\c!righthyphenchar="AD] + %D The values \type {leftsentence} and \type %D {rightsentence} can be (and are) used to implement %D automatic subsentence boundary glyphs, like in {\fr @@ -301,38 +344,30 @@ %D We take care of local as well as standardized language %D switching (fr and fa, de and du, but nl and nl). -\def\dosetnormallanguage#1#2% current default - {\edef\askedlanguagepatterns{\specificlanguageparameter{#1}\s!patterns}% - \normallanguage=\ctxlua{tex.sprint(languages.enable({"\askedlanguagepatterns","#1","#2"}))}% - \ifproductionrun - \setxvalue{\??la\??la#1#2}{\number\normallanguage}% - \fi} - -\def\setnormallanguage#1#2% current default / we can freeze the number here - {\ifcsname\??la\??la#1#2\endcsname - \normallanguage\csname\??la\??la#1#2\endcsname % todo: we can set language at the lua end now - \else - \dosetnormallanguage{#1}{#2}% - \fi} - \newtoks \everylanguage -\def\sethyphenationvariables % as we can have cloning we need to set it each time, unless we move all to lua - {\ctxlua{languages.setup(tex.language, { - lefthyphen = "\languageparameter\c!lefthyphen", - righthyphen = "\languageparameter\c!righthyphen", - } )}% - \lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax - \righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax} - -\def\docomplexlanguage% assumes that \currentlanguage is set - {\edef\currentdefaultlanguage{\defaultlanguage\currentlanguage}% - \setnormallanguage\currentlanguage\currentdefaultlanguage - \the\everylanguage - \sethyphenationvariables - \relax - % will be definable and move to core-spa ! - \doifelse{\languageparameter\c!spacing}\v!broad\nonfrenchspacing\frenchspacing} +\def\docomplexlanguage% assumes that \currentlanguage is set % % % use different name as complex + {\normallanguage\ctxlua{commands.languagenumber(% + "\currentlanguage",% + "\defaultlanguage\currentlanguage",% + "\languageparameter\s!patterns"% + )}\relax + \the\everylanguage\relax} + +\appendtoks + % these values are stored along with glyph nodes + \lefthyphenmin \numexpr0\languageparameter\s!lefthyphenmin +\hyphenminoffset\relax + \righthyphenmin\numexpr0\languageparameter\s!righthyphenmin+\hyphenminoffset\relax + % these values are stored with the language (global!) + \prehyphenchar \languageparameter\s!righthyphenchar\relax + \posthyphenchar\languageparameter\s!lefthyphenchar \relax +\to \everylanguage + +% this will move to core-spa ! + +\appendtoks + \doifelse{\languageparameter\c!spacing}\v!broad\nonfrenchspacing\frenchspacing +\to \everylanguage % \mainlanguage[nl] \setuplanguage[nl][lefthyphen=,righthyphen=?] % @@ -352,7 +387,7 @@ \docomplexlanguage \fi \else - \showmessage\m!linguals6{#1}% + \showmessage\m!languages6{#1}% \fi \fi} @@ -360,6 +395,8 @@ \definecomplexorsimple\language +\newcount\mainlanguagenumber + \def\mainlanguage[#1]% {\edef\askedlanguage{#1}% \ifx\askedlanguage\empty \else @@ -376,35 +413,8 @@ \docomplexlanguage \fi \fi - \fi} - -%D \macros -%D {defaultlanguage,languageparameter,specificlanguageparameter} - -\def\defaultlanguage#1% - {\ifcsname\??la#1\s!default\endcsname - \expandafter\defaultlanguage\csname\??la#1\s!default\endcsname - \else - #1% - \fi} - -\def\languageparameter#1% - {\ifcsname\??la\currentlanguage#1\endcsname - \csname\??la\currentlanguage#1\endcsname - \else\ifcsname\??la\currentlanguage\s!default\endcsname - \expandafter\specificlanguageparameter\csname\??la\currentlanguage\s!default\endcsname{#1}% - \else\ifcsname\??la\s!default#1\endcsname - \csname\??la\s!default#1\endcsname - \fi\fi\fi} - -\def\specificlanguageparameter#1#2% - {\ifcsname\??la#1#2\endcsname - \csname\??la#1#2\endcsname - \else\ifcsname\??la#1\s!default\endcsname - \expandafter\specificlanguageparameter\csname\??la#1\s!default\endcsname{#2}% - \else\ifcsname\??la\s!default#2\endcsname - \csname\??la\s!default#2\endcsname - \fi\fi\fi} + \fi + \mainlanguagenumber\normallanguage} %D New (see nomarking and nolist): @@ -422,19 +432,11 @@ %D {\blank %D \startlinecorrection %D \vbox\bgroup -%D \language[#1]% -%D \setbox0=\hbox to \hsize{\hss\bf#2 subsentence symbol and quotes\hss} -%D \dp0=0pt -%D \box0 -%D \vskip.5em -%D \hrule -%D \vskip.5em -%D \let\normalbar=| -%D \hbox to \hsize +%D \language[#1] +%D \midaligned{\bf#2 subsentence symbol and quotes} +%D \framed[width=\hsize,frame=off,topframe=on,bottomframe=on,offset=.5ex] %D {\hfil\quotation{#3 #4}\hfil\quote{#2}\hfil -%D \let|=\normalbar\strut|<||<|#3|>|#4|>|\hfil} -%D \vskip.5em -%D \hrule +%D \startsubsentence\startsubsentence#3\stopsubsentence#4\stopsubsentence\hfil} %D \egroup %D \stoplinecorrection %D \blank} @@ -531,9 +533,6 @@ %D \stoptable %D \protect -% \bgroup \normallanguage255 \patterns{} \egroup -% \def\nopatterns{\normallanguage255 } - \def\nopatterns{\normallanguage\minusone} %D We default to the language belonging to the interface. This @@ -546,15 +545,27 @@ \def\initializemainlanguage {\mainlanguage[\currentlanguage]% - \showmessage\m!linguals9\currentlanguage} + \showmessage\m!languages9\currentlanguage} + +%D New: -%D Might be in use: +\let\stopexceptions\relax -\let\preloadallpatterns\relax % just for old times sake -\let\preloadlanguages \relax % just for old times sake +\unexpanded\def\startexceptions + {\dosingleempty\dostartexceptions} + +\long\def\dostartexceptions[#1]#2\stopexceptions % multilingual or not? + {\begingroup + \edef\askedlanguage{\reallanguagetag{#1}}% + \ifx\askedlanguage\empty + \let\askedlanguage\currentlanguage + \fi + \ctxlua{languages.exceptions("\askedlanguage",\!!bs#2\!!es)}% + \endgroup} -\uchyph=1 +%D For the moment here: +\uchyph = 1 % also treat uppercase \exhyphenchar=45 % to permit breaking at explicit hyphens \protect \endinput |