From 85b7bc695629926641c7cb752fd478adfdf374f3 Mon Sep 17 00:00:00 2001 From: Marius Date: Sun, 4 Jul 2010 15:32:09 +0300 Subject: stable 2010-05-24 13:10 --- tex/context/base/strc-syn.mkii | 438 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 438 insertions(+) create mode 100644 tex/context/base/strc-syn.mkii (limited to 'tex/context/base/strc-syn.mkii') diff --git a/tex/context/base/strc-syn.mkii b/tex/context/base/strc-syn.mkii new file mode 100644 index 000000000..39acb7d91 --- /dev/null +++ b/tex/context/base/strc-syn.mkii @@ -0,0 +1,438 @@ +%D \module +%D [ file=strc-syn, +%D version=1997.03.31, +%D title=\CONTEXT\ Structure Macros, +%D subtitle=Synonyms and Sorts, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%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 Structure Macros / Synonyms and Sorts} + +\unprotect + +% \checkdefined kan hierheen + +% Formaat tex-utility-input-file : +% +% synonym entry {tag} {pure} {text} {synonym} +% +% Deze file wordt met het programma TeXUtil omgezet in een +% in te lezen TeXFile met de commando's: +% +% \synonymentry {tag} {pure} {text} {synonym} + +\newif\ifsynonymmeaning + +% todo: \def\synonymparameter#1{\csname\??sm\currentsynonym#1\endcsname} + +\def\dosetupsynonyms[#1][#2]% + {\getparameters[\??sm#1][#2]} + +\def\setupsynonyms + {\dodoubleargument\dosetupsynonyms} + +\def\doresetsynonym#1% + {\letvalue{#1\s!entry}\gobblethreearguments} + +\def\dohandlesynonymentry#1#2#3#4% + {\bgroup + \global\utilitydonetrue + \syndef + {\doattributes{\??sm#1}\c!textstyle\c!textcolor{#3}} + \ConvertToConstant\doifelse{#4}{}{\unknown}{#4}\par + \egroup} + +\def\synonymentry#1% + {\executeifdefined{#1\s!entry}\gobblethreearguments} + +\def\dosetsynonym#1% + {\doifdefinedelse{\??sm#1\c!command} + {\setvalue{#1\s!entry}{\getvalue{\??sm#1\c!command}}} % 3 argumenten + {\setvalue{#1\s!entry}{\dohandlesynonymentry{#1}}}} + +\def\synonymparameter#1{\csname\??sm\currentsynonym#1\endcsname} + +\def\doplacelistofsynonyms#1#2% + {\whitespace + \begingroup + \def\currentsynonym{#1}% + \definedescription % nog eens een class van maken, net als framed + [syndef] + [\c!location=\synonymparameter\c!location, + \c!width=\synonymparameter\c!width, + \c!distance=\synonymparameter\c!distance, + \c!sample=\synonymparameter\c!sample, + \c!hang=\synonymparameter\c!hang, + \c!align=\synonymparameter\c!align, + \c!before=\synonymparameter\c!before, + \c!inbetween=\synonymparameter\c!inbetween, + \c!after=\synonymparameter\c!after, + \c!indentnext=\synonymparameter\c!indentnext, + \c!headstyle=\synonymparameter\c!headstyle, + \c!headcolor=\synonymparameter\c!headcolor, + \c!style=, + \c!color=]% + \setupwhitespace[\v!none]% + %doutilities{#1}\jobname{#2}\relax\par % no longer \par + \doutilities{#1}\jobname{#1}\relax\relax + \endgroup + \ifutilitydone\else\nowhitespace\fi} + +\def\docompletelistofsynonyms#1#2% expansion needed to avoid v! (due to french active !) + {\expanded{\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}% + \doplacelistofsynonyms{#1}{#2}% + \page[\v!yes]} + +\def\processsynonym#1#2#3% + {\begingroup % anders in mathmode lege \hbox, zie eenheden + \ifsynonymmeaning + \synonymmeaningfalse + \doattributes{\??sm#1}\c!synonymstyle\c!synonymcolor{#3}% + \else + \dontleavehmode + \doattributes{\??sm#1}\c!textstyle\c!textcolor{#2}% + \fi + \endgroup} + +\def\getsynonymmeaning#1#2#3% + {\bgroup + \doifundefined{#2#3} + {\setgvalue{#2#3}{{\tt[#3]}}% + \showmessage\m!systems{18}{#1,#3}}% + \synonymmeaningtrue + \getvalue{#2#3}% + \egroup} + +\def\dowritesynonym#1#2#3#4% + {\begingroup % anders in mathmode lege \hbox + \defconvertexpanded\asciisynonym{\getvalue{\??sm#1\c!expansion}}{#3}% + \defconvertexpanded\asciimeaning{\getvalue{\??sm#1\c!expansion}}{#4}% + \immediatewriteutility{s e {#1} {#2} {\asciisynonym} {\asciimeaning}}% + \endgroup} + +\def\reprocesssynonym#1#2#3% + {\processsynonym{#1}{#2}{#3}% + \getvalue{\??sm#1\c!next}} % not formally documented + +\def\preexecutesynonym#1#2#3#4% + {\ifdoinpututilities \else + \dowritesynonym{#1}{#2}{#3}{#4}% + \unexpanded\setgvalue{#2}{\reprocesssynonym{#1}{#3}{#4}}% + \fi} + +\def\executesynonym#1#2#3#4% + {\preexecutesynonym{#1}{#2}{#3}{#4}% + \processsynonym{#1}{#3}{#4}% + \getvalue{\??sm#1\c!next}} % not formally documented + +\def\expandsynonym#1#2#3#4% + {{\synonymmeaningtrue + \processsynonym{#1}{#3}{#4}}} + +\def\dodoloadsynonym#1#2#3#4% + {\setgvalue{#2}{\executesynonym{#1}{#2}{#3}{#4}}} + +\def\doloadsynonym#1% + {\setvalue{#1\s!entry}##1##2##3% + {\doifelsenothing{##1} + {\dodoloadsynonym{#1}{##2}{##2}{##3}} + {\dodoloadsynonym{#1}{##1}{##2}{##3}}% + \global\utilitydonetrue}} + +\def\doloadsynonyms#1#2% + {\bgroup + \let\dosetsynonym\doloadsynonym + \showmessage\m!systems{19}{#2}% + \doutilities{#1}\jobname{#1}\relax\relax + \egroup + \setvalue{\s!check#1}##1{}} + +\def\dodocomplexsynonym[#1][#2]#3#4% + {\doifsomething{#2} + {\getvalue{\s!check#1}{#2}% + \doglobal\appendtoks\setvalue{#2}{#2}\to\simplifiedcommands + \doifelsevalue{\??sm#1\c!conversion}\v!yes + {\unexpanded\setgvalue{#2}{\expandsynonym{#1}{#2}{#3}{#4}}} + {\doifelsevalue{\??sm#1\c!state}\v!start + {\doifelsevalue{\??sm#1\c!criterium}\v!all + {\preexecutesynonym{#1}{#2}{#3}{#4}} + {\unexpanded\setgvalue{#2}{\executesynonym{#1}{#2}{#3}{#4}}}} + {\unexpanded\setgvalue{#2}{\processsynonym{#1}{#3}{#4}}}}}} + +\def\docomplexsynonym[#1][#2][#3]#4#5% + {\ifthirdargument + \dodocomplexsynonym[#2][#1#3]{#4}{#5}% + \else + \dodocomplexsynonym[#2][#1#4]{#4}{#5}% + \fi} + +\def\doregistersynonymlanguage#1% + {\savesortlanguage{\getvalue{\??sm#1\s!language}}% + \immediatewriteutility{s l {#1} {\getvalue{\??sm#1\s!language}}}} + +\def\dodefinesynonyms[#1][#2][#3][#4]% + {\iffourthargument + \unexpanded\def#4##1{\getsynonymmeaning{#1}{\??sm:#1:}{##1}}% + \ifthirdargument + \unexpanded\def#3##1{\getvalue{\??sm:#1:##1}}% + \fi + \setvalue{#1}{\dotripleempty\docomplexsynonym[\??sm:#1:][#1]}% + \else + \ifthirdargument + \unexpanded\def#3##1{\getsynonymmeaning{#1}{}{##1}}% + \fi + \setvalue{#1}{\dotripleempty\docomplexsynonym[][#1]}% + \fi + \dosetupsynonyms + [#1]% + [\c!synonymstyle=,\c!textstyle=, + \c!headstyle=,\c!headcolor=, + \c!state=\v!start,\c!criterium=, + \c!location=\v!left,\c!width=5em,\c!distance=0pt, + \c!sample=,\c!hang=,\c!align=, + \c!before=,\c!inbetween=,\c!after=, + \c!indentnext=\v!no, + \c!expansion=, + \s!language=\currentmainlanguage]% + \doglobal\appendtoksonce + \doregistersynonymlanguage{#1}% + \to \everysavesortkeys + \presetheadtext[#2=\Word{#2}]% changes the \if...argument + \addutilityreset{#1}% + \setvalue{\e!setup #2\e!endsetup}{\dodoubleargument\getparameters[\??sm#1]}% to be obsolete + \setvalue{\s!set #1}{\dosetsynonym{#1}}% + \setvalue{\s!reset #1}{\doresetsynonym{#1}}% + \setvalue{\s!check #1}##1{\checkdefined{synonym}{#1}{##1}}% + \setvalue{\e!load #2}{\doloadsynonyms{#1}{#2}}% + \setvalue{\e!place\e!listof #2}{\doplacelistofsynonyms{#1}{#2}}% + \setvalue{\e!complete\e!listof#2}{\docompletelistofsynonyms{#1}{#2}}} + +\def\definesynonyms + {\doquadrupleempty\dodefinesynonyms} + +% Formaat tex-utility-input-file : +% +% synonym entry {tag} {pure} {text} {} +% +% Deze file wordt met het programma TeXUtil omgezet in een +% in te lezen TeXFile met de commando's: +% +% \synonymentry {tag} {pure} {text} {} + +\def\dosetupsorting[#1][#2]% + {\getparameters[\??so#1][#2]} + +\def\setupsorting + {\dodoubleargument\dosetupsorting} + +\def\doresetsort#1% + {\letvalue{#1\s!entry}\gobblethreearguments} + +\def\dosetsort#1% + {\setvalue{#1\s!entry}##1##2##3% + {\let\dowritesort\gobblethreearguments + \global\utilitydonetrue + \bgroup + \doifdefinedelse{\??so#1\c!command} + {\getvalue{\??so#1\c!command}{##2}} % 1 argument + {\getvalue{\??so#1\c!before}% + \doattributes{\??so#1}\c!style\c!color{##2}% + \getvalue{\??so#1\c!after}}% + \egroup}} + +\def\doplacelistofsorts#1% NOG EEN RUWE VERSIE MAKEN + {\whitespace % ZONDER WITRUIMTE ETC ETC + \begingroup + \setupwhitespace[\v!none]% + \doutilities{#1}\jobname{#1}\relax\relax + \endgroup + \ifutilitydone\else\nowhitespace\fi} + +% to be tested +% +% \def\doplacelistofsorts#1% NOG EEN RUWE VERSIE MAKEN +% {\startpacked +% %doutilities{#1}\jobname{#1}\relax\par +% \doutilities{#1}\jobname{#1}\relax\relax +% \stoppacked} + +\def\docompletelistofsorts#1#2% + {\expanded{\systemsuppliedchapter[#1]{\noexpand\headtext{#2}}}% + \doplacelistofsorts{#1}% + \page[\v!yes]} + +% todo: +% +% \def\placelistofsorts[#1]% +% {\doplacelistofsorts{#1}} + +\def\processsort#1#2#3% + {\dontleavehmode + \begingroup % was \bgroup + \doattributes{\??so#1}\c!style\c!color{#2}% + \endgroup} % was \egroup + +\def\dowritesort#1#2#3% + {\bgroup + \defconvertexpanded\asciisynonym{\getvalue{\??so#1\c!expansion}}{#3}% + \immediatewriteutility{s e {#1} {#2} {\asciisynonym} {}}% + \egroup} + +\def\synonymentry#1% + {\executeifdefined{#1\s!entry}\gobblethreearguments} + +\def\reprocesssort#1#2#3% + {\processsort{#1}{#2}{#3}% + \getvalue{\??so#1\c!next}} + +\def\preexecutesort#1#2#3% + {\ifdoinpututilities \else + \dowritesort{#1}{#2}{#3}% + \unexpanded\setgvalue{#2}{\reprocesssort{#1}{#3}{#2}}% + \fi} + +\def\executesort#1#2#3% + {\begingroup + \let\executesort\thirdofthreearguments % Trick needed for nested logo's. + \preexecutesort{#1}{#2}{#3}% + \processsort{#1}{#3}{#2}% + \endgroup + \getvalue{\??so#1\c!next}} % not formally documented + +\def\doloadsort#1% + {\setvalue{#1\s!entry}##1##2##3% + {\setgvalue{##1}{##2}% + \global\utilitydonetrue}} + +\def\doloadsort#1#2% + {\bgroup + \let\dosetsort\doloadsort + \showmessage\m!systems{20}{#2}% + \doutilities{#1}\jobname{#1}\relax\relax + \egroup + \setvalue{\s!check#1}##1{}} + +\def\dodocomplexsort[#1][#2]#3% + {\doifsomething{#2} + {\getvalue{\s!check#1}{#2}% + \doglobal\appendtoks\setvalue{#2}{#2}\to\simplifiedcommands + \doifelsevalue{\??so#1\c!state}\v!start + {\doifelsevalue{\??so#1\c!criterium}\v!all + {\preexecutesort{#1}{#2}{#3}} + {\unexpanded\setgvalue{#2}{\executesort{#1}{#2}{#3}}}} + {\unexpanded\setgvalue{#2}{\processsort{#1}{#3}{#2}}}}} + +\def\docomplexsort[#1][#2][#3]#4% + {\ifthirdargument + \dodocomplexsort[#2][#1#3]{#4}% + \else + \dowritesort{#2}{#4}{#4}% + \fi} + +% if #3=\relax or \v!none, then no command but still protected + +\def\doregistersortinglanguage#1% + {\savesortlanguage{\getvalue{\??so#1\s!language}}% + \immediatewriteutility{s l {#1} {\getvalue{\??so#1\s!language}}}} + +\def\dodefinesorting[#1][#2][#3]% + {\getparameters[\??so#1] + [%\c!command=, % we test for defined ! + \c!state=\v!start, + \c!criterium=, + \c!style=, + \c!before=, + \c!after=\endgraf, + \c!expansion=, + \s!language=\currentmainlanguage]% + \doglobal\appendtoksonce + \doregistersortinglanguage{#1}% + \to \everysavesortkeys + \ifthirdargument + \ConvertConstantAfter\doifnot{#3}\v!none + {\ifx#3\relax \else + \def#3##1{\getvalue{\??so:#1:##1}} + \fi}% + \setvalue{#1}{\dotripleempty\docomplexsort[\??so:#1:][#1]}% + \else + \setvalue{#1}{\dotripleempty\docomplexsort[][#1]}% + \fi + \addutilityreset{#1}% + \presetheadtext[#2=\Word{#2}]% after \ifthirdargument -) + \setvalue{\e!setup#2\e!endsetup}[##1]{\getparameters[\??so#1][##1]}% to be obsolete + \setvalue{\s!set#1}{\dosetsort{#1}}% + \setvalue{\s!reset#1}{\doresetsort{#1}}% + \setvalue{\e!load#2}{\doloadsort{#1}{#2}}% + \setvalue{\s!check#1}##1{\checkdefined{sort}{#1}{##1}}% + \setvalue{\e!place\e!listof#2}{\doplacelistofsorts{#1}}% + \setvalue{\e!complete\e!listof#2}{\docompletelistofsorts{#1}{#2}}} + +\def\definesorting + {\dotripleempty\dodefinesorting} + +%D Here we define a support macro that can sort simple comma +%D separated lists. It's a multi-list variant of a prototype +%D written by Taco. + +\def\processlistofsorts[#1]% + {\doutilities{#1}\jobname{#1}\relax\relax} + +\newcounter\nofsortedalphalists + +\def\sortalphacommacommand#1% + {\begingroup + \doglobal\increment\nofsortedalphalists + \edef\currentsortedalphalist{alpha:\nofsortedalphalists}% + \definesorting[\currentsortedalphalist][\currentsortedalphalist]% + \processcommacommand[#1]{\getvalue\currentsortedalphalist}% + \global\let\sortedcommalist\empty + \def\makesortedlist##1{\doglobal\appendtocommalist{##1}\sortedcommalist}% + \setupsorting[\currentsortedalphalist][\c!criterium=\v!all,\c!command=\makesortedlist]% + \processlistofsorts[\currentsortedalphalist]% + \endgroup + \dodoglobal\let#1\sortedcommalist} + +% \starttext +% \def\whatever{a,b,q,d,r,f} \sortalphacommacommand\whatever \whatever \endgraf +% \def\whatever{ax,bx,qx,dx,rx,fx} \sortalphacommacommand\whatever \whatever \endgraf +% \stoptext + +%D Presets. + +\definesynonyms + [\v!abbreviation] + [\v!abbreviations] + [\infull] + +\setupsynonyms + [\v!abbreviation] + [\c!textstyle=\v!capital, + \c!textcolor=, + \c!synonymstyle=, + \c!synonymcolor=, + \c!headstyle=, + \c!headcolor=, + \c!location=\v!left, + \c!width=5em, + \c!state=\v!start] + +\definesorting + [\v!logo] + [\v!logos] +% no [\logogram] + +\definesynonyms + [\v!unit] + [\v!units] + [\unitmeaning] + +\setupsynonyms + [\v!unit] + [\c!textstyle=\dimension] + +\protect \endinput -- cgit v1.2.3