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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
%D \module
%D [ file=lang-url,
%D version=2008.01.22, % used to be lang-mis
%D title=\CONTEXT\ Language Macros,
%D subtitle=Language Options,
%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.
\registerctxluafile{lang-url}{1.001}
\unprotect
%D \macros
%D {hyphenatedurl}
%D
%D For those who want to put full \URL's in a text, we offer
%D
%D \startbuffer
%D \hyphenatedurl{http://optimist.optimist/optimist/optimist.optimist#optimist}
%D \stopbuffer
%D
%D \typebuffer
%D
%D which breaks at the appropriate places. Watch the \type{#}
%D hack.
%D
%D When passed as argument, like in \type {\goto}, one needs
%D to substitute a \type {\\} for each \type{#}.
%D
%D \startbuffer
%D \hyphenatedurl{http://this.is.a.rather/strange/reference#indeed}
%D \stopbuffer
%D
%D \typebuffer
\newtoks\everyhyphenatedurl
\appendtoks
\let\&\letterampersand
\let\#\letterhash
\let\~\lettertilde
\let\\\letterbackslash
\let\$\letterdollar
\let\^\letterhat
\let\_\letterunderscore
\let\{\letterleftbrace
\let\}\letterrightbrace
\let\|\letterbar
\let~=\lettertilde
\let|=\letterbar
\to \everyhyphenatedurl
\def\hyphenatedurlseparator{} % \periodcentered
\def\dohyphenatedurlafter #1{\char#1\discretionary{}{\hyphenatedurlseparator}{}}%
\def\dohyphenatedurlbefore#1{\discretionary{\hyphenatedurlseparator}{}{}\char#1\relax}%
\def\dohyphenatedurlnormal#1{\char#1\relax}%
\def\dohyphenatedurldisc #1{\discretionary{}{}{}}
\def\sethyphenatedurlnormal #1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,0)}}
\def\sethyphenatedurlbefore #1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,1)}}
\def\sethyphenatedurlafter #1{\ctxcommand{hyphenatedurl.setcharacters(\!!bs#1\!!es,2)}}
\def\hyphenatedurldiscretionary{}
% \sethyphenatedurlafter{ABCDEF}
\setnewconstant\hyphenatedurllefthyphenmin \plusthree
\setnewconstant\hyphenatedurlrighthyphenmin\plusthree
\unexpanded \def\hyphenatedurl#1%
{\dontleavehmode
\begingroup
\the\everyhyphenatedurl
\let\n\dohyphenatedurlnormal
\let\b\dohyphenatedurlbefore
\let\a\dohyphenatedurlafter
\let\d\dohyphenatedurldisc
\normalexpanded{\noexpand\ctxcommand{hyphenatedurl(
\!!bs\noexpand\detokenize{#1}\!!es,
\number\hyphenatedurllefthyphenmin,
\number\hyphenatedurlrighthyphenmin,
"\hyphenatedurldiscretionary"
)}}%
\endgroup}
%D \macros
%D {hyphenatedfilename}
%D
%D For the moment we treat filenames in a similar way,
%D
%D \starttyping
%D \hyphenatedfilename{here/there/filename.suffix}
%D \stoptyping
\ifx\hyphenatedfilename\undefined \let\hyphenatedfilename\hyphenatedurl \fi
% \def\test#1%
% {\dontleavehmode
% \begingroup
% \tttf
% \hyphenatedurl {%
% \letterampersand #1\letterampersand #1\letterampersand #1\letterampersand #1\letterampersand
% \letterhash #1\letterhash #1\letterpercent #1\letterslash #1\letterampersand
% }%
% \endgroup}
% \dorecurse{100}{\test{a} \test{ab} \test{abc} \test{abcd} \test{abcde} \test{abcdef}}
\protect \endinput
|