diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/lisp-on-tex/lisp-mod-fpnum.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/lisp-on-tex/lisp-mod-fpnum.sty')
-rw-r--r-- | macros/latex/contrib/lisp-on-tex/lisp-mod-fpnum.sty | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/macros/latex/contrib/lisp-on-tex/lisp-mod-fpnum.sty b/macros/latex/contrib/lisp-on-tex/lisp-mod-fpnum.sty new file mode 100644 index 0000000000..291b343baa --- /dev/null +++ b/macros/latex/contrib/lisp-on-tex/lisp-mod-fpnum.sty @@ -0,0 +1,95 @@ +%%% module name :: fpnum + +% regist type and gc +\ifx\@defined@additional@type\@empty + \def\@defined@additional@type{fpnum}% +\else + \edef\@defined@additional@type{\@defined@additional@type,fpnum}% +\fi +\let\@lisp@gc@trace@fpnum\@gobble + +\def\@mod@read@fpnum#1#2{\gdef#1{\@tlabel@fpnum{#2}}} +\def\@tlabel@fpnum{\@eval@fpnum\@apply@fpnum\@@apply@fpnum} + +\def\@eval@fpnum#1#2#3{\gdef#3{\@tlabel@fpnum{#1}}} % #1 contents, #2 environment, #3 register +\def\@apply@fpnum{\errmessage{LISP on TeX [internal apply, module fpnum] cannot apply}} +\def\@@apply@fpnum{\errmessage{LISP on TeX [function --- apply, module fpnum] cannot apply}} + +\newdimen\@tempdimeni +\newdimen\@tempdimenii + +\@lisp@env@add@global\fpnumTOstring{\@tlabel@func{\@lisp@func@check@args{1}{\@mod@fpnum@tostring}}} +%TODO: error handling +\def\@mod@fpnum@tostring#1\@tlabel@fpnum#2{\gdef#1{\@tlabel@string{#2}}} + +\@lisp@env@add@global\fpplus{\@tlabel@func{\@lisp@func@check@args{*}{\@tempdimeni0pt\relax\@mod@fpnum@plus}}} +%TODO: error handling +\def\@mod@fpnum@plus#1#2#3{% + \ifx#2\relax + \let\@next@fpnum@plus\@@fin@fpnum@plus + \else\ifx#2\@tlabel@fpnum + \advance\@tempdimeni#3pt\relax + \let\@next@fpnum@plus\@mod@fpnum@plus + \else + \errmessage{LISP on TeX [fpnum --- plus]: Invalid argument}% + \fi\fi\@next@fpnum@plus#1} +\def\@@fin@fpnum@plus#1{\xdef#1{\noexpand\@tlabel@fpnum{\strip@pt\@tempdimeni}}} + +\@lisp@env@add@global\fpmul{\@tlabel@func{\@lisp@func@check@args{*}{\@tempdimeni1pt\relax\@mod@fpnum@mul}}} +%TODO: error handling +\def\@mod@fpnum@mul#1#2#3{% + \ifx#2\relax + \let\@next@fpnum@mul\@@fin@fpnum@mul + \else\ifx#2\@tlabel@fpnum + \@tempdimeni#3\@tempdimeni + \let\@next@fpnum@mul\@mod@fpnum@mul + \else + \errmessage{LISP on TeX [fpnum --- mul]: Invalid argument}% + \fi\fi\@next@fpnum@mul#1} +\def\@@fin@fpnum@mul#1{\xdef#1{\noexpand\@tlabel@fpnum{\strip@pt\@tempdimeni}}} + +\@lisp@env@add@global\fpminus{\@tlabel@func{\@lisp@func@check@args{+}{\@mod@fpnum@minus}}} +\def\@mod@fpnum@minus#1#2#3#4#5{% + \ifx#4\relax + \ifx#2\@tlabel@fpnum + \@tempdimenii#3pt + \@tempdimeni0pt + \advance\@tempdimeni-\@tempdimenii + \let\@next@fpnum@minus\@@fin@fpnum@minus + \else + \errmessage{LISP on TeX [fpnum --- minus]: Invalid argument}% + \fi + \else\ifx#4\@tlabel@fpnum + \ifx#2\@tlabel@fpnum + \@tempdimeni#3pt + \let\@next@fpnum@minus\@@next@fpnum@minus + \else + \errmessage{LISP on TeX [fpnum --- minus]: Invalid argument}% + \fi + \else + \errmessage{LISP on TeX [fpnum --- minus]: Invalid argument}% + \fi\fi + \@next@fpnum@minus#1#4{#5}} +\def\@@fin@fpnum@minus#1{\xdef#1{\noexpand\@tlabel@fpnum{\strip@pt\@tempdimeni}}} +\def\@@next@fpnum@minus#1#2#3{% + \ifx#2\relax + \let\@next@fpnum@minus\@@fin@fpnum@minus + \else\ifx#2\@tlabel@fpnum + \@tempdimenii#3pt + \advance\@tempdimeni-\@tempdimenii + \let\@next@fpnum@minus\@@next@fpnum@minus + \else + \errmessage{LISP on TeX [fpnum --- minus]: Invalid argument}% + \fi\fi + \@next@fpnum@minus#1} + +\@lisp@env@add@global\fplt{\@tlabel@func{\@lisp@func@check@args{2}{\@mod@fpnum@lt}}} +\def\@mod@fpnum@lt#1\@tlabel@fpnum#2\@tlabel@fpnum#3{% + \ifdim#2pt<#3pt + \gdef#1{\@tlabel@bool{t}}% + \else + \gdef#1{\@tlabel@bool{f}}% + \fi +} + + |