%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}{1.001} %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\currentinteraction\previousinteraction \doifelse{\interactionparameter\c!state}\v!start {\locationtrue \setsystemmode \v!interaction}% {\locationfalse \resetsystemmode\v!interaction}% \fi \to \everysetupinteraction \def\doifelselocation {\iflocation \expandafter\firstoftwoarguments \else \expandafter\secondoftwoarguments \fi} \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 % interactionso 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\setlocationcolorspec#1#2% \resolver {\ifnum#1=\plusone \edef\askedcontrastcolor{#2\c!contrastcolor}% \ifx\askedcontrastcolor\empty \doactivatecolor{#2\c!color}% \else \doactivatecolor\askedcontrastcolor \fi \else \doactivatecolor{#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 {\ctxcommand{setupidentity{ title = \!!bs\interactionparameter\c!title\!!es, subtitle = \!!bs\interactionparameter\c!subtitle\!!es, author = \!!bs\interactionparameter\c!author\!!es, creator = \!!bs ConTeXt - \contextversion\!!es, date = \!!bs\interactionparameter\c!date\!!es, keywords = \!!bs\interactionparameter\c!keyword\!!es, }}} \appendtoks \scrn_identity_synchronize \to \everysetupinteraction \appendtoks % not interfaced i.e. english \doifvariable{document}{metadata:author}{\setupinteraction[author=\documentvariable{metadata:author}]}% \doifvariable{document}{metadata:title}{\setupinteraction[title=\documentvariable{metadata:title}]}% \doifvariable{document}{metadata:subject}{\setupinteraction[subject=\documentvariable{metadata:subject}]}% \to \everysetupdocument \setupinteraction [\c!title=, \c!subtitle=, \c!author=, \c!keyword=, \c!date=] \protect \endinput