diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/enco-ini.tex')
-rw-r--r-- | Master/texmf-dist/tex/context/base/enco-ini.tex | 1228 |
1 files changed, 0 insertions, 1228 deletions
diff --git a/Master/texmf-dist/tex/context/base/enco-ini.tex b/Master/texmf-dist/tex/context/base/enco-ini.tex deleted file mode 100644 index 4c85bac5b25..00000000000 --- a/Master/texmf-dist/tex/context/base/enco-ini.tex +++ /dev/null @@ -1,1228 +0,0 @@ -%D \module -%D [ file=enco-ini, -%D version=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 Quite some code will be moved to the mk files once we're ready -%D for it. - -%D This module is a reimplementation of the module that handled -%D composed characters and non \ASCII\ characters. The changed -%D are not that fundamental, and mainly concerns moving -%D definitions of specific glyphs and accents to other files as -%D well as moving plain handling of accents to this module -%D instead of overloading plain \TEX\ commands. - -%D Patterns are kind of mixed with font encodings and -%D mappings. Alas. - -\ifx\synchronizepatterns\undefined \let\synchronizepatterns\relax \fi - -%D While dealing with input (the text source) and output (the -%D glyphs), encoding comes into view. To summarize a few: -%D -%D \startitemize -%D \item Bytes in the input file are mapped to an internal -%D representation. An~\type {a} often stays an~\type {a}, -%D but~\type {\"e} can become either one code or become -%D two codes (ending in overlapping glyphs). -%D \item Characters can be made active and mapped onto another -%D character. -%D \item When changing case, characters are mapped onto -%D themselves, their case||counterpart or a reasonable -%D alternative, like~\"e onto~e. -%D \item Single character representations in a \DVI\ file can -%D be mapped onto one or more characters, either of not -%D in more than one font file (virtual fonts). -%D \item In the final format, fonts collections can be -%D partially embedded, thereby losing the one||to||one -%D relation between several instances of one font. -%D \item For special purposes, individual characters should be -%D mapped onto a dedicated encoding vector, for instance -%D \PDF\ document encoding. -%D \stopitemize -%D -%D These and other kind of mappings are to be dealt with, and -%D the exact way of dealing often depends on the language to be -%D typeset. - -\writestatus{loading}{Context Encoding Macros (ini)} - -\unprotect - -\startmessages dutch library: encodings - title: encoding - 1: codering -- - 2: codering -- wordt geladen - 3: onbekende codering -- -\stopmessages - -\startmessages english library: encodings - title: encoding - 1: coding -- - 2: coding -- is loaded - 3: unknown coding -- -\stopmessages - -\startmessages german library: encodings - title: Kodierung - 1: Kodierung -- - 2: Kodierung -- ist geladen - 3: Unbekannte Kodierung -- -\stopmessages - -\startmessages czech library: encodings - title: kodovani - 1: kodovani -- - 2: je nacteno kodovani -- - 3: nezname kodovani -- -\stopmessages - -\startmessages italian library: encodings - title: codifica - 1: codifica -- - 2: codifica -- caricata - 3: codifica sconosciuta -- -\stopmessages - -\startmessages norwegian library: encodings - title: koding - 1: koding -- - 2: koding -- er lest inn - 3: ukjent koding -- -\stopmessages - -\startmessages romanian library: encodings - title: codificari - 1: codificarea -- - 2: codificarea -- este Encarcata - 3: codificarea -- este necunoscuta -\stopmessages - -\startmessages french library: encodings - title: encodage - 1: encodage -- - 2: l'encodage -- est chargé - 3: encodage -- inconnu -\stopmessages - -%D First we define a few local or not yet initialized constants. - -\def\@map@{@m@ap@} % mapping prefix -\def\@fha@{@f@ha@} % font prefix -\def\@cas@{@c@as@} % casecom prefix - -\ifx\currentlanguage\undefined \let\currentlanguage\s!en \fi - -%D \macros -%D {setupencoding} -%D -%D The following setup command is used to tune encoding -%D handling. - -\def\setupencoding - {\dosingleargument\dosetupencoding} - -\def\dosetupencoding[#1]% - {\getparameters[\??ec][#1]% - \edef\defaultencoding - {\ifx\@@ecdefault\empty\s!default\else\@@ecdefault\fi}} - -%D \macros -%D {useencoding} -%D -%D Encodings things are defined in separate files and are -%D loaded only once, using: -%D -%D \showsetup{useencoding} - -\def\douseencoding#1% - {\doifundefined{\c!file\f!encodingprefix#1}% - {\letvalue{\c!file\f!encodingprefix#1}\empty - \makeshortfilename[\truefilename{\f!encodingprefix#1}]% - \startreadingfile - \readsysfile\shortfilename - {\showmessage\m!encodings2{#1}} - {\showmessage\m!encodings3{#1}}% - \stopreadingfile}} - -\def\useencoding[#1]% - {\processcommalist[#1]\douseencoding} - -%D \macros -%D {startmapping,enablemapping} -%D -%D In order to process patterns, convert from lower to -%D uppercase and vise versa and some more, we provide a -%D mechanism to define mappings. The first real application -%D of this command was: -%D -%D \starttyping -%D \startmapping [something] -%D \definecasemap 165 181 165 -%D \definecasemap 171 187 171 -%D ... -%D \defineuppercasecom \i {I} -%D \defineuppercasecom \l \L -%D \definelowercasecom \AE \ae -%D ... -%D \stopmapping -%D \stoptyping -%D -%D So, character 165 becomes 181 in uppercase and 165 in -%D lowercase. A mapping is activated with \type {\enablemapping}. - -\def\startsavingmappingtoks#1% - {\bgroup - \edef\charactermapping{@#1@}% - \checkmappingtoks - \setmappingtoks - \the\mappingtoks} - -\def\stopsavingmappingtoks - {\global\mappingtoks\emptytoks - \dostepwiserecurse{0}{255}\plusone - {\edef\@@expanded - {\the\mappingtoks - \ifnum\recurselevel>127 - \noexpand\settoletterunlessactive{\recurselevel}% - \fi - \lccode\recurselevel\ifnum\lccode\recurselevel=\zerocount\zerocount\else\space\the\lccode\recurselevel\space\fi - \uccode\recurselevel\ifnum\uccode\recurselevel=\zerocount\zerocount\else\space\the\uccode\recurselevel\space\fi - \ifnum\sfcode\recurselevel=\plusthousand\else\sfcode\recurselevel=\the\sfcode\recurselevel\space\fi - }% - \global\mappingtoks\expandafter{\@@expanded}}% - \egroup - \let\enabledmapping\empty - \enablemapping[\currentmapping]} - -\def\startmapping[#1]% - {\startsavingmappingtoks{#1}} - -\def\stopmapping - {\stopsavingmappingtoks} - -\def\optimizemapping[#1]% - {\startsavingmappingtoks{#1}% - % nothing, just an automatic cleanup - \stopsavingmappingtoks - % we need to resync - %\let\enabledmapping\relax - }%\enablemapping[\currentmapping]} - -\def\setmappingtoks - {\@EA\let\@EA\mappingtoks\csname\@map@\charactermapping\endcsname - \@EA\let\@EA\casecomtoks\csname\@cas@\charactermapping\endcsname} - -\def\checkmappingtoks - {\ifundefined{\@map@\charactermapping}% - \expandafter\newtoks\csname\@map@\charactermapping\endcsname - \fi - \ifundefined{\@cas@\charactermapping}% - \expandafter\newtoks\csname\@cas@\charactermapping\endcsname - \fi} - -\def\definecasemap #1 #2 #3 % code lower upper - {\doifelse{#2}{to} - {\presetcaserange{#1}{#3}} - {\lccode#1=#2\relax - \uccode#1=#3\relax}% - \ignorespaces} - -%D Saves a few tokens - -\def\definecaseswap #1 #2 % lower upper - {\lccode#1=#1\relax - \uccode#2=#2\relax - \lccode#2=#1\relax - \uccode#1=#2\relax - \ignorespaces} - -\def\definecaseself #1 % lower=upper=self - {\lccode#1=#1\relax - \uccode#1=#1\relax - \ignorespaces} - -%D Watch the \type {\definecasemap 127 to 255} option! -%D Dedicated to Taco there is also: - -\def\definecasemaps #1 to #2 lc #3 uc #4 % from to lc+ uc+ - {\dostepwiserecurse{#1}{#2}\plusone - {\scratchcounter\recurselevel\advance\scratchcounter#3\lccode\recurselevel=\scratchcounter - \scratchcounter\recurselevel\advance\scratchcounter#4\uccode\recurselevel=\scratchcounter}% - \ignorespaces} - -%D This can be used like: -%D -%D \starttyping -%D \definecasemaps 128 to 156 lc 32 uc 0 -%D \definecasemaps 160 to 188 lc -32 uc 0 -%D \definecasemaps 160 to 188 lc -32 uc 0 -%D \definecasemaps 192 to 255 lc 32 uc 0 -%D \stoptyping -%D -%D and saves a lot of typing (copying). - -\def\resetcaserange #1 to #2 - {\dostepwiserecurse{#1}{#2}\plusone - {\lccode\recurselevel\zerocount - \uccode\recurselevel\zerocount}% - \ignorespaces} - -\def\presetcaserange#1#2% could be pre-expanded - {\dostepwiserecurse{#1}{#2}\plusone - {\lccode\recurselevel=\recurselevel - \uccode\recurselevel=\recurselevel}% - \ignorespaces} - -\def\setcasemap #1 #2 #3 % - {\settoletterunlessactive{#1}% - \lccode #1=#2 - \uccode #1=#3 } - -\def\setcaseswap #1 #2 % - {\settoletterunlessactive{#1}% - \settoletterunlessactive{#2}% - \lccode #1=#1 - \uccode #2=#2 - \lccode #2=#1 - \uccode #1=#2 } - -\def\setcaseself #1 % - {\settoletterunlessactive{#1}% - \lccode #1=#1 - \uccode #1=#1 } - -\def\definespacemap #1 #2 % code sfcode - {\sfcode#1=#2% - \ignorespaces} - -\def\setspacemap #1 #2 % - {\settootherunlessactive{#1}% - %\lccode #1=\zerocount - %\uccode #1=\zerocount - \sfcode #1=#2 } - -\def\defineuppercasecom#1#2% - {\global\casecomtoks\expandafter{\the\casecomtoks\setuppercasecom#1{#2}}% - \ignorespaces} - -\def\definelowercasecom#1#2% - {\global\casecomtoks\expandafter{\the\casecomtoks\setlowercasecom#1{#2}}% - \ignorespaces} - -\let\setuppercasecom\gobbletwoarguments -\let\setlowercasecom\gobbletwoarguments - -\def\setcasecom#1#2{\def#1{#2}} - -\let\enabledmapping\empty % indirect, needed to handle default too - -\def\enablemapping[#1]% - {\edef\charactermapping{@#1@}% - \ifx\enabledmapping\charactermapping \else - \doifdefined{\@map@\charactermapping} - {%\expandafter\showthe\csname\@map@\charactermapping\endcsname\endcsname - \the\csname\@map@\charactermapping\endcsname}% - % == \the\executeifdefined{\@map@\charactermapping}\emptytoks - \edef\enabledmapping{\charactermapping}% - \enablelanguagespecifics[\currentlanguage]% new - % \edef\enabledmapping{\charactermapping\currentlanguage}% can be comma list - \fi - \synchronizepatterns} - -% on behalf of font switching: - -\def\fastenablemapping#1% - {\edef\charactermapping{@#1@}% - \ifx\enabledmapping\charactermapping \else - \@EA\ifx\csname\@map@\charactermapping\endcsname\relax\else - \the\csname\@map@\charactermapping\endcsname - \fi - % == \the\executeifdefined{\@map@\charactermapping}\emptytoks - \let\enabledmapping\charactermapping - \enablelanguagespecifics[\currentlanguage]% to faster - \fi} - -%D This macro wil be implemented in \type {lang-ini.tex}. - -\ifx\enablelanguagespecifics\undefined - \def\enablelanguagespecifics[#1]{} -\fi - -%D Further on we have to take some precautions when dealing -%D with special characters like~\type{~}, \type{_} -%D and~\type{^}, so let us define ourselve some handy macros -%D first. - -\def\protectfontcharacters - {\edef\unprotectfontcharacters - {\catcode`\noexpand ~=\the\catcode`~\relax - \catcode`\noexpand _=\the\catcode`_\relax - \catcode`\noexpand ^=\the\catcode`^\relax}% - \catcode`~=\@@letter - \catcode`_=\@@letter - \catcode`^=\@@letter\relax} - -%D The completeness of the Computer Modern Roman typefaces -%D makes clear how incomplete other faces are. To honour 7~bit -%D \ASCII, these fonts were designed using only the first 127 -%D values of the 256 ones that can be presented by one byte. -%D Nowadays 8~bit character codings are more common, mainly -%D because they permit us to predefine some composed -%D characters, which are needed in most european languages. -%D -%D Supporting more than the standard \TEX\ encoding vector -%D |<|which in itself is far from standard and differs per -%D font|>| puts a burden on the fonts mechanism. The \CONTEXT\ -%D mechanism is far from complete, but can handle several -%D schemes at once. The main problem lays in the accented -%D characters and ligatures like~ff, although handling -%D ligatures is not the responsibility of this module. -%D -%D By default, we use \PLAIN\ \TEX's approach of placing -%D accents. All other schemes sooner or later give problems -%D when we distribute \DVI||files are distributed across -%D machines and platforms. Nevertheless, we have to take care -%D of different encoding vectors, which tell us where to find -%D the characters we need. This means that all kind of -%D character placement macro's like \type{\"} and \type{\ae} -%D have to be implemented and adapted in a way that suits -%D these vectors. -%D -%D The main difference between different vector is the way -%D accents are ordered and/or the availability of prebuilt -%D accented characters. Accented characters can for instance be -%D called for by sequences like \type{\"e}. Here the \type{\"} -%D is defined as: -%D -%D \starttyping -%D \def\"#1{{\accent"7F #1}} -%D \stoptyping -%D -%D This macro places the accent \accent"7F {} on top of an~e -%D gives \"e. Some fonts however can have prebuild accents and -%D use a more direct approach like -%D -%D \starttyping -%D \def\"#1{\if#1e\char 235\else ... \fi} -%D \stoptyping -%D -%D The latter approach is not used in \CONTEXT, because we -%D store relevant combinations of accents and characters in -%D individual macros. - -%D We define character substitutes and commands with definition -%D commands like: -%D -%D \starttyping -%D \startcoding[texnansi] -%D -%D \defineaccent " a 228 -%D \defineaccent ^ e 234 -%D \defineaccent ' {\dotlessi} 237 -%D -%D \definecharacter ae 230 -%D \definecharacter oe 156 -%D -%D \definecommand b \texnansiencodedb -%D \definecommand c \texnansiencodedc -%D -%D \stopcoding -%D \stoptyping -%D -%D The last argument of \type{\defineaccent} and -%D \type{\definecharacter} tells \TEX\ the position of the -%D accented character in the encoding vector. In order to -%D complish this, we tag each implementation with the character -%D coding identifier. We therefore need two auxiliary variables -%D \type{\characterencoding} and \type{\nocharacterencoding}. These -%D contain the current and default encoding vectors and both -%D default to the \PLAIN\ one. - -\edef\characterencoding {@\s!default @} -\edef\nocharacterencoding {@\s!default @} -\edef\charactermapping {@\s!default @} - -% todo, else \d j == \dj, print file and check - -\def\accentprefix {}%{*} -\def\commandprefix {}%{=} -\def\characterprefix{}%{-} - -%D \macros -%D {startcoding, reducetocoding} -%D -%D Before we can redefine accents and special characters, we -%D have to tell \CONTEXT\ what encoding is in force. The next -%D command is responsible for doing this and also takes care of -%D the definition of the recoding commands. We use the \type -%D {\start}||\type {\stop}||commands for definitions and the -%D \type {\reduceto}||command for local switching to -%D simplified commands. - -% etex : \ifcsname - -\def\justhandleaccent#1#2% \empty makes #2={} save % no \unexpanded - {\ifundefined{\accentprefix\characterencoding#1\string#2\empty}% - #2% - \else - \csname\accentprefix\characterencoding#1\string#2\empty\endcsname - \fi} - -\def\justhandlecommand#1% % no \unexpanded, otherwise pdfdoc will fail - {\ifundefined{\commandprefix\characterencoding#1}% as well as hyph patterns - #1% - \else - \csname\commandprefix\characterencoding#1\endcsname - \fi} - -\def\enableencoding - {\dodoubleempty\doenableencoding} - -\def\doenableencoding[#1][#2]% main fallback - {\iffirstargument\edef\characterencoding{@#1@}\fi - \edef\nocharacterencoding{@\ifsecondargument#2\else\s!default\fi @}% - \synchronizepatterns} - -\edef\xnocharacterencoding{@\s!default @} - -\def\fastenableencoding#1% - {\edef\characterencoding{@#1@}% - \let\nocharacterencoding\xnocharacterencoding} - -\def\startencoding - {\dodoubleempty\dostartencoding} - -\def\dostartencoding[#1][#2]% encoding regime - {%\showmessage\m!encodings1{#1}% - \pushmacro\characterencoding - \pushmacro\currentregime - \pushmacro\dohandleaccent % still needed? - \pushmacro\dohandlecommand % still needed? - \pushmacro\doautosetregime - \let\dohandleaccent\donthandleaccent % still needed? - \let\dohandlecommand\donthandlecommand % still needed? - %let\definesortkey\savesortkey - \edef\characterencoding{@#1@}% - \doifelsenothing{#2}% - {\let\doautosetregime\gobbletwoarguments} - {\def\currentregime{#2}}} - -\def\stopencoding - {\popmacro\doautosetregime - \popmacro\dohandlecommand % still needed? - \popmacro\dohandleaccent % still needed? - \popmacro\currentregime - \popmacro\characterencoding} - -% probably obsolete (hm, not yet) - -\def\reducetocoding[#1]% use grouped! - {\doifsomething{#1} - {\let\dohandleaccent \justhandleaccent - \let\dohandlecommand\justhandlecommand - \enableencoding[#1]% - \enablelanguagespecifics[\currentlanguage]}} - -\let\startcoding \startencoding -\def\stopcoding {\stopencoding} -\let\enablecoding \enableencoding - -%D The use of these macros are not limited to font -%D definition files, but may also be used when loading -%D patterns. - -%D \macros -%D {definesortkey,flushsortkeys,flushsortkey} -%D -%D Yet another definition concerns sorting of indexes and -%D lists. -%D -%D \starttyping -%D \definesortkey {\'e} {e} {a} {\'e} -%D \stoptyping -%D -%D The first argument denotes the string to be treated. The -%D second argument is the raw replacement, while the third -%D argument determines the sort order given the replacement. -%D The last argument is used as entry in the index (a, b, etc). -%D -%D The keys can be flushed using \type {\flushsortkeys} -%D which in turn results in a sequence of calls to \type -%D {\flushsortkey}, a macro taking 4~arguments. -%D -%D This mechanism is currently being tested and subjected to -%D changes! Obsolete: - -\let\definesortkey\gobblefourarguments -\let\savesortkey \gobblefourarguments -\let\flushsortkeys\relax -\let\flushsortkey \relax - -%D \macros -%D {defineaccent, definecharacter, definecommand} -%D -%D The actual definition of accents, special characters and -%D commands is done with the next three commands. - -\def\defineaccent - {\protectfontcharacters - \dodefineaccent} - -\def\dodefineaccent#1 #2 % - {\unprotectfontcharacters - \dododefineaccent#1 #2 } - -\def\dododefineaccent#1 #2 #3 % - {\setvalue{#1}{\dohandleaccent{#1}}% - \doifnumberelse{\string#3} - {\setvalue{\accentprefix\characterencoding#1\string#2}{\char#3 }} % space added - {\setvalue{\accentprefix\characterencoding#1\string#2}{#3}}} - -\def\dohandleaccent#1#2% - {\ifcsname\accentprefix\characterencoding#1\string#2\empty\endcsname - \csname\accentprefix\characterencoding#1\string#2\empty\endcsname - \else\ifcsname\accentprefix\nocharacterencoding#1\string#2\empty\endcsname - \csname\accentprefix\nocharacterencoding#1\string#2\empty\endcsname - \else\ifcsname\accentprefix\characterencoding#1\endcsname - \csname\accentprefix\characterencoding#1\endcsname{#2}% - \else%\ifcsname\accentprefix\nocharacterencoding#1\endcsname - \csname\accentprefix\nocharacterencoding#1\endcsname{#2}% -% \else -% \donormaltextaccent{#1}{#2}% - \fi\fi\fi}%\fi} - -%D In patterns, characters have to be bytes. These will be -%D mapped onto the compact pattern arrays. - -\let\normalpatterns \patterns -\let\normalhyphenation\hyphenation - -\def\patternchar#1 {\rawcharacter{#1}} % space is part of character definition ! - -% \ifx \enablepatterntokens\undefined -% \def\handlepatterntoken#1]{\csname#1\endcsname} -% \fi - -% we need to postpone catcode changes, e.g. hr patterns -% have \catcode" -> which fails when " is letter - -\def\pathypsettings - {\ifx \enablepatterntokens\undefined - \defineactivecharacter [ {\handlepatterntoken}% - \else - \enablepatterntokens - \fi - \let\dochar\thechr - \lccode16=16 % brrr, extra quote in ec (turkish) - \lccode17=17 % brrr, extra quote in ec (turkish) - \lccode`\-=`\- - \lccode`\'=`\' - \lccode`\"=`\" - \relax} - -\def\patterns {\pathypsettings\normalpatterns } -\def\hyphenation{\pathypsettings\normalhyphenation} - -%D Because we don't want to use the second command grouped, we -%D (re)define it as follows: - -\def\hyphenation - {\begingroup\def\hyphenation{\normalhyphenation{\the\scratchtoks}\endgroup}% - \pathypsettings\afterassignment\hyphenation\scratchtoks=} - -%D This is not needed for patterns because they are loaded grouped -%D anyway and it saves us an assignment. Can go ... no longer -%D shared patterns. - -\def\startpatternloading#1#2#3% % we should use \everypatternloading - {\startreadingfile - \bgroup - % let's get rid of interfering stuff - \let\everyjob\scratchtoks - \let\message \gobbleoneargument - % we want direct characters - \let\char\patternchar - \doifelsenothing{#2}{\enableencoding[ec]}{\enableencoding[#2]}% - \doifelsenothing{#3}{\enablemapping [ec]}{\enablemapping [#3]}% - \expanded{\doifinstring{\f!languageprefix}{#1}} - {\ifx \enablepatternxml\undefined \else - \enablepatternxml - \fi}% - \let\dohandleaccent\normaldohandleaccent} - -\def\stoppatternloading - {\egroup - \stopreadingfile} - - \def\thechr#1{\char#1 } % just in case \relax interferes -\unexpanded\def\numchr#1{\char#1\relax} -\unexpanded\def\strchr#1{\csname#1\endcsname} - -\let\dochar\numchr - -\def\startdirectcharacters {\pushmacro\dochar \let\dochar\thechr} -\def\stopdirectcharacters {\popmacro \dochar} - -\def\definecharacter#1 #2 % - {\ifundefined{#1}\setvalue{#1}{\dohandlecharacter{#1}}\fi - \doifnumberelse{\string#2} - {\setvalue{\characterprefix\characterencoding\string#1}{\dochar{#2}}% - \doautosetregime{#1}{#2}} - {\setvalue{\characterprefix\characterencoding\string#1}{#2}}} - -\def\dohandlecharacter#1% - {\csname\characterprefix\ifcsname\characterprefix\characterencoding#1\endcsname - \characterencoding\else\nocharacterencoding\fi#1\endcsname} - -% \def\fallbackpatternchar{x} % makes no sense, duplicate patterns - -\def\defaultcharacter#1% - {\csname\characterprefix\nocharacterencoding\strippedcsname#1\endcsname} - -%D Instead of numbers, a command may be entered. - -\def\definecommand#1 #2 % - {\setvalue{\string#1}{\dohandlecommand{#1}}% - %\redefinecommand #1 % just to be sure - \setvalue{\commandprefix\characterencoding\string#1}{#2}} - -%D Here we see that redefining accents is characters is more -%D or less the same as redefining commands. We also could have -%D said: -%D -%D \starttyping -%D \def\defineaccent#1 #2 {\definecommand#1\string#2 \char} -%D \def\definecharacter#1 {\definecommand#1 \char} -%D \stoptyping - -%D \macros -%D {defineaccentcommand} -%D -%D When needed, one can overload the default positions of the -%D accents. The \PLAIN\ \TEX\ defaults are: -%D -%D \starttyping -%D \defineaccentcommand ` 18 -%D \defineaccentcommand ' 19 -%D \defineaccentcommand v 20 -%D \defineaccentcommand u 21 -%D \defineaccentcommand = 22 -%D \defineaccentcommand ^ 94 -%D \defineaccentcommand . 95 -%D \defineaccentcommand H 125 % "7D -%D \defineaccentcommand ~ 126 % "7E -%D \defineaccentcommand " 127 % "7F -%D \stoptyping - -\def\defineaccentcommand - {\protectfontcharacters - \dodefineaccentcommand} - -\def\dodefineaccentcommand#1 #2 % \string toegevoegd - {\doifnumberelse{\string#2} - {\setvalue{\accentprefix\characterencoding\string#1}##1{{\accent#2 ##1}}} - {\setvalue{\accentprefix\characterencoding\string#1}##1{{#2##1}}}% - \unprotectfontcharacters} - -%D We don't have to define them for the default \PLAIN\ case. -%D Commands may be used instead of character codes. - -%D \macros -%D {normalaccent,normalchar} -%D -%D Accents are either placed by \TEX's \type {\accent} -%D primitive, or part of the glyph. By default the former -%D method is used, unless overruled in the encoding -%D definitions. - -\let\normalchar =\char -\let\normalaccent=\accent - -%D \macros -%D {redefinecommand} -%D -%D Redefinition of encoding dependant commands like \type{\b} -%D and \type{\c} can be triggered by: -%D -%D \starttyping -%D \redefinecommand b % something math -%D \redefinecommand c % something math -%D \stoptyping -%D -%D Handling of characters is easier than handling accents -%D because here we don't have to take care of arguments. We -%D just call for the right glyph in the right place. -%D -%D The \type{\next} construction permits handling of commands -%D that take arguments. This means that we can use this -%D command to redefine accent handling commands too -%D (although today the next is not needed any longer in test -%D macros). - -\def\redefinecommand#1 % - {% no \unexpanded, else pdfdoc fails - \setvalue{\string#1}{\dohandlecommand{#1}}}% - -\def\dohandlecommand#1% - {\csname\commandprefix - \ifcsname\commandprefix\characterencoding#1\endcsname - \characterencoding - \else - \nocharacterencoding - \fi - #1\endcsname} - -%D \macros -%D {currentencoding, currentmapping} -%D -%D When we show 'm, we don't want to see the protection -%D measures. - -\def\currentencoding{\@EA\dopureencodingname\characterencoding} -\def\currentmapping {\@EA\dopureencodingname\charactermapping } - -\def\dopureencodingname @#1@{#1} - -\def\pureencodingname#1{\@EA\dopureencodingname#1} - -%D \macros -%D {showaccents, showcharacters, -%D showcharacterbounds, showhyphenations} -%D -%D Encoding is a tricky business. Therefore we provide a -%D a few macros that show most of the characters involved. The -%D next two tables show the result of \type {\showaccents}. -%D -%D \placetable -%D {The special glyphs in default encoding.} -%D {\showaccents} -%D -%D \placetable -%D {The special glyphs in texnansi encoding.} -%D {\switchtobodyfont[lbr]\showaccents} -%D -%D The command -%D -%D \starttyping -%D \showhyphenations{doordefini\"eren} -%D \stoptyping -%D -%D can be used to check the correct loading of hyphenation -%D patterns. - -\fetchruntimecommand \showaccents {\f!encodingprefix\s!run} -\fetchruntimecommand \showcharacters {\f!encodingprefix\s!run} -\fetchruntimecommand \showcharacterbounds {\f!encodingprefix\s!run} -\fetchruntimecommand \showhyphenations {\f!encodingprefix\s!run} -\fetchruntimecommand \showmapping {\f!encodingprefix\s!run} - -%D \macros -%D {everyuppercase, EveryUppercase, -%D everyuppercase, EveryUppercase} -%D -%D When we want to uppercase strings of characters, we have to -%D take care of those characters that have a special meaning or -%D are only accessible by means of macros. The next hack was -%D introduced when Tobias Burnus started translating head and -%D label texts into spanish and italian. The first application -%D of this token register therefore can be found in the module -%D that deals with these texts. - -\newevery \everyuppercase \EveryUppercase -\newevery \everylowercase \EveryLowercase - -%D This magic trick maps takes care of mapping from lower to -%D upper case and reverse. - -\def\reloadmapping{\the\executeifdefined{\@cas@\charactermapping}\emptytoks} - -\appendtoks\let\setuppercasecom\setcasecom\to\everyuppercase -\appendtoks\let\setlowercasecom\setcasecom\to\everylowercase - -\appendtoks\reloadmapping\to\everyuppercase % slow, will be sped up -\appendtoks\reloadmapping\to\everylowercase % slow, will be sped up - -\newtoks\everyULmap - -\appendtoks\let\remapcase\remapuppercase\the\everyULmap\to\everyuppercase -\appendtoks\let\remapcase\remaplowercase\the\everyULmap\to\everylowercase - -\let\remapcase\gobbletwoarguments - -\def\remapuppercase#1#2{\let#2#1} % more efficient: -\def\remaplowercase#1#2{\let#1#2} \let\remaplowercase\let - -\def\defineLCcharacter #1 #2 % - {\appendtoks\let\to\everylowercase - \@EA\appendtoks\csname#1\endcsname\to\everylowercase - \@EA\appendtoks\csname#2\endcsname\to\everylowercase} - -\def\defineUCcharacter #1 #2 % - {\appendtoks\let\to\everyuppercase - \@EA\appendtoks\csname#1\endcsname\to\everyuppercase - \@EA\appendtoks\csname#2\endcsname\to\everyuppercase} - -\def\defineULcharacter #1 #2 % - {\appendtoks\remapcase\to\everyULmap - \@EA\appendtoks\csname#1\endcsname\to\everyULmap - \@EA\appendtoks\csname#2\endcsname\to\everyULmap} - -% slightly faster with \smallcapped's but far more hash and stringspace -% -% \newif\ifuppercase \appendtoks\uppercasetrue\to\everyuppercase -% \newif\iflowercase \appendtoks\lowercasetrue\to\everylowercase -% -% \def\defineULcharacter #1 #2 % -% {\def\!!stringa{@#1}\@EA\letvalue\@EA\!!stringa\csname#1\endcsname -% \def\!!stringa{@#2}\@EA\letvalue\@EA\!!stringa\csname#2\endcsname -% \setvalue{#1}{\getvalue{@\ifuppercase#2\else#1\fi}}% -% \setvalue{#2}{\getvalue{@\iflowercase#1\else#2\fi}}} - -% 2 = tricky, since expanding \definedfont[lowcasename] ... goes wrong - -\chardef\uppercasemode\plusthree % 0=ignore 1=normal 2=expand 3=auto -\chardef\casecommode \plusone % 0=noexpand 1=expand - -\def\setcasecom #1#2{\def#1{\ifcase\casecommode\noexpand#1\else#2\fi}} - -% \def\OEPS{whatever} -% -% \startmapping[ec] -% \defineuppercasecom \oeps {\getvalue{OEPS}} -% \stopmapping -% -% \WORD{xx \oeps} - -\def\douppercase#1% - {\bgroup - \let\douppercase\firstofoneargument - \the\everyuppercase % currently also checks uppercasemode - \let\dochar\rawcharacter - \ifcase\uppercasemode - #1% - \or % No expansion here, otherwise \getvalue problems! Default!!! - %\edef\next{#1}% keep this to prevent roll back - %\uppercase\expandafter{\next}% keep this to prevent roll back - \uppercase{#1}% - \or - \chardef\casecommode\zerocount - \let\docasecom\firstoftwoarguments - \edef\ascii{#1}% - \edef\ascii{\expandafter\uppercase\expandafter{\ascii}}% needed when in regime - \chardef\casecommode\plusone - \ascii - \else - % mode three may trigger setting 2 elsewhere (e.g. regime test) - \uppercase{#1}% - \fi - \egroup} - -\prependtoksonce - \doifnot\currentregime\s!default - {\ifnum\uppercasemode=\plusthree \chardef\uppercasemode\plustwo \fi}% -\to \everyuppercase - -%D \macros -%D {everysanitize, EverySanitize} -%D -%D Whenever we are sanitizing strings, like we sometimes do -%D when we deal with specials, the next token register can be -%D called. - -\newevery \everysanitize \EverySanitize - -%D \macros -%D {defineuclass,defineudigit,udigit} -%D -%D The next few macros are experimental and needed for unicoded -%D chinese characters. - -\def\defineuclass #1 #2 #3 % - {\setvalue{uc\the\numexpr#2*256+#3\relax}{#1}} - -\def\defineudigit #1 #2 #3 {\setvalue{\characterencoding uc#1}{\uchar{#2}{#3}}} - -%D It may look strange, but for the moment, we want the encoding -%D to be part of the digit specification. This may change! - -\unexpanded\def\udigit#1#2{\getvalue{@#1@uc\number#2}} - -%D \macros -%D {uchar, octuchar, hexuchar} - -\ifx\uchar\undefined \def\uchar#1#2{(\number#1,\number#2)} \fi - -\def\octuchar#1#2{\uchar{`#1}{`#2}} -\def\hexuchar#1#2{\uchar{"#1}{"#2}} - -%D Basics and fallbacks. - -\newif\ifignoreaccent - -\let\textaccent \accent - -\let\normalaccent \accent -\let\normaltextaccent\textaccent -\let\normalmathaccent\mathaccent -\let\normalchar \char - -% ** we will explicitly embrace the two arguments, since in definitions -% this may not be the case, and we don't want faulty expansions like -% "\dobuildtextaccent \char 18 a" but "\dobuildtextaccent {\char 18}{a}" -% instead - -\def\buildmathaccent#1% - {\mathaccent#1 } - -\def\buildtextaccent#1#2% ** - {\ifignoreaccent - \expandafter\nobuildtextaccent - \else - \expandafter\dobuildtextaccent - \fi{#1}{#2}} - -\unexpanded\def\nobuildtextaccent#1#2% - {#2} - -\unexpanded\def\dobuildtextaccent#1#2% - {{\let\char\normalaccent#1\let\char\normalchar#2}} - -% EVENTUALLY THIS CODE WILL MOVE TO AN mkiv module - -\beginLUATEX - -\newbox\accenttestbox - -\unexpanded\def\dobuildtextaccent#1#2% - {\begingroup - \global\setbox\accenttestbox\hbox{#1}% - \scratchcounter\ctxlua{characters.charcode(\number\accenttestbox)}% - \ifcase\scratchcounter\else\accent\scratchcounter\fi - \relax#2% - \endgroup} - -\endLUATEX - -% some fake ones, name will change into build - -\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}}} - -\def\buildtextmacron {\bottomaccent{.25ex}{0}{15}{\textmacron}} -\def\buildtextbottomdot{\bottomaccent{.25ex}{0}{5}{\textbottomdot}} -\def\buildtextcedilla {\bottomaccent{0ex}{0}{5}{\textcedilla}} -\def\buildtextogonek {\bottomaccent{-.1ex}{.5}{0}{\textogonek}} - -%D A collectors item: - -\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}} - -%D Rarely needed but there: - -\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. - -% \definecharacter schwa {\hbox{\rotate[rotation=180,location=high]{\hbox{e}}}} -% \definecharacter schwagrave {\buildtextgrave\schwa} - -% math stuff, will change - -\def\definemathaccent#1 #2% - {\setvalue{\string#1}{#2}% - \setvalue{normalmathaccent\string#1}{#2}} - -\def\donormalmathaccent#1% - {\getvalue{normalmathaccent\string#1}} - -%D Some precautions: - -\ifx\usepdffontresource\undefined - \def\usepdffontresource #1 {} % this will be defined elsewhere -\fi - -\def\donthandleaccent #1{\expandafter\string\csname#1\endcsname\space} -\def\donthandlecommand #1{\expandafter\string\csname#1\endcsname\space} -\def\donthandlecharacter #1{\expandafter\string\csname#1\endcsname\space} - -\def\stringifyhandleaccent #1{\strchr{#1}} -\def\stringifyhandlecommand #1{\strchr{#1}} -\def\stringifyhandlecharacter#1{\strchr{#1}} - -\def\keephandleaccent #1{\expandafter\noexpand\csname#1\endcsname} -\def\keephandlecommand #1{\expandafter\noexpand\csname#1\endcsname} -\def\keephandlecharacter #1{\expandafter\noexpand\csname#1\endcsname} - -\def\handleaccent #1{\csname#1\endcsname} -\def\handlecommand #1{\csname#1\endcsname} -\def\handlecharacter #1{\csname#1\endcsname} - -\def\dontexpandencoding - {\let\dohandleaccent \donthandleaccent - \let\dohandlecommand \donthandlecommand - \let\dohandlecharacter\donthandlecharacter} - -\def\keepencodedtokens - {\let\dohandleaccent \keephandleaccent - \let\dohandlecommand \keephandlecommand - \let\dohandlecharacter\keephandlecharacter} - -\def\literateencodedtokens - {% \let\dohandleaccent \keephandleaccent - % \let\dohandlecommand \keephandlecommand - \let\dohandlecharacter\keephandlecharacter} - -\def\stringifyencodedtokens - {% \let\dohandleaccent \stringifyhandleaccent - % \let\dohandlecommand \stringifyhandlecommand - \let\dohandlecharacter\stringifyhandlecharacter} - -\unexpanded\def\uhandleaccent #1{\csname#1\endcsname} -\unexpanded\def\uhandlecommand #1{\csname#1\endcsname} -\unexpanded\def\uhandlecharacter#1{\csname#1\endcsname} - -\def\dontexpandencodedtokens - {\def\dohandleaccent {\uhandleaccent}% - \def\dohandlecommand {\uhandlecommand}% - \def\dohandlecharacter{\uhandlecharacter}} - -% no longer: \def\convertencodedtokens{\dontexpandencoding} but: - -\def\convertencodedtokens{\stringifyencodedtokens} - -% test case: -% -% \enableregime[cp1250] -% \mainlanguage[cz] -% -% \starttext -% -% \title{luouc kon p} -% \placelist[chapter][criterium=all] -% -% \startbuffer -% <chapter> -% <title>luouc kon p</title> -% </chapter> -% \stopbuffer -% -% \defineXMLenvironment -% [chapter] -% {\defineXMLsave[title]} -% {\expanded{\chapter{\XMLflush{title}}}} -% \processXMLbuffer -% -% \setuphead[chapter][expansion=yes] -% \defineXMLenvironment -% [chapter] -% {\defineXMLsave[title]} -% {\chapter{\XMLflush{title}}} -% \processXMLbuffer -% -% \stoptext - -%D Still valid? To be checked: - -\def\doignoreaccent #1#2{\string#1\string#2}% -\def\doignorecommand #1{\string#1} -\def\doignorecharacter#1{\string#1} - -\def\ignoreencoding - {\let\dohandleaccent \doignoreaccent - \let\dohandlecommand \doignorecommand - \let\dohandlecharacter\doignorecharacter} - -\appendtoks - \ignoreencoding -\to \everycleanupfeatures - -\appendtoks - \keepencodedtokens -\to \everysafeexpanded - -%D Now we will not redefine any more, so: - -\let\normaldohandleaccent \dohandleaccent -\let\normaldohandlecharacter\dohandlecharacter - -%D We preload several encodings: - -\loadmarkfile{enco-ini} - -\definecommand ` {\buildtextaccent\textgrave} -\definecommand ' {\buildtextaccent\textacute} -\definecommand r {\buildtextaccent\textring} -\definecommand v {\buildtextaccent\textcaron} -\definecommand u {\buildtextaccent\textbreve} -\definecommand = {\buildtextaccent\textmacron} -\definecommand ^ {\buildtextaccent\textcircumflex} -\definecommand . {\buildtextaccent\textdotaccent} -\definecommand H {\buildtextaccent\texthungarumlaut} -\definecommand ~ {\buildtextaccent\texttilde} -\definecommand " {\buildtextaccent\textdiaeresis} - -\definecommand c {\buildtextcedilla} -\definecommand b {\buildtextmacron} -\definecommand d {\buildtextbottomdot} -\definecommand k {\buildtextogonek} - -\definemathaccent acute {\buildmathaccent\mathacute} -\definemathaccent grave {\buildmathaccent\mathgrave} -\definemathaccent ddot {\buildmathaccent\mathddot} -\definemathaccent tilde {\buildmathaccent\mathtilde} -\definemathaccent bar {\buildmathaccent\mathbar} -\definemathaccent breve {\buildmathaccent\mathbreve} -\definemathaccent check {\buildmathaccent\mathcheck} -\definemathaccent hat {\buildmathaccent\mathhat} -\definemathaccent vec {\buildmathaccent\mathvec} -\definemathaccent dot {\buildmathaccent\mathdot} -\definemathaccent widetilde {\buildmathaccent\mathwidetilde} -\definemathaccent widehat {\buildmathaccent\mathwidehat} - -\useencoding[def] % defaults (partly simplified) -\useencoding[acc] % accent commands -\useencoding[raw] % simplified (incomplete) -\useencoding[com] % a few commands -\useencoding[cas] % case mapping, not needed in mkiv -\useencoding[mis] % a few commands - -% \useencoding[ans,il2,ec,tbo,pdf,uc,pol,qx,t5,cyr,agr] % pol and il2 will go away, not needed in mkiv -% \useencoding[032,033,037] % fallbacks for some unicode chars -% \setupencoding[\s!default=ec] % was: [\s!default=\s!default] - -\protect \endinput |