%D \module %D [ file=attr-lay, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Viewerlayers, %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 Attribute Macros / Viewerlayers} %D Currently there is a limitation in mixed inline usage. This has to do with the fact %D that we have a stacked model but cannot determine where to revert to (as we can %D have AABBCCAA ranges). Maybe I'll solve that one day. It only affects nested inline %D layers and these make not much sense anyway. We'd have to store the complete nesting %D stack in the attribute in order to be able to cross pages and that demands a new %D mechanism. \unprotect \registerctxluafile{attr-lay}{} % needs to work over stopitemize grouping etc \installcorenamespace{viewerlayer} \installcommandhandler \??viewerlayer {viewerlayer} \??viewerlayer \setupviewerlayer [\c!state=\v!start, \c!title=, \c!export=\v!yes, % exportable is ugly \c!printable=\v!yes, \c!scope=\v!local, % maybe global but needs checking with layout \c!method=\v!none] \appendtoks \clf_defineviewerlayer tag {\currentviewerlayer}% title {\viewerlayerparameter\c!title}% visible {\viewerlayerparameter\c!state}% editable {\v!yes}% export {\viewerlayerparameter\c!export}% printable {\viewerlayerparameter\c!printable}% scope {\viewerlayerparameter\c!scope}% \relax \doif{\viewerlayerparameter\c!method}\v!command {\setuxvalue{\e!start#1}{\startviewerlayer[\currentviewerlayer]}% \setuxvalue{\e!stop #1}{\stopviewerlayer}}% \to \everydefineviewerlayer \unexpanded\def\startviewerlayer[#1]{\clf_startviewerlayer{#1}}% not grouped \unexpanded\def\stopviewerlayer {\clf_stopviewerlayer} % not grouped \unexpanded\def\viewerlayer [#1]{\groupedcommand {\clf_startviewerlayer{#1}}% grouped {\clf_stopviewerlayer}} % grouped % some day we will keep this at the lua end as the info is only needed there \newtoks\currentviewerlayertoks % soon we can set macros at the lua end \def\currentviewerlayer{\the\currentviewerlayertoks} \appendtoks \let\currentviewerlayer\empty \to \everybeforepagebody % layout components are implemented rather directly (speed) \installcorenamespace{layoutcomponentattribute} \def\attr_layoutcomponent_initialize#1% {\edef\layoutcomponentboxattribute{\clf_definedlayoutcomponent{#1}}% \edef\layoutcomponentboxattribute{attr \viewerlayerattribute \layoutcomponentboxattribute\relax}% \expandafter\glet\csname\??layoutcomponentattribute#1\endcsname\layoutcomponentboxattribute} \def\attr_layoutcomponent_set#1% make this faster {\expandafter\let\expandafter\layoutcomponentboxattribute\csname\??layoutcomponentattribute#1\endcsname \ifx\layoutcomponentboxattribute\relax \attr_layoutcomponent_initialize{#1}% get rid of { } \fi} \def\attr_layoutcomponent_reset {\let\layoutcomponentboxattribute\empty} \let\setlayoutcomponentattribute \gobbleoneargument \let\resetlayoutcomponentattribute\relax \let\layoutcomponentboxattribute \empty \unexpanded\def\showlayoutcomponents {\let\setlayoutcomponentattribute \attr_layoutcomponent_set \let\resetlayoutcomponentattribute\attr_layoutcomponent_reset} \unexpanded\def\attr_layoutcomponent_cleanup {\clf_cleanuplayers} \appendtoks \attr_layoutcomponent_cleanup \to \everyshipout \protect \endinput