%D \module
%D   [       file=setupa,
%D        version=1998.07.20,
%D          title=\CONTEXT\ Setup Definitions,
%D       subtitle=Help Generation,
%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. 

\let\wait\relax

\input setupa

\unprotect

% keys 

\def\copymessage#1#2#3%
  {\dogetmessage{setup}{#3}\edef#1{#2\currentmessagetext}}

\copymessage \c!command!        *      {command}
\copymessage \c!dimension!      *      {dimension}
\copymessage \c!filename!       *      {file}
\copymessage \c!identifier!     *      {name}
\copymessage \c!character!      *      {character}
\copymessage \c!marker!         *      {mark}
\copymessage \c!number!         *      {number}
\copymessage \c!reference!      *      {reference}
\copymessage \c!plural!         *      {plural}
\copymessage \c!singular!       *      {singular}
\copymessage \c!text!           *      {text}
\copymessage \c!formula!        *      {formula}
\copymessage \c!font!           *      {file}
\copymessage \c!matrix!         *      {matrix}
\copymessage \c!list!           *      {list}
\copymessage \c!section!        *      {section}
\copymessage \c!noargument!     \empty {command}
\copymessage \c!oneargument!    \empty {command}
\copymessage \c!twoarguments!   \empty {command}
\copymessage \c!threearguments! \empty {command}

\edef\c!noargument!    {*\@EA\string\csname\c!noargument!    \endcsname}
\edef\c!oneargument!   {*\@EA\string\csname\c!oneargument!   \endcsname\string#1}
\edef\c!twoarguments!  {*\@EA\string\csname\c!twoarguments!  \endcsname\string#1\string#2}
\edef\c!threearguments!{*\@EA\string\csname\c!threearguments!\endcsname\string#1\string#2\string#3}

\def\subsetup#1{/#1}

\beginTEX 

\def\getinterfaceconstant#1%
  {\ifinterfacetranslation
     \ifx\csname\x!prefix!#1\endcsname\relax
       #1%
     \else
       \csname\x!prefix!#1\endcsname
     \fi
   \else
     #1%
   \fi}

\def\getinterfacevariable#1%
  {\ifinterfacetranslation
     \ifx\csname\y!prefix!#1\endcsname\relax
       #1%
     \else
       \csname\y!prefix!#1\endcsname
     \fi
   \else
     #1%
   \fi}

\endTEX

\beginETEX \ifcsname

\def\getinterfaceconstant#1%
  {\ifinterfacetranslation
     \ifcsname\x!prefix!#1\endcsname
       \csname\x!prefix!#1\endcsname
     \else
       #1%
     \fi
   \else
     #1%
   \fi}

\def\getinterfacevariable#1%
  {\ifinterfacetranslation
     \ifcsname\y!prefix!#1\endcsname
       \csname\y!prefix!#1\endcsname
     \else
       #1%
     \fi
   \else
     #1%
   \fi}

\endETEX

\def\c!repeat! {repeat/} % {n*}
\def\c!arg!    {arg/}    % {{...}:}
\def\c!args!   {args/}   % {{..,...,..}:}
\def\c!dis!    {dis/}    % {$$...$$:}
\def\c!idx!    {idx/}    % {{...}:}
\def\c!idxs!   {idxs/}   % {{..+...+..}:}
\def\c!mat!    {mat/}    % {$...$:}
\def\c!nop!    {nop/}    % {...:}            
\def\c!fil!    {fil/}    % {...:}            
\def\c!pos!    {pos/}    % {(...):}
\def\c!poss!   {poss/}   % {(...,...):}
\def\c!sep!    {sep/}    % {\string\\:}
\def\c!ref!    {ref/}    % {[ref]:}
\def\c!refs!   {refs/}   % {[ref,..]:}
\def\c!val!    {val/}    % {[...]:}
\def\c!vals!   {vals/}   % {[..,...,..]:}
\def\c!var!    {var/}    % {[..=..]:} 
\def\c!vars!   {vars/}   % {[..,..=..,..]:}
\def\c!cmd!    {cmd/}    % {\string\xxx:}
\def\c!dest!   {dest/}   % {[..ref]:}
\def\c!dests!  {dests/}  % {[..,..refs,..]:}
\def\c!trip!   {trip/}   % {[x:y:z=]:}
\def\c!trips!  {trips/}  % {[x:y:z=,..]:}
\def\c!wrd!    {wrd/}    % {{...}:}
\def\c!wrds!   {wrds/}   % {{.. ... ..}:}
\def\c!par!    {par/}    % {\string\par:}
\def\c!stp!    {stp/}    % {stop:}
\def\c!tex!    {tex/}    % {\string\cs:}

\def\c!or!     {}        % tzt or 

\def\c!opt!    {}        %
\def\c!optint! {}        %
\def\c!alwint! {}        %

% wrapper 

\def\startsetupfile
  {\immediate\openout\scratchwrite=cont-\currentlanguage.tws }

\def\stopsetupfile
  {\immediate\closeout\scratchwrite}

\let\documenteduntilhere\relax

\long\def\startsetup#1\stopsetup % the :'s serve as breakpoints
  {\bgroup
   \long\def\command         [##1]%
     {\immediate\write\scratchwrite{com:##1:}}%
   \long\def\type            [##1]%
     {\immediate\write\scratchwrite{typ:##1:}}%
   \long\def\value           [##1]##2[##3]%
     {\immediate\write\scratchwrite{val:##1:##3:}}%
   \long\def\variable        [##1]##2[##3]##4[##5]%
     {\convertsetupdata{##5}\ascii
      \edef\temp{\getinterfaceconstant{##1}}%
      \immediate\write\scratchwrite{var:\temp:##3:\ascii:}}%
   \long\def\inheritvalues   [##1]##2[##3]%
     {\immediate\write\scratchwrite{ivl:##1:##3:}}%
   \long\def\inheritvariables[##1]##2[##3]%
     {\convertsetupdata{##3}\ascii
      \immediate\write\scratchwrite{ivr:##1:\ascii:}}%
   \immediate\write\scratchwrite{startsetup}%
   #1%
   \immediate\write\scratchwrite{stopsetup}%
   \immediate\write\scratchwrite{}%
   \egroup}

\let\stopsetup\relax

\def\convertsetupdata#1#2% only accept #1=\v!whatever
  {\doifsystemconstantelse{#1}{\edef#2{#1}}{\let#2\empty}}

\input setupb 

\protect

\end
