%% CONCAT : string -> string -> string %% (\concat str1 str2) => str1 ++ str2 \@lisp@env@add@global\concat{\@tlabel@func{\@lisp@func@check@args{+}{\def\@temp@str{}\@str@concat}}} \def\@str@concat#1#2#3{% \let\@@next@str\relax \ifx#2\@tlabel@string \expandafter\def \expandafter\@temp@str \expandafter{\@temp@str#3}% \let\@@next@str\@str@concat \else\ifx#2\relax \let\@@next@str\@str@fin \else \errmessage{LISP on TeX [function --- concat]:% Arguments of concat must be strings}% \fi\fi\@@next@str#1} \def\@str@fin#1{% \expandafter\gdef\expandafter#1% \expandafter{\expandafter\@tlabel@string\expandafter{\@temp@str}}} %% INT2STRING : int -> string %% (\intTOstring i) -> 'i' \@lisp@env@add@global\intTOstring{\@tlabel@func{\@lisp@func@check@args{1}{\@conv@intTOstr}}} \def\@conv@intTOstr#1\@tlabel@int#2{\gdef#1{\@tlabel@string{#2}}} %% STRING2INT : string -> int %% (\stringTOint 'i') -> i \@lisp@env@add@global\stringTOint{\@tlabel@func{\@lisp@func@check@args{1}{\@conv@strTOint}}} \def\@conv@strTOint#1\@tlabel@string#2{\gdef#1{\@tlabel@int{#2}}} %% IMMEDIATEWRITE : () -> () %% It outputs the output buffer immediately. %% It cause error if the buffer is incomplete. \@lisp@env@add@global\immediatewrite{\@tlabel@func{\@lisp@func@check@args{0}{\@immediate@write}}} \def\@immediate@write#1{% \gdef#1{\@tlabel@nil{}}% \@temp@write@buffer\gdef\@temp@write@buffer{}} %% GROUP : string -> string %% (\group str) -> '{str}' \@lisp@env@add@global\group{\@tlabel@func{\@lisp@func@check@args{1}{\@text@group}}} \def\@text@group#1#2#3{% \ifx#2\@tlabel@string \gdef#1{\@tlabel@string{{#3}}}% \else \errmessage{LISP on TeX [function --- group]:% The argument of group must be a string.}% \fi} %% UNGROUP : string -> string %% (\group '{str}') -> 'str' \@lisp@env@add@global\ungroup{\@tlabel@func{\@lisp@func@check@args{1}{\@text@ungroup}}} \def\@text@ungroup#1#2#3{% \ifx#2\@tlabel@string \@@text@ungroup#1#3\@@end \else \errmessage{LISP on TeX [function --- ungroup]:% The argument of ungroup must be a string.}% \fi} \def\@@text@ungroup#1#2#3\@@end{% \ifx;#3;% \gdef#1{\@tlabel@string{#2}}% \else \errmessage{LISP on TeX [function --- ungroup]:% The argument of ungroup must be a grouped string.}% \fi} %% FGETS : () -> string %% (\fgets) -> read tokens from standard-in \@lisp@env@add@global\fgets{\@tlabel@func{\@lisp@func@check@args{0}{\@text@fgets}}} \def\@text@fgets#1{% \endlinechar=-1 \read-1to#1% \expandafter\gdef\expandafter#1\expandafter{\expandafter\@tlabel@string\expandafter{#1}}} %% EXPAND : string -> string %% (\expand '') -> '' where is expanded tokens of \@lisp@env@add@global\expand{\@tlabel@func{\@lisp@func@check@args{1}{\@lot@text@expand}}} \def\@lot@text@expand#1\@tlabel@string#2{% \edef\@temp@i{#2}% \xdef#1{\noexpand\@tlabel@string{\@temp@i}}}