summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xetex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-11-17 01:34:23 +0000
committerKarl Berry <karl@freefriends.org>2009-11-17 01:34:23 +0000
commitcc7d43c984b1c36a0176b26f83368faa465d37c4 (patch)
treec92cc545a6e697c41cef2bf7ad47fefb7f1a383a /Master/texmf-dist/tex/xetex
parent1ad8bd42c0daa12218f5c3328beca12f02a114ac (diff)
new xetex package xesearch (4nov09)
git-svn-id: svn://tug.org/texlive/trunk@16041 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xetex')
-rw-r--r--Master/texmf-dist/tex/xetex/xesearch/t-xesearch.tex24
-rw-r--r--Master/texmf-dist/tex/xetex/xesearch/xesearch.sty1109
2 files changed, 1133 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xetex/xesearch/t-xesearch.tex b/Master/texmf-dist/tex/xetex/xesearch/t-xesearch.tex
new file mode 100644
index 00000000000..e16a4cf2ca6
--- /dev/null
+++ b/Master/texmf-dist/tex/xetex/xesearch/t-xesearch.tex
@@ -0,0 +1,24 @@
+% This is t-xesearch, produced by the CodeDoc class
+% with the `produce' option on.
+%
+% To create the documentation, compile xesearch.tex
+% without the `produce' option.
+%
+% SOURCE: xesearch.tex
+% DATE: 2009.11.04
+% VERSION: v.0.1
+%D \module
+%D [ file=t-xesearch,
+%D version=2009.11.04,
+%D title=\CONTEXT\ User Module,
+%D subtitle=XeSearch,
+%D author=Paul Isambert,
+%D date=\currentdate,
+%D copyright=Paul Isambert,
+%D email=zappathustra@free.fr,
+%D license=LaTeX Project Public License]
+
+\writestatus{loading}{ConTeXt User Module / XeSearch}
+\csname xs@contextmodule\endcsname
+\input xesearch.sty
+\endinput
diff --git a/Master/texmf-dist/tex/xetex/xesearch/xesearch.sty b/Master/texmf-dist/tex/xetex/xesearch/xesearch.sty
new file mode 100644
index 00000000000..f6d049325ac
--- /dev/null
+++ b/Master/texmf-dist/tex/xetex/xesearch/xesearch.sty
@@ -0,0 +1,1109 @@
+% This is xesearch, produced by the CodeDoc class
+% with the `produce' option on.
+%
+% To create the documentation, compile xesearch.tex
+% without the `produce' option.
+%
+% SOURCE: xesearch.tex
+% DATE: 2009/11/04
+% VERSION: v.0.1
+\ifx\csname XeTeXrevision\endcsname\relax
+ \errmessage{You need XeTeX to run xesearch. It won't be loaded.}
+ \expandafter\endinput
+\else
+ \expandafter\ifx\csname xs@ChangeCatcodes\endcsname\relax
+ \else
+ \expandafter\expandafter\expandafter\endinput
+ \fi
+\fi
+\catcode`@=11
+\def\xs@ChangeCatcodes{%
+ \chardef\xs@questioncode=\catcode`\?%
+ \chardef\xs@exclamationcode=\catcode`\!%
+ \chardef\xs@commacode=\catcode`\,%
+ \chardef\xs@starcode=\catcode`\*%
+ \chardef\xs@semicoloncode=\catcode`\;%
+ \catcode`\?12
+ \catcode`\!12
+ \catcode`\,12
+ \catcode`\*12
+ \catcode`\;12
+ }
+\def\xs@RestoreCatcodes{%
+ \catcode`\?\xs@questioncode
+ \catcode`\!\xs@exclamationcode
+ \catcode`\,\xs@commacode
+ \catcode`\*\xs@starcode
+ \catcode`\;\xs@semicoloncode
+ }
+\xs@ChangeCatcodes
+\ifdefined\ProvidesPackage
+ \def\xs@err#1{\PackageError{xesearch}{#1}{}}
+ \ProvidesPackage{xesearch}[2009/11/04 v.0.1 Searching documents.]
+\else
+ \def\MessageBreak{^^J}
+ \def\xs@err#1{%
+ \bgroup
+ \newlinechar`\^^J%
+ \errorcontextlines=0
+ \errmessage{xsearch error: #1}%
+ \egroup
+ }
+\fi
+\ifcsname xs@contextmodule\endcsname
+ \let\xs@unexpanded\normalunexpanded
+\else
+ \let\xs@unexpanded\unexpanded
+\fi
+\def\xs@end{\xs@end}
+\def\xs@empty{}
+\def\xs@star{*}
+\def\xs@exclamation{!}
+\def\xs@question{?}
+\def\xs@starexclam{*!}
+\def\xs@exclamstar{!*}
+\def\xs@words{words}
+\def\xs@prefixes{prefixes}
+\def\xs@suffixes{suffixes}
+\def\xs@gobble#1{}
+\def\xs@Lowercase#1#2{\lowercase{\def#2{#1}}}
+\let\xs@relax\relax
+\newcount\xs@TempCount
+\newcount\xs@CaseSensitive
+\newcount\xs@TempLength
+\newcount\xs@Length
+\newbox\xs@Box
+\newif\ifxs@Concatenate
+\newif\ifxs@String
+\newif\ifxs@Affix
+\newif\ifxs@Prefix
+\newif\ifxs@Suffix
+\newif\ifxs@BadWord
+\newif\ifxs@Star
+\newif\ifxs@Phrase
+\newif\ifxs@Match
+\newtoks\xs@DefToks
+\newtoks\xs@NoReplaceToks
+\chardef\xs@NatDel=255
+\chardef\xs@lrDel=254
+\chardef\xs@Classes=253
+\chardef\xs@Classless=0
+\XeTeXinterchartoks\xs@lrDel\xs@Classless={\xs@LearnLetter}
+\XeTeXinterchartoks\xs@NatDel\xs@Classless={\xs@LearnLetter}
+\XeTeXinterchartoks\xs@NatDel\xs@lrDel{\xs@EndString}
+\xs@TempCount\xs@Classes
+\def\xs@Delimiters{}
+\def\xs@MakeDel#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \let\xs@next\xs@MakeDel
+ \unless\ifnum\the\XeTeXcharclass`#1=7
+ \unless\ifnum\the\XeTeXcharclass`#1=8
+ \XeTeXcharclass`#1=\xs@lrDel
+ \expandafter\def\expandafter\xs@Delimiters\expandafter{\xs@Delimiters#1}%
+ \fi
+ \fi
+ \fi\xs@next}
+\xs@MakeDel\{\}.,;:!?[()]-'`\xs@end
+\def\MakeBoundary#1{%
+ \xs@MakeDel#1\xs@end
+ }
+\def\UndoBoundary#1{%
+ \xs@UndoBoundary#1\xs@end
+ }
+\def\xs@UndoBoundary#1{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@end
+ \let\xs@next\relax
+ \else
+ \ifnum\the\XeTeXcharclass`#1=\xs@lrDel
+ \def\xs@RemoveFromDelimiters##1#1##2\xs@end{%
+ \def\xs@Delimiters{##1##2}%
+ }%
+ \expandafter\xs@RemoveFromDelimiters\xs@Delimiters\xs@end
+ \fi
+ \XeTeXcharclass`#1=0
+ \let\xs@next\xs@UndoBoundary
+ \fi\xs@next
+ }
+\def\xs@Letters{}%
+\def\xs@CreateLetter#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \expandafter\def\expandafter\xs@Letters\expandafter{\xs@Letters#1}%
+ \XeTeXcharclass`#1=\xs@TempCount
+ \expandafter\def\csname\the\xs@TempCount @xstring@letter\endcsname{#1}%
+ \edef\xs@PolyglossiaPatch{%
+ \xs@unexpanded{\XeTeXinterchartoks\xs@TempCount7}{%
+ \xs@unexpanded{\xdef\xs@String{\xs@String#1}\xs@EndString}%
+ \the\XeTeXinterchartoks0 7}%
+ \xs@unexpanded{\XeTeXinterchartoks\xs@TempCount8}{%
+ \xs@unexpanded{\xdef\xs@String{\xs@String#1}\xs@EndString}%
+ \the\XeTeXinterchartoks0 8}%
+ \xs@unexpanded{\XeTeXinterchartoks8\xs@TempCount}{%
+ \the\XeTeXinterchartoks8 0 \xs@unexpanded{\xs@StartSring}}%
+ }%
+ \xs@PolyglossiaPatch
+ \XeTeXinterchartoks\xs@TempCount\xs@Classless{%
+ \xdef\xs@String{\xs@String#1}%
+ \xs@LearnLetter}%
+ \XeTeXinterchartoks\xs@lrDel\xs@TempCount{%
+ \xs@StopTracing
+ \xs@StartString
+ }%
+ \XeTeXinterchartoks\xs@NatDel\xs@TempCount{%
+ \xs@StopTracing
+ \xs@StartString
+ }%
+ \XeTeXinterchartoks\xs@TempCount\xs@lrDel{%
+ \xdef\xs@String{\xs@String#1}\xs@EndString}%
+ \XeTeXinterchartoks\xs@TempCount\xs@NatDel{%
+ \xdef\xs@String{\xs@String#1}%
+ \ifcsname\xs@String @xs@phrases@cs\endcsname
+ \XeTeXinterchartokenstate0
+ \xdef\xs@Stack{%
+ \xs@String\noexpand\xs@end\xs@unexpanded\expandafter{\xs@Stack}%
+ }%
+ \edef\xs@String{\xs@unexpanded\expandafter{\xs@String} }%
+ \XeTeXinterchartokenstate1
+ \else
+ \expandafter\xs@Lowercase\expandafter{\xs@String}\xs@lcString
+ \ifcsname\xs@lcString @xs@phrases@ncs\endcsname
+ \XeTeXinterchartokenstate0
+ \xdef\xs@Stack{%
+ \xs@String\noexpand\xs@end\xs@unexpanded\expandafter{\xs@Stack}%
+ }%
+ \edef\xs@String{\xs@unexpanded\expandafter{\xs@String} }%
+ \XeTeXinterchartokenstate1
+ \else
+ \expandafter\expandafter\expandafter\xs@EndString
+ \fi
+ \fi
+ }%
+ \xs@TempCount\xs@Classes
+ \xs@MakeInterCharToks#1%
+ \advance\xs@TempCount-1
+ \let\xs@next\xs@CreateLetter
+ \fi\xs@next
+ }
+\def\xs@MakeInterCharToks#1{%
+ \ifnum\xs@TempCount=\XeTeXcharclass`#1
+ \XeTeXinterchartoks\xs@TempCount\xs@TempCount{\xdef\xs@String{\xs@String#1}}%
+ \let\xs@next\relax
+ \else\let\xs@next\relax
+ \expandafter\expandafter\expandafter%
+ \xs@Xict\csname\the\xs@TempCount @xstring@letter\endcsname%
+ \xs@TempCount{\XeTeXcharclass`#1}%
+ \xs@Xict#1{\XeTeXcharclass`#1}\xs@TempCount
+ \advance\xs@TempCount-1
+ \def\xs@next{\xs@MakeInterCharToks#1}%
+ \fi\xs@next}
+\def\xs@Xict#1#2#3{%
+ \XeTeXinterchartoks#2#3{\xdef\xs@String{\xs@String#1}}%
+ }
+\def\xs@PendingLetters{}%
+\def\xs@LearnLetter#1{%
+ \xs@CreateLetter#1\xs@end
+ \ifxs@String
+ \xdef\xs@PendingLetters{\xs@PendingLetters#1}%
+ \fi
+ #1}
+\def\SearchList{%
+ \xs@ChangeCatcodes
+ \xs@StarOrExclam\xs@Search
+ }
+\def\xs@StarOrExclam#1#2#{%
+ \def\xs@temp{#2}%
+ \ifx\xs@temp\xs@star
+ \xs@CaseSensitive2
+ \xs@Concatenatefalse
+ \else
+ \ifx\xs@temp\xs@exclamation
+ \xs@CaseSensitive0
+ \xs@Concatenatetrue
+ \else
+ \ifx\xs@temp\xs@starexclam
+ \xs@CaseSensitive2
+ \xs@Concatenatetrue
+ \else
+ \ifx\xs@temp\xs@exclamstar
+ \xs@CaseSensitive2
+ \xs@Concatenatetrue
+ \else
+ \xs@CaseSensitive0
+ \xs@Concatenatefalse
+ \fi
+ \fi
+ \fi
+ \fi#1%
+ }
+\def\xs@Search#1#2#3{%
+ \ifcsname#1@xs@searchlist\endcsname
+ \xs@err{%
+ `#1' already exists.\MessageBreak
+ Use \string\AddToList{#1}{<words>} to add words to it%
+ }%
+ \else
+ \def\xs@ListName{#1}%
+ \expandafter\def\csname\xs@ListName @words\endcsname{}%
+ \expandafter\def\csname #1@xs@searchlist\endcsname##1{#2}%
+ \expandafter\def\csname #1@xs@searchlist@noreplace\endcsname##1{#2}%
+ \expandafter\xs@MakeWord#3,\xs@end,%
+ \xs@RestoreCatcodes
+ \fi
+ }
+\def\AddToList{%
+ \xs@ChangeCatcodes
+ \xs@StarOrExclam\xs@AddToList
+ }
+\def\xs@AddToList#1#2{%
+ \ifcsname#1@xs@searchlist\endcsname
+ \def\xs@ListName{#1}%
+ \expandafter\xs@MakeWord#2,\xs@end,%
+ \xs@RestoreCatcodes
+ \else
+ \xs@err{`#1' is not a list}%
+ \fi
+ \xs@RestoreCatcodes
+ }
+\def\xs@MakeWord#1,{%
+ \def\xs@TempWord{#1}%
+ \ifx\xs@TempWord\xs@end
+ \let\xs@next\relax
+ \else
+ \ifcsname\ifnum\xs@CaseSensitive=2*\fi#1@\xs@ListName\endcsname
+ \xs@err{You have already specified `\ifnum\xs@CaseSensitive=2*\fi#1'%
+ in `\xs@ListName'. \MessageBreak You can't do it twice}%
+ \else
+ \csname#1@\xs@ListName\endcsname
+ \edef\xs@TempWord{#1}%
+ \chardef\xs@ParseState=0
+ \xs@BadWordfalse
+ \xs@Starfalse
+ \xs@Prefixfalse
+ \xs@Suffixfalse
+ \xs@ParseWord#1\xs@end
+ \unless\ifxs@BadWord
+ \ifxs@Star
+ \xs@CaseSensitive1
+ \expandafter\xs@SuppressPrefix\xs@TempWord\xs@end
+ \fi
+ \ifxs@Prefix
+ \expandafter\xs@SuppressSuffix\xs@TempWord
+ \else
+ \ifxs@Suffix
+ \expandafter\xs@SuppressPrefix\xs@TempWord\xs@end
+ \fi
+ \fi
+ \def\xs@Phrase{}%
+ \ifcase\xs@CaseSensitive
+ \expandafter\xs@Lowercase\expandafter{\xs@TempWord}\xs@TempWord
+ \def\xs@cs{ncs}%
+ \expandafter\xs@CheckSpaces\xs@TempWord\xs@end
+ \or
+ \def\xs@cs{cs}%
+ \expandafter\xs@CheckSpaces\xs@TempWord\xs@end
+ \xs@CaseSensitive0
+ \or
+ \def\xs@cs{cs}%
+ \expandafter\xs@CheckSpaces\xs@TempWord\xs@end
+ \fi
+ \ifxs@Prefix
+ \xs@MakePrefix
+ \def\xs@WordType{prefixes}%
+ \expandafter\xs@PatchDef\csname\xs@ListName @xs@searchlist\endcsname
+ \else
+ \ifxs@Suffix
+ \xs@MakeSuffix
+ \def\xs@WordType{suffixes}%
+ \expandafter\xs@PatchDef\csname\xs@ListName @xs@searchlist\endcsname
+ \else
+ \def\xs@WordType{words}%
+ \expandafter\xs@PatchDef\csname\xs@ListName @xs@searchlist\endcsname
+ \fi
+ \fi
+ \fi
+ \fi
+ \let\xs@next\xs@MakeWord
+ \fi\xs@next
+ }
+\def\xs@ParseWord#1{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@end
+ \let\xs@next\relax
+ \ifxs@Suffix
+ \ifnum\xs@ParseState=3
+ \xs@err{You can't have a prefix and a suffix in the same word.\MessageBreak
+ `\xs@unexpanded\expandafter{\xs@TempWord}' won't be searched}%
+ \xs@BadWordtrue
+ \fi
+ \fi
+ \else
+ \let\xs@next\xs@ParseWord
+ \expandafter\ifcat\noexpand#1\relax
+ \xs@BadChar#1{control sequences are forbidden}%
+ \else
+ \ifcase\xs@ParseState
+ \chardef\xs@TempNum=\XeTeXcharclass`#1 %
+ \ifx\xs@temp\xs@star
+ \xs@Startrue
+ \chardef\xs@ParseState=1
+ \let\xs@next\xs@ParseWord
+ \else
+ \ifx\xs@temp\xs@question
+ \xs@Suffixtrue
+ \chardef\xs@ParseState=2
+ \let\xs@next\xs@ParseWord
+ \else
+ \ifnum\xs@TempNum>\xs@Classes
+ \xs@BadChar#1{it's already a string delimiter}%
+ \else
+ \chardef\xs@ParseState=2
+ \ifnum\xs@TempNum=0
+ \xs@CreateLetter#1\xs@end
+ \let\xs@next\xs@ParseWord
+ \fi
+ \fi
+ \fi
+ \fi
+%
+ \or
+ \chardef\xs@ParseState=2
+ \chardef\xs@TempNum=\XeTeXcharclass`#1 %
+ \let\xs@next\xs@ParseWord
+ \ifx\xs@temp\xs@question
+ \xs@Suffixtrue
+ \else
+ \ifnum\xs@TempNum>\xs@Classes
+ \xs@BadChar#1{it's already a string delimiter}%
+ \else
+ \ifnum\xs@TempNum=0
+ \xs@CreateLetter#1\xs@end
+ \let\xs@next\xs@ParseWord
+ \fi
+ \fi
+ \fi
+%
+ \or
+ \let\xs@next\xs@ParseWord
+ \chardef\xs@TempNum=\XeTeXcharclass`#1 %
+ \ifx\xs@temp\xs@question
+ \xs@Prefixtrue
+ \chardef\xs@ParseState=3
+ \else
+ \ifnum\xs@TempNum>\xs@Classes
+ \xs@BadChar#1{it's already a string delimiter}%
+ \else
+ \let\xs@next\xs@ParseWord
+ \fi
+ \fi
+ \or
+ \xs@BadChar?{it's already a string delimiter}%
+ \fi
+ \fi
+ \fi\xs@next
+ }
+\def\xs@BadChar#1#2{%
+ \def\xs@next##1\xs@end{}%
+ \xs@BadWordtrue
+ \xs@err{%
+ You can't use `\noexpand#1' in `\xs@unexpanded\expandafter{\xs@TempWord}',\MessageBreak
+ #2.\MessageBreak
+ `\xs@unexpanded\expandafter{\xs@TempWord}' won't be searched
+ }%
+ }
+\def\xs@CheckSpaces#1\xs@end{%
+ \xs@@CheckSpaces#1 \xs@end
+ }
+\def\xs@@CheckSpaces#1 #2\xs@end{%
+ \def\xs@temp{#2}%
+ \ifx\xs@temp\xs@empty
+ \let\xs@next\relax
+ \else
+ \expandafter\xs@MakePhrase\xs@Phrase\xs@end#1\xs@end
+ \def\xs@next{\xs@@CheckSpaces#2\xs@end}%
+ \fi\xs@next
+ }
+\def\xs@MakePhrase#1\xs@end#2\xs@end{%
+ \ifx\xs@Phrase\xs@empty
+ \expandafter\def\csname#2@xs@phrases@\xs@cs\endcsname{}%
+ \edef\xs@Phrase{#2}%
+ \else
+ \expandafter\def\csname#1 #2@xs@phrases@\xs@cs\endcsname{}%
+ \edef\xs@Phrase{#1 #2}%
+ \fi
+ }%
+\def\xs@GetFirstLetter#1#2\xs@end{%
+ \def\xs@FirstLetter{#1}%
+ }
+\def\xs@MakePrefix{%
+ \expandafter\ifx\csname\xs@TempWord @\xs@cs @xs@prefixes\endcsname\relax
+ \expandafter\xs@GetFirstLetter\xs@TempWord\xs@end
+ \ifcsname xs@prefixes@\xs@FirstLetter @\xs@cs\endcsname
+ \expandafter\edef\csname xs@prefixes@\xs@FirstLetter @\xs@cs\endcsname{%
+ \csname xs@prefixes@\xs@FirstLetter @\xs@cs\endcsname\xs@TempWord,}%
+ \def\xs@Sign{<}%
+ \xs@Insert{\xs@TempWord}{\csname xs@prefixes@\xs@FirstLetter @\xs@cs @longer\endcsname}%
+ \def\xs@Sign{>}%
+ \xs@Insert{\xs@TempWord}{\csname xs@prefixes@\xs@FirstLetter @\xs@cs @shorter\endcsname}%
+ \else
+ \expandafter\edef\csname xs@prefixes@\xs@FirstLetter @\xs@cs\endcsname{\xs@TempWord,}%
+ \expandafter\edef\csname xs@prefixes@\xs@FirstLetter @\xs@cs @longer\endcsname{\xs@TempWord,}%
+ \expandafter\edef\csname xs@prefixes@\xs@FirstLetter @\xs@cs @shorter\endcsname{\xs@TempWord,}%
+ \fi
+ \fi
+ }
+\def\xs@GetLastLetter#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \let\xs@next\xs@GetLastLetter
+ \def\xs@LastLetter{#1}%
+ \fi\xs@next
+ }
+\def\xs@MakeSuffix{%
+ \expandafter\ifx\csname\xs@TempWord @\xs@cs @xs@suffixes\endcsname\relax
+ \expandafter\xs@GetLastLetter\xs@TempWord\xs@end
+ \ifcsname xs@suffixes@\xs@LastLetter @\xs@cs\endcsname
+ \expandafter\edef\csname xs@suffixes@\xs@LastLetter @\xs@cs\endcsname{%
+ \csname xs@suffixes@\xs@LastLetter @\xs@cs\endcsname\xs@TempWord,}%
+ \def\xs@Sign{<}%
+ \xs@Insert{\xs@TempWord}{\csname xs@suffixes@\xs@LastLetter @\xs@cs @longer\endcsname}%
+ \def\xs@Sign{>}%
+ \xs@Insert{\xs@TempWord}{\csname xs@suffixes@\xs@LastLetter @\xs@cs @shorter\endcsname}%
+ \else
+ \expandafter\edef\csname xs@suffixes@\xs@LastLetter @\xs@cs\endcsname{\xs@TempWord,}%
+ \expandafter\edef\csname xs@suffixes@\xs@LastLetter @\xs@cs @longer\endcsname{\xs@TempWord,}%
+ \expandafter\edef\csname xs@suffixes@\xs@LastLetter @\xs@cs @shorter\endcsname{\xs@TempWord,}%
+ \fi
+ \fi
+ }
+\def\xs@SuppressPrefix#1#2\xs@end{\def\xs@TempWord{#2}}
+\def\xs@SuppressSuffix#1?{\def\xs@TempWord{#1}}
+\def\xs@CountLetter#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \advance\xs@Length1
+ \let\xs@next\xs@CountLetter
+ \fi\xs@next
+ }
+\def\xs@SortList#1,{%
+ \ifx#1\xs@end
+ \edef\xs@templist{\xs@templist\xs@TempAffix,}%
+ \let\xs@next\relax
+ \else
+ \xs@Length0
+ \xs@CountLetter#1\xs@end
+ \ifnum\xs@Length\xs@Sign\xs@AffixLength
+ \edef\xs@templist{\xs@templist\xs@TempAffix,#1,}%
+ \let\xs@next\xs@EndList
+ \else
+ \edef\xs@templist{\xs@templist#1,}%
+ \let\xs@next\xs@SortList
+ \fi
+ \fi\xs@next
+ }
+\def\xs@EndList#1\xs@end,{%
+ \edef\xs@templist{\xs@templist#1}%
+ }
+\def\xs@Insert#1#2{%
+ \def\xs@TempAffix{#1}%
+ \xs@Length0
+ \expandafter\xs@CountLetter#1\xs@end
+ \chardef\xs@AffixLength\xs@Length
+ \def\xs@templist{}%
+ \expandafter\expandafter\expandafter\xs@SortList#2\xs@end,
+ \expandafter\let#2\xs@templist
+ }
+\def\xs@PatchDef#1{%
+ \expandafter\edef\csname\xs@ListName @words\endcsname{%
+ \csname\xs@ListName @words\endcsname
+ \xs@TempWord:::\xs@cs:::\xs@WordType:::\ifxs@Concatenate!\fi:::%
+ }%
+ \expandafter\ifx\csname\xs@TempWord @\xs@cs @xs@\xs@WordType\endcsname\relax%
+ \xs@DefToks{\xs@FinalString}%
+ \else
+ \xs@DefToks\expandafter\expandafter\expandafter{%
+ \csname\xs@TempWord @\xs@cs @xs@\xs@WordType\endcsname}%
+ \fi
+ \expandafter\ifx\csname\xs@TempWord @\xs@cs @xs@\xs@WordType @noreplace\endcsname\relax
+ \xs@NoReplaceToks{}%
+ \else
+ \xs@NoReplaceToks\expandafter\expandafter\expandafter{%
+ \csname\xs@TempWord @\xs@cs @xs@\xs@WordType @noreplace\endcsname}%
+ \fi
+ \ifxs@Concatenate
+ \expandafter\edef\csname\xs@TempWord @\xs@cs @xs@\xs@WordType\endcsname{\the\xs@DefToks}%
+ \expandafter\edef\csname\xs@TempWord @\xs@cs @xs@\xs@WordType @noreplace\endcsname{%
+ \the\xs@NoReplaceToks
+ \xs@unexpanded{\expandafter#1\expandafter{\xs@String}}%
+ }%
+ \else
+ \expandafter\edef\csname\xs@TempWord @\xs@cs @xs@\xs@WordType\endcsname{%
+ \noexpand\expandafter\noexpand#1\noexpand\expandafter{\the\xs@DefToks}%
+ }%
+ \fi
+ }
+\def\StopList{%
+ \xs@ChangeCatcodes
+ \xs@StopList
+ }
+\def\xs@StopList#1{%
+ \xs@@StopList#1,\xs@end,%
+ \xs@RestoreCatcodes
+ }
+\def\xs@@StopList#1,{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@end
+ \let\xs@next\relax
+ \else
+ \ifcsname#1@xs@searchlist\endcsname
+ \unless\ifcsname#1@xs@stoppedlist\endcsname
+ \csname#1@xs@stoppedlist\endcsname
+ \expandafter\def\expandafter\xs@ToRemove\expandafter{%
+ \csname#1@xs@searchlist\endcsname
+ }%
+ \expandafter\expandafter\expandafter%
+ \xs@PatchWords\csname #1@words\endcsname\xs@end::::::::::::%
+ \fi
+ \else
+ \xs@err{`#1' is not a list}%
+ \fi
+ \let\xs@next\xs@@StopList
+ \fi\xs@next
+ }
+\def\xs@PatchWords#1:::#2:::#3:::#4:::{%
+ \def\xs@TempWord{#1}%
+ \ifx\xs@TempWord\xs@end
+ \let\xs@next\relax
+ \else
+ \def\xs@temp{#4}%
+ \ifx\xs@temp\xs@exclamation
+ \expandafter\expandafter\expandafter%
+ \xs@RemoveFromNoReplace\expandafter\xs@ToRemove\csname#1@#2@xs@#3@noreplace\endcsname
+ \fi
+ \def\xs@cs{#2}%
+ \def\xs@WordType{#3}%
+ \expandafter\xs@RemoveFromDef\csname#1@#2@xs@#3\endcsname
+ \let\xs@next\xs@PatchWords
+ \fi\xs@next
+ }
+\def\xs@RemoveFromNoReplace#1#2{%
+ \def\xs@Erase##1\expandafter#1\expandafter##2##3\xs@end{%
+ \def#2{##1##3}%
+ \ifx#2\xs@empty
+ \let#2\relax
+ \fi
+ }%
+ \expandafter\xs@Erase#2\xs@end
+ }
+\def\xs@final{\xs@FinalString}
+\def\xs@TempDef{}
+\def\xs@RemoveFromDef#1{%
+ \def\xs@TempDef{}%
+ \def\xs@Def{\xs@FinalString}%
+ \unless\ifx#1\xs@final
+ \expandafter\xs@Extract#1%
+ \fi
+ \let#1\xs@Def
+ \ifx#1\xs@final
+ \expandafter\ifx\csname\expandafter\xs@gobble\string#1@noreplace\endcsname\relax
+ \ifx\xs@WordType\xs@words
+ \let#1\relax
+ \else
+ \xs@RemoveFromAffixes
+ \fi
+ \fi
+ \fi
+ }
+\def\xs@Extract\expandafter#1\expandafter#2{%
+ \def\xs@temp{#1}%
+ \unless\ifx\xs@temp\xs@ToRemove
+ \edef\xs@TempDef{%
+ \noexpand#1,%
+ \xs@unexpanded\expandafter{\xs@TempDef}%
+ }%
+ \fi
+ \def\xs@temp{#2}%
+ \ifx\xs@temp\xs@final
+ \def\xs@next{%
+ \expandafter\xs@Rebuild\xs@TempDef\xs@end,%
+ }%
+ \else
+ \def\xs@next{%
+ \xs@Extract#2%
+ }%
+ \fi\xs@next
+ }
+\def\xs@Rebuild#1,{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \let\xs@next\xs@Rebuild
+ \edef\xs@Def{%
+ \xs@unexpanded{\expandafter#1\expandafter}%
+ \noexpand{%
+ \xs@unexpanded\expandafter{\xs@Def}%
+ \noexpand}%
+ }%
+ \fi\xs@next
+ }%
+\def\xs@RemoveFromAffixes{%
+ \ifx\xs@WordType\xs@prefixes
+ \expandafter\xs@GetFirstLetter\xs@TempWord\xs@end
+ \let\xs@Letter\xs@FirstLetter
+ \else
+ \expandafter\xs@GetLastLetter\xs@TempWord\xs@end
+ \let\xs@Letter\xs@LastLetter
+ \fi
+ \def\xs@templist{}%
+ \expandafter\expandafter\expandafter%
+ \xs@CleanList\csname xs@\xs@WordType @\xs@Letter @\xs@cs\endcsname\xs@end,%
+ \expandafter\let\csname xs@\xs@WordType @\xs@Letter @\xs@cs\endcsname\xs@templist
+ \def\xs@templist{}%
+ \expandafter\expandafter\expandafter%
+ \xs@CleanList\csname xs@\xs@WordType @\xs@Letter @\xs@cs @shorter\endcsname\xs@end,%
+ \expandafter\let\csname xs@\xs@WordType @\xs@Letter @\xs@cs @shorter\endcsname\xs@templist
+ \def\xs@templist{}%
+ \expandafter\expandafter\expandafter%
+ \xs@CleanList\csname xs@\xs@WordType @\xs@Letter @\xs@cs @longer\endcsname\xs@end,%
+ \expandafter\let\csname xs@\xs@WordType @\xs@Letter @\xs@cs @longer\endcsname\xs@templist
+ \expandafter\let\csname\xs@TempWord @\xs@cs @xs@\xs@WordType\endcsname\relax
+ }
+\def\xs@CleanList#1,{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@end
+ \let\xs@next\relax
+ \else
+ \let\xs@next\xs@CleanList
+ \unless\ifx\xs@temp\xs@TempWord
+ \edef\xs@templist{\xs@templist#1,}%
+ \fi
+ \fi\xs@next
+ }
+\def\xs@Stack{}
+\def\xs@Remainder{}
+\def\xs@StartString{%
+ \xs@Stringtrue
+ \let\xs@StartString\relax
+ \def\xs@String{}%
+ \def\PrefixFound{}%
+ \def\SuffixFound{}%
+ \def\AffixFound{}%
+ \def\xs@Stack{}%
+ \def\xs@Remainder{}%
+ \xs@Phrasefalse
+ \setbox\xs@Box=\hbox\bgroup
+ }
+\let\xs@@StartString\xs@StartString
+\def\xs@EndString{%
+ \ifxs@String
+ \egroup
+ \xs@Stringfalse
+ \expandafter\xs@CreateLetter\xs@PendingLetters\xs@end
+ \gdef\xs@PendingLetters{}%
+ \xs@Evaluate
+ \xs@Restore
+ \xs@StartTracing
+ \expandafter\xs@Remainder
+ \fi
+ }
+\def\xs@@F@Test{%
+ \expandafter\unless\expandafter\ifx\csname\xs@String @cs@xs@words\endcsname\relax
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \def%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \xs@FinalString%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \csname\xs@String @cs@xs@words\endcsname}%
+ \expandafter\unless\expandafter\ifx\csname\xs@String @cs@xs@words@noreplace\endcsname\relax
+ \edef\xs@NoReplace{%
+ \xs@unexpanded\expandafter{\xs@NoReplace}%
+ \xs@unexpanded\expandafter{\csname\xs@String @cs@xs@words@noreplace\endcsname}%
+ }%
+ \fi
+ \xs@Matchtrue
+ \xs@relax
+ \xs@relax
+ \fi
+ }
+\def\xs@@f@Test{%
+ \expandafter\xs@Lowercase\expandafter{\xs@String}\xs@lcString
+ \expandafter\unless\expandafter\ifx\csname\xs@lcString @ncs@xs@words\endcsname\relax
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \def%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \xs@FinalString%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \csname\xs@lcString @ncs@xs@words\endcsname}%
+ \expandafter\unless\expandafter\ifx\csname\xs@lcString @ncs@xs@words@noreplace\endcsname\relax
+ \edef\xs@NoReplace{%
+ \xs@unexpanded\expandafter{\xs@NoReplace}%
+ \xs@unexpanded\expandafter{\csname\xs@lcString @ncs@xs@words@noreplace\endcsname}%
+ }%
+ \fi
+ \xs@Matchtrue
+ \xs@relax
+ \xs@relax
+ \fi
+ }
+\def\xs@@p@Test{%
+ \xs@Affixfalse
+ \expandafter\xs@GetFirstLetter\xs@lcString\xs@end
+ \ifcsname xs@prefixes@\xs@FirstLetter @ncs\endcsname
+ \let\xs@@String\xs@lcString
+ \def\xs@cs{ncs}%
+ \let\xs@WhatNext\xs@p@WhatNext
+ \expandafter\expandafter\expandafter%
+ \xs@CheckPrefixes\csname xs@prefixes@\xs@FirstLetter @ncs\p@order\endcsname\xs@end,%
+ \fi
+ \ifxs@Affix
+ \xs@Affixfalse
+ \xs@Matchtrue
+ \xs@relax
+ \xs@relax
+ \fi
+ }
+\def\xs@@P@Test{%
+ \xs@Affixfalse
+ \expandafter\xs@GetFirstLetter\xs@String\xs@end
+ \ifcsname xs@prefixes@\xs@FirstLetter @cs\endcsname
+ \let\xs@@String\xs@String
+ \def\xs@cs{cs}%
+ \let\xs@WhatNext\xs@P@WhatNext
+ \expandafter\expandafter\expandafter%
+ \xs@CheckPrefixes\csname xs@prefixes@\xs@FirstLetter @cs\P@order\endcsname\xs@end,%
+ \fi
+ \ifxs@Affix
+ \xs@Affixfalse
+ \xs@Matchtrue
+ \xs@relax
+ \xs@relax
+ \fi
+ }
+\def\xs@CheckPrefixes#1,{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@end
+ \let\xs@next\relax
+ \else
+ \def\xs@TestPrefix##1#1##2\xs@end{%
+ \def\xs@temp{##1}%
+ \ifx\xs@temp\xs@empty
+ \xs@Affixtrue
+ \def\PrefixFound{#1}%
+ \def\AffixFound{#1}%
+ \let\xs@next\xs@WhatNext
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \def%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \xs@FinalString%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter{%
+ \csname#1@\xs@cs @xs@prefixes\endcsname}%
+ \expandafter\unless\expandafter\ifx\csname#1@\xs@cs @xs@prefixes@noreplace\endcsname\relax
+ \edef\xs@NoReplace{%
+ \xs@unexpanded\expandafter{\xs@NoReplace}%
+ \xs@unexpanded\expandafter{\csname#1@\xs@cs @xs@prefixes@noreplace\endcsname}%
+ }%
+ \fi
+ \else
+ \let\xs@next\xs@CheckPrefixes
+ \fi
+ }%
+ \expandafter\xs@TestPrefix\xs@@String#1\xs@end
+ \fi\xs@next
+ }
+\def\xs@@S@Test{%
+ \xs@Affixfalse
+ \expandafter\xs@GetLastLetter\xs@String\xs@end
+ \ifcsname xs@suffixes@\xs@LastLetter @cs\endcsname
+ \let\xs@@String\xs@String
+ \def\xs@cs{cs}%
+ \let\xs@WhatNext\xs@S@WhatNext
+ \expandafter\expandafter\expandafter%
+ \xs@CheckSuffixes\csname xs@suffixes@\xs@LastLetter @cs\S@order\endcsname\xs@end,%
+ \fi
+ \ifxs@Affix
+ \xs@Affixfalse
+ \xs@Matchtrue
+ \xs@relax
+ \xs@relax
+ \fi
+ }
+\def\xs@@s@Test{%
+ \xs@Affixfalse
+ \expandafter\xs@GetLastLetter\xs@lcString\xs@end
+ \ifcsname xs@suffixes@\xs@LastLetter @ncs\endcsname
+ \let\xs@@String\xs@lcString
+ \def\xs@cs{ncs}%
+ \let\xs@WhatNext\xs@s@WhatNext
+ \expandafter\expandafter\expandafter%
+ \xs@CheckSuffixes\csname xs@suffixes@\xs@LastLetter @ncs\s@order\endcsname\xs@end,%
+ \fi
+ \ifxs@Affix
+ \xs@Affixfalse
+ \xs@Matchtrue
+ \xs@relax
+ \xs@relax
+ \fi
+ }
+\def\xs@CheckSuffixes#1,{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@end
+ \let\xs@next\relax
+ \else
+ \def\xs@TestSuffix##1#1##2\xs@end{%
+ \def\xs@@temp{##2}%
+ \ifx\xs@temp\xs@@temp
+ \xs@Affixtrue
+ \def\SuffixFound{#1}%
+ \def\AffixFound{#1}%
+ \let\xs@next\xs@WhatNext
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \def%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ \xs@FinalString%
+ \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter%
+ {%
+ \csname#1@\xs@cs @xs@suffixes\endcsname}%
+ \expandafter\unless\expandafter\ifx\csname#1@\xs@cs @xs@suffixes@noreplace\endcsname\relax
+ \edef\xs@NoReplace{%
+ \xs@unexpanded\expandafter{\xs@NoReplace}%
+ \xs@unexpanded\expandafter{\csname#1@\xs@cs @xs@suffixes@noreplace\endcsname}%
+ }%
+ \fi
+ \else%
+ \let\xs@next\xs@CheckSuffixes
+ \fi
+ }%
+ \expandafter\xs@TestSuffix\xs@@String#1\xs@end
+ \fi\xs@next
+ }
+\def\SearchOrder{%
+ \xs@ChangeCatcodes
+ \xs@SearchOrder
+ }
+\def\xs@SearchOrder#1{%
+ \def\xs@Order{}%
+ \xs@@SearchOrder#1\xs@end;%
+ \edef\xs@Evaluate{%
+ \xs@unexpanded{%
+ \XeTeXinterchartokenstate=0
+ \def\xs@NoReplace{}%
+ \let\xs@FinalString\xs@String
+ \expandafter\xs@Lowercase\expandafter{\xs@String}\xs@lcString
+ }%
+ \xs@unexpanded\expandafter{%
+ \xs@Order
+ \ifxs@Match
+ \def\xs@next{%
+ \xs@FinalString
+ }%
+ \else
+ \unless\ifx\xs@Stack\xs@empty
+ \xs@Phrasetrue
+ \expandafter\xs@PopStack\xs@Stack\xs@@end
+ \let\xs@next\xs@Evaluate
+ \else
+ \ifxs@Phrase
+ \def\xs@Stack{}%
+ \def\xs@next{\xs@String\xs@Restore}%
+ \else
+ \def\xs@next{\unhbox\xs@Box\xs@Restore}%
+ \fi
+ \fi
+ \fi\xs@next
+ }%
+ }%
+ \let\xs@f@Test\xs@@f@Test
+ \let\xs@F@Test\xs@@F@Test
+ \let\xs@p@Test\xs@@p@Test
+ \let\xs@P@Test\xs@@P@Test
+ \let\xs@s@Test\xs@@s@Test
+ \let\xs@S@Test\xs@@S@Test
+ \xs@RestoreCatcodes
+ }
+\def\xs@@SearchOrder#1#2;{%
+ \def\xs@temp{#1#2}%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \def\xs@Inhibit{}%
+ \xs@MakeInhibit#2\xs@end
+ \expandafter\expandafter\expandafter\xs@PatchTest\csname xs@@#1@Test\endcsname#1%
+ \edef\xs@Order{%
+ \xs@unexpanded\expandafter{\xs@Order}%
+ \xs@unexpanded\expandafter{\csname xs@#1@Test\endcsname}}%
+ \let\xs@next\xs@@SearchOrder
+ \fi\xs@next
+ }
+\def\xs@MakeInhibit#1{%
+ \def\xs@temp{#1}%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \let\xs@next\xs@MakeInhibit
+ \unless\ifx\xs@temp\xs@exclamation%
+ \edef\xs@Inhibit{%
+ \xs@unexpanded\expandafter{\xs@Inhibit
+ \expandafter\let\csname xs@#1@Test\endcsname\relax}%
+ }%
+ \fi
+ \fi\xs@next
+ }
+\def\xs@PatchTest#1\xs@relax#2\xs@relax#3#4{%
+ \expandafter\edef\csname xs@@#4@Test\endcsname{%
+ \xs@unexpanded{#1}%
+ \xs@unexpanded\expandafter{\expandafter\xs@relax\xs@Inhibit\xs@relax\fi}%
+ }%
+ }
+\def\xs@Restore{%
+ \xs@Matchfalse
+ \let\xs@f@Test\xs@@f@Test
+ \let\xs@F@Test\xs@@F@Test
+ \let\xs@p@Test\xs@@p@Test
+ \let\xs@P@Test\xs@@P@Test
+ \let\xs@s@Test\xs@@s@Test
+ \let\xs@S@Test\xs@@S@Test
+ \let\xs@StartString\xs@@StartString
+ \edef\xs@Remainder{%
+ \xs@unexpanded\expandafter{\xs@NoReplace}%
+ \xs@unexpanded\expandafter{\xs@Remainder}%
+ }%
+ \XeTeXinterchartokenstate=1
+ }
+\def\xs@PopWord#1\xs@end#2\xs@end{%
+ \def\xs@String{#2}%
+ \def\xs@@PopWord#2##1\xs@end{%
+ \edef\xs@Remainder{##1\xs@unexpanded\expandafter{\xs@Remainder}%
+ }%
+ }%
+ \xs@@PopWord#1\xs@end
+ }
+\def\xs@PopStack#1\xs@end#2\xs@@end{%
+ \def\xs@Stack{#2}%
+ \expandafter\xs@PopWord\xs@String\xs@end#1\xs@end
+ }
+\def\SortByLength#1{%
+ \def\xs@temp{#1}%
+ \ifx\xs@temp\xs@star
+ \def\xs@AffixOrder{@shorter}%
+ \let\xs@next\xs@SortByLength
+ \else
+ \def\xs@AffixOrder{@longer}%
+ \def\xs@next{\xs@@SortByLength#1\xs@end}%
+ \fi
+ \xs@next}%
+\def\xs@SortByLength#1{%
+ \xs@@SortByLength#1\xs@end
+ }
+\def\xs@@SortByLength#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \expandafter\let\csname #1@order\endcsname\xs@AffixOrder
+ \let\xs@next\xs@@SortByLength
+ \fi\xs@next
+ }
+\def\DoNotSort{%
+ \def\xs@AffixOrder{}%
+ \xs@SortByLength
+ }
+\def\SearchAll#1{%
+ \xs@SearchAll#1\xs@end
+ }
+\def\xs@SearchAll#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else\let\xs@next\xs@SearchAll
+ \if#1p%
+ \let\xs@p@WhatNext\xs@CheckPrefixes
+ \else
+ \if#1P
+ \let\xs@P@WhatNext\xs@CheckPrefixes
+ \else
+ \if#1s
+ \let\xs@s@WhatNext\xs@CheckSuffixes
+ \else
+ \let\xs@S@WhatNext\xs@CheckSuffixes
+ \fi
+ \fi
+ \fi
+ \fi\xs@next
+ }
+\def\SearchOnlyOne#1{%
+ \xs@SearchOne#1\xs@end
+ }
+\def\xs@SearchOne#1{%
+ \ifx#1\xs@end
+ \let\xs@next\relax
+ \else
+ \let\xs@next\xs@SearchOne
+ \expandafter\def\csname xs@#1@WhatNext\endcsname##1\xs@end,{}%
+ \fi\xs@next
+ }
+\def\StopSearching{%
+ \let\xs@StartString\relax
+ }
+\def\StartSearching{%
+ \let\xs@StartString\xs@@StartString
+ }
+\let\xs@OldOutput\relax
+\def\PatchOutput{%
+ \ifx\xs@OldOutput\relax
+ \edef\xs@PatchOutput{%
+ \noexpand\def\noexpand\xs@OldOutput{%
+ \the\output
+ }%
+ \noexpand\output{%
+ \noexpand\StopSearching
+ \the\output
+ \noexpand\StartSearching
+ }%
+ }%
+ \expandafter\xs@PatchOutput
+ \else
+ \xs@err{Output already patched}%
+ \fi
+ }
+\def\NormalOutput{%
+ \ifx\xs@OldOutput\relax
+ \xs@err{Output has not been patched}%
+ \else
+ \expandafter\output\expandafter{%
+ \xs@OldOutput
+ }%
+ \let\xs@OldOutput\relax
+ \fi
+ }
+\def\PatchTracing{%
+ \def\xs@StopTracing{%
+ \chardef\xs@tracingcommands\tracingcommands
+ \chardef\xs@tracingmacros\tracingmacros
+ \tracingcommands0 \tracingmacros0\relax
+ }%
+ \def\xs@StartTracing{%
+ \tracingcommands\xs@tracingcommands
+ \tracingmacros\xs@tracingmacros
+ }%
+ }
+\def\NormalTracing{%
+ \let\xs@StopTracing\relax
+ \let\xs@StartTracing\relax
+ }
+\NormalTracing
+\xs@RestoreCatcodes \catcode`@=12
+\SearchOrder{
+ F!fPpSs;
+ f!PpSs;
+ P!pSs;
+ p!Ss;
+ S!s;
+ s;
+ }
+\DoNotSort{pPsS}
+\SearchAll{pPsS}
+\XeTeXinterchartokenstate1
+\endinput