diff options
Diffstat (limited to 'tex/context/base/enco-ini.mkiv')
-rw-r--r-- | tex/context/base/enco-ini.mkiv | 536 |
1 files changed, 536 insertions, 0 deletions
diff --git a/tex/context/base/enco-ini.mkiv b/tex/context/base/enco-ini.mkiv new file mode 100644 index 000000000..da1892faf --- /dev/null +++ b/tex/context/base/enco-ini.mkiv @@ -0,0 +1,536 @@ +%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 / Hans Hagen \& Ton Otten}] +%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 th eoriginal enco-ini.tex +%D file. For more details you might want to study the \MKII\ file +%D but since \LUATEX\ is unicode inside we need less code. + +% When dealing with characters we have four cases to take into account +% when moving from mkii to mkiv: + +% 1. <byte 200> => ref to slot 200 in current font +% 2. \char 200 => ref to slot 200 in current font +% 3. <active 200> => can (e.g.) map to another slot in current font +% 4. \namedglyph => can map to some slot in some font + +% Using case 2 for special characters is doomed to fail because we are not going +% to intercept these on the fly as happens automatically with traditional font +% encoding handling. We could do that in a node pass but it's not worth the effort +% because we seldom use this case in a document source. + +% We can consider using utf as internal format for mkii. The main reason for not +% doing this before was that it was slow. On the other hand, it would make dealing +% with utility files easier. However, we've now kind of frozen mkii. + +\writestatus{loading}{ConTeXt Encoding Macros / Initialization} + +\unprotect + +%D Quite some commands are now obsolete. We keep only a few commands +%D around, just in case they are used in styles (and in for instance +%D symb and xtag files). + +\unexpanded\def\startencoding [#1]{} % used in symb +\let\stopencoding \relax +\unexpanded\def\setupencoding [#1]{} +\def\enablemapping [#1]{} +\def\enableencoding[#1]{} + +\def\currentencoding{utf} +\def\currentmapping {utf} +\let\defaultencoding\s!default + +% todo: + +% \def\showaccents {\f!encodingprefix\s!run} +% \def\showcharacters {\f!encodingprefix\s!run} +% \def\showcharacterbounds {\f!encodingprefix\s!run} +% \def\showhyphenations {\f!encodingprefix\s!run} +% \def\showmapping {\f!encodingprefix\s!run} + +%D \macros +%D {defineaccent, definecharacter, definecommand} + +\unexpanded\def\defineaccent#1 #2 #3 % + {\setevalue{\string#1}{\noexpand\dohandleaccent{\string#1}}% + \setvalue{\??ac\string#1\string#2}{#3}} + +\def\dohandleaccent#1#2% + {\csname\??ac\string#1\string#2\empty\endcsname} + +\unexpanded\def\definecharacter#1 #2 % + {\doifnumberelse{\string#2} + {\setevalue{\string#1}{\utfchar{#2}}} % or {\expandafter\chardef\csname#1\endcsname#2\relax} + {\setuvalue {\string#1}{#2}}} + +\unexpanded\def\definecommand#1 #2 % + {\setuvalue{\string#1}{#2}} + +%D \macros +%D {everyuppercase, EveryUppercase, +%D everyuppercase, EveryUppercase, +%D everysanitize, EverySanitize} + +\newevery \everyuppercase \EveryUppercase +\newevery \everylowercase \EveryLowercase +\newevery \everysanitize \EverySanitize + +%D Some saved meanings (not really needed): + +\let\textaccent \accent +\let\normaltextaccent\accent + +%D Accent handling (try to avoid this): + +\newbox\accenttestbox + +\def\buildmathaccent#1% + {\mathaccent#1 } + +\unexpanded\def\buildtextaccent#1#2% + {\begingroup + \global\setbox\accenttestbox\hbox{#1}% + \scratchcounter\ctxlua{characters.charcode(\number\accenttestbox)}% + \ifcase\scratchcounter\else\accent\scratchcounter\fi + \relax#2% + \endgroup} + +\unexpanded\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 + \vbox to .2ex{\box0\vss}\hidewidth + \crcr}}} + +\unexpanded\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}} +\unexpanded\def\buildtextbottomdot {\bottomaccent{.25ex}{0}{5}{\textbottomdot}} +\unexpanded\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}} +\unexpanded\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}} +\unexpanded\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}} + +\let\d\buildtextbottomdot + +\unexpanded\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} + +\def\buildtextgrave{\topaccent{0pt}{0}{15}{\textgrave}} % e.g. + +\unexpanded\def\definemathaccent#1 #2% + {\setvalue{#1}{\mathaccent#2 }} + +%D Math (will move): + +\definemathaccent acute \mathacute +\definemathaccent grave \mathgrave +\definemathaccent ddot \mathddot +\definemathaccent tilde \mathtilde +\definemathaccent bar \mathbar +\definemathaccent breve \mathbreve +\definemathaccent check \mathcheck +\definemathaccent hat \mathhat +\definemathaccent vec \mathvec +\definemathaccent dot \mathdot +\definemathaccent widetilde \mathwidetilde +\definemathaccent widehat \mathwidehat + +% from enco-com: + +\def\AA{\Aring} +\def\aa{\aring} +\def\AE{\AEligature} +\def\ae{\aeligature} +\def\CC{\Ccedilla} +\def\cc{\ccedilla} +\def \L{\Lstroke} +\def \l{\lstroke} +\def \O{\Ostroke} +\def \o{\ostroke} +\def\OE{\OEligature} +\def\oe{\oeligature} +\def\SZ{\Ssharp} +\def\sz{\ssharp} +\def\SS{\ssharp} +\def\IJ{\IJligature} +\def\ij{\ijligature} +\def \i{\dotlessi} +\def \j{\dotlessj} + +% from enco-def: + +\def\dotlessI {I} +\def\dotlessJ {J} + +\def\Ssharp {SS} + +\def\eszett {\ssharp} +\def\Eszett {\Ssharp} + +\def\lslash {\lstroke} +\def\Lslash {\Lstroke} +\def\dslash {\dstroke} +\def\Dslash {\Dstroke} +\def\oslash {\ostroke} +\def\Oslash {\Ostroke} +\def\dcroat {\dstroke} +\def\Dcroat {\Dstroke} + +\def\Kcedilla {\Kcommaaccent} +\def\kcedilla {\kcommaaccent} +\def\Lcedilla {\Lcommaaccent} +\def\lcedilla {\lcommaaccent} +\def\Ncedilla {\Ncommaaccent} +\def\ncedilla {\ncommaaccent} +\def\Rcedilla {\Rcommaaccent} +\def\rcedilla {\rcommaaccent} + +\def\S {\sectionmark} +\def\P {\paragraphmark} + +\def\aumlaut {\adiaeresis} +\def\eumlaut {\ediaeresis} +\def\iumlaut {\idiaeresis} +\def\oumlaut {\odiaeresis} +\def\uumlaut {\udiaeresis} +\def\Aumlaut {\Adiaeresis} +\def\Eumlaut {\Ediaeresis} +\def\Iumlaut {\Idiaeresis} +\def\Oumlaut {\Odiaeresis} +\def\Uumlaut {\Udiaeresis} + +% for latex users + +\def\textS {\sectionmark} +\def\textP {\paragraphmark} + +% for old times sake + +\def\textflorin{\fhook} +\def\florin {\textflorin} +\def\dollar {\textdollar} +\def\pound {\textsterling} +\def\sterling {\textsterling} +\def\promille {\perthousand} +\def\permille {\perthousand} +\def\procent {\percent} +\def\permine {\fakepermine} + +% some more + +\def\hyphen {\softhyphen} +\def\compoundwordmark {\hyphen} +\def\cwm {\hyphen} +\def\nonbreakinghyphen{\hyphen} +\def\breakinghyphen {\hyphen\prewordbreak} + +% quotes + +\def\lowerleftsingleninequote {\quotesinglebase} +\def\lowerleftdoubleninequote {\quotedblbase} +\def\lowerrightsingleninequote {\quotesinglebase} +\def\lowerrightdoubleninequote {\quotedblbase} + +\def\upperleftsingleninequote {\quoteright} +\def\upperleftdoubleninequote {\quotedblright} +\def\upperrightsingleninequote {\quoteright} +\def\upperrightdoubleninequote {\quotedblright} + +\def\upperleftsinglesixquote {\quoteleft} +\def\upperleftdoublesixquote {\quotedblleft} +\def\upperrightsinglesixquote {\quoteleft} +\def\upperrightdoublesixquote {\quotedblleft} + +\def\leftsubguillemot {\guilsingleleft} +\def\rightsubguillemot {\guilsingleright} + +% obsolete: + +% \greekleftquot {[obsolete]} +% \greekrightquot {[obsolete]} +% \greekapostrophos {[obsolete]} +% \greekupsilondialytika{[obsolete]} +% \Ycaron {[obsolete]} +% \ycaron {[obsolete]} + +% to be done in char-def: + +% \definecharacter cyrillicGUP {GUP} +% \definecharacter cyrillicGHCRS {GHCRS} +% \definecharacter cyrillicZHDSC {ZHDSC} +% \definecharacter cyrillicKDSC {KDSC} +% \definecharacter cyrillicKBEAK {KBEAK} +% \definecharacter cyrillicKVCRS {KVCRS} +% \definecharacter cyrillicNG {NG} +% \definecharacter cyrillicOTLD {OTLD} +% \definecharacter cyrillicY {Y} +% \definecharacter cyrillicYHCRS {YHCRS} +% \definecharacter cyrillicHDSC {HDSC} +% \definecharacter cyrillicCHVCRS {CHVCRS} +% \definecharacter cyrillicCHRDSC {CHRDSC} +% \definecharacter cyrillicQ {Q} +% \definecharacter cyrillicW {W} +% +% \definecharacter cyrillicgup {gup} +% \definecharacter cyrillicghcrs {ghcrs} +% \definecharacter cyrilliczhdsc {zhdsc} +% \definecharacter cyrillickdsc {kdsc} +% \definecharacter cyrillickbeak {kbeak} +% \definecharacter cyrillickvcrs {kvcrs} +% \definecharacter cyrillicng {ng} +% \definecharacter cyrillicotld {otld} +% \definecharacter cyrillicy {y} +% \definecharacter cyrillicyhcrs {yhcrs} +% \definecharacter cyrillichdsc {hdsc} +% \definecharacter cyrillicchvcrs {chvcrs} +% \definecharacter cyrillicchrdsc {chrdsc} +% \definecharacter cyrillicq {q} +% \definecharacter cyrillicw {w} + +% \definecharacter softhyphen 45 +% \definecharacter compoundwordmark 23 + +% left-overs (some day in private unicode space, so that we can roundtrip) + +\unexpanded\def\textblacksquare {\dontleavehmode\hbox{\vrule\!!width.3\s!em\!!height.4\s!em\!!depth-.1\s!em}} +\unexpanded\def\schwa {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}} +\unexpanded\def\schwagrave {\buildtextgrave\schwa} + +\chardef\textcontrolspace"2423 + +\unexpanded\def\fallbackcontrolspace + %{\getglyph{ComputerModernMono}\textcontrolspace} + {\getglyph{LMTypewriter10-Regular}\textcontrolspace} + +\unexpanded\def\normalcontrolspace + {\iffontchar\font\textcontrolspace + \textcontrolspace + \else + \fallbackcontrolspace + \fi} + +\let\textvisiblespace\normalcontrolspace + +\unexpanded\def\fastcontrolspace % no glyph resolving after first (use grouped) + {\dofastcontrolspace} + +\def\dofastcontrolspace + {\iffontchar\font\textcontrolspace + \nofastfallbackcontrolspace + \else + \dofastfallbackcontrolspace + \fi + \dofastcontrolspace} + +\newbox\controlspacebox + +\def\nofastfallbackcontrolspace + {\let\dofastcontrolspace\textcontrolspace} + +\def\dofastfallbackcontrolspace + {\setbox\controlspacebox\hbox{\space}% + \setbox\controlspacebox\hbox to \wd\controlspacebox{\hss\fallbackcontrolspace\hss}% + \let\dofastcontrolspace\flushcontrolspacebox} + +\def\flushcontrolspacebox + {\copy\controlspacebox} + +% a few defaults (\<whatever>{}), we really need the verbose \empty as it will be +% stringified + +\defineaccent ^ {\empty} {\textcircumflex} +\defineaccent ` {\empty} {\textgrave} +\defineaccent ~ {\empty} {\texttilde} +\defineaccent " {\empty} {\textdiaeresis} +\defineaccent ' {\empty} {\textacute} +\defineaccent . {\empty} {\textdotaccent} +\defineaccent = {\empty} {\textmacron} +\defineaccent c {\empty} {\textcedilla} +\defineaccent H {\empty} {\texthungarumlaut} +\defineaccent k {\empty} {\textogonek} +\defineaccent r {\empty} {\textring} +\defineaccent u {\empty} {\textbreve} +\defineaccent v {\empty} {\textcaron} + +% from enco-acc: +% +% we should to this at the lua end and share code .. + +\defineaccent ^ A {\Acircumflex} \defineaccent ^ a {\acircumflex} +\defineaccent ^ C {\Ccircumflex} \defineaccent ^ c {\ccircumflex} +\defineaccent ^ E {\Ecircumflex} \defineaccent ^ e {\ecircumflex} +\defineaccent ^ G {\Gcircumflex} \defineaccent ^ g {\gcircumflex} +\defineaccent ^ H {\Hcircumflex} \defineaccent ^ h {\hcircumflex} +\defineaccent ^ I {\Icircumflex} \defineaccent ^ i {\icircumflex} \defineaccent ^ {\i} {\icircumflex} +\defineaccent ^ J {\Jcircumflex} \defineaccent ^ j {\jcircumflex} \defineaccent ^ {\j} {\jcircumflex} +\defineaccent ^ O {\Ocircumflex} \defineaccent ^ o {\ocircumflex} +\defineaccent ^ S {\Scircumflex} \defineaccent ^ s {\scircumflex} +\defineaccent ^ U {\Ucircumflex} \defineaccent ^ u {\ucircumflex} +\defineaccent ^ W {\Wcircumflex} \defineaccent ^ w {\wcircumflex} +\defineaccent ^ Y {\Ycircumflex} \defineaccent ^ y {\ycircumflex} + +\defineaccent ` A {\Agrave} \defineaccent ` a {\agrave} +\defineaccent ` E {\Egrave} \defineaccent ` e {\egrave} +\defineaccent ` I {\Igrave} \defineaccent ` i {\igrave} \defineaccent ` {\i} {\igrave} +\defineaccent ` O {\Ograve} \defineaccent ` o {\ograve} +\defineaccent ` U {\Ugrave} \defineaccent ` u {\ugrave} +\defineaccent ` Y {\Ygrave} \defineaccent ` y {\ygrave} + +\defineaccent ~ A {\Atilde} \defineaccent ~ a {\atilde} +\defineaccent ~ I {\Itilde} \defineaccent ~ i {\itilde} \defineaccent ~ {\i} {\itilde} +\defineaccent ~ O {\Otilde} \defineaccent ~ o {\otilde} +\defineaccent ~ U {\Utilde} \defineaccent ~ u {\utilde} +\defineaccent ~ N {\Ntilde} \defineaccent ~ n {\ntilde} + +\defineaccent " A {\Adiaeresis} \defineaccent " a {\adiaeresis} +\defineaccent " E {\Ediaeresis} \defineaccent " e {\ediaeresis} +\defineaccent " I {\Idiaeresis} \defineaccent " i {\idiaeresis} \defineaccent " {\i} {\idiaeresis} +\defineaccent " O {\Odiaeresis} \defineaccent " o {\odiaeresis} +\defineaccent " U {\Udiaeresis} \defineaccent " u {\udiaeresis} +\defineaccent " Y {\Ydiaeresis} \defineaccent " y {\ydiaeresis} + +\defineaccent ' A {\Aacute} \defineaccent ' a {\aacute} +\defineaccent ' C {\Cacute} \defineaccent ' c {\cacute} +\defineaccent ' E {\Eacute} \defineaccent ' e {\eacute} +\defineaccent ' I {\Iacute} \defineaccent ' i {\iacute} \defineaccent ' {\i} {\iacute} +\defineaccent ' L {\Lacute} \defineaccent ' l {\lacute} +\defineaccent ' N {\Nacute} \defineaccent ' n {\nacute} +\defineaccent ' O {\Oacute} \defineaccent ' o {\oacute} +\defineaccent ' R {\Racute} \defineaccent ' r {\racute} +\defineaccent ' S {\Sacute} \defineaccent ' s {\sacute} +\defineaccent ' U {\Uacute} \defineaccent ' u {\uacute} +\defineaccent ' Y {\Yacute} \defineaccent ' y {\yacute} +\defineaccent ' Z {\Zacute} \defineaccent ' z {\zacute} + +\defineaccent . C {\Cdotaccent} \defineaccent . c {\cdotaccent} +\defineaccent . E {\Edotaccent} \defineaccent . e {\edotaccent} +\defineaccent . G {\Gdotaccent} \defineaccent . g {\gdotaccent} +\defineaccent . I {\Idotaccent} \defineaccent . i {\idotaccent} \defineaccent . {\i} {\idotaccent} +\defineaccent . Z {\Zdotaccent} \defineaccent . z {\zdotaccent} + +\defineaccent = A {\Amacron} \defineaccent = a {\amacron} +\defineaccent = E {\Emacron} \defineaccent = e {\emacron} +\defineaccent = I {\Imacron} \defineaccent = i {\imacron} \defineaccent = {\i} {\imacron} +\defineaccent = O {\Omacron} \defineaccent = o {\omacron} +\defineaccent = U {\Umacron} \defineaccent = u {\umacron} + +\defineaccent c C {\Ccedilla} \defineaccent c c {\ccedilla} +\defineaccent c K {\Kcedilla} \defineaccent c k {\kcedilla} +\defineaccent c L {\Lcedilla} \defineaccent c l {\lcedilla} +\defineaccent c N {\Ncedilla} \defineaccent c n {\ncedilla} +\defineaccent c R {\Rcedilla} \defineaccent c r {\rcedilla} +\defineaccent c S {\Scedilla} \defineaccent c s {\scedilla} +\defineaccent c T {\Tcedilla} \defineaccent c t {\tcedilla} + +\defineaccent H O {\Ohungarumlaut} \defineaccent H o {\ohungarumlaut} +\defineaccent H u {\uhungarumlaut} \defineaccent H U {\Uhungarumlaut} + +\defineaccent k A {\Aogonek} \defineaccent k a {\aogonek} +\defineaccent k E {\Eogonek} \defineaccent k e {\eogonek} +\defineaccent k I {\Iogonek} \defineaccent k i {\iogonek} +\defineaccent k U {\Uogonek} \defineaccent k u {\uogonek} + +\defineaccent r A {\Aring} \defineaccent r a {\aring} +\defineaccent r U {\Uring} \defineaccent r u {\uring} + +\defineaccent u A {\Abreve} \defineaccent u a {\abreve} +\defineaccent u E {\Ebreve} \defineaccent u e {\ebreve} +\defineaccent u G {\Gbreve} \defineaccent u g {\gbreve} +\defineaccent u I {\Ibreve} \defineaccent u i {\ibreve} \defineaccent u {\i} {\ibreve} +\defineaccent u O {\Obreve} \defineaccent u o {\obreve} +\defineaccent u U {\Ubreve} \defineaccent u u {\ubreve} + +\defineaccent v C {\Ccaron} \defineaccent v c {\ccaron} +\defineaccent v D {\Dcaron} \defineaccent v d {\dcaron} +\defineaccent v E {\Ecaron} \defineaccent v e {\ecaron} +\defineaccent v L {\Lcaron} \defineaccent v l {\lcaron} +\defineaccent v N {\Ncaron} \defineaccent v n {\ncaron} +\defineaccent v R {\Rcaron} \defineaccent v r {\rcaron} +\defineaccent v S {\Scaron} \defineaccent v s {\scaron} +\defineaccent v T {\Tcaron} \defineaccent v t {\tcaron} +\defineaccent v Z {\Zcaron} \defineaccent v z {\zcaron} + +% from enco-mis: + +\def\fakepercent + {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle0}}} + +\def\fakeperthousand + {\mathematics{^{\scriptscriptstyle0}\kern-.25em/\kern-.2em_{\scriptscriptstyle00}}} + +\def\fakepermine + {\dontleavehmode + \bgroup + \setbox\scratchbox\hbox + {\mathematics{+}}% + \hbox to \wd\scratchbox + {\hss + \mathematics{^{\scriptscriptstyle-}\kern-.4em/\kern-.3em_{\scriptscriptstyle-}}% + \hss}% + \egroup} + +%D A smaller and bolder variant, more like the math and monospaced ones. + +% \def\fakeunderscore +% {\dontleavehmode\hbox % was \leavevmode +% {\setbox\scratchbox\hbox{(}% +% \scratchdimen.2\dp\scratchbox +% \setbox\scratchbox\hbox{\space}% +% \vrule +% \!!depth \scratchdimen +% \!!width \wd\scratchbox +% \!!height\zeropoint}} + +% \startTEXpage +% \ruledhbox{\strut$1\fakeunderscore^{1\fakeunderscore}$} +% \ruledhbox{\strut$1\xfakeunderscore^{1\xfakeunderscore}$} +% \stopTEXpage + +\def\fakeunderscore + {\relax\ifmmode + \vrule\!!depth .12\fontexheight\mathstylefont\normalmathstyle\!!width \fontinterwordspace\mathstylefont\normalmathstyle\!!height\zeropoint\relax + \else + \dontleavehmode\hbox{\vrule\!!depth .12\fontexheight\font\!!width \fontinterwordspace\font\!!height\zeropoint}% + \fi} + +\def\fakeunderscores{\let\_\fakeunderscore} +\def\textunderscores{\let\_\textunderscore} + +\textunderscores + +\ifx\mathunderscore\undefined \let\mathunderscore\fakeunderscore \fi +\ifx\textunderscore\undefined \let\textunderscore\fakeunderscore \fi + +\unexpanded\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi} + +\let\_\normalunderscore + +\protect \endinput |