summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/oberdiek/flags.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/oberdiek/flags.sty')
-rw-r--r--Master/texmf-dist/tex/latex/oberdiek/flags.sty94
1 files changed, 81 insertions, 13 deletions
diff --git a/Master/texmf-dist/tex/latex/oberdiek/flags.sty b/Master/texmf-dist/tex/latex/oberdiek/flags.sty
index d27d287ff7d..39de0fd1a91 100644
--- a/Master/texmf-dist/tex/latex/oberdiek/flags.sty
+++ b/Master/texmf-dist/tex/latex/oberdiek/flags.sty
@@ -28,7 +28,16 @@
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{flags}%
- [2007/02/18 v0.1 Flag setting in bit fields (HO)]
+ [2007/03/07 v0.3 Flag setting in bit fields (HO)]%
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname numexpr\endcsname\relax
+ \PackageError{flags}{%
+ Missing e-TeX, package loading aborted%
+ }{%
+ This packages makes heavy use of \string\numexpr.%
+ }%
+ \expandafter\endinput
+\fi
\newcommand*{\resetflags}[1]{%
\expandafter\let\csname flags@#1\endcsname\@empty
}
@@ -54,10 +63,17 @@
\fi
}
\newcommand*{\setflag}[2]{%
- \expandafter\@setflag\csname flags@#1\expandafter\endcsname
- \expandafter{\romannumeral\number\numexpr#2-1\relax000}%
+ \ifnum#2>\z@
+ \expandafter\@setflag\csname flags@#1\expandafter\endcsname
+ \expandafter{\romannumeral\number\numexpr#2-1\relax000}%
+ \else
+ \PackageError{flags}{Position must be a positive number}\@ehc
+ \fi
}
\def\@setflag#1#2{%
+ \ifx#1\relax
+ \let#1\@empty
+ \fi
\edef#1{%
\expandafter\@@setflag\expandafter{#1}{#2}%
}%
@@ -70,20 +86,27 @@
\ifx\\#2\\%
1\@gobble#1%
\else
- \@car#1\@nil
- \expandafter\@@@setflag\expandafter{\@gobble#2}{#1}%
+ \@@@setflag#1|#2%
\fi
\fi
}
-\def\@@@setflag#1#2\fi\fi{%
+\def\@@@setflag#1#2|#3#4\fi\fi{%
\fi\fi
- \expandafter\@@setflag\expandafter{\@cdr#2\@nil}{#1}%
+ #1%
+ \@@setflag{#2}{#4}%
}
\newcommand*{\clearflag}[2]{%
- \expandafter\@clearflag\csname flags@#1\expandafter\endcsname
- \expandafter{\romannumeral\number\numexpr#2-1\relax000}%
+ \ifnum#2>\z@
+ \expandafter\@clearflag\csname flags@#1\expandafter\endcsname
+ \expandafter{\romannumeral\number\numexpr#2-1\relax000}%
+ \else
+ \PackageError{flags}{Position must be a positive number}\@ehc
+ \fi
}
\def\@clearflag#1#2{%
+ \ifx#1\relax
+ \let#1\@empty
+ \fi
\edef#1{%
\expandafter\@@clearflag\expandafter{#1}{#2}%
}%
@@ -94,14 +117,14 @@
\ifx\\#2\\%
0\@gobble#1%
\else
- \@car#1\@nil
- \expandafter\@@@clearflag\expandafter{\@gobble#2}{#1}%
+ \@@@clearflag#1|#2%
\fi
\fi
}
-\def\@@@clearflag#1#2\fi\fi{%
+\def\@@@clearflag#1#2|#3#4\fi\fi{%
\fi\fi
- \expandafter\@@clearflag\expandafter{\@cdr#2\@nil}{#1}%
+ #1%
+ \@@clearflag{#2}{#4}%
}
\def\FLAGS@zero#1{%
\ifx#1\relax
@@ -110,6 +133,51 @@
\expandafter\FLAGS@zero
\fi
}
+\newcommand*{\queryflag}[2]{%
+ \ifnum\extractflag{#1}{#2}=\@ne
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+\newcommand*{\extractflag}[1]{%
+ \expandafter\@extractflag\csname flags@#1\endcsname
+}
+\def\@extractflag#1#2{%
+ \ifx#1\@undefined
+ 0%
+ \else
+ \ifx#1\relax
+ 0%
+ \else
+ \ifx#1\@empty
+ 0%
+ \else
+ \expandafter\expandafter\expandafter\@@extractflag
+ \expandafter\expandafter\expandafter{%
+ \expandafter#1\expandafter
+ }\expandafter{%
+ \romannumeral\number\numexpr#2-1\relax000%
+ }%
+ \fi
+ \fi
+ \fi
+}
+\def\@@extractflag#1#2{%
+ \ifx\\#1\\%
+ 0%
+ \else
+ \ifx\\#2\\%
+ \@car#1\@nil
+ \else
+ \@@@extractflag#1|#2%
+ \fi
+ \fi
+}
+\def\@@@extractflag#1#2|#3#4\fi\fi{%
+ \fi\fi
+ \@@extractflag{#2}{#4}%
+}
\endinput
%%
%% End of file `flags.sty'.