blob: c1a044df1ae89454db397f2e706766f9ae088f80 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
%D \module
%D [ file=catc-act,
%D version=2006.09.18,
%D title=\CONTEXT\ Catcode Macros,
%D subtitle=Default Catcode Tables,
%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 module deals with some active character handling. Use
%D with care.
%D \macros
%D {installactivecharacter}
\def\installactivecharacter#1 %
{\edef\temp{\detokenize{#1}}%
\cctcounterc\expandafter`\temp\relax % relax needed
\expandafter\startextendcatcodetable
\expandafter\ctxcatcodes\expandafter\catcode\the\cctcounterc\activecatcode
\stopextendcatcodetable
\letcatcodecommand \ctxcatcodes \cctcounterc \temp \relax
\ifnum\currentcatcodetable=\ctxcatcodes \setcatcodetable\ctxcatcodes \fi}
%D \macros
%D {defineactivecharacter}
%D
%D Use this one with care, esp in combination with catcode
%D vectors. There are better ways now.
\chardef\activehackcode=`~
\def\defineactivecharacter #1#2 #3%
{\cctcounterc\uccode\activehackcode
\if#1"\uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1#2}\empty #1#2\else
\uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1#2}\empty`#1#2\fi
\catcode\uccode\activehackcode\activecatcode
\uppercase{\def\next{~}}%
\uccode\activehackcode\cctcounterc
\expandafter\expandafter\expandafter\def\expandafter\next\expandafter
{\expandafter\dohandleactivecharacter\next{#3}}}
\chardef\activecharactermode\plusone % overloading still backward compatible
\def\dodohandleactivecharacter#1#2{#2}
\def\donthandleactivecharacter#1#2{\noexpand#1}
\def\dohandleactivecharacter
{\ifcase\activecharactermode
\expandafter\donthandleactivecharacter
\else
\expandafter\dodohandleactivecharacter
\fi}
\def\makecharacteractive #1 {\catcode`#1\active}
\def\installanddefineactivecharacter #1 % #2%
{\normalexpanded{\noexpand\installactivecharacter \utfchar{#1} }%
\defineactivecharacter #1 }% {#2}}
\endinput
|