%PDF- %PDF-
| Direktori : /data/old/usr/share/texlive/texmf-dist/tex/xelatex/ucharclasses/ |
| Current File : //data/old/usr/share/texlive/texmf-dist/tex/xelatex/ucharclasses/ucharclasses.sty |
% ----------------------------------------------------------------------------
% This "ucharclasses" package sets up XeTeX character classes based on which
% unicode block a character is found in. It then allows transition rules to be defined
% when entering or leaving particular unicode blocks, the code of which gets inserted
% automatically when a transition from a character from one unicode block to a
% character from another unicode block is encountered by XeTeX
%
% Current compatibility should be Unicode 6.0, although I may have missed one or
% more blocks that were added between 5 and 6.
%
% Credits:
% v1.0: Mike "Pomax" Kamermans
% v2.0: rewritten by Enrico Gregorio
%
% License: public domain (http://www.tex.ac.uk/CTAN/help/Catalogue/licenses.pd.html)
%
% ----------------------------------------------------------------------------
\ProvidesPackage{ucharclasses}[2012/09/25 v2.0x Unicode block
character classes for XeLaTeX]
\newif\if@ucharclassverbose
\DeclareOption{verbose}{\@ucharclassverbosetrue}
% ----------------------------------------------------------------------------
% The package options allow you to selectively enable certain unicode blocks
% ----------------------------------------------------------------------------
% We first define all blocks in a list together with their start and
% end point
\def\AllClasses{
% Unicode 5.1 block definitions
\do{AegeanNumbers}{65792}{65855}
\do{AlphabeticPresentationForms}{64256}{64335}
\do{AncientGreekMusicalNotation}{119296}{119375}
\do{AncientGreekNumbers}{65856}{65935}
\do{AncientSymbols}{65936}{65999}
\do{Arabic}{1536}{1791}
\do{ArabicPresentationFormsA}{64336}{65023}
\do{ArabicPresentationFormsB}{65136}{65279}
\do{ArabicSupplement}{1872}{1919}
\do{Armenian}{1328}{1423}
\do{Arrows}{8592}{8703}
\do{Balinese}{6912}{7039}
\do{BasicLatin}{32}{127}
\do{Bengali}{2432}{2559}
\do{BlockElements}{9600}{9631}
\do{Bopomofo}{12544}{12591}
\do{BopomofoExtended}{12704}{12735}
\do{BoxDrawing}{9472}{9599}
\do{BraillePatterns}{10240}{10495}
\do{Buginese}{6656}{6687}
\do{Buhid}{5952}{5983}
\do{ByzantineMusicalSymbols}{118784}{119039}
\do{Carian}{66208}{66271}
\do{Cham}{43520}{43615}
\do{Cherokee}{5024}{5119}
\do{CJKCompatibility}{13056}{13311}
\do{CJKCompatibilityForms}{65072}{65103}
\do{CJKCompatibilityIdeographs}{63744}{64255}
\do{CJKCompatibilityIdeographsSupplement}{194560}{195103}
\do{CJKRadicalsSupplement}{11904}{12031}
\do{CJKStrokes}{12736}{12783}
\do{CJKSymbolsAndPunctuation}{12288}{12351}
\do{CJKUnifiedIdeographs}{19968}{40959}
\do{CJKUnifiedIdeographsExtensionA}{13312}{19903}
\do{CJKUnifiedIdeographsExtensionB}{131072}{173791}
\do{CJKUnifiedIdeographsExtensionC}{173824}{177983}
\do{CombiningDiacriticalMarks}{768}{879}
\do{CombiningDiacriticalMarksforSymbols}{8400}{8447}
\do{CombiningDiacriticalMarksSupplement}{7616}{7679}
\do{CombiningHalfMarks}{65056}{65071}
\do{ControlPictures}{9216}{9279}
\do{Coptic}{11392}{11519}
\do{CountingRodNumerals}{119648}{119679}
\do{Cuneiform}{73728}{74751}
\do{CuneiformNumbersAndPunctuation}{74752}{74879}
\do{CurrencySymbols}{8352}{8399}
\do{CypriotSyllabary}{67584}{67647}
\do{Cyrillic}{1024}{1279}
\do{CyrillicExtendedA}{11744}{11775}
\do{CyrillicExtendedB}{42560}{42655}
\do{CyrillicSupplement}{1280}{1327}
\do{Deseret}{66560}{66639}
\do{Devanagari}{2304}{2431}
\do{Dingbats}{9984}{10175}
\do{DominoTiles}{127024}{127135}
\do{EnclosedAlphanumerics}{9312}{9471}
\do{EnclosedCJKLettersAndMonths}{12800}{13055}
\do{Ethiopic}{4608}{4991}
\do{EthiopicExtended}{11648}{11743}
\do{EthiopicSupplement}{4992}{5023}
\do{GeneralPunctuation}{8192}{8303}
\do{GeometricShapes}{9632}{9727}
\do{Georgian}{4256}{4351}
\do{GeorgianSupplement}{11520}{11567}
\do{Glagolitic}{11264}{11359}
\do{Gothic}{66352}{66383}
\do{GreekAndCoptic}{880}{1023}
\do{GreekExtended}{7936}{8191}
\do{Gujarati}{2688}{2815}
\do{Gurmukhi}{2560}{2687}
\do{HalfwidthAndFullwidthForms}{65280}{65519}
\do{HangulCompatibilityJamo}{12592}{12687}
\do{HangulJamo}{4352}{4607}
\do{HangulSyllables}{44032}{55215}
\do{Hanunoo}{5920}{5951}
\do{Hebrew}{1424}{1535}
\do{Hiragana}{12352}{12447}
\do{IdeographicDescriptionCharacters}{12272}{12287}
\do{IPAExtensions}{592}{687}
\do{Kanbun}{12688}{12703}
\do{KangxiRadicals}{12032}{12255}
\do{Kannada}{3200}{3327}
\do{Katakana}{12448}{12543}
\do{KatakanaPhoneticExtensions}{12784}{12799}
\do{KayahLi}{43264}{43311}
\do{Kharoshthi}{68096}{68191}
\do{Khmer}{6016}{6143}
\do{KhmerSymbols}{6624}{6655}
\do{Lao}{3712}{3839}
\do{LatinExtendedAdditional}{7680}{7935}
\do{LatinExtendedA}{256}{383}
\do{LatinExtendedB}{384}{591}
\do{LatinExtendedC}{11360}{11391}
\do{LatinExtendedD}{42784}{43007}
\do{LatinSupplement}{128}{255}
\do{Lepcha}{7168}{7247}
\do{LetterlikeSymbols}{8448}{8527}
\do{Limbu}{6400}{6479}
\do{LinearBIdeograms}{65664}{65791}
\do{LinearBSyllabary}{65536}{65663}
\do{Lycian}{66176}{66207}
\do{Lydian}{67872}{67903}
\do{MahjongTiles}{126976}{127023}
\do{Malayalam}{3328}{3455}
\do{MathematicalAlphanumericSymbols}{119808}{120831}
\do{MathematicalOperators}{8704}{8959}
\do{MiscellaneousMathematicalSymbolsA}{10176}{10223}
\do{MiscellaneousMathematicalSymbolsB}{10624}{10751}
\do{MiscellaneousSymbols}{9728}{9983}
\do{MiscellaneousSymbolsAndArrows}{11008}{11263}
\do{MiscellaneousTechnical}{8960}{9215}
\do{ModifierToneLetters}{42752}{42783}
\do{Mongolian}{6144}{6319}
\do{MusicalSymbols}{119040}{119295}
\do{Myanmar}{4096}{4255}
\do{NewTaiLue}{6528}{6623}
\do{NKo}{1984}{2047}
\do{NumberForms}{8528}{8591}
\do{Ogham}{5760}{5791}
\do{OldChiki}{7248}{7295}
\do{OldItalic}{66304}{66351}
\do{OldPersian}{66464}{66527}
\do{OpticalCharacterRecognition}{9280}{9311}
\do{Oriya}{2816}{2943}
\do{Osmanya}{66688}{66735}
\do{PhagsPa}{43072}{43135}
\do{PhaistosDisc}{66000}{66047}
\do{Phoenician}{67840}{67871}
\do{PhoneticExtensions}{7424}{7551}
\do{PhoneticExtensionsSupplement}{7552}{7615}
\do{PrivateUseArea}{57344}{63743}
\do{Rejang}{43312}{43359}
\do{Runic}{5792}{5887}
\do{Saurashtra}{43136}{43231}
\do{Shavian}{66640}{66687}
\do{Sinhala}{3456}{3583}
\do{SmallFormVariants}{65104}{65135}
\do{SpacingModifierLetters}{688}{767}
\do{Specials}{65520}{65535}
\do{SuperscriptsAndSubscripts}{8304}{8351}
\do{SupplementalArrowsA}{10224}{10239}
\do{SupplementalArrowsB}{10496}{10623}
\do{SupplementalMathematicalOperators}{10752}{11007}
\do{SupplementalPunctuation}{11776}{11903}
\do{SupplementaryPrivateUseAreaA}{983040}{1048575}
\do{SupplementaryPrivateUseAreaB}{1048576}{1114111}
\do{SylotiNagri}{43008}{43055}
\do{Syriac}{1792}{1871}
\do{Tagalog}{5888}{5919}
\do{Tagbanwa}{5984}{6015}
\do{Tags}{917504}{917631}
\do{TaiLe}{6480}{6527}
\do{TaiXuanJingSymbols}{119552}{119647}
\do{Tamil}{2944}{3071}
\do{Telugu}{3072}{3199}
\do{Thaana}{1920}{1983}
\do{Thai}{3584}{3711}
\do{Tibetan}{3840}{4095}
\do{Tifinagh}{11568}{11647}
\do{Ugaritic}{66432}{66463}
\do{UnifiedCanadianAboriginalSyllabics}{5120}{5759}
\do{Vai}{42240}{42559}
\do{VariationSelectors}{65024}{65039}
\do{VariationSelectorsSupplement}{917760}{917999}
\do{VerticalForms}{65040}{65055}
\do{YiRadicals}{42128}{42191}
\do{YiSyllables}{40960}{42127}
\do{YijingHexagramSymbols}{19904}{19967}
% Unicode 6.0 block definitions
\do{Mandaic}{2112}{2143}
\do{Batak}{7104}{7167}
\do{EthiopicExtendedA}{43776}{43823}
\do{Brahmi}{69632}{69759}
\do{BamumSupplement}{92160}{92735}
\do{KanaSupplement}{110592}{110847}
\do{PlayingCards}{127136}{127231}
\do{MiscellaneousSymbolsAndPictographs}{127744}{128511}
\do{Emoticons}{128512}{128591}
\do{TransportAndMapSymbols}{128640}{128767}
\do{AlchemicalSymbols}{128768}{128895}
\do{CJKUnifiedIdeographsExtensionD}{177984}{178207}
}
% ----------------------------------------------------------------------------
% Option handling lets the user turn off "load all" and selectively enable only those blocks
% they are interested in
% ----------------------------------------------------------------------------
% Each option starts with \overrideClassLoading; so any specified
% option will set |\if@overrideClassLoading| to true; when one has
% been scanned it's not necessary to set the conditional again. Then
% for block X we let \enableX to \@empty so that later on we can check
% if it is defined
\newif\if@overrideClassLoading
\newcommand{\overrideClassLoading}{\@overrideClassLoadingtrue
\let\overrideClassLoading\relax}
\def\do#1#2#3{\DeclareOption{#1}%
{\overrideClassLoading\expandafter\let\csname enable#1\endcsname\@empty}}
% We execute the list with this definition of \do
\AllClasses
% informal groups
% We define lists also for these groups
\def\ClassGroups{
\doclass{Arabics}
\doclass{Chinese}
\doclass{CJK}
\doclass{Cyrillics}
\doclass{Diacritics}
\doclass{Greek}
\doclass{Korean}
\doclass{Japanese}
\doclass{Latin}
\doclass{Mathematics}
\doclass{Phonetics}
\doclass{Punctuation}
\doclass{Symbols}
\doclass{Yi}
\doclass{Other}
}
\def\ArabicsClasses{
\do{Arabic}
\do{ArabicPresentationFormsA}
\do{ArabicPresentationFormsB}
\do{ArabicSupplement}
}
\def\ChineseClasses{
\do{Bopomofo}
\do{BopomofoExtended}
\do{CJKCompatibility}
\do{CJKCompatibilityForms}
\do{CJKCompatibilityIdeographs}
\do{CJKCompatibilityIdeographsSupplement}
\do{CJKRadicalsSupplement}
\do{CJKStrokes}
\do{CJKSymbolsAndPunctuation}
\do{CJKUnifiedIdeographs}
\do{CJKUnifiedIdeographsExtensionA}
\do{CJKUnifiedIdeographsExtensionB}
\do{CJKUnifiedIdeographsExtensionC}
\do{CJKUnifiedIdeographsExtensionD}
\do{EnclosedCJKLettersAndMonths}
\do{IdeographicDescriptionCharacters}
\do{KangxiRadicals}
}
\def\CJKClasses{
\do{Bopomofo}
\do{BopomofoExtended}
\do{CJKCompatibility}
\do{CJKCompatibilityForms}
\do{CJKCompatibilityIdeographs}
\do{CJKCompatibilityIdeographsSupplement}
\do{CJKRadicalsSupplement}
\do{CJKStrokes}
\do{CJKSymbolsAndPunctuation}
\do{CJKUnifiedIdeographs}
\do{CJKUnifiedIdeographsExtensionA}
\do{CJKUnifiedIdeographsExtensionB}
\do{CJKUnifiedIdeographsExtensionC}
\do{CJKUnifiedIdeographsExtensionD}
\do{EnclosedCJKLettersAndMonths}
\do{HalfwidthAndFullwidthForms}
\do{HangulCompatibilityJamo}
\do{HangulJamo}
\do{HangulSyllables}
\do{Hiragana}
\do{IdeographicDescriptionCharacters}
\do{Kanbun}
\do{KangxiRadicals}
\do{Katakana}
\do{KatakanaPhoneticExtensions}
\do{KanaSupplement}
}
\def\CyrillicsClasses{
\do{Cyrillic}
\do{CyrillicExtendedA}
\do{CyrillicExtendedB}
\do{CyrillicSupplement}
}
\def\DiacriticsClasses{
\do{CombiningDiacriticalMarks}
\do{CombiningDiacriticalMarksforSymbols}
\do{CombiningDiacriticalMarksSupplement}
\do{CombiningHalfMarks}
}
\def\GreekClasses{
\do{Coptic}
\do{GreekAndCoptic}
\do{GreekExtended}
}
\def\KoreanClasses{
\do{HangulCompatibilityJamo}
\do{HangulJamo}
\do{HangulSyllables}
}
\def\JapaneseClasses{
\do{HalfwidthAndFullwidthForms}
\do{Hiragana}
\do{Kanbun}
\do{KangxiRadicals}
\do{Katakana}
\do{KatakanaPhoneticExtensions}
\do{KanaSupplement}
\do{CJKUnifiedIdeographs}
}
\def\LatinClasses{
\do{BasicLatin}
\do{LatinExtendedAdditional}
\do{LatinExtendedA}
\do{LatinExtendedB}
\do{LatinExtendedC}
\do{LatinExtendedD}
\do{LatinSupplement}
\do{AlphabeticPresentationForms}
}
\def\MathematicsClasses{
\do{MathematicalAlphanumericSymbols}
\do{MathematicalOperators}
\do{MiscellaneousMathematicalSymbolsA}
\do{MiscellaneousMathematicalSymbolsB}
\do{SupplementalMathematicalOperators}
}
\def\PhoneticsClasses{
\do{IPAExtensions}
\do{PhoneticExtensions}
\do{PhoneticExtensionsSupplement}
}
\def\PunctuationClasses{
\do{GeneralPunctuation}
\do{SupplementalPunctuation}
}
\def\SymbolsClasses{
\do{Arrows}
\do{BoxDrawing}
\do{ByzantineMusicalSymbols}
\do{ControlPictures}
\do{CurrencySymbols}
\do{GeometricShapes}
\do{LetterlikeSymbols}
\do{MiscellaneousSymbols}
\do{MiscellaneousSymbolsAndArrows}
\do{MiscellaneousTechnical}
\do{SupplementalArrowsA}
\do{SupplementalArrowsB}
\do{VariationSelectors}
\do{VariationSelectorsSupplement}
\do{MiscellaneousSymbolsAndPictographs}
\do{Emoticons}
\do{TransportAndMapSymbols}
\do{AlchemicalSymbols}
}
\def\YiClasses{
\do{YiRadicals}
\do{YiSyllables}
}
\def\OtherClasses{
\do{AegeanNumbers}
\do{AncientGreekMusicalNotation}
\do{AncientGreekNumbers}
\do{Armenian}
\do{Balinese}
\do{Bengali}
\do{BlockElements}
\do{BraillePatterns}
\do{Buginese}
\do{Buhid}
\do{Cherokee}
\do{Coptic}
\do{CountingRodNumerals}
\do{Cuneiform}
\do{CuneiformNumbersAndPunctuation}
\do{CypriotSyllabary}
\do{Deseret}
\do{Devanagari}
\do{Dingbats}
\do{DominoTiles}
\do{EnclosedAlphanumerics}
\do{Ethiopic}
\do{EthiopicExtended}
\do{EthiopicSupplement}
\do{Georgian}
\do{GeorgianSupplement}
\do{Glagolitic}
\do{Gothic}
\do{Gujarati}
\do{Gurmukhi}
\do{Hanunoo}
\do{Hebrew}
\do{Kannada}
\do{Kharoshthi}
\do{Khmer}
\do{KhmerSymbols}
\do{Lao}
\do{Limbu}
\do{LinearBIdeograms}
\do{LinearBSyllabary}
\do{MahjongTiles}
\do{Malayalam}
\do{ModifierToneLetters}
\do{Mongolian}
\do{MusicalSymbols}
\do{Myanmar}
\do{NewTaiLue}
\do{NKo}
\do{NumberForms}
\do{Ogham}
\do{OldItalic}
\do{OldPersian}
\do{OpticalCharacterRecognition}
\do{Oriya}
\do{Osmanya}
\do{PhagsPa}
\do{Phoenician}
\do{PrivateUseArea}
\do{Runic}
\do{Shavian}
\do{Sinhala}
\do{SmallFormVariants}
\do{SpacingModifierLetters}
\do{Specials}
\do{SuperscriptsAndSubscripts}
\do{SupplementaryPrivateUseAreaA}
\do{SupplementaryPrivateUseAreaB}
\do{SylotiNagri}
\do{Syriac}
\do{Tagalog}
\do{Tagbanwa}
\do{Tags}
\do{TaiLe}
\do{TaiXuanJingSymbols}
\do{Tamil}
\do{Telugu}
\do{Thaana}
\do{Thai}
\do{Tibetan}
\do{Tifinagh}
\do{Ugaritic}
\do{UnifiedCanadianAboriginalSyllabics}
\do{VerticalForms}
\do{YijingHexagramSymbols}
}
% For each class group Z we define the relative option
% \DeclareOption{Z}{\overrideClassLoading\enableX1\enableX2...\enableXn}
% where X1, X2, ..., Xn are the blocks belonging to class Z
\def\do#1{%
\unexpanded{\expandafter\let\csname enable#1\endcsname\@empty}}
\def\doclass#1{%
\begingroup\edef\x{\endgroup\noexpand\DeclareOption{#1}{%
\noexpand\overrideClassLoading\csname #1Classes\endcsname}}\x}
\ClassGroups
\ProcessOptions\relax
% If no option has been given, \if@overrideClassLoading will still be
% false, and in this case we enable *all* blocks (again by defining
% \enableX equal to \@empty for each block X
\if@overrideClassLoading\else
\def\do#1#2#3{\expandafter\let\csname enable#1\endcsname\@empty}
\AllClasses
\fi
% ----------------------------------------------------------------------------
% After dealing with the options, make sure we have the necessary packages available
% ----------------------------------------------------------------------------
% because this package relies on XeTeX's intercharclass sytem, better require XeTeX
\RequirePackage{ifxetex}
\RequireXeTeX
% ----------------------------------------------------------------------------
% This package heavily exploits XeTeX's intercharclass system!
% ----------------------------------------------------------------------------
% enable/disable commands
\newcommand{\disableTransitionRules}{\XeTeXinterchartokenstate = 0}
\newcommand{\enableTransitionRules}{\XeTeXinterchartokenstate = 1}
% shorthand commands
\let\uccoff\disableTransitionRules
\let\uccon\enableTransitionRules
% make sure it's turned on
\enableTransitionRules
% ----------------------------------------------------------------------------
% And now, finally, we can start loading all the requested blocks
% ----------------------------------------------------------------------------
% \message{Package ucharclasses Message: Assigning character classes per
% Unicode block (this may take a while)}
%% We record the last allocated class before allocating ours;
%% \newXeTeXintercharclass saves in the counter
%% \xe@alloc@intercharclass the last allocated class number; initially
%% it's 3, but some other code might have allocated interchar classes
%% before loading this package; if \enableX is defined (to \@empty,
%% but that's irrelevant), an intercharclass is allocated by using the
%% list \AllClasses; two cases for block X:
%%
%% (1) \enableX is defined: then \do{X}{a}{b} will become
%% \@defineUnicodeClass{X}{a}{b} which in turn will execute
%% \newXeTeXintercharclass\XClass and start a loop assigning code
%% points from a to b to this class
%%
%% (2) \enableX is not defined: then \do{X}{a}{b} will become
%% \@gobblethree{X}{a}{b} and so nothing will be performed
\chardef\@classstart=\xe@alloc@intercharclass
\providecommand\@gobblethree[3]{}
\def\do#1{%
\ifcsname enable#1\endcsname
\expandafter\@defineUnicodeClass
\else
\expandafter\@gobblethree
\fi{#1}}
\def\@defineUnicodeClass#1#2#3{%
\if@ucharclassverbose\typeout{Defining #1 Class}\fi
\expandafter\newXeTeXintercharclass\csname #1Class\endcsname
\count@=#2
\loop
\if@ucharclassverbose
\typeout{\XeTeXcharclass\number\count@=
\expandafter\string\csname #1Class\endcsname}%
\fi
\XeTeXcharclass\count@=\csname #1Class\endcsname
\ifnum\count@<#3
\advance\count@\@ne
\repeat
}
\AllClasses
% finally, we record the end of our charclass range
\chardef\@classend=\xe@alloc@intercharclass
%%% Our assigned classes go from \@classstart (excluded) to \@classend (included)
% ----------------------------------------------------------------------------
% Use: \setTransitionsFor{block name}{when entering this block}{when leaving this block}
% ----------------------------------------------------------------------------
\def\setTransitionsFor#1#2#3{%
\ifcsname enable#1\endcsname
\count@=\@classstart
\loop\ifnum\count@<\@classend
\advance\count@\@ne
\ifnum\count@=\csname #1Class\endcsname\else
\XeTeXinterchartoks\count@ \csname #1Class\endcsname={#2}%
\XeTeXinterchartoks\csname #1Class\endcsname \count@={#3}%
\fi
\repeat
\XeTeXinterchartoks\@cclv\csname #1Class\endcsname={#2}%
\XeTeXinterchartoks\csname #1Class\endcsname\@cclv={#3}%
\else
\if@ucharclassverbose
\PackageWarningNoLine{ucharclasses}{Class #1\MessageBreak
not loaded}%
\fi
\fi
}
% ----------------------------------------------------------------------------
% Use: \setTransitionTo{block name}{what to do when entering this block}
% ----------------------------------------------------------------------------
\def\setTransitionTo#1#2{%
\ifcsname enable#1\endcsname
\count@=\@classstart
\loop\ifnum\count@<\@classend
\advance\count@\@ne
\ifnum\count@=\csname #1Class\endcsname\else
\XeTeXinterchartoks\count@ \csname #1Class\endcsname={#2}%
\fi
\repeat
\XeTeXinterchartoks\@cclv\csname #1Class\endcsname={#2}%
\else
\if@ucharclassverbose
\PackageWarningNoLine{ucharclasses}{Class #1\MessageBreak
not loaded}%
\fi
\fi
}
% ----------------------------------------------------------------------------
% Use: \setTransitionFrom{block name }{what to do when leaving this block}
% ----------------------------------------------------------------------------
\def\setTransitionFrom#1#2{%
\ifcsname enable#1\endcsname
\count@=\@classstart
\loop\ifnum\count@<\@classend
\advance\count@\@ne
\ifnum\count@=\csname #1Class\endcsname\else
\XeTeXinterchartoks\csname #1Class\endcsname \count@={#2}%
\fi
\repeat
\XeTeXinterchartoks\csname #1Class\endcsname\@cclv={#2}%
\else
\if@ucharclassverbose
\PackageWarningNoLine{ucharclasses}{Class #1\MessageBreak
not loaded}%
\fi
\fi
}
% ----------------------------------------------------------------------------
% Informal Block Rules - for these, to/from must always be defined
%
% Available informal groups are:
%
% - Arabics
% - Chinese (including bopomofo)
% - CJK (Chinese/Japanese/Korean)
% - Cyrillics
% - Diacritics
% - Greek
% - Japanese (it is advised to set CJK first to a catch-all, then set Japanese for specifics)
% - Korean (=Hangul) (same comment as for Japanese)
% - Latin
% - Mathematics
% - Phonetics
% - Punctuation
% - Symbols
% - Yi
% - Other (I am not a fan of lump groups. I hope to un-lump most of it)
%
% ----------------------------------------------------------------------------
%% For each class group Z we define \setTransitionsForX as
%% \newcommand\setTransitionsForZ[2]{%
%% \setTransitionsFor{X1}{#1}{#2}
%% \setTransitionsFor{X2}{#1}{#2}
%% ...
%% \setTransitionsFor{Xn}{#1}{#2}}
%% where X1, X2, ..., Xn are the blocks in group Z
\def\do#1{\noexpand\setTransitionsFor{#1}{####1}{####2}}
\def\doclass#1{
\begingroup\edef\x{\endgroup
\noexpand\newcommand
\unexpanded\expandafter{\csname setTransitionsFor#1\endcsname}[2]%
{\csname #1Classes\endcsname}}\x}
\ClassGroups
% ----------------------------------------------------------------------------
%
% based on the previous informal groups, we can define a catch-all transition command
%
% ----------------------------------------------------------------------------
%% The following is equivalent to define
%% \newcommand{\setDefaultTransitions[2]{
%% \setTransitionsForArabic{#1}{#2}
%% ...
%% \setTransitionsForOther{#1}{#2}}
\def\doclass#1{%
\expandafter\noexpand\csname setTransitionsFor#1\endcsname{####1}{####2}}
\begingroup\edef\x{\endgroup
\noexpand\newcommand\noexpand\setDefaultTransitions[2]{%
\ClassGroups}}\x
% ----------------------------------------------------------------------------
\let\do\@undefined\let\doclass\@undefined
\endinput
%
% End of file `ucharclasses.sty'.