aboutsummaryrefslogtreecommitdiff
path: root/src/hyper/pages/STRING.pht
diff options
context:
space:
mode:
Diffstat (limited to 'src/hyper/pages/STRING.pht')
-rw-r--r--src/hyper/pages/STRING.pht559
1 files changed, 559 insertions, 0 deletions
diff --git a/src/hyper/pages/STRING.pht b/src/hyper/pages/STRING.pht
new file mode 100644
index 00000000..db078225
--- /dev/null
+++ b/src/hyper/pages/STRING.pht
@@ -0,0 +1,559 @@
+\begin{patch}{StringXmpPagePatch1}
+\begin{paste}{StringXmpPageFull1}{StringXmpPageEmpty1}
+\pastebutton{StringXmpPageFull1}{\hidepaste}
+\tab{5}\spadcommand{hello := "Hello, I'm AXIOM!"\bound{hello }}
+\indentrel{3}\begin{verbatim}
+ (1) "Hello, I'm AXIOM!"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty1}
+\begin{paste}{StringXmpPageEmpty1}{StringXmpPagePatch1}
+\pastebutton{StringXmpPageEmpty1}{\showpaste}
+\tab{5}\spadcommand{hello := "Hello, I'm AXIOM!"\bound{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch2}
+\begin{paste}{StringXmpPageFull2}{StringXmpPageEmpty2}
+\pastebutton{StringXmpPageFull2}{\hidepaste}
+\tab{5}\spadcommand{said := "Jane said, _"Look!_""\bound{said }}
+\indentrel{3}\begin{verbatim}
+ (2) "Jane said, "Look!""
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty2}
+\begin{paste}{StringXmpPageEmpty2}{StringXmpPagePatch2}
+\pastebutton{StringXmpPageEmpty2}{\showpaste}
+\tab{5}\spadcommand{said := "Jane said, _"Look!_""\bound{said }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch3}
+\begin{paste}{StringXmpPageFull3}{StringXmpPageEmpty3}
+\pastebutton{StringXmpPageFull3}{\hidepaste}
+\tab{5}\spadcommand{saw := "She saw exactly one underscore: __."\bound{saw }}
+\indentrel{3}\begin{verbatim}
+ (3) "She saw exactly one underscore: _."
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty3}
+\begin{paste}{StringXmpPageEmpty3}{StringXmpPagePatch3}
+\pastebutton{StringXmpPageEmpty3}{\showpaste}
+\tab{5}\spadcommand{saw := "She saw exactly one underscore: __."\bound{saw }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch4}
+\begin{paste}{StringXmpPageFull4}{StringXmpPageEmpty4}
+\pastebutton{StringXmpPageFull4}{\hidepaste}
+\tab{5}\spadcommand{gasp: String := new(32, char "x")\bound{gasp }}
+\indentrel{3}\begin{verbatim}
+ (4) "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty4}
+\begin{paste}{StringXmpPageEmpty4}{StringXmpPagePatch4}
+\pastebutton{StringXmpPageEmpty4}{\showpaste}
+\tab{5}\spadcommand{gasp: String := new(32, char "x")\bound{gasp }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch5}
+\begin{paste}{StringXmpPageFull5}{StringXmpPageEmpty5}
+\pastebutton{StringXmpPageFull5}{\hidepaste}
+\tab{5}\spadcommand{\#gasp\free{gasp }}
+\indentrel{3}\begin{verbatim}
+ (5) 32
+ Type: PositiveInteger
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty5}
+\begin{paste}{StringXmpPageEmpty5}{StringXmpPagePatch5}
+\pastebutton{StringXmpPageEmpty5}{\showpaste}
+\tab{5}\spadcommand{\#gasp\free{gasp }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch6}
+\begin{paste}{StringXmpPageFull6}{StringXmpPageEmpty6}
+\pastebutton{StringXmpPageFull6}{\hidepaste}
+\tab{5}\spadcommand{hello.2\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (6) e
+ Type: Character
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty6}
+\begin{paste}{StringXmpPageEmpty6}{StringXmpPagePatch6}
+\pastebutton{StringXmpPageEmpty6}{\showpaste}
+\tab{5}\spadcommand{hello.2\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch7}
+\begin{paste}{StringXmpPageFull7}{StringXmpPageEmpty7}
+\pastebutton{StringXmpPageFull7}{\hidepaste}
+\tab{5}\spadcommand{hello 2\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (7) e
+ Type: Character
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty7}
+\begin{paste}{StringXmpPageEmpty7}{StringXmpPagePatch7}
+\pastebutton{StringXmpPageEmpty7}{\showpaste}
+\tab{5}\spadcommand{hello 2\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch8}
+\begin{paste}{StringXmpPageFull8}{StringXmpPageEmpty8}
+\pastebutton{StringXmpPageFull8}{\hidepaste}
+\tab{5}\spadcommand{hello(2)\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (8) e
+ Type: Character
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty8}
+\begin{paste}{StringXmpPageEmpty8}{StringXmpPagePatch8}
+\pastebutton{StringXmpPageEmpty8}{\showpaste}
+\tab{5}\spadcommand{hello(2)\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch9}
+\begin{paste}{StringXmpPageFull9}{StringXmpPageEmpty9}
+\pastebutton{StringXmpPageFull9}{\hidepaste}
+\tab{5}\spadcommand{hullo := copy hello\free{hello }\bound{hullo0 }}
+\indentrel{3}\begin{verbatim}
+ (9) "Hello, I'm AXIOM!"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty9}
+\begin{paste}{StringXmpPageEmpty9}{StringXmpPagePatch9}
+\pastebutton{StringXmpPageEmpty9}{\showpaste}
+\tab{5}\spadcommand{hullo := copy hello\free{hello }\bound{hullo0 }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch10}
+\begin{paste}{StringXmpPageFull10}{StringXmpPageEmpty10}
+\pastebutton{StringXmpPageFull10}{\hidepaste}
+\tab{5}\spadcommand{hullo.2 := char "u"; [hello, hullo]\free{hullo0 hello }\bound{hullo }}
+\indentrel{3}\begin{verbatim}
+ (10) ["Hello, I'm AXIOM!","Hullo, I'm AXIOM!"]
+ Type: List String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty10}
+\begin{paste}{StringXmpPageEmpty10}{StringXmpPagePatch10}
+\pastebutton{StringXmpPageEmpty10}{\showpaste}
+\tab{5}\spadcommand{hullo.2 := char "u"; [hello, hullo]\free{hullo0 hello }\bound{hullo }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch11}
+\begin{paste}{StringXmpPageFull11}{StringXmpPageEmpty11}
+\pastebutton{StringXmpPageFull11}{\hidepaste}
+\tab{5}\spadcommand{saidsaw := concat ["alpha","---","omega"]\bound{saidsaw }}
+\indentrel{3}\begin{verbatim}
+ (11) "alpha---omega"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty11}
+\begin{paste}{StringXmpPageEmpty11}{StringXmpPagePatch11}
+\pastebutton{StringXmpPageEmpty11}{\showpaste}
+\tab{5}\spadcommand{saidsaw := concat ["alpha","---","omega"]\bound{saidsaw }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch12}
+\begin{paste}{StringXmpPageFull12}{StringXmpPageEmpty12}
+\pastebutton{StringXmpPageFull12}{\hidepaste}
+\tab{5}\spadcommand{concat("hello ","goodbye")}
+\indentrel{3}\begin{verbatim}
+ (12) "hello goodbye"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty12}
+\begin{paste}{StringXmpPageEmpty12}{StringXmpPagePatch12}
+\pastebutton{StringXmpPageEmpty12}{\showpaste}
+\tab{5}\spadcommand{concat("hello ","goodbye")}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch13}
+\begin{paste}{StringXmpPageFull13}{StringXmpPageEmpty13}
+\pastebutton{StringXmpPageFull13}{\hidepaste}
+\tab{5}\spadcommand{"This " "is " "several " "strings " "concatenated."}
+\indentrel{3}\begin{verbatim}
+ (13) "This is several strings concatenated."
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty13}
+\begin{paste}{StringXmpPageEmpty13}{StringXmpPagePatch13}
+\pastebutton{StringXmpPageEmpty13}{\showpaste}
+\tab{5}\spadcommand{"This " "is " "several " "strings " "concatenated."}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch14}
+\begin{paste}{StringXmpPageFull14}{StringXmpPageEmpty14}
+\pastebutton{StringXmpPageFull14}{\hidepaste}
+\tab{5}\spadcommand{hello(1..5)\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (14) "Hello"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty14}
+\begin{paste}{StringXmpPageEmpty14}{StringXmpPagePatch14}
+\pastebutton{StringXmpPageEmpty14}{\showpaste}
+\tab{5}\spadcommand{hello(1..5)\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch15}
+\begin{paste}{StringXmpPageFull15}{StringXmpPageEmpty15}
+\pastebutton{StringXmpPageFull15}{\hidepaste}
+\tab{5}\spadcommand{hello(8..)\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (15) "I'm AXIOM!"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty15}
+\begin{paste}{StringXmpPageEmpty15}{StringXmpPagePatch15}
+\pastebutton{StringXmpPageEmpty15}{\showpaste}
+\tab{5}\spadcommand{hello(8..)\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch16}
+\begin{paste}{StringXmpPageFull16}{StringXmpPageEmpty16}
+\pastebutton{StringXmpPageFull16}{\hidepaste}
+\tab{5}\spadcommand{split(hello, char " ")\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (16) ["Hello,","I'm","AXIOM!"]
+ Type: List String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty16}
+\begin{paste}{StringXmpPageEmpty16}{StringXmpPagePatch16}
+\pastebutton{StringXmpPageEmpty16}{\showpaste}
+\tab{5}\spadcommand{split(hello, char " ")\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch17}
+\begin{paste}{StringXmpPageFull17}{StringXmpPageEmpty17}
+\pastebutton{StringXmpPageFull17}{\hidepaste}
+\tab{5}\spadcommand{other := complement alphanumeric();\bound{other }}
+\indentrel{3}\begin{verbatim}
+ Type: CharacterClass
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty17}
+\begin{paste}{StringXmpPageEmpty17}{StringXmpPagePatch17}
+\pastebutton{StringXmpPageEmpty17}{\showpaste}
+\tab{5}\spadcommand{other := complement alphanumeric();\bound{other }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch18}
+\begin{paste}{StringXmpPageFull18}{StringXmpPageEmpty18}
+\pastebutton{StringXmpPageFull18}{\hidepaste}
+\tab{5}\spadcommand{split(saidsaw, other)\free{saidsaw other }}
+\indentrel{3}\begin{verbatim}
+ (18) ["alpha","omega"]
+ Type: List String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty18}
+\begin{paste}{StringXmpPageEmpty18}{StringXmpPagePatch18}
+\pastebutton{StringXmpPageEmpty18}{\showpaste}
+\tab{5}\spadcommand{split(saidsaw, other)\free{saidsaw other }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch19}
+\begin{paste}{StringXmpPageFull19}{StringXmpPageEmpty19}
+\pastebutton{StringXmpPageFull19}{\hidepaste}
+\tab{5}\spadcommand{trim ("\#\# ++ relax ++ \#\#", char "\#")}
+\indentrel{3}\begin{verbatim}
+ (19) " ++ relax ++ "
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty19}
+\begin{paste}{StringXmpPageEmpty19}{StringXmpPagePatch19}
+\pastebutton{StringXmpPageEmpty19}{\showpaste}
+\tab{5}\spadcommand{trim ("\#\# ++ relax ++ \#\#", char "\#")}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch20}
+\begin{paste}{StringXmpPageFull20}{StringXmpPageEmpty20}
+\pastebutton{StringXmpPageFull20}{\hidepaste}
+\tab{5}\spadcommand{trim ("\#\# ++ relax ++ \#\#", other)\free{other }}
+\indentrel{3}\begin{verbatim}
+ (20) "relax"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty20}
+\begin{paste}{StringXmpPageEmpty20}{StringXmpPagePatch20}
+\pastebutton{StringXmpPageEmpty20}{\showpaste}
+\tab{5}\spadcommand{trim ("\#\# ++ relax ++ \#\#", other)\free{other }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch21}
+\begin{paste}{StringXmpPageFull21}{StringXmpPageEmpty21}
+\pastebutton{StringXmpPageFull21}{\hidepaste}
+\tab{5}\spadcommand{leftTrim ("\#\# ++ relax ++ \#\#", other)\free{other }}
+\indentrel{3}\begin{verbatim}
+ (21) "relax ++ ##"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty21}
+\begin{paste}{StringXmpPageEmpty21}{StringXmpPagePatch21}
+\pastebutton{StringXmpPageEmpty21}{\showpaste}
+\tab{5}\spadcommand{leftTrim ("\#\# ++ relax ++ \#\#", other)\free{other }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch22}
+\begin{paste}{StringXmpPageFull22}{StringXmpPageEmpty22}
+\pastebutton{StringXmpPageFull22}{\hidepaste}
+\tab{5}\spadcommand{rightTrim("\#\# ++ relax ++ \#\#", other)\free{other }}
+\indentrel{3}\begin{verbatim}
+ (22) "## ++ relax"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty22}
+\begin{paste}{StringXmpPageEmpty22}{StringXmpPagePatch22}
+\pastebutton{StringXmpPageEmpty22}{\showpaste}
+\tab{5}\spadcommand{rightTrim("\#\# ++ relax ++ \#\#", other)\free{other }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch23}
+\begin{paste}{StringXmpPageFull23}{StringXmpPageEmpty23}
+\pastebutton{StringXmpPageFull23}{\hidepaste}
+\tab{5}\spadcommand{upperCase hello\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (23) "HELLO, I'M AXIOM!"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty23}
+\begin{paste}{StringXmpPageEmpty23}{StringXmpPagePatch23}
+\pastebutton{StringXmpPageEmpty23}{\showpaste}
+\tab{5}\spadcommand{upperCase hello\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch24}
+\begin{paste}{StringXmpPageFull24}{StringXmpPageEmpty24}
+\pastebutton{StringXmpPageFull24}{\hidepaste}
+\tab{5}\spadcommand{lowerCase hello\free{hello }}
+\indentrel{3}\begin{verbatim}
+ (24) "hello, i'm axiom!"
+ Type: String
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty24}
+\begin{paste}{StringXmpPageEmpty24}{StringXmpPagePatch24}
+\pastebutton{StringXmpPageEmpty24}{\showpaste}
+\tab{5}\spadcommand{lowerCase hello\free{hello }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch25}
+\begin{paste}{StringXmpPageFull25}{StringXmpPageEmpty25}
+\pastebutton{StringXmpPageFull25}{\hidepaste}
+\tab{5}\spadcommand{prefix?("He", "Hello")}
+\indentrel{3}\begin{verbatim}
+ (25) true
+ Type: Boolean
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty25}
+\begin{paste}{StringXmpPageEmpty25}{StringXmpPagePatch25}
+\pastebutton{StringXmpPageEmpty25}{\showpaste}
+\tab{5}\spadcommand{prefix?("He", "Hello")}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch26}
+\begin{paste}{StringXmpPageFull26}{StringXmpPageEmpty26}
+\pastebutton{StringXmpPageFull26}{\hidepaste}
+\tab{5}\spadcommand{prefix?("Her", "Hello")}
+\indentrel{3}\begin{verbatim}
+ (26) false
+ Type: Boolean
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty26}
+\begin{paste}{StringXmpPageEmpty26}{StringXmpPagePatch26}
+\pastebutton{StringXmpPageEmpty26}{\showpaste}
+\tab{5}\spadcommand{prefix?("Her", "Hello")}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch27}
+\begin{paste}{StringXmpPageFull27}{StringXmpPageEmpty27}
+\pastebutton{StringXmpPageFull27}{\hidepaste}
+\tab{5}\spadcommand{suffix?("", "Hello")}
+\indentrel{3}\begin{verbatim}
+ (27) true
+ Type: Boolean
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty27}
+\begin{paste}{StringXmpPageEmpty27}{StringXmpPagePatch27}
+\pastebutton{StringXmpPageEmpty27}{\showpaste}
+\tab{5}\spadcommand{suffix?("", "Hello")}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch28}
+\begin{paste}{StringXmpPageFull28}{StringXmpPageEmpty28}
+\pastebutton{StringXmpPageFull28}{\hidepaste}
+\tab{5}\spadcommand{suffix?("LO", "Hello")}
+\indentrel{3}\begin{verbatim}
+ (28) false
+ Type: Boolean
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty28}
+\begin{paste}{StringXmpPageEmpty28}{StringXmpPagePatch28}
+\pastebutton{StringXmpPageEmpty28}{\showpaste}
+\tab{5}\spadcommand{suffix?("LO", "Hello")}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch29}
+\begin{paste}{StringXmpPageFull29}{StringXmpPageEmpty29}
+\pastebutton{StringXmpPageFull29}{\hidepaste}
+\tab{5}\spadcommand{substring?("ll", "Hello", 3)}
+\indentrel{3}\begin{verbatim}
+ (29) true
+ Type: Boolean
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty29}
+\begin{paste}{StringXmpPageEmpty29}{StringXmpPagePatch29}
+\pastebutton{StringXmpPageEmpty29}{\showpaste}
+\tab{5}\spadcommand{substring?("ll", "Hello", 3)}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch30}
+\begin{paste}{StringXmpPageFull30}{StringXmpPageEmpty30}
+\pastebutton{StringXmpPageFull30}{\hidepaste}
+\tab{5}\spadcommand{substring?("ll", "Hello", 4)}
+\indentrel{3}\begin{verbatim}
+ (30) false
+ Type: Boolean
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty30}
+\begin{paste}{StringXmpPageEmpty30}{StringXmpPagePatch30}
+\pastebutton{StringXmpPageEmpty30}{\showpaste}
+\tab{5}\spadcommand{substring?("ll", "Hello", 4)}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch31}
+\begin{paste}{StringXmpPageFull31}{StringXmpPageEmpty31}
+\pastebutton{StringXmpPageFull31}{\hidepaste}
+\tab{5}\spadcommand{n := position("nd", "underground", 1)\bound{n }}
+\indentrel{3}\begin{verbatim}
+ (31) 2
+ Type: PositiveInteger
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty31}
+\begin{paste}{StringXmpPageEmpty31}{StringXmpPagePatch31}
+\pastebutton{StringXmpPageEmpty31}{\showpaste}
+\tab{5}\spadcommand{n := position("nd", "underground", 1)\bound{n }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch32}
+\begin{paste}{StringXmpPageFull32}{StringXmpPageEmpty32}
+\pastebutton{StringXmpPageFull32}{\hidepaste}
+\tab{5}\spadcommand{n := position("nd", "underground", n+1)\free{n }\bound{n1 }}
+\indentrel{3}\begin{verbatim}
+ (32) 10
+ Type: PositiveInteger
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty32}
+\begin{paste}{StringXmpPageEmpty32}{StringXmpPagePatch32}
+\pastebutton{StringXmpPageEmpty32}{\showpaste}
+\tab{5}\spadcommand{n := position("nd", "underground", n+1)\free{n }\bound{n1 }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch33}
+\begin{paste}{StringXmpPageFull33}{StringXmpPageEmpty33}
+\pastebutton{StringXmpPageFull33}{\hidepaste}
+\tab{5}\spadcommand{n := position("nd", "underground", n+1)\free{n1 }\bound{n2 }}
+\indentrel{3}\begin{verbatim}
+ (33) 0
+ Type: NonNegativeInteger
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty33}
+\begin{paste}{StringXmpPageEmpty33}{StringXmpPagePatch33}
+\pastebutton{StringXmpPageEmpty33}{\showpaste}
+\tab{5}\spadcommand{n := position("nd", "underground", n+1)\free{n1 }\bound{n2 }}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch34}
+\begin{paste}{StringXmpPageFull34}{StringXmpPageEmpty34}
+\pastebutton{StringXmpPageFull34}{\hidepaste}
+\tab{5}\spadcommand{position(char "d", "underground", 1)}
+\indentrel{3}\begin{verbatim}
+ (34) 3
+ Type: PositiveInteger
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty34}
+\begin{paste}{StringXmpPageEmpty34}{StringXmpPagePatch34}
+\pastebutton{StringXmpPageEmpty34}{\showpaste}
+\tab{5}\spadcommand{position(char "d", "underground", 1)}
+\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPagePatch35}
+\begin{paste}{StringXmpPageFull35}{StringXmpPageEmpty35}
+\pastebutton{StringXmpPageFull35}{\hidepaste}
+\tab{5}\spadcommand{position(hexDigit(), "underground", 1)}
+\indentrel{3}\begin{verbatim}
+ (35) 3
+ Type: PositiveInteger
+\end{verbatim}
+\indentrel{-3}\end{paste}\end{patch}
+
+\begin{patch}{StringXmpPageEmpty35}
+\begin{paste}{StringXmpPageEmpty35}{StringXmpPagePatch35}
+\pastebutton{StringXmpPageEmpty35}{\showpaste}
+\tab{5}\spadcommand{position(hexDigit(), "underground", 1)}
+\end{paste}\end{patch}
+