%D \module %D [ file=attr-ini, %D version=2007.06.06, %D title=\CONTEXT\ Attribute Macros, %D subtitle=Initialization, %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 / Initialization} %D Although it's still somewhat experimental, here we introduce code %D related to attributes. Housekeeping will move completely to \LUA\ %D and \type {\newattribute} will go away. \unprotect \registerctxluafile{attr-ini}{1.001} \installcorenamespace{attributecount} % the counter representing the attribute (attrdef'd) \installcorenamespace{attributeid} % the internal number \installcorenamespace{attributestack} % the attribute specific stack \unexpanded\def\pushattribute#1% {\global\advance\csname\??attributestack\string#1\endcsname\plusone \expandafter\xdef\csname\??attributestack\string#1:\number\csname\??attributestack\string#1\endcsname\endcsname{\number\attribute#1}} \unexpanded\def\popattribute#1% {\attribute#1\csname\??attributestack\string#1:\number\csname\??attributestack\string#1\endcsname\endcsname\relax \global\advance\csname\??attributestack\string#1\endcsname\minusone} \unexpanded\def\installattributestack#1% {\ifcsname\??attributestack\string#1\endcsname \else \expandafter\newcount\csname\??attributestack\string#1\endcsname \fi} \newtoks \attributesresetlist \ifdefined \s!global \else \def\s!global{global} \fi % for metatex % or hard check later \ifdefined \s!public \else \def\s!public{public} \fi % for metatex % or hard check later \unexpanded\def\defineattribute {\dodoubleempty\attr_basics_define} \def\attr_basics_define[#1][#2]% alternatively we can let lua do the housekeeping {\expandafter\newattribute\csname\??attributecount#1\endcsname \expandafter\newconstant \csname\??attributeid#1\endcsname \csname\??attributeid#1\endcsname\c_syst_last_allocated_attribute \ctxcommand{defineattribute("#1",\number\c_syst_last_allocated_attribute)}% \doifnotinset\s!global{#2}{\appendetoks\csname\??attributecount#1\endcsname\attributeunsetvalue\to\attributesresetlist}% \doifinset \s!public{#2}{\expandafter\let\csname#1attribute\expandafter\endcsname\csname\??attributeid#1\endcsname}} \unexpanded\def\definesystemattribute {\dodoubleempty\attr_basics_define_system} \def\attr_basics_define_system[#1][#2]% alternatively we can let lua do the housekeeping {\scratchcounter\ctxcommand{getprivateattribute("#1")}\relax \expandafter\attributedef\csname\??attributecount#1\endcsname\scratchcounter \expandafter\newconstant \csname\??attributeid#1\endcsname \csname\??attributeid#1\endcsname\scratchcounter %\writestatus\m!system{defining system attribute #1 with number \number\scratchcounter}% \doifnotinset\s!global{#2}{\appendetoks\csname\??attributecount#1\endcsname\attributeunsetvalue\to\attributesresetlist}% \doifinset \s!public{#2}{\expandafter\let\csname#1attribute\expandafter\endcsname\csname\??attributeid#1\endcsname}} % expandable so we can \edef them for speed \def\dosetattribute#1#2{\csname\??attributecount#1\endcsname#2\relax} \def\doresetattribute#1{\csname\??attributecount#1\endcsname\attributeunsetvalue} \def\dogetattribute #1{\number\csname\??attributecount#1\endcsname} \def\dogetattributeid#1{\number\csname\??attributeid#1\endcsname} \let\dompattribute\gobbletwoarguments \unexpanded\def\resetallattributes{\the\attributesresetlist} %D Rather special. \unexpanded\def\savecurrentattributes #1{\ctxcommand{savecurrentattributes ("#1")}} \unexpanded\def\restorecurrentattributes#1{\ctxcommand{restorecurrentattributes("#1")}} %D For the moment we put this here (later it will move to where it's used): \definesystemattribute [state] \definesystemattribute [color] [public] \definesystemattribute [colormodel] [public,global] \definesystemattribute [skip] \definesystemattribute [penalty] \definesystemattribute [transparency] [public] \definesystemattribute [background] [public] \definesystemattribute [alignbackground] [public] \definesystemattribute [colorintent] [public] \definesystemattribute [negative] [public] \definesystemattribute [effect] [public] \definesystemattribute [viewerlayer] [public] \definesystemattribute [layoutcomponent] [public] \definesystemattribute [reference] [public] \definesystemattribute [destination] [public] \definesystemattribute [internal] [public] \definesystemattribute [ruled] [public] \definesystemattribute [shifted] [public] \definesystemattribute [checkedbreak] [public] \definesystemattribute [vboxtohboxseparator] [public] \unexpanded\def\showattributes{\ctxcommand{showattributes()}} \protect \endinput