summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-09-19 17:45:27 +0000
committerKarl Berry <karl@freefriends.org>2006-09-19 17:45:27 +0000
commitff0751c47677d74e738b6009c1401b5b9a88d937 (patch)
tree6cfe46758edd2ece4e34e0c1b52febf047eb705b /Master
parentb29717c1df1269ae871047d6ccab7b69f95b7fd1 (diff)
new package coolstr (18sep06)
git-svn-id: svn://tug.org/texlive/trunk@2160 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/coolstr/README34
-rw-r--r--Master/texmf-dist/doc/latex/coolstr/coolstr.pdfbin0 -> 93108 bytes
-rw-r--r--Master/texmf-dist/source/latex/coolstr/coolstr.dtx340
-rw-r--r--Master/texmf-dist/source/latex/coolstr/coolstr.ins40
-rw-r--r--Master/texmf-dist/tex/latex/coolstr/coolstr.sty169
-rw-r--r--Master/texmf-dist/tpm/coolstr.tpm29
-rw-r--r--Master/texmf/lists/coolstr8
-rw-r--r--Master/texmf/tpm/collection-latexextra.tpm1
8 files changed, 621 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/coolstr/README b/Master/texmf-dist/doc/latex/coolstr/README
new file mode 100644
index 00000000000..2d6eed8450a
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/coolstr/README
@@ -0,0 +1,34 @@
+Description
+-----------
+
+The coolstr package is a subpackage of the cool package that deals with the
+manipulation of strings. A string is defined as a sequence of characters
+(not tokens).
+
+The package provides the ability to access a specific character of a string,
+as well as determine if the string contains numeric or integer data.
+
+Installation
+------------
+
+To install this package, run coolstr.ins through LaTeX. This will generate
+a file called coolstr.sty. Put this file somewhere where LaTeX will find
+it---for instance localtexmf/tex/latex/coolstr/ (note that you will need
+to create the folder coolstr).
+
+If you are using MikTeX, you then need to refresh the file name database
+by using MikTeX Options
+
+
+License
+-------
+
+This pacakge is released under the GNU Lesser General Public License. See
+http://www.gnu.org/licenses/licenses.html#LGPL for more details.
+
+Contact
+-------
+
+Any bugs may be reported to the author by sending an email to the address with
+the first part being nsetzer, then an at sign, the next part is umd, and
+finally it ends in dot edu. \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/coolstr/coolstr.pdf b/Master/texmf-dist/doc/latex/coolstr/coolstr.pdf
new file mode 100644
index 00000000000..61b5c5a67d9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/coolstr/coolstr.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/coolstr/coolstr.dtx b/Master/texmf-dist/source/latex/coolstr/coolstr.dtx
new file mode 100644
index 00000000000..f2aec955401
--- /dev/null
+++ b/Master/texmf-dist/source/latex/coolstr/coolstr.dtx
@@ -0,0 +1,340 @@
+% \iffalse
+%
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{coolstr}
+%<package> [2006/09/17 v1.0 COntent Oriented LaTeX Strings]
+%<package>\RequirePackage{ifthen}
+%<package>\RequirePackage{amsmath}
+%<package>\RequirePackage{amssymb}
+%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{coolstr}
+\usepackage{url}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\begin{document}
+\DocInput{coolstr.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \iffalse meta-comment
+% remove this comment to get a checksum
+% \CheckSum{0}
+% \fi
+%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%
+% \changes{v1.0}{2006/09/17}{Initial Release}
+%
+% \GetFileInfo{coolstr.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ ,\!,\(,\),\,}
+% \DoNotIndex{\@ne,\expandafter}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\newcommand,\renewcommand,\providecommand}
+% \DoNotIndex{\closeout,\day,\def,\edef,\gdef,\let,\empty,\endgroup}
+% \DoNotIndex{\newcounter,\providecounter,\addtocounter,\setcounter,\stepcounter,\value,\arabic}
+% \DoNotIndex{\if,\fi,\ifthenelse,\else,\setboolean,\boolean,\newboolean,\provideboolean,\equal,\AND,\OR,\NOT,\whiledo}
+% \DoNotIndex{\ifcase,\ifcat,\or,\else}
+% \DoNotIndex{\par,\parbox,\mbox,\hbox,\begin,\end,\nabla,\partial}
+% \DoNotIndex{\overline,\bar,\small,\tiny,\mathchoice,\scriptsize,\textrm,\texttt}
+% \DoNotIndex{\alpha,\beta,\gamma,\epsilon,\varepsilon,\delta,\zeta,\eta,\theta,\vartheta,\iota,\kappa,\lambda,\mu,\nu}
+% \DoNotIndex{\xi,\omicron,\pi,\varpi,\rho,\varrho,\sigma,\tau,\upsilon,\phi,\varphi,\chi,\psi,\omega}
+% \DoNotIndex{\Delta,\Gamma,\Theta,\Lambda,\Xi,\Pi,\Sigma,\Phi,\Psi,\Omega}
+% \DoNotIndex{\digamma,\lceil,\rceil,\lfloor,\rfloor,\left,\right,\inp,\inb,\inbr,\inap,\nop}
+% \DoNotIndex{\sum,\prod,\int,\log,\ln,\exp,\sin,\cos,\tan,\csc,\sec,\cot,\arcsin,\arccos,\arctan,\det}
+% \DoNotIndex{\sinh,\cosh,\tanh,\csch,\sech,\coth,\arcsinh,\arccosh,\arctanh}
+% \DoNotIndex{\mod,\max,\min,\gcd,\lcm,\wp,\arg,\dots,\infty,}
+% \DoNotIndex{\frac,\binom,\braket,\@@atop}
+% \DoNotIndex{\cdot,\ldots,\tilde,\times,\dagger,\relax}
+% \DoNotIndex{\mathbb,\roman,\bf,\mathord,\cal,\DeclareMathOperator,\PackageError,\PackageWarning}
+% \DoNotIndex{\csname,\endcsname,\ifx,\ifnum}
+% \DoNotIndex{\COOL@Hypergeometric@pq,\COOL@Hypergeometric@pq@ab@value,\hideOnSF,\COOL@decide@paren}
+% \DoNotIndex{\COOL@decide@indicies}
+% \DoNotIndex{\mod,\bmod,\pmod,\pod,\operatorname}
+%
+% \title{The \textsf{coolstr} package\thanks{This document
+% corresponds to \textsf{cool}~\fileversion,
+% dated~\filedate.}}
+% \author{nsetzer}
+%
+% \maketitle
+%
+% \setcounter{IndexColumns}{2}
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% The \textsf{coolstr} package is a ``sub" package of the \textsf{cool} package that seemed appropriate to publish
+% independently since it may occur that one wishes to include the ability to check strings without having to accept
+% all the overhead of the \textsf{cool} package itself.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\section{Basics}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Strings are defined as a sequence of characters (not \TeX{} tokens). The main purpose behind treating strings as
+% characters rather than tokens is that one can then do some text manipulation on them.
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\section{Implementation}
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This is just an internal counter for dealing with the strings; most often used for the length
+%
+% \begin{macrocode}
+\newcounter{COOL@strlen}%
+% \end{macrocode}
+%
+% \begin{macro}{\setstrEnd}
+%
+% |\setstrEnd{|\meta{string}|}| allows the user to set the end of a string `character'
+% in the rare event that the default value actually appears in the string.
+% The default value is
+%
+% \begin{macrocode}
+\newcommand{\COOL@strEnd}{\%\%\%}
+\newcommand{\COOL@intEnd}{\%@\%@\%@}
+% \end{macrocode}
+%
+% and may be changed by the following command (which utilizes the |\renewcommand|):
+%
+% \begin{macrocode}
+\newcommand{\setstrEnd}[1]{\renewcommand{\COOL@strEnd}{#1}}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+% This area defines the core technology behind the \textsf{coolstr} package: the string ``gobbler".
+%
+% \begin{macrocode}
+\newcounter{COOL@strpointer}
+% \end{macrocode}
+%
+% Now we come to ``the gobbler"---a recursive function that eats up a string.
+% It must be written in \TeX{} primatives.
+%
+% The idea behind this is that ``the gobbler" eats up everything before the desired character and everything
+% after the desired character.
+%
+% \begin{macrocode}
+\def\COOL@strgobble[#1]#2#3{%
+\ifthenelse{\equal{#3}{\COOL@strEnd}}
+ {%
+ \ifthenelse{\value{COOL@strpointer}=#1}
+ {%
+ #2
+ }%
+ % Else
+ {%
+ }%
+ }%
+% Else
+ {%
+ \ifthenelse{\value{COOL@strpointer}=#1}
+ {%
+ #2
+ }%
+ % Else
+ {%
+ }%
+ \stepcounter{COOL@strpointer}%
+ \COOL@strgobble[#1]#3
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\strchar}
+% |\strchar|\marg{index} gives the \meta{index} character of the string. Strings start indexing at $1$.
+%
+% \begin{macrocode}
+\newcommand{\strchar}[2]{%
+\setcounter{COOL@strpointer}{1}%
+\COOL@strgobble[#2]#1\COOL@strEnd%
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% This ``gobbler" is used to determine if the string contains numeric data. As it stands, not all numeric data is
+% recognized
+%
+% \begin{macrocode}
+\newboolean{COOL@firstdecimalfound}
+\newboolean{COOL@seconddecimalfound}
+\newboolean{COOL@efound}
+\newboolean{COOL@digitfound}
+
+\def\COOL@numericgobbler#1#2{%
+\ifthenelse{\equal{#2}{\COOL@strEnd}}%
+ {%
+ \ifthenelse{`#1 < `0 \OR `#1 > `9}%
+ {%
+ Not Numeric%
+ }%
+ % Else
+ {%
+ Is Numeric%
+ }%
+ }%
+% Else
+ {%
+ \ifthenelse{ `#1 < `0 \OR `#1 > `9 }%
+ {%
+% \end{macrocode}
+% at this point it can only be a decimal point or an 'e' if it is to remain numeric
+% \begin{macrocode}
+ \ifthenelse{ `#1 = `. }%
+ {%
+ \ifthenelse{ \boolean{COOL@seconddecimalfound} }%
+ {%
+% \end{macrocode}
+% this is the THIRD decimal
+% \begin{macrocode}
+ Not numeric%
+ }%
+ % else
+ {%
+ \ifthenelse{ \boolean{COOL@firstdecimalfound} }%
+ {%
+% \end{macrocode}
+% this is the SECOND decimal
+% \begin{macrocode}
+ \ifthenelse{ \boolean{COOL@efound} }%
+ {%
+ \setboolean{COOL@seconddecimalfound}{true}%
+ \COOL@numericgobbler#2%
+ }%
+ % else
+ {%
+ Not numeric%
+ }%
+ }%
+ % else
+ {%
+% \end{macrocode}
+% this is the FIRST decimal
+% \begin{macrocode}
+ \setboolean{COOL@firstdecimalfound}{true}%
+ \COOL@numericgobbler#2%
+ }%
+ }%
+ }%
+ % else
+ {%
+ \ifthenelse{ \(`#1 = `E\) \OR \(`#1 = `e\) }%
+ {%
+ \ifthenelse{ \boolean{COOL@efound} \OR \NOT \boolean{COOL@digitfound} }%
+ {%
+ Not numeric%
+ }%
+ % else
+ {%
+ \setboolean{COOL@efound}{true}%
+ \COOL@numericgobbler#2%
+ }%
+ }%
+ % else
+ {%
+ Not Numeric
+ }%
+ }%
+ }%
+ % Else
+ {%
+ \setboolean{COOL@digitfound}{true}%
+ \COOL@numericgobbler#2%
+ }%
+ }%
+}
+% \end{macrocode}
+%
+% \begin{macro}{\isnumeric}
+% |\isnumeric|\marg{string} returns some text stating whether or not \meta{string} contains numeric data.
+%
+% \begin{macrocode}
+\newcommand{\isnumeric}[1]{%
+\setboolean{COOL@firstdecimalfound}{false}%
+\setboolean{COOL@seconddecimalfound}{false}%
+\setboolean{COOL@efound}{false}%
+\setboolean{COOL@digitfound}{false}%
+\COOL@numericgobbler#1\COOL@strEnd%
+}
+% \end{macrocode}
+%
+% \end{macro}
+%
+% In addition to identifying numeric data, it is useful to know if integers are present, thus another ``gobbler" is
+% needed
+%
+% \begin{macrocode}
+\let\COOL@strStop=\relax
+\newboolean{COOL@isint}
+\def\COOL@intgobbler#1#2\COOL@strEnd{%
+\ifcat#11
+\ifthenelse{\equal{#2}{\COOL@strStop}}%
+ {%
+ \ifthenelse{`#1 < `0 \OR `#1 > `9}%
+ {%
+ \setboolean{COOL@isint}{false}%
+ }%
+ % Else
+ {%
+ \setboolean{COOL@isint}{true}%
+ }%
+ }%
+% Else
+ {%
+ \ifthenelse{ `#1 < `0 \OR `#1 > `9 }%
+ {%
+ \setboolean{COOL@isint}{false}%
+ }%
+ % Else
+ {%
+ \setboolean{COOL@digitfound}{true}%
+ \COOL@intgobbler#2\COOL@strEnd%
+ }%
+ }%
+\else
+ \setboolean{COOL@isint}{false}%
+\fi
+}
+% \end{macrocode}
+%
+% \begin{macro}{\isint}
+% |\isint|\marg{string} doesn't actually return anything, but sets the boolean |COOL@isint| to true or false
+% depending on whether or not \meta{string} contains an integer
+%
+% \begin{macrocode}
+\newcommand{\isint}[1]{\COOL@intgobbler#1\COOL@strStop\COOL@strEnd}
+% \end{macrocode}
+%
+% \end{macro}
+%
+%
+%
+%
+% \Finale
+\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/coolstr/coolstr.ins b/Master/texmf-dist/source/latex/coolstr/coolstr.ins
new file mode 100644
index 00000000000..11e7781626e
--- /dev/null
+++ b/Master/texmf-dist/source/latex/coolstr/coolstr.ins
@@ -0,0 +1,40 @@
+%%
+%% Copyright (C) 2005 by nsetzer
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the Limited General Product License
+%%
+
+\input docstrip.tex
+
+\keepsilent
+
+\usedir{tex/latex/coolstr}
+
+\preamble
+
+This is a generated file
+
+This file may be distributed and/or modified under the
+conditions of the Limited General Product License
+
+\endpreamble
+
+
+\generate{\file{coolstr.sty}{\from{coolstr.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* coolstr.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* coolstr.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/coolstr/coolstr.sty b/Master/texmf-dist/tex/latex/coolstr/coolstr.sty
new file mode 100644
index 00000000000..c74aff34b76
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/coolstr/coolstr.sty
@@ -0,0 +1,169 @@
+%%
+%% This is file `coolstr.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% coolstr.dtx (with options: `package')
+%%
+%% This is a generated file
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the Limited General Product License
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{coolstr}
+ [2006/09/17 v1.0 COntent Oriented LaTeX Strings]
+\RequirePackage{ifthen}
+\RequirePackage{amsmath}
+\RequirePackage{amssymb}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\newcounter{COOL@strlen}%
+\newcommand{\COOL@strEnd}{\%\%\%}
+\newcommand{\COOL@intEnd}{\%@\%@\%@}
+\newcommand{\setstrEnd}[1]{\renewcommand{\COOL@strEnd}{#1}}
+\newcounter{COOL@strpointer}
+\def\COOL@strgobble[#1]#2#3{%
+\ifthenelse{\equal{#3}{\COOL@strEnd}}
+{%
+\ifthenelse{\value{COOL@strpointer}=#1}
+{%
+#2
+}%
+{%
+}%
+}%
+{%
+\ifthenelse{\value{COOL@strpointer}=#1}
+{%
+#2
+}%
+{%
+}%
+\stepcounter{COOL@strpointer}%
+\COOL@strgobble[#1]#3
+}%
+}
+\newcommand{\strchar}[2]{%
+\setcounter{COOL@strpointer}{1}%
+\COOL@strgobble[#2]#1\COOL@strEnd%
+}
+\newboolean{COOL@firstdecimalfound}
+\newboolean{COOL@seconddecimalfound}
+\newboolean{COOL@efound}
+\newboolean{COOL@digitfound}
+
+\def\COOL@numericgobbler#1#2{%
+\ifthenelse{\equal{#2}{\COOL@strEnd}}%
+{%
+\ifthenelse{`#1 < `0 \OR `#1 > `9}%
+{%
+Not Numeric%
+}%
+{%
+Is Numeric%
+}%
+}%
+{%
+\ifthenelse{ `#1 < `0 \OR `#1 > `9 }%
+{%
+\ifthenelse{ `#1 = `. }%
+{%
+\ifthenelse{ \boolean{COOL@seconddecimalfound} }%
+{%
+Not numeric%
+}%
+{%
+\ifthenelse{ \boolean{COOL@firstdecimalfound} }%
+{%
+\ifthenelse{ \boolean{COOL@efound} }%
+{%
+\setboolean{COOL@seconddecimalfound}{true}%
+\COOL@numericgobbler#2%
+}%
+{%
+Not numeric%
+}%
+}%
+{%
+\setboolean{COOL@firstdecimalfound}{true}%
+\COOL@numericgobbler#2%
+}%
+}%
+}%
+{%
+\ifthenelse{ \(`#1 = `E\) \OR \(`#1 = `e\) }%
+{%
+\ifthenelse{ \boolean{COOL@efound} \OR \NOT \boolean{COOL@digitfound} }%
+{%
+Not numeric%
+}%
+{%
+\setboolean{COOL@efound}{true}%
+\COOL@numericgobbler#2%
+}%
+}%
+{%
+Not Numeric
+}%
+}%
+}%
+{%
+\setboolean{COOL@digitfound}{true}%
+\COOL@numericgobbler#2%
+}%
+}%
+}
+\newcommand{\isnumeric}[1]{%
+\setboolean{COOL@firstdecimalfound}{false}%
+\setboolean{COOL@seconddecimalfound}{false}%
+\setboolean{COOL@efound}{false}%
+\setboolean{COOL@digitfound}{false}%
+\COOL@numericgobbler#1\COOL@strEnd%
+}
+\let\COOL@strStop=\relax
+\newboolean{COOL@isint}
+\def\COOL@intgobbler#1#2\COOL@strEnd{%
+\ifcat#11
+\ifthenelse{\equal{#2}{\COOL@strStop}}%
+{%
+\ifthenelse{`#1 < `0 \OR `#1 > `9}%
+{%
+\setboolean{COOL@isint}{false}%
+}%
+{%
+\setboolean{COOL@isint}{true}%
+}%
+}%
+{%
+\ifthenelse{ `#1 < `0 \OR `#1 > `9 }%
+{%
+\setboolean{COOL@isint}{false}%
+}%
+{%
+\setboolean{COOL@digitfound}{true}%
+\COOL@intgobbler#2\COOL@strEnd%
+}%
+}%
+\else
+\setboolean{COOL@isint}{false}%
+\fi
+}
+\newcommand{\isint}[1]{\COOL@intgobbler#1\COOL@strStop\COOL@strEnd}
+\endinput
+%%
+%% End of file `coolstr.sty'.
diff --git a/Master/texmf-dist/tpm/coolstr.tpm b/Master/texmf-dist/tpm/coolstr.tpm
new file mode 100644
index 00000000000..d31786ff48d
--- /dev/null
+++ b/Master/texmf-dist/tpm/coolstr.tpm
@@ -0,0 +1,29 @@
+<!DOCTYPE rdf:RDF SYSTEM "../../support/tpm.dtd">
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:TPM="http://texlive.dante.de/">
+ <rdf:Description about="http://texlive.dante.de/texlive/Package/coolstr.zip">
+ <TPM:Name>coolstr</TPM:Name>
+ <TPM:Type>Package</TPM:Type>
+ <TPM:Date>2006/09/17 20:42:00</TPM:Date>
+ <TPM:Version></TPM:Version>
+ <TPM:Creator>karl</TPM:Creator>
+ <TPM:Title>The coolstr package.</TPM:Title>
+ <TPM:Description></TPM:Description>
+ <TPM:Author></TPM:Author>
+ <TPM:Size>109539</TPM:Size>
+ <TPM:Build/>
+ <TPM:RunFiles size="4711">
+texmf-dist/tex/latex/coolstr/coolstr.sty
+texmf-dist/tpm/coolstr.tpm
+ </TPM:RunFiles>
+ <TPM:DocFiles size="94222">
+texmf-dist/doc/latex/coolstr/README
+texmf-dist/doc/latex/coolstr/coolstr.pdf
+ </TPM:DocFiles>
+ <TPM:SourceFiles size="11625">
+texmf-dist/source/latex/coolstr/coolstr.dtx
+texmf-dist/source/latex/coolstr/coolstr.ins
+ </TPM:SourceFiles>
+ <TPM:Provides>Package/coolstr</TPM:Provides>
+ </rdf:Description>
+</rdf:RDF>
+
diff --git a/Master/texmf/lists/coolstr b/Master/texmf/lists/coolstr
new file mode 100644
index 00000000000..a90015002f1
--- /dev/null
+++ b/Master/texmf/lists/coolstr
@@ -0,0 +1,8 @@
+texmf-dist/doc/latex/coolstr/README
+texmf-dist/doc/latex/coolstr/coolstr.pdf
+texmf-dist/source/latex/coolstr/coolstr.dtx
+texmf-dist/source/latex/coolstr/coolstr.ins
+texmf-dist/tex/latex/coolstr/coolstr.sty
+texmf-dist/tpm/coolstr.tpm
+
+texmf/lists/coolstr
diff --git a/Master/texmf/tpm/collection-latexextra.tpm b/Master/texmf/tpm/collection-latexextra.tpm
index 390585b5c99..90f1eb56de4 100644
--- a/Master/texmf/tpm/collection-latexextra.tpm
+++ b/Master/texmf/tpm/collection-latexextra.tpm
@@ -77,6 +77,7 @@ A large collection of add-on packages for LaTeX.
<TPM:Package name="contour"/>
<TPM:Package name="cooking"/>
<TPM:Package name="coollist"/>
+ <TPM:Package name="coolstr"/>
<TPM:Package name="cooltooltips"/>
<TPM:Package name="coordsys"/>
<TPM:Package name="count1to"/>