diff options
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/typo-del.mkxl')
-rw-r--r-- | Master/texmf-dist/tex/context/base/mkxl/typo-del.mkxl | 925 |
1 files changed, 925 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/typo-del.mkxl b/Master/texmf-dist/tex/context/base/mkxl/typo-del.mkxl new file mode 100644 index 00000000000..8e17ea82b3f --- /dev/null +++ b/Master/texmf-dist/tex/context/base/mkxl/typo-del.mkxl @@ -0,0 +1,925 @@ +%D \module +%D [ file=typo-del, % moved from core-mis, +%D version=20110112, +%D title=\CONTEXT\ Typesetting Macros, +%D subtitle=Delimited Content, +%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. + +% todo: textstyle|color for inline \quotation etc + +\writestatus{loading}{ConTeXt Typesetting Macros / Delimited Content} + +\unprotect + +\ifdefined\dotagsetdelimitedsymbol \else \aliased\let\dotagsetdelimitedsymbol \gobbleoneargument \fi +\ifdefined\dotagsetsubsentencesymbol \else \aliased\let\dotagsetsubsentencesymbol\gobbleoneargument \fi + +% THIS IS OBSOLETE: + +\installcorenamespace{hyphenmarksign} % let's not waste a setuphandler (yet) + +\permanent\permanent\protected\def\setuphyphenmark[#1]% sign=normal|wide + {\getdummyparameters[#1]% + \expandnamespaceparameter\??hyphenmarksign\dummyparameter\c!sign\v!normal} + +\setvalue{\??hyphenmarksign\v!normal}% + {\enforced\let\textmodehyphen\normalhyphen + \enforced\let\textmodehyphendiscretionary\normalhyphendiscretionary} + +\setvalue{\??hyphenmarksign\v!wide}% + {\enforced\let\textmodehyphen\composedhyphen + \enforced\let\textmodehyphendiscretionary\composedhyphendiscretionary} + +\setuphyphenmark[\c!sign=\v!wide] + +\definesymbol[\c!lefthyphen] [\languageparameter\c!lefthyphen] +\definesymbol[\c!righthyphen] [\languageparameter\c!righthyphen] +\definesymbol[\c!hyphen] [\languageparameter\c!hyphen] + +\permanent\protected\def\normalhyphen + {\hbox{\directsymbol\empty\c!hyphen}} + +\permanent\protected\def\composedhyphen + {\hbox{\directsymbol\empty\c!compoundhyphen}} + +\permanent\protected\def\normalhyphendiscretionary + {\discretionary + {\hbox{\directsymbol\empty\c!righthyphen}} + {\hbox{\directsymbol\empty\c!lefthyphen}} + {\hbox{\directsymbol\empty\c!hyphen}}} + +\permanent\protected\def\composedhyphendiscretionary + {\discretionary + {\hbox{\directsymbol\empty\c!rightcompoundhyphen}} + {\hbox{\directsymbol\empty\c!leftcompoundhyphen}} + {\hbox{\directsymbol\empty\c!compoundhyphen}}} + +\aliased\let\textmodehyphen \composedhyphen +\aliased\let\textmodehyphendiscretionary\composedhyphendiscretionary + +\definesymbol[\c!leftcompoundhyphen] [\languageparameter\c!leftcompoundhyphen] +\definesymbol[\c!rightcompoundhyphen] [\languageparameter\c!rightcompoundhyphen] +\definesymbol[\c!compoundhyphen] [\languageparameter\c!compoundhyphen] + +% TILL HERE + +\setnewconstant\boundarycharactermode\plusone + +% old: skip symbol skip +% new: bound skip symbol skip bound + +\permanent\protected\def\midboundarycharacter#1#2% + {\ifcase\boundarycharactermode + \or + \removeunwantedspaces + \wordboundary + \hskip\hspaceamount\currentusedlanguage{#2}% + \usedlanguageparameter#1% + \hskip\hspaceamount\currentusedlanguage{#2}% + \wordboundary + \ignorespaces + \or + \usedlanguageparameter#1% + \fi + \boundarycharactermode\plusone} + +% old: symbol nobreak skip +% new: symbol nobreak skip wordboundary + +\permanent\protected\def\leftboundarycharacter#1#2% + {\ifcase\boundarycharactermode + \or + \usedlanguageparameter#1% + \nobreak + \hskip\hspaceamount\currentusedlanguage{#2}% why not a kern + \wordboundary + \or + \usedlanguageparameter#1% + \fi + \boundarycharactermode\plusone} + +% old: preword skip symbol +% new: bound nobreak skip symbol + +\permanent\protected\def\rightboundarycharacter#1#2% + {\ifcase\boundarycharactermode + \or + \wordboundary + \nobreak + \hskip\hspaceamount\currentusedlanguage{#2}% why not a kern + \usedlanguageparameter#1% + \or + \usedlanguageparameter#1% + \fi + \boundarycharactermode\plusone} + +\definehspace [sentence] [\zeropoint] +\definehspace [intersentence] [.250\emwidth] + +\definesymbol + [\c!midsentence] + [\midboundarycharacter\c!midsentence{sentence}] + +\definesymbol + [\c!leftsentence] + [\leftboundarycharacter\c!leftsentence{sentence}] + +\definesymbol + [\c!rightsentence] + [\rightboundarycharacter\c!rightsentence{sentence}] + +\definesymbol + [\c!leftsubsentence] + [\leftboundarycharacter\c!leftsubsentence{sentence}] + +\definesymbol + [\c!rightsubsentence] + [\rightboundarycharacter\c!rightsubsentence{sentence}] + +\newsignal\d_typo_subsentence_signal +\newcount \c_typo_subsentence_nesting + +\mutable\let\beforesubsentence\donothing % maybe just a parameter +\mutable\let\aftersubsentence \donothing % maybe just a parameter + +% todo: make this language option +% +% \def\beforesubsentence{\removeunwantedspaces} +% \def\aftersubsentence {\ignorespaces} + +\newconditional\c_typo_subsentence_cleanup \settrue\c_typo_subsentence_cleanup + +\def\typo_subsentence_cleanup_start + {\ifconditional\c_typo_subsentence_cleanup + \expandafter\ignorespaces + \fi} + +\def\typo_subsentence_cleanup_stop + {\ifconditional\c_typo_subsentence_cleanup + \removeunwantedspaces + \fi} + +\permanent\protected\def\midsentence + {\dostarttagged\t!subsentencesymbol\empty + \dotagsetsubsentencesymbol\s!middle + \symbol[\c!midsentence]% + \dostoptagged} + +\permanent\protected\def\beginofsubsentence + {\beforesubsentence + \ifdim\lastkern=\d_typo_subsentence_signal + \unskip + \kern\hspaceamount\currentusedlanguage{intersentence}% + \fi + \global\advance\c_typo_subsentence_nesting\plusone + \ifnum\c_typo_subsentence_nesting=\plusone + \dontleavehmode + \fi + \dostarttagged\t!subsentence\empty % no chain + \dostarttagged\t!subsentencesymbol\empty + \dotagsetsubsentencesymbol\s!left + \symbol[\ifodd\c_typo_subsentence_nesting\c!leftsentence\else\c!leftsubsentence\fi]% + \dostoptagged + \dostarttagged\t!subsentencecontent\empty + \typo_subsentence_cleanup_start} + +\permanent\protected\def\endofsubsentence % relax prevents space gobbling + {\typo_subsentence_cleanup_stop + \dostoptagged + \dostarttagged\t!subsentencesymbol\empty + \dotagsetsubsentencesymbol\s!right + \symbol[\ifodd\c_typo_subsentence_nesting\c!rightsentence\else\c!rightsubsentence\fi]% + \dostoptagged + \dostoptagged + \global\advance\c_typo_subsentence_nesting\minusone + \unskip + \kern\d_typo_subsentence_signal\relax + \aftersubsentence} + +\permanent\protected\def\beginofsubsentencespacing % relax prevents space gobbling + {\kern\d_typo_subsentence_signal\relax}% \ignorespaces} + +\permanent\protected\def\endofsubsentencespacing + {\ifdim\lastkern=\d_typo_subsentence_signal + \unskip + \hskip\hspaceamount\currentusedlanguage{intersentence}% + % no good, actually language dependent: + % \ignorespaces + \else + \unskip + \fi} + +%D \startbuffer +%D test |<|test |<|test|>| test|>| test \par +%D test|<|test|<|test|>|test|>|test \par +%D test |<||<|test|>||>| test \par +%D test \directdiscretionary{<}test\directdiscretionary{>} test \par +%D \stopbuffer +%D +%D \typebuffer +%D \getbuffer + +\permanent\protected\def\startsubsentence{\beginofsubsentence\wordboundary\beginofsubsentencespacing\wordboundary\typo_subsentence_cleanup_start} +\permanent\protected\def\stopsubsentence {\typo_subsentence_cleanup_stop\wordboundary\endofsubsentencespacing\wordboundary\endofsubsentence} +\permanent\protected\def\subsentence {\groupedcommandcs\startsubsentence\stopsubsentence} +\permanent\protected\def\midsubsentence {\typo_subsentence_cleanup_start\wordboundary\midsentence\wordboundary\typo_subsentence_cleanup_stop} + +\definehspace [quotation] [\zeropoint] +\definehspace [interquotation] [.125em] + +%definehspace [quote] [\zeropoint] +%definehspace [speech] [\zeropoint] + +\definehspace [quote] [\hspaceamount\currentusedlanguage{quotation}] +\definehspace [speech] [\hspaceamount\currentusedlanguage{quotation}] + +\definesymbol + [\c!leftquotation] + [\leftboundarycharacter\c!leftquotation{quotation}] + +\definesymbol + [\c!rightquotation] + [\rightboundarycharacter\c!rightquotation{quotation}] + +\definesymbol + [\c!nextleftquotation] + [\rightboundarycharacter\c!leftquotation{quotation}] + +\definesymbol + [\c!nextrightquotation] + [\leftboundarycharacter\c!rightquotation{quotation}] + +\definesymbol + [\c!leftquote] + [\leftboundarycharacter\c!leftquote{quote}] + +\definesymbol + [\c!rightquote] + [\rightboundarycharacter\c!rightquote{quote}] + +\definesymbol + [\c!leftspeech] + [\leftboundarycharacter\c!leftspeech{speech}] + +\definesymbol + [\c!rightspeech] + [\rightboundarycharacter\c!rightspeech{speech}] + +\definesymbol + [\c!middlespeech] + [\leftboundarycharacter\c!middlespeech{speech}] + +\appendtoks + \enforced\permanent\def\quotation#1{"#1"}% + \enforced\permanent\def\quote #1{'#1'}% +\to \everysimplifycommands + +%D The next features was so desperately needed by Giuseppe Bilotta that he made a +%D module for it. Since this is a typical example of core functionality, I decided +%D to extend the low level quotation macros in such a way that a speech feature +%D could be build on top of it. The speech opening and closing symbols are defined +%D per language. Italian is an example of a language that has them set. + +\newsignal\d_typo_delimited_signal + +\mutable\let\currentdelimitedtext \s!unknown +\mutable\let\currentparentdelimitedtext\currentdelimitedtext + +\installglobalmacrostack\currentdelimitedtext + +\mutable\let\delimitedtextlevel\!!zerocount + +\permanent\def\c_typo_delimited_nesting{\csname\??delimitedtextlevel\currentparentdelimitedtext\endcsname} + +% the \setlanguageparameter macro sets but we are ungrouped .. only used here +% +% \currentusedlanguage +% \usedlanguageparameter + +%D The optional argument can be a language, a narrower spec, or a outer:inner language +%D specification. +%D +%D \starttabulate +%D \NC [en] \NC {\tttf en} \quotation[en] {{\tttf <en=\currentlanguage>} something french} \NC \NR +%D \NC [fr] \NC {\tttf en} \quotation[fr] {{\tttf <fr=\currentlanguage>} something french} \NC \NR +%D \NC [fr:] \NC {\tttf fr} \quotation[fr:] {{\tttf <en=\currentlanguage>} something french} \NC \NR +%D \NC [:fr] \NC {\tttf en} \quotation[:fr] {{\tttf <fr=\currentlanguage>} something french} \NC \NR +%D \NC [fr:fr] \NC {\tttf fr} \quotation[fr:fr]{{\tttf <fr=\currentlanguage>} something french} \NC \NR +%D \NC [en:fr] \NC {\tttf en} \quotation[en:fr]{{\tttf <fr=\currentlanguage>} something french} \NC \NR +%D \NC [fr:en] \NC {\tttf fr} \quotation[fr:en]{{\tttf <en=\currentlanguage>} something french} \NC \NR +%D \stoptabulate + +\mutable\let\currentdelimitedlanguage\empty +\mutable\let\innerdelimitedlanguage \empty +\mutable\let\outerdelimitedlanguage \empty + +\installglobalmacrostack\currentdelimitedlanguage + +\def\typo_delimited_set_language_nop + {\setusedlanguage{\delimitedtextparameter\c!language}} + +\def\typo_delimited_set_language_yes + {\doiflanguageelse\m_delimited_argument + \typo_delimited_set_language_yes_a + {\doifelseinstring:\m_delimited_argument + \typo_delimited_set_language_yes_b + \typo_delimited_set_language_nop}} + +\def\typo_delimited_set_language_yes_b + {\splitatcolon\m_delimited_argument\outerdelimitedlanguage\innerdelimitedlanguage + \ifempty\outerdelimitedlanguage + \typo_delimited_set_language_nop + \else + \doiflanguageelse\outerdelimitedlanguage + {\setusedlanguage\outerdelimitedlanguage}% + \typo_delimited_set_language_nop + \fi + \ifempty\innerdelimitedlanguage\else + \doiflanguageelse\innerdelimitedlanguage + {\let\currentdelimitedlanguage\innerdelimitedlanguage}% + \donothing + \fi + \let\m_delimited_argument\empty} + +\def\typo_delimited_set_language_yes_a + {\let\currentdelimitedlanguage\m_delimited_argument + \let\m_delimited_argument\empty} + +\def\typo_delimited_push#1#2% + {\push_macro_currentdelimitedtext % can we combine these two + \push_macro_currentdelimitedlanguage % the language used for hyphenation + \edef\currentdelimitedtext{#1}% + \edef\m_delimited_argument{#2}% + \ifempty\m_delimited_argument + \typo_delimited_set_language_nop + \else + \typo_delimited_set_language_yes + \fi + \let\currentparentdelimitedtext\currentdelimitedtext + \global\advance\c_typo_delimited_nesting\plusone + \edef\delimitedtextlevel{\number\c_typo_delimited_nesting}% + \normalexpanded{\chaintocurrentdelimitedtext{\currentparentdelimitedtext:\delimitedtextlevel}}% + \edef\currentdelimitedtext{\currentparentdelimitedtext:\delimitedtextlevel}} + +\def\typo_delimited_pop + {\global\advance\c_typo_delimited_nesting\minusone + \pop_macro_currentdelimitedlanguage + \pop_macro_currentdelimitedtext} + +\installcorenamespace{delimitedtext} +\installcorenamespace{delimitedtextlevel} + +\installcommandhandler \??delimitedtext {delimitedtext} \??delimitedtext + +\appendtoks + \expandafter\newcount\csname\??delimitedtextlevel\currentdelimitedtext\endcsname + \frozen\instance\setuevalue{\currentdelimitedtext }{\delimitedtext[\currentdelimitedtext]}% + \frozen\instance\setuevalue{\e!start\currentdelimitedtext}{\startdelimitedtext[\currentdelimitedtext]}% + \frozen\instance\setuevalue{\e!stop \currentdelimitedtext}{\stopdelimitedtext}% +\to \everydefinedelimitedtext + +\setupdelimitedtext + [\c!location=\v!margin, % \v!text \v!paragraph + \c!spacebefore=, + \c!spaceafter=\delimitedtextparameter\c!spacebefore, + \c!style=, + \c!color=, + \c!leftmargin=\zeropoint, + \c!rightmargin=\delimitedtextparameter\c!leftmargin, + \c!indentnext=\v!yes, + \c!before=, + \c!after=, + \c!left=, + \c!right=, + %\c!level=0, + \c!method=, + %\c!language=\v!local, + \c!repeat=\v!no] + +\def\typo_delimited_repeat_indeed + {\relax\ifcase\delimitedtextlevel\else + \typo_delimited_handle_middle\c!middle + \fi} + +\let\typo_delimited_repeat\relax + +\permanent\tolerant\protected\def\startdelimitedtext[#1]#*[#2]% + {\begingroup + \typo_delimited_push{#1}{#2}% + \dostarttaggedchained\t!delimitedblock\currentdelimitedtext\??delimitedtext + \edef\p_delimited_method{\delimitedtextparameter\c!method}% + \ifx\p_delimited_method\v!font + \expandafter\typo_delimited_start_font + \else + \expandafter\typo_delimited_start_other + \fi} + +\let\typo_delimited_stop\relax % hooks into \everypar + +\def\typo_delimited_start_font + {\let\typo_delimited_stop\typo_delimitedtexts_finish_font + \dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!left + \delimitedtextparameter\c!left + \dostoptagged + \ignorespaces} + +\newconditional\c_typo_delimited_repeating + +\def\typo_delimited_start_other + {\edef\p_delimited_repeat{\delimitedtextparameter\c!repeat}% + \ifx\p_delimited_repeat\v!yes + \let\typo_delimited_repeat\typo_delimited_repeat_indeed + \else + \let\typo_delimited_repeat\relax + \fi + \setfalse\c_typo_delimited_repeating + \edef\p_delimited_location{\delimitedtextparameter\c!location}% + \ifx\p_delimited_location\v!paragraph + \expandafter\typo_delimited_start_par + \orelse\ifx\p_delimited_location\v!margin + \expandafter\typo_delimited_start_par + \else + \expandafter\typo_delimited_start_txt + \fi} + +\def\typo_delimitedtexts_finish_font + {\removeunwantedspaces % again ? + \dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!right + \delimitedtextparameter\c!right + \dostoptagged} + +\def\typo_delimited_show_language_indeed#1#2% + {\begingroup + \infofont + \setbox\scratchbox\hpack{\lower\strutht\hbox to \zeropoint{\darkred#1\currentlanguage:\currentdelimitedlanguage#2}}% + \vsmashbox\scratchbox + \box\scratchbox + \endgroup} + +\let\typo_delimited_show_language\gobbletwoarguments + +\installtextracker{delimited.language} + {\let\typo_delimited_show_language\typo_delimited_show_language_indeed} + {\let\typo_delimited_show_language\gobbletwoarguments} + +\def\typo_delimited_start_content + {\dostarttagged\t!delimitedcontent\empty + \begingroup + \douselanguageparameter\currentdelimitedlanguage + \typo_delimited_show_language<\hss + \ignorespaces} + +\def\typo_delimited_stop_content + {\removeunwantedspaces + \removelastskip % redundant + \typo_delimited_show_language\hss<% + \endgroup + \dostoptagged} + +\tolerant\def\typo_delimited_start_par[#1]% + {\let\typo_delimited_stop\typo_delimited_stop_par + \edef\p_delimited_spacebefore{\delimitedtextparameter\c!spacebefore}% + \ifempty\p_delimited_spacebefore \else + \blank[\p_delimited_spacebefore]% + \fi + \delimitedtextparameter\c!before + \edef\m_delimited_argument{#1}% + \ifempty\m_delimited_argument + \let\m_delimited_argument\m_delimited_argument + \fi + \ifempty\m_delimited_argument + \endgraf + \doadaptleftskip {\delimitedtextparameter\c!leftmargin}% + \doadaptrightskip{\delimitedtextparameter\c!rightmargin}% + \let\typo_delimited_stop_par_indeed\endgraf + \else % backward compatible direct directive + \startnarrower[\m_delimited_argument]% + \let\typo_delimited_stop_par_indeed\stopnarrower + \fi + % so far + \push_macro_checkindentation + \useindentingparameter\delimitedtextparameter + % + \begingroup + \usedelimitedtextstyleandcolor\c!style\c!color + % + \begingroup + \edef\p_delimited_left {\delimitedtextparameter{\c!left}}% + \edef\p_delimited_right {\delimitedtextparameter{\c!right}}% + \edef\p_delimited_nextleft {\delimitedtextparameter{\c!nextleft}}% + \edef\p_delimited_nextright{\delimitedtextparameter{\c!nextright}}% + % + \leftdelimitedtextmark + % + \setnextleftdelimitedtextmark + \setnextrightdelimitedtextmark + % + \typo_delimited_start_content} + +\let\typo_delimited_stop_par_indeed\endgraf + +\def\typo_delimited_stop_par + {\typo_delimited_stop_content + \rightdelimitedtextmark + \rightdelimitedtextmark + \carryoverpar\endgroup + \endgraf + \endgroup + \pop_macro_checkindentation + \typo_delimited_stop_par_indeed + \delimitedtextparameter\c!after + \edef\p_delimited_spaceafter{\delimitedtextparameter\c!spaceafter}% + \ifempty\p_delimited_spaceafter \else + \blank[\p_delimited_spaceafter]% + \fi + \useindentnextparameter\delimitedtextparameter + \aftergroup\dorechecknextindentation}% AM: This was missing! + +\def\typo_delimited_start_txt + {\let\typo_delimited_stop\typo_delimited_stop_txt + \begingroup + \usedelimitedtextstyleandcolor\c!style\c!color + \typo_delimited_handle_left\c!left + \typo_delimited_start_content} + +\def\typo_delimited_stop_txt + {\typo_delimited_stop_content + \typo_delimited_handle_right\c!right + \endgroup} + +\permanent\protected\def\stopdelimitedtext + {\typo_delimited_stop + \dostoptagged + \typo_delimited_pop + \endgroup} + +\permanent\tolerant\protected\def\delimitedtext[#1]#*[#2]% + {\dontleavehmode % following ones can be omited + \typo_delimited_push{#1}{#2}% + \edef\p_delimited_method{\delimitedtextparameter\c!method}% + \ifx\p_delimited_method\v!font + \expandafter\typo_delimited_fontdriven + \else + \expandafter\typo_delimited_other + \fi} + +\def\typo_delimited_other + {\edef\p_delimited_location{\delimitedtextparameter\c!location}% + \ifx\p_delimited_location\v!paragraph + \expandafter\typo_delimited_par + \orelse\ifx\p_delimited_location\v!margin + \expandafter\typo_delimited_par + \else + \expandafter\typo_delimited_txt + \fi} + +% shortcuts + +\permanent\protected\def\startdelimited{\startdelimitedtext} +\permanent\protected\def\stopdelimited {\stopdelimitedtext} % no let, dynamically assigned +\permanent \def\delimited {\delimitedtext} + +% todo: \dostarttagged\t!nothing\empty % for left/right boxes + +%D We have 4 different location and symbol handlers (two pairs): +%D +%D \starttyping +%D \input tufte \startquotation \input tufte \stopquotation +%D +%D \setupdelimitedtext +%D [quotation] +%D [nextleft=right, +%D nextright=left] +%D +%D \input tufte \startquotation \input tufte \stopquotation +%D +%D \setupdelimitedtext +%D [quotation] +%D [nextleft={\symbol[nextleftquotation]}, +%D nextright={\symbol[nextrightquotation]}] +%D +%D \input tufte \startquotation \input tufte \stopquotation +%D \stoptyping + +\permanent\protected\def\setnextleftdelimitedtextmark + {\ifempty\p_delimited_nextleft + % nothing + \orelse\ifx\p_delimited_nextleft\v!left + \typo_delimited_nextleft_symbol\p_delimited_left + \orelse\ifx\p_delimited_nextleft\v!right + \typo_delimited_nextleft_symbol\p_delimited_right + \else + \typo_delimited_nextleft_symbol\p_delimited_nextleft + \fi} + +\permanent\protected\def\setnextrightdelimitedtextmark + {\ifempty\p_delimited_nextright + % nothing + \orelse\ifx\p_delimited_nextright\v!right + \typo_delimited_nextright_symbol\p_delimited_right + \orelse\ifx\p_delimited_nextright\v!left + \typo_delimited_nextright_symbol\p_delimited_left + \else + \typo_delimited_nextright_symbol\p_delimited_nextright + \fi} + +\permanent\protected\def\leftdelimitedtextmark + {\ifempty\p_delimited_left + % nothing + \else + \typo_delimited_left_symbol\p_delimited_left + \fi} + +\permanent\protected\def\rightdelimitedtextmark + {\ifempty\p_delimited_right + % nothing + \else + \typo_delimited_right_symbol\p_delimited_right + \fi} + +\def\typo_delimited_left_symbol#1% + {\dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!left + \setbox\scratchbox\hbox{\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor#1}% + \dontleavehmode + \edef\p_delimited_margin{\delimitedtextparameter\c!location}% + \ifx\p_delimited_margin\v!margin + \hskip-\wd\scratchbox + \fi + \box\scratchbox + \dostoptagged} + +\def\typo_delimited_right_symbol#1% + {\dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!right + \hsmash{\usedelimitedtextstyleandcolor\c!symstyle\c!symcolor#1}% + \dostoptagged} + +\def\typo_delimited_nextleft_symbol#1% + {\let\typo_delimited_reset_next_symbol\typo_delimited_reset_next_symbol_indeed + \localleftbox\bgroup + \enforced\swapmacros\leftboundarycharacter\rightboundarycharacter + \boundarycharactermode\plusone + \typo_delimited_left_symbol#1% + \egroup} + +\def\typo_delimited_nextright_symbol#1% + {\let\typo_delimited_reset_next_symbol\typo_delimited_reset_next_symbol_indeed + \localrightbox\bgroup + \enforced\swapmacros\leftboundarycharacter\rightboundarycharacter + \boundarycharactermode\plusone + \typo_delimited_right_symbol#1% + \egroup} + +\protected\def\typo_delimited_reset_next_symbol_indeed + {\localleftbox {}% + \localrightbox{}}% + +\let\typo_delimited_reset_next_symbol\relax + +\appendtoks + \typo_delimited_reset_next_symbol +\to \everyforgetall + +% \starttext +% \hyphenatedword{groepsvrijstellingsverordeningen}\par +% \hyphenatedword{\quote{groepsvrijstellingsverordeningen}}\par +% \dorecurse{100}{\hskip300pt\hskip\recurselevel pt test \quote{xxx xxxx}.\par} +% \page \setuppapersize[A5][A4] +% \quotation {overly beautiful pusillanimous sesquipedalian +% longwinded} test test test test test test test test test test test +% test test test test test test test test test test test test test +% test test test test test test test test test test test test test +% test test test test test test test test test test test test test +% test test test +% \stoptext + +% We have no real test case for this and it's broken already for a while, +% even in \MKII. Maybe we should to this in \LUA. Only Italian has the +% middlespeech parameter set. + +\def\typo_delimited_handle_middle#1% special case + {\ifconditional\c_typo_delimited_repeating + \begingroup + \usedelimitedtextstyleandcolor\c!symstyle\c!symcolor + \setbox\scratchbox\hbox{\delimitedtextparameter#1}% + \ifdim\wd\scratchbox>\zeropoint + \ifdim\lastkern=\d_typo_delimited_signal + \unkern + \hskip\hspaceamount\currentusedlanguage{interquotation}% + \else % maybe an option: + %\edef\p_delimited_margin{\delimitedtextparameter\c!location}% + %\ifx\p_delimited_margin\v!margin + % \hskip-\wd\scratchbox + %\fi + \fi + \strut % new, needed below + \dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!middle + \delimitedtextparameter#1% unhbox\scratchbox + \dostoptagged + % \penalty\plustenthousand % else overfull boxes, but that's better than dangling periods + \kern\d_typo_delimited_signal % +- \prewordbreak + \fi + \endgroup + \else + \settrue\c_typo_delimited_repeating + \fi} + +\def\typo_delimited_handle_left#1% + {\begingroup + \usedelimitedtextstyleandcolor\c!symstyle\c!symcolor + \setbox\scratchbox\hbox{\delimitedtextparameter#1}% + \ifdim\wd\scratchbox>\zeropoint + \ifdim\lastkern=\d_typo_delimited_signal + \unkern + \hskip\hspaceamount\currentusedlanguage{interquotation}% + \orelse\ifdim\lastskip=\d_typo_delimited_signal + \unskip + \hskip\hspaceamount\currentusedlanguage{interquotation}% + \fi + % \strut % new, needed below + % \ifhmode % else funny pagebeaks + % \penalty\plustenthousand + % \hskip\zeropoint % == \prewordbreak + % \fi + \strut % new, needed below + \dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!left + \delimitedtextparameter#1% unhbox\scratchbox + \dostoptagged + \penalty\plustenthousand % new per 2013-03-09 WS mailing list + \hskip\d_typo_delimited_signal % +- \prewordbreak + \fi + \endgroup} + +\def\typo_delimited_handle_right#1% + {\begingroup + \usedelimitedtextstyleandcolor\c!symstyle\c!symcolor + \setbox\scratchbox\hbox{\delimitedtextparameter#1}% + \ifdim\wd\scratchbox>\zeropoint + \ifdim\lastkern=\d_typo_delimited_signal + \unkern + \penalty\plustenthousand + \hskip\hspaceamount\currentusedlanguage{interquotation}% + \orelse\ifdim\lastskip=\d_typo_delimited_signal + \unskip + \penalty\plustenthousand + \hskip\hspaceamount\currentusedlanguage{interquotation}% + \fi + \ifhmode % else funny pagebeaks + \penalty\plustenthousand + \hskip\zeropoint % == \prewordbreak + \fi + \strut % new, needed below + \dostarttagged\t!delimitedsymbol\empty + \dotagsetdelimitedsymbol\s!right + \delimitedtextparameter#1% unhbox\scratchbox + \dostoptagged + \kern\d_typo_delimited_signal % +- \prewordbreak + \fi + \endgroup} + +\protected\def\typo_delimited_par + {\groupedcommand + {\dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext % block? + \usedelimitedtextstyleandcolor\c!style\c!color + \typo_delimited_handle_left\c!left + \typo_delimited_start_content} + {\typo_delimited_stop_content + \typo_delimited_handle_right\c!right + \removelastskip % hm + \dostoptagged + \typo_delimited_pop}} + +\protected\def\typo_delimited_txt + {\edef\p_left_right{\delimitedtextparameter\c!left\delimitedtextparameter\c!right}% + \ifempty\p_left_right + \expandafter\typo_delimited_attributed + \else + \expandafter\typo_delimited_quoted + \fi} + +\def\typo_delimited_quoted + {\dontleavehmode + \begingroup + \dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext + \typo_delimited_handle_left\c!left + \usedelimitedtextstyleandcolor\c!style\c!color + \typo_delimited_start_content + \bgroup + \aftergroup\typo_delimited_quoted_e + \let\next=} + +\def\typo_delimited_quoted_e + {\typo_delimited_stop_content + \typo_delimited_handle_right\c!right + \removelastskip % ? + \dostoptagged + \typo_delimited_pop + \endgroup} + +\def\typo_delimited_attributed + {\dontleavehmode + \begingroup + \dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext + \usedelimitedtextstyleandcolor\c!style\c!color + \typo_delimited_start_content + \bgroup + \aftergroup\typo_delimited_attributed_e + \let\next=} + +\def\typo_delimited_attributed_e + {\typo_delimited_stop_content + \dostoptagged + \typo_delimited_pop + \endgroup} + +\def\typo_delimited_fontdriven + {\dontleavehmode + \begingroup + \dostarttaggedchained\t!delimited\currentdelimitedtext\??delimitedtext + \usedlanguageparameter{\c!left\currentparentdelimitedtext}% was: \currentdelimitedtext + \usedelimitedtextstyleandcolor\c!style\c!color + \typo_delimited_start_content + \bgroup + \aftergroup\typo_delimited_fontdriven_e + \let\next=} + +\def\typo_delimited_fontdriven_e + {\typo_delimited_stop_content + \usedlanguageparameter{\c!right\currentparentdelimitedtext}% was: \currentdelimitedtext + \dostoptagged + \typo_delimited_pop + \endgroup} + +% testcase for nesting: +% +% \quotation{... \quotation{...} ...} +% \startquotation ... \startquotation... \quotation{...} \stopquotation\space ...\stopquotation +% \setupdelimitedtext[quotation][1][left=(,right=)] +% \setupdelimitedtext[quotation][2][left={[},right={]}] +% \setupdelimitedtext[quotation][3][left=\{,right=\}] +% \quotation{... \quotation{...} ...} +% \startquotation ... \startquotation... \quotation{...} \stopquotation\space ...\stopquotation + +\definedelimitedtext + [\v!quotation] + [\c!left={\symbol[\c!leftquotation]}, + \c!right={\symbol[\c!rightquotation]}, + \c!leftmargin=\v!standard] + +\definedelimitedtext + [\v!quote][\v!quotation] + +\setupdelimitedtext + [\v!quote] + [\c!location=\v!text, + \c!left={\symbol[\c!leftquote]}, + \c!right={\symbol[\c!rightquote]}] + +\definedelimitedtext + [\v!blockquote][\v!quotation] + +\setupdelimitedtext + [\v!blockquote] + [\c!left=, + \c!right=] + +\definedelimitedtext + [\v!speech][\v!quotation] + +\setupdelimitedtext + [\v!speech] + [\c!repeat=\v!yes, + \c!left={\symbol[\c!leftspeech]}, + \c!middle={\symbol[\c!middlespeech]}, + \c!right={\symbol[\c!rightspeech]}] + +\definedelimitedtext + [\v!aside] + [\c!left={\symbol[\c!leftsentence]}, + \c!right={\symbol[\c!rightsentence]}] + +% how do we call an tight quote +% +% \definedelimitedtext +% [\v!quotation][\v!quotation] +% +% \setupdelimitedtext +% [\v!quotation] +% [\c!indentnext=\v!no, +% \c!spacebefore=\v!nowhite] + +\permanent\protected\def\setupquotation{\setupdelimitedtext[\v!quotation]} +\permanent\protected\def\setupquote {\setupdelimitedtext[\v!quote]} + +\protect \endinput |