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}}