summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/plain
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-05-09 19:26:34 +0000
committerKarl Berry <karl@freefriends.org>2024-05-09 19:26:34 +0000
commitfe6cfb68f83442d7286c95854171e71439f3b316 (patch)
treeac0b4386cd42f3c10877fd9e0f7a077197981be6 /Master/texmf-dist/tex/plain
parentd169edd133559570bfd9f10d0d0d0a19f7740761 (diff)
ifis-macros (9may24)
git-svn-id: svn://tug.org/texlive/trunk@71220 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/plain')
-rw-r--r--Master/texmf-dist/tex/plain/ifis-macros/ifisdimension.tex93
-rw-r--r--Master/texmf-dist/tex/plain/ifis-macros/ifisinteger.tex44
2 files changed, 137 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/plain/ifis-macros/ifisdimension.tex b/Master/texmf-dist/tex/plain/ifis-macros/ifisdimension.tex
new file mode 100644
index 00000000000..35ba85b134e
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/ifis-macros/ifisdimension.tex
@@ -0,0 +1,93 @@
+\catcode`\@=11
+\newif\ifII@itis %% reused from \ifisint %%
+\def\II@rmsign #1{\ifx#1+\else\ifx#1-\else %%
+ \II@endrm#1\fi\fi\II@rmsign}% remove signs: %%
+\def\II@endrm #1\fi\fi#2{\fi\fi#1}% `+' & `-' %%
+\let\Boolend=\iffalse \font\II@font=cmr10 % %%
+\let\IIcurrentmode=\errorstopmode % CONFIGURE %%
+\def\II@W{W}\def\II@octW{'W}\def\II@hexW{"W}% %%
+%% declarations
+\newdimen\II@frac
+\countdef\II@cnt=255 \dimendef\II@dim=255
+%% helper macros; some use \ifisint's sentinel W
+\def\II@bad #1#2#3#4#5#6\II@end{% numeric part
+ \def\II@id{#1W}% is missing but maybe with unit
+ \edef\II@X{#6}\ifx\II@X\empty
+ \edef\II@X{#5}\ifx\II@X\empty\else\II@Bad\fi
+ \else \edef\II@X{\II@mklc#2#3#4W}%
+ \ifx\II@X\II@rueW
+ \else\ifx\II@X\II@truW\II@Bad
+ \else \II@itistrue
+ \fi\fi\fi}
+\def\II@rueW{rueW}\def\II@truW{truW}
+\def\II@Bad{\ifx\II@id\II@W
+ \else\ifx\II@id\II@octW
+ \else\ifx\II@id\II@hexW
+ \else \II@itistrue
+ \fi\fi\fi}
+\def\II@mklc #1{\if#1pp\else\if#1Pp\else
+ \if#1tt\else\if#1Tt\else
+ \if#1bb\else\if#1Bb\else
+ \if#1ss\else\if#1Ss\else
+ \if#1rr\else\if#1Rr\else
+ \if#1uu\else\if#1Uu\else
+ \if#1ee\else\if#1Ee\else
+ \II@endlc#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi \II@mklc}% `W' and `m' stop \II@mklc
+\def\II@endlc #1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi#2{\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \fi\fi\fi\fi#1}
+\def\II@getfrac #1mm\II@end{\global\II@frac=0#1}
+\def\II@getcalc{%\II@calc=coerced\II@int\II@frac
+ \ifdim\II@unit=26.11119pt % \II@unit is ``pt''
+ \II@dim=\ifnum\II@int<16384
+ \II@int\else 0\fi pt
+ \else\ifdim\II@unit=27.77786pt % it is ``bp''
+ \II@dim=\ifnum\II@int<16323
+ \II@int\else 0\fi bp
+ \else\ifdim\II@unit=26.16673pt % it is ``sp''
+ \II@dim=\ifnum\II@int<1073741824
+ \II@int\else 0\fi sp
+ \else \II@dim=0pt \fi\fi\fi
+ \II@cnt=\II@dim \advance\II@cnt by \II@frac
+ \edef\II@calc{\number\II@cnt}}
+\def\II@point #1#2\II@end{% assign digits of the
+ \afterassignment\II@mklc % fraction to \II@cnt
+ \ifx#1.\II@cnt=0#2%
+ \else\ifx#1,\II@cnt=0#2%
+ \else \II@cnt=0#1#2%
+ \fi\fi}
+\def\II@getunit #1{\afterassignment\II@hdlfrac
+ \II@cnt=#1\relax}
+\def\II@rmtrue{\ifdim\wd0>40pt \the\II@dim
+ \else \the\wd0 \fi}
+%% main macro
+\def\ifisdim #1\Boolend{\II@itisfalse % S1.3
+ \edef\II@dist{\II@rmsign#1mm}% S1.1
+ \edef\II@dist{\expandafter\II@rmsign\II@dist}%
+ \expandafter\II@bad
+ \II@dist\empty\empty\empty\empty\II@end % S1.2
+ \ifII@itis % S4.1, S4.4
+ \wlog{=== start ignore}\batchmode\begingroup
+ \setbox0=\hbox{\II@font
+ \afterassignment\II@getfrac
+ \II@cnt=\II@dist\II@end % S2.2
+ \xdef\II@int{\the\II@cnt}}% S2.1
+ \setbox0=\hbox{\II@font
+ \afterassignment\II@point
+ \II@cnt=\II@dist\II@end}\II@dim=\wd0
+ \advance\II@dim by -17.80559pt % width `true'
+ \xdef\II@unit{\II@rmtrue}% S2.3
+ \setbox0=\hbox{\II@font\II@dim=#1mm% S3.1
+ \xdef\II@val{\ifdim\II@dim<0pt-\fi
+ \the\II@dim}}%
+ \xdef\II@wd{\the\wd0}%
+ \endgroup\IIcurrentmode\wlog{=== stop ignore}%
+ \ifdim\II@wd=16.66672pt % width ``mm'' S3.2
+ \ifdim\II@val=\maxdimen \II@getcalc
+ \ifnum\II@calc=1073741823 % S4.2
+ \else \II@itisfalse % S4.3
+ \fi\fi
+ \else \II@itisfalse % S3.3
+ \fi\fi \ifII@itis}
+\catcode`\@=12
diff --git a/Master/texmf-dist/tex/plain/ifis-macros/ifisinteger.tex b/Master/texmf-dist/tex/plain/ifis-macros/ifisinteger.tex
new file mode 100644
index 00000000000..5249c2fa6cb
--- /dev/null
+++ b/Master/texmf-dist/tex/plain/ifis-macros/ifisinteger.tex
@@ -0,0 +1,44 @@
+\catcode`\@=11 % use the private prefix ``II@''
+\newif\ifII@itis % main result of the macro
+%% helper macros
+\def\II@rmsign #1{\ifx#1+\else\ifx#1-\else
+ \II@endrm#1\fi\fi\II@rmsign}
+\def\II@endrm #1\fi\fi#2{\fi\fi#1}
+\def\II@zeros #1{\ifx#1''\else\ifx#1""\else
+ \II@cont#1\fi\fi\II@zeros}
+\def\II@cont #1\fi\fi#2{\fi\fi\II@hdlzero#1}
+\def\II@hdlzero #1{\ifx#10 \else
+ \II@xchgfi #1\fi\II@hdlzero}
+\def\II@xchgfi #1\fi#2{\fi\ifx#1`\else0\fi#1}
+%% constants with the sentinel `W'
+\def\II@cfd{02147483647W}% canonical forms with
+\def\II@cfh{"07FFFFFFFW}% W of TeX's max integer
+\def\II@cfo{'017777777777W}% in dec, hex, oct
+\def\II@W{W}\def\II@hexW{"W}% all unsigned input
+\def\II@octW{'W}% with W for which TeX inserts 0
+%% assignments
+\let\Boolend=\iffalse \font\II@font=cmr10
+\let\IIcurrentmode=\errorstopmode % CONFIGURE
+%% main macro
+\def\ifisint #1\Boolend{\II@itisfalse % see S1.2
+ \edef\II@digs{\II@rmsign#1W}% S1.1 with 2 \edef
+ \edef\II@digs{\expandafter\II@rmsign\II@digs}%
+ \ifx\II@digs\II@W\else\ifx\II@digs\II@octW
+ \else\ifx\II@digs\II@hexW\else % S1.2 finished
+ \edef\II@cf{\expandafter\II@zeros\II@digs}% S2
+ \wlog{=== start ignore}\batchmode\begingroup
+ \setbox0=\hbox{\count255=\II@cf
+ \xdef\II@val{\the\count255}}%
+ \setbox0=\hbox{\II@font\count255=#1W}% S3.1
+ \xdef\II@wd{\the\wd0}%
+ \endgroup\IIcurrentmode\wlog{=== stop ignore}%
+ \ifdim\II@wd=10.2778pt % \wd of hbox `W'; S3.2
+ \II@itistrue \ifnum\II@val=2147483647 % S4.1
+ \ifx\II@cf\II@cfd
+ \else\ifx\II@cf\II@cfh
+ \else\ifx\II@cf\II@cfo % S4.2
+ \else \II@itisfalse % S4.3
+ \fi\fi\fi\fi
+ \else \II@itisfalse % S3.3
+ \fi\fi\fi\fi \ifII@itis}
+\catcode`\@=12