summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/substr
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-13 00:08:08 +0000
committerKarl Berry <karl@freefriends.org>2006-01-13 00:08:08 +0000
commit8c14b1452075b92517dbfae956722cb9564d562b (patch)
tree5798a57c989f37906992fd7471dcba63a05aa8ce /Master/texmf-dist/tex/latex/substr
parentb98ffba4129664936983eb91f2e6dae5117c096b (diff)
substr
git-svn-id: svn://tug.org/texlive/trunk@1357 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/substr')
-rw-r--r--Master/texmf-dist/tex/latex/substr/substr.sty150
1 files changed, 150 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/substr/substr.sty b/Master/texmf-dist/tex/latex/substr/substr.sty
new file mode 100644
index 00000000000..1537f872fba
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/substr/substr.sty
@@ -0,0 +1,150 @@
+%%
+%% substr.sty
+%%
+%% This package provides commands to deal with substrings in strings:
+%% Determine if a string contains a substring, count appearances of a
+%% substring in a string.
+%%
+%%
+%% Commands:
+%%
+%% \IfSubStringInString{substring}{string}{true part}{false part}
+%% This command searches <substring> in <string> and executes the
+%% <true part> if it is and else the <else part>
+%%
+%% \IfCharInString{char}{string}{true part}{false part}
+%% Actualy the same as \IfSubStringInString.
+%%
+%% \BehindSubString{substring}{string}
+%% Returns the part of <string> that is on the behind
+%% <substring>. Always the first appearance of <substring> is taken.
+%%
+%% \BeforeSubString{substring}{string}
+%% Returns the part of <string> that is on the before
+%% <substring>. Always the first appearance of <substring> is taken.
+%%
+%% \CountSubStrings{substring}{string}
+%% Counts the number of appearances of <substring> in <string> and
+%% returns it as text.
+%%
+%% \SubStringsToCounter}{counter}{substring}{string}
+%% Counts the number of appearances of <substring> in <string> and
+%% sets the counter <counter> to that value.
+%%
+%%
+%% History of this package:
+%%
+%% The package arises from a posting of me in the newsgroup
+%% de.comp.text.tex in which I asked how to find out if a substring
+%% is included in a string. Heiko Oberdiek
+%% <oberdiek@ruf.uni-freiburg.de> posted the commands
+%% \IfSubStringInString and \IfCharInString and suggested to write a
+%% command which counts the appearances in a string. So, I wrote the
+%% commands \CountSubStrings and \SubStringsToCounter.
+%% After I wrote this package I sent it to Heiko Oberdiek
+%% who improved and rewrote many parts of it.
+%%
+%%
+%% Copyright 2000 Harald Harders
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN
+%% archives in directory macros/latex/base/lppl.txt; either
+%% version 1 of the License, or any later version.
+%%
+%%
+%% 2000-06-15
+%% Harald Harders
+%% h.harders@tu-bs.de
+%%
+\ProvidesPackage{substr}[2000/06/15]
+%%
+% expands the first and second argument with
+% \protected@edef and calls #3 with them:
+\newcommand{\su@ExpandTwoArgs}[3]{%
+ \protected@edef\su@SubString{#1}%
+ \protected@edef\su@String{#2}%
+ \expandafter\expandafter\expandafter#3%
+ \expandafter\expandafter\expandafter{%
+ \expandafter\su@SubString\expandafter
+ }\expandafter{\su@String}%
+}
+%%
+%% tests if #1 in #2. If yes execute #3, else #4
+\newcommand*{\IfSubStringInString}[2]{%
+ \su@ExpandTwoArgs{#1}{#2}\su@IfSubStringInString
+}
+%%
+\newcommand*{\su@IfSubStringInString}[2]{%
+ \def\su@compare##1#1##2\@nil{%
+ \def\su@param{##2}%
+ \ifx\su@param\@empty
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+ }%
+ \su@compare#2#1\@nil
+}
+%%
+%% tests if #1 in #2. If yes execute #3, else #4
+\newcommand\IfCharInString{}
+\let\IfCharInString\IfSubStringInString
+%%
+%% returns the part of the string behind the found substring
+\newcommand*{\BehindSubString}[2]{%
+ \su@ExpandTwoArgs{#1}{#2}\su@BehindSubString
+}
+\newcommand*{\su@BehindSubString}[2]{%
+ \def\su@rest##1#1##2\@nil{##2}%
+ \IfSubStringInString{#1}{#2}{\su@rest#2\@nil}{}%
+}
+%%
+%% returns the part of the string before the found substring
+\newcommand*{\BeforeSubString}[2]{%
+ \su@ExpandTwoArgs{#1}{#2}\su@BeforeSubString
+}
+\newcommand*{\su@BeforeSubString}[2]{%
+ \def\su@rest##1#1##2\@nil{##1}%
+ \IfSubStringInString{#1}{#2}{\su@rest#2\@nil}{#2}%
+}
+%%
+%% counter for counting appearances
+\newcounter{su@anzahl}
+%%
+% #1: String
+% #2: Substring
+% #3: Counter
+\newcommand*{\su@StringSubstringCounter}[3]{%
+ \su@IfSubStringInString{#2}{#1}{%
+ \stepcounter{#3}%
+ \def\su@rest##1#2##2\@nil{##2}%
+ \expandafter\su@StringSubstringCounter\expandafter
+ {\su@rest#1\@nil}{#2}{#3}%
+ }{}%
+}
+%%
+\newcommand*{\CountSubStrings}[2]{%
+ \su@ExpandTwoArgs{#1}{#2}\su@CountSubStrings
+}
+\newcommand*{\su@CountSubStrings}[2]{%
+ \setcounter{su@anzahl}{0}%
+ \su@StringSubstringCounter{#2}{#1}{su@anzahl}%
+ \thesu@anzahl
+}
+% #1: counter
+% #2: substring
+% #3: string
+\newcommand*{\SubStringsToCounter}[3]{%
+ \su@ExpandTwoArgs{#2}{#3}\su@SubStringsToCounter{#1}%
+}
+% #1: substring
+% #2: string
+% #3: counter
+\newcommand*{\su@SubStringsToCounter}[3]{%
+ \setcounter{#3}{0}%
+ \su@StringSubstringCounter{#2}{#1}{#3}%
+}
+%%
+\endinput
+%% EOF