summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkxl/enco-ini.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/enco-ini.mkxl')
-rw-r--r--Master/texmf-dist/tex/context/base/mkxl/enco-ini.mkxl488
1 files changed, 488 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/enco-ini.mkxl b/Master/texmf-dist/tex/context/base/mkxl/enco-ini.mkxl
new file mode 100644
index 00000000000..c93ef7f6185
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkxl/enco-ini.mkxl
@@ -0,0 +1,488 @@
+%D \module
+%D [ file=enco-ini,
+%D version=2007.02.19, % 2000.12.27, % 1998.12.03,
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=Initialization,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This is stripped down version of the original enco-ini.tex file. For more details
+%D you might want to study the \MKII\ file but since \LUATEX\ is unicode inside we
+%D need less code. When we moved to \LMTX\ again some disappeared and the composition
+%D macros were upgraded in the process.
+%D
+%D An historic note: When dealing with characters we have four cases to take into
+%D account when moving from \MKII\ to \MKIV:
+%D
+%D \starttabulate[|l|l|]
+%D \NC \type {<byte 200>} \NC ref to slot 200 in current font \NC \NR
+%D \NC \type {\char 200} \NC ref to slot 200 in current font \NC \NR
+%D \NC \type {<active 200>} \NC can (e.g.) map to another slot in current font \NC \NR
+%D \NC \type {\namedglyph} \NC can map to some slot in some font \NC \NR
+%D \stoptabulate
+%D
+%D Using case 2 for special characters is doomed to fail because we are not going to
+%D intercept these on the fly as happens automatically with traditional font
+%D encoding handling. We could do that in a node pass but it's not worth the effort
+%D because we seldom use this case in a document source.
+
+\writestatus{loading}{ConTeXt Encoding Macros / Initialization}
+
+\unprotect
+
+%D This one is obsolete but maybe sometimes still used in styles:
+
+\immutable\let\defaultencoding\s!default
+
+%D \macros
+%D {defineaccent, definecharacter, definecommand}
+%D
+%D Some of these are used at the \LUA\ end but the names will change.
+
+\installcorenamespace{accents}
+
+%D These might go away:
+
+\permanent\protected\def\defineaccent#1 #2 #3 %
+ {\dodefineaccentcommand{#1}%
+ \dodefineaccent{#1}{#2}{#3}}
+
+\permanent\protected\def\dodefineaccentcommand#1%
+ {\ifcsname\string#1\endcsname\else
+ \edefcsname\string#1\endcsname{\noexpand\dohandleaccent{\string#1}}%
+ \fi}
+
+\permanent\protected\def\dodefineaccent#1#2#3% no spaces, used low level
+ {\defcsname\??accents\string#1\string#2\empty\endcsname{#3}}
+
+\permanent\protected\def\dohandleaccent#1#2% expandable because we want them in the tuc file
+ {\csname\??accents
+ \ifcsname\??accents\string#1#2\empty\endcsname
+ \string#1#2\empty
+ \orelse\ifcsname\??accents\string#1\string#2\empty\endcsname
+ \string#1\string#2\empty
+ \else
+ \endcsname#2\csname\??accents % very dirty trick: ignore accent but keep char
+ \fi
+ \endcsname}
+
+\immutable\letvalue{\??accents}\empty
+
+%D Because now have this (\type {\chr} issues a one|-|time warning):
+
+\permanent\protected\def\dodefinecombine#1#2%
+ {\ifcsname\string#1\endcsname\else
+ \permanent\protected\defcsname with#1\endcsname##1{\chr{##1#2}}%
+ \fi}
+
+%D The following dirty trick is needed to catch \asciimath{\^{1/5}log}, although:
+%D do we?
+
+\permanent\protected\def\definecharacter#1 #2 %
+ {\doifelsenumber{\string#2}
+ {\edefcsname\string#1\endcsname{\Uchar#2}}
+ {\protected\defcsname\string#1\endcsname{#2}}}
+
+%D specials: \aa \ae \cc \i \ij \l \o \oe \sz \par
+%D SPECIALS: \AA \AE \CC \j \IJ \L \O \OE \SZ \par
+
+\permanent\protected\def\definecommand#1 #2 %
+ {\protected\defcsname\string#1\endcsname{#2}}
+
+\permanent\protected\def\dodefinecommand#1#2% \O \L \AE ...
+ {% not permanent as these are kind of obsolete
+ \frozen\protected\defcsname\string#1\endcsname{#2}}
+
+%D We set up some things in \LUA:
+
+\clf_defineaccents % one time
+
+%D This defined commands like \type {\withgrave} and \type {\withcaronbelow} and
+%D some of these have aliases. Below ee also alias the traditional one character
+%D accent commands.
+%D
+%D \starttabulate[||||]
+%D \NC \getvalue{agrave} \NC \withgrave {a} \NC \`{a} \NC \NR
+%D \NC \getvalue{aacute} \NC \withacute {a} \NC \'{a} \NC \NR
+%D \NC \getvalue{acircumflex} \NC \withcircumflex {a} \NC \^{a} \NC \NR
+%D \NC \getvalue{atilde} \NC \withtilde {a} \NC \~{a} \NC \NR
+%D \NC \getvalue{amacron} \NC \withmacron {a} \NC \={a} \NC \NR
+%D \NC \getvalue{ebreve} \NC \withbreve {e} \NC \u{e} \NC \NR
+%D \NC \getvalue{cdotaccent} \NC \withdot {c} \NC \.{c} \NC \NR
+%D \NC \getvalue{ediaeresis} \NC \withdieresis {e} \NC \"{e} \NC \NR
+%D \NC \getvalue{uring} \NC \withring {u} \NC \r{u} \NC \NR
+%D \NC \getvalue{uhungarumlaut} \NC \withhungarumlaut{u} \NC \H{u} \NC \NR
+%D \NC \getvalue{ecaron} \NC \withcaron {e} \NC \v{e} \NC \NR
+%D \NC \getvalue{ecedilla} \NC \withcedilla {e} \NC \c{e} \NC \NR
+%D \NC \getvalue{eogonek} \NC \withogonek {e} \NC \k{e} \NC \NR
+%D \stoptabulate
+%D
+%D Now we alias these traditional shortcuts:
+
+\pushoverloadmode
+
+\suggestedalias \` \withgrave
+\suggestedalias \' \withacute
+\suggestedalias \^ \withcircumflex
+\suggestedalias \~ \withtilde
+\suggestedalias \= \withmacron
+\suggestedalias \u \withbreve
+\suggestedalias \. \withdot
+\suggestedalias \" \withdieresis
+\suggestedalias \r \withring
+\suggestedalias \H \withdoubleacute
+\suggestedalias \v \withcaron
+\suggestedalias \c \withcedilla
+\suggestedalias \k \withogonek
+\suggestedalias \d \withdotbelow
+
+\popoverloadmode
+
+% From \type {enco-com} we had these, maybe that's better:
+
+% \aliased\let\AE\AEligature \aliased\let\ae\aeligature
+% \aliased\let\OE\OEligature \aliased\let\oe\oeligature
+% \aliased\let\IJ\IJligature \aliased\let\ij\ijligature
+% \aliased\let\AA\textAngstrom \aliased\let\aa\aring
+% \aliased\let\CC\Ccedilla \aliased\let\cc\ccedilla
+% \aliased\let\L \Lslash \aliased\let\l \lslash
+% \aliased\let\O \Oslash \aliased\let\o \oslash
+% \aliased\let\SZ\Eszett \aliased\let\sz\eszett % \aliased\let\SS\Ssharp
+
+% %D \macros
+% %D {everyuppercase, everylowercase, everysanitize}
+%
+% \newtoks \everyuppercase
+% \newtoks \everylowercase
+% \newtoks \everysanitize
+
+%D Accent handling (try to avoid this):
+
+% \buildtextaccent\greekdasia\greekalphamacron
+% \buildtextaccent\textacute q
+
+%D We can use offsets in \LMTX\ but even that makes no sense because we have
+%D a virtual feature already in \MKIV. These builders are depricated:
+
+\newbox\b_enco_accent
+
+\permanent\protected\def\buildmathaccent#1%
+ {\mathaccent#1 }
+
+\permanent\protected\def\buildtextaccent#1#2% we could do all at the lua end
+ {\dontleavehmode\begingroup % but that's no fun (yet)
+ \setbox\scratchboxone\hbox{#1}% accent
+ \setbox\scratchboxtwo\hbox{#2}% character
+ \scratchheight\dimexpr\ht\scratchboxtwo-\ht\scratchboxone\relax
+ \scratchdepth \dimexpr\dp\scratchboxtwo-\dp\scratchboxone\relax
+ \scratchwidth \wd\scratchboxtwo
+ \hbox to \wd\ifdim\wd\scratchboxone>\wd\scratchboxtwo\scratchboxone\else\scratchboxtwo\fi\bgroup
+ \hss\box\scratchboxtwo\hss
+ \hskip-\scratchwidth
+ \hss
+ \ifdim\ht\scratchboxone>\exheight
+ % top accent
+ \raise\dimexpr\scratchheight+\exheight/3\relax
+ \else
+ \lower-\dimexpr\scratchdepth+\exheight/3\relax
+ \fi
+ \box\scratchboxone
+ \hss
+ \egroup
+ \endgroup}
+
+\permanent\protected\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char
+ {\dontleavehmode % why this align mess
+ \vtop
+ {\forgetall
+ \baselineskip\zeropoint
+ \lineskip#1%
+ \everycr\emptytoks
+ \tabskip\zeropoint
+ \lineskiplimit\zeropoint
+ \setbox0\hbox{#4}%
+ \halign
+ {##\crcr\hbox{#5}\crcr
+ \hidewidth
+ \hskip#2\wd0
+ \hskip-#3\slantperpoint % in plain 1ex * dimenless value
+ \vpack to .2\exheight{\box0\vss}\hidewidth
+ \crcr}}}
+
+\permanent\protected\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}}
+\permanent\protected\def\buildtextbottomdot {\bottomaccent{.25ex}{0}{5}{\textbottomdot}}
+\permanent\protected\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}}
+\permanent\protected\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}}
+\permanent\protected\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}}
+
+\permanent\protected\def\topaccent#1#2#3#4#5% down right slantcorrection accent char
+ {\dontleavehmode
+ \bgroup
+ \setbox0\hbox{#4}%
+ \setbox2\hbox{#5}%
+ \hbox to \wd2 \bgroup
+ \hss\copy2\hss
+ \hskip-\wd2
+ \hss\hskip#2\wd0\hskip-#3\slantperpoint\raise#1\hbox{#4}\hss
+ \egroup
+ \egroup}
+
+\permanent\protected\def\buildtextgrave
+ {\topaccent{0pt}{0}{15}{\textgrave}} % e.g.
+
+\permanent\protected\def\definemathaccent#1 #2%
+ {\setvalue{#1}{\mathaccent#2 }}
+
+% from enco-def:
+
+% \aliased\let\i\dotlessi
+% \aliased\let\j\dotlessj
+
+% \aliased\let\P\paragraphmark \aliased\let\textP\paragraphmark % obsolete (surfaced in bibliographic files)
+% \aliased\let\S\sectionmark \aliased\let\textS\sectionmark % obsolete (surfaced in bibliographic files)
+
+\immutable\def\eszett {ß} \immutable\def\Eszett {SS} \permanent\def\Ssharp{SS}
+\immutable\def\lslash {ł} \immutable\def\Lslash {Ł}
+\immutable\def\dslash {đ} \immutable\def\Dslash {Đ}
+%immutable\def\oslash {ø} %immutable\def\Oslash {Ø} % clashes with math: use \Ostroke
+\immutable\def\dcroat {đ} \immutable\def\Dcroat {Đ}
+\immutable\def\kcedilla{ķ} \immutable\def\Kcedilla{Ķ}
+\immutable\def\lcedilla{ļ} \immutable\def\Lcedilla{Ļ}
+\immutable\def\ncedilla{ņ} \immutable\def\Ncedilla{Ņ}
+\immutable\def\rcedilla{ŗ} \immutable\def\Rcedilla{Ŗ}
+\immutable\def\aumlaut {ä} \immutable\def\Aumlaut {Ä}
+\immutable\def\eumlaut {ë} \immutable\def\Eumlaut {Ë}
+\immutable\def\iumlaut {ï} \immutable\def\Iumlaut {Ï}
+\immutable\def\oumlaut {ö} \immutable\def\Oumlaut {Ö}
+\immutable\def\uumlaut {ü} \immutable\def\Uumlaut {Ü}
+
+%D For old times sake we keep these (obsolete):
+
+\immutable\def\textflorin{ƒ} \immutable\def\florin {ƒ}
+\immutable\def\pound {£} \immutable\def\sterling{£}
+\immutable\def\promille {‰} \immutable\def\permille{‰}
+
+%D These are kind of \TEX\ specific
+
+\pushoverloadmode
+
+\permanent\protected\def\ampersand{\mathortext\mathampersand\textampersand}
+
+\immutable\let\percent\textpercent
+\immutable\let\procent\textpercent
+\immutable\let\dollar \textdollar
+\immutable\let\hash \texthash
+
+\popoverloadmode
+
+%D some more: what with freezing here?
+
+\ifdefined\softhyphen \else
+ \aliased\let\softhyphen\explicitdiscretionary
+\fi
+
+%D The softhyhen is never used but we keep the definition below:
+
+\aliased\let\hyphen \softhyphen % never used
+
+% But we ditch these:
+
+% \def\hyphen {\softhyphen} % never used
+% \def\compoundwordmark {\hyphen}
+% \def\cwm {\hyphen}
+% \def\nonbreakinghyphen{\hyphen}
+% \def\breakinghyphen {\hyphen\prewordbreak}
+
+%D Quotes \unknown\ we keep these funny names because they indicate where we come
+%D from \unknown\ long long ago when we had no real useful names for them. Some
+%D ancient styles might still use them.
+
+\aliased\let\lowerleftsingleninequote \quotesinglebase % ‚
+\aliased\let\lowerleftdoubleninequote \quotedblbase % „
+\aliased\let\lowerrightsingleninequote\quotesinglebase % ‚
+\aliased\let\lowerrightdoubleninequote\quotedblbase % „
+
+\aliased\let\upperleftsingleninequote \quoteright % ’
+\aliased\let\upperleftdoubleninequote \quotedblright % ”
+\aliased\let\upperrightsingleninequote\quoteright % ’
+\aliased\let\upperrightdoubleninequote\quotedblright % ”
+
+\aliased\let\upperleftsinglesixquote \quoteleft % ‘
+\aliased\let\upperleftdoublesixquote \quotedblleft % “
+\aliased\let\upperrightsinglesixquote \quoteleft % ‘
+\aliased\let\upperrightdoublesixquote \quotedblleft % “
+
+\aliased\let\leftsubguillemot \guilsingleleft % ‹
+\aliased\let\rightsubguillemot \guilsingleright % ›
+
+% Some left-overs that will go away!
+
+\permanent\protected\def\textblacksquare{\dontleavehmode\hpack{\vrule\s!width.3\s!em\s!height.4\s!em\s!depth-.1\s!em}}
+%permanent\protected\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}}
+\permanent\protected\def\schwagrave {\buildtextgrave\schwa}
+
+\installcorenamespace{controlspace}
+
+\permanent\protected\def\fallbackcontrolspace % beware, current font, we also need to honor color
+ {\hbox to \interwordspace \bgroup
+ \hss
+ \ifcsname\??controlspace\number\interwordspace\endcsname
+ \csname\??controlspace\number\interwordspace\endcsname
+ \else
+ \enco_fast_control_space_define % only regular
+ \fi
+ \textcontrolspace
+ \hss
+ \egroup}
+
+\protected\def\enco_fast_control_space_define
+ {\scratchdimen\interwordspace
+ \definedfont[LMTypewriter-Regular at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody]% see font-sym.mkiv
+ \gletcsname\??controlspace\number\scratchdimen\endcsname\lastrawfontcall}
+
+\permanent\protected\def\normalcontrolspace
+ {\iffontchar\font\numexpr\expandafter`\textcontrolspace\relax
+ \textcontrolspace
+ \else
+ \fallbackcontrolspace
+ \fi}
+
+\aliased\let\textvisiblespace\normalcontrolspace
+
+\permanent\protected\def\optionalcontrolspace
+ {\iffontchar\font\numexpr\expandafter`\textcontrolspace\relax
+ \textcontrolspace
+ \else
+ \asciispacechar % used for export !
+ \fi}
+
+%D A smaller and bolder variant, more like the math and monospaced ones.
+
+\permanent\protected\def\fakeunderscore
+ {\relax\ifmmode
+ \vrule\s!depth .12\fontexheight\mathstylefont\normalmathstyle\s!width \fontinterwordspace\mathstylefont\normalmathstyle\s!height\zeropoint\relax
+ \else
+ \dontleavehmode\hbox{\vrule\s!depth .12\fontexheight\font\s!width \fontinterwordspace\font\s!height\zeropoint}%
+ \fi}
+
+\permanent\protected\def\fakeunderscores{\enforced\let\_\fakeunderscore}
+\permanent\protected\def\textunderscores{\enforced\let\_\textunderscore}
+
+\textunderscores
+
+\ifdefined\mathunderscore \else \aliased\let\mathunderscore\fakeunderscore \fi
+\ifdefined\textunderscore \else \aliased\let\textunderscore\fakeunderscore \fi
+
+\permanent\protected\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi}
+
+\pushoverloadmode
+ \enforced\let\_\normalunderscore
+\popoverloadmode
+
+%D To be sorted out:
+
+\pushoverloadmode
+
+\permanent\protected\def\textminus
+ {\char
+ \iffontchar\font"2012 "2012 \orelse % figuredash
+ \iffontchar\font"2013 "2013 \orelse % endash
+ \iffontchar\font"2212 "2212 \else % math minus
+ "002D \fi} % hyphen
+
+\permanent\protected\def\textplus
+ {\char"002B } % plus
+
+\popoverloadmode
+
+%D Moved from core-mis:
+
+% \permanent\protected\def\celsius #1{#1\mathematics{^\circ}C}
+% \permanent\protected\def\inch {\mathematics{\prime\prime}} % was: \hbox{\rm\char125\relax}
+% \permanent\protected\def\fraction#1#2{\mathematics{#1\over#2}}
+
+\permanent\protected\def\celsius #1{#1\iffontchar\font`℃℃\else\mathematics{^\circ}C\fi} % 0x2103
+\permanent\protected\def\inch {\iffontchar\font`″″\else\mathematics{\prime\prime}\fi} % 0x2103
+\permanent\protected\def\fraction#1#2{\mathematics{\Uabove exact .125\exheight {#1}{#2}}}
+
+%D \startbuffer
+%D \startlines
+%D x\periods x
+%D x\periods[10]x
+%D x\periods[n=10,symbol={,}]x
+%D x\periods[n=4,symbol={!!},width=1em]x
+%D x\periods[n=4,symbol={!!},width=fit]x
+%D x\periods[n=4,symbol={!!},width=fit,distance=1em]x
+%D x\unknown x
+%D \stoplines
+%D \stopbuffer
+%D
+%D \typbuffer \getbuffer
+
+\installcorenamespace {periods}
+
+\installsetuponlycommandhandler \??periods {periods}
+
+\setupperiods
+ [\c!n=3,
+ \c!width=.5\emwidth, % can also be \v!fit
+ \c!distance=.25\emwidth,
+ \c!symbol=.]
+
+\permanent\protected\def\periods
+ {\dontleavehmode
+ \hbox\bgroup
+ \doifelsenextoptional\enco_periods_yes\enco_periods_nop}
+
+\protected\def\enco_periods_yes[#1]%
+ {\doifelseassignment{#1}
+ {\setupcurrentperiods[#1]%
+ \scratchcounter\periodsparameter\c!n}
+ {\doifelsenothing{#1}
+ {\scratchcounter\periodsparameter\c!n}%
+ {\scratchcounter#1}}%
+ \enco_periods_finish}
+
+\protected\def\enco_periods_nop
+ {\scratchcounter\periodsparameter\c!n
+ \enco_periods_finish}
+
+\protected\def\enco_periods_finish
+ {\edef\p_width{\periodsparameter\c!width}%
+ \ifx\p_width\v!fit
+ \enco_periods_finish_fit
+ \else
+ \enco_periods_finish_width
+ \fi
+ \egroup}
+
+\protected\def\enco_periods_finish_width
+ {\setbox\scratchbox\hbox to \p_width
+ {\hss\periodsparameter\c!symbol\hss}%
+ \dorecurse\scratchcounter{\copy\scratchbox}}
+
+\protected\def\enco_periods_finish_fit
+ {\edef\p_symbol{\periodsparameter\c!symbol}%
+ \scratchdistance\periodsparameter\c!distance
+ \hskip\scratchdistance
+ \dorecurse\scratchcounter{\p_symbol\hskip\scratchdistance}}
+
+\permanent\protected\def\unknown
+ {\dontleavehmode
+ \hbox\bgroup
+ \enco_periods_nop}
+
+%D Left-overs:
+
+\appendtoks
+ \enforced\let\buildtextaccent\secondoftwoarguments
+\to \everysimplifycommands
+
+%D See enco-ini.mkivc for a definition of the obsolete \type {\t}.
+
+\protect \endinput