Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
% Boolean --- Boolean expressions
%
% Copyright (C) 2006 Didier Rémy
%
% Author : Didier Remy
% Version : 0.1
% Bug Reports : to author
% Web Site : http://pauillac.inria.fr/~remy/latex/
%
% Boolean is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2, or (at your option)
% any later version.
%
% Boolean is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details
% (http://pauillac.inria.fr/~remy/license/GPL).
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% File boolean.sty (LaTeX macros)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{boolean}
[2006/10/05 version 0.1 Boolean expressions]
%% This package provides LaTeX with boolean expressions
%% Identification
%% Preliminary declarations
%% Options
\newcommand {\TRUE}[2]{#1}
\newcommand {\FALSE}[2]{#2}
%% Public commands are also given inner hidden names
\let \bln@true \TRUE
\let \bln@false \FALSE
\newcommand {\AND}[2]{#1{#2}{\bln@false}}
\newcommand {\OR}[2]{#1{\bln@true}{#2}}
\newcommand {\NOT}[1]{#1{\bln@false}{\bln@true}}
\newcommand {\IF}[3]{#1{#2}{#3}}
\let \bln@and \AND
\let \bln@or \OR
\let \bln@not \NOT
\let \bln@if \IF
%% To convert if.. macros into Booleans:
\newcommand {\texbool}[1]
{#1\let \bln@do \bln@true \else \let \bln@do \bln@false\fi \bln@do}
%% Does not work
\let \bln@tex \texbool
\newcommand {\ifxbool}[2]
{\ifx #1#2\let \bln@do \bln@true \else \let \bln@do \bln@false \fi \bln@do}
\let \bln@ifx \ifxbool
\newcommand {\ifybool}[2]
{\def \bln@testa{#1}\ifxbool{\bln@testa}{#2}}
\let \bln@ify \ifybool
\newcommand {\ifequalbool}[2]
{\def \bln@testa{#1}\def \bln@testb{#2}\ifxbool{\bln@testa}{\bln@testb}}
\let \bln@ifequal \ifequalbool
\def \bln@empty {}
\newcommand {\ifemptybool}[1]
{\ifybool{#1}{\bln@empty}}
\let \bln@ifempty \ifemptybool
%% To force evaluation, e.g. if a blnlean expression is to be used several
%% times. This takes a Boolean expression and returns a Boolean value, i.e.
%% \True or \False.
\newcommand* {\letboolval}[2]
{#2{\let #1\bln@true}{\let #1\bln@false}}
\newcommand* {\newboolval}[2]
{\@ifdefinable #1{\letboolval{#1}{#2}}}
%% We provide list versions of And and Or
\def \bln@scan #1,#2\bln@to#3#4{%
\bln@ifempty{#2}{#3{#4}{#1}}
{\bln@scan #2\bln@to {#3}{#3{#4}{#1}}}%
}
\def \bln@eval #1#2#3{%
\bln@ifempty{#1}{#3}%
{\bln@scan #1,\bln@to {#2}{#3}}%
}
\newcommand*{\ANDL}[1]{\bln@eval {#1}{\bln@and}{\bln@true}}
\newcommand*{\ORL} [1]{\bln@eval {#1}{\bln@or}{\bln@false}}
%% In some contexts, shorter names may be more convenient
\newcommand*{\ShorterBooleanNames}{%
\let \true \bln@true
\let \false \bln@true
\let \or \bln@or
\let \and \bln@and
\let \not \bln@not
\let \orl \bln@orl
\let \andl \bln@andl
}
%% Comparisson between strings
\newcommand {\stringmatch}[3]{%
\def \@match ##1#2##2\str@sep ##3\str@sep ##4\str@end
{#1{##1}{##2}{\ifequalbool{#2}{##3}}}%
\@match #3\str@sep #2\str@sep \str@sep \str@end
}
\let \str@match \stringmatch
%% The following commands takes in order Prefix Infix Suffix Left
\def \str@infix #1#2#3{#3}
\def \str@prefix #1#2#3{\AND{#3}{\ifemptybool{#1}}}
\def \str@suffix #1#2#3{\AND{#3}{\ifemptybool{#2}}}
\newcommand {\ifstringinfix} {\str@match {\str@infix}}
\newcommand {\ifstringsuffix}{\str@match {\str@suffix}}
\newcommand {\ifstringprefix}{\str@match {\str@prefix}}