1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16\writestatus
{
loading
}{
ConTeXt
Typesetting
Macros
Delimited
Content
}
17
18\unprotect
19
20\ifdefined
\dotagsetdelimitedsymbol
\else
\let
\dotagsetdelimitedsymbol
\gobbleoneargument
\fi
21\ifdefined
\dotagsetsubsentencesymbol
\else
\let
\dotagsetsubsentencesymbol
\gobbleoneargument
\fi
22
23
24
25\installcorenamespace
{
hyphenmarksign
}
26
27\unexpanded
\def
\setuphyphenmark
[#
1
]
28 {
\getdummyparameters
[#
1
]
29 \expandnamespaceparameter
\??hyphenmarksign
\dummyparameter
\c!sign\v!normal
}
30
31\setvalue
{
\??hyphenmarksign\v!normal
}
32 {
\let
\textmodehyphen
\normalhyphen
33 \let
\textmodehyphendiscretionary
\normalhyphendiscretionary
}
34
35\setvalue
{
\??hyphenmarksign\v!wide
}
36 {
\let
\textmodehyphen
\composedhyphen
37 \let
\textmodehyphendiscretionary
\composedhyphendiscretionary
}
38
39\setuphyphenmark
[
\c!sign
=
\v!wide
]
40
41\definesymbol
[
\c!lefthyphen
]
[
\languageparameter
\c!lefthyphen
]
42\definesymbol
[
\c!righthyphen
]
[
\languageparameter
\c!righthyphen
]
43\definesymbol
[
\c!hyphen
]
[
\languageparameter
\c!hyphen
]
44
45\unexpanded
\def
\normalhyphen
46 {
\hbox
{
\directsymbol
\empty
\c!hyphen
}}
47
48\unexpanded
\def
\composedhyphen
49 {
\hbox
{
\directsymbol
\empty
\c!compoundhyphen
}}
50
51\unexpanded
\def
\normalhyphendiscretionary
52 {
\discretionary
53 {
\hbox
{
\directsymbol
\empty
\c!righthyphen
}}
54 {
\hbox
{
\directsymbol
\empty
\c!lefthyphen
}}
55 {
\hbox
{
\directsymbol
\empty
\c!hyphen
}}}
56
57\unexpanded
\def
\composedhyphendiscretionary
58 {
\discretionary
59 {
\hbox
{
\directsymbol
\empty
\c!rightcompoundhyphen
}}
60 {
\hbox
{
\directsymbol
\empty
\c!leftcompoundhyphen
}}
61 {
\hbox
{
\directsymbol
\empty
\c!compoundhyphen
}}}
62
63\let
\textmodehyphen
\composedhyphen
64\let
\textmodehyphendiscretionary
\composedhyphendiscretionary
65
66\definesymbol
[
\c!leftcompoundhyphen
]
[
\languageparameter
\c!leftcompoundhyphen
]
67\definesymbol
[
\c!rightcompoundhyphen
]
[
\languageparameter
\c!rightcompoundhyphen
]
68\definesymbol
[
\c!compoundhyphen
]
[
\languageparameter
\c!compoundhyphen
]
69
70
71
72\setnewconstant
\boundarycharactermode
\plusone
73
74
75
76
77\unexpanded
\def
\midboundarycharacter
#
1
#
2
78 {
\ifcase
\boundarycharactermode
79 \or
80 \removeunwantedspaces
81 \wordboundary
82 \hskip
\hspaceamount
\currentusedlanguage
{
#
2
}
83 \usedlanguageparameter
#
1
84 \hskip
\hspaceamount
\currentusedlanguage
{
#
2
}
85 \wordboundary
86 \ignorespaces
87 \or
88 \usedlanguageparameter
#
1
89 \fi
90 \boundarycharactermode
\plusone
}
91
92
93
94
95\unexpanded
\def
\leftboundarycharacter
#
1
#
2
96 {
\ifcase
\boundarycharactermode
97 \or
98 \usedlanguageparameter
#
1
99 \nobreak
100 \hskip
\hspaceamount
\currentusedlanguage
{
#
2
}
101 \wordboundary
102 \or
103 \usedlanguageparameter
#
1
104 \fi
105 \boundarycharactermode
\plusone
}
106
107
108
109
110\unexpanded
\def
\rightboundarycharacter
#
1
#
2
111 {
\ifcase
\boundarycharactermode
112 \or
113 \wordboundary
114 \nobreak
115 \hskip
\hspaceamount
\currentusedlanguage
{
#
2
}
116 \usedlanguageparameter
#
1
117 \or
118 \usedlanguageparameter
#
1
119 \fi
120 \boundarycharactermode
\plusone
}
121
122\definehspace
[
sentence
]
[
\zeropoint
]
123\definehspace
[
intersentence
]
[
.
2
5
0
\emwidth
]
124
125\definesymbol
126 [
\c!midsentence
]
127 [
\midboundarycharacter
\c!midsentence
{
sentence
}
]
128
129\definesymbol
130 [
\c!leftsentence
]
131 [
\leftboundarycharacter
\c!leftsentence
{
sentence
}
]
132
133\definesymbol
134 [
\c!rightsentence
]
135 [
\rightboundarycharacter
\c!rightsentence
{
sentence
}
]
136
137\definesymbol
138 [
\c!leftsubsentence
]
139 [
\leftboundarycharacter
\c!leftsubsentence
{
sentence
}
]
140
141\definesymbol
142 [
\c!rightsubsentence
]
143 [
\rightboundarycharacter
\c!rightsubsentence
{
sentence
}
]
144
145\newsignal
\d_typo_subsentence_signal
146\newcount
\c_typo_subsentence_nesting
147
148\let
\beforesubsentence
\donothing
149\let
\aftersubsentence
\donothing
150
151
152
153
154
155
156\newconditional
\c_typo_subsentence_cleanup
\settrue
\c_typo_subsentence_cleanup
157
158\def
\typo_subsentence_cleanup_start
159 {
\ifconditional
\c_typo_subsentence_cleanup
160 \expandafter\ignorespaces
161 \fi
}
162
163\def
\typo_subsentence_cleanup_stop
164 {
\ifconditional
\c_typo_subsentence_cleanup
165 \removeunwantedspaces
166 \fi
}
167
168\unexpanded
\def
\midsentence
169 {
\dostarttagged
\t!subsentencesymbol
\empty
170 \dotagsetsubsentencesymbol
\s!middle
171 \symbol
[
\c!midsentence
]
172 \dostoptagged
}
173
174\unexpanded
\def
\beginofsubsentence
175 {
\beforesubsentence
176 \ifdim
\lastkern
=
\d_typo_subsentence_signal
177 \unskip
178 \kern
\hspaceamount
\currentusedlanguage
{
intersentence
}
179 \fi
180 \global\advance
\c_typo_subsentence_nesting
\plusone
181 \ifnum
\c_typo_subsentence_nesting
=
\plusone
182 \dontleavehmode
183 \fi
184 \dostarttagged
\t!subsentence
\empty
185 \dostarttagged
\t!subsentencesymbol
\empty
186 \dotagsetsubsentencesymbol
\s!left
187 \symbol
[
\ifodd
\c_typo_subsentence_nesting
\c!leftsentence
\else
\c!leftsubsentence
\fi
]
188 \dostoptagged
189 \dostarttagged
\t!subsentencecontent
\empty
190 \typo_subsentence_cleanup_start
}
191
192\unexpanded
\def
\endofsubsentence
193 {
\typo_subsentence_cleanup_stop
194 \dostoptagged
195 \dostarttagged
\t!subsentencesymbol
\empty
196 \dotagsetsubsentencesymbol
\s!right
197 \symbol
[
\ifodd
\c_typo_subsentence_nesting
\c!rightsentence
\else
\c!rightsubsentence
\fi
]
198 \dostoptagged
199 \dostoptagged
200 \global\advance
\c_typo_subsentence_nesting
\minusone
201 \unskip
202 \kern
\d_typo_subsentence_signal
\relax
203 \aftersubsentence
}
204
205\unexpanded
\def
\beginofsubsentencespacing
206 {
\kern
\d_typo_subsentence_signal
\relax
}
207
208\unexpanded
\def
\endofsubsentencespacing
209 {
\ifdim
\lastkern
=
\d_typo_subsentence_signal
210 \unskip
211 \hskip
\hspaceamount
\currentusedlanguage
{
intersentence
}
212
213
214 \else
215 \unskip
216 \fi
}
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233\unexpanded
\def
\startsubsentence
{
\beginofsubsentence
\wordboundary
\beginofsubsentencespacing
\wordboundary
\typo_subsentence_cleanup_start
}
234\unexpanded
\def
\stopsubsentence
{
\typo_subsentence_cleanup_stop
\wordboundary
\endofsubsentencespacing
\wordboundary
\endofsubsentence
}
235\unexpanded
\def
\subsentence
{
\groupedcommandcs
\startsubsentence\stopsubsentence
}
236\unexpanded
\def
\midsubsentence
{
\typo_subsentence_cleanup_start
\wordboundary
\midsentence
\wordboundary
\typo_subsentence_cleanup_stop
}
237
238\definehspace
[
quotation
]
[
\zeropoint
]
239\definehspace
[
interquotation
]
[
.
1
2
5
em
]
240
241
242
243
244\definehspace
[
quote
]
[
\hspaceamount
\currentusedlanguage
{
quotation
}
]
245\definehspace
[
speech
]
[
\hspaceamount
\currentusedlanguage
{
quotation
}
]
246
247\definesymbol
248 [
\c!leftquotation
]
249 [
\leftboundarycharacter
\c!leftquotation
{
quotation
}
]
250
251\definesymbol
252 [
\c!rightquotation
]
253 [
\rightboundarycharacter
\c!rightquotation
{
quotation
}
]
254
255\definesymbol
256 [
\c!nextleftquotation
]
257 [
\rightboundarycharacter
\c!leftquotation
{
quotation
}
]
258
259\definesymbol
260 [
\c!nextrightquotation
]
261 [
\leftboundarycharacter
\c!rightquotation
{
quotation
}
]
262
263\definesymbol
264 [
\c!leftquote
]
265 [
\leftboundarycharacter
\c!leftquote
{
quote
}
]
266
267\definesymbol
268 [
\c!rightquote
]
269 [
\rightboundarycharacter
\c!rightquote
{
quote
}
]
270
271\definesymbol
272 [
\c!leftspeech
]
273 [
\leftboundarycharacter
\c!leftspeech
{
speech
}
]
274
275\definesymbol
276 [
\c!rightspeech
]
277 [
\rightboundarycharacter
\c!rightspeech
{
speech
}
]
278
279\definesymbol
280 [
\c!middlespeech
]
281 [
\leftboundarycharacter
\c!middlespeech
{
speech
}
]
282
283\appendtoks
284 \def
\quotation
#
1
{
"#
1
"
}
285 \def
\quote
#
1
{
#
1
}
286\to
\everysimplifycommands
287
288
289
290
291
292
293
294\newsignal
\d_typo_delimited_signal
295
296\let
\currentdelimitedtext
\s!unknown
297
298\installglobalmacrostack
\currentdelimitedtext
299
300\let
\delimitedtextlevel
\!!zerocount
301
302\def
\c_typo_delimited_nesting
{
\csname
\??delimitedtextlevel
\currentparentdelimitedtext
\endcsname
}
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322\let
\currentdelimitedlanguage
\empty
323
324\installglobalmacrostack
\currentdelimitedlanguage
325
326\def
\typo_delimited_set_language_nop
327 {
\setusedlanguage
{
\delimitedtextparameter
\c!language
}}
328
329\def
\typo_delimited_set_language_yes
330 {
\doiflanguageelse
\m_delimited_argument
331 \typo_delimited_set_language_yes_a
332 {
\doifelseinstring
:
\m_delimited_argument
333 \typo_delimited_set_language_yes_b
334 \typo_delimited_set_language_nop
}}
335
336\def
\typo_delimited_set_language_yes_b
337 {
\splitatcolon
\m_delimited_argument
\outerdelimitedlanguage
\innerdelimitedlanguage
338 \ifx
\outerdelimitedlanguage
\empty
339 \typo_delimited_set_language_nop
340 \else
341 \doiflanguageelse
\outerdelimitedlanguage
342 {
\setusedlanguage
\outerdelimitedlanguage
}
343 \typo_delimited_set_language_nop
344 \fi
345 \ifx
\innerdelimitedlanguage
\empty
346 \else
347 \doiflanguageelse
\innerdelimitedlanguage
348 {
\let
\currentdelimitedlanguage
\innerdelimitedlanguage
}
349 \donothing
350 \fi
351 \let
\m_delimited_argument
\empty
}
352
353\def
\typo_delimited_set_language_yes_a
354 {
\let
\currentdelimitedlanguage
\m_delimited_argument
355 \let
\m_delimited_argument
\empty
}
356
357\def
\typo_delimited_push
#
1
#
2
358 {
\push_macro_currentdelimitedtext
359 \push_macro_currentdelimitedlanguage
360 \edef
\currentdelimitedtext
{
#
1
}
361 \edef
\m_delimited_argument
{
#
2
}
362 \ifx
\m_delimited_argument
\empty
363 \typo_delimited_set_language_nop
364 \else
365 \typo_delimited_set_language_yes
366 \fi
367 \let
\currentparentdelimitedtext
\currentdelimitedtext
368 \global\advance
\c_typo_delimited_nesting
\plusone
369 \edef
\delimitedtextlevel
{
\number
\c_typo_delimited_nesting
}
370 \normalexpanded
{
\chaintocurrentdelimitedtext
{
\currentparentdelimitedtext
:
\delimitedtextlevel
}}
371 \edef
\currentdelimitedtext
{
\currentparentdelimitedtext
:
\delimitedtextlevel
}}
372
373\def
\typo_delimited_pop
374 {
\global\advance
\c_typo_delimited_nesting
\minusone
375 \pop_macro_currentdelimitedlanguage
376 \pop_macro_currentdelimitedtext
}
377
378\installcorenamespace
{
delimitedtext
}
379\installcorenamespace
{
delimitedtextlevel
}
380
381\installcommandhandler
\??delimitedtext
{
delimitedtext
}
\??delimitedtext
382
383\appendtoks
384 \expandafter
\newcount
\csname
\??delimitedtextlevel
\currentdelimitedtext
\endcsname
385 \setuevalue
{
\currentdelimitedtext
}{
\delimitedtext
[
\currentdelimitedtext
]
}
386 \setuevalue
{
\e!start
\currentdelimitedtext
}{
\startdelimitedtext
[
\currentdelimitedtext
]
}
387 \setuevalue
{
\e!stop
\currentdelimitedtext
}{
\stopdelimitedtext
}
388\to
\everydefinedelimitedtext
389
390\setupdelimitedtext
391 [
\c!location
=
\v!margin
,
392 \c!spacebefore
=
,
393 \c!spaceafter
=
\delimitedtextparameter
\c!spacebefore
,
394 \c!style
=
,
395 \c!color
=
,
396 \c!leftmargin
=
\zeropoint
,
397 \c!rightmargin
=
\delimitedtextparameter
\c!leftmargin
,
398 \c!indentnext
=
\v!yes
,
399 \c!before
=
,
400 \c!after
=
,
401 \c!left
=
,
402 \c!right
=
,
403
404 \c!method
=
,
405
406 \c!repeat
=
\v!no
]
407
408\def
\typo_delimited_repeat_indeed
409 {
\relax\ifcase
\delimitedtextlevel
\else
410 \typo_delimited_handle_middle
\c!middle
411 \fi
}
412
413\let
\typo_delimited_repeat
\relax
414
415\unexpanded
\def
\startdelimitedtext
416 {
\dodoubleempty
\typo_delimited_text_start
}
417
418\unexpanded
\def
\typo_delimited_text_start
[#
1
][#
2
]
419 {
\begingroup
420 \typo_delimited_push
{
#
1
}{
#
2
}
421 \dostarttaggedchained
\t!delimitedblock
\currentdelimitedtext
\??delimitedtext
422 \edef
\p_delimited_method
{
\delimitedtextparameter
\c!method
}
423 \ifx
\p_delimited_method
\s!font
424 \expandafter
\typo_delimited_start_font
425 \else
426 \expandafter
\typo_delimited_start_other
427 \fi
}
428
429\let
\typo_delimited_stop
\relax
430
431\def
\typo_delimited_start_font
432 {
\let
\typo_delimited_stop
\typo_delimitedtexts_finish_font
433 \dostarttagged
\t!delimitedsymbol
\empty
434 \dotagsetdelimitedsymbol
\s!left
435 \delimitedtextparameter
\c!left
436 \dostoptagged
437 \ignorespaces
}
438
439\newconditional
\c_typo_delimited_repeating
440
441\def
\typo_delimited_start_other
442 {
\edef
\p_delimited_repeat
{
\delimitedtextparameter
\c!repeat
}
443 \ifx
\p_delimited_repeat
\v!yes
444 \let
\typo_delimited_repeat
\typo_delimited_repeat_indeed
445 \else
446 \let
\typo_delimited_repeat
\relax
447 \fi
448 \setfalse
\c_typo_delimited_repeating
449 \edef
\p_delimited_location
{
\delimitedtextparameter
\c!location
}
450 \ifx
\p_delimited_location
\v!paragraph
451 \singleexpandafter
\typo_delimited_start_par
452 \else\ifx
\p_delimited_location
\v!margin
453 \doubleexpandafter
\typo_delimited_start_par
454 \else
455 \doubleexpandafter
\typo_delimited_start_txt
456 \fi\fi
}
457
458\def
\typo_delimitedtexts_finish_font
459 {
\removeunwantedspaces
460 \dostarttagged
\t!delimitedsymbol
\empty
461 \dotagsetdelimitedsymbol
\s!right
462 \delimitedtextparameter
\c!right
463 \dostoptagged
}
464
465\def
\typo_delimited_show_language_indeed
#
1
#
2
466 {
\begingroup
467 \infofont
468 \setbox
\scratchbox
\hpack
{
\lower
\strutht
\hbox
to
\zeropoint
{
\darkred
#
1
\currentlanguage
:
\currentdelimitedlanguage
#
2
}}
469 \vsmashbox
\scratchbox
470 \box
\scratchbox
471 \endgroup
}
472
473\let
\typo_delimited_show_language
\gobbletwoarguments
474
475\installtextracker
{
delimited
.
language
}
476 {
\let
\typo_delimited_show_language
\typo_delimited_show_language_indeed
}
477 {
\let
\typo_delimited_show_language
\gobbletwoarguments
}
478
479\def
\typo_delimited_start_content
480 {
\dostarttagged
\t!delimitedcontent
\empty
481 \begingroup
482 \douselanguageparameter
\currentdelimitedlanguage
483 \typo_delimited_show_language
<
\hss
484 \ignorespaces
}
485
486\def
\typo_delimited_stop_content
487 {
\removeunwantedspaces
488 \removelastskip
489 \typo_delimited_show_language
\hss
<
490 \endgroup
491 \dostoptagged
}
492
493\def
\typo_delimited_start_par
494 {
\dosingleempty
\typo_delimited_start_par_indeed
}
495
496\let
\typo_delimited_stop_par_indeed
\endgraf
497
498\def
\typo_delimited_start_par_indeed
[#
1
]
499 {
\let
\typo_delimited_stop
\typo_delimited_stop_par
500 \edef
\p_delimited_spacebefore
{
\delimitedtextparameter
\c!spacebefore
}
501 \ifx
\p_delimited_spacebefore
\empty
\else
502 \blank
[
\p_delimited_spacebefore
]
503 \fi
504 \delimitedtextparameter
\c!before
505 \iffirstargument
506 \edef
\m_delimited_argument
{
#
1
}
507 \fi
508 \ifx
\m_delimited_argument
\empty
509 \let
\m_delimited_argument
\m_delimited_argument
510 \fi
511 \ifx
\m_delimited_argument
\empty
512 \endgraf
513 \doadaptleftskip
{
\delimitedtextparameter
\c!leftmargin
}
514 \doadaptrightskip
{
\delimitedtextparameter
\c!rightmargin
}
515 \let
\typo_delimited_stop_par_indeed
\endgraf
516 \else
517 \startnarrower
[
\m_delimited_argument
]
518 \let
\typo_delimited_stop_par_indeed
\stopnarrower
519 \fi
520
521 \push_macro_checkindentation
522 \useindentingparameter
\delimitedtextparameter
523
524 \begingroup
525 \usedelimitedtextstyleandcolor
\c!style\c!color
526
527 \begingroup
528 \edef
\p_delimited_left
{
\delimitedtextparameter
{
\c!left
}}
529 \edef
\p_delimited_right
{
\delimitedtextparameter
{
\c!right
}}
530 \edef
\p_delimited_nextleft
{
\delimitedtextparameter
{
\c!nextleft
}}
531 \edef
\p_delimited_nextright
{
\delimitedtextparameter
{
\c!nextright
}}
532
533 \leftdelimitedtextmark
534
535 \setnextleftdelimitedtextmark
536 \setnextrightdelimitedtextmark
537
538 \typo_delimited_start_content
}
539
540\def
\typo_delimited_stop_par
541 {
\typo_delimited_stop_content
542 \rightdelimitedtextmark
543 \rightdelimitedtextmark
544 \carryoverpar
\endgroup
545 \endgraf
546 \endgroup
547 \pop_macro_checkindentation
548 \typo_delimited_stop_par_indeed
549 \delimitedtextparameter
\c!after
550 \edef
\p_delimited_spaceafter
{
\delimitedtextparameter
\c!spaceafter
}
551 \ifx
\p_delimited_spaceafter
\empty
\else
552 \blank
[
\p_delimited_spaceafter
]
553 \fi
554 \useindentnextparameter
\delimitedtextparameter
555 \aftergroup
\dorechecknextindentation
}
556
557\def
\typo_delimited_start_txt
558 {
\let
\typo_delimited_stop
\typo_delimited_stop_txt
559 \begingroup
560 \usedelimitedtextstyleandcolor
\c!style\c!color
561 \typo_delimited_handle_left
\c!left
562 \typo_delimited_start_content
}
563
564\def
\typo_delimited_stop_txt
565 {
\typo_delimited_stop_content
566 \typo_delimited_handle_right
\c!right
567 \endgroup
}
568
569\unexpanded
\def
\stopdelimitedtext
570 {
\typo_delimited_stop
571 \dostoptagged
572 \typo_delimited_pop
573 \endgroup
}
574
575\unexpanded
\def
\delimitedtext
576 {
\dodoubleempty
\typo_delimited_text
}
577
578\unexpanded
\def
\typo_delimited_text
[#
1
][#
2
]
579 {
\dontleavehmode
580 \typo_delimited_push
{
#
1
}{
#
2
}
581 \edef
\p_delimited_method
{
\delimitedtextparameter
\c!method
}
582 \ifx
\p_delimited_method
\s!font
583 \expandafter
\typo_delimited_fontdriven
584 \else
585 \expandafter
\typo_delimited_other
586 \fi
}
587
588\def
\typo_delimited_other
589 {
\edef
\p_delimited_location
{
\delimitedtextparameter
\c!location
}
590 \ifx
\p_delimited_location
\v!paragraph
591 \singleexpandafter
\typo_delimited_par
592 \else\ifx
\p_delimited_location
\v!margin
593 \doubleexpandafter
\typo_delimited_par
594 \else
595 \doubleexpandafter
\typo_delimited_txt
596 \fi\fi
}
597
598
599
600\unexpanded
\def
\startdelimited
{
\startdelimitedtext
}
601\unexpanded
\def
\stopdelimited
{
\stopdelimitedtext
}
602 \def
\delimited
{
\delimitedtext
}
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626\unexpanded
\def
\setnextleftdelimitedtextmark
627 {
\ifx
\p_delimited_nextleft
\empty
628
629 \else\ifx
\p_delimited_nextleft
\v!left
630 \typo_delimited_nextleft_symbol
\p_delimited_left
631 \else\ifx
\p_delimited_nextleft
\v!right
632 \typo_delimited_nextleft_symbol
\p_delimited_right
633 \else
634 \typo_delimited_nextleft_symbol
\p_delimited_nextleft
635 \fi\fi\fi
}
636
637\unexpanded
\def
\setnextrightdelimitedtextmark
638 {
\ifx
\p_delimited_nextright
\empty
639
640 \else\ifx
\p_delimited_nextright
\v!right
641 \typo_delimited_nextright_symbol
\p_delimited_right
642 \else\ifx
\p_delimited_nextright
\v!left
643 \typo_delimited_nextright_symbol
\p_delimited_left
644 \else
645 \typo_delimited_nextright_symbol
\p_delimited_nextright
646 \fi\fi\fi
}
647
648\unexpanded
\def
\leftdelimitedtextmark
649 {
\ifx
\p_delimited_left
\empty
650
651 \else
652 \typo_delimited_left_symbol
\p_delimited_left
653 \fi
}
654
655\unexpanded
\def
\rightdelimitedtextmark
656 {
\ifx
\p_delimited_right
\empty
657
658 \else
659 \typo_delimited_right_symbol
\p_delimited_right
660 \fi
}
661
662\def
\typo_delimited_left_symbol
#
1
663 {
\dostarttagged
\t!delimitedsymbol
\empty
664 \dotagsetdelimitedsymbol
\s!left
665 \setbox
\scratchbox
\hbox
{
\usedelimitedtextstyleandcolor
\c!symstyle\c!symcolor
#
1
}
666 \dontleavehmode
667 \edef
\p_delimited_margin
{
\delimitedtextparameter
\c!location
}
668 \ifx
\p_delimited_margin
\v!margin
669 \hskip
\wd
\scratchbox
670 \fi
671 \box
\scratchbox
672 \dostoptagged
}
673
674\def
\typo_delimited_right_symbol
#
1
675 {
\dostarttagged
\t!delimitedsymbol
\empty
676 \dotagsetdelimitedsymbol
\s!right
677 \hsmash
{
\usedelimitedtextstyleandcolor
\c!symstyle\c!symcolor
#
1
}
678 \dostoptagged
}
679
680\def
\typo_delimited_nextleft_symbol
#
1
681 {
\let
\typo_delimited_reset_next_symbol
\typo_delimited_reset_next_symbol_indeed
682 \localleftbox
\bgroup
683 \swapmacros
\leftboundarycharacter
\rightboundarycharacter
684 \boundarycharactermode
\plusone
685 \typo_delimited_left_symbol
#
1
686 \egroup
}
687
688\def
\typo_delimited_nextright_symbol
#
1
689 {
\let
\typo_delimited_reset_next_symbol
\typo_delimited_reset_next_symbol_indeed
690 \localrightbox
\bgroup
691 \swapmacros
\leftboundarycharacter
\rightboundarycharacter
692 \boundarycharactermode
\plusone
693 \typo_delimited_right_symbol
#
1
694 \egroup
}
695
696\unexpanded
\def
\typo_delimited_reset_next_symbol_indeed
697 {
\localleftbox
{}
698 \localrightbox
{}}
699
700\let
\typo_delimited_reset_next_symbol
\relax
701
702\appendtoks
703 \typo_delimited_reset_next_symbol
704\to
\everyforgetall
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723\def
\typo_delimited_handle_middle
#
1
724 {
\ifconditional
\c_typo_delimited_repeating
725 \begingroup
726 \usedelimitedtextstyleandcolor
\c!symstyle\c!symcolor
727 \setbox
\scratchbox
\hbox
{
\delimitedtextparameter
#
1
}
728 \ifdim
\wd
\scratchbox
>
\zeropoint
729 \ifdim
\lastkern
=
\d_typo_delimited_signal
730 \unkern
731 \hskip
\hspaceamount
\currentusedlanguage
{
interquotation
}
732 \else
733
734
735
736
737 \fi
738 \strut
739 \dostarttagged
\t!delimitedsymbol
\empty
740 \dotagsetdelimitedsymbol
\s!middle
741 \delimitedtextparameter
#
1
742 \dostoptagged
743
744 \kern
\d_typo_delimited_signal
745 \fi
746 \endgroup
747 \else
748 \settrue
\c_typo_delimited_repeating
749 \fi
}
750
751\def
\typo_delimited_handle_left
#
1
752 {
\begingroup
753 \usedelimitedtextstyleandcolor
\c!symstyle\c!symcolor
754 \setbox
\scratchbox
\hbox
{
\delimitedtextparameter
#
1
}
755 \ifdim
\wd
\scratchbox
>
\zeropoint
756 \ifdim
\lastkern
=
\d_typo_delimited_signal
757 \unkern
758 \hskip
\hspaceamount
\currentusedlanguage
{
interquotation
}
759 \else\ifdim\lastskip
=
\d_typo_delimited_signal
760 \unskip
761 \hskip
\hspaceamount
\currentusedlanguage
{
interquotation
}
762 \fi\fi
763
764
765
766
767
768 \strut
769 \dostarttagged
\t!delimitedsymbol
\empty
770 \dotagsetdelimitedsymbol
\s!left
771 \delimitedtextparameter
#
1
772 \dostoptagged
773 \penalty
\plustenthousand
774 \hskip
\d_typo_delimited_signal
775 \fi
776 \endgroup
}
777
778\def
\typo_delimited_handle_right
#
1
779 {
\begingroup
780 \usedelimitedtextstyleandcolor
\c!symstyle\c!symcolor
781 \setbox
\scratchbox
\hbox
{
\delimitedtextparameter
#
1
}
782 \ifdim
\wd
\scratchbox
>
\zeropoint
783 \ifdim
\lastkern
=
\d_typo_delimited_signal
784 \unkern
785 \penalty
\plustenthousand
786 \hskip
\hspaceamount
\currentusedlanguage
{
interquotation
}
787 \else\ifdim\lastskip
=
\d_typo_delimited_signal
788 \unskip
789 \penalty
\plustenthousand
790 \hskip
\hspaceamount
\currentusedlanguage
{
interquotation
}
791 \fi\fi
792 \ifhmode
793 \penalty
\plustenthousand
794 \hskip
\zeropoint
795 \fi
796 \strut
797 \dostarttagged
\t!delimitedsymbol
\empty
798 \dotagsetdelimitedsymbol
\s!right
799 \delimitedtextparameter
#
1
800 \dostoptagged
801 \kern
\d_typo_delimited_signal
802 \fi
803 \endgroup
}
804
805\unexpanded
\def
\typo_delimited_par
806 {
\groupedcommand
807 {
\dostarttaggedchained
\t!delimited
\currentdelimitedtext
\??delimitedtext
808 \usedelimitedtextstyleandcolor
\c!style\c!color
809 \typo_delimited_handle_left
\c!left
810 \typo_delimited_start_content
}
811 {
\typo_delimited_stop_content
812 \typo_delimited_handle_right
\c!right
813 \removelastskip
814 \dostoptagged
815 \typo_delimited_pop
}}
816
817\unexpanded
\def
\typo_delimited_txt
818 {
\edef
\p_left_right
{
\delimitedtextparameter
\c!left
\delimitedtextparameter
\c!right
}
819 \ifx
\p_left_right
\empty
820 \expandafter
\typo_delimited_attributed
821 \else
822 \expandafter
\typo_delimited_quoted
823 \fi
}
824
825\def
\typo_delimited_quoted
826 {
\dontleavehmode
827 \begingroup
828 \dostarttaggedchained
\t!delimited
\currentdelimitedtext
\??delimitedtext
829 \typo_delimited_handle_left
\c!left
830 \usedelimitedtextstyleandcolor
\c!style\c!color
831 \typo_delimited_start_content
832 \bgroup
833 \aftergroup
\typo_delimited_quoted_e
834 \let
\next
=
}
835
836\def
\typo_delimited_quoted_e
837 {
\typo_delimited_stop_content
838 \typo_delimited_handle_right
\c!right
839 \removelastskip
840 \dostoptagged
841 \typo_delimited_pop
842 \endgroup
}
843
844\def
\typo_delimited_attributed
845 {
\dontleavehmode
846 \begingroup
847 \dostarttaggedchained
\t!delimited
\currentdelimitedtext
\??delimitedtext
848 \usedelimitedtextstyleandcolor
\c!style\c!color
849 \typo_delimited_start_content
850 \bgroup
851 \aftergroup
\typo_delimited_attributed_e
852 \let
\next
=
}
853
854\def
\typo_delimited_attributed_e
855 {
\typo_delimited_stop_content
856 \dostoptagged
857 \typo_delimited_pop
858 \endgroup
}
859
860\def
\typo_delimited_fontdriven
861 {
\dontleavehmode
862 \begingroup
863 \dostarttaggedchained
\t!delimited
\currentdelimitedtext
\??delimitedtext
864 \usedlanguageparameter
{
\c!left
\currentparentdelimitedtext
}
865 \usedelimitedtextstyleandcolor
\c!style\c!color
866 \typo_delimited_start_content
867 \bgroup
868 \aftergroup
\typo_delimited_fontdriven_e
869 \let
\next
=
}
870
871\def
\typo_delimited_fontdriven_e
872 {
\typo_delimited_stop_content
873 \usedlanguageparameter
{
\c!right
\currentparentdelimitedtext
}
874 \dostoptagged
875 \typo_delimited_pop
876 \endgroup
}
877
878
879
880
881
882
883
884
885
886
887
888\definedelimitedtext
889 [
\v!quotation
]
890 [
\c!left
=
{
\symbol
[
\c!leftquotation
]
}
,
891 \c!right
=
{
\symbol
[
\c!rightquotation
]
}
,
892 \c!leftmargin
=
\v!standard
]
893
894\definedelimitedtext
895 [
\v!quote
][
\v!quotation
]
896
897\setupdelimitedtext
898 [
\v!quote
]
899 [
\c!location
=
\v!text
,
900 \c!left
=
{
\symbol
[
\c!leftquote
]
}
,
901 \c!right
=
{
\symbol
[
\c!rightquote
]
}
]
902
903\definedelimitedtext
904 [
\v!blockquote
][
\v!quotation
]
905
906\setupdelimitedtext
907 [
\v!blockquote
]
908 [
\c!left
=
,
909 \c!right
=]
910
911\definedelimitedtext
912 [
\v!speech
][
\v!quotation
]
913
914\setupdelimitedtext
915 [
\v!speech
]
916 [
\c!repeat
=
\v!yes
,
917 \c!left
=
{
\symbol
[
\c!leftspeech
]
}
,
918 \c!middle
=
{
\symbol
[
\c!middlespeech
]
}
,
919 \c!right
=
{
\symbol
[
\c!rightspeech
]
}
]
920
921\definedelimitedtext
922 [
\v!aside
]
923 [
\c!left
=
{
\symbol
[
\c!leftsentence
]
}
,
924 \c!right
=
{
\symbol
[
\c!rightsentence
]
}
]
925
926
927
928
929
930
931
932
933
934
935
936\unexpanded
\def
\setupquotation
{
\setupdelimitedtext
[
\v!quotation
]
}
937\unexpanded
\def
\setupquote
{
\setupdelimitedtext
[
\v!quote
]
}
938
939\protect
\endinput
940