%D \module %D [ file=scrn-ini, %D version=2011.02.27, %D title=\CONTEXT\ Interaction 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 Interaction Macros / Initialization} \unprotect \registerctxluafile{scrn-ini}{} %D There is no interaction at all unless enabled by saying: %D %D \starttyping %D \setupinteraction[state=start] %D \stoptyping %D %D The other settings are: %D %D \showsetup{setupinteraction} \installcorenamespace{interaction} \installswitchcommandhandler \??interaction {interaction} \??interaction \appendtoks \ifx\previousinteraction\empty \checkinteractionstate \else\ifx\currentinteraction\previousinteraction \checkinteractionstate \fi\fi \to \everysetupinteraction \unexpanded\def\checkinteractionstate {\doifelse{\interactionparameter\c!state}\v!start {\locationtrue \setsystemmode \v!interaction}% {\locationfalse \resetsystemmode\v!interaction}} \def\doifelselocation % expandable {\iflocation \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \let\doiflocationelse\doifelselocation \setupinteraction [\c!state=\v!stop] \appendtoks \setupinteraction % todo: remember info at the lua end (already possible) \to \everyjob % it makes no sense to create an environment as we will seldom have structured % interactions so a general start-stop will do % % \appendtoks % \setuevalue \currentinteraction {\scrn_interaction_direct{\currentinteraction}}% % \setuevalue{\e!start\currentinteraction}{\scrn_interaction_start {\currentinteraction}}% % \setuevalue{\e!stop \currentinteraction}{\scrn_interaction_stop }% % \to \everydefineinteraction % % \unexpanded\def\scrn_interaction_direct#1% % {\edef\currentinteraction{#1}} % % \unexpanded\def\scrn_interaction_start#1% % {\pushmacro\currentinteraction % \edef\currentinteraction{#1}} % % \unexpanded\def\scrn_interaction_stop % {\popmacro\currentinteraction} % % \unexpanded\def\setinteraction[#1]% % {\def\currentinteraction{#1}} % % \defineinteraction[\v!interaction] \unexpanded\def\startinteraction[#1]% {\pushmacro\currentinteraction \edef\currentinteraction{#1}} \unexpanded\def\stopinteraction {\popmacro\currentinteraction} \unexpanded\def\setinteraction[#1]% {\def\currentinteraction{#1}} \defineinteraction % keep it simple [\v!hidden] \setupinteraction [\v!hidden] [\c!state=\v!start, \c!color=, \c!contrastcolor=, \c!style=, \c!click=\v!off] %D As long as there a natural feeling of what can be considered %D hyper active or not, we have to tell users where they can %D possibly click. We've already seen a few macros that deal %D with this visualization, something we definitely do not let %D up to the viewer. One way of telling is using a distinctive %D typeface, another way is using color. %D %D There are two colors involved: one for normal hyperlinks, %D and one for those that point to the currentpage, the %D contrast color. \definecolor [interactioncolor] [r=0, g=.6, b=0] \definecolor [interactioncontrastcolor] [r=.8, g=0, b=0] %D The next few macros are responsible for highlighting hyper %D links. The first one, \type{\showlocation}, is used in those %D situations where the typeface is handled by the calling %D macro. %D When we're dealing with pure page references, contrast %D colors are used when we are already at the page mentioned. \unexpanded\def\setlocationcolorspecified#1% not grouped ! {\ifnum#1=\plusone \edef\askedcontrastcolor{\interactionparameter\c!contrastcolor}% \ifx\askedcontrastcolor\empty \useinteractioncolorparameter\c!color \else \useinteractioncolorparameter\c!contrastcolor \fi \else % we could just set and if > 0 set again \useinteractioncolorparameter\c!color \fi} \unexpanded\def\setlocationattributesspecified#1% not grouped ! {\ifnum#1=\plusone \edef\askedcontrastcolor{\interactionparameter\c!contrastcolor}% \ifx\askedcontrastcolor\empty \useinteractionstyleandcolor\c!style\c!color \else \useinteractionstyleandcolor\c!style\c!contrastcolor \fi \else % we could just set and if > 0 set again \useinteractionstyleandcolor\c!style\c!color \fi} \unexpanded\def\setlocationcolorspecspecified#1#2% \resolver {\ifnum#1=\plusone \edef\askedcontrastcolor{#2\c!contrastcolor}% \ifx\askedcontrastcolor\empty \colo_helpers_activate{#2\c!color}% \else \colo_helpers_activate\askedcontrastcolor \fi \else \colo_helpers_activate{#2\c!color}% \fi} \unexpanded\def\setlocationcolor {\setlocationcolorspecified \referencepagestate} \unexpanded\def\setlocationattributes{\setlocationattributesspecified\referencepagestate} \unexpanded\def\setlocationcolorspec {\setlocationcolorspecspecified \referencepagestate} \unexpanded\def\setlocationfont % not grouped ! {\useinteractionstyleparameter\c!style} \setupinteraction [\c!style=\v!bold, \c!color=interactioncolor, \c!contrastcolor=interactioncontrastcolor] %D Identity % \def\scrn_identity_synchronize % {\clf_setupidentity % title {\interactionparameter\c!title}% % subtitle {\interactionparameter\c!subtitle}% % author {\interactionparameter\c!author}% % % creator {ConTeXt - \contextversion}% % date {\interactionparameter\c!date}% % keywords {\interactionparameter\c!keyword}% % \relax} \newconditional\c_scrn_identity_preroll \installtexdirective {interaction.identity.preroll} {\settrue \c_scrn_identity_preroll} {\setfalse\c_scrn_identity_preroll} \def\scrn_identity_prerolled#1% {\begingroup \edef\tempstring{\interactionparameter#1}% \ifx\tempstring\empty \endgroup \else \the\everypreroll \nodestostring\tempstring{\tempstring}% \normalexpanded{\endgroup\setexpandedinteractionparameter{#1}{\tempstring}}% \fi} \def\scrn_identity_synchronize {\begingroup \ifconditional\c_scrn_identity_preroll \scrn_identity_prerolled\c!title \scrn_identity_prerolled\c!subtitle \scrn_identity_prerolled\c!author \scrn_identity_prerolled\c!date \scrn_identity_prerolled\c!keyword \fi \clf_setupidentity title {\interactionparameter\c!title}% subtitle {\interactionparameter\c!subtitle}% author {\interactionparameter\c!author}% % creator {ConTeXt - \contextversion}% date {\interactionparameter\c!date}% keywords {\interactionparameter\c!keyword}% \relax \endgroup} \appendtoks \scrn_identity_synchronize \to \everysetupinteraction % this comes before starttext \def\scrn_identity_document#1#2% {\doifdocumentvariable{metadata:#1}{\setupinteraction[#2=\documentvariable{metadata:#1}]}} \appendtoks % not interfaced i.e. english \scrn_identity_document {title}\c!title \scrn_identity_document {subject}\c!subtitle \scrn_identity_document{subtitle}\c!subtitle \scrn_identity_document {author}\c!author \scrn_identity_document {authors}\c!author \scrn_identity_document {keyword}\c!keyword \scrn_identity_document{keywords}\c!keyword \scrn_identity_document {date}\c!date \to \everystartdocument % or stop \setupinteraction [\c!title=, \c!subtitle=, \c!author=, \c!keyword=, \c!date=] \appendtoks \clf_setautoprefix{\interactionparameter\c!prefix}% \to \everysetupinteraction \protect \endinput