%D \module %D [ file=prop-mis, %D version=2004.05.29, % some code moved from private modules %D title=\CONTEXT\ Property Macros, %D subtitle=Miscelaneous, %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. \writestatus{loading}{ConTeXt Property Macros / Miscelaneous} %D This module contains some code that has been in use in some %D private modules (p-*). These features depend on the fact %D that pdftex writes the page content as one stream. %D EXPERIMENTAL \unprotect %D Stream based overprint and knockout: \defineproperty[\v!overprint][\s!overprint] [\c!method=\v!command] \defineproperty[\v!knockout] [\s!overprint] [\c!method=\v!command] %D Negation. \defineproperty [\v!negative] [\s!negative] [\c!method=\v!command] \defineproperty [\v!positive] [\s!negative] [\c!method=\v!command] %D Special font effects. \setupproperty [\s!effect] [\c!rulethickness=\zeropoint, \c!stretch=0] \defineproperty [\v!inner] [\s!effect] [\c!rulethickness=.25pt] \defineproperty [\v!outer] [\s!effect] [\c!rulethickness=.25pt] \defineproperty [\v!both] [\s!effect] [\c!rulethickness=.25pt] \defineproperty [\v!normal] [\s!effect] \defineproperty [\v!hidden] [\s!effect] \defineproperty [\v!stretch] [\s!effect] [\c!stretch=1] %D Overprint cum suis. \definepropertyhandler \v!overprint {\dostartoverprint} \definepropertyhandler \v!knockout {\dostopoverprint } \def\startoverprintproperty {\ifincolor \propertyhandler\currentproperty \dooverprintmark\currentproperty \fi} \def\stopoverprintproperty {\ifincolor \ifcase\currentpropertylevel\or \dostopoverprint \dooverprintmark\empty \else \propertyhandler\previousproperty \dooverprintmark\previousproperty \fi \fi} \rawnewmark\overprintmark \def\dooverprintmark#1% {\ifinpagebody \else \ifinframed \else \expanded{\rawsetmark\noexpand\overprintmark{#1}}% \fi \fi} \def\pushoverprintproperty {\doifsomething{\rawgetbotmark\overprintmark}\dostopoverprint} \def\popoverprintproperty {\doifsomething{\rawgetbotmark\overprintmark}% {\propertyhandler{\rawgetbotmark\overprintmark}}} \def\popsplitoverprintproperty {\getsplitmarks\overprintmark % hier wel \doifsomething{\rawgetsplitbotmark\overprintmark}% {\propertyhandler{\rawgetsplitbotmark\overprintmark}}} \appendtoks \pushoverprintproperty \to \everypushproperties \appendtoks \popoverprintproperty \to \everypopproperties \appendtoks \popsplitoverprintproperty \to \everypopsplitproperties %D Negative cum suis. \definepropertyhandler \v!negative {\dostartnegative} \definepropertyhandler \v!positive {\dostopnegative } \def\startnegativeproperty {\ifincolor \propertyhandler\currentproperty \donegativemark\currentproperty \fi} \def\stopnegativeproperty {\ifincolor \ifcase\currentpropertylevel\or \dostopnegative \donegativemark\empty \else \propertyhandler\previousproperty \donegativemark\previousproperty \fi \fi} \rawnewmark\negativemark \def\donegativemark#1% {\ifinpagebody \else \ifinframed \else \expanded{\rawsetmark\noexpand\negativemark{#1}}% \fi \fi} \def\pushnegativeproperty {\doifsomething{\rawgetbotmark\negativemark}\dostopnegative} \def\popnegativeproperty {\doifsomething{\rawgetbotmark\overprintmark}% {\propertyhandler{\rawgetbotmark\negativemark}}} \def\popsplitnegativeproperty {\getsplitmarks\negativemark % hier wel \doifsomething{\rawgetsplitbotmark\negativemark}% {\propertyhandler{\rawgetsplitbotmark\negativemark}}} \appendtoks \pushnegativeproperty \to \everypushproperties \appendtoks \popnegativeproperty \to \everypopproperties \appendtoks \popsplitnegativeproperty \to \everypopsplitproperties %D Effects. \definepropertyhandler \v!normal {0} \definepropertyhandler \v!inner {0} \definepropertyhandler \v!outer {1} \definepropertyhandler \v!both {2} \definepropertyhandler \v!hidden {3} \definepropertyhandler \v!stretch{0} \def\effectpropertydata#1% {{\propertyhandler{#1}}% {\propertyparameter{#1}\c!rulethickness}% {\propertyparameter{#1}\c!stretch}} \def\starteffectproperty {\expanded{\dostartfonteffect\effectpropertydata\currentproperty}% \doeffectmark{\effectpropertydata\currentproperty}} \def\stopeffectproperty {\dostopfonteffect \ifcase\currentpropertylevel\or \doeffectmark\empty \else \expanded{\dostartfonteffect\effectpropertydata\previousproperty}% \doeffectmark{\effectpropertydata\previousproperty}% \fi} \rawnewmark\effectmark \def\doeffectmark#1% {\ifinpagebody \else \ifinframed \else \expanded{\rawsetmark\noexpand\effectmark{#1}}% could be number \fi \fi} \def\pusheffectproperty {\doifsomething{\rawgetbotmark\effectmark}\dostopfonteffect} \def\popeffectproperty {\doifsomething{\rawgetbotmark\effectmark}% {\expanded{\dostartfonteffect\rawgetbotmark\effectmark}}} \def\popspliteffectproperty {\getsplitmarks\effectmark \doifsomething{\rawgetsplitbotmark\effectmark}% {\expanded{\dostartfonteffect\rawgetsplitbotmark\effectmark}}} \appendtoks \pusheffectproperty \to \everypushproperties \appendtoks \popeffectproperty \to \everypopproperties \appendtoks \popspliteffectproperty \to \everypopsplitproperties \protect \endinput