enco-ini.mkxl /size: 19 Kb    last modification: 2025-02-21 11:03
1%D \module
2%D   [       file=enco-ini,
3%D        version=2007.02.19, % 2000.12.27, % 1998.12.03,
4%D          title=\CONTEXT\ Encoding Macros,
5%D       subtitle=Initialization,
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%D This is stripped down version of the original enco-ini.tex file. For more details
15%D you might want to study the \MKII\ file but since \LUATEX\ is unicode inside we
16%D need less code. When we moved to \LMTX\ again some disappeared and the composition
17%D macros were upgraded in the process.
18%D
19%D An historic note: When dealing with characters we have four cases to take into
20%D account when moving from \MKII\ to \MKIV:
21%D
22%D \starttabulate[|l|l|]
23%D     \NC \type {<byte 200>}   \NC ref to slot 200 in current font \NC \NR
24%D     \NC \type {\char 200}    \NC ref to slot 200 in current font \NC \NR
25%D     \NC \type {<active 200>} \NC can (e.g.) map to another slot in current font \NC \NR
26%D     \NC \type {\namedglyph}  \NC can map to some slot in some font \NC \NR
27%D \stoptabulate
28%D
29%D Using case 2 for special characters is doomed to fail because we are not going to
30%D intercept these on the fly as happens automatically with traditional font
31%D encoding handling. We could do that in a node pass but it's not worth the effort
32%D because we seldom use this case in a document source.
33
34\writestatus{loading}{ConTeXt Encoding Macros / Initialization}
35
36\unprotect
37
38%D This one is obsolete but maybe sometimes still used in styles:
39
40\immutable\let\defaultencoding\s!default
41
42%D \macros
43%D   {defineaccent, definecharacter, definecommand}
44%D
45%D Some of these are used at the \LUA\ end but the names will change.
46
47\installcorenamespace{accents}
48
49%D These might go away:
50
51\permanent\protected\def\defineaccent#1 #2 #3 %
52  {\dodefineaccentcommand{#1}%
53   \dodefineaccent{#1}{#2}{#3}}
54
55\permanent\protected\def\dodefineaccentcommand#1%
56  {\ifcsname\string#1\endcsname\else
57     \edefcsname\string#1\endcsname{\noexpand\dohandleaccent{\string#1}}%
58   \fi}
59
60\permanent\protected\def\dodefineaccent#1#2#3% no spaces, used low level
61  {\defcsname\??accents\string#1\string#2\empty\endcsname{#3}}
62
63\permanent\protected\def\dohandleaccent#1#2% expandable because we want them in the tuc file
64  {\csname\??accents
65     \ifcsname\??accents\string#1#2\empty\endcsname
66       \string#1#2\empty
67     \orelse\ifcsname\??accents\string#1\string#2\empty\endcsname
68       \string#1\string#2\empty
69     \else
70       \endcsname#2\csname\??accents % very dirty trick: ignore accent but keep char
71     \fi
72   \endcsname}
73
74\immutable\letcsname\??accents\endcsname\empty
75
76%D Because now have this (\type {\chr} issues a one|-|time warning):
77%D
78%D \stopbuffer
79%D \chr {e acute}
80%D \chr {i circumflex}
81%D \^{i} \^i \^{\i}
82%D \^{a} \"{a}
83%D \withcircumflex{a}
84%D \withdiaeresis{a}
85%D \stopbuffer
86%D
87%D \typebuffer \getbuffer
88
89\permanent\protected\def\dodefinecombine#1#2%
90  {\ifcsname\string#1\endcsname\else
91     \permanent\protected\defcsname with#1\endcsname##1{\chr{##1#2}}%
92   \fi}
93
94%D The following dirty trick is needed to catch \asciimath{\^{1/5}log}, although:
95%D do we?
96
97\permanent\protected\def\definecharacter#1 #2 %
98  {\doifelsenumber{\string#2}
99     {\edefcsname\string#1\endcsname{\tocharacter#2}}
100     {\protected\defcsname\string#1\endcsname{#2}}}
101
102%D specials: \aa \ae \cc \i \ij \l \o \oe \sz \par
103%D SPECIALS: \AA \AE \CC \j \IJ \L \O \OE \SZ \par
104
105\permanent\protected\def\definecommand#1 #2 %
106  {\protected\defcsname\string#1\endcsname{#2}}
107
108\permanent\protected\def\dodefinecommand#1#2% \O \L \AE ...
109  {% not permanent as these are kind of obsolete
110   \frozen\protected\defcsname\string#1\endcsname{#2}}
111
112%D We set up some things in \LUA:
113
114\clf_defineaccents % one time
115
116%D This defined commands like \type {\withgrave} and \type {\withcaronbelow} and
117%D some of these have aliases. Below ee also alias the traditional one character
118%D accent commands.
119%D
120%D \starttabulate[||||]
121%D     \NC \getvalue{agrave}        \NC \withgrave       {a} \NC \`{a} \NC \NR
122%D     \NC \getvalue{aacute}        \NC \withacute       {a} \NC \'{a} \NC \NR
123%D     \NC \getvalue{acircumflex}   \NC \withcircumflex  {a} \NC \^{a} \NC \NR
124%D     \NC \getvalue{atilde}        \NC \withtilde       {a} \NC \~{a} \NC \NR
125%D     \NC \getvalue{amacron}       \NC \withmacron      {a} \NC \={a} \NC \NR
126%D     \NC \getvalue{ebreve}        \NC \withbreve       {e} \NC \u{e} \NC \NR
127%D     \NC \getvalue{cdotaccent}    \NC \withdot         {c} \NC \.{c} \NC \NR
128%D     \NC \getvalue{ediaeresis}    \NC \withdieresis    {e} \NC \"{e} \NC \NR
129%D     \NC \getvalue{uring}         \NC \withring        {u} \NC \r{u} \NC \NR
130%D     \NC \getvalue{uhungarumlaut} \NC \withhungarumlaut{u} \NC \H{u} \NC \NR
131%D     \NC \getvalue{ecaron}        \NC \withcaron       {e} \NC \v{e} \NC \NR
132%D     \NC \getvalue{ecedilla}      \NC \withcedilla     {e} \NC \c{e} \NC \NR
133%D     \NC \getvalue{eogonek}       \NC \withogonek      {e} \NC \k{e} \NC \NR
134%D \stoptabulate
135%D
136%D Now we alias these traditional shortcuts:
137
138\pushoverloadmode
139
140\suggestedalias \` \withgrave
141\suggestedalias \' \withacute
142\suggestedalias \^ \withcircumflex
143\suggestedalias \~ \withtilde
144\suggestedalias \= \withmacron
145\suggestedalias \u \withbreve
146\suggestedalias \. \withdot
147\suggestedalias \" \withdieresis
148\suggestedalias \r \withring
149\suggestedalias \H \withdoubleacute
150\suggestedalias \v \withcaron
151\suggestedalias \c \withcedilla
152\suggestedalias \k \withogonek
153\suggestedalias \d \withdotbelow
154
155\popoverloadmode
156
157% From \type {enco-com} we had these, maybe that's better:
158
159% \aliased\let\AE\AEligature   \aliased\let\ae\aeligature
160% \aliased\let\OE\OEligature   \aliased\let\oe\oeligature
161% \aliased\let\IJ\IJligature   \aliased\let\ij\ijligature
162% \aliased\let\AA\textAngstrom \aliased\let\aa\aring
163% \aliased\let\CC\Ccedilla     \aliased\let\cc\ccedilla
164% \aliased\let\L \Lslash       \aliased\let\l \lslash
165% \aliased\let\O \Oslash       \aliased\let\o \oslash
166% \aliased\let\SZ\Eszett       \aliased\let\sz\eszett    % \aliased\let\SS\Ssharp
167
168% %D \macros
169% %D   {everyuppercase, everylowercase, everysanitize}
170%
171% \newtoks \everyuppercase
172% \newtoks \everylowercase
173% \newtoks \everysanitize
174
175%D Accent handling (try to avoid this):
176
177% \buildtextaccent\greekdasia\greekalphamacron
178% \buildtextaccent\textacute q
179
180%D We can use offsets in \LMTX\ but even that makes no sense because we have
181%D a virtual feature already in \MKIV. These builders are depricated:
182
183\newbox\b_enco_accent
184
185% \permanent\protected\def\buildmathaccent#1% Don't use this!
186%   {\mathaccent#1 }
187
188\permanent\protected\def\buildtextaccent#1#2% we could do all at the lua end
189  {\dontleavehmode\begingroup               % but that's no fun (yet)
190   \setbox\scratchboxone\hbox{#1}% accent
191   \setbox\scratchboxtwo\hbox{#2}% character
192   \scratchheight{\ht\scratchboxtwo-\ht\scratchboxone}%
193   \scratchdepth {\dp\scratchboxtwo-\dp\scratchboxone}%
194   \scratchwidth \wd\scratchboxtwo
195   \hbox to \wd\ifdim\wd\scratchboxone>\wd\scratchboxtwo\scratchboxone\else\scratchboxtwo\fi\bgroup
196     \hss\box\scratchboxtwo\hss
197     \hskip-\scratchwidth
198     \hss
199     \ifdim\ht\scratchboxone>\exheight
200       % top accent
201       \raise{\scratchheight+\exheight/3}%
202     \else
203       \lower{-\scratchdepth-\exheight/3}%
204     \fi
205     \box\scratchboxone
206     \hss
207   \egroup
208   \endgroup}
209
210\permanent\protected\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char
211  {\dontleavehmode % why this align mess
212   \vtop
213     {\forgetall
214      \baselineskip\zeroskip
215      \lineskip#1\relax
216      \everycr\emptytoks
217      \tabskip\zeroskip
218      \lineskiplimit\zeropoint
219      \setbox0\hbox{#4}%
220      \halign
221        {##\crcr\hbox{#5}\crcr
222         \hskip\hideskip % \hidewidth
223         \hskip#2\wd0
224         \hskip-#3\slantperpoint % in plain 1ex * dimenless value
225         \vpack to .2\exheight{\box0\vss}%
226         \hskip\hideskip % \hidewidth
227         \crcr}}}
228
229\permanent\protected\def\buildtextmacron     {\bottomaccent{.25ex}{0}{15}{\textmacron}}
230\permanent\protected\def\buildtextbottomdot  {\bottomaccent{.25ex}{0}{5}{\textbottomdot}}
231\permanent\protected\def\buildtextcedilla    {\bottomaccent{0ex}{0}{5}{\textcedilla}}
232\permanent\protected\def\buildtextogonek     {\bottomaccent{-.1ex}{.5}{0}{\textogonek}}
233\permanent\protected\def\buildtextbottomcomma{\bottomaccent{.15ex}{0}{5}{\tx,}}
234
235\permanent\protected\def\topaccent#1#2#3#4#5% down right slantcorrection accent char
236  {\dontleavehmode
237   \bgroup
238     \setbox0\hbox{#4}%
239     \setbox2\hbox{#5}%
240     \hbox to \wd2 \bgroup
241        \hss\copy2\hss
242        \hskip-\wd2
243        \hss\hskip#2\wd0\hskip-#3\slantperpoint\raise#1\hbox{#4}\hss
244     \egroup
245   \egroup}
246
247\permanent\protected\def\buildtextgrave
248  {\topaccent{0pt}{0}{15}{\textgrave}} % e.g.
249
250\permanent\protected\def\definemathaccent#1 #2%
251  {\defcsname#1\endcsname{\mathaccent#2 }} % can be redefined
252
253% from enco-def:
254
255% \aliased\let\i\dotlessi
256% \aliased\let\j\dotlessj
257
258% \aliased\let\P\paragraphmark \aliased\let\textP\paragraphmark % obsolete (surfaced in bibliographic files)
259% \aliased\let\S\sectionmark   \aliased\let\textS\sectionmark   % obsolete (surfaced in bibliographic files)
260
261\immutable\def\eszett  {ß} \immutable\def\Eszett  {SS} \permanent\def\Ssharp{SS}
262\immutable\def\lslash  {ł} \immutable\def\Lslash  {Ł}
263\immutable\def\dslash  {đ} \immutable\def\Dslash  {Đ}
264%immutable\def\oslash  {ø} %immutable\def\Oslash  {Ø} % clashes with math: use \Ostroke
265\immutable\def\dcroat  {đ} \immutable\def\Dcroat  {Đ}
266\immutable\def\kcedilla{ķ} \immutable\def\Kcedilla{Ķ}
267\immutable\def\lcedilla{ļ} \immutable\def\Lcedilla{Ļ}
268\immutable\def\ncedilla{ņ} \immutable\def\Ncedilla{Ņ}
269\immutable\def\rcedilla{ŗ} \immutable\def\Rcedilla{Ŗ}
270\immutable\def\aumlaut {ä} \immutable\def\Aumlaut {Ä}
271\immutable\def\eumlaut {ë} \immutable\def\Eumlaut {Ë}
272\immutable\def\iumlaut {ï} \immutable\def\Iumlaut {Ï}
273\immutable\def\oumlaut {ö} \immutable\def\Oumlaut {Ö}
274\immutable\def\uumlaut {ü} \immutable\def\Uumlaut {Ü}
275
276%D For old times sake we keep these (obsolete):
277
278\immutable\def\textflorin{ƒ} \immutable\def\florin  {ƒ}
279\immutable\def\pound     {£} \immutable\def\sterling{£}
280\immutable\def\promille  {} \immutable\def\permille{}
281
282%D These are kind of \TEX\ specific
283
284\pushoverloadmode
285
286\permanent\protected\def\ampersand{\mathortext\mathampersand\textampersand}
287
288\immutable\let\percent\textpercent
289\immutable\let\procent\textpercent
290\immutable\let\dollar \textdollar
291\immutable\let\hash   \texthash
292
293\popoverloadmode
294
295%D some more: what with freezing here?
296
297\ifdefined\softhyphen \else
298    \aliased\let\softhyphen\explicitdiscretionary
299\fi
300
301%D The softhyhen is never used but we keep the definition below:
302
303\aliased\let\hyphen \softhyphen % never used
304
305% But we ditch these:
306
307% \def\hyphen           {\softhyphen} % never used
308% \def\compoundwordmark {\hyphen}
309% \def\cwm              {\hyphen}
310% \def\nonbreakinghyphen{\hyphen}
311% \def\breakinghyphen   {\hyphen\prewordbreak}
312
313%D Quotes \unknown\ we keep these funny names because they indicate where we come
314%D from \unknown\ long long ago when we had no real useful names for them. Some
315%D ancient styles might still use them.
316
317\aliased\let\lowerleftsingleninequote \quotesinglebase % ‚
318\aliased\let\lowerleftdoubleninequote \quotedblbase    % „
319\aliased\let\lowerrightsingleninequote\quotesinglebase % ‚
320\aliased\let\lowerrightdoubleninequote\quotedblbase    % „
321
322\aliased\let\upperleftsingleninequote \quoteright      % ’
323\aliased\let\upperleftdoubleninequote \quotedblright   % ”
324\aliased\let\upperrightsingleninequote\quoteright      % ’
325\aliased\let\upperrightdoubleninequote\quotedblright   % ”
326
327\aliased\let\upperleftsinglesixquote  \quoteleft       % ‘
328\aliased\let\upperleftdoublesixquote  \quotedblleft    % “
329\aliased\let\upperrightsinglesixquote \quoteleft       % ‘
330\aliased\let\upperrightdoublesixquote \quotedblleft    % “
331
332\aliased\let\leftsubguillemot         \guilsingleleft  % ‹
333\aliased\let\rightsubguillemot        \guilsingleright % ›
334
335% Some left-overs that will go away!
336
337\permanent\protected\def\textblacksquare{\dontleavehmode\hpack{\vrule\s!width.3\s!em\s!height.4\s!em\s!depth-.1\s!em}}
338%permanent\protected\def\schwa          {\hbox{\rotate[\c!rotation=180,\c!location=\v!high]{\hbox{e}}}}
339\permanent\protected\def\schwagrave     {\buildtextgrave\schwa}
340
341\installcorenamespace{controlspace}
342
343\permanent\protected\def\fallbackcontrolspace % beware, current font, we also need to honor color
344  {\hbox to \interwordspace \bgroup
345     \hss
346     \ifcsname\??controlspace\number\interwordspace\endcsname
347       \csname\??controlspace\number\interwordspace\endcsname
348     \else
349       \enco_fast_control_space_define % only regular
350     \fi
351     \textcontrolspace
352     \hss
353   \egroup}
354
355\protected\def\enco_fast_control_space_define
356  {\scratchdimen\interwordspace
357   \definedfont[LMTypewriter-Regular at \the\dimexpr\currentfontbodyscale\dimexpr\fontbody]% see font-sym.mkiv
358   \gletcsname\??controlspace\number\scratchdimen\endcsname\lastrawfontcall}
359
360\permanent\protected\def\normalcontrolspace
361  {\iffontchar\font\numexpr\expandafter`\textcontrolspace\relax
362     \textcontrolspace
363   \else
364     \fallbackcontrolspace
365   \fi}
366
367\aliased\let\textvisiblespace\normalcontrolspace
368
369\permanent\protected\def\optionalcontrolspace
370  {\iffontchar\font\numexpr\expandafter`\textcontrolspace\relax
371     \textcontrolspace
372   \else
373     \asciispacechar % used for export !
374   \fi}
375
376%D A smaller and bolder variant, more like the math and monospaced ones.
377
378\permanent\protected\def\fakeunderscore
379  {\relax\ifmmode
380     \vrule
381       \s!depth    .12\fontexheight\mathstylefont\normalmathstyle
382       \s!width \fontinterwordspace\mathstylefont\normalmathstyle
383       \s!height\zeropoint
384     \relax
385   \else
386     \dontleavehmode\hbox\bgroup
387       \vrule
388         \s!depth    .12\fontexheight\font
389         \s!width \fontinterwordspace\font
390         \s!height\zeropoint
391      \egroup
392   \fi}
393
394\permanent\protected\def\fakeunderscores{\enforced\let\_\fakeunderscore}
395\permanent\protected\def\textunderscores{\enforced\let\_\textunderscore}
396
397\textunderscores
398
399\ifdefined\mathunderscore \else \aliased\let\mathunderscore\fakeunderscore \fi
400\ifdefined\textunderscore \else \aliased\let\textunderscore\fakeunderscore \fi
401
402\permanent\protected\def\normalunderscore{\ifmmode\mathunderscore\else\textunderscore\fi}
403
404\pushoverloadmode
405    \enforced\let\_\normalunderscore
406\popoverloadmode
407
408%D To be sorted out:
409
410\pushoverloadmode
411
412\permanent\protected\def\textminus
413  {\char
414     \iffontchar\font"2012 "2012 \orelse % figuredash
415     \iffontchar\font"2013 "2013 \orelse % endash
416     \iffontchar\font"2212 "2212 \else   % math minus
417                           "002D \fi}    % hyphen
418
419\permanent\protected\def\textplus
420  {\char"002B } % plus
421
422\popoverloadmode
423
424%D Moved from core-mis:
425
426% \permanent\protected\def\celsius   #1{#1\mathematics{^\circ}C}
427% \permanent\protected\def\inch        {\mathematics{\prime\prime}} % was: \hbox{\rm\char125\relax}
428% \permanent\protected\def\fraction#1#2{\mathematics{#1\over#2}}
429
430\permanent\protected\def\celsius   #1{#1\iffontchar\font`℃℃\else\mathematics{^\circ}C\fi}   % 0x2103
431%permanent\protected\def\inch        {\iffontchar\font`″″\else\mathematics{\prime\prime}\fi} % 0x2103
432\permanent\protected\def\fraction#1#2{\mathematics{\Uabove exact .125\exheight {#1}{#2}}}
433
434% \permanent\protected\def\fakeminute
435%   {\dontleavehmode
436%    \begingroup
437%    \doifelseitalic
438%      {\scratchwidth\fontcharwd\font\singlequoteasciicode
439%       \hpack \s!to 1.2\scratchwidth \bgroup
440%         \glyphslant\plustwohundred
441%         \glyph \s!xoffset -0.6\scratchwidth\singlequoteasciicode
442%         \hss
443%       \egroup}%
444%      {\scratchwidth\fontcharwd\font\singlequoteasciicode
445%       \hpack \s!to 1.1\scratchwidth \bgroup
446%         \glyphslant\plusfivehundred
447%         \glyph \s!xoffset -\scratchwidth\singlequoteasciicode
448%         \hss
449%       \egroup}%
450%    \endgroup}
451
452% \permanent\protected\def\fakesecond
453%   {\dontleavehmode
454%    \begingroup
455%    \doifelseitalic
456%      {\scratchwidth\fontcharwd\font\singlequoteasciicode
457%       \hpack \s!to 1.7\scratchwidth \bgroup
458%         \glyphslant\plustwohundred
459%         \glyph \s!xoffset -0.6\scratchwidth\singlequoteasciicode
460%         \glyph \s!xoffset -1.1\scratchwidth\singlequoteasciicode
461%         \hss
462%       \egroup}%
463%      {\scratchwidth\fontcharwd\font\singlequoteasciicode
464%       \hpack \s!to 1.6\scratchwidth \bgroup
465%         \glyphslant\plusfivehundred
466%         \glyph \s!xoffset    -\scratchwidth\singlequoteasciicode
467%         \glyph \s!xoffset -1.5\scratchwidth\singlequoteasciicode
468%         \hss
469%       \egroup}%
470%    \endgroup}
471
472\permanent\protected\def\fakeminute{\startimath\mathsurround\zeropoint\mathatom \mathunspacedcode{}\prime      \stopimath}
473\permanent\protected\def\fakesecond{\startimath\mathsurround\zeropoint\mathatom \mathunspacedcode{}\doubleprime\stopimath}
474
475\permanent\protected\def\mathminute{\begingroup\resetmathcollapsing\textminute\endgroup}
476\permanent\protected\def\mathsecond{\begingroup\resetmathcollapsing\textsecond\endgroup}
477
478\permanent\protected\def\minute{\ifmmode\mathminute\orelse\iffontchar\font\textminute\textminute\else\fakeminute\fi}
479\permanent\protected\def\second{\ifmmode\mathsecond\orelse\iffontchar\font\textsecond\textsecond\else\fakesecond\fi}
480
481\aliased\let\foot\minute % $12\foot + 2$ $12\foot\foot + 2$ $12\inch + 2$
482\aliased\let\inch\second
483
484%D \startbuffer
485%D \startlines
486%D     x\periods x
487%D     x\periods[10]x
488%D     x\periods[n=10,symbol={,}]x
489%D     x\periods[n=4,symbol={!!},width=1em]x
490%D     x\periods[n=4,symbol={!!},width=fit]x
491%D     x\periods[n=4,symbol={!!},width=fit,distance=1em]x
492%D     x\unknown x
493%D \stoplines
494%D \stopbuffer
495%D
496%D \typbuffer \getbuffer
497
498\installcorenamespace {periods}
499
500\installsetuponlycommandhandler \??periods {periods}
501
502\setupperiods
503  [\c!n=3,
504   \c!width=.5\emwidth, % can also be \v!fit
505   \c!distance=.25\emwidth,
506   \c!symbol=.]
507
508\permanent\protected\def\periods
509  {\dontleavehmode
510   \hbox\bgroup
511   \doifelsenextoptional\enco_periods_yes\enco_periods_nop}
512
513\protected\def\enco_periods_yes[#1]%
514  {\doifelseassignment{#1}
515     {\setupcurrentperiods[#1]%
516      \scratchcounter{\periodsparameter\c!n}}
517     {\scratchcounter{\ifempty{#1}\periodsparameter\c!n\else#1\fi}}%
518   \enco_periods_finish}
519
520\protected\def\enco_periods_nop
521  {\scratchcounter{\periodsparameter\c!n}%
522   \enco_periods_finish}
523
524\protected\def\enco_periods_finish
525  {\edef\p_width{\periodsparameter\c!width}%
526   \ifx\p_width\v!fit % can be \ifcstoks (*)
527     \enco_periods_finish_fit
528   \else
529     \enco_periods_finish_width
530   \fi
531   \egroup}
532
533\protected\def\enco_periods_finish_width
534  {\setbox\scratchbox\hbox to {\p_width}% can be \lastnamedcs (*)
535     {\hss\periodsparameter\c!symbol\hss}%
536   \dorecurse\scratchcounter{\copy\scratchbox}}
537
538\protected\def\enco_periods_finish_fit
539  {\edef\p_symbol{\periodsparameter\c!symbol}%
540   \scratchdistance{\periodsparameter\c!distance}%
541   \hskip\scratchdistance
542   \dorecurse\scratchcounter{\p_symbol\hskip\scratchdistance}}
543
544\permanent\protected\def\unknown
545  {\dontleavehmode
546   \hbox\bgroup
547   \enco_periods_nop}
548
549%D Left-overs:
550
551\appendtoks
552    \enforced\let\buildtextaccent\secondoftwoarguments
553\to \everysimplifycommands
554
555%D See enco-ini.mkivc for a definition of the obsolete \type {\t}.
556
557\protect \endinput
558