%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}{1.001} % needs to work over stopitemize grouping etc \installcorenamespace{viewerlayer} \installcommandhandler \??viewerlayer {viewerlayer} \??viewerlayer \setupviewerlayer [\c!state=\v!start, \c!title=, \c!printable=\v!yes, \c!scope=\v!local, % maybe global but needs checking with layout \c!method=\v!none] \appendtoks \ctxcommand{defineviewerlayer{ tag = "\currentviewerlayer", title = "\viewerlayerparameter\c!title", visible = "\viewerlayerparameter\c!state", editable = "\v!yes", printable = "\viewerlayerparameter\c!printable", scope = "\viewerlayerparameter\c!scope" }}% \doif{\viewerlayerparameter\c!method}\v!command {\setuxvalue{\e!start#1}{\startviewerlayer[\currentviewerlayer]}% \setuxvalue{\e!stop #1}{\stopviewerlayer}}% \to \everydefineviewerlayer \unexpanded\def\startviewerlayer[#1]{\ctxcommand{startviewerlayer("#1")}} % not grouped \unexpanded\def\stopviewerlayer {\ctxcommand{stopviewerlayer()}} % not grouped \unexpanded\def\viewerlayer [#1]{\groupedcommand{\startviewerlayer[#1]}{\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{\ctxcommand{definedviewerlayer{% tag = "#1", title = utilities.strings.nice("#1"), % only here as in steps we have step: visible = "\v!start", editable = "\v!yes", printable = "\v!yes" }}}% \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 {%\ctxlua{attributes.viewerlayers.enable()}% automatic \let\setlayoutcomponentattribute \attr_layoutcomponent_set \let\resetlayoutcomponentattribute\attr_layoutcomponent_reset} \unexpanded\def\attr_layoutcomponent_cleanup {\ctxcommand{cleanuplayers()}} \appendtoks \attr_layoutcomponent_cleanup \to \everyshipout \protect \endinput