1%D \module 2%D [ file=lang-ovl, 3%D version=2016.02.03, % about that time (maybe earlier) 4%D title=\CONTEXT\ Typesetting Macros, 5%D subtitle=Overloads, 6%D author=Hans Hagen, 7%D date=\currentdate, 8%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] 9%C 10%C This module is part of the \CONTEXT\ macro||package and is 11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for 12%C details. 13 14\writestatus{loading}{ConTeXt Typesetting Macros / Overloads} 15 16\unprotect 17 18%D See \LUA\ file for comments. I'll probably never use this code outside the 19%D project where it had some experimental use. (Occasionally we do some spell 20%D checking and suspicious word usage marking.) So there is not much documentation 21%D here. Keep in mind that overloading only makes sense for content that gets 22%D replaced as otherwise normal attributes make more sense. Using this otherwise 23%D is weird but one never knows what users come up with. 24 25\registerctxluafile{typo-ovl}{autosuffix} 26 27\definesystemattribute[overloads][public,global] 28 29\installcorenamespace{overloads} 30 31%D Watch how we abuse highlights. 32 33\newinteger\c_typo_overload_font_id 34 35\protected\def\typo_overloads_define#1% 36 {\begingroup 37 % we pack so we avoid interference (and for sure don't process!) 38 \setbox\scratchbox\hpack\bgroup 39 \global\c_typo_overload_font_id\fontid\font 40 \resetallattributes % so we only change what gets set 41 \highlight[#1]% 42 \signalcharacter 43 \global\c_typo_overload_font_id 44 \ifnum\c_typo_overload_font_id=\fontid\font 45 \zerocount 46 \else 47 \fontid\font 48 \fi 49 \egroup 50 \global\expandafter\chardef\csname\??overloads#1\endcsname 51 {#1}\c_typo_overload_font_id\scratchbox 52 \endgroup} 53 54\permanent\protected\def\setoverloads[#1]% 55 {\ifcsname\??overloads#1\endcsname\else 56 \typo_overloads_define{#1}% 57 \fi 58 \c_attr_overloads\csname\??overloads#1\endcsname} 59 60\permanent\protected\def\registeroverloads[#1]% 61 {\ifcsname\??overloads#1\endcsname\else 62 \typo_overloads_define{#1}% 63 \fi} 64 65\permanent\protected\def\resetoverloads 66 {\c_attr_overloads\attributeunsetvalue} 67 68%D We hook this into the replacement module, probably the only place where it makes 69%D sense. Here is an adapted version of an example: 70%D 71%D \starttyping 72%D \replaceword[basics][new] [old] 73%D \replaceword[basics][now] [hl3->never] 74%D \replaceword[basics][never][now] 75%D \replaceword[basics][heck] [] 76%D 77%D \definehighlight[hl1][style={\setbar[underbar]\red\setcharactercasing[WORD]\bf}] 78%D \definehighlight[hl2][style={\setbar[overbar]\blue\setcharactercasing[Words]}] 79%D \definehighlight[hl3][style={\setbar[overstrike]\green\bs}] 80%D 81%D \registeroverloads[hl1] 82%D \registeroverloads[hl2] 83%D \registeroverloads[hl3] 84%D 85%D \start \setreplacements[basics][hl1] What the heck, it's now or never, isn't it new? \stop \par 86%D \start \setreplacements[basics][hl2] What the heck, it's now or never, isn't it new? \stop \par 87%D \start \setreplacements[basics][hl1] What the heck, it's now or never, isn't it new? \stop \par 88%D \start \setreplacements[basics] What the heck, it's now or never, isn't it new? \stop \par 89%D \stoptyping 90%D 91%D We used it to mark synonyms that should not be corrected by the editor. Sort of the 92%D reverse of not having a word in a vetted wordlist. A bit out of place in a typesetting 93%D system. If really needed we can support multiple words seperataed by spaces but I didn't 94%D need it. And \unknown\ fonts are supported but at fixed size! 95 96\ifdefined\setreplacements 97 98 \pushoverloadmode 99 100 \permanent\tolerant\protected\def\setreplacements[#1]#*[#2]% 101 {{#1}% 102 \ifparameter#2\or 103 \setoverloads[#2]% 104 \else 105 \resetoverloads 106 \fi} 107 108 \popoverloadmode 109 110\else 111 112 % something weird 113 114\fi 115 116\protect 117 |