1#!/bin/sh
2#-*- mode: Tcl;time-stamp-start:"TimeStamp[ 	]+\\\\?[\"<]+";-*-
3# the next line restarts using wish \
4exec /usr/local/bin/wish8.6 $0 -- $@
5set TimeStamp "2008-09-11 20:14:21 poser"
6#
7# Copyright (C) 2003-2008 William J. Poser (billposer@alum.mit.edu)
8# This program is free software; you can redistribute it and/or modify
9# it under the terms of version 3 of the GNU General Public License
10# as published by the Free Software Foundation.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15# GNU General Public License for more details.
16#
17# A copy of the GNU General Public License is contained in the
18# procedure "License" in this file.
19# If it is not, write to the Free Software
20# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21# or go to the web page:  http://www.gnu.org/licenses/gpl.txt.
22
23set Version "8.26";
24set DevP 0;				# Development stuff short of debugging?
25set DebugP 0;				# General debugging? (settable from command line)
26set FeatureTestDebugP 0;		# Debug program feature tests? (settable from command line)
27package require Iwidgets
28package require msgcat
29proc _ {s} {return [::msgcat::mc $s]};	# Define shorthand for gettext
30proc ProgramTimeDateStamp {} {
31    set sts [split $::TimeStamp]
32    return "[lindex $sts 0] [lindex $sts 1]"
33}
34
35#For debugging messages
36proc dmsg {msg} {
37    if {$::DebugP} {
38	puts stderr $msg;
39	flush stderr;
40    }
41}
42
43#For dev messages
44proc devmsg {msg} {
45    if {$::DevP} {
46	puts stderr $msg;
47	flush stderr;
48    }
49}
50
51
52#No op
53proc nil {args} {
54}
55
56proc TraceGlobalArrayEntry {n m o} {
57    set val [set ::${n}($m)]
58    puts [format "%s(%s) <- %s" $n $m $val]
59}
60
61#Portability
62#Figure out what system we are running on
63if {[string equal $tcl_platform(platform) windows]} {
64    set System MSWindows;
65    dmsg "Running under MS Windows";
66} elseif {[string equal $tcl_platform(platform) unix]} {
67    if {[string equal $tcl_platform(os) Darwin]} {
68	set System MacOSX;
69	dmsg "Running under Mac OS X";
70    } else {
71	set System Unix;
72	dmsg "Running under Unix";
73    }
74}
75
76#Find out what our base graphics system is
77if {[string match X11*  [winfo server .]]} {
78    set AquaP 0
79    set WindowSystem X11
80} else {
81    if {[string match $System MSWindows]} {
82	set AquaP 0;
83	set WindowSystem MSWindows;
84    }
85    if {[string match $System MacOSX]} {
86	set AquaP 1
87	set WindowSystem Aqua
88    }
89}
90
91switch $System {
92    Unix {
93	event add <<B3>> <ButtonPress-3>
94	event add <<B3Release>> <ButtonRelease-3>
95    }
96    MacOSX {
97	event add <<B3>> <Control-ButtonPress-1>
98	event add <<B3Release>> <Control-ButtonRelease-1>
99    }
100    MSWindows {
101	event add <<B3>> <ButtonPress-3>
102	event add <<B3Release>> <ButtonRelease-3>
103	set InitFile "RedetInit";
104	set HistoryFile "RedetHistory";
105	set JournalFile "RedetLog";
106	set ColorFile "RedetColors";
107	set NonBinPath [file dirname [info script]];
108	set ::env(CYGWIN) "";
109    }
110}
111
112#Find out if we are running in Tcl/Tk 8.5 or greater
113#This matters because fonts are bigger in 8.5+ under Linux
114set TkEightFivePlusOnX11P 0
115set VLevelList [split [info patchlevel] "."]
116set Major [lindex $VLevelList 0]
117set Minor [lindex $VLevelList 1]
118if {$WindowSystem eq "X11"} {
119    if {$Major > 8} {
120	set TkEightFivePlusOnX11P 1
121    } else {
122	if {($Major == 8) && ($Minor >= 5)} {
123	    set TkEightFivePlusOnX11P 1
124	}
125    }
126}
127
128if {[info exists ::env(TMP)]} {
129    set TempDir $::env(TMP);
130} elseif {[info exists ::env(TEMP)]} {
131    set TempDir $::env(TEMP);
132} else {
133    if {$tcl_platform(platform) == "windows"} {
134	set TempDir "C:\tmp";
135    } else {
136	set TempDir "/tmp";
137    }
138}
139
140
141# Set UseDiffP to zero to prevent testing for the presence of diff.
142# which on some systems causes problems. The only consequence
143# will be the unavailability of the popup showing the differences between
144# actual output and comparison data.
145set UseDiffP 1;
146
147#If you are running this under MS Windows without using cygwin and
148#wish, the Tcl/Tk windowing shell, will not work properly, try using tclsh.exe
149#as the Tcl interpreter and uncomment the following line to import Tk.
150#package require Tk
151
152#trace add variable ColorSpecs(Messages,Background) write TraceGlobalArrayEntry
153
154set InitFile     ".redetrc";
155set HistoryFile  ".redethist";
156set JournalFile  ".redetlog";
157set ColorFile    ".redetcolors";
158set NonBinPath [file join /usr local share Redet];
159
160#Flags showing whether windows are editable
161set INDEditableP 0;
162set OUTEditableP 0;
163set COMEditableP 0;
164
165
166#These aliases for the various widgets facilitate making changes in the
167#widget hierarchy.
168set REG .rsf.re;
169set SUB .rsf.sub;
170set COM .dwf.comp;
171set IND .dwf.in;
172set OUT .dwf.out;
173set INDSB .dwf.indsbar;
174set OUTSB .dwf.outsbar;
175set COMSB .dwf.comsbar;
176set HISTF .hl.f
177set PALF  .pal.f
178
179#Limits
180set ShellItemLimit 500
181
182#Parameters
183set MainWidth 65;
184set MainHeight 10;
185set PopupLines 15;
186set InterfaceLocaleListHeight 15;		# Number of lines to display.
187set HPWidth 60;				# Width of help popups.
188set HPLines 10;				# Number of lines for help popups.
189set PaletteHeightLimit 20
190
191set DefaultBrowser xdg-open
192set BrowserList [list firefox mozilla epiphany galeon konqueror dillo netscape opera]
193set BrowserPIDS [list];
194#Defaults
195
196set CommandLineProgram "";
197set BeginInSubstitutionModeP 0;
198set DefaultProgram "tcl";
199#set DefaultProgram "egrep";
200set Program ""; #Capitalized version.
201set program $DefaultProgram; #Lower-case version.
202#This is just for documentation. We actually set this just after reading
203#the init file. We need to record the initial program so that we have
204#something to default to if the user aborts a feature test.
205set InitialProgram $DefaultProgram;
206set FirstTestP 1;
207
208set ButtonName "";
209
210set LeftImplicitStar  "*";
211set RightImplicitStar "*";
212
213set ColorSpecs(AlertDismiss,Background)	"\#2200FF";
214set ColorSpecs(AlertDismiss,Foreground)	"\#FFCC00";
215set ColorSpecs(Alert,Background)		"\#c36176";
216set ColorSpecs(Alert,Foreground)		"\#FFFFFF";
217set ColorSpecs(Default,Background) \#FFD8B1
218set ColorSpecs(IPAEntry,Background)		"\#FFFFFF";
219set ColorSpecs(IPAEntry,Foreground)		"\#000000";
220set ColorSpecs(IPAHeadings,Background)		"\#09ffb2";
221set ColorSpecs(Match,Background)		white
222set ColorSpecs(Menu,ActiveBackground)	        salmon
223set ColorSpecs(Menu,ActiveForeground)	        black
224set ColorSpecs(Menu,Background)			"\#FFC192"
225set ColorSpecs(Menu,Foreground)			black
226set ColorSpecs(Menu,Select)			blue
227set ColorSpecs(ProgramMenu,TestedForeground)		black
228set ColorSpecs(ProgramMenu,TestedBackground)		"\#D0D0FF"
229set ColorSpecs(Menubar,Background)	 	"\#c36176";
230set ColorSpecs(Menubar,Foreground)		"\#fee4a9";
231set ColorSpecs(Menubar,ActiveBackground)	"\#fee4a9";
232set ColorSpecs(Menubar,ActiveForeground)	"\#c36176";
233set ColorSpecs(Messages,Background) 		"\#e9c4dc";
234set ColorSpecs(Messages,Foreground) 		"\#000000";
235set ColorSpecs(PopupWidgetDefault,Background)    "\#fee4a9";
236set ColorSpecs(PopupWidgetDefault,Foreground)    black
237set ColorSpecs(PopupWidgetButton,Background)    "\#FBAA9A"
238set ColorSpecs(PopupWidgetButton,Foreground)    black
239set ColorSpecs(PopupWidgetCheckbutton,Foreground)    black
240set ColorSpecs(PopupWidgetEntry,Background)    "\#BBBBFF"
241set ColorSpecs(PopupWidgetEntry,Foreground)    black
242set ColorSpecs(PopupWidgetLabel,Background)    "\#FEE4A9";
243set ColorSpecs(PopupWidgetLabel,Foreground)    black
244set ColorSpecs(ProgramInfoPopup,Background)    "\#B5E1FF"
245set ColorSpecs(ProgramInfoPopup,Foreground)    black;
246#set ColorSpecs(ProgramSpecificControls,Background)	"\#FFBD9A"
247set ColorSpecs(ProgramSpecificControls,Background)	grey
248set ColorSpecs(ProgramSpecificControls,Foreground)	black;
249set ColorSpecs(ProgramSpecificControls,ActiveBackground)	blue;
250set ColorSpecs(ProgramSpecificControls,ActiveForeground)	yellow;
251set ColorSpecs(ProgramSpecificControls,Select)	green;
252set ColorSpecs(ProgramSpecificControls,EntryBackground)	white
253set ColorSpecs(ProgramSpecificControls,EntryForeground)	black
254set ColorSpecs(ProgramSpecificControls,DisabledEntryBackground)	coral;
255set ColorSpecs(Regexp,Background)		"\#08ffb1";
256set ColorSpecs(Regexp,Foreground)		"\#0c1816";
257set ColorSpecs(Subexp,Background) 		"\#FFFFFF";
258set ColorSpecs(Subexp,Foreground) 		"\#000000";
259set ColorSpecs(TestData,Background) 		"\#e9c4dc";
260set ColorSpecs(TestData,Foreground) 		"\#000000";
261set ColorSpecs(Results,Background) 		"\#e6b483";
262set ColorSpecs(Results,Foreground) 		"\#000000";
263set ColorSpecs(ComparisonData,Background)		"\#a3d6a1";
264set ColorSpecs(ComparisonData,Foreground)		"\#0c1816";
265set ColorSpecs(PaletteGloss,Background)		"\#B5B5D9";
266set ColorSpecs(PaletteGloss,Foreground)		"\#0c1816";
267set ColorSpecs(PaletteNotation,Background)		"\#B5B5D9";
268set ColorSpecs(PaletteNotation,Foreground)		"\#0c1816";
269set ColorSpecs(PaletteScrollbarSlider,Highlight) salmon;
270set ColorSpecs(PaletteSelectionGloss)     NavajoWhite
271set ColorSpecs(PaletteSelectionRegexp)    NavajoWhite
272set ColorSpecs(PaletteHighlight,Background)    	"\#E23A6C"
273set ColorSpecs(PaletteHighlight,Foreground)    	yellow
274set ColorSpecs(Palette,Variable) 	 "\#A4E9FF";
275set ColorSpecs(Palette,Fixed)    	 wheat
276set ColorSpecs(TextDisplay,Background) NavajoWhite
277#set ColorSpecs(TextDisplay,Background) "\#E6EAF6"
278set ColorSpecs(TextDisplay,Foreground) "\#000000"
279set ColorSpecs(UserTextEntry,Background)	"\#FFFFFF";
280set ColorSpecs(UserTextEntry,Foreground)	black
281set ColorSpecs(ColorConfiguration,Background)	"\#B5B5D9";
282set ColorSpecs(ColorConfiguration,Foreground)		"\#0c1816";
283set ColorSpecs(HistoryList,Background)		"\#B5B5D9";
284set ColorSpecs(HistoryList,Foreground)		"\#0c1816";
285set ColorSpecs(Placard,Background)	"\#eeac99";
286set ColorSpecs(Placard,Foreground)	"\#100e39";
287set ColorSpecs(UserClassPalette,Background)	\#F5E8FF;
288set ColorSpecs(UserClassPalette,Foreground)	black;
289set ColorSpecs(UserPaletteEntry,Background)	"\#F88E1A"
290
291#Initializations
292
293set Pars(TestDataEncoding) utf-8
294set Pars(ComparisonDataEncoding) utf-8
295set Pars(ResultEncoding) utf-8
296set UseScrollbarsP 1;
297set ExecutionFlag Normal;		# This is used to forestall actual execution
298					# when saving the command line etc.
299set UpdateJavaByteCodeP 1;
300set AutoClearRegexpP 0;
301set StandardConfigurationP 1;
302set UserClassesEnabledP 0;
303set DoSubstitutionsP 0;
304set OutputOnlyChangedLinesP 1;
305set SideBySideLayoutP 0;
306set RegSubSideBySideP 0;
307set FeatureTestP 1;
308set ComparisonDataFromWindowP 0;
309set ComparisonWindowDisplayedP 0;
310set InputDataFromWindowP 0;
311set OutputFromWindowP 0;
312set IPAAIsDisplayedP 0;
313set IPACIsDisplayedP 0;
314set IPAVIsDisplayedP 0;
315set IPADIsDisplayedP 0;
316set CharEntryByCodeIsDisplayedP 0;
317set TwoCaseP 0;
318set PaletteIsDisplayedP 0;
319set PaletteToBeDisplayedP 0;
320set PaletteFeatures 0;
321set PipeP 0;
322set BalloonHelpP 1;
323set ReadHistoryFileP 1;
324set ReadInitFileP 1;
325set FocusFollowsMouseP 0;
326set InitialTestInputDataFile "";
327set TestingFeaturesP 0;
328set SortUnicodeRangesByCodepointP 0;
329set ShowActualRegexpP 0;
330set PreviousActualRegexp "";
331set CharentryMenuItems 6;
332set AbortFeatureTestP 0;
333set WhichFontToSet MainFont
334set CharacterEntryMenuItems 0;
335set FeatureFileList [list];
336
337
338set Messages(CommandLineCaseInsensitiveFlagMSGStd) [_ "Match without regard to case?"]
339set Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef) \
340    [_ "Match without regard to case?\n(This flag has no effect on back references.)"]
341
342set ProgList [lsort -dictionary [list \
343agrep\
344arena\
345awk\
346bash\
347BusyBoxEgrep\
348C\
349cgrep\
350ed\
351egrep\
352emacs\
353euphoria\
354expr\
355fgrep\
356fish\
357frink\
358gawk\
359glark\
360grep\
361groovy\
362guile\
363ici\
364icon\
365java\
366javascript\
367jgrep\
368judoscript\
369ksh\
370lua\
371mawk\
372minised\
373mysql\
374nawk\
375nrgrep\
376numgrep\
377patmatch\
378pcregrep\
379perl\
380php\
381pike\
382python\
383rc\
384rebol\
385rep\
386ruby\
387sed\
388sleep\
389sleepwc\
390ssed\
391tcl\
392tclglob\
393tcsh\
394tr\
395vim\
396wmagrep\
397zsh]];
398set DetailedProgList [lsort -dictionary [list \
399agrep\
400arena\
401awk\
402bash\
403BusyBoxEgrep\
404C\
405cgrep\
406ed\
407egrep\
408emacs\
409euphoria\
410expr\
411fgrep\
412fish\
413frink\
414gawk\
415glark\
416grep\
417groovy\
418guile\
419ici\
420icon\
421java\
422javascript\
423jgrep\
424judoscript\
425ksh\
426lua\
427mawk\
428minised\
429mysql\
430nawk\
431nrgrep\
432numgrep\
433patmatch\
434pcregrep\
435perl\
436php-mb\
437php-pcre\
438php-posix\
439pike\
440python\
441rc\
442rebol\
443rep\
444ruby\
445sed\
446sleep\
447sleepwc\
448ssed\
449tcl\
450tclglob\
451tcsh\
452tr\
453vim\
454wmagrep\
455zsh]];
456
457
458proc ListSupportedPrograms {fh} {
459    puts $fh "Supported Programs:"
460    foreach p $::DetailedProgList {
461	if {!$::ProgramInfo($p,AvailableP)} {
462	    puts $fh [format "%-20s\t \[not available\]" $p]
463	} else {
464	    puts $fh [format "%-20s" $p]
465	}
466    }
467}
468
469#Feature tests are executed in the order of this list
470set PropertyList [list\
471tested\
472CposRange\
473RegionDoubleDot\
474dot\
475UnderscoreAnySingle\
476SingleOctet\
477DotAnySingle\
478XAnySingle\
479NAnySingleNucleotide\
480RAnySinglePurineBase\
481YAnySinglePyramidineBase\
482SBaseGC\
483WBaseAT\
484MBaseAC\
485KBaseGT\
486VBaseACG\
487HBaseACT\
488DBaseAGT\
489BBaseCGT\
490JResidueHydrophobic\
491OResidueHydrophilic\
492BResidueDN\
493ZResidueEQ\
494StarAny\
495PercentAny\
496StarPrev\
497CrosshatchPrev\
498DoubleCrosshatchPrev\
499StarNext\
500starclass\
501PossStar\
502SubReluctantStarPrevDollar\
503SubReluctantStarPrevBackslash\
504SubHyphenClass\
505plusany\
506plusprev\
507plusprevbs\
508plusclass\
509PossPlus\
510plusnext\
511SubReluctantPlusPrevDollar\
512SubReluctantPlusPrevBackslash\
513crosshatchany\
514atsignonenext\
515qm1\
516qm1bs\
517qmopt\
518qmoptbs\
519EqualOptbs\
520qmoptdbsnqq\
521qmoptclass\
522qmoptnext\
523PossQMark\
524SubReluctantQuestionMarkPrevDollar\
525SubReluctantQuestionMarkPrevBackslash\
526commaor\
527semiand\
528ampandbs\
529pipe\
530pipebs\
531pipedbs\
532pipebsall\
533pipedbsall\
534altcomma\
535group\
536GroupNoWildcards\
537groupbs\
538groupdbsnqq\
539groupdbs\
540ncgroup\
541ncgroupdb\
542NoCaptureGroupPercentbsall\
543ObligatoryQuantifierGroup\
544SelfishNoCaptureGroup\
545SelfishNoCaptureGroupA\
546SelfishNoCaptureGroupB\
547SelfishNoCaptureGroupC\
548taggedgroup\
549taggedgroupsq\
550taggedgroupref\
551groupcomp\
552backref\
553backrefdbs\
554backrefksh\
555backrefper\
556backrefbsall\
557backrefdbsall\
558backrefAtLeastTen\
559backrefkshAtLeastTen\
560backrefdbsAtLeastTen\
561backrefperAtLeastTen\
562backrefbsallAtLeastTen\
563backrefdbsallAtLeastTen\
564reprange\
565reprangebs\
566reprangelbs\
567reprangedbs\
568PossMToN\
569repfixed\
570repfixedbs\
571repfixeddbs\
572repmin\
573repminbs\
574repmindbs\
575PossAtLeastM\
576repmax\
577repmaxlbs\
578ZeroOrMoreCurly\
579SubReluctantIntegerRangeDollar\
580SubReluctantIntegerRangeBackslash\
581ReluctantIntegerRangeVIMBackslash\
582ReluctantAtLeastMVIMBackslash\
583ReluctantAtMostNVIMBackslash\
584ReluctantExactlyMVIMBackslash\
585SubReluctantZeroOrMoreVIMBackslash\
586ColumnSpecifier\
587PreColumnSpecifier\
588PostColumnSpecifier\
589rangerebol\
590piperebol\
591lowerrebol\
592upperrebol\
593alpharebol\
594digitrebol\
595xdigitrebol\
596alnumrebol\
597IntegerMultiple\
598IntegerFactor\
599IntegerAlternative\
600set\
601setcomp\
602setcomptilde\
603setcompbang\
604range\
605multirange\
606Range128\
607Range129\
608CrossUnicodeBlockP\
609IntegerRange\
610IntegerRangeDoubleDot\
611CollationClass\
612CollatingElementNamed\
613CollatingElementMultichar\
614baldlim\
615NegativeCircumflex\
616MatchNotMatchTilde\
617W3CharClassSubtraction\
618caret\
619PercentCaretBS\
620dollar\
621PercentDollarBS\
622LessThanBeginning\
623GreaterThanEnd\
624AbsoluteEndOfString\
625pabegin\
626pabegindb\
627boslq\
628pzendbs\
629pzenddbs\
630pZendbs\
631pZenddbs\
632eosrq\
633langle\
634rangle\
635BeginWordm\
636EndWordM\
637WordBoundary\
638WordBoundaryBs\
639WordBoundaryybs\
640WordBoundaryydbs\
641NonWordBoundary\
642NonWordBoundaryYbs\
643alnum\
644alpha\
645BackspaceClass\
646blank\
647cntrl\
648digit\
649EscapeClass\
650graph\
651lower\
652print\
653mockprint\
654perlprint\
655punct\
656space\
657TabClass\
658upper\
659wordclass\
660xdigit\
661LangleClass\
662RangleClass\
663compposixclassinner\
664compposixclassouter\
665SubLower\
666SubUpper\
667SubDigit\
668SubPunct\
669SubCntrl\
670SubAlnum\
671SubAlpha\
672SubBlank\
673SubSpace\
674SubGraph\
675SubPrint\
676SubXdigit\
677jLower\
678jLowerdb\
679jLowerc\
680jLowercdb\
681jUpper\
682jUpperdb\
683jUpperc\
684jUppercdb\
685jDigit\
686jDigitdb\
687jDigitc\
688jDigitcdb\
689jPunct\
690jPunctdb\
691jPunctc\
692jPunctcdb\
693jCntrl\
694jCntrldb\
695jCntrlc\
696jCntrlcdb\
697jAlpha\
698jAlphadb\
699jAlphac\
700jAlphacdb\
701jXdigit\
702jXdigitdb\
703jXdigitc\
704jXdigitcdb\
705jAlnum\
706jAlnumdb\
707jAlnumc\
708jAlnumcdb\
709jGraph\
710jGraphdb\
711jGraphc\
712jGraphcdb\
713jPrint\
714jPrintdb\
715jPrintc\
716jPrintcdb\
717jBlank\
718jBlankdb\
719jBlankc\
720jBlankcdb\
721jSpace\
722jSpacedb\
723jSpacec\
724jSpacecdb\
725jAscii\
726jAsciidb\
727jAsciic\
728jAsciicdb\
729uname\
730unamedb\
731jUBlockIn\
732jUBlockInc\
733jUBlockIs\
734jUBlockIsc\
735jUBlockBare\
736jUBlockBarec\
737jUCat\
738jUCatc\
739jUCatIn\
740jUCatcIn\
741jUCatIs\
742jUCatcIs\
743jUBlockIndb\
744jUBlockIncdb\
745jUBlockIsdb\
746jUBlockIscdb\
747jUBlockBaredb\
748jUBlockBarecdb\
749jUCatdb\
750jUCatcdb\
751jUCatdbIn\
752jUCatcdbIn\
753jUCatdbIs\
754jUCatcdbIs\
755bsW\
756bsWdb\
757llower\
758llowerc\
759lupper\
760lupperc\
761ldigit\
762ldigitc\
763lpunct\
764lpunctc\
765lcntrl\
766lcntrlc\
767lalpha\
768lalphac\
769lalnum\
770lalnumc\
771lspace\
772lspacec\
773lxdigit\
774lxdigitc\
775pdigit\
776pdigitc\
777pspace\
778pspacec\
779pspacedb\
780pspacedbc\
781pdigitdb\
782pdigitdbc\
783W3Space\
784W3Spacec\
785xmldigit\
786xmldigitc\
787bsw\
788pbsw\
789pbbsw\
790pbsW\
791bell\
792belldb\
793backspace\
794escape\
795escapedb\
796cr\
797crdb\
798tab\
799tabdb\
800controlc\
801controlcdb\
802LiteralMetachar\
803octal\
804octalo\
805octaldb\
806decimald\
807hexl\
808hexldb\
809hexu\
810hexudb\
811HexWideCharCurly\
812HTMLHexReference\
813HTMLDecimalReference\
814AlphaBSa\
815AlphaBSAc\
816UpperCaseBSu\
817UpperCaseBSUc\
818LowerCaseBSl\
819LowerCaseBSLc\
820WordBSw\
821WordBSWc\
822WordHeadBSh\
823WordHeadBSHc\
824XMLInitial\
825XMLInitialc\
826xdigitBSx\
827xdigitBSxc\
828odigitBSo\
829odigitBSOc\
830some\
831any\
832QuoteFollowingMetacharsQDot\
833QuoteFollowingMetacharsMDot\
834ShiftBackToMagicDot\
835TerminateMetacharQuotingDot\
836comment\
837CaseInsensitiveFlagSmallI\
838CaseInsensitiveFlagSmallIu\
839CaseInsensitiveCrosshatch\
840CaseInsensitiveFlagSmallIAsciiLiteral\
841CaseInsensitiveFlagSmallINonAsciiLiteral\
842CaseInsensitiveFlagSmallIuNonAsciiLiteral\
843CaseInsensitiveFlagSmallIAsciiClass\
844CaseInsensitiveFlagSmallINonAsciiClass\
845CaseInsensitiveFlagSmallIuNonAsciiClass\
846CaseInsensitiveFlagSmallIAsciiClassSymmetric\
847CaseInsensitiveFlagSmallINonAsciiClassSymmetric\
848CaseInsensitiveFlagSmallIuNonAsciiClassSymmetric\
849CaseInsensitiveFlagSmallIOctal\
850CaseInsensitiveFlagSmallIHex\
851CaseInsensitiveCrosshatchAsciiLiteral\
852CaseInsensitiveCrosshatchNonAsciiLiteral\
853CaseInsensitiveCrosshatchuNonAsciiLiteral\
854CaseInsensitiveCrosshatchAsciiClass\
855CaseInsensitiveCrosshatchNonAsciiClass\
856CaseInsensitiveCrosshatchuNonAsciiClass\
857CaseInsensitiveCrosshatchAsciiClassSymmetric\
858CaseInsensitiveCrosshatchNonAsciiClassSymmetric\
859CaseInsensitiveCrosshatchuNonAsciiClassSymmetric\
860CaseInsensitiveBSSmallCAsciiLiteral\
861CaseInsensitiveBSSmallCNonAsciiLiteral\
862CaseInsensitiveBSSmallCAsciiClass\
863CaseInsensitiveBSSmallCNonAsciiClass\
864CaseInsensitiveBSSmallCAsciiClassSymmetric\
865CaseInsensitiveBSSmallCNonAsciiClassSymmetric\
866CaseInsensitiveBSSmallCOctal\
867CaseInsensitiveBSSmallCHex\
868CaseInsensitiveAsciiLiteral\
869CaseInsensitiveNonAsciiLiteral\
870CaseInsensitiveAsciiClass\
871CaseInsensitiveNonAsciiClass\
872CaseInsensitiveAsciiClassSymmetric\
873CaseInsensitiveNonAsciiClassSymmetric\
874CaseInsensitiveOctal\
875CaseInsensitiveHex\
876flagCrosshatchICaseSensitive\
877flagCrosshatchlAsymmetricCaseInsensitive\
878CaseInsensitiveCrosshatchOctal\
879CaseInsensitiveCrosshatchHex\
880CaseInsensitiveCLFlagBackrefP\
881CaseInsensitiveBSSmallC\
882CaseSensitiveFlag\
883CaseSensitiveBSBigC\
884FlagQWideScope\
885FlagCrosshatchWideScope\
886FlagBSSmallCWideScope\
887CaseInsensitiveFlagWideScope\
888flagx\
889flagb\
890flage\
891flagq\
892UnsetFlag\
893IgnoreCombiningCharactersBSZ\
894jUnion\
895jInter\
896plookahead\
897plookaheadAtSign\
898plookback\
899plookbackAtSign\
900nlookahead\
901nlookaheadAtSign\
902nlookback\
903nlookbackAtSign\
904CondGroupSimple\
905CondGroupElse\
906CondLookaroundSimple\
907CondLookaroundElse\
908CondPosLookaheadSimple\
909CondPosLookaheadElse\
910CondNegLookaheadSimple\
911CondNegLookaheadElse\
912CondPosLookbackSimple\
913CondPosLookbackElse\
914CondNegLookbackSimple\
915CondNegLookbackElse\
916SubBackRefBare\
917SubBackRefBareAtLeastTen\
918SubBackReferenceDol\
919SubBackReferenceDolAtLeastTen\
920SubBackReferencePercent\
921SubBackReferencePercentAtLeastTen\
922SubBackRefbs\
923SubBackRefParbs\
924SubBackRefbsAtLeastTen\
925SubBackRefParbsAtLeastTen\
926SubBackRefdbs\
927SubBackRefdbsAtLeastTen\
928SubBackRefPardbsdbs\
929SubBackRefPardbsdbsAtLeastTen\
930SubEntBackRefZero\
931SubBackReferenceDolZero\
932SubBackReferencePercentZero\
933SubBackRefdbsZero\
934SubBackRefbsZero\
935SubBackRefParbsZero\
936SubBackRefPardbsdbsZero\
937Subampentbackrefs\
938Subampentbackrefsdbs\
939SubampentbackrefsPardbsdbs\
940SubDolAmpEntBackRef\
941SubPreMatch\
942SubPreMatchDol\
943SubPostMatch\
944SubPostMatchDol\
945SubLastCapture\
946SubLastCaptureDol\
947SubPreMatchLit\
948SubPostMatchLit\
949SubRange\
950SubCStarN\
951SubCStar\
952SubLitString\
953SubDowncaseChar\
954SubUpcaseChar\
955SubDowncaseString\
956SubUpcaseString\
957SubEndCaseDomaine\
958SubEndCaseDomainE\
959SubDowncaseCharDollar\
960SubUpcaseCharDollar\
961SubDowncaseStringDollar\
962SubUpcaseStringDollar\
963SubEndCaseDomaineDollar\
964SubEndCaseDomainEDollar\
965SubNewline\
966ExactMatchWD\
967ExactMatchTRE\
968ExactMatchCgrep\
969TRECostSetting\
970TotalErrorCrosshatchA\
971embedding\
972EmbeddingMatchOnly\
973embeddingLeft\
974embeddingRight\
975unicodebmp\
976unicodefull\
977PossQMarkA\
978PossQMarkB\
979PossStarA\
980PossStarB\
981PossPlusA\
982PossPlusB\
983PossAtLeastMA\
984PossAtLeastMB\
985PossMToNA\
986PossMToNB\
987PossMToNC
988];
989
990array set Features {};		# Array indexed on feature, program, and locale.
991				# Values are 1 if the program has that feature in that locale,
992				# else 0, except for alttype, which is not boolean.
993array set ProgramInfo {};	# This array is used to keep track of special features of
994				# particular programs. It is indexed on program name
995                                # and the various special features.
996set ProgramInfo(agrep,BestResults) 0
997set ProgramInfo(agrep,CaseInsensitiveP) 0
998set ProgramInfo(agrep,TotalCost) 0
999set ProgramInfo(agrep,DeletionCost) 0
1000set ProgramInfo(agrep,InsertionCost) 0
1001set ProgramInfo(agrep,SubstitutionCost) 0
1002set ProgramInfo(agrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1003
1004set ProgramInfo(arena,CaseInsensitiveP) 0;
1005set ProgramInfo(arena,VerboseP) 0;
1006
1007set ProgramInfo(bash,CaseInsensitiveGlobP) 0;
1008set ProgramInfo(bash,CaseInsensitiveMatchP) 0;
1009set ProgramInfo(bash,CaseInsensitiveCLFlagBackrefP) \
1010    [list CaseInsensitiveGlobP 1 CaseInsensitiveMatchP 1]
1011set ProgramInfo(bash,ExtendedP) 1;
1012
1013set ProgramInfo(BusyBoxEgrep,CaseInsensitiveP) 0
1014set ProgramInfo(BusyBoxEgrep,Complement) 0
1015
1016set ProgramInfo(cgrep,CaseInsensitiveP) 0
1017set ProgramInfo(cgrep,Complement) 0
1018set ProgramInfo(cgrep,ExtendedP) 1
1019set ProgramInfo(cgrep,TotalCost) 0
1020set ProgramInfo(cgrep,InsertionCost) 1
1021set ProgramInfo(cgrep,DeletionCost) 1
1022set ProgramInfo(cgrep,SubstitutionCost) 1
1023set ProgramInfo(cgrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1024
1025set ProgramInfo(egrep,CaseInsensitiveP) 0
1026set ProgramInfo(egrep,EmitMatchOnly) 0;
1027set ProgramInfo(egrep,Complement) 0
1028set ProgramInfo(egrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1029
1030set ProgramInfo(emacs,FoldCaseMatchP) 0
1031set ProgramInfo(emacs,FoldCaseReplaceP) 0
1032set ProgramInfo(emacs,CaseInsensitiveCLFlagBackrefP) [list FoldCaseMatchP 1]
1033
1034set ProgramInfo(fgrep,CaseInsensitiveP) 0
1035set ProgramInfo(fgrep,Complement) 0
1036set ProgramInfo(fgrep,EmitMatchOnly) 0
1037set ProgramInfo(fgrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1038
1039set ProgramInfo(flex,CaseInsensitiveP) 0;
1040
1041set ProgramInfo(gawk,CaseInsensitiveP) 0;
1042set ProgramInfo(gawk,IntervalExpressions) 1;
1043set ProgramInfo(gawk,Notation) GNU;
1044set ProgramInfo(gawk,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1045
1046set ProgramInfo(glark,CaseInsensitiveP) 0;
1047set ProgramInfo(glark,EmitMatchOnly) 0;
1048set ProgramInfo(glark,Complement) 0;
1049set ProgramInfo(glark,MatchEntireLine) 0;
1050set ProgramInfo(glark,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1051
1052set ProgramInfo(grep,CaseInsensitiveP) 0
1053set ProgramInfo(grep,Notation) Basic;
1054set ProgramInfo(grep,EmitMatchOnly) 0;
1055set ProgramInfo(grep,Complement) 0
1056set ProgramInfo(grep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1057
1058set ProgramInfo(ici,CaseInsensitiveP) 0;
1059set ProgramInfo(ici,VerboseP) 0;
1060set ProgramInfo(ici,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1061
1062set ProgramInfo(java,CanonEQ) 1;
1063set ProgramInfo(java,CaseInsensitiveP) 0;
1064set ProgramInfo(java,UnicodeCase) 0;
1065set ProgramInfo(java,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1066
1067set ProgramInfo(jgrep,CaseInsensitiveP) 0;
1068set ProgramInfo(jgrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1069
1070set ProgramInfo(mysql,RegexpP) 1;
1071
1072set ProgramInfo(nrgrep,CaseInsensitiveP) 0
1073set ProgramInfo(nrgrep,ComplementP) 0
1074set ProgramInfo(nrgrep,TotalCost) 0
1075set ProgramInfo(nrgrep,InsertionsP) 1
1076set ProgramInfo(nrgrep,DeletionsP) 1
1077set ProgramInfo(nrgrep,SubstitutionsP) 1
1078set ProgramInfo(nrgrep,TranspositionsP) 1
1079set ProgramInfo(nrgrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1080
1081set ProgramInfo(numgrep,OutputNumberByNumberP) 0;
1082
1083set ProgramInfo(patmatch,MismatchNumber) 0;
1084set ProgramInfo(patmatch,MismatchTypes) ids;
1085set ProgramInfo(patmatch,ResidueType) n;
1086#Note that the specification of parameters only for the following
1087#four tests assumes that the other tests will be done with
1088#the default of n. The default for ResidueType cannot be
1089#changed without changing the settings here.
1090set ProgramInfo(patmatch,JResidueHydrophobic) [list ResidueType p]
1091set ProgramInfo(patmatch,OResidueHydrophilic) [list ResidueType p]
1092set ProgramInfo(patmatch,BResidueDN) [list ResidueType p]
1093set ProgramInfo(patmatch,ZResidueEQ) [list ResidueType p]
1094
1095set ProgramInfo(pcregrep,CaseInsensitiveP) 0;
1096set ProgramInfo(pcregrep,EmitMatchOnly) 0;
1097set ProgramInfo(pcregrep,Complement) 0
1098set ProgramInfo(pcregrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1099
1100set ProgramInfo(perl,UnicodeLocaleDependentP) 0;
1101
1102set ProgramInfo(python,RawStringP) 1;
1103
1104set ProgramInfo(sed,Which) othersed;#default
1105set ProgramInfo(sed,ExtendedRegexp) 0;
1106
1107set ProgramInfo(sgrep,CaseInsensitiveP) 0;
1108set ProgramInfo(sgrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1109
1110#options: basic, extended, perl
1111set ProgramInfo(ssed,RegexpType) perl;
1112set ProgramInfo(ssed,POSIX) 0;
1113
1114set ProgramInfo(tcl,CaseInsensitiveP) 0;
1115set ProgramInfo(tcl,EmitMatchOnlyP) 0
1116set ProgramInfo(tcl,ExpandedP) 0;
1117set ProgramInfo(tcl,CaseSensitiveFlag) [list CaseInsensitiveP 1]
1118set ProgramInfo(tcl,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1119
1120set ProgramInfo(tr,Complement) 0;
1121set ProgramInfo(tr,Squeeze) 0;
1122set ProgramInfo(tr,Truncate) 0;
1123
1124set ProgramInfo(vim,CaseInsensitiveP) 0
1125set ProgramInfo(vim,ListModeP) 0
1126set ProgramInfo(vim,SmartCaseP) 0
1127set ProgramInfo(vim,SubstitutionGlobalP) 1
1128set ProgramInfo(vim,CaseSensitiveBSBigC) [list CaseInsensitiveP 1]
1129set ProgramInfo(vim,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1130
1131set ProgramInfo(wmagrep,BestResults) 0
1132set ProgramInfo(wmagrep,CaseInsensitiveP) 0
1133set ProgramInfo(wmagrep,TotalCost) 0
1134set ProgramInfo(wmagrep,DeletionCost) 0
1135set ProgramInfo(wmagrep,InsertionCost) 0
1136set ProgramInfo(wmagrep,SubstitutionCost) 0
1137set ProgramInfo(wmagrep,CaseInsensitiveCLFlagBackrefP) [list CaseInsensitiveP 1]
1138
1139
1140set ProgramInfo(zsh,ExtendedGlobP) 1;
1141set ProgramInfo(zsh,KornQuantifiersP) 1;
1142
1143set LeftRubyStringDelimiter ";";
1144set RightRubyStringDelimiter ";";
1145array set PopupList {};
1146array set PopupList {};
1147array set CommandGlosses {};
1148array set Wlist {}; #Maps color palette indices to internal names.
1149set PaletteIndex 0; #Used by color configuration system.
1150
1151set PHPPCRE 0;				# Perl style regexps in PHP
1152set PHPMB 0;				# Multibyte extension for PHP regexps?
1153
1154set InData "";
1155set ComparisonData "";
1156set RegexpResult "";
1157set DiffPopup "";
1158
1159set InterfaceLocale "";
1160set InterfaceLocaleText "";
1161set ProposedInterfaceLocale "";
1162
1163set wret 0;
1164
1165#File names
1166set ClassName [format "RedetComm%d" [pid]];# Used for Java files.
1167set CommandFile [file join $TempDir $ClassName];
1168set CSourceFile [file join $TempDir [format "Redet%d.c" [pid]]];
1169set JavaMatchClassName [format "%sMatch" $ClassName];
1170set JavaMatchClassFile [format "%sMatch.class" $CommandFile];
1171set JavaMatchFile [format "%sMatch.java" $CommandFile];
1172set JavaSubClassName [format "%sSub" $ClassName];
1173set JavaSubClassFile [format "%sSub.class" $CommandFile];
1174set JavaSubFile [format "%sSub.java" $CommandFile];
1175set TestFile [file join $TempDir  [format "RedetData%d" [pid]]];
1176set TempCompFile [file join $TempDir  [format "RedetComp%d" [pid]]];
1177set TempOutputFile [file join $TempDir  [format "RedetOut%d" [pid]]];
1178set TempSortFile [file join $TempDir  [format "RedetSort%d" [pid]]];
1179set TempGlobDir [file join $TempDir  [format "RedetDirr%d" [pid]]];
1180set DiffResultFile [file join $TempDir  [format "RedetDiff%d" [pid]]];
1181set EmacsOutputFile [file join $TempDir  [format "RedetEmacsout%d" [pid]]];
1182set EmacsWrapper [file join $TempDir  [format "RedetEmacswrapper%d" [pid]]];
1183set VersionFile [format "redet%dgetv.txt" [pid]];
1184set FeatureTestLogHandle "";
1185
1186set PropertyUse(tested,TestP) 0;
1187set PropertyUse(BooleanAnd,TestP) 1;
1188set PropertyUse(group,TestP) 1;
1189set PropertyUse(GroupNoWildcards,TestP) 1;
1190set PropertyUse(groupbs,TestP) 1;
1191set PropertyUse(groupdbsnqq,TestP) 1;
1192set PropertyUse(groupdbs,TestP) 1;
1193set PropertyUse(ncgroup,TestP) 1;
1194set PropertyUse(ncgroupdb,TestP) 1;
1195set PropertyUse(NoCaptureGroupPercentbsall,TestP) 1;
1196set PropertyUse(ObligatoryQuantifierGroup,TestP) 0;
1197set PropertyUse(SelfishNoCaptureGroup,TestP) 0;
1198set PropertyUse(SelfishNoCaptureGroupA,TestP) 1;
1199set PropertyUse(SelfishNoCaptureGroupB,TestP) 1;
1200set PropertyUse(SelfishNoCaptureGroupC,TestP) 1;
1201set PropertyUse(taggedgroup,TestP) 1;
1202set PropertyUse(taggedgroupsq,TestP) 1;
1203set PropertyUse(taggedgroupref,TestP) 0;
1204set PropertyUse(groupcomp,TestP) 1;
1205set PropertyUse(dot,TestP) 1;
1206set PropertyUse(UnderscoreAnySingle,TestP) 1;
1207set PropertyUse(XAnySingle,TestP) 1;
1208set PropertyUse(DotAnySingle,TestP) 1;
1209set PropertyUse(SingleOctet,TestP) 1;
1210set PropertyUse(RAnySinglePurineBase,TestP) 1;
1211set PropertyUse(YAnySinglePyramidineBase,TestP) 1;
1212set PropertyUse(SBaseGC,TestP) 1;
1213set PropertyUse(WBaseAT,TestP) 1;
1214set PropertyUse(MBaseAC,TestP) 1;
1215set PropertyUse(KBaseGT,TestP) 1;
1216set PropertyUse(VBaseACG,TestP) 1;
1217set PropertyUse(HBaseACT,TestP) 1;
1218set PropertyUse(DBaseAGT,TestP) 1;
1219set PropertyUse(BBaseCGT,TestP) 1;
1220set PropertyUse(NAnySingleNucleotide,TestP) 1;
1221set PropertyUse(JResidueHydrophobic,TestP) 1;
1222set PropertyUse(OResidueHydrophilic,TestP) 1;
1223set PropertyUse(BResidueDN,TestP) 1;
1224set PropertyUse(ZResidueEQ,TestP) 1;
1225set PropertyUse(repmax,TestP) 1;
1226set PropertyUse(repmaxlbs,TestP) 1;
1227set PropertyUse(StarPrev,TestP) 1;
1228set PropertyUse(ZeroOrMoreCurly,TestP) 1;
1229set PropertyUse(CrosshatchPrev,TestP) 1;
1230set PropertyUse(DoubleCrosshatchPrev,TestP) 1;
1231set PropertyUse(StarNext,TestP) 1;
1232set PropertyUse(starclass,TestP) 1;
1233set PropertyUse(SubReluctantStarPrevDollar,TestP) 1;
1234set PropertyUse(SubReluctantStarPrevBackslash,TestP) 1;
1235set PropertyUse(SubHyphenClass,TestP) 1;
1236set PropertyUse(SubNewline,TestP) 1;
1237set PropertyUse(StarAny,TestP) 1;
1238set PropertyUse(PercentAny,TestP) 1;
1239set PropertyUse(plusprev,TestP) 1;
1240set PropertyUse(plusnext,TestP) 1;
1241set PropertyUse(plusprevbs,TestP) 1;
1242set PropertyUse(plusclass,TestP) 1;
1243set PropertyUse(SubReluctantPlusPrevDollar,TestP) 1;
1244set PropertyUse(SubReluctantPlusPrevBackslash,TestP) 1;
1245set PropertyUse(plusany,TestP) 1;
1246set PropertyUse(crosshatchany,TestP) 1;
1247set PropertyUse(atsignonenext,TestP) 1;
1248set PropertyUse(qmopt,TestP) 1;
1249set PropertyUse(qmoptnext,TestP) 1;
1250set PropertyUse(qmoptclass,TestP) 1;
1251set PropertyUse(qmoptbs,TestP) 1;
1252set PropertyUse(EqualOptbs,TestP) 1;
1253set PropertyUse(qmoptdbsnqq,TestP) 1;
1254set PropertyUse(qm1,TestP) 1;
1255set PropertyUse(qm1bs,TestP) 1;
1256set PropertyUse(SubReluctantQuestionMarkPrevDollar,TestP) 1;
1257set PropertyUse(SubReluctantQuestionMarkPrevBackslash,TestP) 1;
1258set PropertyUse(commaor,TestP) 1;
1259set PropertyUse(semiand,TestP) 1;
1260set PropertyUse(ampandbs,TestP) 1;
1261set PropertyUse(NegativeCircumflex,TestP) 1;
1262set PropertyUse(MatchNotMatchTilde,TestP) 1;
1263set PropertyUse(W3CharClassSubtraction,TestP) 1;
1264set PropertyUse(caret,TestP) 1;
1265set PropertyUse(PercentCaretBS,TestP) 1;
1266set PropertyUse(PercentDollarBS,TestP) 1;
1267set PropertyUse(pabegin,TestP) 1;
1268set PropertyUse(pabegindb,TestP) 1;
1269set PropertyUse(boslq,TestP) 1;
1270set PropertyUse(dollar,TestP) 1;
1271set PropertyUse(GreaterThanEnd,TestP) 1;
1272set PropertyUse(LessThanBeginning,TestP) 1;
1273set PropertyUse(LiteralMetachar,TestP) 1;
1274set PropertyUse(AbsoluteEndOfString,TestP) 1;
1275set PropertyUse(pzendbs,TestP) 1;
1276set PropertyUse(pzenddbs,TestP) 1;
1277set PropertyUse(pZendbs,TestP) 1;
1278set PropertyUse(pZenddbs,TestP) 1
1279set PropertyUse(eosrq,TestP) 1;;
1280set PropertyUse(langle,TestP) 1;
1281set PropertyUse(rangle,TestP) 1;
1282set PropertyUse(BeginWordm,TestP) 1;
1283set PropertyUse(EndWordM,TestP) 1;
1284set PropertyUse(LangleClass,TestP) 1;
1285set PropertyUse(RangleClass,TestP) 1;
1286set PropertyUse(WordBoundary,TestP) 1;
1287set PropertyUse(WordBoundaryBs,TestP) 1;
1288set PropertyUse(WordBoundaryybs,TestP) 1;
1289set PropertyUse(WordBoundaryydbs,TestP) 1;
1290set PropertyUse(NonWordBoundary,TestP) 1;
1291set PropertyUse(NonWordBoundaryYbs,TestP) 1;
1292set PropertyUse(pipe,TestP) 1;
1293set PropertyUse(pipebs,TestP) 1;
1294set PropertyUse(pipedbs,TestP) 1;
1295set PropertyUse(pipebsall,TestP) 1;
1296set PropertyUse(pipedbsall,TestP) 1;
1297set PropertyUse(altcomma,TestP) 1;
1298set PropertyUse(backref,TestP) 1;
1299set PropertyUse(backrefdbs,TestP) 1;
1300set PropertyUse(backrefper,TestP) 1;
1301set PropertyUse(backrefbsall,TestP) 1;
1302set PropertyUse(backrefdbsall,TestP) 1;
1303set PropertyUse(backrefAtLeastTen,TestP) 1;
1304set PropertyUse(backrefdbsAtLeastTen,TestP) 1;
1305set PropertyUse(backrefperAtLeastTen,TestP) 1;
1306set PropertyUse(backrefbsallAtLeastTen,TestP) 1;
1307set PropertyUse(backrefdbsallAtLeastTen,TestP) 1;
1308set PropertyUse(backrefksh,TestP) 1;
1309set PropertyUse(backrefkshAtLeastTen,TestP) 1;
1310set PropertyUse(CaseInsensitiveFlagSmallIOctal,TestP) 1;
1311set PropertyUse(CaseInsensitiveFlagSmallIHex,TestP) 1;
1312set PropertyUse(CaseInsensitiveCrosshatchOctal,TestP) 1;
1313set PropertyUse(CaseInsensitiveCrosshatchHex,TestP) 1;
1314set PropertyUse(CaseInsensitiveCLFlagBackrefP,TestP) 1;
1315set PropertyUse(repfixed,TestP) 1;
1316set PropertyUse(repfixedbs,TestP) 1;
1317set PropertyUse(repfixeddbs,TestP) 1;
1318set PropertyUse(repmin,TestP) 1;
1319set PropertyUse(repminbs,TestP) 1;
1320set PropertyUse(repmindbs,TestP) 1;
1321set PropertyUse(reprange,TestP) 1;
1322set PropertyUse(reprangebs,TestP) 1;
1323set PropertyUse(reprangelbs,TestP) 1;
1324set PropertyUse(reprangedbs,TestP) 1;
1325set PropertyUse(SubReluctantIntegerRangeDollar,TestP) 1;
1326set PropertyUse(SubReluctantIntegerRangeBackslash,TestP) 1;
1327set PropertyUse(ReluctantIntegerRangeVIMBackslash,TestP) 1;
1328set PropertyUse(ReluctantAtLeastMVIMBackslash,TestP) 1;
1329set PropertyUse(ReluctantAtMostNVIMBackslash,TestP) 1;
1330set PropertyUse(ReluctantExactlyMVIMBackslash,TestP) 1;
1331set PropertyUse(SubReluctantZeroOrMoreVIMBackslash,TestP) 1;
1332set PropertyUse(set,TestP) 1;
1333set PropertyUse(setcomp,TestP) 1;
1334set PropertyUse(setcomptilde,TestP) 1;
1335set PropertyUse(setcompbang,TestP) 1;
1336set PropertyUse(range,TestP) 1;
1337set PropertyUse(multirange,TestP) 1;
1338set PropertyUse(IntegerRange,TestP) 1;
1339set PropertyUse(IntegerRangeDoubleDot,TestP) 1;
1340set PropertyUse(IntegerMultiple,TestP) 1;
1341set PropertyUse(IntegerFactor,TestP) 1;
1342set PropertyUse(IntegerAlternative,TestP) 1;
1343set PropertyUse(baldlim,TestP) 1;
1344set PropertyUse(bsw,TestP) 1;
1345set PropertyUse(alnum,TestP) 1;
1346set PropertyUse(alnumrebol,TestP) 1;
1347set PropertyUse(pbsw,TestP) 1;
1348set PropertyUse(pbbsw,TestP) 1;
1349set PropertyUse(lalnumc,TestP) 1;
1350set PropertyUse(lalnum,TestP) 1;
1351set PropertyUse(bsW,TestP) 1;
1352set PropertyUse(bsWdb,TestP) 1;
1353set PropertyUse(pbsW,TestP) 1;
1354set PropertyUse(alpha,TestP) 1;
1355set PropertyUse(alpharebol,TestP) 1;
1356set PropertyUse(lalpha,TestP) 1;
1357set PropertyUse(lalphac,TestP) 1;
1358set PropertyUse(upper,TestP) 1;
1359set PropertyUse(upperrebol,TestP) 1;
1360set PropertyUse(lupper,TestP) 1;
1361set PropertyUse(lupperc,TestP) 1;
1362set PropertyUse(lower,TestP) 1;
1363set PropertyUse(lowerrebol,TestP) 1;
1364set PropertyUse(llower,TestP) 1;
1365set PropertyUse(llowerc,TestP) 1;
1366set PropertyUse(punct,TestP) 1;
1367set PropertyUse(lpunct,TestP) 1;
1368set PropertyUse(lpunctc,TestP) 1;
1369set PropertyUse(space,TestP) 1;
1370set PropertyUse(lspace,TestP) 1;
1371set PropertyUse(pspace,TestP) 1;
1372set PropertyUse(pspacedb,TestP) 1;
1373set PropertyUse(lspacec,TestP) 1;
1374set PropertyUse(pspacec,TestP) 1;
1375set PropertyUse(pspacedbc,TestP) 1;
1376set PropertyUse(W3Space,TestP) 1;
1377set PropertyUse(W3Spacec,TestP) 1;
1378set PropertyUse(blank,TestP) 1;
1379set PropertyUse(graph,TestP) 1;
1380set PropertyUse(print,TestP) 1;
1381set PropertyUse(mockprint,TestP) 1;
1382set PropertyUse(perlprint,TestP) 1;
1383set PropertyUse(cntrl,TestP) 1;
1384set PropertyUse(lcntrl,TestP) 1;
1385set PropertyUse(lcntrlc,TestP) 1;
1386set PropertyUse(digit,TestP) 1;
1387set PropertyUse(digitrebol,TestP) 1;
1388set PropertyUse(ldigit,TestP) 1;
1389set PropertyUse(pdigit,TestP) 1;
1390set PropertyUse(xmldigit,TestP) 1;
1391set PropertyUse(pdigitdb,TestP) 1;
1392set PropertyUse(ldigitc,TestP) 1;
1393set PropertyUse(pdigitc,TestP) 1;
1394set PropertyUse(xmldigitc,TestP) 1;
1395set PropertyUse(pdigitdbc,TestP) 1;
1396set PropertyUse(xdigit,TestP) 1;
1397set PropertyUse(xdigitrebol,TestP) 1;
1398set PropertyUse(lxdigit,TestP) 1;
1399set PropertyUse(lxdigitc,TestP) 1;
1400set PropertyUse(wordclass,TestP) 1;
1401set PropertyUse(compposixclassinner,TestP) 1;
1402set PropertyUse(compposixclassouter,TestP) 1;
1403set PropertyUse(octal,TestP) 1;
1404set PropertyUse(octalo,TestP) 1;
1405set PropertyUse(octaldb,TestP) 1;
1406set PropertyUse(decimald,TestP) 1;
1407set PropertyUse(hexl,TestP) 1;
1408set PropertyUse(hexldb,TestP) 1;
1409set PropertyUse(hexu,TestP) 1;
1410set PropertyUse(hexudb,TestP) 1;
1411set PropertyUse(HexWideCharCurly,TestP) 1;
1412set PropertyUse(HTMLHexReference,TestP) 1;
1413set PropertyUse(HTMLDecimalReference,TestP) 1;
1414set PropertyUse(AlphaBSa,TestP) 1;
1415set PropertyUse(AlphaBSAc,TestP) 1;
1416set PropertyUse(UpperCaseBSu,TestP) 1;
1417set PropertyUse(UpperCaseBSUc,TestP) 1;
1418set PropertyUse(LowerCaseBSl,TestP) 1;
1419set PropertyUse(LowerCaseBSLc,TestP) 1;
1420set PropertyUse(WordBSw,TestP) 1;
1421set PropertyUse(WordBSWc,TestP) 1;
1422set PropertyUse(WordHeadBSh,TestP) 1;
1423set PropertyUse(WordHeadBSHc,TestP) 1;
1424set PropertyUse(XMLInitial,TestP) 1;
1425set PropertyUse(XMLInitialc,TestP) 1;
1426set PropertyUse(xdigitBSx,TestP) 1;
1427set PropertyUse(xdigitBSxc,TestP) 1;
1428set PropertyUse(odigitBSo,TestP) 1;
1429set PropertyUse(odigitBSOc,TestP) 1;
1430set PropertyUse(bell,TestP) 1;
1431set PropertyUse(belldb,TestP) 1;
1432set PropertyUse(backspace,TestP) 1;
1433set PropertyUse(escape,TestP) 1;
1434set PropertyUse(escapedb,TestP) 1;
1435set PropertyUse(cr,TestP) 1;
1436set PropertyUse(crdb,TestP) 1;
1437set PropertyUse(tab,TestP) 1;
1438set PropertyUse(tabdb,TestP) 1;
1439set PropertyUse(TabClass,TestP) 1;
1440set PropertyUse(EscapeClass,TestP) 1;
1441set PropertyUse(BackspaceClass,TestP) 1;
1442set PropertyUse(controlc,TestP) 1;
1443set PropertyUse(controlcdb,TestP) 1;
1444set PropertyUse(some,TestP) 1;
1445set PropertyUse(any,TestP) 1;
1446set PropertyUse(rangerebol,TestP) 1;
1447set PropertyUse(piperebol,TestP) 1;
1448set PropertyUse(comment,TestP) 1;
1449set PropertyUse(QuoteFollowingMetacharsQDot,TestP) 1;
1450set PropertyUse(QuoteFollowingMetacharsMDot,TestP) 1;
1451set PropertyUse(ShiftBackToMagicDot,TestP) 1;
1452set PropertyUse(TerminateMetacharQuotingDot,TestP) 1;
1453set PropertyUse(CaseSensitiveFlag,TestP) 1;
1454set PropertyUse(CaseInsensitiveFlagSmallI,TestP) 0;
1455set PropertyUse(CaseInsensitiveBSSmallC,TestP) 0;
1456set PropertyUse(CaseSensitiveBSBigC,TestP) 1;
1457set PropertyUse(flagCrosshatchICaseSensitive,TestP) 1;
1458set PropertyUse(flagCrosshatchlAsymmetricCaseInsensitive,TestP) 1;
1459set PropertyUse(CaseInsensitiveCrosshatch,TestP) 0;
1460set PropertyUse(CaseInsensitiveFlagSmallIu,TestP) 0;
1461set PropertyUse(CaseInsensitiveFlagSmallIAsciiLiteral,TestP) 1;
1462set PropertyUse(CaseInsensitiveFlagSmallINonAsciiLiteral,TestP) 1;
1463set PropertyUse(CaseInsensitiveFlagSmallIuNonAsciiLiteral,TestP) 1;
1464set PropertyUse(CaseInsensitiveFlagSmallIAsciiClass,TestP) 1;
1465set PropertyUse(CaseInsensitiveFlagSmallINonAsciiClass,TestP) 1;
1466set PropertyUse(CaseInsensitiveFlagSmallIuNonAsciiClass,TestP) 1;
1467set PropertyUse(CaseInsensitiveFlagSmallIAsciiClassSymmetric,TestP) 1;
1468set PropertyUse(CaseInsensitiveFlagSmallINonAsciiClassSymmetric,TestP) 1;
1469set PropertyUse(CaseInsensitiveFlagSmallIuNonAsciiClassSymmetric,TestP) 1;
1470set PropertyUse(CaseInsensitiveCrosshatchAsciiLiteral,TestP) 1;
1471set PropertyUse(CaseInsensitiveCrosshatchNonAsciiLiteral,TestP) 1;
1472set PropertyUse(CaseInsensitiveCrosshatchuNonAsciiLiteral,TestP) 1;
1473set PropertyUse(CaseInsensitiveCrosshatchAsciiClass,TestP) 1;
1474set PropertyUse(CaseInsensitiveCrosshatchNonAsciiClass,TestP) 1;
1475set PropertyUse(CaseInsensitiveCrosshatchuNonAsciiClass,TestP) 1;
1476set PropertyUse(CaseInsensitiveCrosshatchAsciiClassSymmetric,TestP) 1;
1477set PropertyUse(CaseInsensitiveCrosshatchNonAsciiClassSymmetric,TestP) 1;
1478set PropertyUse(CaseInsensitiveCrosshatchuNonAsciiClassSymmetric,TestP) 1;
1479set PropertyUse(CaseInsensitiveBSSmallCAsciiLiteral,TestP) 1;
1480set PropertyUse(CaseInsensitiveBSSmallCNonAsciiLiteral,TestP) 1;
1481set PropertyUse(CaseInsensitiveBSSmallCAsciiClass,TestP) 1;
1482set PropertyUse(CaseInsensitiveBSSmallCNonAsciiClass,TestP) 1;
1483set PropertyUse(CaseInsensitiveBSSmallCAsciiClassSymmetric,TestP) 1;
1484set PropertyUse(CaseInsensitiveBSSmallCNonAsciiClassSymmetric,TestP) 1;
1485set PropertyUse(CaseInsensitiveBSSmallCOctal,TestP) 1;
1486set PropertyUse(CaseInsensitiveBSSmallCHex,TestP) 1;
1487set PropertyUse(CaseInsensitiveAsciiLiteral,TestP) 0;
1488set PropertyUse(CaseInsensitiveNonAsciiLiteral,TestP) 0;
1489set PropertyUse(CaseInsensitiveAsciiClass,TestP) 0;
1490set PropertyUse(CaseInsensitiveNonAsciiClass,TestP) 0;
1491set PropertyUse(CaseInsensitiveAsciiClassSymmetric,TestP) 0;
1492set PropertyUse(CaseInsensitiveNonAsciiClassSymmetric,TestP) 0;
1493set PropertyUse(CaseInsensitiveOctal,TestP) 0;
1494set PropertyUse(CaseInsensitiveHex,TestP) 0;
1495set PropertyUse(flagx,TestP) 1;
1496set PropertyUse(flagb,TestP) 1;
1497set PropertyUse(flage,TestP) 1;
1498set PropertyUse(flagq,TestP) 1;
1499set PropertyUse(UnsetFlag,TestP) 1;
1500set PropertyUse(FlagQWideScope,TestP) 1;
1501set PropertyUse(FlagCrosshatchWideScope,TestP) 1;
1502set PropertyUse(FlagBSSmallCWideScope,TestP) 1;
1503set PropertyUse(CaseInsensitiveFlagWideScope,TestP) 0;
1504set PropertyUse(jLower,TestP) 1;
1505set PropertyUse(jLowerdb,TestP) 1;
1506set PropertyUse(jLowerc,TestP) 1;
1507set PropertyUse(jLowercdb,TestP) 1;
1508set PropertyUse(jUpper,TestP) 1;
1509set PropertyUse(jUpperdb,TestP) 1;
1510set PropertyUse(jUpperc,TestP) 1;
1511set PropertyUse(jUppercdb,TestP) 1;
1512set PropertyUse(jAscii,TestP) 1;
1513set PropertyUse(jAsciidb,TestP) 1;
1514set PropertyUse(jAsciic,TestP) 1;
1515set PropertyUse(jAsciicdb,TestP) 1;
1516set PropertyUse(jAlpha,TestP) 1;
1517set PropertyUse(jAlphadb,TestP) 1;
1518set PropertyUse(jAlphac,TestP) 1;
1519set PropertyUse(jAlphacdb,TestP) 1;
1520set PropertyUse(jDigit,TestP) 1;
1521set PropertyUse(jDigitdb,TestP) 1;
1522set PropertyUse(jDigitc,TestP) 1;
1523set PropertyUse(jDigitcdb,TestP) 1;
1524set PropertyUse(jXdigit,TestP) 1;
1525set PropertyUse(jXdigitdb,TestP) 1;
1526set PropertyUse(jXdigitc,TestP) 1;
1527set PropertyUse(jXdigitcdb,TestP) 1;
1528set PropertyUse(jAlnum,TestP) 1;
1529set PropertyUse(jAlnumdb,TestP) 1;
1530set PropertyUse(jAlnumc,TestP) 1;
1531set PropertyUse(jAlnumcdb,TestP) 1;
1532set PropertyUse(jPunct,TestP) 1;
1533set PropertyUse(jPunctdb,TestP) 1;
1534set PropertyUse(jPunctc,TestP) 1;
1535set PropertyUse(jPunctcdb,TestP) 1;
1536set PropertyUse(jGraph,TestP) 1;
1537set PropertyUse(jGraphdb,TestP) 1;
1538set PropertyUse(jGraphc,TestP) 1;
1539set PropertyUse(jGraphcdb,TestP) 1;
1540set PropertyUse(jPrint,TestP) 1;
1541set PropertyUse(jPrintdb,TestP) 1;
1542set PropertyUse(jPrintc,TestP) 1;
1543set PropertyUse(jPrintcdb,TestP) 1;
1544set PropertyUse(jBlank,TestP) 1;
1545set PropertyUse(jBlankdb,TestP) 1;
1546set PropertyUse(jBlankc,TestP) 1;
1547set PropertyUse(jBlankcdb,TestP) 1;
1548set PropertyUse(jSpace,TestP) 1;
1549set PropertyUse(jSpacedb,TestP) 1;
1550set PropertyUse(jSpacec,TestP) 1;
1551set PropertyUse(jSpacecdb,TestP) 1;
1552set PropertyUse(jCntrl,TestP) 1;
1553set PropertyUse(jCntrldb,TestP) 1;
1554set PropertyUse(jCntrlc,TestP) 1;
1555set PropertyUse(jCntrlcdb,TestP) 1;
1556set PropertyUse(uname,TestP) 1;
1557set PropertyUse(unamedb,TestP) 1;
1558set PropertyUse(jUBlockIn,TestP) 1;
1559set PropertyUse(jUBlockInc,TestP) 1;
1560set PropertyUse(jUBlockIs,TestP) 1;
1561set PropertyUse(jUBlockIsc,TestP) 1;
1562set PropertyUse(jUBlockBare,TestP) 1;
1563set PropertyUse(jUBlockBarec,TestP) 1;
1564set PropertyUse(jUCat,TestP) 1;
1565set PropertyUse(jUCatc,TestP) 1;
1566set PropertyUse(jUCatIn,TestP) 1;
1567set PropertyUse(jUCatcIn,TestP) 1;
1568set PropertyUse(jUCatIs,TestP) 1;
1569set PropertyUse(jUCatcIs,TestP) 1;
1570set PropertyUse(jUBlockIndb,TestP) 1;
1571set PropertyUse(jUBlockIncdb,TestP) 1;
1572set PropertyUse(jUBlockIsdb,TestP) 1;
1573set PropertyUse(jUBlockIscdb,TestP) 1;
1574set PropertyUse(jUBlockBaredb,TestP) 1;
1575set PropertyUse(jUBlockBarecdb,TestP) 1;
1576set PropertyUse(jUCatdb,TestP) 1;
1577set PropertyUse(jUCatcdb,TestP) 1;
1578set PropertyUse(jUCatdbIn,TestP) 1;
1579set PropertyUse(jUCatcdbIn,TestP) 1;
1580set PropertyUse(jUCatdbIs,TestP) 1;
1581set PropertyUse(jUCatcdbIs,TestP) 1;
1582set PropertyUse(jUnion,TestP) 1;
1583set PropertyUse(jInter,TestP) 1;
1584set PropertyUse(plookahead,TestP) 1;
1585set PropertyUse(plookaheadAtSign,TestP) 1;
1586set PropertyUse(plookback,TestP) 1;
1587set PropertyUse(plookbackAtSign,TestP) 1;
1588set PropertyUse(nlookahead,TestP) 1;
1589set PropertyUse(nlookaheadAtSign,TestP) 1;
1590set PropertyUse(nlookback,TestP) 1;
1591set PropertyUse(nlookbackAtSign,TestP) 1;
1592set PropertyUse(CondGroupSimple,TestP) 1;
1593set PropertyUse(CondGroupElse,TestP) 1;
1594set PropertyUse(CondLookaroundSimple,TestP) 1;
1595set PropertyUse(CondLookaroundElse,TestP) 1;
1596set PropertyUse(ColumnSpecifier,TestP) 1;
1597set PropertyUse(PreColumnSpecifier,TestP) 1;
1598set PropertyUse(PostColumnSpecifier,TestP) 1;
1599set PropertyUse(SubBackRefBare,TestP) 1;
1600set PropertyUse(SubBackRefBareAtLeastTen,TestP) 1;
1601set PropertyUse(SubEntBackRefZero,TestP) 1;
1602set PropertyUse(SubBackReferenceDol,TestP) 1;
1603set PropertyUse(SubBackReferenceDolAtLeastTen,TestP) 1;
1604set PropertyUse(SubBackReferenceDolZero,TestP) 1;
1605set PropertyUse(SubBackReferencePercent,TestP) 1;
1606set PropertyUse(SubBackReferencePercentAtLeastTen,TestP) 1;
1607set PropertyUse(SubBackReferencePercentZero,TestP) 1;
1608set PropertyUse(SubBackRefbs,TestP) 1;
1609set PropertyUse(SubBackRefParbs,TestP) 1;
1610set PropertyUse(SubBackRefbsAtLeastTen,TestP) 1;
1611set PropertyUse(SubBackRefParbsAtLeastTen,TestP) 1;
1612set PropertyUse(SubBackRefbsZero,TestP) 1;
1613set PropertyUse(SubBackRefParbsZero,TestP) 1;
1614set PropertyUse(SubBackRefdbs,TestP) 1;
1615set PropertyUse(SubBackRefdbsAtLeastTen,TestP) 1;
1616set PropertyUse(SubBackRefdbsZero,TestP) 1;
1617set PropertyUse(SubBackRefPardbsdbs,TestP) 1;
1618set PropertyUse(SubBackRefPardbsdbsAtLeastTen,TestP) 1;
1619set PropertyUse(SubBackRefPardbsdbsZero,TestP) 1;
1620set PropertyUse(Subampentbackrefs,TestP) 1;
1621set PropertyUse(Subampentbackrefsdbs,TestP) 1;
1622set PropertyUse(SubampentbackrefsPardbsdbs,TestP) 1;
1623set PropertyUse(SubDolAmpEntBackRef,TestP) 1;
1624set PropertyUse(SubPreMatch,TestP) 1;
1625set PropertyUse(SubPreMatchDol,TestP) 1;
1626set PropertyUse(SubPostMatch,TestP) 1;
1627set PropertyUse(SubPostMatchDol,TestP) 1;
1628set PropertyUse(SubLastCapture,TestP) 1;
1629set PropertyUse(SubLastCaptureDol,TestP) 1;
1630set PropertyUse(SubPreMatchLit,TestP) 1;
1631set PropertyUse(SubPostMatchLit,TestP) 1;
1632set PropertyUse(SubRange,TestP) 1;
1633set PropertyUse(SubAlnum,TestP) 1;
1634set PropertyUse(SubAlpha,TestP) 1;
1635set PropertyUse(SubBlank,TestP) 1;
1636set PropertyUse(SubCntrl,TestP) 1;
1637set PropertyUse(SubDigit,TestP) 1;
1638set PropertyUse(SubGraph,TestP) 1;
1639set PropertyUse(SubLower,TestP) 1;
1640set PropertyUse(SubPrint,TestP) 1;
1641set PropertyUse(SubPunct,TestP) 1;
1642set PropertyUse(SubSpace,TestP) 1;
1643set PropertyUse(SubUpper,TestP) 1;
1644set PropertyUse(SubXdigit,TestP) 1;
1645set PropertyUse(SubCStarN,TestP) 1;
1646set PropertyUse(SubCStar,TestP) 1;
1647set PropertyUse(SubLitString,TestP) 1;
1648set PropertyUse(SubDowncaseChar,TestP) 1;
1649set PropertyUse(SubUpcaseChar,TestP) 1;
1650set PropertyUse(SubDowncaseString,TestP) 1;
1651set PropertyUse(SubUpcaseString,TestP) 1;
1652set PropertyUse(SubEndCaseDomaine,TestP) 1;
1653set PropertyUse(SubEndCaseDomainE,TestP) 1;
1654set PropertyUse(SubDowncaseCharDollar,TestP) 1;
1655set PropertyUse(SubUpcaseCharDollar,TestP) 1;
1656set PropertyUse(SubDowncaseStringDollar,TestP) 1;
1657set PropertyUse(SubUpcaseStringDollar,TestP) 1;
1658set PropertyUse(SubEndCaseDomaineDollar,TestP) 1;
1659set PropertyUse(SubEndCaseDomainEDollar,TestP) 1;
1660set PropertyUse(ExactMatchWD,TestP) 1;
1661set PropertyUse(ExactMatchTRE,TestP) 1;
1662set PropertyUse(ExactMatchCgrep,TestP) 1;
1663set PropertyUse(TRECostSetting,TestP) 1;
1664set PropertyUse(TotalErrorCrosshatchA,TestP) 1;
1665set PropertyUse(PossStar,TestP) 0;
1666set PropertyUse(PossPlus,TestP) 0;
1667set PropertyUse(PossQMark,TestP) 0;
1668set PropertyUse(PossAtLeastM,TestP) 0;
1669set PropertyUse(PossMToN,TestP) 0;
1670set PropertyUse(CondPosLookaheadSimple,TestP) 0;
1671set PropertyUse(CondPosLookaheadElse,TestP) 0;
1672set PropertyUse(CondNegLookaheadSimple,TestP) 0;
1673set PropertyUse(CondNegLookaheadElse,TestP) 0;
1674set PropertyUse(CondPosLookbackSimple,TestP) 0;
1675set PropertyUse(CondPosLookbackElse,TestP) 0;
1676set PropertyUse(CondNegLookbackSimple,TestP) 0;
1677set PropertyUse(CondNegLookbackElse,TestP) 0;
1678set PropertyUse(embedding,TestP) 1;
1679set PropertyUse(EmbeddingMatchOnly,TestP) 1;
1680set PropertyUse(embeddingLeft,TestP) 1;
1681set PropertyUse(embeddingRight,TestP) 1;
1682set PropertyUse(unicodebmp,TestP) 1;
1683set PropertyUse(unicodefull,TestP) 1;
1684set PropertyUse(PossQMarkA,TestP) 1;
1685set PropertyUse(PossQMarkB,TestP) 1;
1686set PropertyUse(PossStarA,TestP) 1;
1687set PropertyUse(PossStarB,TestP) 1;
1688set PropertyUse(PossPlusA,TestP) 1;
1689set PropertyUse(PossPlusB,TestP) 1;
1690set PropertyUse(PossAtLeastMA,TestP) 1;
1691set PropertyUse(PossAtLeastMB,TestP) 1;
1692set PropertyUse(PossMToNA,TestP) 1;
1693set PropertyUse(PossMToNB,TestP) 1;
1694set PropertyUse(PossMToNC,TestP) 1;
1695set PropertyUse(CollationClass,TestP) 1;
1696set PropertyUse(CollatingElementMultichar,TestP) 1;
1697set PropertyUse(CollatingElementNamed,TestP) 1;
1698#set PropertyUse(ReluctantStar,TestP) 1;
1699#set PropertyUse(GreedyDoubleStar,TestP) 1;
1700set PropertyUse(RegionDoubleDot,TestP)  0;# Debug
1701set PropertyUse(CposRange,TestP)  1;
1702set PropertyUse(IgnoreCombiningCharactersBSZ,TestP)  1;
1703set PropertyUse(Range128,TestP) 1;
1704set PropertyUse(Range129,TestP) 1;
1705set PropertyUse(CrossUnicodeBlockP,TestP) 1;
1706
1707set PropertyUse(tested,PaletteP) 0;
1708set PropertyUse(BooleanAnd,PaletteP) 1;
1709set PropertyUse(group,PaletteP) 1;
1710set PropertyUse(GroupNoWildcards,PaletteP) 1;
1711set PropertyUse(groupbs,PaletteP) 1;
1712set PropertyUse(groupdbsnqq,PaletteP) 1;
1713set PropertyUse(ObligatoryQuantifierGroup,PaletteP) 1;
1714set PropertyUse(groupdbs,PaletteP) 1;
1715set PropertyUse(ncgroup,PaletteP) 1;
1716set PropertyUse(NoCaptureGroupPercentbsall,PaletteP) 1;
1717set PropertyUse(ncgroupdb,PaletteP) 1;
1718set PropertyUse(SelfishNoCaptureGroup,PaletteP) 1;
1719set PropertyUse(SelfishNoCaptureGroupA,PaletteP) 0;
1720set PropertyUse(SelfishNoCaptureGroupB,PaletteP) 0;
1721set PropertyUse(SelfishNoCaptureGroupC,PaletteP) 0;
1722set PropertyUse(taggedgroup,PaletteP) 1;
1723set PropertyUse(taggedgroupsq,PaletteP) 1;
1724set PropertyUse(taggedgroupref,PaletteP) 1;
1725set PropertyUse(groupcomp,PaletteP) 1;
1726set PropertyUse(dot,PaletteP) 1;
1727set PropertyUse(UnderscoreAnySingle,PaletteP) 1;
1728set PropertyUse(XAnySingle,PaletteP) 1;
1729set PropertyUse(DotAnySingle,PaletteP) 1;
1730set PropertyUse(SingleOctet,PaletteP) 1;
1731set PropertyUse(repmax,PaletteP) 1;
1732set PropertyUse(repmaxlbs,PaletteP) 1;
1733set PropertyUse(RAnySinglePurineBase,PaletteP) 1;
1734set PropertyUse(YAnySinglePyramidineBase,PaletteP) 1;
1735set PropertyUse(SBaseGC,PaletteP) 1;
1736set PropertyUse(WBaseAT,PaletteP) 1;
1737set PropertyUse(MBaseAC,PaletteP) 1;
1738set PropertyUse(KBaseGT,PaletteP) 1;
1739set PropertyUse(VBaseACG,PaletteP) 1;
1740set PropertyUse(HBaseACT,PaletteP) 1;
1741set PropertyUse(DBaseAGT,PaletteP) 1;
1742set PropertyUse(BBaseCGT,PaletteP) 1;
1743set PropertyUse(JResidueHydrophobic,PaletteP) 1;
1744set PropertyUse(OResidueHydrophilic,PaletteP) 1;
1745set PropertyUse(BResidueDN,PaletteP) 1;
1746set PropertyUse(ZResidueEQ,PaletteP) 1;
1747set PropertyUse(NAnySingleNucleotide,PaletteP) 1;
1748set PropertyUse(StarPrev,PaletteP) 1;
1749set PropertyUse(ZeroOrMoreCurly,PaletteP) 1;
1750set PropertyUse(CrosshatchPrev,PaletteP) 1;
1751set PropertyUse(DoubleCrosshatchPrev,PaletteP) 1;
1752set PropertyUse(StarNext,PaletteP) 1;
1753set PropertyUse(starclass,PaletteP) 1;
1754set PropertyUse(SubReluctantStarPrevDollar,PaletteP) 1;
1755set PropertyUse(SubReluctantStarPrevBackslash,PaletteP) 1;
1756set PropertyUse(SubHyphenClass,PaletteP) 1;
1757set PropertyUse(SubNewline,PaletteP) 1;
1758set PropertyUse(StarAny,PaletteP) 1;
1759set PropertyUse(PercentAny,PaletteP) 1;
1760set PropertyUse(plusprev,PaletteP) 1;
1761set PropertyUse(plusnext,PaletteP) 1;
1762set PropertyUse(plusprevbs,PaletteP) 1;
1763set PropertyUse(plusclass,PaletteP) 1;
1764set PropertyUse(SubReluctantPlusPrevDollar,PaletteP) 1;
1765set PropertyUse(SubReluctantPlusPrevBackslash,PaletteP) 1;
1766set PropertyUse(plusany,PaletteP) 1;
1767set PropertyUse(crosshatchany,PaletteP) 1;
1768set PropertyUse(atsignonenext,PaletteP) 1;
1769set PropertyUse(qmopt,PaletteP) 1;
1770set PropertyUse(qmoptnext,PaletteP) 1;
1771set PropertyUse(qmoptclass,PaletteP) 1;
1772set PropertyUse(qmoptbs,PaletteP) 1;
1773set PropertyUse(qmoptdbsnqq,PaletteP) 1;
1774set PropertyUse(qm1,PaletteP) 1;
1775set PropertyUse(qm1bs,PaletteP) 1;
1776set PropertyUse(EqualOptbs,PaletteP) 1;
1777set PropertyUse(SubReluctantQuestionMarkPrevDollar,PaletteP) 1;
1778set PropertyUse(SubReluctantQuestionMarkPrevBackslash,PaletteP) 1;
1779set PropertyUse(commaor,PaletteP) 1;
1780set PropertyUse(semiand,PaletteP) 1;
1781set PropertyUse(ampandbs,PaletteP) 1;
1782set PropertyUse(caret,PaletteP) 1;
1783set PropertyUse(PercentCaretBS,PaletteP) 1;
1784set PropertyUse(PercentDollarBS,PaletteP) 1;
1785set PropertyUse(NegativeCircumflex,PaletteP) 1;
1786set PropertyUse(MatchNotMatchTilde,PaletteP) 1;
1787set PropertyUse(W3CharClassSubtraction,PaletteP) 1;
1788set PropertyUse(pabegin,PaletteP) 1;
1789set PropertyUse(pabegindb,PaletteP) 1;
1790set PropertyUse(boslq,PaletteP) 1;
1791set PropertyUse(dollar,PaletteP) 1;
1792set PropertyUse(GreaterThanEnd,PaletteP) 1;
1793set PropertyUse(LessThanBeginning,PaletteP) 1;
1794set PropertyUse(LiteralMetachar,PaletteP) 1;
1795set PropertyUse(AbsoluteEndOfString,PaletteP) 0;
1796set PropertyUse(pzendbs,PaletteP) 1;
1797set PropertyUse(pzenddbs,PaletteP) 1;
1798set PropertyUse(pZendbs,PaletteP) 1;
1799set PropertyUse(pZenddbs,PaletteP) 1;
1800set PropertyUse(eosrq,PaletteP) 1;
1801set PropertyUse(langle,PaletteP) 1;
1802set PropertyUse(rangle,PaletteP) 1;
1803set PropertyUse(BeginWordm,PaletteP) 1;
1804set PropertyUse(EndWordM,PaletteP) 1;
1805set PropertyUse(LangleClass,PaletteP) 1;
1806set PropertyUse(RangleClass,PaletteP) 1;
1807set PropertyUse(WordBoundary,PaletteP) 1;
1808set PropertyUse(WordBoundaryybs,PaletteP) 1;
1809set PropertyUse(WordBoundaryydbs,PaletteP) 1;
1810set PropertyUse(WordBoundaryBs,PaletteP) 1;
1811set PropertyUse(NonWordBoundary,PaletteP) 1;
1812set PropertyUse(NonWordBoundaryYbs,PaletteP) 1;
1813set PropertyUse(pipe,PaletteP) 1;
1814set PropertyUse(pipebs,PaletteP) 1;
1815set PropertyUse(pipedbs,PaletteP) 1;
1816set PropertyUse(pipebsall,PaletteP) 1;
1817set PropertyUse(pipedbsall,PaletteP) 1;
1818set PropertyUse(altcomma,PaletteP) 1;
1819set PropertyUse(backref,PaletteP) 1;
1820set PropertyUse(backrefdbs,PaletteP) 1;
1821set PropertyUse(backrefper,PaletteP) 1;
1822set PropertyUse(backrefbsall,PaletteP) 1;
1823set PropertyUse(backrefdbsall,PaletteP) 1;
1824set PropertyUse(repfixed,PaletteP) 1;
1825set PropertyUse(backrefAtLeastTen,PaletteP) 0;
1826set PropertyUse(backrefdbsAtLeastTen,PaletteP) 0;
1827set PropertyUse(backrefperAtLeastTen,PaletteP) 0;
1828set PropertyUse(backrefbsallAtLeastTen,PaletteP) 0;
1829set PropertyUse(backrefdbsallAtLeastTen,PaletteP) 0;
1830set PropertyUse(backrefksh,PaletteP) 1;
1831set PropertyUse(backrefkshAtLeastTen,PaletteP) 0;
1832set PropertyUse(CaseInsensitiveFlagSmallIOctal,PaletteP) 0;
1833set PropertyUse(CaseInsensitiveFlagSmallIHex,PaletteP) 0;
1834set PropertyUse(CaseInsensitiveCLFlagBackrefP,PaletteP) 0;
1835set PropertyUse(repfixedbs,PaletteP) 1;
1836set PropertyUse(repfixeddbs,PaletteP) 1;
1837set PropertyUse(repmin,PaletteP) 1;
1838set PropertyUse(repminbs,PaletteP) 1;
1839set PropertyUse(repmindbs,PaletteP) 1;
1840set PropertyUse(reprange,PaletteP) 1;
1841set PropertyUse(reprangebs,PaletteP) 1;
1842set PropertyUse(reprangelbs,PaletteP) 1;
1843set PropertyUse(reprangedbs,PaletteP) 1;
1844set PropertyUse(SubReluctantIntegerRangeDollar,PaletteP) 1;
1845set PropertyUse(SubReluctantIntegerRangeBackslash,PaletteP) 1;
1846set PropertyUse(ReluctantIntegerRangeVIMBackslash,PaletteP) 1;
1847set PropertyUse(ReluctantAtLeastMVIMBackslash,PaletteP) 1;
1848set PropertyUse(ReluctantAtMostNVIMBackslash,PaletteP) 1;
1849set PropertyUse(ReluctantExactlyMVIMBackslash,PaletteP) 1;
1850set PropertyUse(SubReluctantZeroOrMoreVIMBackslash,PaletteP) 1;
1851set PropertyUse(set,PaletteP) 1;
1852set PropertyUse(setcomp,PaletteP) 1;
1853set PropertyUse(setcomptilde,PaletteP) 1;
1854set PropertyUse(setcompbang,PaletteP) 1;
1855set PropertyUse(range,PaletteP) 1;
1856set PropertyUse(multirange,PaletteP) 1;
1857set PropertyUse(IntegerRange,PaletteP) 1;
1858set PropertyUse(IntegerRangeDoubleDot,PaletteP) 1;
1859set PropertyUse(IntegerMultiple,PaletteP) 1;
1860set PropertyUse(IntegerFactor,PaletteP) 1;
1861set PropertyUse(IntegerAlternative,PaletteP) 1;
1862set PropertyUse(baldlim,PaletteP) 1;
1863set PropertyUse(bsw,PaletteP) 1;
1864set PropertyUse(alnum,PaletteP) 1;
1865set PropertyUse(alnumrebol,PaletteP) 1;
1866set PropertyUse(pbsw,PaletteP) 1;
1867set PropertyUse(pbbsw,PaletteP) 1;
1868set PropertyUse(lalnumc,PaletteP) 1;
1869set PropertyUse(lalnum,PaletteP) 1;
1870set PropertyUse(bsW,PaletteP) 1;
1871set PropertyUse(bsWdb,PaletteP) 1;
1872set PropertyUse(pbsW,PaletteP) 1;
1873set PropertyUse(alpha,PaletteP) 1;
1874set PropertyUse(alpharebol,PaletteP) 1;
1875set PropertyUse(lalpha,PaletteP) 1;
1876set PropertyUse(lalphac,PaletteP) 1;
1877set PropertyUse(upper,PaletteP) 1;
1878set PropertyUse(upperrebol,PaletteP) 1;
1879set PropertyUse(lupper,PaletteP) 1;
1880set PropertyUse(lupperc,PaletteP) 1;
1881set PropertyUse(lower,PaletteP) 1;
1882set PropertyUse(lowerrebol,PaletteP) 1;
1883set PropertyUse(llower,PaletteP) 1;
1884set PropertyUse(llowerc,PaletteP) 1;
1885set PropertyUse(punct,PaletteP) 1;
1886set PropertyUse(lpunct,PaletteP) 1;
1887set PropertyUse(lpunctc,PaletteP) 1;
1888set PropertyUse(space,PaletteP) 1;
1889set PropertyUse(lspace,PaletteP) 1;
1890set PropertyUse(pspace,PaletteP) 1;
1891set PropertyUse(pspacedb,PaletteP) 1;
1892set PropertyUse(lspacec,PaletteP) 1;
1893set PropertyUse(pspacec,PaletteP) 1;
1894set PropertyUse(pspacedbc,PaletteP) 1;
1895set PropertyUse(W3Space,PaletteP) 1;
1896set PropertyUse(W3Spacec,PaletteP) 1;
1897set PropertyUse(blank,PaletteP) 1;
1898set PropertyUse(graph,PaletteP) 1;
1899set PropertyUse(print,PaletteP) 1;
1900set PropertyUse(mockprint,PaletteP) 1;
1901set PropertyUse(perlprint,PaletteP) 1;
1902set PropertyUse(cntrl,PaletteP) 1;
1903set PropertyUse(lcntrl,PaletteP) 1;
1904set PropertyUse(lcntrlc,PaletteP) 1;
1905set PropertyUse(digit,PaletteP) 1;
1906set PropertyUse(digitrebol,PaletteP) 1;
1907set PropertyUse(ldigit,PaletteP) 1;
1908set PropertyUse(pdigit,PaletteP) 1;
1909set PropertyUse(xmldigit,PaletteP) 1;
1910set PropertyUse(pdigitdb,PaletteP) 1;
1911set PropertyUse(ldigitc,PaletteP) 1;
1912set PropertyUse(pdigitc,PaletteP) 1;
1913set PropertyUse(xmldigitc,PaletteP) 1;
1914set PropertyUse(pdigitdbc,PaletteP) 1;
1915set PropertyUse(xdigit,PaletteP) 1;
1916set PropertyUse(xdigitrebol,PaletteP) 1;
1917set PropertyUse(lxdigit,PaletteP) 1;
1918set PropertyUse(lxdigitc,PaletteP) 1;
1919set PropertyUse(wordclass,PaletteP) 1;
1920set PropertyUse(compposixclassinner,PaletteP) 1;
1921set PropertyUse(compposixclassouter,PaletteP) 1;
1922set PropertyUse(octal,PaletteP) 1;
1923set PropertyUse(octalo,PaletteP) 1;
1924set PropertyUse(decimald,PaletteP) 1;
1925set PropertyUse(octaldb,PaletteP) 1;
1926set PropertyUse(hexl,PaletteP) 1;
1927set PropertyUse(hexldb,PaletteP) 1;
1928set PropertyUse(hexu,PaletteP) 1;
1929set PropertyUse(hexudb,PaletteP) 1;
1930set PropertyUse(HexWideCharCurly,PaletteP) 1;
1931set PropertyUse(HTMLHexReference,PaletteP) 1;
1932set PropertyUse(HTMLDecimalReference,PaletteP) 1;
1933set PropertyUse(AlphaBSa,PaletteP) 1;
1934set PropertyUse(AlphaBSAc,PaletteP) 1;
1935set PropertyUse(UpperCaseBSu,PaletteP) 1;
1936set PropertyUse(UpperCaseBSUc,PaletteP) 1;
1937set PropertyUse(LowerCaseBSl,PaletteP) 1;
1938set PropertyUse(LowerCaseBSLc,PaletteP) 1;
1939set PropertyUse(WordBSw,PaletteP) 1;
1940set PropertyUse(WordBSWc,PaletteP) 1;
1941set PropertyUse(WordHeadBSh,PaletteP) 1;
1942set PropertyUse(WordHeadBSHc,PaletteP) 1
1943set PropertyUse(XMLInitial,PaletteP) 1;
1944set PropertyUse(XMLInitialc,PaletteP) 1;
1945set PropertyUse(xdigitBSx,PaletteP) 1;
1946set PropertyUse(xdigitBSxc,PaletteP) 1;
1947set PropertyUse(odigitBSo,PaletteP) 1;
1948set PropertyUse(odigitBSOc,PaletteP) 1;
1949set PropertyUse(bell,PaletteP) 1;
1950set PropertyUse(belldb,PaletteP) 1;
1951set PropertyUse(backspace,PaletteP) 1;
1952set PropertyUse(escape,PaletteP) 1;
1953set PropertyUse(escapedb,PaletteP) 1;
1954set PropertyUse(cr,PaletteP) 1;
1955set PropertyUse(crdb,PaletteP) 1;
1956set PropertyUse(tab,PaletteP) 1;
1957set PropertyUse(tabdb,PaletteP) 1;
1958set PropertyUse(TabClass,PaletteP) 1;
1959set PropertyUse(EscapeClass,PaletteP) 1;
1960set PropertyUse(BackspaceClass,PaletteP) 1;
1961set PropertyUse(controlc,PaletteP) 1;
1962set PropertyUse(controlcdb,PaletteP) 1;
1963set PropertyUse(some,PaletteP) 1;
1964set PropertyUse(any,PaletteP) 1;
1965set PropertyUse(rangerebol,PaletteP) 1;
1966set PropertyUse(piperebol,PaletteP) 1;
1967set PropertyUse(comment,PaletteP) 1;
1968set PropertyUse(QuoteFollowingMetacharsQDot,PaletteP) 1;
1969set PropertyUse(QuoteFollowingMetacharsMDot,PaletteP) 1;
1970set PropertyUse(ShiftBackToMagicDot,PaletteP) 1;
1971set PropertyUse(TerminateMetacharQuotingDot,PaletteP) 1;
1972set PropertyUse(CaseSensitiveFlag,PaletteP) 1;
1973set PropertyUse(CaseInsensitiveFlagSmallI,PaletteP) 1;
1974set PropertyUse(CaseInsensitiveBSSmallC,PaletteP) 1;
1975set PropertyUse(CaseSensitiveBSBigC,PaletteP) 1;
1976set PropertyUse(flagCrosshatchlAsymmetricCaseInsensitive,PaletteP) 1;
1977set PropertyUse(flagCrosshatchICaseSensitive,PaletteP) 1;
1978set PropertyUse(CaseInsensitiveCrosshatch,PaletteP) 1;
1979set PropertyUse(CaseInsensitiveFlagSmallIu,PaletteP) 1;
1980set PropertyUse(CaseInsensitiveFlagSmallIAsciiLiteral,PaletteP) 0;
1981set PropertyUse(CaseInsensitiveFlagSmallINonAsciiLiteral,PaletteP) 0;
1982set PropertyUse(CaseInsensitiveFlagSmallIuNonAsciiLiteral,PaletteP) 0;
1983set PropertyUse(CaseInsensitiveFlagSmallIAsciiClass,PaletteP) 0;
1984set PropertyUse(CaseInsensitiveFlagSmallINonAsciiClass,PaletteP) 0;
1985set PropertyUse(CaseInsensitiveFlagSmallIuNonAsciiClass,PaletteP) 0;
1986set PropertyUse(CaseInsensitiveFlagSmallIAsciiClassSymmetric,PaletteP) 0;
1987set PropertyUse(CaseInsensitiveFlagSmallINonAsciiClassSymmetric,PaletteP) 0;
1988set PropertyUse(CaseInsensitiveFlagSmallIuNonAsciiClassSymmetric,PaletteP) 0;
1989set PropertyUse(CaseInsensitiveCrosshatchAsciiLiteral,PaletteP) 0;
1990set PropertyUse(CaseInsensitiveCrosshatchNonAsciiLiteral,PaletteP) 0;
1991set PropertyUse(CaseInsensitiveCrosshatchuNonAsciiLiteral,PaletteP) 0;
1992set PropertyUse(CaseInsensitiveCrosshatchAsciiClass,PaletteP) 0;
1993set PropertyUse(CaseInsensitiveCrosshatchNonAsciiClass,PaletteP) 0;
1994set PropertyUse(CaseInsensitiveCrosshatchuNonAsciiClass,PaletteP) 0;
1995set PropertyUse(CaseInsensitiveCrosshatchAsciiClassSymmetric,PaletteP) 0;
1996set PropertyUse(CaseInsensitiveCrosshatchNonAsciiClassSymmetric,PaletteP) 0;
1997set PropertyUse(CaseInsensitiveCrosshatchuNonAsciiClassSymmetric,PaletteP) 0;
1998set PropertyUse(CaseInsensitiveCrosshatchOctal,PaletteP) 0;
1999set PropertyUse(CaseInsensitiveCrosshatchHex,PaletteP) 0;
2000set PropertyUse(CaseInsensitiveBSSmallCAsciiLiteral,PaletteP) 0;
2001set PropertyUse(CaseInsensitiveBSSmallCNonAsciiLiteral,PaletteP) 0;
2002set PropertyUse(CaseInsensitiveBSSmallCAsciiClass,PaletteP) 0;
2003set PropertyUse(CaseInsensitiveBSSmallCNonAsciiClass,PaletteP) 0;
2004set PropertyUse(CaseInsensitiveBSSmallCAsciiClassSymmetric,PaletteP) 0;
2005set PropertyUse(CaseInsensitiveBSSmallCNonAsciiClassSymmetric,PaletteP) 0;
2006set PropertyUse(CaseInsensitiveBSSmallCOctal,PaletteP) 0;
2007set PropertyUse(CaseInsensitiveBSSmallCHex,PaletteP) 0;
2008set PropertyUse(CaseInsensitiveAsciiLiteral,PaletteP) 0;
2009set PropertyUse(CaseInsensitiveNonAsciiLiteral,PaletteP) 0;
2010set PropertyUse(CaseInsensitiveAsciiClass,PaletteP) 0;
2011set PropertyUse(CaseInsensitiveNonAsciiClass,PaletteP) 0;
2012set PropertyUse(CaseInsensitiveAsciiClassSymmetric,PaletteP) 0;
2013set PropertyUse(CaseInsensitiveNonAsciiClassSymmetric,PaletteP) 0;
2014set PropertyUse(CaseInsensitiveOctal,PaletteP) 0;
2015set PropertyUse(CaseInsensitiveHex,PaletteP) 0;
2016set PropertyUse(flagx,PaletteP) 1;
2017set PropertyUse(flagb,PaletteP) 1;
2018set PropertyUse(flage,PaletteP) 1;
2019set PropertyUse(flagq,PaletteP) 1;
2020set PropertyUse(UnsetFlag,PaletteP) 1;
2021set PropertyUse(FlagQWideScope,PaletteP) 0;
2022set PropertyUse(FlagCrosshatchWideScope,PaletteP) 0;
2023set PropertyUse(FlagBSSmallCWideScope,PaletteP) 0;
2024set PropertyUse(CaseInsensitiveFlagWideScope,PaletteP) 0;
2025set PropertyUse(jLower,PaletteP) 1;
2026set PropertyUse(jLowerdb,PaletteP) 1;
2027set PropertyUse(jLowerc,PaletteP) 1;
2028set PropertyUse(jLowercdb,PaletteP) 1;
2029set PropertyUse(jUpper,PaletteP) 1;
2030set PropertyUse(jUpperdb,PaletteP) 1;
2031set PropertyUse(jUpperc,PaletteP) 1;
2032set PropertyUse(jUppercdb,PaletteP) 1;
2033set PropertyUse(jAscii,PaletteP) 1;
2034set PropertyUse(jAsciidb,PaletteP) 1;
2035set PropertyUse(jAsciic,PaletteP) 1;
2036set PropertyUse(jAsciicdb,PaletteP) 1;
2037set PropertyUse(jAlpha,PaletteP) 1;
2038set PropertyUse(jAlphadb,PaletteP) 1;
2039set PropertyUse(jAlphac,PaletteP) 1;
2040set PropertyUse(jAlphacdb,PaletteP) 1;
2041set PropertyUse(jDigit,PaletteP) 1;
2042set PropertyUse(jDigitdb,PaletteP) 1;
2043set PropertyUse(jDigitc,PaletteP) 1;
2044set PropertyUse(jDigitcdb,PaletteP) 1;
2045set PropertyUse(jXdigit,PaletteP) 1;
2046set PropertyUse(jXdigitdb,PaletteP) 1;
2047set PropertyUse(jXdigitc,PaletteP) 1;
2048set PropertyUse(jXdigitcdb,PaletteP) 1;
2049set PropertyUse(jAlnum,PaletteP) 1;
2050set PropertyUse(jAlnumdb,PaletteP) 1;
2051set PropertyUse(jAlnumc,PaletteP) 1;
2052set PropertyUse(jAlnumcdb,PaletteP) 1;
2053set PropertyUse(jPunct,PaletteP) 1;
2054set PropertyUse(jPunctdb,PaletteP) 1;
2055set PropertyUse(jPunctc,PaletteP) 1;
2056set PropertyUse(jPunctcdb,PaletteP) 1;
2057set PropertyUse(jGraph,PaletteP) 1;
2058set PropertyUse(jGraphdb,PaletteP) 1;
2059set PropertyUse(jGraphc,PaletteP) 1;
2060set PropertyUse(jGraphcdb,PaletteP) 1;
2061set PropertyUse(jPrint,PaletteP) 1;
2062set PropertyUse(jPrintdb,PaletteP) 1;
2063set PropertyUse(jPrintc,PaletteP) 1;
2064set PropertyUse(jPrintcdb,PaletteP) 1;
2065set PropertyUse(jBlank,PaletteP) 1;
2066set PropertyUse(jBlankdb,PaletteP) 1;
2067set PropertyUse(jBlankc,PaletteP) 1;
2068set PropertyUse(jBlankcdb,PaletteP) 1;
2069set PropertyUse(jSpace,PaletteP) 1;
2070set PropertyUse(jSpacedb,PaletteP) 1;
2071set PropertyUse(jSpacec,PaletteP) 1;
2072set PropertyUse(jSpacecdb,PaletteP) 1;
2073set PropertyUse(jCntrl,PaletteP) 1;
2074set PropertyUse(jCntrldb,PaletteP) 1;
2075set PropertyUse(jCntrlc,PaletteP) 1;
2076set PropertyUse(jCntrlcdb,PaletteP) 1;
2077set PropertyUse(uname,PaletteP) 1;
2078set PropertyUse(unamedb,PaletteP) 1;
2079set PropertyUse(jUBlockIn,PaletteP) 1;
2080set PropertyUse(jUBlockInc,PaletteP) 1;
2081set PropertyUse(jUBlockIs,PaletteP) 1;
2082set PropertyUse(jUBlockIsc,PaletteP) 1;
2083set PropertyUse(jUBlockBare,PaletteP) 1;
2084set PropertyUse(jUBlockBarec,PaletteP) 1;
2085set PropertyUse(jUCat,PaletteP) 1;
2086set PropertyUse(jUCatc,PaletteP) 1;
2087set PropertyUse(jUCatIn,PaletteP) 1;
2088set PropertyUse(jUCatcIn,PaletteP) 1;
2089set PropertyUse(jUCatIs,PaletteP) 1;
2090set PropertyUse(jUCatcIs,PaletteP) 1;
2091set PropertyUse(jUBlockIndb,PaletteP) 1;
2092set PropertyUse(jUBlockIncdb,PaletteP) 1;
2093set PropertyUse(jUBlockIsdb,PaletteP) 1;
2094set PropertyUse(jUBlockIscdb,PaletteP) 1;
2095set PropertyUse(jUBlockBaredb,PaletteP) 1;
2096set PropertyUse(jUBlockBarecdb,PaletteP) 1;
2097set PropertyUse(jUCatdb,PaletteP) 1;
2098set PropertyUse(jUCatcdb,PaletteP) 1;
2099set PropertyUse(jUCatdbIn,PaletteP) 1;
2100set PropertyUse(jUCatcdbIn,PaletteP) 1;
2101set PropertyUse(jUCatdbIs,PaletteP) 1;
2102set PropertyUse(jUCatcdbIs,PaletteP) 1;
2103set PropertyUse(jUnion,PaletteP) 1;
2104set PropertyUse(jInter,PaletteP) 1;
2105set PropertyUse(plookahead,PaletteP) 1;
2106set PropertyUse(plookaheadAtSign,PaletteP) 1;
2107set PropertyUse(plookback,PaletteP) 1;
2108set PropertyUse(plookbackAtSign,PaletteP) 1;
2109set PropertyUse(nlookahead,PaletteP) 1;
2110set PropertyUse(nlookaheadAtSign,PaletteP) 1;
2111set PropertyUse(nlookback,PaletteP) 1;
2112set PropertyUse(nlookbackAtSign,PaletteP) 1;
2113set PropertyUse(CondGroupSimple,PaletteP) 1;
2114set PropertyUse(CondGroupElse,PaletteP) 1;
2115set PropertyUse(CondLookaroundSimple,PaletteP) 0;
2116set PropertyUse(CondLookaroundElse,PaletteP) 0;
2117set PropertyUse(ColumnSpecifier,PaletteP) 1;
2118set PropertyUse(PreColumnSpecifier,PaletteP) 1;
2119set PropertyUse(PostColumnSpecifier,PaletteP) 1;
2120set PropertyUse(SubBackRefBare,PaletteP) 1;
2121set PropertyUse(SubBackRefBareAtLeastTen,PaletteP) 0;
2122set PropertyUse(SubBackReferenceDol,PaletteP) 1;
2123set PropertyUse(SubBackReferenceDolAtLeastTen,PaletteP) 0;
2124set PropertyUse(SubBackReferenceDolZero,PaletteP) 1;
2125set PropertyUse(SubBackReferencePercent,PaletteP) 1;
2126set PropertyUse(SubBackReferencePercentAtLeastTen,PaletteP) 0;
2127set PropertyUse(SubBackReferencePercentZero,PaletteP) 1;
2128set PropertyUse(SubBackRefbs,PaletteP) 1;
2129set PropertyUse(SubBackRefParbs,PaletteP) 1;
2130set PropertyUse(SubBackRefbsAtLeastTen,PaletteP) 0;
2131set PropertyUse(SubBackRefParbsAtLeastTen,PaletteP) 0;
2132set PropertyUse(SubBackRefbsZero,PaletteP) 1;
2133set PropertyUse(SubBackRefParbsZero,PaletteP) 1;
2134set PropertyUse(SubBackRefdbs,PaletteP) 1;
2135set PropertyUse(SubBackRefdbsAtLeastTen,PaletteP) 0;
2136set PropertyUse(SubBackRefdbsZero,PaletteP) 1;
2137set PropertyUse(SubBackRefPardbsdbs,PaletteP) 1;
2138set PropertyUse(SubBackRefPardbsdbsAtLeastTen,PaletteP) 0;
2139set PropertyUse(SubBackRefPardbsdbsZero,PaletteP) 1;
2140set PropertyUse(SubEntBackRefZero,PaletteP) 1;
2141set PropertyUse(Subampentbackrefs,PaletteP) 1;
2142set PropertyUse(Subampentbackrefsdbs,PaletteP) 1;
2143set PropertyUse(SubampentbackrefsPardbsdbs,PaletteP) 1;
2144set PropertyUse(SubDolAmpEntBackRef,PaletteP) 1;
2145set PropertyUse(SubPreMatch,PaletteP) 1;
2146set PropertyUse(SubPreMatchDol,PaletteP) 1;
2147set PropertyUse(SubPostMatch,PaletteP) 1;
2148set PropertyUse(SubPostMatchDol,PaletteP) 1;
2149set PropertyUse(SubLastCapture,PaletteP) 1;
2150set PropertyUse(SubLastCaptureDol,PaletteP) 1;
2151set PropertyUse(SubPreMatchLit,PaletteP) 1;
2152set PropertyUse(SubPostMatchLit,PaletteP) 1;
2153set PropertyUse(SubRange,PaletteP) 1;
2154set PropertyUse(SubAlnum,PaletteP) 1;
2155set PropertyUse(SubAlpha,PaletteP) 1;
2156set PropertyUse(SubBlank,PaletteP) 1;
2157set PropertyUse(SubCntrl,PaletteP) 1;
2158set PropertyUse(SubDigit,PaletteP) 1;
2159set PropertyUse(SubGraph,PaletteP) 1;
2160set PropertyUse(SubLower,PaletteP) 1;
2161set PropertyUse(SubPrint,PaletteP) 1;
2162set PropertyUse(SubPunct,PaletteP) 1;
2163set PropertyUse(SubSpace,PaletteP) 1;
2164set PropertyUse(SubUpper,PaletteP) 1;
2165set PropertyUse(SubXdigit,PaletteP) 1;
2166set PropertyUse(SubCStarN,PaletteP) 1;
2167set PropertyUse(SubCStar,PaletteP) 1;
2168set PropertyUse(SubLitString,PaletteP) 1;
2169set PropertyUse(SubDowncaseChar,PaletteP) 1;
2170set PropertyUse(SubUpcaseChar,PaletteP) 1;
2171set PropertyUse(SubDowncaseString,PaletteP) 1;
2172set PropertyUse(SubUpcaseString,PaletteP) 1;
2173set PropertyUse(SubEndCaseDomaine,PaletteP) 1;
2174set PropertyUse(SubEndCaseDomainE,PaletteP) 1;
2175set PropertyUse(SubDowncaseCharDollar,PaletteP) 1;
2176set PropertyUse(SubUpcaseCharDollar,PaletteP) 1;
2177set PropertyUse(SubDowncaseStringDollar,PaletteP) 1;
2178set PropertyUse(SubUpcaseStringDollar,PaletteP) 1;
2179set PropertyUse(SubEndCaseDomaineDollar,PaletteP) 1;
2180set PropertyUse(SubEndCaseDomainEDollar,PaletteP) 1;
2181set PropertyUse(ExactMatchWD,PaletteP) 1;
2182set PropertyUse(ExactMatchTRE,PaletteP) 1;
2183set PropertyUse(ExactMatchCgrep,PaletteP) 1;
2184set PropertyUse(TRECostSetting,PaletteP) 1;
2185set PropertyUse(TotalErrorCrosshatchA,PaletteP) 1;
2186set PropertyUse(PossStar,PaletteP) 1;
2187set PropertyUse(PossPlus,PaletteP) 1;
2188set PropertyUse(PossQMark,PaletteP) 1;
2189set PropertyUse(PossAtLeastM,PaletteP) 1;
2190set PropertyUse(PossMToN,PaletteP) 1;
2191set PropertyUse(CondPosLookaheadSimple,PaletteP) 1;
2192set PropertyUse(CondPosLookaheadElse,PaletteP) 1;
2193set PropertyUse(CondNegLookaheadSimple,PaletteP) 1;
2194set PropertyUse(CondNegLookaheadElse,PaletteP) 1;
2195set PropertyUse(CondPosLookbackSimple,PaletteP) 1;
2196set PropertyUse(CondPosLookbackElse,PaletteP) 1;
2197set PropertyUse(CondNegLookbackSimple,PaletteP) 1;
2198set PropertyUse(CondNegLookbackElse,PaletteP) 1;
2199set PropertyUse(embedding,PaletteP) 0;
2200set PropertyUse(EmbeddingMatchOnly,PaletteP) 0;
2201set PropertyUse(embeddingLeft,PaletteP) 0;
2202set PropertyUse(embeddingRight,PaletteP) 0;
2203set PropertyUse(unicodebmp,PaletteP) 0;
2204set PropertyUse(unicodefull,PaletteP) 0;
2205set PropertyUse(PossQMarkA,PaletteP) 0;
2206set PropertyUse(PossQMarkB,PaletteP) 0;
2207set PropertyUse(PossStarA,PaletteP) 0;
2208set PropertyUse(PossStarB,PaletteP) 0;
2209set PropertyUse(PossPlusA,PaletteP) 0;
2210set PropertyUse(PossPlusB,PaletteP) 0;
2211set PropertyUse(PossAtLeastMA,PaletteP) 0;
2212set PropertyUse(PossAtLeastMB,PaletteP) 0;
2213set PropertyUse(PossMToNA,PaletteP) 0;
2214set PropertyUse(PossMToNB,PaletteP) 0;
2215set PropertyUse(PossMToNC,PaletteP) 0;
2216set PropertyUse(CollationClass,PaletteP) 1;
2217set PropertyUse(CollatingElementMultichar,PaletteP) 1;
2218set PropertyUse(CollatingElementNamed,PaletteP) 1;
2219#set PropertyUse(ReluctantStar,PaletteP) 1;
2220#set PropertyUse(GreedyDoubleStar,PaletteP) 1;
2221set PropertyUse(RegionDoubleDot,PaletteP)  0;# Debug
2222set PropertyUse(CposRange,PaletteP)  1;
2223set PropertyUse(IgnoreCombiningCharactersBSZ,PaletteP)  1;
2224set PropertyUse(Range128,PaletteP) 0;
2225set PropertyUse(Range129,PaletteP) 0;
2226set PropertyUse(CrossUnicodeBlockP,PaletteP) 0;
2227
2228#Certain tests hang certain programs so we have to skip them.
2229#Here we list the combinations to be skipped.
2230set ProgramTestSkipList(emacs,Range128) 1;
2231set ProgramTestSkipList(emacs,Range129) 1;
2232set ProgramTestSkipList(emacs,PossQMarkA) 1;
2233set ProgramTestSkipList(emacs,PossQMarkB) 1;
2234set ProgramTestSkipList(emacs,PossStarA) 1;
2235set ProgramTestSkipList(emacs,PossStarB) 1;
2236set ProgramTestSkipList(emacs,PossPlusA) 1;
2237set ProgramTestSkipList(emacs,PossPlusB) 1;
2238set ProgramTestSkipList(emacs,PossAtLeastMA) 1;
2239set ProgramTestSkipList(emacs,PossAtLeastMB) 1;
2240set ProgramTestSkipList(emacs,PossMToNA) 1;
2241set ProgramTestSkipList(emacs,PossMToNB) 1;
2242set ProgramTestSkipList(emacs,PossMToNC) 1;
2243set ProgramTestSkipList(mawk,PossQMarkA) 1;
2244set ProgramTestSkipList(mawk,PossQMarkB) 1;
2245set ProgramTestSkipList(mawk,PossStarA) 1;
2246set ProgramTestSkipList(mawk,PossStarB) 1;
2247set ProgramTestSkipList(mawk,PossPlusA) 1;
2248set ProgramTestSkipList(mawk,PossPlusB) 1;
2249set ProgramTestSkipList(mawk,PossAtLeastMA) 1;
2250set ProgramTestSkipList(mawk,PossAtLeastMB) 1;
2251set ProgramTestSkipList(mawk,PossMToNA) 1;
2252set ProgramTestSkipList(mawk,PossMToNB) 1;
2253set ProgramTestSkipList(mawk,PossMToNC) 1;
2254set ProgramTestSkipList(numgrep,range) 1;
2255set ProgramTestSkipList(python,SubBackRefbsAtLeastTen) 1;
2256
2257#These are for debugging flex. They can likely be eliminated eventually.
2258set ProgramTestSkipList(flex,jUBlockIn) 1;
2259set ProgramTestSkipList(flex,jUBlockInc) 1;
2260set ProgramTestSkipList(flex,jUBlockIs) 1;
2261set ProgramTestSkipList(flex,jUBlockIsc) 1;
2262set ProgramTestSkipList(flex,jUBlockBare) 1;
2263set ProgramTestSkipList(flex,jUBlockBarec) 1;
2264set ProgramTestSkipList(flex,jUCat) 1;
2265set ProgramTestSkipList(flex,jUCatc) 1;
2266set ProgramTestSkipList(flex,jUCatIn) 1;
2267set ProgramTestSkipList(flex,jUCatcIn) 1;
2268set ProgramTestSkipList(flex,jUCatIs) 1;
2269set ProgramTestSkipList(flex,jUCatcIs) 1;
2270set ProgramTestSkipList(flex,jUBlockIndb) 1;
2271set ProgramTestSkipList(flex,jUBlockIncdb) 1;
2272set ProgramTestSkipList(flex,jUBlockIsdb) 1;
2273set ProgramTestSkipList(flex,jUBlockIscdb) 1;
2274set ProgramTestSkipList(flex,jUBlockBaredb) 1;
2275set ProgramTestSkipList(flex,jUBlockBarecdb) 1;
2276set ProgramTestSkipList(flex,jUCatdb) 1;
2277set ProgramTestSkipList(flex,jUCatcdb) 1;
2278set ProgramTestSkipList(flex,jUCatdbIn) 1;
2279set ProgramTestSkipList(flex,jUCatcdbIn) 1;
2280set ProgramTestSkipList(flex,jUCatdbIs) 1;
2281set ProgramTestSkipList(flex,jUCatcdbIs) 1;
2282
2283
2284#Here begin the palette entries
2285#We need this to be a procedure so that we can reset the glosses when we change locale.
2286proc SetPalette {} {
2287    global Palette
2288
2289    set Palette(BooleanAnd,gloss)   [_ "and"]
2290    set Palette(BooleanAnd,re)  	[list {{-a 0 } F} {{X Y} V}]
2291    set Palette(BooleanAnd,link)	[list BooleanAnd]
2292
2293    set Palette(dot,gloss)         [_ "any single character"]
2294    set Palette(dot,re)    	[list {. F}]
2295    set Palette(dot,link)    [list Dot]
2296
2297    set Palette(SingleOctet,gloss)         [_ "a single octet"]
2298    set Palette(SingleOctet,re)    	[list {\\C F}]
2299    set Palette(SingleOctet,link)    [list SingleOctet]
2300
2301    set Palette(XAnySingle,gloss)         [_ "any single nucleodtide or residue"]
2302    set Palette(XAnySingle,re)    	[list {X F}]
2303    set Palette(XAnySingle,link)    [list XAnySingle]
2304
2305    set Palette(DotAnySingle,gloss)         [_ "any single nucleotide or residue"]
2306    set Palette(DotAnySingle,re)    	[list {. F}]
2307    set Palette(DotAnySingle,link)    [list DotAnySingle]
2308
2309    set Palette(NAnySingleNucleotide,gloss)         [_ "any single nucleotide"]
2310    set Palette(NAnySingleNucleotide,re)    	[list {N F}]
2311    set Palette(NAnySingleNucleotide,link)    [list NAnySingleNucleotide]
2312
2313    set Palette(RAnySinglePurineBase,gloss)         [_ "any single purine base (A or G)"]
2314    set Palette(RAnySinglePurineBase,re)    	[list {R F}]
2315    set Palette(RAnySinglePurineBase,link)    [list RAnySinglePurineBase]
2316
2317    set Palette(YAnySinglePyramidineBase,gloss)         [_ "any single pyramidine base (C or T)"]
2318    set Palette(YAnySinglePyramidineBase,re)    	[list {Y F}]
2319    set Palette(YAnySinglePyramidineBase,link)    [list YAnySinglePyramidineBase]
2320
2321    set Palette(SBaseGC,gloss)         [_ "either Guanine or Cytosine"]
2322    set Palette(SBaseGC,re)    	[list {S F}]
2323    set Palette(SBaseGC,link)    [list SBaseGC]
2324
2325    set Palette(WBaseAT,gloss)   [_ "either Adenine or Tyrosine"]
2326    set Palette(WBaseAT,re)      [list {W F}]
2327    set Palette(WBaseAT,link)    [list WBaseAT]
2328
2329    set Palette(MBaseAC,gloss)   [_ "either Adenine or Cytosine"]
2330    set Palette(MBaseAC,re)      [list {M F}]
2331    set Palette(MBaseAC,link)    [list MBaseAC]
2332
2333    set Palette(KBaseGT,gloss)   [_ "either Guanine or Tyrosine"]
2334    set Palette(KBaseGT,re)      [list {K F}]
2335    set Palette(KBaseGT,link)    [list KBaseGT]
2336
2337    set Palette(VBaseACG,gloss)   [_ "one of Adenine, Cytosine or Guanine"]
2338    set Palette(VBaseACG,re)      [list {V F}]
2339    set Palette(VBaseACG,link)    [list VBaseACG]
2340
2341    set Palette(HBaseACT,gloss)   [_ "one of Adenine, Cytosine or Tyrosine"]
2342    set Palette(HBaseACT,re)      [list {H F}]
2343    set Palette(HBaseACT,link)    [list HBaseACT]
2344
2345    set Palette(DBaseAGT,gloss)   [_ "one of Adenine, Guanine or Tyrosine"]
2346    set Palette(DBaseAGT,re)      [list {D F}]
2347    set Palette(DBaseAGT,link)    [list DBaseAGT]
2348
2349    set Palette(BBaseCGT,gloss)   [_ "one of Cytosine, Guanine or Tyrosine"]
2350    set Palette(BBaseCGT,re)      [list {B F}]
2351    set Palette(BBaseCGT,link)    [list BBaseCGT]
2352
2353    set Palette(BResidueDN,gloss)   [_ "either Asparagine (N) or Aspartate (D)"]
2354    set Palette(BResidueDN,re)      [list {B F}]
2355    set Palette(BResidueDN,link)    [list BResidueDN]
2356
2357    set Palette(ZResidueEQ,gloss)   [_ "either Glutamate (E) or Glutamine (Q)"]
2358    set Palette(ZResidueEQ,re)      [list {Z F}]
2359    set Palette(ZResidueEQ,link)    [list ZResidueEQ]
2360
2361    set Palette(JResidueHydrophobic,gloss) [_ "any hydrophobic residue (ACFGILMVWY)"]
2362    set Palette(JResidueHydrophobic,re) [list {J F}]
2363    set Palette(JResidueHydrophobic,link) [list JResidueHydrophobic]
2364
2365    set Palette(OResidueHydrophilic,gloss) [_ "any hydrophilic residue (DEHKNQRST)"]
2366    set Palette(OResidueHydrophilic,re) [list {O F}]
2367    set Palette(OResidueHydrophilic,link) [list OResidueHydrophilic]
2368
2369    set Palette(UnderscoreAnySingle,gloss)  [_ "any single character"]
2370    set Palette(UnderscoreAnySingle,re)    	[list {_ F}]
2371    set Palette(UnderscoreAnySingle,link)   [list UnderscoreAnySingle]
2372
2373    set Palette(StarPrev,gloss)    [_ "0 or more of preceding"]
2374    set Palette(StarPrev,re)	[list {* F} ]
2375    set Palette(StarPrev,link)  	[list Star]
2376
2377    set Palette(CrosshatchPrev,gloss)  [_ "0 or more of preceding"]
2378    set Palette(CrosshatchPrev,re)	[list {\# F}]
2379    set Palette(CrosshatchPrev,link)  	[list CrosshatchPrev]
2380
2381    set Palette(DoubleCrosshatchPrev,gloss)  [_ "1 or more of preceding"]
2382    set Palette(DoubleCrosshatchPrev,re)	[list {\#\# F}]
2383    set Palette(DoubleCrosshatchPrev,link)  	[list DoubleCrosshatchPrev]
2384
2385    set Palette(StarNext,gloss)    [_ "0 or more of the parenthesized group"]
2386    set Palette(StarNext,re)	[list {*( F} {abc V} {) F}]
2387    set Palette(StarNext,link)  	[list StarNext]
2388
2389    set Palette(starclass,gloss)    [_ "0 or more of preceding class"]
2390    set Palette(starclass,re)	[list {* F}]
2391    set Palette(starclass,link)  	[list StarClass]
2392
2393    set Palette(PossStar,gloss)    [_ "0 or more of preceding (selfish)"]
2394    set Palette(PossStar,re)    [list {*+ F}]
2395    set Palette(PossStar,link)   [list SelfishQuantifier Star]
2396
2397    set Palette(SubReluctantStarPrevDollar,gloss)  [_ "0 or more of preceding (reluctant)"]
2398    set Palette(SubReluctantStarPrevDollar,re)    [list {*? F}]
2399    set Palette(SubReluctantStarPrevDollar,link)   [list ReluctantQuantifier Star]
2400
2401    set Palette(SubReluctantStarPrevBackslash,gloss)  [_ "0 or more of preceding (reluctant)"]
2402    set Palette(SubReluctantStarPrevBackslash,re)	[list {*? F}]
2403    set Palette(SubReluctantStarPrevBackslash,link)   [list ReluctantQuantifier Star]
2404
2405    set Palette(SubHyphenClass,gloss)  [_ "0 or more of preceding class (reluctant)"]
2406    set Palette(SubHyphenClass,re)     [list {- F}];
2407    set Palette(SubHyphenClass,link)     [list HyphenClass ReluctantQuantifier]
2408
2409    set Palette(any,gloss)         [_ {0 or more of following character or block}]
2410    set Palette(any,re)          [list {{any "} F}  {a V} {{"} F}]
2411    set Palette(any,link)          [list Any]
2412
2413    set Palette(StarAny,gloss)     [_ "0 or more of any character"]
2414    set Palette(StarAny,re)	  [list {* F}]
2415    set Palette(StarAny,link)	  [list StarAny]
2416
2417    set Palette(PercentAny,gloss)     [_ "0 or more of any character"]
2418    set Palette(PercentAny,re)	  [list {% F}]
2419    set Palette(PercentAny,link)	  [list PercentAny]
2420
2421    set Palette(plusprev,gloss)   [_ "1 or more of preceding"]
2422    set Palette(plusprev,re)    [list {+ F}];
2423    set Palette(plusprev,link)    [list Plus]
2424
2425    set Palette(plusprevbs,gloss)   [_ "1 or more of preceding"]
2426    set Palette(plusprevbs,re)    [list {\\+ F}];
2427    set Palette(plusprevbs,link)    [list Plus]
2428
2429    set Palette(plusclass,gloss)   [_ "1 or more of preceding class"]
2430    set Palette(plusclass,re)    [list {+ F}];
2431    set Palette(plusclass,link)    [list PlusClass]
2432
2433    set Palette(PossPlus,gloss)   [_ "1 or more of preceding (selfish)"]
2434    set Palette(PossPlus,re)   			   [list {++ F}];
2435    set Palette(PossPlus,link)   	[list Plus SelfishQuantifier]
2436
2437    set Palette(plusnext,gloss)    [_ "1 or more of the parenthesized group"]
2438    set Palette(plusnext,re)	[list {+( F} {abc V} {) F}]
2439    set Palette(plusnext,link)  	[list PlusNext]
2440
2441    set Palette(atsignonenext,gloss)    [_ "one of the alternatives in the parenthesized group"]
2442    set Palette(atsignonenext,re)	[list {@( F} {ab V} {| F} {cd V} {) F}]
2443    set Palette(atsignonenext,link)  [list AtSignOneNext]
2444
2445    set Palette(SubReluctantPlusPrevDollar,gloss)   [_ "1 or more of preceding (reluctant)"]
2446    set Palette(SubReluctantPlusPrevDollar,re)	   [list {+? F}];
2447    set Palette(SubReluctantPlusPrevDollar,link)	   [list Plus ReluctantQuantifier]
2448
2449    set Palette(SubReluctantPlusPrevBackslash,gloss)  [_ "1 or more of preceding (reluctant)"]
2450    set Palette(SubReluctantPlusPrevBackslash,re)    [list {+? F}];
2451    set Palette(SubReluctantPlusPrevBackslash,link)    [list Plus ReluctantQuantifier]
2452
2453    set Palette(some,gloss)        [_ {1 or more of following character or block}]
2454    set Palette(some,re)         [list {{some "} F}  {a V} {{"} F}]
2455
2456    set Palette(plusany,gloss)     [_ "1 or more of any character"]
2457    set Palette(plusany,re)     [list {+ F}];
2458    set Palette(plusany,link)     [list PlusAny]
2459
2460    set Palette(crosshatchany,gloss)  [_ {1 or more of preceding character}]
2461    set Palette(crosshatchany,re)     [list {\# F}];
2462    set Palette(crosshatchany,link)     [list CrosshatchAny]
2463
2464    set Palette(qmopt,gloss)       [_ "0 or 1 of preceding"];
2465    set Palette(qmopt,re)       [list {? F}];;
2466    set Palette(qmopt,link)       [list ZeroOneQMark]
2467
2468    set Palette(qmoptclass,gloss)       [_ "0 or 1 of preceding class"];
2469    set Palette(qmoptclass,re)       [list {? F}];;
2470    set Palette(qmoptclass,link)       [list ZeroOneQMarkClass]
2471
2472    set Palette(qmoptnext,gloss)       [_ "0 or 1 of the parenthesized group"];
2473    set Palette(qmoptnext,re)       [list {?( F} {ab V} {) F}];
2474    set Palette(qmoptnext,link)       [list ZeroOneQMarkNext]
2475
2476    set Palette(PossQMark,gloss)   [_ "0 or 1 of preceding (selfish)"]
2477    set Palette(PossQMark,re)   [list {?+ F}];
2478    set Palette(PossQMark,link)   [list ZeroOneQMark SelfishQuantifier]
2479
2480    set Palette(SubReluctantQuestionMarkPrevDollar,gloss)       [_ "0 or 1 of preceding (reluctant)"]
2481    set Palette(SubReluctantQuestionMarkPrevDollar,re)       [list {?? F}];
2482    set Palette(SubReluctantQuestionMarkPrevDollar,link)       [list ZeroOneQMark ReluctantQuantifier]
2483
2484    set Palette(SubReluctantQuestionMarkPrevBackslash,gloss)    [_ "0 or 1 of preceding (reluctant)"]
2485    set Palette(SubReluctantQuestionMarkPrevBackslash,re)       [list {?? F}];
2486    set Palette(SubReluctantQuestionMarkPrevBackslash,link)    [list ZeroOneQMark ReluctantQuantifier]
2487
2488    set Palette(qmoptbs,gloss)     [_ "0 or 1 of preceding"]
2489    set Palette(qmoptbs,re)     [list {{\?} F}];
2490    set Palette(qmoptbs,link)     [list ZeroOneQMark]
2491
2492    set Palette(EqualOptbs,gloss)     [_ "0 or 1 of preceding"]
2493    set Palette(EqualOptbs,re)     [list {{\=} F}];
2494    set Palette(EqualOptbs,link)     [list ZeroOneEqual]
2495
2496    set Palette(qmoptdbsnqq,gloss)     [_ "0 or 1 of preceding"]
2497    set Palette(qmoptdbsnqq,re)     [list {? F}];
2498    set Palette(qmoptdbsnqq,link)     [list ZeroOneQMark]
2499
2500    set Palette(qm1,gloss)         [_ "any single character"]
2501    set Palette(qm1,re)         [list {? F}];
2502    set Palette(qm1,link)         [list Dot]
2503
2504    set Palette(qm1bs,gloss)       [_ "any single character"]
2505    set Palette(qm1bs,re)       [list {{\?} F}];
2506    set Palette(qm1bs,link)         [list Dot]
2507
2508    set Palette(commaor,gloss)  [_ {"abc" or "def"}]
2509    set Palette(commaor,re)     [list {abc V} {, F} {def V}];
2510    set Palette(commaor,link)     [list OrString]
2511
2512    set Palette(semiand,gloss)     [_ {"abc" and "def"}];
2513    set Palette(semiand,re)     [list {abc V} {; F} {def V}];
2514    set Palette(semiand,link)     [list AndString]
2515
2516    set Palette(ampandbs,gloss)     [_ {"abc" and "def"}];
2517    set Palette(ampandbs,re)     [list {abc V} {\\& F} {def V}];
2518    set Palette(ampandbs,link)     [list AmpersandAnd]
2519
2520    set Palette(NegativeCircumflex,gloss) [_ "anything that does not match x"]
2521    set Palette(NegativeCircumflex,re) [list {^( F} {x V} {) F}];
2522    set Palette(NegativeCircumflex,link)	[list NegativeCircumflex]
2523
2524    #The expression x~y does not match x, though on a literal reading of the documentation
2525    #it should. ?~y does match x, as does [[:alnum:]]~y.
2526    #It looks like the tilde operator means ' match(A) - match(B) such that the
2527    #match(B) is a subset of match(A).
2528    set Palette(MatchNotMatchTilde,gloss) [_ "anything that matches x and does not match y"]
2529    set Palette(MatchNotMatchTilde,re) [list {x V} {~ F} {y V}];
2530    set Palette(MatchNotMatchTilde,link)	[list MatchNotMatchTilde]
2531
2532    set Palette(W3CharClassSubtraction,gloss)  [_ {a character in A and not in B}];
2533    set Palette(W3CharClassSubtraction,re)       [list {A V} {- F} {\[B\] V}];
2534    set Palette(W3CharClassSubtraction,link)  [list W3CharClassSubtraction]
2535
2536    set Palette(caret,gloss)       [_ {beginning of string}];
2537    set Palette(caret,re)       [list {^ F}];
2538    set Palette(caret,link)       [list BeginningOfString]
2539
2540    set Palette(PercentCaretBS,gloss)       [_ {beginning of file/string}];
2541    set Palette(PercentCaretBS,re)       [list {\\%^ F}];
2542    set Palette(PercentCaretBS,link)       [list BeginningOfFile]
2543
2544    set Palette(PercentDollarBS,gloss)       [_ {end of file/string}];
2545    set Palette(PercentDollarBS,re)       [list {\\%$ F}];
2546    set Palette(PercentDollarBS,link)       [list EndOfFile]
2547
2548    set Palette(pabegin,gloss)     [_ {beginning of string}]
2549    set Palette(pabegin,re)     [list {\\A F}];
2550    set Palette(pabegin,link)       [list BeginningOfString]
2551
2552    set Palette(pabegindb,gloss)   [_ {beginning of string}];
2553    set Palette(pabegindb,re)   [list {\\A F} ];
2554    set Palette(pabegindb,link)       [list BeginningOfString]
2555
2556    set Palette(boslq,gloss)     [_ {beginning of string}]
2557    set Palette(boslq,re)     [list {\` F}];
2558    set Palette(boslq,link)       [list BeginningOfString]
2559
2560    set Palette(dollar,gloss)      [_ "end of string"]
2561    set Palette(dollar,re)      [list {$ F}];
2562    set Palette(dollar,link)      [list EndOfString]
2563
2564    set Palette(GreaterThanEnd,gloss)  [_ "C-terminus/3'-end"]
2565    set Palette(GreaterThanEnd,re)     [list {> F}];
2566    set Palette(GreaterThanEnd,link)     [list GreaterThanEnd]
2567
2568    set Palette(LessThanBeginning,gloss)  [_ "N-terminus/5'-end"]
2569    set Palette(LessThanBeginning,re)     [list {< F}];
2570    set Palette(LessThanBeginning,link)     [list LessThanBeginning]
2571
2572    set Palette(pzendbs,gloss)     [_ "end of string"]
2573    set Palette(pzendbs,re)     [list {{\z} F}];
2574    set Palette(pzendbs,link)      [list EndOfString]
2575
2576    set Palette(pZendbs,gloss)     [_ {end of string}]
2577    set Palette(pZendbs,re)     [list {\\Z F}];
2578    set Palette(pZendbs,link)      [list EndOfString]
2579
2580    set Palette(pzenddbs,gloss)    [_ {end of string}];
2581    set Palette(pzenddbs,re)    [list {\\z F}];
2582    set Palette(pzenddbs,link)      [list EndOfString]
2583
2584    set Palette(pZenddbs,gloss)    [_ {end of string}];
2585    set Palette(pZenddbs,re)    [list {\\\\Z F}];
2586    set Palette(pZenddbs,link)      [list EndOfString]
2587
2588    set Palette(eosrq,gloss)     [_ {end of string}]
2589    set Palette(eosrq,re)     [list {\' F}];
2590    set Palette(eosrq,link)       [list EndOfString]
2591
2592    set Palette(BeginWordm,gloss)      [_ {beginning of word}];
2593    set Palette(BeginWordm,re)      [list {\\m F}];
2594    set Palette(BeginWordm,link)      [list BeginningOfWord]
2595
2596    set Palette(langle,gloss)      [_ {beginning of word}];
2597    set Palette(langle,re)      [list {\\< F}];
2598    set Palette(langle,link)      [list BeginningOfWord]
2599
2600    set Palette(LangleClass,gloss)      [_ {beginning of word}];
2601    set Palette(LangleClass,re)      [list {[[:<:]] F}];
2602    set Palette(LangleClass,link)      [list BeginningOfWord]
2603
2604    set Palette(EndWordM,gloss)      [_ {end of word}];
2605    set Palette(EndWordM,re)      [list {\\M F}];
2606    set Palette(EndWordM,link)      [list EndOfWord];
2607
2608    set Palette(rangle,gloss)      [_ {end of word}];
2609    set Palette(rangle,re)      [list {\\> F}];
2610    set Palette(rangle,link)      [list EndOfWord];
2611
2612    set Palette(RangleClass,gloss)      [_ {end of word}];
2613    set Palette(RangleClass,re)      [list {[[:>:]] F}];
2614    set Palette(RangleClass,link)      [list EndOfWord];
2615
2616    set Palette(WordBoundary,gloss) [_ "word boundary"]
2617    set Palette(WordBoundary,re) [list {\b F}]
2618    set Palette(WordBoundary,link) [list WordBoundary]
2619
2620    set Palette(WordBoundaryybs,gloss) [_ "word boundary"]
2621    set Palette(WordBoundaryybs,re) [list {\\y F}]
2622    set Palette(WordBoundaryybs,link) [list WordBoundary]
2623
2624    set Palette(WordBoundaryydbs,gloss) [_ "word boundary"]
2625    set Palette(WordBoundaryydbs,re) [list {\\y F}]
2626    set Palette(WordBoundaryydbs,link) [list WordBoundary]
2627
2628    set Palette(WordBoundaryBs,gloss) [_ "word boundary"]
2629    set Palette(WordBoundaryBs,re) [list {\\b F}]
2630    set Palette(WordBoundaryBs,link) [list WordBoundary]
2631
2632    set Palette(NonWordBoundary,gloss) [_ "non-word boundary"]
2633    set Palette(NonWordBoundary,re) [list {\\B F}]
2634    set Palette(NonWordBoundary,link) [list NonWordBoundary]
2635
2636    set Palette(NonWordBoundaryYbs,gloss) [_ "non-word boundary"]
2637    set Palette(NonWordBoundaryYbs,re) [list {\\Y F}]
2638    set Palette(NonWordBoundaryYbs,link) [list NonWordBoundary]
2639
2640    set Palette(set,gloss)         [_ "any character in the set"]
2641    set Palette(set,re)            [list {[ F} {abc V} {] F}]
2642    set Palette(set,link)            [list Set]
2643
2644    set Palette(setcomp,gloss)     [_ {any character not in the set}];
2645    set Palette(setcomp,re)     [list {[^ F} {abc V} {] F}];
2646    set Palette(setcomp,link)     [list SetComplement]
2647
2648    set Palette(setcomptilde,gloss)     [_ {any character not in the set}];
2649    set Palette(setcomptilde,re)     [list {[~ F} {abc V} {] F}];
2650    set Palette(setcomptilde,link)     [list SetComplement]
2651
2652    set Palette(setcompbang,gloss)     [_ {any character not in the set}];
2653    set Palette(setcompbang,re)     [list {[! F} {abc V} {] F}];
2654    set Palette(setcompbang,link)     [list SetComplement]
2655
2656    set Palette(range,gloss)       [_ {any character from a through d}];
2657    set Palette(range,re)       [list {[ F} {a V} {- F} {d V} {] F}];
2658    set Palette(range,link)       [list Range]
2659
2660    set Palette(multirange,gloss)       [_ {any character from a through d or w through z} ];
2661    set Palette(multirange,re)       [list {[ F} {a V} {- F} {d V} {w V} {- F} {z V} {] F}];
2662    set Palette(multirange,link)       [list MultiRange]
2663
2664    set Palette(IntegerRange,gloss)       [_ "any integer k such that m \u2264 k \u2264 n"];
2665    set Palette(IntegerRange,re)       [list {< F} {m V} {- F} {n V} {> F}];
2666    set Palette(IntegerRange,link)       [list IntegerRange]
2667
2668    set Palette(IntegerRangeDoubleDot,gloss)       [_ "any integer k such that m \u2264 k \u2264 n"];
2669    set Palette(IntegerRangeDoubleDot,re)       [list {m V} {.. F} {n V}];
2670    set Palette(IntegerRangeDoubleDot,link)       [list IntegerRangeDoubleDot]
2671
2672    set Palette(IntegerMultiple,gloss)       [_ "any integral multiple of p"];
2673    set Palette(IntegerMultiple,re)       [list {m F} {p V}];
2674    set Palette(IntegerMultiple,link)       [list IntegerMultiple]
2675
2676    set Palette(IntegerFactor,gloss)       [_ "any integral factor of p"];
2677    set Palette(IntegerFactor,re)       [list {f F} {p V}];
2678    set Palette(IntegerFactor,link)       [list IntegerFactor]
2679
2680    set Palette(IntegerAlternative,gloss)       [_ "j or k or l"];
2681    set Palette(IntegerAlternative,re)       [list {j V} {, F} {k V} {, F} {l V}];
2682    set Palette(IntegerAlternative,link)       [list IntegerAlternative]
2683
2684    set Palette(group,gloss)       [_ {group}];
2685    set Palette(group,re)       [list {( F} {abc V} {) F}];
2686    set Palette(group,link)       [list Group]
2687
2688    set Palette(GroupNoWildcards,gloss)       [_ {group}];
2689    set Palette(GroupNoWildcards,re)       [list {( F} {abc V} {) F}];
2690    set Palette(GroupNoWildcards,link)       [list GroupNoWildcards]
2691
2692    set Palette(groupbs,gloss)     [_ {group}];
2693    set Palette(groupbs,re)     [list {\\( F} {abc V} {\\) F}];
2694    set Palette(groupbs,link)       [list Group]
2695
2696    set Palette(groupdbsnqq,gloss)     [_ {group}];
2697    set Palette(groupdbsnqq,re)     [list {\\\\( F} {abc V} {\\\\) F}];
2698    set Palette(groupdbsnqq,link)       [list Group]
2699
2700    set Palette(ObligatoryQuantifierGroup,gloss)     [_ {obligatorily quantified group}];
2701    set Palette(ObligatoryQuantifierGroup,re)     [list {\( F} {abc V} {\) F}];
2702    set Palette(ObligatoryQuantifierGroup,link)       [list ObligatoryQuantifierGroup]
2703
2704    set Palette(groupdbs,gloss)    [_ {group}];
2705    set Palette(groupdbs,re)    [list {\\\\( F} {abc V} {\\\\) F}];
2706    set Palette(groupdbs,link)       [list Group]
2707
2708    set Palette(ncgroup,gloss)     [_ {no capture group}];
2709    set Palette(ncgroup,re)     [list {(?: F} {abc V} {) F}];
2710    set Palette(ncgroup,link)     [list NoCaptureGroup]
2711
2712    set Palette(NoCaptureGroupPercentbsall,gloss)     [_ {no capture group}];
2713    set Palette(NoCaptureGroupPercentbsall,re)     [list {\\%\\( F} {abc V} {\\) F}];
2714    set Palette(NoCaptureGroupPercentbsall,link)     [list NoCaptureGroup]
2715
2716    set Palette(ncgroupdb,gloss)   [_ {no capture group}];
2717    set Palette(ncgroupdb,re)   [list {(?: F} {abc V} {) F} ];
2718    set Palette(ncgroupdb,link)     [list NoCaptureGroup]
2719
2720    set Palette(groupcomp,gloss)   [_ {complement of group}];
2721    set Palette(groupcomp,re)   [list {!( F} {abc V} {) F} ];
2722    set Palette(groupcomp,link)     [list GroupComplement]
2723
2724    set Palette(repfixed,gloss)    [_ "n copies of preceding re"];
2725    set Palette(repfixed,re)    [list {\{ F} {n V} {\} F}];
2726    set Palette(repfixed,link)    [list NCopies]
2727
2728    set Palette(repfixedbs,gloss)  [_ "n copies of preceding re"];
2729    set Palette(repfixedbs,re)  [list {\\\{ F} {n V} {\\\} F}];
2730    set Palette(repfixedbs,link)  [list NCopies]
2731
2732    set Palette(repfixeddbs,gloss)  [_ "n copies of preceding re"];
2733    set Palette(repfixeddbs,re)  [list {\\\\\{ F} {n V} {\\\\\} F}]
2734    set Palette(repfixeddbs,link)  [list NCopies]
2735
2736    set Palette(repmin,gloss)      [_ "at least m copies of preceding re"];
2737    set Palette(repmin,re)      [list {\{ F} {m V} {,\} F}];
2738    set Palette(repmin,link)      [list MNAtLeast]
2739
2740    set Palette(repmax,gloss)      [_ "at most n copies of preceding re"];
2741    set Palette(repmax,re)      [list {\{, F} {n V} {\} F}];
2742    set Palette(repmax,link)      [list MNAtMost]
2743
2744    set Palette(repmaxlbs,gloss)      [_ "at most n copies of preceding re"];
2745    set Palette(repmaxlbs,re)      [list {\\\{, F} {n V} {\} F}];
2746    set Palette(repmaxlbs,link)      [list MNAtMost]
2747
2748    set Palette(PossAtLeastM,gloss) [_ "at least n copies of preceding re (selfish)"];
2749    set Palette(PossAtLeastM,re) [list {\{ F} {n V} {,\}+ F}];
2750    set Palette(PossAtLeastM,link) [list MNAtLeast SelfishQuantifier]
2751
2752    set Palette(repminbs,gloss)    [_ "at least n copies of preceding re"];
2753    set Palette(repminbs,re)    [list {\\\{ F}  {n V}  {,\\\} F} ];
2754    set Palette(repminbs,link) [list MNAtLeast]
2755
2756    set Palette(ZeroOrMoreCurly,gloss)    [_ "zero or more copies of preceding re"];
2757    set Palette(ZeroOrMoreCurly,re)    [list {\\\{ F} {\} F} ];
2758    set Palette(ZeroOrMoreCurly,link) [list ZeroOrMoreCurly]
2759
2760    set Palette(repmindbs,gloss)    [_ "at least n copies of preceding re"];
2761    set Palette(repmindbs,re)    [list {\\\\\{ F}   {n V}  {,\\\\\} F} ];
2762    set Palette(repmindbs,link) [list MNAtLeast]
2763
2764    set Palette(reprange,gloss)    [_ {from m to n of preceding re}];
2765    set Palette(reprange,re)    [list {\{ F} {m V} {, F} {n V} {\} F}];
2766    set Palette(reprange,link)    [list MNRange]
2767
2768    set Palette(PossMToN,gloss)    [_ {from m to n of preceding re (selfish)}];
2769    set Palette(PossMToN,re)    [list {\{ F} {m V} {, F} {n V} {\}+ F}];
2770    set Palette(PossMToN,link)    [list MNRange SelfishQuantifier]
2771
2772    set Palette(SubReluctantIntegerRangeDollar,gloss)    [_ {from m to n of preceding re (reluctant)}];
2773    set Palette(SubReluctantIntegerRangeDollar,re)      [list {\{ F} {m V} {, F} {n V} {\}? F}];
2774    set Palette(SubReluctantIntegerRangeDollar,link)      [list MNRange ReluctantQuantifier]
2775
2776    set Palette(SubReluctantIntegerRangeBackslash,gloss)    [_ {from m to n of preceding re (reluctant)}];
2777    set Palette(SubReluctantIntegerRangeBackslash,re)   [list {\{ F} {m V} {, F} {n V} {\}? F}];
2778    set Palette(SubReluctantIntegerRangeBackslash,link)      [list MNRange ReluctantQuantifier]
2779
2780    set Palette(ReluctantIntegerRangeVIMBackslash,gloss)    [_ {from m to n of preceding re (reluctant)}];
2781    set Palette(ReluctantIntegerRangeVIMBackslash,re)   [list {\\\{- F} {m V} {, F} {n V} {\} F}];
2782    set Palette(ReluctantIntegerRangeVIMBackslash,link)      [list MNRange ReluctantQuantifier]
2783
2784    set Palette(ReluctantAtLeastMVIMBackslash,gloss)    [_ {at least m of preceding re (reluctant)}];
2785    set Palette(ReluctantAtLeastMVIMBackslash,re)   [list {\\\{- F} {m V} {, F} {\} F}];
2786    set Palette(ReluctantAtLeastMVIMBackslash,link)      [list MNAtLeast ReluctantQuantifier]
2787
2788    set Palette(ReluctantAtMostNVIMBackslash,gloss)    [_ {at most n of preceding re (reluctant)}];
2789    set Palette(ReluctantAtMostNVIMBackslash,re)   [list {\\\{- F} {, F} {n V} {\} F}];
2790    set Palette(ReluctantAtMostNVIMBackslash,link)      [list MNAtMost ReluctantQuantifier]
2791
2792    set Palette(ReluctantExactlyMVIMBackslash,gloss)    [_ {exactly m of preceding re (reluctant)}];
2793    set Palette(ReluctantExactlyMVIMBackslash,re)   [list {\\\{- F} {m V} {\} F}];
2794    set Palette(ReluctantExactlyMVIMBackslash,link)      [list NCopies ReluctantQuantifier]
2795
2796    set Palette(SubReluctantZeroOrMoreVIMBackslash,gloss)  [_ {zero or more of preceding re (reluctant)}];
2797    set Palette(SubReluctantZeroOrMoreVIMBackslash,re)   [list {\\\{-\} F}];
2798    set Palette(SubReluctantZeroOrMoreVIMBackslash,link)  [list ZeroOrMoreCurly ReluctantQuantifier]
2799
2800    set Palette(reprangebs,gloss)  [_ {from m to n of preceding re}];
2801    set Palette(reprangebs,re)  [list  {\\\{ F} {m V} {, F} {n V} {\\\} F} ];
2802    set Palette(reprangebs,link)  [list  MNRange]
2803
2804    set Palette(reprangelbs,gloss)  [_ {from m to n of preceding re}];
2805    set Palette(reprangelbs,re)  [list  {\\\{ F} {m V} {, F} {n V} {\} F} ];
2806    set Palette(reprangelbs,link)  [list  MNRange]
2807
2808    set Palette(reprangedbs,gloss) [_ {from m to n of preceding re}];
2809    set Palette(reprangedbs,re)  [list  {\\\\\{ F} {m V} {, F} {n V} {\\\\\} F} ];
2810    set Palette(reprangedbs,link)  [list  MNRange]
2811
2812    set Palette(rangerebol,gloss)  [_ {from m to n of following}];
2813    set Palette(rangerebol,re)  [list {\[ F} {m V} {{ } F} {n V} {\" F} {ab V} {\"\] F}];
2814
2815    set Palette(pipe,gloss)         [_ {a or b}];
2816    set Palette(pipe,re)         [list {( F} {a V} {| F} {b V} {) F}];
2817    set Palette(pipe,link)         [list OrString]
2818
2819    set Palette(pipebs,gloss)       [_ {a or b}];
2820    set Palette(pipebs,re)       [list  {( F} {a V} {\\| F} {b V} {) F} ];
2821    set Palette(pipebs,link)         [list OrString]
2822
2823    set Palette(pipedbs,gloss)      [_ {a or b}];
2824    set Palette(pipedbs,re)   [list  {( F} {a V} {\\\\| F} {b V} {) F} ];
2825    set Palette(pipedbs,link)         [list OrString]
2826
2827    set Palette(pipebsall,gloss)   [_ {a or b}];
2828    set Palette(pipebsall,re)   [list  {\\( F} {a V} {\\| F} {b V} {\\) F} ];
2829    set Palette(pipebsall,link)         [list OrString]
2830
2831    set Palette(pipedbsall,gloss)   [_ {a or b}];
2832    set Palette(pipedbsall,re)   [list  {\\\\( F} {a V} {\\\\| F} {b V} {\\\\) F} ];
2833    set Palette(pipedbsall,link)         [list OrString]
2834
2835    set Palette(piperebol,gloss)  [_ {a or b}];
2836    set Palette(piperebol,re)  [list {\[\" F} {a V} {\"|\" F} {b V} {\"\] F}];
2837    set Palette(piperebol,link)         [list OrString]
2838
2839    set Palette(altcomma,gloss)   [_ {string ab or cd or ef}];
2840    set Palette(altcomma,re)   [list {\{ F} {{ab} V} {, F} {{cd} V} {, F} {ef V} {\} F}];
2841    set Palette(altcomma,link)         [list OrString]
2842
2843    set Palette(backref,gloss)    [_ {match what is matched by kth subexpression}];
2844    set Palette(backref,re)    [list {\\ F} {k V}];
2845    set Palette(backref,link)    [list BackReferenceMatch]
2846
2847    set Palette(backrefksh,gloss)    [_ {match what is matched by kth subexpression}];
2848    set Palette(backrefksh,re)    [list {\\ F} {k V}];
2849    set Palette(backrefksh,link)    [list BackReferenceMatch]
2850
2851    set Palette(backrefper,gloss) [_ {match what is matched by kth subexpression}];
2852    set Palette(backrefper,re) [list {% F} {k V}];
2853    set Palette(backrefper,link) [list BackReferenceMatch]
2854
2855    set Palette(backrefdbs,gloss) [_ {match what is matched by kth subexpression}];
2856    set Palette(backrefdbs,re) [list {\\\\ F} {k V}];
2857    set Palette(backrefdbs,link) [list BackReferenceMatch]
2858
2859    set Palette(backrefbsall,gloss) [_ {match what is matched by kth subexpression}];
2860    set Palette(backrefbsall,re) [list {\\ F} {k V}];
2861    set Palette(backrefbsall,link) [list BackReferenceMatch]
2862
2863    set Palette(backrefdbsall,gloss) [_ {match what is matched by kth subexpression}];
2864    set Palette(backrefdbsall,re) [list {\\\\ F} {k V}];
2865    set Palette(backrefdbsall,link) [list BackReferenceMatch]
2866
2867    set Palette(baldlim,gloss)    [_ {a string beginning with x and ending with y}];
2868    set Palette(baldlim,re)    [list {%b F} {xy V}];
2869    set Palette(baldlim,link)    [list XYPair]
2870
2871    set Palette(alnum,gloss)      [_ {any alphanumeric character}];
2872    set Palette(alnum,re)      [list {[[:alnum:]] F}];
2873    set Palette(alnum,link)    [list AlphaNumWord]
2874
2875    set Palette(alnumrebol,gloss) [_ {any alphanumeric character}];
2876    set Palette(alnumrebol,re) [list {alnum F}];
2877    set Palette(alnumrebol,link)    [list AlphaNumWord]
2878
2879    set Palette(lalnum,gloss)     [_ {any alphanumeric character}];
2880    set Palette(lalnum,re)     [list {%w F}];
2881    set Palette(lalnum,link)    [list AlphaNumWord]
2882
2883    set Palette(lalnumc,gloss)    [_ {any non-alphanumeric character}];
2884    set Palette(lalnumc,re)    [list {%W F}];
2885    set Palette(lalnum,link)    [list AlphaNumWord]
2886
2887    set Palette(alpha,gloss)      [_ {any alphabetic character}];
2888    set Palette(alpha,re)      [list {[[:alpha:]] F}];
2889    set Palette(alpha,link)      [list Alpha]
2890
2891    set Palette(alpharebol,gloss) [_ {any alphabetic character}];
2892    set Palette(alpharebol,re) [list {alpha F}];
2893    set Palette(alpharebol,link)      [list Alpha]
2894
2895    set Palette(lalpha,gloss)     [_ {any alphabetic character}];
2896    set Palette(lalpha,re)     [list {%a F}];
2897    set Palette(lalpha,link)      [list Alpha]
2898
2899    set Palette(lalphac,gloss)    [_ {any non-alphabetic character}];
2900    set Palette(lalphac,re)    [list {%A F}];
2901    set Palette(lalphac,link)      [list Alpha]
2902
2903    set Palette(blank,gloss)      [_ {any space or tab character}];
2904    set Palette(blank,re)      [list {[[:blank:]] F}];
2905    set Palette(blank,link)      [list Blank];
2906
2907    set Palette(cntrl,gloss)      [_ {any control character}];
2908    set Palette(cntrl,re)      [list {[[:cntrl:]] F}];
2909    set Palette(cntrl,link)    [list ControlCharacter]
2910
2911    set Palette(lcntrl,gloss)     [_ {any control character}];
2912    set Palette(lcntrl,re)     [list {%c F}];
2913    set Palette(lcntrl,link)    [list ControlCharacter]
2914
2915    set Palette(lcntrlc,gloss)    [_ {any non control character}];
2916    set Palette(lcntrlc,re)    [list {%C F}];
2917    set Palette(lcntrlc,link)    [list ControlCharacter]
2918
2919    set Palette(graph,gloss)      [_ {any visible character}];
2920    set Palette(graph,re)      [list {[[:graph:]] F}];
2921    set Palette(graph,link)      [list Visible];
2922
2923    set Palette(print,gloss)      [_ {any printable character}];
2924    set Palette(print,re)      [list {[[:print:]] F}];
2925    set Palette(print,link)      [list Visible]
2926
2927    set Palette(mockprint,gloss)      [_ {one alphanumeric character}];
2928    set Palette(mockprint,re)      [list {[[:print:]] F}];
2929    set Palette(mockprint,link)      [list MockPrint]
2930
2931    set Palette(perlprint,gloss)      "\[:alnum:\] \u222A \[:punct:\] \u222A \[:space:\]";
2932    set Palette(perlprint,re)      [list {[[:print:]] F}];
2933    set Palette(perlprint,link)      [list PerlPrint]
2934
2935    set Palette(space,gloss)      [_ {any space character}];
2936    set Palette(space,re)      [list {[[:space:]] F}];
2937    set Palette(space,link)      [list Whitespace]
2938
2939    set Palette(TabClass,gloss)      [_ {the tabulation character (U+0009)}];
2940    set Palette(TabClass,re)      [list {[[:tab:]] F}];
2941
2942    set Palette(EscapeClass,gloss)      [_ {the escape character (U+001B)}];
2943    set Palette(EscapeClass,re)      [list {[[:escape:]] F}];
2944
2945    set Palette(BackspaceClass,gloss)      [_ {the backspace character (U+0008)}];
2946    set Palette(BackspaceClass,re)      [list {[[:backspace:]] F}];
2947
2948    set Palette(lspace,gloss)     [_ {any space character}];
2949    set Palette(lspace,re)     [list {%s F}];
2950    set Palette(lspace,link)      [list Whitespace]
2951
2952    set Palette(pspace,gloss)     [_ {any space character}];
2953    set Palette(pspace,re)     [list {\\s F}];
2954    set Palette(pspace,link)     [list Space Whitespace]
2955
2956    set Palette(pspacedb,gloss)   [_ {one space character}];
2957    set Palette(pspacedb,re)   [list {\\\\s F}];
2958    set Palette(pspacedb,link)   [list Whitespace]
2959
2960    set Palette(lspacec,gloss)    [_ {one non space character}];
2961    set Palette(lspacec,re)    [list {%S F}];
2962    set Palette(lspacec,link)    [list Whitespace]
2963
2964    set Palette(pspacec,gloss)    [_ {one non-space character}];
2965    set Palette(pspacec,re)    [list {\\S F}];
2966    set Palette(pspacec,link)    [list Space Whitespace]
2967
2968    set Palette(pspacedbc,gloss)  [_ {one non-space character}];
2969    set Palette(pspacedbc,re)  [list {\\\\S F}];
2970    set Palette(pspacedbc,link)  [list Whitespace]
2971
2972    set Palette(W3Space,gloss)     [_ {a space character}];
2973    set Palette(W3Space,re)     [list {\\s F}];
2974    set Palette(W3Space,link)     [list W3Space]
2975
2976    set Palette(W3Spacec,gloss)     [_ {a non-space character}];
2977    set Palette(W3Spacec,re)     [list {\\S F}];
2978    set Palette(W3Spacec,link)     [list W3Space]
2979
2980    set Palette(punct,gloss)      [_ {one punctuation symbol}];
2981    set Palette(punct,re)      [list {[[:punct:]] F}];
2982    set Palette(punct,link)      [list Punctuation]
2983
2984    set Palette(lpunct,gloss)     [_ {one punctuation symbol}];
2985    set Palette(lpunct,re)     [list {%p F}];
2986    set Palette(lpunct,link)     [list Punctuation]
2987
2988    set Palette(lpunctc,gloss)    [_ {one non-punctuation symbol}];
2989    set Palette(lpunctc,re)    [list {%P F}];
2990    set Palette(lpunctc,link)    [list Punctuation]
2991
2992    set Palette(lower,gloss)      [_ {one lower-case alphabetic character}];
2993    set Palette(lower,re)      [list {[[:lower:]] F}];
2994    set Palette(lower,link)      [list LowerCaseLetter]
2995
2996    set Palette(lowerrebol,gloss) [_ {one lower-case alphabetic character}];
2997    set Palette(lowerrebol,re) [list {lower F}];
2998    set Palette(lowerrebol,link)      [list LowerCaseLetter]
2999
3000    set Palette(llower,gloss)     [_ {one lower-case alphabetic character}];
3001    set Palette(llower,re)     [list {%l F}];
3002    set Palette(llower,link)      [list LowerCaseLetter]
3003
3004    set Palette(llowerc,gloss)    [_ {one non lower-case alphabetic character}];
3005    set Palette(llowerc,re)    [list {%L F}];
3006    set Palette(llowerc,link)      [list LowerCaseLetter]
3007
3008    set Palette(upper,gloss)      [_ {one upper-case alphabetic character}];
3009    set Palette(upper,re)      [list {[[:upper:]] F}];
3010    set Palette(upper,link)      [list UpperCaseLetter]
3011
3012    set Palette(upperrebol,gloss) [_ {one upper-case alphabetic character}];
3013    set Palette(upperrebol,re) [list {upper F}];
3014    set Palette(upperrebol,link)      [list UpperCaseLetter]
3015
3016    set Palette(lupper,gloss)     [_ {one upper-case alphabetic character}];
3017    set Palette(lupper,re)     [list {%u F}];
3018    set Palette(lupper,link)      [list UpperCaseLetter]
3019
3020    set Palette(lupperc,gloss)    [_ {one non upper-case alphabetic character}];
3021    set Palette(lupperc,re)    [list {%U F}];
3022    set Palette(lupperc,link)      [list UpperCaseLetter]
3023
3024    set Palette(digit,gloss)      [_ {one digit}];
3025    set Palette(digit,re)      [list {[[:digit:]] F}];
3026    set Palette(digit,link)    [list Digit]
3027
3028    set Palette(digitrebol,gloss) [_ {one digit}];
3029    set Palette(digitrebol,re) [list {digit F}];
3030    set Palette(digitrebol,link)    [list Digit]
3031
3032    set Palette(compposixclassinner,gloss)      [_ {complement of named class foo}];
3033    set Palette(compposixclassinner,re)      [list {[[:^  F} {foo V} {:]] F}];
3034    set Palette(compposixclassinner,link)      [list ClassComplement]
3035
3036    set Palette(compposixclassouter,gloss)      [_ {complement of named class foo}];
3037    set Palette(compposixclassouter,re)      [list {[^[:  F} {foo V} {:]] F}];
3038    set Palette(compposixclassouter,link)      [list ClassComplement]
3039
3040    set Palette(ldigit,gloss)     [_ {one digit}];
3041    set Palette(ldigit,re)     [list {%d F}];
3042    set Palette(ldigit,link)    [list Digit]
3043
3044    set Palette(pdigit,gloss)     [_ {one digit}];
3045    set Palette(pdigit,re)     [list {\\d F}];
3046    set Palette(pdigit,link)    [list Digit]
3047
3048    set Palette(xmldigit,gloss)     [_ {one digit}];
3049    set Palette(xmldigit,re)     [list {\\d F}];
3050    set Palette(xmldigit,link)    [list Digit]
3051
3052    set Palette(pdigitdb,gloss)   [_ {one digit}];
3053    set Palette(pdigitdb,re)   [list {\\\\d F}];
3054    set Palette(pdigitdb,link)    [list Digit]
3055
3056    set Palette(ldigitc,gloss)    [_ {one non-digit}];
3057    set Palette(ldigitc,re)    [list {%D F}];
3058    set Palette(ldigitc,link)    [list Digit]
3059
3060    set Palette(pdigitc,gloss)    [_ {one non-digit}];
3061    set Palette(pdigitc,re)    [list {\\D F}];
3062    set Palette(pdigitc,link)    [list Digit]
3063
3064    set Palette(xmldigitc,gloss)    [_ {one non-digit}];
3065    set Palette(xmldigitc,re)    [list {\\D F}];
3066    set Palette(xmldigitc,link)    [list Digit]
3067
3068    set Palette(pdigitdbc,gloss)  [_ {one non-digit}];
3069    set Palette(pdigitdbc,re)  [list {\\\\D F}];
3070    set Palette(pdigitcdb,link)    [list Digit]
3071
3072    set Palette(xdigit,gloss)     [_ {one hex digit}];
3073    set Palette(xdigit,re)     [list {[[:xdigit:]] F}];
3074    set Palette(xdigit,link)    [list HexDigit]
3075
3076    set Palette(xdigitrebol,gloss) [_ {one hex digit}];
3077    set Palette(xdigitrebol,re) [list {xdigit F}];
3078    set Palette(xdigitrebol,link)    [list HexDigit]
3079
3080    set Palette(lxdigit,gloss)    [_ {one hex digit}];
3081    set Palette(lxdigit,re)    [list {%x F}];
3082    set Palette(lxdigit,link)    [list HexDigit]
3083
3084    set Palette(lxdigitc,gloss)   [_ {one non hex digit}];
3085    set Palette(lxdigitc,re)   [list {%X F}];
3086    set Palette(lxdigitc,link)    [list HexDigit]
3087
3088    set Palette(AlphaBSa,gloss)    [_ {one alphabetic character}];
3089    set Palette(AlphaBSa,re)    [list {\\a F}];
3090    set Palette(AlphaBSa,link)    [list Alpha]
3091
3092    set Palette(AlphaBSAc,gloss)    [_ {one non-alphabetic character}];
3093    set Palette(AlphaBSAc,re)    [list {\\A F}];
3094    set Palette(AlphaBSAc,link)    [list Alpha]
3095
3096    set Palette(WordBSh,gloss)    [_ {one word charcter}];
3097    set Palette(WordBSh,re)    [list {\\w F}];
3098    set Palette(WordBSh,link)    [list Word]
3099
3100    set Palette(WordBSHc,gloss)    [_ {one non-word character}];
3101    set Palette(WordBSHc,re)    [list {\\W F}];
3102    set Palette(WordBSHc,link)    [list Word]
3103
3104    set Palette(WordHeadBSh,gloss)    [_ {one word head charcter}];
3105    set Palette(WordHeadBSh,re)    [list {\\h F}];
3106    set Palette(WordHeadBSh,link)    [list WordHead]
3107
3108    set Palette(WordHeadBSHc,gloss)    [_ {one non-word head character}];
3109    set Palette(WordHeadBSHc,re)    [list {\\H F}];
3110    set Palette(WordHeadBSHc,link)    [list WordHead]
3111
3112    set Palette(UpperCaseBSu,gloss)    [_ {one upper-case letter}];
3113    set Palette(UpperCaseBSu,re)    [list {\\u F}];
3114    set Palette(UpperCaseBSu,link)    [list UpperCase]
3115
3116    set Palette(UpperCaseBSUc,gloss)    [_ {one non-upper-case letter}];
3117    set Palette(UpperCaseBSUc,re)    [list {\\U F}];
3118    set Palette(UpperCaseBSUc,link)    [list UpperCase]
3119
3120    set Palette(LowerCaseBSl,gloss)    [_ {one lower-case letter}];
3121    set Palette(LowerCaseBSl,re)    [list {\\l F}];
3122    set Palette(LowerCaseBSl,link)    [list LowerCase]
3123
3124    set Palette(LowerCaseBSLc,gloss)    [_ {one non-lower-case letter}];
3125    set Palette(LowerCaseBSLc,re)    [list {\\L F}];
3126    set Palette(LowerCaseBSLc,link)    [list LowerCase]
3127
3128    set Palette(odigitBSo,gloss)    [_ {one octal digit}];
3129    set Palette(odigitBSo,re)    [list {\\o F}];
3130    set Palette(odigitBSo,link)    [list OctalDigit]
3131
3132    set Palette(odigitBSOc,gloss)    [_ {one non octal digit}];
3133    set Palette(odigitBSOc,re)    [list {\\O F}];
3134    set Palette(odigitBSOc,link)    [list OctalDigit]
3135
3136    set Palette(xdigitBSx,gloss)    [_ {one hex digit}];
3137    set Palette(xdigitBSx,re)    [list {\\x F}];
3138    set Palette(xdigitBSx,link)    [list HexDigit]
3139
3140    set Palette(xdigitBSxc,gloss)    [_ {one non hex digit}];
3141    set Palette(xdigitBSxc,re)    [list {\\X F}];
3142    set Palette(xdigitBSxc,link)    [list HexDigit]
3143
3144    set Palette(wordclass,gloss)     [_ {one word character}];
3145    set Palette(wordclass,re)     [list {[[:word:]] F}];
3146    set Palette(wordclass,link)    [list Word]
3147
3148    set Palette(bsw,gloss)        [_ {one alphanumeric character}];
3149    set Palette(bsw,re)        [list {\\w F}];
3150    set Palette(bsw,link)        [list AlphaNumWord];
3151
3152    set Palette(pbsw,gloss)       [_ {one alphanumeric character or underscore}];
3153    set Palette(pbsw,re)       [list {\\w F}];
3154    set Palette(pbsw,link)    [list AlphaNumWord]
3155
3156    set Palette(pbbsw,gloss)      [_ {one alphanumeric character or underscore}];
3157    set Palette(pbbsw,re)      [list {\\\\w F}];
3158    set Palette(pbbsw,link)    [list AlphaNumWord]
3159
3160    set Palette(bsW,gloss)        [_ {one non-alphanumeric character}];
3161    set Palette(bsW,re)        [list {\\W F}];
3162    set Palette(bsW,link)        [list AlphaNumword];
3163
3164    set Palette(bsWdb,gloss)      [_ {one non-alphanumeric character}];
3165    set Palette(bsWdb,re)      [list {\\\\W F}];
3166    set Palette(bsWdb,link)        [list AlphaNumword];
3167
3168    set Palette(pbsW,gloss)       [_ {one character not alphanumeric or underscore}];
3169    set Palette(pbsW,re)       [list {\\W F}];
3170    set Palette(pbsW,link)    [list AlphaNumWord]
3171
3172    set Palette(octal,gloss)      [_ {a single byte character code in octal}];
3173    set Palette(octal,re)      [list {\\ F} {155 V}];
3174    set Palette(octal,link)      [list OctalCode];
3175
3176    set Palette(octalo,gloss)      [_ {a single byte character code in octal}];
3177    set Palette(octalo,re)      [list {\\o F} {155 V}];
3178    set Palette(octalo,link)      [list OctalCode];
3179
3180    set Palette(decimald,gloss)      [_ {a single byte character code in decimal}];
3181    set Palette(decimald,re)      [list {\\d F} {155 V}];
3182    set Palette(decimald,link)      [list DecimalCode];
3183
3184    set Palette(octaldb,gloss)    [_ {a single byte character code in octal}];
3185    set Palette(octaldb,re)    [list {\\\\ F} {155 V}];
3186    set Palette(octaldb,link)    [list OctalCode];
3187
3188    set Palette(hexl,gloss)       [_ {a character code in hexadecimal}];
3189    set Palette(hexl,re)       [list {\\x F} {6d V}];
3190    set Palette(hexl,link)       [list HexCode]
3191
3192    set Palette(hexldb,gloss)     [_ {a character code in hexadecimal}];
3193    set Palette(hexldb,re)     [list {\\\\x F} {6d V}];
3194    set Palette(hexldb,link)     [list HexCode]
3195
3196    set Palette(hexu,gloss)       [_ {a character code in hexadecimal}];
3197    set Palette(hexu,re)       [list {\\x F} {6D V}];
3198    set Palette(hexu,link)       [list HexCode]
3199
3200    set Palette(hexudb,gloss)     [_ {a character code in hexadecimal}];
3201    set Palette(hexudb,re)     [list {\\\\x F} {6D V}];
3202    set Palette(hexudb,link)     [list HexCode]
3203
3204    set Palette(HexWideCharacterCurly,gloss)  [_ {a wide character in hexadecimal}]
3205    set Palette(HexWideCharCurly,re)  [list {\\x\{ F} {0561 V} {\} F}]
3206    set Palette(HexWideCharCurly,link) [list HexWideCharCurly]
3207
3208    set Palette(HTMLHexReference,gloss)  [_ {a Unicode character as an HTML hex character reference}]
3209    set Palette(HTMLHexReference,re)  [list {&\#x F} {0561 V} {; F}]
3210    set Palette(HTMLHexReference,link) [list HTMLHexReference]
3211
3212    set Palette(HTMLDecimalReference,gloss)  [_ {a Unicode character as an HTML decimal character reference}]
3213    set Palette(HTMLDecimalReference,re)  [list {&\# F} {0561 V} {; F}]
3214    set Palette(HTMLDecimalReference,link) [list HTMLDecimalReference]
3215
3216    set Palette(bell,gloss)       [_ {bell character}];
3217    set Palette(bell,re)       [list {\\a F}];
3218    set Palette(bell,link)       [list Bell]
3219
3220    set Palette(belldb,gloss)     [_ {bell character}];
3221    set Palette(belldb,re)     [list {\\\\a F}];
3222    set Palette(belldb,link)   [list Bell]
3223
3224    set Palette(backspace,gloss)     [_ {backspace character (U+0008)}];
3225    set Palette(backspace,re)     [list {\\b F}];
3226
3227    set Palette(escape,gloss)     [_ {escape character}];
3228    set Palette(escape,re)     [list {\\e F}];
3229    set Palette(escape,link)    [list Escape]
3230
3231    set Palette(escapedb,gloss)   [_ {escape character}];
3232    set Palette(escapedb,re)   [list {\\\\e F}];
3233    set Palette(escapedb,link)   [list Escape];
3234
3235    set Palette(cr,gloss)         [_ {carriage return character}];
3236    set Palette(cr,re)         [list {\\r F}];
3237    set Palette(cr,link)         [list CarriageReturn]
3238
3239    set Palette(crdb,gloss)       [_ {carriage return character}];
3240    set Palette(crdb,re)       [list {\\\\r F}];
3241    set Palette(crdb,link)         [list CarriageReturn]
3242
3243    set Palette(tab,gloss)        [_ {tab character}];
3244    set Palette(tab,re)        [list {\\t F}];
3245    set Palette(tab,link)        [list Tab]
3246
3247    set Palette(tabdb,gloss)      [_ {tab character}];
3248    set Palette(tabdb,re)      [list {\\\\t F}];
3249    set Palette(tabdb,link)        [list Tab]
3250
3251    set Palette(LiteralMetachar,gloss)      [_ "escape to make metacharacter literal"]
3252    set Palette(LiteralMetachar,re)      [list {\\ F} {x V}];
3253    set Palette(LiteralMetachar,link)      [list LiteralMetachar]
3254
3255    set Palette(controlc,gloss)   [_ {control X}];
3256    set Palette(controlc,re)   [list {\\c F} {X V}];
3257    set Palette(controlc,link)   [list ControlCharacter]
3258
3259    set Palette(controlc,gloss)   [_ {control X}];
3260    set Palette(controlcdb,re) [list {\\\\c F} {X V}];
3261    set Palette(controlcdb,link) [list ControlCharacter]
3262
3263    set Palette(comment,gloss)    [_ {comment}];
3264    set Palette(comment,re)    [list {(?\# F} {foo V} {) F}];
3265    set Palette(comment,link)    [list Comment]
3266
3267    set Palette(QuoteFollowingMetacharsQDot,gloss)    [_ {quote following meta-characters}];
3268    set Palette(QuoteFollowingMetacharsQDot,re)    [list {\\Q F}]
3269    set Palette(QuoteFollowingMetacharsQDot,link)    [list QuoteFollowingMetachars]
3270
3271    set Palette(QuoteFollowingMetacharsMDot,gloss)    [_ {quote following meta-characters}];
3272    set Palette(QuoteFollowingMetacharsMDot,re)    [list {\\M F}]
3273    set Palette(QuoteFollowingMetacharsMDot,link)    [list QuoteFollowingMetachars]
3274
3275    set Palette(ShiftBackToMagicDot,gloss)    [_ {make the following part of the pattern magic}];
3276    set Palette(ShiftBackToMagicDot,re)    [list {\\m F}]
3277    set Palette(ShiftBackToMagicDot,link)    [list ShiftBackToMagic]
3278
3279    set Palette(TerminateMetacharQuotingDot,gloss) [_ {terminate the quoting of metacharacters}];
3280    set Palette(TerminateMetacharQuotingDot,re)    [list {\\E F}]
3281    set Palette(TerminateMetacharQuotingDot,link)    [list TerminateMetacharQuotingDot]
3282
3283    set Palette(CaseSensitiveFlag,gloss)	[_ {case sensitive flag}];
3284    set Palette(CaseSensitiveFlag,re)	 	[list {(?c) F}];
3285    set Palette(CaseSensitiveFlag,link)		[list CaseSensitiveInitial]
3286
3287    set Palette(CaseInsensitiveFlagSmallI,gloss)      [_ {case insensitive flag}];
3288    set Palette(CaseInsensitiveFlagSmallI,re)      [list {(?i) F}];
3289    set Palette(CaseInsensitiveFlagSmallI,link)      [list CaseInsensitive]
3290
3291    set Palette(CaseInsensitiveBSSmallC,gloss)      [_ {case insensitive flag}];
3292    set Palette(CaseInsensitiveBSSmallC,re)      [list {\\c F}];
3293    set Palette(CaseInsensitiveBSSmallC,link)      [list CaseInsensitive]
3294
3295    set Palette(CaseSensitiveBSBigC,gloss)      [_ {case sensitive flag}];
3296    set Palette(CaseSensitiveBSBigC,re)      [list {\\C F}];
3297    set Palette(CaseSensitiveBSBigC,link)      [list CaseSensitive]
3298
3299    set Palette(flagCrosshatchICaseSensitive,gloss)      [_ {case sensitive flag}];
3300    set Palette(flagCrosshatchICaseSensitive,re)      [list {(#I) F}];
3301    set Palette(flagCrosshatchICaseSensitive,link)      [list CaseSensitive]
3302
3303    set Palette(flagCrosshatchlAsymmetricCaseInsensitive,gloss)      [_ {asymmetric case insensitive flag}];
3304    set Palette(flagCrosshatchlAsymmetricCaseInsensitive,re)      [list {(#l) F}];
3305    set Palette(flagCrosshatchlAsymmetricCaseInsensitive,link)      [list AsymmetricCaseInsensitive]
3306
3307    set Palette(CaseInsensitiveCrosshatch,gloss)      [_ {case insensitive flag}];
3308    set Palette(CaseInsensitiveCrosshatch,re)      [list {(#i) F}];
3309    set Palette(CaseInsensitiveCrosshatch,link)      [list CaseInsensitive]
3310
3311    set Palette(CaseInsensitiveFlagSmallIu,gloss)      [_ {Unicode case insensitive flag}];
3312    set Palette(CaseInsensitiveFlagSmallIu,re)      [list {(?iu) F}];
3313    set Palette(CaseInsensitiveFlagSmallIu,link)      [list CaseInsensitiveIU]
3314
3315    set Palette(UnsetFlag,gloss)      [_ {unset flag}];
3316    set Palette(UnsetFlag,re)      [list { (?- F} {f V} {) F}];
3317    set Palette(UnsetFlag,link)      [list UnsetFlag]
3318
3319    set Palette(flagL,gloss)      [_ {locale flag L}];
3320    set Palette(flagL,re)      [list {(?L) F}];
3321
3322    set Palette(flagx,gloss)      [_ {verbose flag}];
3323    set Palette(flagx,re)      [list {(?x) F}];
3324    set Palette(flagx,link)      [list VerboseFlag]
3325
3326    set Palette(flagb,gloss)      [_ {basic regexp flag}];
3327    set Palette(flagb,re)      [list {(?b) F}];
3328    set Palette(flagb,link)      [list BasicFlag]
3329
3330    set Palette(flage,gloss)      [_ {extended regexp flag}];
3331    set Palette(flage,re)      [list {(?e) F}];
3332    set Palette(flage,link)      [list ExtendedFlag]
3333
3334    set Palette(flagq,gloss)      [_ {literal string flag}];
3335    set Palette(flagq,re)      [list {(?q) F}];
3336    set Palette(flagq,link)      [list LiteralFlag]
3337
3338    set Palette(IgnoreCombiningCharactersBSZ,gloss)      [_ {ignore combining characters}];
3339    set Palette(IgnoreCombiningCharactersBSZ,re)      [list {\\Z F}];
3340    set Palette(IgnoreCombiningCharactersBSZ,link)      [list IgnoreCombiningCharacters]
3341
3342    set Palette(taggedgroup,gloss)   [_ {tagged group}];
3343    set Palette(taggedgroup,re)   [list {(?P<  F} {tag V} {> F} {xy V} {) F}];
3344    set Palette(taggedgroup,link)   [list Taggedgroup]
3345
3346    set Palette(taggedgroupsq,gloss)   [_ {tagged group with single quotes}];
3347    set Palette(taggedgroupsq,re)   [list {(?P'  F} {tag V} {' F} {xy V} {) F}];
3348    set Palette(taggedgroupsq,link)   [list Taggedgroup]
3349
3350    set Palette(taggedgroupref,gloss)   [_ {tagged group backreference}];
3351    set Palette(taggedgroupref,re)    [list { (?P= F}  {tag V} {) F} ];
3352    set Palette(taggedgroupref,link)   [list TaggedBackReference]
3353
3354    set Palette(uname,gloss)      [_ {Named Unicode character}];
3355    set Palette(uname,re)      [list {\\N\{ F} {name V} {\}  F}];
3356    set Palette(uname,link)  [list UnicodeName]
3357
3358    set Palette(unamedb,gloss)      [_ {Named Unicode character}];
3359    set Palette(unamedb,re)    [list {\\\\N\{ F} {name V} { \} F}];
3360    set Palette(unamedb,link)  [list UnicodeName]
3361
3362    set Palette(jLower,gloss)     [_ {A lower case ASCII letter}];
3363    set Palette(jLower,re)     [list {\\p\{Lower\} F}];
3364    set Palette(jLower,link)     [list LowerCaseASCIILetter]
3365
3366    set Palette(jLowerdb,gloss)   [_ {A lower case ASCII letter}];
3367    set Palette(jLowerdb,re)   [list {\\\\p\{Lower\} F} ];
3368    set Palette(jLowerdb,link)     [list LowerCaseASCIILetter]
3369
3370    set Palette(jLowerc,gloss)    [_ {Not a lower case ASCII letter}];
3371    set Palette(jLowerc,re)    [list {\\P\{ F} {Lower F} {\} F}];
3372    set Palette(jLowerc,link)     [list LowerCaseASCIILetter]
3373
3374    set Palette(jLowercdb,gloss)  [_ {Not a lower case ASCII letter}];
3375    set Palette(jLowercdb,re)  [list {\\\\P\{ F} {Lower F} {\} F}];
3376    set Palette(jLowercdb,link)     [list LowerCaseASCIILetter]
3377
3378    set Palette(jUpper,gloss)     [_ {An upper case ASCII letter}];
3379    set Palette(jUpper,re)    [list {\\p\{ F} {Upper F} {\} F}];
3380    set Palette(jUpper,rlink)    [list UpperCaseASCIILetter]
3381
3382    set Palette(jUpperdb,gloss)   [_ {A upper case ASCII letter}];
3383    set Palette(jUpperdb,re)   [list {\\\\p\{ F} {Upper F} {\} F}];
3384    set Palette(jUpperdb,rlink)    [list UpperCaseASCIILetter]
3385
3386    set Palette(jUpperc,gloss)    [_ {Not an upper case ASCII letter}];
3387    set Palette(jUpperc,re)    [list {\\P\{ F} {Upper F} {\} F}];
3388    set Palette(jUpperc,rlink)    [list UpperCaseASCIILetter]
3389
3390    set Palette(jUppercdb,gloss)  [_ {Not an upper case ASCII letter}];
3391    set Palette(jUppercdb,re)  [list {\\\\P\{ F} {Upper F} {\} F}];
3392    set Palette(jUppercdb,rlink)    [list UpperCaseASCIILetter]
3393
3394    set Palette(jAscii,gloss)     [_ {An ASCII character}];
3395    set Palette(jAscii,re)     [list {\\p\{ F} {ASCII F} {\} F}];
3396    set Palette(jAscii,link)     [list ASCIIChar]
3397
3398    set Palette(jAsciidb,gloss)   [_ {An ASCII character}];
3399    set Palette(jAsciidb,re)   [list {\\\\p\{ F} {ASCII F} {\} F}];
3400    set Palette(jAsciidb,link)     [list ASCIIChar]
3401
3402    set Palette(jAsciic,gloss)    [_ {Not an ASCII character}];
3403    set Palette(jAsciic,re)    [list {\\P\{ F} {ASCII F} {\} F}];
3404    set Palette(jAsciic,link)     [list ASCIIChar]
3405
3406    set Palette(jAsciicdb,gloss)  [_ {Not an ASCII character}];
3407    set Palette(jAsciicdb,re)  [list {\\\\P\{ F} {ASCII F} {\} F}];
3408    set Palette(jAsciicdb,link)     [list ASCIIChar]
3409
3410    set Palette(jAlpha,gloss)     [_ {An ASCII letter}];
3411    set Palette(jAlpha,re)       [list {\\p\{ F} {Alpha F} {\} F}];
3412    set Palette(jAlpha,link)       [list ASCIILetter]
3413
3414    set Palette(jAlphadb,gloss) [_ {An ASCII letter}];
3415    set Palette(jAlphadb,re)  [list {\\\\p\{ F} {Alpha F} {\} F}];
3416    set Palette(jAlphadb,link)       [list ASCIILetter]
3417
3418    set Palette(jAlphac,gloss)    [_ {Not an ASCII letter}];
3419    set Palette(jAlphac,re)      [list {\\P\{ F} {Alpha F} {\} F}];
3420    set Palette(jAlphac,link)       [list ASCIILetter]
3421
3422    set Palette(jAlphacdb,gloss)  [_ {Not an ASCII letter}];
3423    set Palette(jAlphacdb,re)    [list {\\\\P\{ F} {Alpha F} {\} F}];
3424    set Palette(jAlphacdb,link)       [list ASCIILetter]
3425
3426    set Palette(jDigit,gloss)     [_ {An ASCII digit}];
3427    set Palette(jDigit,re)       [list {\\p\{ F} {Digit F} {\} F}];
3428    set Palette(jDigit,link)    [list ASCIIDigit]
3429
3430    set Palette(jDigitdb,gloss)   [_ {An ASCII digit}];
3431    set Palette(jDigitdb,re)     [list {\\\\p\{ F} {Digit F} {\} F}];
3432    set Palette(jDigitdb,link)    [list ASCIIDigit]
3433
3434    set Palette(jDigitc,gloss)    [_ {Not an ASCII digit}];
3435    set Palette(jDigitc,re)      [list {\\P\{ F} {Digit F} {\} F}];
3436    set Palette(jDigitc,link)    [list ASCIIDigit]
3437
3438    set Palette(jDigitcdb,gloss)  [_ {Not an ASCII digit}];
3439    set Palette(jDigitcdb,re)    [list {\\\\P\{ F} {Digit F} {\} F}];
3440    set Palette(jDigitcdb,link)    [list ASCIIDigit]
3441
3442    set Palette(jXdigit,gloss)    [_ {A hexadecimal digit}];
3443    set Palette(jXdigit,re)      [list {\\p\{ F} {XDigit F} {\} F}];
3444    set Palette(jXdigit,link)    [list HexDigit]
3445
3446    set Palette(jXdigitdb,gloss)  [_ {A hexadecimal digit}];
3447    set Palette(jXdigitdb,re)    [list {\\\\p\{XDigit\} F}];
3448    set Palette(jXdigitdb,link)    [list HexDigit]
3449
3450    set Palette(jXdigitc,gloss)   [_ {Not a hexadecimal digit}];
3451    set Palette(jXdigitc,re)     [list {\\P{XDigit} F}];
3452    set Palette(jXdigitc,link)    [list HexDigit]
3453
3454    set Palette(jXdigitcdb,gloss) [_ {Not a hexadecimal digit}];
3455    set Palette(jXdigitcdb,re)   [list {\\\\P\{XDigit\} F}];
3456    set Palette(jXdigitcdb,link)    [list HexDigit]
3457
3458    set Palette(jAlnum,gloss)     [_ {An ASCII letter or digit}];
3459    set Palette(jAlnum,re)        [list {\\p\{Alnum\} F}];
3460    set Palette(jAlnum,link)    [list ASCIIAlphaDigit]
3461
3462    set Palette(jAlnumdb,gloss)   [_ {An ASCII letter or digit}];
3463    set Palette(jAlnumdb,re)      [list {\\\\p\{Alnum\} F}];
3464    set Palette(jAlnumdb,link)    [list ASCIIAlphaDigit]
3465
3466    set Palette(jAlnumc,gloss)    [_ {Not an ASCII letter or digit}];
3467    set Palette(jAlnumc,re)       [list {\\P\{Alnum\} F}];
3468    set Palette(jAlnumc,link)    [list ASCIIAlphaDigit]
3469
3470    set Palette(jAlnumcdb,gloss)  [_ {Not an ASCII letter or digit}];
3471    set Palette(jAlnumcdb,re)     [list {\\\\P\{Alnum\} F}];
3472    set Palette(jAlnumcdb,link)    [list ASCIIAlphaDigit]
3473
3474    set Palette(jPunct,gloss)     [_ {An ASCII punctuation symbol}];
3475    set Palette(jPunct,re)        [list {\\p\{Punct\} F}];
3476    set Palette(jPunct,link)      [list ASCIIPunctuation]
3477
3478    set Palette(jPunctdb,gloss)   [_ {An ASCII punctuation symbol}];
3479    set Palette(jPunctdb,re)      [list {\\\\p\{Punct\} F}];
3480    set Palette(jPunctdb,link)      [list ASCIIPunctuation]
3481
3482    set Palette(jPunctc,gloss)    [_ {Not an ASCII punctuation symbol}];
3483    set Palette(jPunctc,re)       [list {\\P\{Punct\} F}];
3484    set Palette(jPunctc,link)      [list ASCIIPunctuation]
3485
3486    set Palette(jPunctcdb,gloss)  [_ {Not an ASCII punctuation symbol}];
3487    set Palette(jPunctcdb,re)     [list {\\\\P\{Punct\} F}];
3488    set Palette(jPunctcdb,link)      [list ASCIIPunctuation]
3489
3490    set Palette(jGraph,gloss)     [_ {A visible ASCII character}];
3491    set Palette(jGraph,re)     [list {\\p\{Graph\} F} ];
3492    set Palette(jGraph,link)     [list Visible]
3493
3494    set Palette(jGraphdb,gloss)   [_ {A visible ASCII character}];
3495    set Palette(jGraphdb,re)   [list {\\\\p\{Graph\} F} ];
3496    set Palette(jGraphdb,link)   [list Visible]
3497
3498    set Palette(jGraphc,gloss)    [_ {Not a visible ASCII character}];
3499    set Palette(jGraphc,re)    [list {\\P\{Graph\} F} ];
3500    set Palette(jGraphc,link)    [list Visible]
3501
3502    set Palette(jGraphcdb,gloss)  [_ {Not a visible ASCII character}];
3503    set Palette(jGraphcdb,re)  [list {\\\\P\{Graph\} F} ];
3504    set Palette(jGraphcdb,link)     [list Visible]
3505
3506    set Palette(jPrint,gloss)     [_ {A visible ASCII character}];
3507    set Palette(jPrint,re)     [list {\\p\{Print\} F} ];
3508    set Palette(jPrint,link)     [list Visible]
3509
3510    set Palette(jPrintdb,gloss)  [_ {A visible ASCII character}];
3511    set Palette(jPrintdb,re)  [list {\\\\p\{Print\} F} ];
3512    set Palette(jPrintdb,link)  [list Visible]
3513
3514    set Palette(jPrintc,gloss)    [_ {Not a visible ASCII character}];
3515    set Palette(jPrintc,re)   [list {\\P\{Print\} F} ];
3516    set Palette(jPrintc,link)   [list Visible]
3517
3518    set Palette(jPrintcdb,gloss)  [_ {Not a visible ASCII character}];
3519    set Palette(jPrintcdb,re) [list {\\\\P\{Print\} F} ];
3520    set Palette(jPrintcdb,link) [list Visible]
3521
3522    set Palette(jBlank,gloss)     [_ {A space or tab}];
3523    set Palette(jBlank,re)     [list {\\p\{Blank\} F} ];
3524    set Palette(jBlank,link)     [list Blank]
3525
3526    set Palette(jBlankdb,gloss)   [_ {A space or tab}];
3527    set Palette(jBlankdb,re)   [list {\\\\p\{Blank\} F} ];
3528    set Palette(jBlankdb,link)     [list Blank]
3529
3530    set Palette(jBlankc,gloss)    [_ {Not a space or tab}];
3531    set Palette(jBlankc,re)    [list {\\P\{Blank\} F} ];
3532    set Palette(jBlankc,link)     [list Blank]
3533
3534    set Palette(jBlankcdb,gloss)  [_ {Not a space or tab}];
3535    set Palette(jBlankcdb,re)  [list {\\\\P\{Blank\} F} ];
3536    set Palette(jBlankcdb,link)     [list Blank]
3537
3538    set Palette(jSpace,gloss)     [_ {A whitespace character}];
3539    set Palette(jSpace,re)       [list {\\p\{Space\} F} ];
3540    set Palette(jSpace,link)    [list Whitespace]
3541
3542    set Palette(jSpacedb,gloss)  [_ {A whitespace character}];
3543    set Palette(jSpacedb,re)        [list {\\\\p\{Space\} F} ];
3544    set Palette(jSpacedb,link)    [list Whitespace]
3545
3546    set Palette(jSpacec,gloss)    [_ {Not a whitespace character}];
3547    set Palette(jSpacec,re)      [list {\\P\{Space\} F} ];
3548    set Palette(jSpacec,link)    [list Whitespace]
3549
3550    set Palette(jSpacecdb,gloss)    [_ {Not a whitespace character}];
3551    set Palette(jSpacecdb,re)   [list {\\\\P\{Space\} F} ];
3552    set Palette(jSpacecdb,link)    [list Whitespace]
3553
3554    set Palette(jCntrl,gloss)     [_ {A control character}];
3555    set Palette(jCntrl,re)       [list {\\p\{Cntrl\} F} ];
3556    set Palette(jCntrl,link)      [list ControlCharacter]
3557
3558    set Palette(jCntrldb,gloss)   [_ {A control character}];
3559    set Palette(jCntrldb,re)     [list {\\\\p\{Cntrl\} F} ];
3560    set Palette(jCntrdbl,link)      [list ControlCharacter]
3561
3562    set Palette(jCntrlc,gloss)    [_ {Not a control character}];
3563    set Palette(jCntrlc,re)      [list {\\P\{Cntrl\} F} ];
3564    set Palette(jCntrlc,link)      [list ControlCharacter]
3565
3566    set Palette(jCntrlcdb,gloss)  [_ {Not a control character}];
3567    set Palette(jCntrlcdb,re)    [list {\\\\P\{Cntrl\} F} ];
3568    set Palette(jCntrlcdb,link)      [list ControlCharacter]
3569
3570    set Palette(jUBlockIn,gloss)    [_ {A named Unicode block}];
3571    set Palette(jUBlockIn,re)    [list {\\p\{In F} {Hiragana V}  {\} F}];
3572    set Palette(jUBlockIn,link)    [list UnicodeRange]
3573
3574    set Palette(jUBlockIndb,gloss)  [_ {A named Unicode block}];
3575    set Palette(jUBlockIndb,re)  [list {\\\\p\{In F} {Hiragana V}  {\} F}];
3576    set Palette(jUBlockIndb,link)    [list UnicodeRange]
3577
3578    set Palette(jUBlockInc,gloss)   [_ {Not in named Unicode block}];
3579    set Palette(jUBlockInc,re)   [list {\\P\{In F} {Hiragana V}  {\} F}];
3580    set Palette(jUBlockInc,link)    [list UnicodeRange]
3581
3582    set Palette(jUBlockIncdb,gloss) [_ {Not in named Unicode block}];
3583    set Palette(jUBlockIncdb,re) [list {\\\\P\{In F} {Hiragana V}  {\} F}];
3584    set Palette(jUBlockIncdb,link)    [list UnicodeRange]
3585
3586    set Palette(jUBlockIs,gloss)    [_ {A named Unicode block}];
3587    set Palette(jUBlockIs,re)    [list {\\p\{Is F} {Hiragana V}  {\} F}];
3588    set Palette(jUBlockIs,link)    [list UnicodeRange]
3589
3590    set Palette(jUBlockIsdb,gloss)  [_ {A named Unicode block}];
3591    set Palette(jUBlockIsdb,re)  [list {\\\\p\{Is F} {Hiragana V}  {\} F}];
3592    set Palette(jUBlockIsdb,link)    [list UnicodeRange]
3593
3594    set Palette(jUBlockIsc,gloss)   [_ {Not in named Unicode block}];
3595    set Palette(jUBlockIsc,re)   [list {\\P\{Is F} {Hiragana V}  {\} F}];
3596    set Palette(jUBlockIsc,link)    [list UnicodeRange]
3597
3598    set Palette(jUBlockIscdb,gloss) [_ {Not in named Unicode block}];
3599    set Palette(jUBlockIscdb,re) [list {\\\\P\{Is F} {Hiragana V}  {\} F}];
3600    set Palette(jUBlockIscdb,link)    [list UnicodeRange]
3601
3602    set Palette(jUBlockBare,gloss)    [_ {A named Unicode block}];
3603    set Palette(jUBlockBare,re)    [list {\\p\{ F} {Hiragana V}  {\} F}];
3604    set Palette(jUBlockBare,link)    [list UnicodeRange]
3605
3606    set Palette(jUBlockBaredb,gloss)  [_ {A named Unicode block}];
3607    set Palette(jUBlockBaredb,re)  [list {\\\\p\{ F} {Hiragana V}  {\} F}];
3608    set Palette(jUBlocdbk,link)    [list UnicodeRange]
3609
3610    set Palette(jUBlockBarec,gloss)   [_ {Not in named Unicode block}];
3611    set Palette(jUBlockBarec,re)   [list {\\P\{ F} {Hiragana V}  {\} F}];
3612    set Palette(jUBlockBarec,link)    [list UnicodeRange]
3613
3614    set Palette(jUBlockBarecdb,gloss) [_ {Not in named Unicode block}];
3615    set Palette(jUBlockBarecdb,re) [list {\\\\P\{ F} {Hiragana V}  {\} F}];
3616    set Palette(jUBlockBarecdb,link)    [list UnicodeRange]
3617
3618    set Palette(jUCat,gloss)      [_ {A named Unicode category}];
3619    set Palette(jUCat,re)      [list {\\p\{ F} {Sm V}  {\} F}];
3620    set Palette(jUCat,link)	[list UnicodeCategory]
3621
3622    set Palette(jUCatdb,gloss)    [_ {A named Unicode category}];
3623    set Palette(jUCatdb,re)   [list {\\\\p\{ F} {Sm V}  {\} F}];
3624    set Palette(jUCatdb,link)	[list UnicodeCategory]
3625
3626    set Palette(jUCatc,gloss)     [_ {Not in named Unicode category}];
3627    set Palette(jUCatc,re)     [list {\\P\{ F} {Sm V}  {\} F}];
3628    set Palette(jUCatc,link)	[list UnicodeCategory]
3629
3630    set Palette(jUCatcdb,gloss)   [_ {Not in named Unicode category}];
3631    set Palette(jUCatcdb,re)   [list {\\\\P\{ F} {Sm V}  {\} F}];
3632    set Palette(jUCatcdb,link)	[list UnicodeCategory]
3633
3634
3635    set Palette(jUCatIn,gloss)      [_ {A named Unicode category}];
3636    set Palette(jUCatIn,re)      [list {\\p\{In F} {Sm V}  {\} F}];
3637    set Palette(jUCatIn,link)	[list UnicodeCategory]
3638
3639    set Palette(jUCatdbIn,gloss)    [_ {A named Unicode category}];
3640    set Palette(jUCatdbIn,re)   [list {\\\\p\{In F} {Sm V}  {\} F}];
3641    set Palette(jUCatdbIn,link)	[list UnicodeCategory]
3642
3643    set Palette(jUCatcIn,gloss)     [_ {Not in named Unicode category}];
3644    set Palette(jUCatcIn,re)     [list {\\P\{In F} {Sm V}  {\} F}];
3645    set Palette(jUCatcIn,link)	[list UnicodeCategory]
3646
3647    set Palette(jUCatcdbIn,gloss)   [_ {Not in named Unicode category}];
3648    set Palette(jUCatcdbIn,re)   [list {\\\\P\{In F} {Sm V}  {\} F}];
3649    set Palette(jUCatcdbIn,link)	[list UnicodeCategory]
3650
3651
3652    set Palette(jUCatIs,gloss)      [_ {A named Unicode category}];
3653    set Palette(jUCatIs,re)      [list {\\p\{Is F} {Sm V}  {\} F}];
3654    set Palette(jUCatIs,link)	[list UnicodeCategory]
3655
3656    set Palette(jUCatdbIs,gloss)    [_ {A named Unicode category}];
3657    set Palette(jUCatdbIs,re)   [list {\\\\p\{Is F} {Sm V}  {\} F}];
3658    set Palette(jUCatdbIs,link)	[list UnicodeCategory]
3659
3660    set Palette(jUCatcIs,gloss)     [_ {Not in named Unicode category}];
3661    set Palette(jUCatcIs,re)     [list {\\P\{Is F} {Sm V}  {\} F}];
3662    set Palette(jUCatcIs,link)	[list UnicodeCategory]
3663
3664    set Palette(jUCatcdbIs,gloss)   [_ {Not in named Unicode category}];
3665    set Palette(jUCatcdbIs,re)   [list {\\\\P\{Is F} {Sm V}  {\} F}];
3666    set Palette(jUCatcdbIs,link)	[list UnicodeCategory]
3667
3668
3669    set Palette(jUnion,gloss)     [_ {The union of [1-3] and [d-f]}];
3670    set Palette(jUnion,re)     [list {[ F} {1 V} {- F} {3 V} {[ F}  {d V} {- F} {f V} {]] F}];
3671
3672    set Palette(jInter,gloss)     [_ {The intersection of [d-f] and [a-z]}];
3673    set Palette(jInter,re)     [list {{[} F} {d V} {- F} {f V} {{&&[} F} {a V} {- F} {z V} {{]]} F}];
3674    set Palette(jInter,link)     [list Intersection]
3675
3676    set Palette(plookahead,gloss) [_ {Positive forward assertion}];
3677    set Palette(plookahead,re) [list {(?= F} {xyz V} {) F}];
3678    set Palette(plookahead,link) [list PositiveForwardAssertion]
3679
3680    set Palette(plookaheadAtSign,gloss) [_ {Positive forward assertion}];
3681    set Palette(plookaheadAtSign,re) [list {\\@= F} {xyz V}];
3682    set Palette(plookaheadAtSign,link) [list PositiveForwardAssertion]
3683
3684    set Palette(plookback,gloss)  [_ {Positive backward assertion}];
3685    set Palette(plookback,re)  [list {(?<= F} {{xyz} V} {) F}];
3686    set Palette(plookback,link)  [list PositiveBackwardAssertion]
3687
3688    set Palette(plookbackAtSign,gloss)  [_ {Positive backward assertion}];
3689    set Palette(plookbackAtSign,re)  [list {\\@<= F} {{xyz} V}];
3690    set Palette(plookbackAtSign,link)  [list PositiveBackwardAssertion]
3691
3692    set Palette(nlookahead,gloss) [_ {Negative forward assertion}];
3693    set Palette(nlookahead,re) [list {(?! F} {xyz V} {) F}];
3694    set Palette(nlookahead,link) [list NegativeForwardAssertion]
3695
3696    set Palette(nlookaheadAtSign,gloss) [_ {Negative forward assertion}];
3697    set Palette(nlookaheadAtSign,re) [list {\\@! F} {xyz V}];
3698    set Palette(nlookaheadAtSign,link) [list NegativeForwardAssertion]
3699
3700    set Palette(nlookback,gloss)  [_ {Negative backward assertion}];
3701    set Palette(nlookback,re)  [list {(?<! F} {xyz V} {) F}];
3702    set Palette(nlookback,link)  [list NegativeBackwardAssertion]
3703
3704    set Palette(nlookbackAtSign,gloss)  [_ {Negative backward assertion}];
3705    set Palette(nlookbackAtSign,re)  [list {\\@<! F} {{xyz} V}];
3706    set Palette(nlookbackAtSign,link)  [list NegativeBackwardAssertion]
3707
3708    set Palette(SelfishNoCaptureGroup,gloss)      [_ {selfish no capture group}];
3709    set Palette(SelfishNoCaptureGroup,re)      [list {(?> F} {abc V} {) F}]
3710    set Palette(SelfishNoCaptureGroup,link)      [list SelfishNoCaptureGroup]
3711
3712    set Palette(CondGroupSimple,gloss)      [_ {Group backreference conditional}];
3713    set Palette(CondGroupSimple,re)      [list {(?( F} {k V} {) F} {x V} {) F}]
3714    set Palette(CondGroupSimple,link)      [list SimpleGroupConditional]
3715
3716    set Palette(CondGroupElse,gloss)      [_ {Group backreference conditional with else clause}];
3717    set Palette(CondGroupElse,re)        [list {(?( F} {k V} {) F} {x V} {| F} {y V} {) F}]
3718    set Palette(CondGroupElse,link)      [list ElseGroupConditional]
3719
3720    set Palette(CondPosLookaheadSimple,gloss)      [_ {Positive forward assertion conditional}];
3721    set Palette(CondPosLookaheadSimple,re)     [list {(?(? F} {= F} {w V} {) F} {x V} {) F}]
3722    set Palette(CondPosLookaheaddSimple,link)      [list SimpleLookaroundConditional]
3723
3724    set Palette(CondPosLookaheadElse,gloss)      [_ {Positive forward assertion conditional with else clause}];
3725    set Palette(CondPosLookaheadElse,re)       [list {(?(? F} {= F} {w V} {) F} {x V} {| F} {y V} {) F}]
3726    set Palette(CondPosLookaheadElse,link)      [list ElseLookaroundConditional]
3727
3728    set Palette(CondPosLookbackSimple,gloss)      [_ {Positive backward assertion conditional}];
3729    set Palette(CondPosLookbackSimple,re)     [list {(?(? F} {<= F} {w V} {) F} {x V} {) F}]
3730    set Palette(CondPosLookbackSimple,link)      [list SimpleLookaroundConditional]
3731
3732    set Palette(CondPosLookbackElse,gloss)      [_ {Positive backward assertion conditional with else clause}];
3733    set Palette(CondPosLookbackElse,re)       [list {(?(? F} {<= F} {w V} {) F} {x V} {| F} {y V} {) F}]
3734    set Palette(CondPosLookbackElse,link)      [list ElseLookaroundConditional]
3735
3736    set Palette(CondNegLookaheadSimple,gloss)      [_ {Negative forward assertion conditional}];
3737    set Palette(CondNegLookaheadSimple,re)     [list {(?(? F} {! F} {w V} {) F} {x V} {) F}]
3738    set Palette(CondNegLookaheadSimple,link)      [list SimpleLookaroundConditional]
3739
3740    set Palette(CondNegLookaheadElse,gloss)      [_ {Negative forward assertion conditional with else clause}];
3741    set Palette(CondNegLookaheadElse,re)       [list {{(?(?} F} {! F} {w V} {) F} {x V} {| F} {y V} {) F}]
3742    set Palette(CondNegLookaheadElse,link)      [list ElseLookaroundConditional]
3743
3744
3745    set Palette(CondNegLookbackSimple,gloss)      [_ {Negative backward assertion conditional}];
3746    set Palette(CondNegLookbackSimple,re)     [list {(?(? F} {<! F} {w V} {) F} {x V} {) F}]
3747    set Palette(CondNegLookbackSimple,link)      [list SimpleLookaroundConditional]
3748
3749    set Palette(CondNegLookbackElse,gloss)      [_ {Negative backward assertion conditional with else clause}];
3750    set Palette(CondNegLookbackElse,re)       [list {(?(? F} {<! F} {w V} {) F} {x V} {| F} {y V} {) F}]
3751    set Palette(CondNegLookbackElse,link)      [list ElseLookaroundConditional]
3752
3753    set Palette(SubBackRefBare,gloss)  [_ {Insert the kth captured subgroup}];
3754    set Palette(SubBackRefBare,re)  [list {k V}];
3755    set Palette(SubBackRefBare,Prefix)  "";
3756    set Palette(SubBackRefBare,link)  [list BackReferenceSub]
3757
3758    set Palette(SubBackReferenceDol,gloss)  [_ {Insert the kth captured subgroup}];
3759    set Palette(SubBackReferenceDol,re)  [list {$ F} {k V}];
3760    set Palette(SubBackReferenceDol,Prefix)  {$}
3761    set Palette(SubBackReferenceDol,link) [list BackReferenceSub]
3762
3763    set Palette(SubBackReferenceDolZero,gloss)  [_ {Insert the entire match}];
3764    set Palette(SubBackReferenceDolZero,re)  [list {$0 F}];
3765    set Palette(SubBackReferenceDolZero,link) [list InsertEntireMatch]
3766
3767    set Palette(SubBackReferencePercent,gloss)  [_ {Insert the kth captured subgroup}];
3768    set Palette(SubBackReferencePercent,re)  [list {% F} {k V}];
3769    set Palette(SubBackReferencePercent,Prefix)  {%}
3770    set Palette(SubBackReferencePercent,link) [list BackReferenceSub]
3771
3772    set Palette(SubBackReferencePercentZero,gloss)  [_ {Insert the entire match}];
3773    set Palette(SubBackReferencePercentZero,re)  [list {%0 F}];
3774    set Palette(SubBackReferencePercentZero,link) [list InsertEntireMatch]
3775
3776    set Palette(SubBackRefbs,gloss)   [_ {Insert the kth captured subgroup}]
3777    set Palette(SubBackRefbs,re)  [list {\\ F} {k V}]
3778    set Palette(SubBackRefbs,Prefix)  "\\"
3779    set Palette(SubBackRefbs,link)  [list BackReferenceSub]
3780
3781    set Palette(SubBackRefbsZero,gloss)   [_ {Insert the entire match}]
3782    set Palette(SubBackRefbsZero,re)  [list {\\0 F}]
3783    set Palette(SubBackRefbsZero,link)  [list InsertEntireMatch]
3784
3785    set Palette(SubBackRefdbs,gloss)  [_ {Insert the kth captured subgroup}];
3786    set Palette(SubBackRefdbs,re) [list {\\\\ F} {k V}]
3787    set Palette(SubBackRefdbs,Prefix) {\\}
3788    set Palette(SubBackRefdbs,link) [list BackReferenceSub]
3789
3790    set Palette(SubBackRefdbsZero,gloss)  [_ {Insert the entire match}];
3791    set Palette(SubBackRefdbsZero,re) [list {\\\\0 F}]
3792    set Palette(SubBackRefdbsZero,link) [list InsertEntireMatch]
3793
3794    set Palette(SubBackRefPardbsdbs,gloss)  [_ {Insert the kth captured subgroup}];
3795    set Palette(SubBackRefPardbsdbs,re) [list {\\\\ F} {k V}]
3796    set Palette(SubBackRefPardbsdbs,Prefix) {\\};
3797    set Palette(SubBackRefPardbsdbs,link) [list BackReferenceSub]
3798
3799    set Palette(SubBackRefParbs,gloss)  [_ {Insert the kth captured subgroup}];
3800    set Palette(SubBackRefParbs,re) [list {\\ F} {k V}]
3801    set Palette(SubBackRefParbs,Prefix) "\\" ;
3802    set Palette(SubBackRefParbs,link) [list BackReferenceSub]
3803
3804    set Palette(SubBackRefPardbsdbsZero,gloss)  [_ {Insert the entire match}];
3805    set Palette(SubBackRefPardbsdbsZero,re) [list {\\\\0 F}]
3806    set Palette(SubBackRefPardbsdbsZero,link) [list InsertEntireMatch]
3807
3808    set Palette(SubEntBackRefZero,gloss)  [_ {Insert the entire match}];
3809    set Palette(SubEntBackRefZero,re)  [list {0 F}];
3810    set Palette(SubEntBackRefZero,link)  [list InsertEntireMatch]
3811
3812    set Palette(Subampentbackrefs,gloss)  [_ {Insert the entire match}];
3813    set Palette(Subampentbackrefs,re)  [list {& F}];
3814    set Palette(Subampentbackrefs,link)  [list InsertEntireMatch]
3815
3816    set Palette(Subampentbackrefsdbs,gloss)  [_ {Insert the entire match}];
3817    set Palette(Subampentbackrefsdbs,re)  [list {\\\\& F}];
3818    set Palette(Subampentbackrefsdbs,link)  [list InsertEntireMatch]
3819
3820    set Palette(SubDolAmpEntBackRef,gloss) [_ {Insert the entire match} ];
3821    set Palette(SubDolAmpEntBackRef,re) [list {$& F}]
3822    set Palette(SubDolAmpEntBackRef,link)  [list InsertEntireMatch]
3823
3824    set Palette(SubampentbackrefsPardbsdbs,gloss)  [_ {Insert the entire match}];
3825    set Palette(SubampentbackrefsPardbsdbs,re) [list {\\\\& F}];
3826    set Palette(SubampentbackrefsPardbsdbs,link) [list InsertEntireMatch]
3827
3828    set Palette(SubPreMatch,gloss)     [_ {Insert the portion preceding the match}];
3829    set Palette(SubPreMatch,re)     [list {\\` F}];
3830    set Palette(SubPreMatch,link)     [list InsertPreMatch]
3831
3832    set Palette(SubPreMatchDol,gloss)     [_ {Insert the portion preceding the match}];
3833    set Palette(SubPreMatchDol,re)     [list {$\` F}];
3834    set Palette(SubPreMatchDol,link)  [list InsertPreMatch]
3835
3836    set Palette(SubPreMatchLit,gloss)     [_ {Insert the portion preceding the match}];
3837    set Palette(SubPreMatchLit,re)     [list {'pre F}];
3838    set Palette(SubPreMatchLit,link)  [list InsertPreMatch]
3839
3840    set Palette(SubPostMatch,gloss)    [_ {Insert the portion following the match}];
3841    set Palette(SubPostMatch,re)    [list {\' F}];
3842    set Palette(SubPostMatch,link)    [list InsertPostMatch]
3843
3844    set Palette(SubPostMatchDol,gloss)    [_ {Insert the portion following the match}];
3845    set Palette(SubPostMatchDol,re)    [list {$\' F}];
3846    set Palette(SubPostMatchDol,link)  [list InsertPostMatch]
3847
3848    set Palette(SubPostMatchLit,gloss)    [_ {Insert the portion following the match}];
3849    set Palette(SubPostMatchLit,re)    [list {'post F}];
3850    set Palette(SubPostMatchLit,link)  [list InsertPostMatch]
3851
3852    set Palette(SubLastCapture,gloss)  [_ {Insert the last captured group}];
3853    set Palette(SubLastCapture,re)  [list {\\+ F}];
3854    set Palette(SubLastCapture,link)  [list InsertLastGroup]
3855
3856    set Palette(SubLastCaptureDol,gloss)  [_ {Insert the last captured group}];
3857    set Palette(SubLastCaptureDol,re)  [list {$+ F}];
3858    set Palette(SubLastCaptureDol,link)  [list InsertLastGroup]
3859
3860    set Palette(SubAlnum,gloss)      [_ {the alphanumeric characters (only in source)}];
3861    set Palette(SubAlnum,re)      [list {[:alnum:] F}];
3862    set Palette(SubAlnum,link)    [list AlphaNumWord]
3863
3864    set Palette(SubAlpha,gloss)      [_ {the alphabetic characters (only in source)}];
3865    set Palette(SubAlpha,re)      [list {[:alpha:] F}];
3866    set Palette(SubAlpha,link)      [list Alpha]
3867
3868    set Palette(SubBlank,gloss)      [_ {space or tab (only in source)}];
3869    set Palette(SubBlank,re)      [list {[:blank:] F}];
3870    set Palette(SubBlank,link)      [list Blank]
3871
3872    set Palette(SubCntrl,gloss)      [_ {the control characters (only in source)}];
3873    set Palette(SubCntrl,re)      [list {[:cntrl:] F}];
3874    set Palette(SubCntrl,link)    [list ControlCharacter]
3875
3876    set Palette(SubDigit,gloss)      [_ {the decimal digits (only in source)}];
3877    set Palette(SubDigit,re)      [list {[:digit:] F}];
3878    set Palette(SubDigit,link)      [list Digit]
3879
3880    set Palette(SubGraph,gloss)      [_ {the `visible' characters (only in source)}];
3881    set Palette(SubGraph,re)      [list {[:graph:]} F];
3882    set Palette(SubGraph,link)      [list Visible]
3883
3884    set Palette(SubLower,gloss)      [_ {the lower-case letters}];
3885    set Palette(SubLower,re)      [list {[:lower:] F}];
3886    set Palette(SubLower,link)      [list LowerCaseASCIILetter MustPair]
3887
3888    set Palette(SubPrint,gloss)      [_ {the `visible' characters (only in source)}];
3889    set Palette(SubPrint,re)      [list {[:print:] F}];
3890    set Palette(SubPrint,link)      [list Visible]
3891
3892    set Palette(SubPunct,gloss)      [_ {the punctuation symbols (only in source)}];
3893    set Palette(SubPunct,re)      [list {[:punct:] F}];
3894    set Palette(SubPunct,link)      [list ASCIIPunctuation]
3895
3896    set Palette(SubSpace,gloss)      [_ {the space characters (only in source)}];
3897    set Palette(SubSpace,re)      [list {[:space:] F}];
3898    set Palette(SubSpace,link)      [list Whitespace]
3899
3900    set Palette(SubUpper,gloss)      [_ {The upper-case letters}];
3901    set Palette(SubUpper,re)      [list {[:upper:] F}];
3902    set Palette(SubUpper,link)      [list UpperCaseASCIILetter MustPair]
3903
3904    set Palette(SubXdigit,gloss)     [_ {The hexadecimal digits (only in source)}];
3905    set Palette(SubXdigit,re)     [list {[:xdigit:] F}];
3906    set Palette(SubXdigit,link)     [list HexDigit];
3907
3908    set Palette(SubRange,gloss)     [_ {The letters from a through d}];
3909    set Palette(SubRange,re)     [list {a V} {- F} {d V}];
3910    set Palette(SubRange,link)     [list Range]
3911
3912    set Palette(SubCStarN,gloss)  [_ {N copies of character C (substitution only)}];
3913    set Palette(SubCStarN,re)  [list {[ F} {C V} {* F} {N V} {] F}];
3914    set Palette(SubCStarN,link)  [list TRStarN]
3915
3916    set Palette(SubCStar,gloss)   [_ {As many copies of character C as necessary (substitution only)}];
3917    set Palette(SubCStar,re)   [list {[ F} {C V} {*] F}];
3918    set Palette(SubCStar,link)  [list TRStar]
3919
3920    set Palette(SubLitString,gloss) [_ {Insert literal string}]
3921    set Palette(SubLitString,re)   [list  {\" F} {xyz V} {\" F}]
3922    set Palette(SubLitString,link)   [list  InsertLiteralString]
3923
3924    set Palette(SubDowncaseChar,gloss) [_ {Downcase the following character}]
3925    set Palette(SubDowncaseChar,re)   [list  {\\l F}]
3926    set Palette(SubDowncaseChar,link)   [list  DowncaseCharacter]
3927
3928    set Palette(SubUpcaseChar,gloss) [_ {Upcase the following character}]
3929    set Palette(SubUpcaseChar,re)   [list  {\\u F}]
3930    set Palette(SubUpcaseChar,link)   [list  UpcaseCharacter]
3931
3932    set Palette(SubDowncaseString,gloss) [_ {Downcase the following string}]
3933    set Palette(SubDowncaseString,re)   [list  {\\L F}]
3934    set Palette(SubDowncaseString,link)   [list  DowncaseString]
3935
3936    set Palette(SubUpcaseString,gloss) [_ {Upcase the following string}]
3937    set Palette(SubUpcaseString,re)   [list  {\\U F}]
3938    set Palette(SubUpcaseString,link)   [list  UpcaseString]
3939
3940    set Palette(SubEndCaseDomaine,gloss) [_ {Terminate the effects of a preceding case-changer}]
3941    set Palette(SubEndCaseDomaine,re)   [list  {\\e F}]
3942    set Palette(SubEndCaseDomaine,link)   [list  EndCaseDomain]
3943
3944    set Palette(SubEndCaseDomainE,gloss) [_ {Terminate the effects of a preceding case-changer}]
3945    set Palette(SubEndCaseDomainE,re)   [list  {\\E F}]
3946    set Palette(SubEndCaseDomainE,link)   [list  EndCaseDomain]
3947
3948    set Palette(SubDowncaseCharDollar,gloss) [_ {Downcase the following character}]
3949    set Palette(SubDowncaseCharDollar,re)   [list  {\\l F}]
3950    set Palette(SubDowncaseCharDollar,link)   [list  DowncaseCharacter]
3951
3952    set Palette(SubUpcaseCharDollar,gloss) [_ {Upcase the following character}]
3953    set Palette(SubUpcaseCharDollar,re)   [list  {\\u F}]
3954    set Palette(SubUpcaseCharDollar,link)   [list  UpcaseCharacter]
3955
3956    set Palette(SubDowncaseStringDollar,gloss) [_ {Downcase the following string}]
3957    set Palette(SubDowncaseStringDollar,re)   [list  {\\L F}]
3958    set Palette(SubDowncaseStringDollar,link)   [list  DowncaseString]
3959
3960    set Palette(SubUpcaseStringDollar,gloss) [_ {Upcase the following string}]
3961    set Palette(SubUpcaseStringDollar,re)   [list  {\\U F}]
3962    set Palette(SubUpcaseStringDollar,link)   [list  UpcaseString]
3963
3964    set Palette(SubEndCaseDomaineDollar,gloss) [_ {Terminate the effects of a preceding case-changer}]
3965    set Palette(SubEndCaseDomaineDollar,re)   [list  {\\e F}]
3966    set Palette(SubEndCaseDomaineDollar,link)   [list  EndCaseDomain]
3967
3968    set Palette(SubEndCaseDomainEDollar,gloss) [_ {Terminate the effects of a preceding case-changer}]
3969    set Palette(SubEndCaseDomainEDollar,re)   [list  {\\E F}]
3970    set Palette(SubEndCaseDomainEDollar,link)   [list  EndCaseDomain]
3971
3972    set Palette(SubNewline,gloss) [_ {Insert a line break}]
3973    set Palette(SubNewline,re)   [list  {\\r F}]
3974    set Palette(SubNewline,link)   [list  SubNewline]
3975
3976    set Palette(ExactMatchWD,gloss) [_ {Require exact match of enclosed group}]
3977    set Palette(ExactMatchWD,re)   [list {< F} {abcd V} {> F}]
3978    set Palette(ExactMatchWD,link) [list ExactMatch]
3979
3980    set Palette(ExactMatchTRE,gloss) [_ {Require exact match of preceding group}]
3981    set Palette(ExactMatchTRE,re)   [list {\{~0\} F}]
3982    set Palette(ExactMatchTRE,link) [list ExactMatch]
3983
3984    set Palette(ExactMatchCgrep,gloss) [_ {Require exact match of enclosed material}]
3985    set Palette(ExactMatchCgrep,re)   [list {< F} {abc V} {> F}]
3986    set Palette(ExactMatchCgrep,link) [list ExactMatch]
3987
3988    set Palette(TRECostSetting,gloss) [_ "set error costs for preceding group"];
3989    set Palette(TRECostSetting,re)    [list {\{ F} {+ F} {w V} {- F} {x V} {\# F} {y V} {~ F} {z V} {{ , } F} {a V} {i F} {+ F} {b V} {d F} {+ F} {c V} {s F} {{ < } F} {k V} {\} F}]
3990    set Palette(TRECostSetting,link) [list TRECostSetting]
3991
3992    set Palette(TotalErrorCrosshatchA,gloss) [_ "accept at most N errors"];
3993    set Palette(TotalErrorCrosshatchA,re)    [list {(\#a F} {N V} {) F}]
3994    set Palette(TotalErrorCrosshatchA,link) [list TotalErrorCrosshatchA]
3995
3996    set Palette(ReluctantStar,gloss) [_ "Match zero or more of preceding group (reluctant)"]
3997    set Palette(ReluctantStar,re) [list {* F}]
3998
3999    set Palette(GreedyDoubleStar,gloss) [_ "Match zero or more of preceding group (greedy)"]
4000    set Palette(GreedyDoubleStar,re) [list {** F}]
4001
4002    set Palette(CollationClass,gloss) [_ "The collation class of the specified character."]
4003    set Palette(CollationClass,re)    [list {[[= F} {x V} {=]] F} ];
4004    set Palette(CollationClass,link) [list CollationClass]
4005
4006    set Palette(CollatingElementMultichar,gloss) [_ "A POSIX multicharacter collating element"]
4007    set Palette(CollatingElementMultichar,re)    [list {[[. F} {xy V} {.]] F} ];
4008    set Palette(CollatingElementMultichar,link)  [list CollatingElementMultichar]
4009
4010    set Palette(CollatingElementNamed,gloss) [_ "A POSIX named collating element"]
4011    set Palette(CollatingElementNamed,re)    [list {[[. F} {name V} {.]] F} ];
4012    set Palette(CollatingElementNamed,link)  [list CollatingElementNamed]
4013
4014    #set Palette(flagm)      [_ {compiler flag m:                                    (?m)}];
4015    #set Palette(flags)      [_ {compiler flag s:                                    (?s)}];
4016
4017    set Palette(CposRange,gloss)       [_ "the jth character through the kth character"];
4018    set Palette(CposRange,re)       [list {[( F} {j V} {, F} {k V} {)] F}];
4019    set Palette(CposRange,link)       [list CposRange]
4020
4021    set Palette(RegionDoubleDot,gloss)       [_ "the region beginning with x and ending with y"];
4022    set Palette(RegionDoubleDot,re)       [list {x V} {.. F} {y V}];
4023    set Palette(RegionDoubleDot,link)       [list RegionDoubleDot]
4024
4025    set Palette(ColumnSpecifier,gloss) [_ "match in the specified column"]
4026    set Palette(ColumnSpecifier,re)    [list {\\% F} {12 V} {c F}]
4027    set Palette(ColumnSpecifier,link)  [list ColumnSpecifier]
4028
4029    set Palette(PreColumnSpecifier,gloss) [_ "match before the specified column"]
4030    set Palette(PreColumnSpecifier,re)    [list {\\%< F} {12 V} {c F}]
4031    set Palette(PreColumnSpecifier,link)  [list PreColumnSpecifier]
4032
4033    set Palette(PostColumnSpecifier,gloss) [_ "match after the specified column"]
4034    set Palette(PostColumnSpecifier,re)    [list {\\%> F} {12 V} {c F}]
4035    set Palette(PostColumnSpecifier,link)  [list PostColumnSpecifier]
4036}
4037#End of SetPalette
4038
4039#Initialize the count of palette entries for each program to zero.
4040foreach i $ProgList {
4041    set UserPalette($i,0) 0;
4042}
4043
4044set ExecCmd(agrep,match) ExecuteMatchAgrep;
4045set ExecCmd(agrep,match,ExactMatchTRE) "-1";#   Flag needed for palette test.
4046set ExecCmd(agrep,match,ExactMatchWD) "-1";#   Flag needed for palette test.
4047set ExecCmd(arena,match) ExecuteMatchArena;
4048set ExecCmd(awk,match) ExecuteMatchAwk;
4049set ExecCmd(awk,sub) ExecuteSubAwk;
4050set ExecCmd(bash,match) ExecuteMatchBash;
4051set ExecCmd(boo,match) ExecuteMatchBoo;
4052set ExecCmd(BusyBoxEgrep,match) ExecuteMatchBusyBoxEgrep;
4053set ExecCmd(C,match) ExecuteMatchC;
4054set ExecCmd(cgrep,match) ExecuteMatchCgrep;
4055set ExecCmd(cgrep,match,ExactMatchCgrep) [list "-A" "1"];#   Flags needed for palette test.
4056set ExecCmd(ed,match)  ExecuteMatchEd;
4057set ExecCmd(ed,sub)  ExecuteSubEd;
4058set ExecCmd(egrep,match) ExecuteMatchEgrep;
4059set ExecCmd(emacs,match) ExecuteMatchEmacs;
4060set ExecCmd(emacs,sub) ExecuteSubEmacs;
4061set ExecCmd(euphoria,match) ExecuteMatchEuphoria;
4062set ExecCmd(expr,match) ExecuteMatchExpr;
4063set ExecCmd(fgrep,match) ExecuteMatchFgrep;
4064set ExecCmd(fish,match) ExecuteMatchFish;
4065set ExecCmd(flex,match) ExecuteMatchFlex;
4066set ExecCmd(frink,match) ExecuteMatchFrink;
4067set ExecCmd(frink,sub) ExecuteSubFrink;
4068set ExecCmd(gawk,match) ExecuteMatchGawk;
4069set ExecCmd(gawk,sub) ExecuteSubGawk;
4070set ExecCmd(glark,match) ExecuteMatchGlark;
4071set ExecCmd(gpp,match) ExecuteMatchGPP;
4072set ExecCmd(gpp,sub) ExecuteSubGPP;
4073set ExecCmd(grep,match) ExecuteMatchGrep;
4074set ExecCmd(groovy,match) ExecuteMatchGroovy;
4075set ExecCmd(guile,match) ExecuteMatchGuile;
4076set ExecCmd(guile,sub) ExecuteSubGuile;
4077set ExecCmd(ici,match) ExecuteMatchIci;
4078set ExecCmd(icon,match) ExecuteMatchIcon;
4079set ExecCmd(java,match) ExecuteMatchJava;
4080set ExecCmd(java,sub) ExecuteSubJava;
4081set ExecCmd(javascript,match) ExecuteMatchJavascript;
4082set ExecCmd(javascript,sub) ExecuteSubJavascript;
4083set ExecCmd(jgrep,match) ExecuteMatchJgrep;
4084set ExecCmd(judoscript,match) ExecuteMatchJudoscript;
4085set ExecCmd(judoscript,sub) ExecuteSubJudoscript;
4086set ExecCmd(ksh,match) ExecuteMatchKsh;
4087set ExecCmd(lua,match) ExecuteMatchLua;
4088set ExecCmd(lua,sub) ExecuteSubLua;
4089set ExecCmd(m4,match) ExecuteMatchM4;
4090set ExecCmd(m4,sub) ExecuteSubM4;
4091set ExecCmd(mawk,match) ExecuteMatchMawk;
4092set ExecCmd(mawk,sub) ExecuteSubMawk;
4093set ExecCmd(minised,match) ExecuteMatchMinised;
4094set ExecCmd(minised,sub) ExecuteSubMinised;
4095set ExecCmd(mysql,match) ExecuteMatchMysql;
4096set ExecCmd(nawk,match) ExecuteMatchNawk;
4097set ExecCmd(nawk,sub) ExecuteSubNawk;
4098set ExecCmd(nrgrep,match) ExecuteMatchNrgrep;
4099set ExecCmd(numgrep,match) ExecuteMatchNumgrep;
4100set ExecCmd(patmatch,match) ExecuteMatchPatmatch;
4101set ExecCmd(pcregrep,match) ExecuteMatchPcregrep;
4102set ExecCmd(perl,match) ExecuteMatchPerl;
4103set ExecCmd(perl,sub) ExecuteSubPerl;
4104set ExecCmd(php,match) ExecuteMatchPhp;
4105set ExecCmd(php,sub) ExecuteSubPhp;
4106set ExecCmd(pike,match) ExecuteMatchPike;
4107set ExecCmd(pike,sub) ExecuteSubPike;
4108set ExecCmd(python,match) ExecuteMatchPython;
4109set ExecCmd(python,sub) ExecuteSubPython
4110set ExecCmd(rc,match) ExecuteMatchRc;
4111set ExecCmd(rebol,match) ExecuteMatchRebol;
4112set ExecCmd(rep,match) ExecuteMatchRep;
4113set ExecCmd(ruby,match) ExecuteMatchRuby;
4114set ExecCmd(ruby,sub) ExecuteSubRuby;
4115set ExecCmd(sed,match)  ExecuteMatchSed;
4116set ExecCmd(sed,sub)  ExecuteSubSed;
4117set ExecCmd(sgrep,match) ExecuteMatchSgrep;
4118set ExecCmd(sleep,match)  ExecuteMatchSleep;
4119set ExecCmd(sleep,sub)  ExecuteSubSleep;
4120set ExecCmd(sleepwc,match)  ExecuteMatchSleepWildcard;
4121set ExecCmd(ssed,match)  ExecuteMatchSsed;
4122set ExecCmd(ssed,sub)  ExecuteSubSsed;
4123set ExecCmd(tcl,match) ExecuteMatchTcl;
4124set ExecCmd(tcl,sub) ExecuteSubTcl;
4125set ExecCmd(tclglob,match) ExecuteMatchTclGlob;
4126set ExecCmd(tcsh,match) ExecuteMatchTcsh;
4127set ExecCmd(tr,sub) ExecuteSubTr;
4128set ExecCmd(vim,match) ExecuteMatchVim;
4129set ExecCmd(vim,sub) ExecuteSubVim;
4130set ExecCmd(wmagrep,match) ExecuteMatchWMAgrep;
4131set ExecCmd(wmagrep,match,ExactMatchTRE) "-1";#   Flag needed for palette test.
4132set ExecCmd(wmagrep,match,ExactMatchWD) "-1";#   Flag needed for palette test.
4133set ExecCmd(xmlstarlet,match) ExecuteMatchXmlstarlet;
4134set ExecCmd(zsh,match) ExecuteMatchZsh;
4135
4136#This maps the language name onto the name of the interpreter/program
4137set ExecName(agrep) agrep;
4138set ExecName(arena) arena;
4139set ExecName(awk) awk;
4140set ExecName(bash) bash;
4141set ExecName(boo) boo;
4142set ExecName(BusyBoxEgrep) busybox;
4143set ExecName(C) cc;
4144set ExecName(cgrep) cgrep;
4145set ExecName(fgrep) fgrep;
4146set ExecName(ed)  ed;
4147set ExecName(grep) grep;
4148set ExecName(egrep) egrep;
4149set ExecName(emacs) emacs;
4150set ExecName(euphoria) exu;
4151set ExecName(expr) expr;
4152set ExecName(fish) fish;
4153set ExecName(flex) flex;
4154set ExecName(frink) java;
4155set ExecName(gawk) gawk;
4156set ExecName(glark) glark;
4157set ExecName(gpp) gpp;
4158set ExecName(groovy) groovy;
4159set ExecName(guile) guile;
4160set ExecName(ici) ici;
4161set ExecName(icon) icon;
4162set ExecName(java) javac;
4163set ExecName(javascript) js;
4164set ExecName(jgrep) jgrep;
4165set ExecName(judoscript) java;
4166set ExecName(ksh) ksh;
4167set ExecName(lua) lua;
4168set ExecName(m4) m4;
4169set ExecName(mawk) mawk;
4170set ExecName(minised) minised;
4171set ExecName(mysql) mysql;
4172set ExecName(nawk) nawk;
4173set ExecName(nrgrep) nrgrep;
4174set ExecName(numgrep) numgrep;
4175set ExecName(patmatch) perl;
4176set ExecName(pcregrep) pcregrep;
4177set ExecName(perl) perl;
4178set ExecName(php) php;
4179set ExecName(pike) pike;
4180set ExecName(python)  python;
4181set ExecName(rc) rc;
4182set ExecName(rebol) rebol;
4183set ExecName(rep) rep;
4184set ExecName(ruby) ruby;
4185set ExecName(sed)  sed;
4186set ExecName(sgrep) sgrep;
4187set ExecName(sleep) java;
4188set ExecName(sleepwc) java;
4189set ExecName(ssed)  ssed;
4190set ExecName(tcl) tcl;
4191set ExecName(tclglob) tcl;
4192set ExecName(tcsh) tcsh;
4193set ExecName(tr) tr;
4194set ExecName(vim) vim;
4195set ExecName(wmagrep) wmagrep;
4196set ExecName(xmlstarlet) xml;
4197set ExecName(zsh) zsh;
4198
4199set TestData(SingleOctet) "Z\u0065Z\nZ\u0565Z\nZ\u53CBZ"
4200set Intended(SingleOctet) "Z\u0565Z"
4201set TestRegexp(SingleOctet) {Z\C\CZ}
4202
4203set TestData(CrossUnicodeBlockP) "e\n\u0565\u0598"
4204set Intended(CrossUnicodeBlockP) "\u0565\n\u0598"
4205set TestRegexp(CrossUnicodeBlockP) "\[\u0561\-\u0599\]"
4206
4207set TestData(Range128) "e\n\u4e09"
4208set Intended(Range128) "\u4e09"
4209set TestRegexp(Range128) "\[\u4e01\-\u4f01\]"
4210#For some reason there is a problem with U+4E00.
4211
4212set TestData(Range129) "e\n\u4e09"
4213set Intended(Range129) "\u4e09"
4214set TestRegexp(Range129) "\[\u4e01\-\u4f02\]"
4215
4216#Test for glark boolean and
4217set TestData(BooleanAnd)   	"abc\nM\nN\nMN\nMbcN\nNbcM"
4218set Intended(BooleanAnd)	"MN\nMbcN\nNbcM"
4219set TestRegexp(BooleanAnd) 	"-a 0 M N"
4220
4221#Test for Unicode collating classes: e, e-grave, e-acute, f, o-grave
4222set TestData(CollationClass)    "\u0065\n\u00E8\n\u00E9\n\u0066\n\u00F2";
4223set Intended(CollationClass)    "\u0065\n\u00E8\n\u00E9";
4224set TestRegexp(CollationClass) {[[=e=]]}
4225
4226#Test for multicharacter collating element
4227#This presupposes that ch is a collating element in the current locale.
4228set TestData(CollatingElementMultichar)    "a\nb\nc\nch\nd\ne\nbh";
4229set Intended(CollatingElementMultichar)    "a\nch\ne"
4230set TestRegexp(CollatingElementMultichar) {[a[.ch.]e]}
4231
4232set TestData(CollatingElementNamed)    ",\na\nb\nc\nch\nd\ne\nbh";
4233set Intended(CollatingElementNamed)    ","
4234set TestRegexp(CollatingElementNamed) {[[.comma.]]}
4235
4236#Definitions of feature tests.
4237
4238set TestData(embedding)         "AGC\nTAGCT";
4239set Intended(embedding)         "AGC\nTAGCT";
4240set TestRegexp(embedding)       {AGC};
4241
4242set TestData(EmbeddingMatchOnly)         "AGC\nTAGCT";
4243set Intended(EmbeddingMatchOnly)         "AGC\nAGC";
4244set TestRegexp(EmbeddingMatchOnly)       {AGC};
4245
4246set TestData(embeddingLeft)     "AGC\nTAGC\nAGCT";
4247set Intended(embeddingLeft)     "AGC\nTAGC";
4248set TestRegexp(embeddingLeft)   {AGC};
4249
4250set TestData(embeddingRight)    "AGC\nTAGC\nAGCT";
4251set Intended(embeddingRight)    "AGC\nAGCT";
4252set TestRegexp(embeddingRight)  {AGC};
4253
4254#Group.
4255set TestData(group)        "AGCAGC\nAGC\nAG";
4256set Intended(group)        "AGCAGC\nAGC";
4257set TestRegexp(group)      {(AGC)+};
4258
4259#Patmatch
4260set TestData(GroupNoWildcards)        "AGCAGC\nAGC\nAG";
4261set Intended(GroupNoWildcards)        "AGCAGC"
4262set TestRegexp(GroupNoWildcards)      {(AGC){2}};
4263
4264set TestData(groupbs)      "abcabc\nabc\nab";
4265set Intended(groupbs)      "abcabc\nabc";
4266set TestRegexp(groupbs)    {\(abc\)\+};
4267
4268set TestData(groupdbsnqq)      "abcabc\nabc\nab";
4269set Intended(groupdbsnqq)      "abcabc\nabc";
4270set TestRegexp(groupdbsnqq)    {\\(abc\\)+};
4271
4272set TestData(groupdbs)     "abcabc\nabc\nab";
4273set Intended(groupdbs)     "abcabc\nabc";
4274set TestRegexp(groupdbs)   {\\(abc\\)\\+};
4275
4276#No capture group.
4277set TestData(ncgroup) "abcfgfg\nabcfgabc";
4278set Intended(ncgroup) "abcfgfg";
4279set TestRegexp(ncgroup)   {^(?:abc)(fg)\1$};
4280
4281set TestData(NoCaptureGroupPercentbsall) "abcfgfg\nabcfgabc";
4282set Intended(NoCaptureGroupPercentbsall) "abcfgfg";
4283set TestRegexp(NoCaptureGroupPercentbsall)   {^\%\(abc\)\(fg\)\1$};
4284
4285set TestData(ncgroupdb) "abcfgfg\nabcfgabc";
4286set Intended(ncgroupdb) "abcfgfg";
4287set TestRegexp(ncgroupdb)   {^(?:abc)(fg)\\1$};
4288
4289set TestData(groupcomp) "a\nb\nc\nab\nbc\naa15d\nabc"
4290set Intended(groupcomp) "a\nb\nc\nab\nbc\naa15d"
4291set TestRegexp(groupcomp) {!(abc)}
4292
4293#Maybe need to add ncgroup with single and double backslash on parentheses?
4294
4295
4296set TestData(dot) "a\nab\na4b\naxb\naxyb";
4297set Intended(dot) "a4b\naxb";
4298set TestRegexp(dot)   {a.b};
4299
4300#Test for the case in which underscore matches any single character as in SQL
4301set TestData(UnderscoreAnySingle) "a\nab\naxb\na4b\naxyb";
4302set Intended(UnderscoreAnySingle) "axb\na4b";
4303set TestRegexp(UnderscoreAnySingle)   {a_b};
4304
4305#Patmatch
4306set TestData(XAnySingle) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4307set Intended(XAnySingle) "AAG\nAGG\nACG\nATG"
4308set TestRegexp(XAnySingle)   {AXG};
4309
4310#Patmatch
4311set TestData(DotAnySingle) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4312set Intended(DotAnySingle) "AAG\nAGG\nACG\nATG"
4313set TestRegexp(DotAnySingle) {A.G};
4314
4315#Patmatch
4316set TestData(NAnySingleNucleotide) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4317set Intended(NAnySingleNucleotide) "AAG\nAGG\nACG\nATG"
4318set TestRegexp(NAnySingleNucleotide)   {ANG};
4319
4320#Patmatch
4321set TestData(RAnySinglePurineBase) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4322set Intended(RAnySinglePurineBase) "AAG\nAGG"
4323set TestRegexp(RAnySinglePurineBase)   {ARG};
4324
4325#Patmatch
4326set TestData(YAnySinglePyramidineBase) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4327set Intended(YAnySinglePyramidineBase) "ACG\nATG"
4328set TestRegexp(YAnySinglePyramidineBase)   {AYG};
4329
4330#Patmatch
4331set TestData(SBaseGC) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4332set Intended(SBaseGC) "AGG\nACG"
4333set TestRegexp(SBaseGC)   {ASG};
4334
4335#Patmatch
4336set TestData(WBaseAT) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4337set Intended(WBaseAT) "AAG\nATG"
4338set TestRegexp(WBaseAT)   {AWG};
4339
4340#Patmatch
4341set TestData(MBaseAC) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4342set Intended(MBaseAC) "AAG\nACG"
4343set TestRegexp(MBaseAC)   {AMG};
4344
4345#Patmatch
4346set TestData(KBaseGT) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4347set Intended(KBaseGT) "AGG\nATG"
4348set TestRegexp(KBaseGT)   {AKG};
4349
4350#Patmatch
4351set TestData(VBaseACG) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4352set Intended(VBaseACG) "AAG\nAGG\nACG"
4353set TestRegexp(VBaseACG)   {AVG};
4354
4355#Patmatch
4356set TestData(HBaseACT) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4357set Intended(HBaseACT) "AAG\nACG\nATG"
4358set TestRegexp(HBaseACT)   {AHG};
4359
4360#Patmatch
4361set TestData(DBaseAGT) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4362set Intended(DBaseAGT) "AAG\nAGG\nATG"
4363set TestRegexp(DBaseAGT)   {ADG};
4364
4365#Patmatch
4366set TestData(BBaseCGT) "AAG\nAGG\nACG\nATG\nATTG\nAG"
4367set Intended(BBaseCGT) "AGG\nACG\nATG"
4368set TestRegexp(BBaseCGT)   {ABG};
4369
4370#Patmatch
4371set TestData(BResidueDN) "QDY\nQNY\nQTY\nQDDY\nQY\nQEY"
4372set Intended(BResidueDN) "QDY\nQNY"
4373set TestRegexp(BResidueDN)   {QBY};
4374
4375#Patmatch
4376set TestData(ZResidueEQ) "MEY\nMQY\nMTY\nMEEY\nMY\nMDY"
4377set Intended(ZResidueEQ) "MEY\nMQY"
4378set TestRegexp(ZResidueEQ)   {MZY};
4379
4380#Patmatch
4381set TestData(JResidueHydrophobic) "MIY\nMFY\nMVY\nMLY\nMWY\nMMY\nMAY\nMGY\nMCY\nMYY\nMTY\nMRY"
4382set Intended(JResidueHydrophobic) "MIY\nMFY\nMVY\nMLY\nMWY\nMMY\nMAY\nMGY\nMCY\nMYY"
4383set TestRegexp(JResidueHydrophobic)   {MJY};
4384
4385#Patmatch
4386set TestData(OResidueHydrophilic) "MTY\nMSY\nMHY\nMEY\nMDY\nMQY\nMNY\nMKY\nMRY\nMIY\nMWY\nMGY"
4387set Intended(OResidueHydrophilic) "MTY\nMSY\nMHY\nMEY\nMDY\nMQY\nMNY\nMKY\nMRY"
4388set TestRegexp(OResidueHydrophilic)   {MOY};
4389
4390#Patmatch
4391set TestData(repmax) "AC\nAGC\nAGGC\nAGGGC"
4392set Intended(repmax) "AC\nAGC\nAGGC"
4393set TestRegexp(repmax)   {AG{,2}C};
4394
4395set TestData(repmaxlbs) "AC\nAGC\nAGGC\nAGGGC"
4396set Intended(repmaxlbs) "AC\nAGC\nAGGC"
4397set TestRegexp(repmaxlbs)   "AG\\\{,2}C";
4398
4399set TestData(caret) "babc\nc^c\ndbab";
4400set Intended(caret) "babc";
4401set TestRegexp(caret)   {^bab.*};
4402
4403set TestData(PercentCaretBS) "babc\nc^c\ndbab";
4404set Intended(PercentCaretBS) "babc";
4405set TestRegexp(PercentCaretBS)   {\%^bab.*};
4406
4407set TestData(NegativeCircumflex) "Arthur\nMcArthur"
4408set Intended(NegativeCircumflex) "Arthur"
4409set TestRegexp(NegativeCircumflex) {^(Mc)*};
4410
4411set TestData(MatchNotMatchTilde) "x\ny\nz";
4412set Intended(MatchNotMatchTilde) "x\nz";
4413set TestRegexp(MatchNotMatchTilde) "?~y";
4414
4415set TestData(pabegin) "babc\nc^c\ndbab";
4416set Intended(pabegin) "babc";
4417set TestRegexp(pabegin)   {\Abab.*};
4418
4419set TestData(pabegindb) "babc\nc^c\ndbab";
4420set Intended(pabegindb) "babc";
4421set TestRegexp(pabegindb)   {\\Abab.*};
4422
4423set TestData(caretw) "babc\nc^c\ndbab";
4424set Intended(caretw) "babc";
4425set TestRegexp(caretw)   {^bab};
4426
4427set TestData(boslq) "babc\nc^c\ndbab";
4428set Intended(boslq) "babc";
4429set TestRegexp(boslq)   {\`bab.*};
4430
4431set TestData(dollar) "bab\nbabd";
4432set Intended(dollar) "bab";
4433set TestRegexp(dollar)   {bab$};
4434
4435set TestData(GreaterThanEnd) "TGAGC\nAGC\nAGCC\nAGCT"
4436set Intended(GreaterThanEnd) "AGC\nAGC"
4437set TestRegexp(GreaterThanEnd) {AGC>}
4438
4439set TestData(PercentDollarBS) "bab\nbabd\nbab";
4440set Intended(PercentDollarBS) "bab";
4441set TestRegexp(PercentDollarBS)   {bab\%$};
4442
4443set TestData(LessThanBeginning) "TGAGC\nTAGC\nAGC\nAGCCT"
4444set Intended(LessThanBeginning) "AGC\nAGC"
4445set TestRegexp(LessThanBeginning) {<AGC}
4446
4447set TestData(LiteralMetachar) "a\na\$b\nab";
4448set Intended(LiteralMetachar) {a$b};
4449set TestRegexp(LiteralMetachar) {a\$b};
4450
4451set TestData(eosrq) "cbab\nc\$c\nbabd";
4452set Intended(eosrq) "cbab";
4453set TestRegexp(eosrq)   {.*bab\'};
4454
4455set TestData(AbsoluteEndOfString)   "a\nab"
4456set Intended(AbsoluteEndOfString)   "a"
4457set TestRegexp(AbsoluteEndOfString) "a\n$"
4458
4459set TestData(pzendbs) "cbab\nc\$c\nbabd";
4460set Intended(pzendbs) "cbab";
4461set TestRegexp(pzendbs)   {.*bab\z};
4462
4463set TestData(pZendbs) "cbab\nc\$c\nbabd";
4464set Intended(pZendbs) "cbab";
4465set TestRegexp(pZendbs)   {.*bab\Z};
4466
4467set TestData(pzenddbs) "cbab\nc\$c\nbabd";
4468set Intended(pzenddbs) "cbab";
4469set TestRegexp(pzenddbs)   {.*bab\\z};
4470
4471set TestData(pZenddbs) "cbab\nc\$c\nbabd";
4472set Intended(pZenddbs) "cbab";
4473set TestRegexp(pZenddbs)   {.*bab\\Z};
4474
4475set TestData(dollarw) "cbab\nc\$c\nbabd";
4476set Intended(dollarw) "cbab";
4477set TestRegexp(dollarw)   {bab$};
4478
4479set TestData(langle)  "abc\na abc\na\tabc\naxabc";
4480set Intended(langle)  "abc\na abc\na\tabc";
4481set TestRegexp(langle)    {\<abc};
4482
4483set TestData(BeginWordm)  "abc\na abc\na\tabc\naxabc";
4484set Intended(BeginWordm)  "abc\na abc\na\tabc";
4485set TestRegexp(BeginWordm)    {\mabc};
4486
4487set TestData(LangleClass)  "abc\na abc\na\tabc\naxabc";
4488set Intended(LangleClass)  "abc\na abc\na\tabc";
4489set TestRegexp(LangleClass)    {[[:<:]]abc};
4490
4491set TestData(rangle)  "abc\nabc d\nabc\td\nabcxd";
4492set Intended(rangle)  "abc\nabc d\nabc\td";
4493set TestRegexp(rangle)    {abc\>};
4494
4495set TestData(EndWordM)  "abc\nabc d\nabc\td\nabcxd";
4496set Intended(EndWordM)  "abc\nabc d\nabc\td";
4497set TestRegexp(EndWordM)    {abc\M};
4498
4499set TestData(RangleClass)  "abc\nabc d\nabc\td\nabcxd";
4500set Intended(RangleClass)  "abc\nabc d\nabc\td";
4501set TestRegexp(RangleClass)    {abc[[:>:]]};
4502
4503set TestData(WordBoundary) "ab\n ab \n\tab\t\n;ab;\n3ab\nab_\nxab\nabx\nxabx"
4504set Intended(WordBoundary) "ab\n ab \n\tab\t\n;ab;"
4505set TestRegexp(WordBoundary) {\bab\b}
4506
4507set TestData(WordBoundaryBs) "ab\n ab \n\tab\t\n;ab;\n3ab\nab_\nxab\nabx\nxabx"
4508set Intended(WordBoundaryBs) "ab\n ab \n\tab\t\n;ab;"
4509set TestRegexp(WordBoundaryBs) {\\bab\\b}
4510
4511set TestData(WordBoundaryybs) "ab\n ab \n\tab\t\n;ab;\n3ab\nab_\nxab\nabx\nxabx"
4512set Intended(WordBoundaryybs) "ab\n ab \n\tab\t\n;ab;"
4513set TestRegexp(WordBoundaryybs) {\yab\y}
4514
4515set TestData(NonWordBoundaryYbs)  "axb\na b"
4516set Intended(NonWordBoundaryYbs) "axb"
4517set TestRegexp(NonWordBoundaryYbs) {ax\Yb}
4518
4519set TestData(WordBoundaryydbs) "ab\n ab \n\tab\t\n;ab;\n3ab\nab_\nxab\nabx\nxabx"
4520set Intended(WordBoundaryydbs) "ab\n ab \n\tab\t\n;ab;"
4521set TestRegexp(WordBoundaryydbs) {\\yab\\y}
4522
4523set TestData(NonWordBoundary) "ab\n ab \n\tab\t\n;ab;\n3ab4\n_ab_\nxabx"
4524set Intended(NonWordBoundary) "3ab4\n_ab_\nxabx"
4525set TestRegexp(NonWordBoundary) {\Bab\B}
4526
4527#Disjunctions
4528
4529set TestData(pipe)  "xaz\nxbz\nxcz\nxz\xooz";
4530set Intended(pipe)  "xaz\nxbz";
4531set TestRegexp(pipe)    {x(a|b)z};
4532
4533set TestData(pipebs)  "xaz\nxbz\nxcz\nxz\nxooz";
4534set Intended(pipebs)  "xaz\nxbz";
4535set TestRegexp(pipebs)   {x(a\|b)z};
4536
4537set TestData(pipedbs)  "xaz\nxbz\nxcz\nxz\nxooz";
4538set Intended(pipedbs)  "xaz\nxbz";
4539set TestRegexp(pipedbs)   {x(a\\|b)z};
4540
4541set TestData(pipebsall)     "xaz\nxbz\nxcz\nxz\nxooz";
4542set Intended(pipebsall)     "xaz\nxbz";
4543set TestRegexp(pipebsall)   {x\(a\|b\)z};
4544
4545set TestData(pipedbsall)     "xaz\nxbz\nxcz\nxz\nxooz";
4546set Intended(pipedbsall)     "xaz\nxbz";
4547set TestRegexp(pipedbsall)   {x\\(a\\|b\\)z};
4548
4549set TestData(piperebol)    "xaz\nxbz\nxcz\nxz\xooz";
4550set Intended(piperebol)    "xaz\nxbz";
4551set TestRegexp(piperebol)  {"x"["a"|"b"]"z"};
4552
4553set TestData(altcomma)  "xaz\nxbz\nxcz\nxdz";
4554set Intended(altcomma)  "xaz\nxbz\nxcz";
4555set TestRegexp(altcomma)    {x{a,b,c}z}
4556
4557#Test for the case in which ? matches zero or one of the preceding regexp.
4558set TestData(qmopt) "ababcd\nabcd\nabab?cd";
4559set Intended(qmopt) "ababcd\nabcd";
4560set TestRegexp(qmopt)   {ab(ab)?cd};
4561
4562set TestData(qmoptclass) "a\na3\nab\na;";
4563set Intended(qmoptclass) "a\na3";
4564set TestRegexp(qmoptclass)   {a%d?$};
4565
4566#Test for the case in which ? matches zero or one of the preceding regexp.
4567set TestData(qmoptbs) "xyabcd\nxycd\nxyab?cd\nxyababcd";
4568set Intended(qmoptbs) "xyabcd\nxycd"
4569set TestRegexp(qmoptbs)   {xy\(ab\)\?cd};
4570
4571#Test for the case in which - matches zero or one of the preceding regexp.
4572set TestData(EqualOptbs) "xyabcd\nxycd\nxyab\=cd\nxyababcd";
4573set Intended(EqualOptbs) "xyabcd\nxycd";
4574set TestRegexp(EqualOptbs)   {xy\(ab\)\=cd};
4575
4576#Test for the case in which ? matches zero or one of the preceding regexp.
4577set TestData(qmoptdbsnqq) "ababcd\nabcd\nabab?cd";
4578set Intended(qmoptdbsnqq) "ababcd\nabcd";
4579set TestRegexp(qmoptdbsnqq)   {ab\\(ab\\)?cd};
4580
4581#Test for the case in which ? matches zero or one of the following group
4582set TestData(qmoptnext) "ababcd\nabcd\nabab?cd";
4583set Intended(qmoptnext) "ababcd\nabcd";
4584set TestRegexp(qmoptnext)   {ab?(ab)cd};
4585
4586#Test for the case in which ? matches any single character.
4587set TestData(qm1) "fag\nfabg\nfasg\nfabcg\nfdag";
4588set Intended(qm1) "fabg\nfasg";
4589set TestRegexp(qm1)   {fa?g};
4590
4591#Test for the case in which ? matches any single character.
4592set TestData(qm1bs) "fag\nfabg\nfasg\nfabcg\nfdag";
4593set Intended(qm1bs) "fabg\nfasg";
4594set TestRegexp(qm1bs)   {fa\?g};
4595
4596#Test for the case in which * matches zero or more copies of the preceding re
4597set TestData(StarPrev) "AG\nATG\nATTG\nATTTG\nAaG\nAT*G";
4598set Intended(StarPrev) "AG\nATG\nATTG\nATTTG"
4599set TestRegexp(StarPrev)   {AT*G};
4600
4601#Test for the case in which * matches zero or more copies of the preceding re
4602set TestData(ZeroOrMoreCurly) "AG\nATG\nATTG\nATTTG\nAaG\nAT*G";
4603set Intended(ZeroOrMoreCurly) "AG\nATG\nATTG\nATTTG"
4604set TestRegexp(ZeroOrMoreCurly)   "AT\\\{\}G";
4605
4606#Test for the case in which \# matches zero or more copies of the preceding group
4607set TestData(CrosshatchPrev) "xz\nxbz\nxbbz\nxbbbz\nxaz\nxb*z";
4608set Intended(CrosshatchPrev) "xz\nxbz\nxbbz\nxbbbz"
4609set TestRegexp(CrosshatchPrev)   {xb#z};
4610
4611#Test for the case in which \#\# matches one or more copies of the preceding group
4612set TestData(DoubleCrosshatchPrev) "xz\nxbz\nxbbz\nxbbbz\nxaz\nxb*z";
4613set Intended(DoubleCrosshatchPrev) "xbz\nxbbz\nxbbbz"
4614set TestRegexp(DoubleCrosshatchPrev)   {xb##z};
4615
4616#Test for the case in which * matches zero or more copies of the following group
4617set TestData(StarNext) "xz\nxabz\nxababz\nx*(ab)z\nabz\nxab\nxaz\n3d"
4618set Intended(StarNext) "xz\nxabz\nxababz"
4619set TestRegexp(StarNext)   {x*(ab)z};
4620
4621#Test for the case in which * matches zero or more copies of the preceding class
4622set TestData(starclass) "xz\nx1z\nx22z\nx867z\nxdz\nx%dz";
4623set Intended(starclass) "xz\nx1z\nx22z\nx867z"
4624set TestRegexp(starclass)   {x%d*z};
4625
4626#Test for the case in which - matches zero or more copies of the preceding class (reluctant)
4627set TestData(SubHyphenClass)     "aBBBBa";
4628set Intended(SubHyphenClass)     "BBBB";
4629set TestRegexp(SubHyphenClass)   {(a)(%u-)(%u*)(a)};
4630set TestSubexp(SubHyphenClass)   {%3};
4631
4632#Test for the case in which * matches zero or more of any character
4633set TestData(StarAny) "TAG\nTCG\nTACG\nTACCG\nTACCCG\nTACCCCG\nTACCCCCG\nTACcG\nTACdG";
4634set Intended(StarAny) "TACG\nTACCG\nTACCCG\nTACCCCG\nTACCCCCG\nTACcG\nTACdG";
4635set TestRegexp(StarAny)  {TAC*G};
4636
4637#Test for the case in which % matches zero or more of any character as in SQL
4638set TestData(PercentAny) "xaz\nxbz\nxabz\nxabbz\nxabbbz\nxabbbbz\nxabbbbbz\nxabcz\nxabdz";
4639set Intended(PercentAny)           "xabz\nxabbz\nxabbbz\nxabbbbz\nxabbbbbz\nxabcz\nxabdz";
4640set TestRegexp(PercentAny)   {xab%z};
4641
4642#Test for the case in which + matches one or more copies of the preceding re
4643set TestData(plusprev) "xz\nxbz\nxbbz\nxbbbz\nxaz\nxb*z";
4644set Intended(plusprev) "xbz\nxbbz\nxbbbz"
4645set TestRegexp(plusprev) {xb+z};
4646
4647#Test for the case in which + matches one or more copies of the following group
4648set TestData(plusnext) "xz\nxabz\nxababz\nx*(ab)z\nabz\nxab\nxaz\n3d"
4649set Intended(plusnext) "xabz\nxababz"
4650set TestRegexp(plusnext)   {x+(ab)z};
4651
4652#Test for the case in which + matches one or more copies of the following group
4653set TestData(atsignonenext) "xabz\nxcdz\nxz\nxabcdz\nef"
4654set Intended(atsignonenext) "xabz\nxcdz"
4655set TestRegexp(atsignonenext)   {x@(ab|cd)z};
4656
4657#Test for the case in which \+ matches one or more copies of the preceding re
4658set TestData(plusprevbs) "xz\nxbz\nxbbz\nxbbbz\nxaz\nxb+z";
4659set Intended(plusprevbs) "xbz\nxbbz\nxbbbz"
4660set TestRegexp(plusprevbs) {xb\+z};
4661
4662#Test for the case in which + matches one or more copies of the preceding class
4663set TestData(plusclass) "xz\nx1z\nx22z\nx867z\nxdz\nx%dz";
4664set Intended(plusclass) "x1z\nx22z\nx867z"
4665set TestRegexp(plusclass)  {x%d+z};
4666
4667#Test for the case in which \+ matches one or more copies of any character
4668set TestData(plusany) "xaz\nxabz\nxabbz\nxabbbz\nxabbbbz\nxabbbbbz\nxabcz\nxbz\nxabdz";
4669set Intended(plusany) "xabz\nxabbz\nxabbbz\nxabbbbz\nxabbbbbz\nxabcz\nxabdz";
4670set TestRegexp(plusany) {xab\+z};
4671
4672#Test for the case in which crosshatch matches one or more copies of any character
4673set TestData(crosshatchany) "xaz\nxabz\nxabbz\nxabbbz\nxabbbbz\nxabbbbbz\nxabcz\nxbz\nxabdz";
4674set Intended(crosshatchany) "xabz\nxabbz\nxabbbz\nxabbbbz\nxabbbbbz\nxabcz\nxabdz";
4675set TestRegexp(crosshatchany) {xab#z};
4676
4677#Test for construction in which exactly n copies of preceding group are matched.
4678set TestData(repfixed)  "AC\nAGC\nAGGC\nAGGGC\nAGGGGC"
4679set Intended(repfixed)  "AGGGC";
4680set TestRegexp(repfixed)   {AG{3}C};
4681
4682#Test for Lua balanced delimiter construct
4683set TestData(baldlim) "ab<cd>ef\nabcdef";
4684set Intended(baldlim) "ab<cd>ef";
4685set TestRegexp(baldlim)   {%b<>};
4686
4687#Test for construction in which exactly n copies of preceding group are matched.
4688set TestData(repfixedbs) "xbz\nxbbz\nxbbbz\nxbbbbz";
4689set Intended(repfixedbs) "xbbbz";
4690set TestRegexp(repfixedbs)   {xb\{3\}z};
4691
4692#Test for construction in which exactly n copies of preceding group are matched.
4693set TestData(repfixeddbs) "xbz\nxbbz\nxbbbz\nxbbbbz";
4694set Intended(repfixeddbs) "xbbbz";
4695set TestRegexp(repfixeddbs)   {xb\\{3\\}z};
4696
4697#Test for construction in which at least n copies of preceding group are matched.
4698set TestData(repmin) "AC\nAGC\nAGGC\nAGGGC\nAGGGGC"
4699set Intended(repmin) "AGGGC\nAGGGGC"
4700set TestRegexp(repmin)   {AG{3,}C};
4701
4702#Test for construction in which at least n copies of preceding group are matched.
4703set TestData(repminbs) "xbz\nxbbz\nxbbbz\nxbbbbz";
4704set Intended(repminbs) "xbbbz\nxbbbbz";
4705set TestRegexp(repminbs)   {xb\{3,\}z};
4706
4707#Test for construction in which at least n copies of preceding group are matched.
4708set TestData(repmindbs) "xbz\nxbbz\nxbbbz\nxbbbbz";
4709set Intended(repmindbs) "xbbbz\nxbbbbz";
4710set TestRegexp(repmindbs)   {xb\\{3,\\}z};
4711
4712#Test for construction in which from m to n copies of preceding group are matched.
4713set TestData(reprange)  "AC\nAGC\nAGGC\nAGGGC\nAGGGGC"
4714set Intended(reprange)  "AGGC\nAGGGC"
4715set TestRegexp(reprange)  {AG{2,3}C};
4716
4717#Test for construction in which from m to n copies of preceding group are matched.
4718#Here, curly brackets must be escaped.
4719set TestData(reprangebs) "xbz\nxbbz\nxbbbz\nxbaz\nxaaaz";
4720set Intended(reprangebs) "xbbz\nxbbbz";
4721set TestRegexp(reprangebs)  {xb\{2,3\}z};
4722
4723#Test for construction in which from m to n copies of preceding group are matched.
4724#Here, left curly braces are escaped.
4725set TestData(reprangelbs) "xbz\nxbbz\nxbbbz\nxbaz\nxaaaz";
4726set Intended(reprangelbs) "xbbz\nxbbbz";
4727set TestRegexp(reprangelbs) "xb\\\{2,3}z"
4728
4729#Test for construction in which from m to n copies of preceding group are matched.
4730#Here, curly brackets must be escaped by double backslashes..
4731set TestData(reprangedbs) "xbz\nxbbz\nxbbbz\nxbaz\nxaaaz";
4732set Intended(reprangedbs) "xbbz\nxbbbz";
4733set TestRegexp(reprangedbs)  {xb\\{2,3\\}z};
4734
4735#Test whether bracket notation for sets is supported
4736set TestData(set) "AAT\nACT\nAGT\nATT\nAUT\nAfT"
4737set Intended(set) "AAT\nACT\nAGT"
4738set TestRegexp(set)   {A[ACG]T};
4739
4740#Test whether caret-bracket notation for the complement of sets is supported
4741set TestData(setcomp) "AAT\nACT\nAGT\nATT\nAUT\nAfT\n"
4742set Intended(setcomp) "ATT\nAUT\nAfT"
4743set TestRegexp(setcomp)   {A[^ACG]T};
4744
4745#Test whether tilde-bracket notation for the complement of sets is supported
4746set TestData(setcomptilde) "x\ny\nz\na\nf\n4\n";
4747set Intended(setcomptilde) "a\nf\n4";
4748set TestRegexp(setcomptilde)   {[~xyz]};
4749
4750#Test whether bang-bracket notation for the complement of sets is supported
4751set TestData(setcompbang) "x\ny\nz\na\nf\n4\n";
4752set Intended(setcompbang) "a\nf\n4";
4753set TestRegexp(setcompbang)   {[!xyz]};
4754
4755#Test whether character ranges are supported
4756set TestData(range) "x\ny\nz\na\nf\n4";
4757set Intended(range) "x\ny\nz";
4758set TestRegexp(range)   {[x-z]};
4759
4760#Test whether multiple character ranges are supported
4761set TestData(multirange) "x\ny\nz\na\nb\nc\ns\nf\n4\n";
4762set Intended(multirange) "x\ny\nz\na\nb\nc\ns\n";
4763set TestRegexp(multirange)   {[a-csx-z]};
4764
4765#Test whether number ranges are supported
4766set TestData(IntegerRange) "9\n10\n11\n1\n5\n27\n"
4767set Intended(IntegerRange) "9\n10\n11"
4768set TestRegexp(IntegerRange)   {<9-11>};
4769
4770#Test whether numgrep-style number ranges are supported
4771set TestData(IntegerRangeDoubleDot) "9\n10\n11\n1\n5\n27\n"
4772set Intended(IntegerRangeDoubleDot) "9\n10\n11"
4773set TestRegexp(IntegerRangeDoubleDot)  {9..11};
4774
4775#Test whether numgrep-style multiples are supported
4776set TestData(IntegerMultiple) "3\n6\n9\n12\n36\n5\n2\n88\n7\n"
4777set Intended(IntegerMultiple) "3\n6\n9\n12\n36"
4778set TestRegexp(IntegerMultiple)  {m3};
4779
4780#Test whether numgrep-style factors are supported
4781set TestData(IntegerFactor) "2\n3\n4\n6\n5\n7\n8\n9\n13\n24\n"
4782set Intended(IntegerFactor) "2\n3\n4\n6"
4783set TestRegexp(IntegerFactor)  "f12";
4784
4785#Test whether numgrep-style alternatives are supported
4786set TestData(IntegerAlternative) "5\n7\n11\n2\n3\n75\n110\n"
4787set Intended(IntegerAlternative) "5\n7\n11"
4788set TestRegexp(IntegerAlternative)  {5,7,11};
4789
4790#Test whether match back references are supported
4791set TestData(backref) "abcdedebc\nabcdeedcba";
4792set Intended(backref) "abcdedebc";
4793set TestRegexp(backref)   {a(bc)(de)\2\1};
4794
4795set TestData(backrefAtLeastTen) "abcdefghijklj\nabcdefghijkl";
4796set Intended(backrefAtLeastTen) "abcdefghijklj";
4797set TestRegexp(backrefAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\10}
4798
4799set TestData(backrefdbs) "abcdedebc\nabcdeedcba";
4800set Intended(backrefdbs) "abcdedebc";
4801set TestRegexp(backrefdbs)   {a(bc)(de)\\2\\1};
4802
4803set TestData(backrefdbsAtLeastTen) "abcdefghijklj\nabcdefghijkl";
4804set Intended(backrefdbsAtLeastTen) "abcdefghijklj";
4805set TestRegexp(backrefdbsAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\10}
4806
4807set TestData(backrefksh) "abcdedebc\nabcdeedcba";
4808set Intended(backrefksh) "abcdedebc";
4809set TestRegexp(backrefksh)   {a@(bc|pq)@(de|sr)\2\1};
4810
4811set TestData(backrefkshAtLeastTen) "abcdefghijklj\nabcdefghijkl";
4812set Intended(backrefkshAtLeastTen) "abcdefghijklj";
4813set TestRegexp(backrefkshAtLeastTen) {@(a|z)@(b|y)@(c|x)@(d|w)@(e|v)@(f|u)@(g|t)@(h|s)@(i|r)@(j|q)@(k|p)@(l|o)\10}
4814
4815set TestData(backrefper) "abcdedebc\nabcdeedcba";
4816set Intended(backrefper) "abcdedebc";
4817set TestRegexp(backrefper)   {a(bc)(de)%2%1};
4818
4819set TestData(backrefperAtLeastTen) "abcdefghijklj\nabcdefghijkl";
4820set Intended(backrefperAtLeastTen) "abcdefghijklj";
4821set TestRegexp(backrefperAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)%10}
4822
4823set TestData(backrefbsall)       "abcdedebc\nabcdeedcba";
4824set Intended(backrefbsall)       "abcdedebc";
4825set TestRegexp(backrefbsall)     {a\(bc\)\(de\)\2\1};
4826
4827set TestData(backrefbsallAtLeastTen) "abcdefghijklj\nabcdefghijkl";
4828set Intended(backrefbsallAtLeastTen) "abcdefghijklj";
4829set TestRegexp(backrefbsallAtLeastTen) {\(a\)\(b\)\(c\)\(d\)\(e\)\(f\)\(g\)\(h\)\(i\)\(j\)\(k\)\(l\)\10}
4830
4831set TestData(backrefdbsall)       "abcdedebc\nabcdeedcba";
4832set Intended(backrefdbsall)       "abcdedebc";
4833set TestRegexp(backrefdbsall)     {a\\(bc\\)\\(de\\)\\2\\1};
4834
4835set TestData(backrefdbsallAtLeastTen) "abcdefghijklj\nabcdefghijkl";
4836set Intended(backrefdbsallAtLeastTen) "abcdefghijklj";
4837set TestRegexp(backrefdbsallAtLeastTen) {\\(a\\)\\(b\\)\\(c\\)\\(d\\)\\(e\\)\\(f\\)\\(g\\)\\(h\\)\\(i\\)\\(j\\)\\(k\\)\\(l\\)\\10}
4838
4839set TestData(commaor)      "dog\ncat\ndogcat\ndogncat\ncatndog\ndigncat\ndeogbcant\ndig";
4840set Intended(commaor)      "dog\ncat\ndogcat\ndogncat\ncatndog\ndigncat";
4841set TestRegexp(commaor)     {dog,cat};
4842
4843set TestData(semiand)      "dog\ncat\ndogcat\ndogncat\ncatndog\ndig\ndigncat\ndeogbcant"
4844set Intended(semiand)      "dogcat\ndogncat\ncatndog";
4845set TestRegexp(semiand)     {dog;cat};
4846
4847set TestData(ampandbs)      "dog\ncat\ndogcat\ndogncat\ncatndog\ndig\ndigncat\ndeogbcant"
4848set Intended(ampandbs)      "dogcat\ndogncat\ncatndog";
4849set TestRegexp(ampandbs)     {.*dog\&.*cat};
4850
4851#This is for agrep and requires using the command line flag allowing errors.
4852set TestData(anglestrict)      "abc\naxc\nbbc\nabd";
4853set Intended(anglestrict)      "abc";
4854set TestRegexp(anglestrict)   {<abc>};
4855
4856#Test the various named character sets
4857
4858set TestData(alnum) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?\nZ_";
4859set Intended(alnum) "Za\nZB\nZc\nZZ\nZ4";
4860set TestRegexp(alnum)   {Z[[:alnum:]]};
4861
4862set TestData(wordclass) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?\nZ_";
4863set Intended(wordclass) "Za\nZB\nZc\nZZ\nZ4\nZ_";
4864set TestRegexp(wordclass)   {Z[[:word:]]};
4865
4866set TestData(alnumrebol) "a\nB\nc\nZ\n+\n4\n:\n?\n_";
4867set Intended(alnumrebol) "a\nB\nc\nZ\n4";
4868set TestRegexp(alnumrebol)   {[alnum]};
4869
4870set TestData(lalnum) "a\nB\nc\nZ\n+\n4\n:\n?\n_";
4871set Intended(lalnum) "a\nB\nc\nZ\n4";
4872set TestRegexp(lalnum)   {%w};
4873
4874set TestData(lalnumc) "aac\naBc\nacc\naZc\na+c\na4c\na:c\na?c\na\040c\na_c";
4875set Intended(lalnumc) "a+c\na:c\na?c\na\040c\na_c";
4876set TestRegexp(lalnumc)   {a%Wc};
4877
4878set TestData(bsw)   "abc\n4bc\n:bc\n bc\n\tbc\n_bc";
4879set Intended(bsw)   "abc\n4bc";
4880set TestRegexp(bsw)     {^\wbc};
4881
4882set TestData(pbsw)   "abc\n4bc\n:bc\n bc\n\tbc\n_bc";
4883set Intended(pbsw)   "abc\n4bc\n_bc";
4884set TestRegexp(pbsw)     {^\wbc};
4885
4886set TestData(pbbsw)   "abc\n4bc\n:bc\n bc\n\tbc\n_bc";
4887set Intended(pbbsw)   "abc\n4bc\n_bc";
4888set TestRegexp(pbbsw)     {^\\wbc};
4889
4890
4891set TestData(bsW)   "abc\n4bc\n:bc\n bc\n\tbc\n_bc";
4892set Intended(bsW)   ":bc\n bc\n\tbc\n_bc";
4893set TestRegexp(bsW)   {^\Wbc};
4894
4895set TestData(bsWdb)   "abc\n4bc\n:bc\n bc\n\tbc\n_bc";
4896set Intended(bsWdb)   ":bc\n bc\n\tbc\n_bc";
4897set TestRegexp(bsWdb)   {^\\Wbc};
4898
4899set TestData(pbsW)   "abc\n4bc\n:bc\n bc\n\tbc\n_bc";
4900set Intended(pbsW)   ":bc\n bc\n\tbc";
4901set TestRegexp(pbsW)  {^\Wbc};
4902
4903set TestData(alpha) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?";
4904set Intended(alpha) "Za\nZB\nZc\nZZ";
4905set TestRegexp(alpha)   {Z[[:alpha:]]};
4906
4907set TestData(alpharebol) "a\nB\nc\nZ\n+\n4\n:\n?";
4908set Intended(alpharebol) "a\nB\nc\nZ";
4909set TestRegexp(alpharebol)   {alpha};
4910
4911set TestData(lalpha) "a\nB\nc\nZ\n+\n4\n:\n?";
4912set Intended(lalpha) "a\nB\nc\nZ";
4913set TestRegexp(lalpha)   {%a};
4914
4915set TestData(AlphaBSa) "a\nB\nc\nZ\n+\n4\n:\n?";
4916set Intended(AlphaBSa) "a\nB\nc\nZ";
4917set TestRegexp(AlphaBSa)   {\a};
4918
4919set TestData(lalphac) "a\nB\nc\nZ\n+\n4\n:\n?";
4920set Intended(lalphac) "+\n4\n:\n?";
4921set TestRegexp(lalphac)   {%A};
4922
4923set TestData(AlphaBSAc) "a\nB\nc\nZ\n+\n4\n:\n?";
4924set Intended(AlphaBSAc) "+\n4\n:\n?";
4925set TestRegexp(AlphaBSAc)   {\A};
4926
4927set TestData(WordBSw) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?\nZ_";
4928set Intended(WordBSw) "Za\nZB\nZc\nZZ\nZ4\nZ_";
4929set TestRegexp(WordBSw)   {Z\w};
4930
4931set TestData(WordBSWc) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?\nZ_";
4932set Intended(WordBSWc) "Z+\nZ:\nZ?\nZ_";
4933set TestRegexp(WordBSWc)   {Z\W};
4934
4935set TestData(WordHeadBSh) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?\nZ_";
4936set Intended(WordHeadBSh) "Za\nZB\nZc\nZZ\nZ_";
4937set TestRegexp(WordHeadBSh)   {Z\h};
4938
4939set TestData(WordHeadBSHc) "Za\nZB\nZc\nZZ\nZ+\nZ4\nZ:\nZ?\nZ_";
4940set Intended(WordHeadBSHc) "Z+\nZ4\nZ:\nZ?";
4941set TestRegexp(WordHeadBSHc)   {Z\H};
4942
4943set TestData(XMLInitial)	"_\n:\na\nA\n\u0562\n\u1109\n\u4E01\n3\n?\n\t"
4944set Intended(XMLInitial)	"_\n:\na\nA\n\u0562\n\u1109\n\u4E01"
4945set TestRegexp(XMLInitial)   {\i};
4946
4947set TestData(XMLInitialc)	"_\n:\na\nA\n\u0562\n\u1109\n\u4E01\n3\n?\n\t"
4948set Intended(XMLInitialc)	"3\n?\n\t"
4949set TestRegexp(XMLInitialc)   {\I};
4950
4951set Palette(XMLInitial,gloss)    [_ {one word head character}];
4952set Palette(XMLInitial,re)    [list {\\i F}];
4953set Palette(XMLInitial,link)    [list XMLInitial]
4954
4955set Palette(XMLInitialc,gloss)    [_ {one non-word head character}];
4956set Palette(XMLInitialc,re)    [list {\\I F}];
4957set Palette(XMLInitialc,link)    [list XMLInitial]
4958
4959set TestData(lower) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
4960set Intended(lower) "AaZ\nAcZ";
4961set TestRegexp(lower)   {A[[:lower:]]Z};
4962
4963set TestData(lowerrebol) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
4964set Intended(lowerrebol) "AaZ\nAcZ";
4965set TestRegexp(lowerrebol)   {#"A"[lower]#"Z"};
4966
4967set TestData(llower) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
4968set Intended(llower) "AaZ\nAcZ";
4969set TestRegexp(llower)   {A%lZ};
4970
4971set TestData(llowerc) "AAZ\nA:Z\nA2Z\nAaB\nAbZ";
4972set Intended(llowerc) "AAZ\nA:Z\nA2Z";
4973set TestRegexp(llowerc)   {A%LZ};
4974
4975set TestData(upper) "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
4976set Intended(upper) "aBz\naZz";
4977set TestRegexp(upper)   {a[[:upper:]]z};
4978
4979set TestData(upperrebol) "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
4980set Intended(upperrebol) "aBz\naZz";
4981set TestRegexp(upperrebol)   {#"a"[upper]#"z"};
4982
4983#W3 character classes
4984#XML Schema Part 2 says that \s = [#x20\t\n\r], so evidently VT and FF are excluded
4985set TestData(W3Space) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
4986set Intended(W3Space) "a\040b\na\011b";
4987set TestRegexp(W3Space)   {a\sb};
4988
4989set TestData(W3Spacec) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
4990set Intended(W3Spacec) "a\014b\na\013b\na4b\na:b\nacb";
4991set TestRegexp(W3Spacec)   {a\Sb};
4992
4993#\i = Letter U underscore
4994#\c = NameChars
4995#\d = \p{Nd}
4996#\w = [#x0000-#x10FFFF]-[\p{P}\p{Z}\p{C}]
4997
4998#W3 character class subtraction
4999set TestData(W3CharClassSubtraction) "a\nd\n\t\nb\nc"
5000set Intended(W3CharClassSubtraction) "a\nd\n\t"
5001set TestRegexp(W3CharClassSubtraction)   {[\ta-d]-[bc]]};
5002
5003#Lua character classes
5004set TestData(lupper) "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
5005set Intended(lupper) "aBz\naZz";
5006set TestRegexp(lupper)   {a%uz};
5007
5008set TestData(lupperc) "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
5009set Intended(lupperc) "aaz\nacz\na+z\na4z\na:z\na?z";
5010set TestRegexp(lupperc)   {a%Uz};
5011
5012set TestData(punct) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5013set Intended(punct) "a:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5014set TestRegexp(punct)   {a[[:punct:]]z};
5015
5016set TestData(lpunct) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5017set Intended(lpunct) "a:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5018set TestRegexp(lpunct)   {a%pz};
5019
5020set TestData(lpunctc) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z\na\040z";
5021set Intended(lpunctc) "aaz\naBz\nacz\naZz\na4z\na\040z";
5022set TestRegexp(lpunctc)   {a%Pz};
5023
5024set TestData(blank) "a\040b\na\011b\na\n4\n:";
5025set Intended(blank) "a\040b\na\011b";
5026set TestRegexp(blank)   {a[[:blank:]]b};
5027
5028set TestData(space) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5029set Intended(space) "a\040b\na\014b\na\011b\na\013b";
5030set TestRegexp(space)   {a[[:space:]]b};
5031
5032set TestData(lspace) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5033set Intended(lspace) "a\040b\na\014b\na\011b\na\013b";
5034set TestRegexp(lspace)   {a%sb};
5035
5036set TestData(pspace) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5037set Intended(pspace) "a\040b\na\014b\na\011b\na\013b";
5038set TestRegexp(pspace)   {a\sb};
5039
5040set TestData(pspacedb) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5041set Intended(pspacedb) "a\040b\na\014b\na\011b\na\013b";
5042set TestRegexp(pspacedb)   {a\\sb};
5043
5044set TestData(lspacec) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5045set Intended(lspacec) "a4b\na:b\nacb";
5046set TestRegexp(lspacec)   {a%Sb};
5047
5048set TestData(pspacec) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5049set Intended(pspacec) "a4b\na:b\nacb";
5050set TestRegexp(pspacec)   {a\Sb};
5051
5052set TestData(pspacedbc) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5053set Intended(pspacedbc) "a4b\na:b\nacb";
5054set TestRegexp(pspacedbc)   {a\\Sb};
5055
5056set TestData(graph) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5057set Intended(graph) "aab\naAb\na4b\na:b";
5058set TestRegexp(graph)   {a[[:graph:]]b};
5059
5060set TestData(print) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5061set Intended(print) "aab\naAb\na4b\na:b\na\040b";
5062set TestRegexp(print)   {a[[:print:]]b};
5063
5064set TestData(perlprint) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5065set Intended(perlprint) "aab\naAb\na4b\na:b\na\040b\na\011b";
5066set TestRegexp(perlprint)   {a[[:print:]]b};
5067
5068set TestData(mockprint) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5069set Intended(mockprint) "aab\naAb\na4b"
5070set TestRegexp(mockprint)   {a[[:print:]]b};
5071
5072set TestData(cntrl) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5073set Intended(cntrl) "a\011b\na\023b\na\177b";
5074set TestRegexp(cntrl)   {a[[:cntrl:]]b};
5075
5076set TestData(lcntrl) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5077set Intended(lcntrl) "a\011b\na\023b\na\177b";
5078set TestRegexp(lcntrl)   {a%cb};
5079
5080set TestData(lcntrlc) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5081set Intended(lcntrlc) "aab\naAb\na4b\na:b\na\040b";
5082set TestRegexp(lcntrlc)   {a%Cb};
5083
5084set TestData(digit) "ZA\nZ:\nZB\nZb\nZ1\nZ2\nZ3\nZ4\nZ5\nZ6\nZ7\nZ8\nZ9\nZ0\nZ?\nZ\023";
5085set Intended(digit) "Z1\nZ2\nZ3\nZ4\nZ5\nZ6\nZ7\nZ8\nZ9\nZ0";
5086set TestRegexp(digit)  {Z[[:digit:]]};
5087
5088set TestData(compposixclassinner) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5089set Intended(compposixclassinner) "A\n:\nB\nb\n?\n\023";
5090set TestRegexp(compposixclassinner)  {[[:^digit:]]};
5091
5092set TestData(compposixclassouter) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5093set Intended(compposixclassouter) "A\n:\nB\nb\n?\n\023";
5094set TestRegexp(compposixclassouter)  {[^[:digit:]]};
5095
5096set TestData(digitrebol) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5097set Intended(digitrebol) "1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5098set TestRegexp(digitrebol)  {[digit]};
5099
5100set TestData(ldigit) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5101set Intended(ldigit) "1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5102set TestRegexp(ldigit)  {%d};
5103
5104set TestData(pdigit) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5105set Intended(pdigit) "1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5106set TestRegexp(pdigit)  {\d};
5107
5108set TestData(xmldigit) "2\n0\n\u0660\n\u0968\n\u0A69\n\uFF15\n?\n\023\nA\n:\nb\n\u0561";
5109set Intended(xmldigit) "2\n0\n\u0660\n\u0968\n\u0A69\n\uFF15\n?";
5110set TestRegexp(xmldigit)  {\d};
5111
5112set TestData(xmldigitc) "2\n0\n\u0660\n\u0968\n\u0A69\n\uFF15\n?\n\023\nA\n:\nb\n\u0561";
5113set Intended(xmldigitc) "?\n\023\nA\n:\nb\n\u0561";
5114set TestRegexp(xmldigitc)  {\D};
5115
5116set TestData(pdigitdb) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5117set Intended(pdigitdb) "1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5118set TestRegexp(pdigitdb)  {\\d};
5119
5120set TestData(ldigitc) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5121set Intended(ldigitc) "A\n:\nB\nb\n?\n\023";
5122set TestRegexp(ldigitc)  {%D};
5123
5124set TestData(pdigitc) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5125set Intended(pdigitc) "A\n:\nB\nb\n?\n\023";
5126set TestRegexp(pdigitc)  {\D};
5127
5128set TestData(pdigitdbc) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5129set Intended(pdigitdbc) "A\n:\nB\nb\n?\n\023";
5130set TestRegexp(pdigitdbc)  {\\D};
5131
5132set TestData(xdigit) "5A\n5B\n5C\n5D\n5E\n5F\n5a\n5b\n5c\n5d\n5e\n5f\n51\n52\n53\n54\n55\n56\n57\n58\n59\n50\n5j\n5k\n5;\n5?";
5133set Intended(xdigit) "5A\n5B\n5C\n5D\n5E\n5F\n5a\n5b\n5c\n5d\n5e\n5f\n51\n52\n53\n54\n55\n56\n57\n58\n59\n50";
5134set TestRegexp(xdigit) {5[[:xdigit:]]};
5135
5136set TestData(xdigitrebol) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5137set Intended(xdigitrebol) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5138set TestRegexp(xdigitrebol) { [xdigit]};
5139
5140set TestData(lxdigit) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5141set Intended(lxdigit) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5142set TestRegexp(lxdigit) {%x};
5143
5144set TestData(lxdigitc) "g\na\n:\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nk\n?\023";
5145set Intended(lxdigitc) "g\n:\nk\n?\023";
5146set TestRegexp(lxdigitc) {%X};
5147
5148set TestData(xdigitBSx) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5149set Intended(xdigitBSx) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5150set TestRegexp(xdigitBSx) {\x};
5151
5152set TestData(xdigitBSxc) "g\na\n:\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nk";
5153set Intended(xdigitBSxc) "g\n:\nk";
5154set TestRegexp(xdigitBSxc) {\X};
5155
5156set TestData(odigitBSo) "A\nd\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5157set Intended(odigitBSo) "1\n2\n3\n4\n5\n6\n7\n0";
5158set TestRegexp(odigitBSo) {\o};
5159
5160set TestData(odigitBSOc) "A\nd\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5161set Intended(odigitBSOc) "A\nd\n8\n9\nj\nk\n;\n?";
5162set TestRegexp(odigitBSOc) {\O};
5163
5164set TestData(UpperCaseBSu) "A\nB\na\nc\n4\n,";
5165set Intended(UpperCaseBSu) "A\nB";
5166set TestRegexp(UpperCaseBSu) {\u}
5167
5168set TestData(UpperCaseBSUc) "A\nB\na\nc\n4\n,";
5169set Intended(UpperCaseBSUc) "a\nc\n4\n,";
5170set TestRegexp(UpperCaseBSUc) {\U}
5171
5172set TestData(LowerCaseBSl) "A\nB\na\nc\n4\n,";
5173set Intended(LowerCaseBSl) "a\nc";
5174set TestRegexp(LowerCaseBSl) {\l}
5175
5176set TestData(LowerCaseBSLc) "A\nB\na\nc\n4\n,";
5177set Intended(LowerCaseBSLc) "A\nB\n4\n,";
5178set TestRegexp(LowerCaseBSLc) {\L}
5179
5180set TestData(octal) "m\na\n155\n";
5181set Intended(octal) "m";
5182set TestRegexp(octal) {\155};
5183
5184set TestData(octaldb) "m\na\n155\n";
5185set Intended(octaldb) "m";
5186set TestRegexp(octaldb) {\\155};
5187
5188set TestData(octalo) "m\na\no155\n";
5189set Intended(octalo) "m";
5190set TestRegexp(octalo) {\o155};
5191
5192set TestData(decimald) "m\na\nd109\n";
5193set Intended(decimald) "m";
5194set TestRegexp(decimald) {\d109};
5195
5196set TestData(hexl) "m\na\nx6e";
5197set Intended(hexl) "m";
5198set TestRegexp(hexl) {\x6d};
5199
5200set TestData(hexldb) "m\na\nx6e";
5201set Intended(hexldb) "m";
5202set TestRegexp(hexldb) {\\x6d};
5203
5204set TestData(hexu) "m\na\nx6E";
5205set Intended(hexu) "m";
5206set TestRegexp(hexu) {\x6D};
5207
5208set TestData(hexudb) "m\na\nx6E";
5209set Intended(hexudb) "m";
5210set TestRegexp(hexudb) {\\x6D};
5211
5212set TestData(HexWideCharCurly)     "\u1234\n\\x\{1234\}"
5213set Intended(HexWideCharCurly)     "\u1234"
5214set TestRegexp(HexWideCharCurly)   "\\x\{1234\}"
5215
5216set TestData(HTMLHexReference)     "\u1234\n\\x\{1234\}"
5217set Intended(HTMLHexReference)     "\u1234"
5218set TestRegexp(HTMLHexReference)   {&#x1234;}
5219
5220set TestData(HTMLDecimalReference)     "\u1234\n\\x\{1234\}"
5221set Intended(HTMLDecimalReference)     "\u1234"
5222set TestRegexp(HTMLDecimalReference)   {&#4660;}
5223
5224set TestData(tab) "ZmZ\ZnaZ\nZ\tZ";
5225set Intended(tab) "Z\tZ";
5226set TestRegexp(tab) {Z\tZ};
5227
5228set TestData(tabdb) "ZmZ\ZnaZ\nZ\tZ";
5229set Intended(tabdb) "Z\tZ";
5230set TestRegexp(tabdb) {\\t};
5231
5232set TestData(TabClass) "ZmZ\nZaZ\nZ\tZ";
5233set Intended(TabClass) "Z\tZ";
5234set TestRegexp(TabClass) {Z[[:tab:]]Z};
5235
5236set TestData(EscapeClass) "ZmZ\nZaZ\nZ\u001BZ";
5237set Intended(EscapeClass) "Z\u001BZ";
5238set TestRegexp(EscapeClass) {Z[[:escape:]]Z};
5239
5240set TestData(BackspaceClass) "ZmZ\nZaZ\nZ\u0008Z";
5241set Intended(BackspaceClass) "Z\u0008Z"
5242set TestRegexp(BackspaceClass) {Z[[:backspace:]]Z};
5243
5244set TestData(escape) "m\na\n\033";
5245set Intended(escape) "\033";
5246set TestRegexp(escape) {\e};
5247
5248set TestData(escapedb) "m\na\n\033";
5249set Intended(escapedb) "\033";
5250set TestRegexp(escapedb) {\\e};
5251
5252set TestData(bell) "m\na\n\007";
5253set Intended(bell) "\007";
5254set TestRegexp(bell) {\a};
5255
5256set TestData(belldb) "m\na\n\007";
5257set Intended(belldb) "\007";
5258set TestRegexp(belldb) {\\a};
5259
5260set TestData(backspace) "\u0008\nb\n\\b";
5261set Intended(backspace) "\u0008";
5262set TestRegexp(backspace) {\b};
5263
5264set TestData(cr) "m\na\n\r";
5265set Intended(cr) "\r";
5266set TestRegexp(cr) {\r};
5267
5268set TestData(crdb) "m\na\n\r";
5269set Intended(crdb) "\r";
5270set TestRegexp(crdb) {\\r};
5271
5272set TestData(unicodebmp) "AaZ\nbac\nA\u4E09\u58EBZ\nA\u4E09Z\nA\u58EBZ\nA\u10024Z";
5273set Intended(unicodebmp) "AaZ\nA\u4E09Z\nA\u58EBZ";
5274set TestRegexp(unicodebmp) {A.Z};
5275
5276set TestData(unicodefull) "AaZ\nbac\nA\u4E09\u58EBZ\nA\u4E09Z\nA\u58EBZ\nA\u10024Z";
5277set Intended(unicodefull) "AaZ\nA\u4E09Z\nA\u58EBZ\nA\u10024Z";
5278set TestRegexp(unicodefull) {A.Z};
5279
5280set TestData(controlc) "m\na\n\007";
5281set Intended(controlc) "\007";
5282set TestRegexp(controlc) {\cG};
5283
5284set TestData(controlcdb)   "m\na\n\007";
5285set Intended(controlcdb)   "\007";
5286set TestRegexp(controlcdb) {\\cG};
5287
5288set TestData(some) "a\nab\naa\nb\nba\naba\nc\nabc\naab\naaab";
5289set Intended(some) "ab\naab\naaab";
5290set TestRegexp(some) {[some "a" "b"]};
5291
5292set TestData(any)  "a\nab\naa\nb\nba\naba\nc\nabc\naab\naaab";
5293set Intended(any)  "ab\nb\naab\naaab";
5294set TestRegexp(any) {[any "a" "b"]};
5295
5296set TestData(rangerebol) "a\naa\naaa\naaaa\nb\nbb\nab\nba\nc";
5297set Intended(rangerebol) "a\naa\naaa";
5298set TestRegexp(rangerebol) {[1 3 "a"]};
5299
5300set TestData(QuoteFollowingMetacharsQDot)    "...\nabc"
5301set Intended(QuoteFollowingMetacharsQDot)    "..."
5302set TestRegexp(QuoteFollowingMetacharsQDot)  {\Q...};
5303
5304set TestData(QuoteFollowingMetacharsMDot)    "...\nabc"
5305set Intended(QuoteFollowingMetacharsMDot)    "..."
5306set TestRegexp(QuoteFollowingMetacharsMDot)  {\M...};
5307
5308#Perl
5309set TestData(TerminateMetacharQuotingDot)    "......\nabcdef\nabc...\n...abc"
5310set Intended(TerminateMetacharQuotingDot)    "......\n...abc"
5311set TestRegexp(TerminateMetacharQuotingDot)  {\Q...\E...};
5312
5313#Vim
5314set TestData(ShiftBackToMagicDot)    "......\nabcdef\nabc...\n...abc"
5315set Intended(ShiftBackToMagicDot)    "......\n...abc"
5316set TestRegexp(ShiftBackToMagicDot)  {\M...\m...};
5317
5318#Test for inline comment
5319set TestData(comment) "ab\nafoob\na?\#foob\na(?\#foo)b";
5320set Intended(comment) "ab";
5321set TestRegexp(comment) {a(?#foo)b};
5322
5323#Probably should have multiple tests here as for (?i)
5324#set TestData(CaseInsensitiveBSSmallC) "aB\nAb\nAB\nab"
5325#set Intended(CaseInsensitiveBSSmallC) "aB\nAb\nAB\nab"
5326#set TestRegexp(CaseInsensitiveBSSmallC) {\caB}
5327
5328#Tests for inline case-insensitive flag \c
5329
5330set TestData(CaseInsensitiveBSSmallCAsciiLiteral) "aB\nAb\nAB\nab"
5331set Intended(CaseInsensitiveBSSmallCAsciiLiteral) "aB\nAb\nAB\nab"
5332set TestRegexp(CaseInsensitiveBSSmallCAsciiLiteral) {\caB}
5333
5334set TestData(CaseInsensitiveBSSmallCNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5335set Intended(CaseInsensitiveBSSmallCNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5336set TestRegexp(CaseInsensitiveBSSmallCNonAsciiLiteral) "\\c\u0531\u0561"
5337
5338set TestData(CaseInsensitiveBSSmallCAsciiClass) "a\nA"
5339set Intended(CaseInsensitiveBSSmallCAsciiClass) "a\nA"
5340set TestRegexp(CaseInsensitiveBSSmallCAsciiClass) {\c[[:lower:]]};
5341
5342set TestData(CaseInsensitiveBSSmallCNonAsciiClass) "\u0561\n\u0531"
5343set Intended(CaseInsensitiveBSSmallCNonAsciiClass) "\u0561\n\u0531"
5344set TestRegexp(CaseInsensitiveBSSmallCNonAsciiClass) {\c[[:lower:]]};
5345
5346set TestData(CaseInsensitiveBSSmallCAsciiClassSymmetric) "aB\nAB\nab";
5347set Intended(CaseInsensitiveBSSmallCAsciiClassSymmetric) "aB\nAB\nab";
5348set TestRegexp(CaseInsensitiveBSSmallCAsciiClassSymmetric) {\c[[:lower:]][[:upper:]]};
5349
5350set TestData(CaseInsensitiveBSSmallCNonAsciiClassSymmetric) \
5351    "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5352set Intended(CaseInsensitiveBSSmallCNonAsciiClassSymmetric) \
5353    "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5354set TestRegexp(CaseInsensitiveBSSmallCNonAsciiClassSymmetric) \
5355    {\c[[:lower:]][[:upper:]]};
5356
5357set TestData(CaseInsensitiveBSSmallCOctal) "b\nB\nk"
5358set Intended(CaseInsensitiveBSSmallCOctal) "b\nB"
5359set TestRegexp(CaseInsensitiveBSSmallCOctal) {\c\142}
5360
5361set TestData(CaseInsensitiveBSSmallCHex) "b\nB\nk"
5362set Intended(CaseInsensitiveBSSmallCHex) "b\nB"
5363set TestRegexp(CaseInsensitiveBSSmallCHex) {\c\x62}
5364
5365#Tests for inline case-insensitive flag (?i)
5366
5367set TestData(CaseInsensitiveFlagSmallIAsciiLiteral) "aB\nAb\nAB\nab"
5368set Intended(CaseInsensitiveFlagSmallIAsciiLiteral) "aB\nAb\nAB\nab"
5369set TestRegexp(CaseInsensitiveFlagSmallIAsciiLiteral) {(?i)aB}
5370
5371set TestData(flagCrosshatchICaseSensitive) "ab\nAb\naB\nAB"
5372set Intended(flagCrosshatchICaseSensitive) "ab\nAb"
5373set TestRegexp(flagCrosshatchICaseSensitive) {(#i)a(#I)b}
5374
5375set TestData(CaseInsensitiveFlagSmallINonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5376set Intended(CaseInsensitiveFlagSmallINonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5377set TestRegexp(CaseInsensitiveFlagSmallINonAsciiLiteral) "(?i)\u0531\u0561"
5378
5379set TestData(CaseInsensitiveFlagSmallIAsciiClass) "a\nA"
5380set Intended(CaseInsensitiveFlagSmallIAsciiClass) "a\nA"
5381set TestRegexp(CaseInsensitiveFlagSmallIAsciiClass) {(?i)[[:lower:]]};
5382
5383set TestData(CaseInsensitiveFlagSmallINonAsciiClass) "\u0561\n\u0531"
5384set Intended(CaseInsensitiveFlagSmallINonAsciiClass) "\u0561\n\u0531"
5385set TestRegexp(CaseInsensitiveFlagSmallINonAsciiClass) {(?i)[[:lower:]]};
5386
5387set TestData(CaseInsensitiveFlagSmallIAsciiClassSymmetric) "aB\nAB\nab";
5388set Intended(CaseInsensitiveFlagSmallIAsciiClassSymmetric) "aB\nAB\nab";
5389set TestRegexp(CaseInsensitiveFlagSmallIAsciiClassSymmetric) {(?i)[[:lower:]][[:upper:]]};
5390
5391set TestData(CaseInsensitiveFlagSmallINonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5392set Intended(CaseInsensitiveFlagSmallINonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5393set TestRegexp(CaseInsensitiveFlagSmallINonAsciiClassSymmetric) {(?i)[[:lower:]][[:upper:]]};
5394
5395set TestData(CaseInsensitiveFlagSmallIuNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5396set Intended(CaseInsensitiveFlagSmallIuNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5397set TestRegexp(CaseInsensitiveFlagSmallIuNonAsciiLiteral) "(?iu)\u0531\u0561"
5398
5399set TestData(CaseInsensitiveFlagSmallIuNonAsciiClass) "\u0561\n\u0531"
5400set Intended(CaseInsensitiveFlagSmallIuNonAsciiClass) "\u0561\n\u0531"
5401set TestRegexp(CaseInsensitiveFlagSmallIuNonAsciiClass) {(?iu)[[:lower:]]};
5402
5403set TestData(CaseInsensitiveFlagSmallIuNonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5404set Intended(CaseInsensitiveFlagSmallIuNonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5405set TestRegexp(CaseInsensitiveFlagSmallIuNonAsciiClassSymmetric) {(?iu)[[:lower:]][[:upper:]]};
5406
5407#Test whether inline case-insensitive flag applies to octal escapes (it doesn't in Ruby).
5408set TestData(CaseInsensitiveFlagSmallIOctal) "b\nB\nk"
5409set Intended(CaseInsensitiveFlagSmallIOctal) "b\nB"
5410set TestRegexp(CaseInsensitiveFlagSmallIOctal) {(?i)\142}
5411
5412#Test whether inline case-insensitive flag applies to hex escapes (it doesn't in Ruby).
5413set TestData(CaseInsensitiveFlagSmallIHex) "b\nB\nk"
5414set Intended(CaseInsensitiveFlagSmallIHex) "b\nB"
5415set TestRegexp(CaseInsensitiveFlagSmallIHex) {(?i)\x62}
5416
5417#Tests for inline case-insensitive flag (#i)
5418
5419set TestData(CaseInsensitiveCrosshatchAsciiLiteral) "aB\nAb\nAB\nab"
5420set Intended(CaseInsensitiveCrosshatchAsciiLiteral) "aB\nAb\nAB\nab"
5421set TestRegexp(CaseInsensitiveCrosshatchAsciiLiteral) {(#i)aB}
5422
5423set TestData(CaseInsensitiveCrosshatchNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5424set Intended(CaseInsensitiveCrosshatchNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5425set TestRegexp(CaseInsensitiveCrosshatchNonAsciiLiteral) "(#i)\u0531\u0561"
5426
5427set TestData(CaseInsensitiveCrosshatchAsciiClass) "a\nA"
5428set Intended(CaseInsensitiveCrosshatchAsciiClass) "a\nA"
5429set TestRegexp(CaseInsensitiveCrosshatchAsciiClass) {(#i)[[:lower:]]};
5430
5431set TestData(CaseInsensitiveCrosshatchNonAsciiClass) "\u0561\n\u0531"
5432set Intended(CaseInsensitiveCrosshatchNonAsciiClass) "\u0561\n\u0531"
5433set TestRegexp(CaseInsensitiveCrosshatchNonAsciiClass) {(#i)[[:lower:]]};
5434
5435set TestData(CaseInsensitiveCrosshatchAsciiClassSymmetric) "aB\nAB\nab";
5436set Intended(CaseInsensitiveCrosshatchAsciiClassSymmetric) "aB\nAB\nab";
5437set TestRegexp(CaseInsensitiveCrosshatchAsciiClassSymmetric) {(#i)[[:lower:]][[:upper:]]};
5438
5439set TestData(CaseInsensitiveCrosshatchNonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5440set Intended(CaseInsensitiveCrosshatchNonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5441set TestRegexp(CaseInsensitiveCrosshatchNonAsciiClassSymmetric) {(#i)[[:lower:]][[:upper:]]};
5442
5443set TestData(CaseInsensitiveCrosshatchuNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5444set Intended(CaseInsensitiveCrosshatchuNonAsciiLiteral) "\u0531\u0561\n\u0531\u0531"
5445set TestRegexp(CaseInsensitiveCrosshatchuNonAsciiLiteral) "(#iu)\u0531\u0561"
5446
5447set TestData(CaseInsensitiveCrosshatchuNonAsciiClass) "\u0561\n\u0531"
5448set Intended(CaseInsensitiveCrosshatchuNonAsciiClass) "\u0561\n\u0531"
5449set TestRegexp(CaseInsensitiveCrosshatchuNonAsciiClass) {(#iu)[[:lower:]]};
5450
5451set TestData(CaseInsensitiveCrosshatchuNonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5452set Intended(CaseInsensitiveCrosshatchuNonAsciiClassSymmetric) "\u0561\u0531\n\u0531\u0531\n\u0561\u0561";
5453set TestRegexp(CaseInsensitiveCrosshatchuNonAsciiClassSymmetric) {(#iu)[[:lower:]][[:upper:]]};
5454
5455set TestData(flagCrosshatchlAsymmetricCaseInsensitive) "aB\nAB\nab\nAb"
5456set Intended(flagCrosshatchlAsymmetricCaseInsensitive) "aB\nAB"
5457set TestRegexp(flagCrosshatchlAsymmetricCaseInsensitive) {(#l)aB}
5458
5459set TestData(CaseInsensitiveCrosshatchOctal) "b\nB\nk"
5460set Intended(CaseInsensitiveCrosshatchOctal) "b\nB"
5461set TestRegexp(CaseInsensitiveCrosshatchOctal) {(#i)\142}
5462
5463set TestData(CaseInsensitiveCrosshatchHex) "b\nB\nk"
5464set Intended(CaseInsensitiveCrosshatchHex) "b\nB"
5465set TestRegexp(CaseInsensitiveCrosshatchHex) {(#i)\x62}
5466
5467#Other flags
5468set TestData(flagx) "abc\na\tb c\na b c\na2b\nab c\nab c\#foo";
5469set Intended(flagx) {ab c};
5470set TestRegexp(flagx) {(?x)^a b\ c$#foo};
5471
5472set TestData(flagq) "a*b\naab\nacb";
5473set Intended(flagq) {a*b};
5474set TestRegexp(flagq) {(?q)a*b};
5475
5476set TestData(flagb) "t\n\u0009";
5477set Intended(flagb) "t";
5478set TestRegexp(flagb) {(?b)\t};
5479
5480set TestData(flage) "xy\nab"
5481set Intended(flage) "xy";
5482set TestRegexp(flage) {(?e)xy};
5483
5484set TestData(UnsetFlag) "AA\naA\nAa\naa";
5485set Intended(UnsetFlag) "AA\naA";
5486set TestRegexp(UnsetFlag) {(?i)a(?-i)A}
5487
5488set TestData(IgnoreCombiningCharactersBSZ) "\u0065\n\u0065\u0301\n\u00e9\n\u0064"
5489set Intended(IgnoreCombiningCharactersBSZ) "\u0065\n\u0065\u0301"
5490set TestRegexp(IgnoreCombiningCharactersBSZ) {\Ze}
5491
5492#This can only be tested with a global case-insensitive setting.
5493set TestData(CaseSensitiveFlag) "aB\nAB\nab\nAb"
5494set Intended(CaseSensitiveFlag) "aB"
5495set TestRegexp(CaseSensitiveFlag) {(?c)aB}
5496
5497#This can only be tested with a global case-insensitive setting.
5498set TestData(CaseSensitiveBSBigC) "aB\nAB\nab\nAb"
5499set Intended(CaseSensitiveBSBigC) "aB"
5500set TestRegexp(CaseSensitiveBSBigC) {\CaB}
5501
5502set TestData(FlagQWideScope) "AA\naA\nAa\naa";
5503set Intended(FlagQWideScope) "AA\naA\nAa\naa";
5504set TestRegexp(FlagQWideScope) {a(?i)A}
5505
5506set TestData(FlagBSSmallCWideScope) "AA\naA\nAa\naa";
5507set Intended(FlagBSSmallCWideScope) "AA\naA\nAa\naa";
5508set TestRegexp(FlagBSSmallCWideScope) {a\cA}
5509
5510set TestData(FlagCrosshatchWideScope) "AA\naA\nAa\naa";
5511set Intended(FlagCrosshatchWideScope) "AA\naA\nAa\naa";
5512set TestRegexp(FlagCrosshatchWideScope) {a(#i)A}
5513
5514#Test whether the case-insensitive command line flag applies to backreferences.
5515#(It doesn't in egrep.)
5516#This test requires the command-line CI flag to be set.
5517set TestData(CaseInsensitiveCLFlagBackrefP) "cabncab\ncabnCAB\nCABncab\nCABnCAB\ncabncb"
5518set Intended(CaseInsensitiveCLFlagBackrefP) "cabncab\ncabnCAB\nCABncab\nCABnCAB"
5519set TestRegexp(CaseInsensitiveCLFlagBackrefP) {(cab)n\1}
5520
5521set TestData(taggedgroup) "xyyyx\nxxyyyxx\nxxxyyyxxx\nxyyyxx\nxyx";
5522set Intended(taggedgroup) "xyyyx\nxxyyyxx\nxxxyyyxxx";
5523set TestRegexp(taggedgroup) {^(?P<exes>x+)yyy(?P=exes)$};
5524
5525set TestData(taggedgroupsq) "xyyyx\nxxyyyxx\nxxxyyyxxx\nxyyyxx\nxyx";
5526set Intended(taggedgroupsq) "xyyyx\nxxyyyxx\nxxxyyyxxx";
5527set TestRegexp(taggedgroupsq) {^(?P'exes'x+)yyy(?P=exes)$};
5528
5529set TestData(uname) "x\u05DCy";
5530set Intended(uname) "x\u05DCy";
5531set TestRegexp(uname) {x\N{HEBREW LETTER LAMED}y};
5532
5533set TestData(unamedb)   "x\u05DCy";
5534set Intended(unamedb)   "x\u05DCy";
5535set TestRegexp(unamedb) {x\\N{HEBREW LETTER LAMED}y};
5536
5537set TestData(jLower) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
5538set Intended(jLower) "AaZ\nAcZ";
5539set TestRegexp(jLower)   {A\p{Lower}Z};
5540
5541set TestData(jLowerdb)     "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
5542set Intended(jLowerdb)     "AaZ\nAcZ";
5543set TestRegexp(jLowerdb)   {A\\p{Lower}Z};
5544
5545set TestData(jLowerc) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
5546set Intended(jLowerc) "ABZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
5547set TestRegexp(jLowerc)   {A\P{Lower}Z};
5548
5549set TestData(jLowercdb) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
5550set Intended(jLowercdb) "ABZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
5551set TestRegexp(jLowercdb)   {A\\P{Lower}Z};
5552
5553set TestData(jUpper)    "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
5554set Intended(jUpper)    "aBz\naZz";
5555set TestRegexp(jUpper)  {a\p{Upper}z};
5556
5557set TestData(jUpperdb)   "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
5558set Intended(jUpperdb)   "aBz\naZz";
5559set TestRegexp(jUpperdb) {a\\p{Upper}z};
5560
5561set TestData(jUpperc)     "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
5562set Intended(jUpperc)     "aaz\nacz\na+z\na4z\na:z\na?z";
5563set TestRegexp(jUpperc)   {a\P{Upper}z};
5564
5565set TestData(jUppercdb)     "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
5566set Intended(jUppercdb)     "aaz\nacz\na+z\na4z\na:z\na?z";
5567set TestRegexp(jUppercdb)   {a\\P{Upper}z};
5568
5569set TestData(jAscii)     "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z\na\tz\na\222z";
5570set Intended(jAscii)     "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z\na\tz";
5571set TestRegexp(jAscii)   {a\p{ASCII}z};
5572
5573set TestData(jAsciidb)    "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z\na\tz\na\222z";
5574set Intended(jAsciidb)    "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z\na\tz";
5575set TestRegexp(jAsciidb)  {a\\p{ASCII}z};
5576
5577set TestData(jAsciic)     "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z\na\tz\na\222z";
5578set Intended(jAsciic)     "a\222z";
5579set TestRegexp(jAsciic)   {a\P{ASCII}z};
5580
5581set TestData(jAsciicdb)    "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z\na\tz\na\222z";
5582set Intended(jAsciicdb)    "a\222z";
5583set TestRegexp(jAsciicdb)  {a\\P{ASCII}z};
5584
5585set TestData(jAlpha) "a\nB\nc\nZ\n+\n4\n:\n?";
5586set Intended(jAlpha) "a\nB\nc\nZ";
5587set TestRegexp(jAlpha)  {\p{Alpha}};
5588
5589set TestData(jAlphadb)    "a\nB\nc\nZ\n+\n4\n:\n?";
5590set Intended(jAlphadb)    "a\nB\nc\nZ";
5591set TestRegexp(jAlphadb)  {\\p{Alpha}};
5592
5593set TestData(jAlphac)    "a\nB\nc\nZ\n+\n4\n:\n?";
5594set Intended(jAlphac)    "+\n4\n:\n?";
5595set TestRegexp(jAlphac)  {\P{Alpha}};
5596
5597set TestData(jAlphacdb)    "a\nB\nc\nZ\n+\n4\n:\n?";
5598set Intended(jAlphacdb)    "+\n4\n:\n?";
5599set TestRegexp(jAlphacdb)  {\\P{Alpha}};
5600
5601set TestData(jDigit) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5602set Intended(jDigit) "1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5603set TestRegexp(jDigit)  {\p{Digit}};
5604
5605set TestData(jDigitdb) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5606set Intended(jDigitdb) "1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5607set TestRegexp(jDigitdb)  {\\p{Digit}};
5608
5609set TestData(jDigitc) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5610set Intended(jDigitc) "A\n:\nB\nb\n?\n\023";
5611set TestRegexp(jDigitc) {\P{Digit}};
5612
5613set TestData(jDigitcdb) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?\n\023";
5614set Intended(jDigitcdb) "A\n:\nB\nb\n?\n\023";
5615set TestRegexp(jDigitcdb) {\\P{Digit}};
5616
5617set TestData(jXdigit) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5618set Intended(jXdigit) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5619set TestRegexp(jXdigit) {\p{XDigit}};
5620
5621set TestData(jXdigitdb)   "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5622set Intended(jXdigitdb)   "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0";
5623set TestRegexp(jXdigitdb) {\\p{XDigit}};
5624
5625set TestData(jXdigitc)  "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5626set Intended(jXdigitc)  "j\nk\n;\n?";
5627set TestRegexp(jXdigitc) {\P{XDigit}};
5628
5629set TestData(jXdigitcdb)  "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
5630set Intended(jXdigitcdb)  "j\nk\n;\n?";
5631set TestRegexp(jXdigitcdb) {\\P{XDigit}};
5632
5633set TestData(jAlnum) "a\nB\nc\nZ\n+\n4\n:\n?\n_";
5634set Intended(jAlnum) "a\nB\nc\nZ\n4";
5635set TestRegexp(jAlnum)   {\p{Alnum}};
5636
5637set TestData(jAlnumdb) "a\nB\nc\nZ\n+\n4\n:\n?\n_";
5638set Intended(jAlnumdb) "a\nB\nc\nZ\n4";
5639set TestRegexp(jAlnumdb)   {\\p{Alnum}};
5640
5641set TestData(jAlnumc) "a\nB\nc\nZ\n+\n4\n:\n?\n_";
5642set Intended(jAlnumc) "+\n:\n?\n_";
5643set TestRegexp(jAlnumc)   {\P{Alnum}};
5644
5645set TestData(jAlnumcdb) "a\nB\nc\nZ\n+\n4\n:\n?\n_";
5646set Intended(jAlnumcdb) "+\n:\n?\n_";
5647set TestRegexp(jAlnumcdb)   {\\P{Alnum}};
5648
5649set TestData(jPunct) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5650set Intended(jPunct) "a:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5651set TestRegexp(jPunct)   {a\p{Punct}z};
5652
5653set TestData(jPunctdb)    "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5654set Intended(jPunctdb)    "a:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
5655set TestRegexp(jPunctdb)  {a\\p{Punct}z};
5656
5657set TestData(jPunctc) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z\na\040z";
5658set Intended(jPunctc) "aaz\naBz\nacz\naZz\na4z\na\040z";
5659set TestRegexp(jPunctc)   {a\P{Punct}z};
5660
5661set TestData(jPunctcdb) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z\na\040z";
5662set Intended(jPunctcdb) "aaz\naBz\nacz\naZz\na4z\na\040z";
5663set TestRegexp(jPunctcdb)   {a\\P{Punct}z};
5664
5665set TestData(jGraph) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5666set Intended(jGraph) "aab\naAb\na4b\na:b";
5667set TestRegexp(jGraph)   {a\p{Graph}b};
5668
5669set TestData(jGraphdb) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5670set Intended(jGraphdb) "aab\naAb\na4b\na:b";
5671set TestRegexp(jGraphdb)   {a\\p{Graph}b};
5672
5673set TestData(jGraphc) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5674set Intended(jGraphc) "a\040b\na\011b\na\023b";
5675set TestRegexp(jGraphc)   {a\P{Graph}b};
5676
5677set TestData(jGraphcdb) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5678set Intended(jGraphcdb) "a\040b\na\011b\na\023b";
5679set TestRegexp(jGraphcdb)   {a\\P{Graph}b};
5680
5681set TestData(jPrint) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5682set Intended(jPrint) "aab\naAb\na4b\na:b\na\040b";
5683set TestRegexp(jPrint)   {a\p{Print}b};
5684
5685set TestData(jPrintdb) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5686set Intended(jPrintdb) "aab\naAb\na4b\na:b\na\040b";
5687set TestRegexp(jPrintdb)   {a\\p{Print}b};
5688
5689set TestData(jPrintc) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5690set Intended(jPrintc) "a\011b\na\023b";
5691set TestRegexp(jPrintc)   {a\P{Print}b};
5692
5693set TestData(jPrintcdb) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
5694set Intended(jPrintcdb) "a\011b\na\023b";
5695set TestRegexp(jPrintcdb)   {a\\P{Print}b};
5696
5697set TestData(jBlank) "a\040b\na\011b\nacb\na:b";
5698set Intended(jBlank) "a\040b\na\011b";
5699set TestRegexp(jBlank)   {a\p{Blank}b};
5700
5701set TestData(jBlankdb) "a\040b\na\011b\nacb\na:b";
5702set Intended(jBlankdb) "a\040b\na\011b";
5703set TestRegexp(jBlankdb)   {a\\p{Blank}b};
5704
5705set TestData(jBlankc) "a\040b\na\011b\nacb\na:b";
5706set Intended(jBlankc) "acb\na:b";
5707set TestRegexp(jBlankc)   {a\P{Blank}b};
5708
5709set TestData(jBlankcdb) "a\040b\na\011b\nacb\na:b";
5710set Intended(jBlankcdb) "acb\na:b";
5711set TestRegexp(jBlankcdb)   {a\\P{Blank}b};
5712
5713set TestData(jSpace) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5714set Intended(jSpace) "a\040b\na\014b\na\011b\na\013b";
5715set TestRegexp(jSpace)  {a\p{Space}b};
5716
5717set TestData(jSpacedb) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5718set Intended(jSpacedb) "a\040b\na\014b\na\011b\na\013b";
5719set TestRegexp(jSpacedb)  {a\\p{Space}b};
5720
5721set TestData(jSpacec) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5722set Intended(jSpacec) "a4b\na:b\nacb";
5723set TestRegexp(jSpacec)  {a\P{Space}b};
5724
5725set TestData(jSpacecdb) "a\040b\na\014b\na\011b\na\013b\na4b\na:b\nacb";
5726set Intended(jSpacecdb) "a4b\na:b\nacb";
5727set TestRegexp(jSpacecdb)  {a\\P{Space}b};
5728
5729set TestData(jCntrl) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5730set Intended(jCntrl) "a\011b\na\023b\na\177b";
5731set TestRegexp(jCntrl)   {a\p{Cntrl}b};
5732
5733set TestData(jCntrldb) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5734set Intended(jCntrldb) "a\011b\na\023b\na\177b";
5735set TestRegexp(jCntrldb)   {a\\p{Cntrl}b};
5736
5737set TestData(jCntrlc) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5738set Intended(jCntrlc) "aab\naAb\na4b\na:b\na\040b";
5739set TestRegexp(jCntrlc)   {a\P{Cntrl}b};
5740
5741set TestData(jCntrlcdb) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b\na\177b";
5742set Intended(jCntrlcdb) "aab\naAb\na4b\na:b\na\040b";
5743set TestRegexp(jCntrlcdb)   {a\\P{Cntrl}b};
5744
5745#Java Unicode range
5746set TestData(jUBlockIn)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5747set Intended(jUBlockIn)  "a\u3042b\na\u3057b\na\u309db";
5748set TestRegexp(jUBlockIn)   {a\p{InHiragana}b};
5749
5750#Java Unicode range - double backslash
5751set TestData(jUBlockIndb)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5752set Intended(jUBlockIndb)  "a\u3042b\na\u3057b\na\u309db";
5753set TestRegexp(jUBlockIndb)   {a\\p{InHiragana}b};
5754
5755#Java Unicode range - complement
5756set TestData(jUBlockInc)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5757set Intended(jUBlockInc)   "aXb\na7b\na:b\na\u0B86b";
5758set TestRegexp(jUBlockInc)   {a\P{InHiragana}b};
5759
5760#Java Unicode range - complement -db
5761set TestData(jUBlockIncdb)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5762set Intended(jUBlockIncdb)   "aXb\na7b\na:b\na\u0B86b";
5763set TestRegexp(jUBlockIncdb)   {a\\P{InHiragana}b};
5764
5765
5766#Java-style s-variant range
5767set TestData(jUBlockIs)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5768set Intended(jUBlockIs)  "a\u3042b\na\u3057b\na\u309db";
5769set TestRegexp(jUBlockIs)   {a\p{IsHiragana}b};
5770
5771#Java-style s-variant range - double backslash
5772set TestData(jUBlockIsdb)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5773set Intended(jUBlockIsdb)  "a\u3042b\na\u3057b\na\u309db";
5774set TestRegexp(jUBlockIsdb)   {a\\p{IsHiragana}b};
5775
5776#Java-style s-variant range - complement
5777set TestData(jUBlockIsc)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5778set Intended(jUBlockIsc)   "aXb\na7b\na:b\na\u0B86b";
5779set TestRegexp(jUBlockIsc)   {a\P{IsHiragana}b};
5780
5781#Java-style s-variant range - complement -db
5782set TestData(jUBlockIscdb)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5783set Intended(jUBlockIscdb)   "aXb\na7b\na:b\na\u0B86b";
5784set TestRegexp(jUBlockIscdb)   {a\\P{IsHiragana}b};
5785
5786#Unicode range - bare
5787set TestData(jUBlockBare)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5788set Intended(jUBlockBare)  "a\u3042b\na\u3057b\na\u309db";
5789set TestRegexp(jUBlockBare)   {a\p{Hiragana}b};
5790
5791#Unicode range - double backslash
5792set TestData(jUBlockBaredb)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5793set Intended(jUBlockBaredb)  "a\u3042b\na\u3057b\na\u309db";
5794set TestRegexp(jUBlockBaredb)   {a\\p{Hiragana}b};
5795
5796#Unicode range - complement
5797set TestData(jUBlockBarec)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5798set Intended(jUBlockBarec)   "aXb\na7b\na:b\na\u0B86b";
5799set TestRegexp(jUBlockBarec)   {a\P{Hiragana}b};
5800
5801#Unicode range - complement -db
5802set TestData(jUBlockBarecdb)  "a\u3042b\na\u3057b\na\u309db\naXb\na7b\na:b\na\u0B86b";
5803set Intended(jUBlockBarecdb)   "aXb\na7b\na:b\na\u0B86b";
5804set TestRegexp(jUBlockBarecdb)   {a\\P{Hiragana}b};
5805
5806#Java Unicode general character property
5807set TestData(jUCat) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5808set Intended(jUCat) "a+b\na\u00ACb\na\u2044b";
5809set TestRegexp(jUCat)   {a\p{Sm}b};
5810
5811#Java Unicode general character property -db
5812set TestData(jUCatdb) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5813set Intended(jUCatdb) "a+b\na\u00ACb\na\u2044b";
5814set TestRegexp(jUCatdb)   {a\\p{Sm}b};
5815
5816#Java Unicode general character property - complement
5817set TestData(jUCatc) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5818set Intended(jUCatc) "a\u3042b\naXb\na7b\na:b\na\u0B86b";
5819set TestRegexp(jUCatc)   {a\P{Sm}b};
5820
5821#Java Unicode general character property - complement -db
5822set TestData(jUCatcdb) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5823set Intended(jUCatcdb) "a\u3042b\naXb\na7b\na:b\na\u0B86b";
5824set TestRegexp(jUCatcdb)   {a\\P{Sm}b};
5825
5826
5827#Java-style s-variant Unicode general character property
5828set TestData(jUCatIs) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5829set Intended(jUCatIs) "a+b\na\u00ACb\na\u2044b";
5830set TestRegexp(jUCatIs)   {a\p{IsSm}b};
5831
5832#Java-style s-variant Unicode general character property -db
5833set TestData(jUCatdbIs) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5834set Intended(jUCatdbIs) "a+b\na\u00ACb\na\u2044b";
5835set TestRegexp(jUCatdbIs)   {a\\p{IsSm}b};
5836
5837#Java-style s-variant Unicode general character property - complement
5838set TestData(jUCatcIs) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5839set Intended(jUCatcIs) "a\u3042b\naXb\na7b\na:b\na\u0B86b";
5840set TestRegexp(jUCatcIs)   {a\P{IsSm}b};
5841
5842#Java-style s-variant Unicode general character property - complement -db
5843set TestData(jUCatcdbIs) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5844set Intended(jUCatcdbIs) "a\u3042b\naXb\na7b\na:b\na\u0B86b";
5845set TestRegexp(jUCatcdbIs)   {a\\P{IsSm}b};
5846
5847
5848#Java-style n-variant Unicode general character property
5849set TestData(jUCatIn) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5850set Intended(jUCatIn) "a+b\na\u00ACb\na\u2044b";
5851set TestRegexp(jUCatIn)   {a\p{InSm}b};
5852
5853#Java-style n-variant Unicode general character property -db
5854set TestData(jUCatdbIn) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5855set Intended(jUCatdbIn) "a+b\na\u00ACb\na\u2044b";
5856set TestRegexp(jUCatdbIn)   {a\\p{InSm}b};
5857
5858#Java-style n-variant Unicode general character property - complement
5859set TestData(jUCatcIn) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5860set Intended(jUCatcIn) "a\u3042b\naXb\na7b\na:b\na\u0B86b";
5861set TestRegexp(jUCatcIn)   {a\P{InSm}b};
5862
5863#Java-style n-variant Unicode general character property - complement -db
5864set TestData(jUCatcdbIn) "a\u3042b\naXb\na7b\na:b\na\u0B86b\na+b\na\u00ACb\na\u2044b";
5865set Intended(jUCatcdbIn) "a\u3042b\naXb\na7b\na:b\na\u0B86b";
5866set TestRegexp(jUCatcdbIn)   {a\\P{InSm}b};
5867
5868
5869#Java character set union
5870set TestData(jUnion)    "a1b\na2b\na3b\nadb\naeb\nafb\nagb\na8b\na:b";
5871set Intended(jUnion)    "a1b\na2b\na3b\nadb\naeb\nafb";
5872set TestRegexp(jUnion)  {a[1-3[d-f]]b};
5873
5874#Java character set intersection
5875set TestData(jInter)    "adb\naeb\nafb\nayb\na7b\na:b";
5876set Intended(jInter)    "adb\naeb\nafb";
5877set TestRegexp(jInter)  {a[a-z&&[d-f]]b};
5878
5879#Positive forward assertion
5880set TestData(plookahead)    "abc lkj\nabc\nabc \nabc lk\nabc (?=lkj)";
5881set Intended(plookahead)    "abc lkj";
5882set TestRegexp(plookahead)  {abc (?=lkj).*};
5883
5884set TestData(plookaheadAtSign)  "doofoobar\nfoobar\nfoobard\nfoo\nfoobird"
5885set Intended(plookaheadAtSign)  "doofoobar\nfoobar\nfoobard"
5886set TestRegexp(plookaheadAtSign)  {foo\(bar\)\@=}
5887
5888#Negative forward assertion
5889set TestData(nlookahead)    "abclkj\nabc\nabclk\nabc(?!lkj)";
5890set Intended(nlookahead)    "abc\nabclk\nabc(?!lkj)";
5891set TestRegexp(nlookahead)  {abc(?!lkj).*};
5892
5893set TestData(nlookaheadAtSign)    "foodar\nfoo\nfoobar\nfoobard"
5894set Intended(nlookaheadAtSign)    "foodar\nfoo"
5895set TestRegexp(nlookaheadAtSign)  {foo\(bar\)\@!}
5896
5897#Positive backward assertion
5898set TestData(plookback)    "abc lkj\nabc\nabc \nabc lk\n(?<=abc) lkj";
5899set Intended(plookback)    "abc lkj";
5900set TestRegexp(plookback)  {.*(?<=abc) lkj};
5901
5902set TestData(plookbackAtSign)    "an file\nan \@<=file\nan @<=file"
5903set Intended(plookbackAtSign)    "an file"
5904set TestRegexp(plookbackAtSign)  {\(an \)\@<=file}
5905
5906#Positive backward assertion
5907#set TestData(plookbackbs)    "abc lkj\nabc\nabc \nabc lk\n(?<=abc) lkj";
5908#set Intended(plookbackbs)    "abc lkj";
5909#set TestRegexp(plookbackbs)  {.*(?\<=abc) lkj};
5910
5911#Negative backward assertion
5912set TestData(nlookback)    "abclkj\nlkj\nbclkj\n(?<!abc)lkj";
5913set Intended(nlookback)    "lkj\nbclkj\n(?<!abc)lkj";
5914set TestRegexp(nlookback)  {.*(?<!abc)lkj};
5915
5916set TestData(nlookbackAtSign)    "bar\ntbar\nbard\nfoobar"
5917set Intended(nlookbackAtSign)    "bar\ntbar\nbard"
5918set TestRegexp(nlookbackAtSign)  {\(foo\)\@<!bar}
5919
5920#Negative backward assertion
5921#set TestData(nlookbackbs)    "abclkj\nlkj\nbclkj\n(?<!abc)lkj";
5922#set Intended(nlookbackbs)    "lkj\nbclkj\n(?<!abc)lkj";
5923#set TestRegexp(nlookbackbs)  {.*(?\<!abc)lkj};
5924
5925#conditionals
5926set TestData(CondGroupSimple)    "<user@host.com>\nuser@host.com\n<user@host.com\nuser@host.com>";
5927set Intended(CondGroupSimple)    "<user@host.com>\nuser@host.com";
5928set TestRegexp(CondGroupSimple)  {^(<)?(\w+@\w+(?:\.\w+)+)(?(1)>)$};
5929
5930set TestData(CondGroupElse)     "<user@host.com>\nuser@host.com:\nuser@host.com";
5931set Intended(CondGroupElse)     "<user@host.com>\nuser@host.com:";
5932set TestRegexp(CondGroupElse)  {^(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|:)$};
5933
5934set TestData(CondLookaroundSimple) "abxy\nxy\naxyc\ncdwz"
5935set Intended(CondLookaroundSimple) "abxy\nxy\naxyc"
5936set TestRegexp(CondLookaroundSimple) {.*(?(?<!ab)xy).*}
5937
5938set TestData(CondLookaroundElse) "abxy\nxy\naxyc\nabwz";
5939set Intended(CondLookaroundElse) "xy\naxyc\nabwz";
5940set TestRegexp(CondLookaroundElse)  {.*(?(?<!ab)xy|wz).*}
5941
5942set TestData(SelfishNoCaptureGroupA)    "aaaa"
5943set Intended(SelfishNoCaptureGroupA)    "aaaa"
5944set TestRegexp(SelfishNoCaptureGroupA)    {(?>a+)}
5945
5946set TestData(SelfishNoCaptureGroupB)    "aaaa"
5947set Intended(SelfishNoCaptureGroupB)    "aaaa"
5948set TestRegexp(SelfishNoCaptureGroupB)    {(a+)a}
5949
5950set TestData(SelfishNoCaptureGroupC)    "aaaa"
5951set Intended(SelfishNoCaptureGroupC)    ""
5952set TestRegexp(SelfishNoCaptureGroupC)    {(?>a+)a}
5953
5954#Substitution tests
5955
5956#Downcase next char - vim
5957set TestData(SubDowncaseChar)   "John";
5958set Intended(SubDowncaseChar)   "Johnjohn";
5959set TestRegexp(SubDowncaseChar) {\(John\)}
5960set TestSubexp(SubDowncaseChar) {\1\l\1}
5961
5962#Upcase next char -vim
5963set TestData(SubUpcaseChar)   "john";
5964set Intended(SubUpcaseChar)   "Johnjohn";
5965set TestRegexp(SubUpcaseChar) {\(john\)}
5966set TestSubexp(SubUpcaseChar) {\u\1\1}
5967
5968#Downcase next string - vim
5969set TestData(SubDowncaseString)   "JOHN";
5970set Intended(SubDowncaseString)   "JOHNjohn";
5971set TestRegexp(SubDowncaseString) {\(JOHN\)}
5972set TestSubexp(SubDowncaseString) {\1\L\1}
5973
5974#Upcase next string -vim
5975set TestData(SubUpcaseString)   "john";
5976set Intended(SubUpcaseString)   "johnJOHN";
5977set TestRegexp(SubUpcaseString) {\(john\)}
5978set TestSubexp(SubUpcaseString) {\1\U\1}
5979
5980#Endcase - vim
5981set TestData(SubEndCaseDomaine)   "abc";
5982set TestRegexp(SubEndCaseDomaine) {\(abc\)}
5983set TestSubexp(SubEndCaseDomaine) {\U\1\e\1}
5984set Intended(SubEndCaseDomaine)   "ABCabc";
5985
5986set TestData(SubEndCaseDomainE)   "ABC";
5987set TestRegexp(SubEndCaseDomainE) {\(ABC\)}
5988set TestSubexp(SubEndCaseDomainE) {\L\1\E\1}
5989set Intended(SubEndCaseDomainE)   "abcABC";
5990
5991#Downcase next char - perl
5992set TestData(SubDowncaseCharDollar)   "John";
5993set Intended(SubDowncaseCharDollar)   "Johnjohn";
5994set TestRegexp(SubDowncaseCharDollar) {(John)}
5995set TestSubexp(SubDowncaseCharDollar) {$1\l$1}
5996
5997#Upcase next char -perl
5998set TestData(SubUpcaseCharDollar)   "john";
5999set Intended(SubUpcaseCharDollar)   "Johnjohn";
6000set TestRegexp(SubUpcaseCharDollar) {(john)}
6001set TestSubexp(SubUpcaseCharDollar) {\u$1$1}
6002
6003#Downcase next string - perl
6004set TestData(SubDowncaseStringDollar)   "JOHN";
6005set Intended(SubDowncaseStringDollar)   "JOHNjohn";
6006set TestRegexp(SubDowncaseStringDollar) {(JOHN)}
6007set TestSubexp(SubDowncaseStringDollar) {$1\L$1}
6008
6009#Upcase next string -perl
6010set TestData(SubUpcaseStringDollar)   "john";
6011set Intended(SubUpcaseStringDollar)   "johnJOHN";
6012set TestRegexp(SubUpcaseStringDollar) {(john)}
6013set TestSubexp(SubUpcaseStringDollar) {$1\U$1}
6014
6015#Endcase - perl
6016set TestData(SubEndCaseDomainEDollar)   "ABC";
6017set TestRegexp(SubEndCaseDomainEDollar) {(ABC)}
6018set TestSubexp(SubEndCaseDomainEDollar) {\L$1\E$1}
6019set Intended(SubEndCaseDomainEDollar)   "abcABC";
6020
6021#Endcase - perl style but not currently accepted by Perl
6022set TestData(SubEndCaseDomaineDollar)   "abc";
6023set TestRegexp(SubEndCaseDomaineDollar) {(abc)}
6024set TestSubexp(SubEndCaseDomaineDollar) {\U$1\e$1}
6025set Intended(SubEndCaseDomaineDollar)   "ABCabc";
6026
6027set TestData(SubNewline)	"abcd"
6028set TestRegexp(SubNewline)	{\(ab\)\(cd\)}
6029set TestSubexp(SubNewline)	{\1\r\2}
6030set Intended(SubNewline)	"ab\ncd"
6031
6032#Test for substitution backreference with k
6033set TestData(SubBackRefBare)   "abcdef";
6034set TestRegexp(SubBackRefBare) {(a.)(c.)(e.)};
6035set TestSubexp(SubBackRefBare) {1 3};
6036set Intended(SubBackRefBare)   "abef";
6037
6038#Test for limit on number of groups in substitution backreference with k
6039set TestData(SubBackRefBareAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6040set Intended(SubBackRefBareAtLeastTen)   "ajmnopqrstuvwxyz";
6041set TestRegexp(SubBackRefBareAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)}
6042set TestSubexp(SubBackRefBareAtLeastTen) {1 10};
6043
6044#Test for substitution backreference with $k
6045set TestData(SubBackReferenceDol)   "abcdef";
6046set Intended(SubBackReferenceDol)   "abef";
6047set TestRegexp(SubBackReferenceDol) {(a.)(c.)(e.)};
6048set TestSubexp(SubBackReferenceDol) {$1$3};
6049
6050#Test for substitution backreference with $0
6051set TestData(SubBackReferenceDolZero)   "abcdef";
6052set Intended(SubBackReferenceDolZero)   "ab abcdef";
6053set TestRegexp(SubBackReferenceDolZero) {(a.)(c.)(e.)};
6054set TestSubexp(SubBackReferenceDolZero) {$1 $0};
6055
6056#Test for limit on number of groups in substitution backreference with $k
6057set TestData(SubBackReferenceDolAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6058set Intended(SubBackReferenceDolAtLeastTen)   "ajmnopqrstuvwxyz";
6059set TestRegexp(SubBackReferenceDolAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)}
6060set TestSubexp(SubBackReferenceDolAtLeastTen) {$1$10};
6061
6062#Test for substitution backreference with %k
6063set TestData(SubBackReferencePercent)  "abcdef";
6064set Intended(SubBackReferencePercent)  "abef";
6065set TestRegexp(SubBackReferencePercent) {(a.)(c.)(e.)};
6066set TestSubexp(SubBackReferencePercent) {%1%3};
6067
6068#Test for substitution backreference with %0
6069set TestData(SubBackReferencePercentZero)  "abcdef";
6070set Intended(SubBackReferencePercentZero)  "ab abcdef";
6071set TestRegexp(SubBackReferencePercentZero) {(a.)(c.)(e.)};
6072set TestSubexp(SubBackReferencePercentZero) {%1 %0};
6073
6074#Test for limit on number of groups in substitution backreference with %k
6075set TestData(SubBackReferencePercentAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6076set Intended(SubBackReferencePercentAtLeastTen)   "ajmnopqrstuvwxyz";
6077set TestRegexp(SubBackReferencePercentAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)}
6078set TestSubexp(SubBackReferencePercentAtLeastTen) {%1%10};
6079
6080#Test for substitution backreference with \k
6081set TestData(SubBackRefbs)   "abcdef";
6082set Intended(SubBackRefbs)  "abef";
6083set TestRegexp(SubBackRefbs) {(a.)(c.)(e.)};
6084set TestSubexp(SubBackRefbs) {\1\3};
6085
6086#Test for substitution backreference with \0
6087set TestData(SubBackRefbsZero)   "abcdef";
6088set Intended(SubBackRefbsZero)  "ab abcdef";
6089set TestRegexp(SubBackRefbsZero) {(a.)(c.)(e.)};
6090set TestSubexp(SubBackRefbsZero) {\1 \0};
6091
6092#Test for limit on number of groups in substitution backreference with \k
6093set TestData(SubBackRefbsAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6094set Intended(SubBackRefbsAtLeastTen)   "ajmnopqrstuvwxyz";
6095set TestRegexp(SubBackRefbsAtLeastTen)  {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)}
6096set TestSubexp(SubBackRefbsAtLeastTen) {\1\10};
6097
6098#Test for substitution backreference with \k and \(
6099set TestData(SubBackRefParbs)   "abcdef";
6100set Intended(SubBackRefParbs)  "abef";
6101set TestRegexp(SubBackRefParbs) {\(a.\)\(c.\)\(e.\)};
6102set TestSubexp(SubBackRefParbs) {\1\3};
6103
6104#Test for substitution backreference with \0 and \(
6105set TestData(SubBackRefParbsZero)   "abcdef";
6106set Intended(SubBackRefParbsZero)  "ab abcdef";
6107set TestRegexp(SubBackRefParbsZero) {\(a.\)\(c.\)\(e.\)};
6108set TestSubexp(SubBackRefParbsZero) {\1 \0};
6109
6110#Test for limit on number of groups in substitution backreference with \k and \(
6111set TestData(SubBackRefParbsAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6112set Intended(SubBackRefParbsAtLeastTen)   "ajmnopqrstuvwxyz";
6113set TestRegexp(SubBackRefParbsAtLeastTen)  {\(a\)\(b\)\(c\)\(d\)\(e\)\(f\)\(g\)\(h\)\(i\)\(j\)\(k\)\(l\)}
6114set TestSubexp(SubBackRefParbsAtLeastTen) {\1\10};
6115
6116#Test for substitution backreference with \\k
6117set TestData(SubBackRefdbs)   "abcdef";
6118set Intended(SubBackRefdbs)   "abef";
6119set TestRegexp(SubBackRefdbs) {(a.)(c.)(e.)};
6120set TestSubexp(SubBackRefdbs) {\\1\\3};
6121
6122#Test for substitution backreference with \\0
6123set TestData(SubBackRefdbsZero)   "abcdef";
6124set Intended(SubBackRefdbsZero)  "ab abcdef";
6125set TestRegexp(SubBackRefdbsZero) {(a.)(c.)(e.)};
6126set TestSubexp(SubBackRefdbsZero) {\\1 \\0};
6127
6128#Test for limit on number of groups in substitution backreference with \\k and
6129set TestData(SubBackRefdbsAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6130set Intended(SubBackRefdbsAtLeastTen)   "ajmnopqrstuvwxyz";
6131set TestRegexp(SubBackRefdbsAtLeastTen) {(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)};
6132set TestSubexp(SubBackRefdbsAtLeastTen) {\\1\\10};
6133
6134#Test for substitution backreference with \\k and \\(\\)
6135set TestData(SubBackRefPardbsdbs)   "abcdef";
6136set Intended(SubBackRefPardbsdbs)   "abef";
6137set TestRegexp(SubBackRefPardbsdbs) {\\(a.\\)\\(c.\\)\\(e.\\)};
6138set TestSubexp(SubBackRefPardbsdbs) {\\1\\3};
6139
6140#Test for substitution backreference with \\0 and \\(\\)
6141set TestData(SubBackRefPardbsdbsZero)   "abcdef";
6142set Intended(SubBackRefPardbsdbsZero)   "ab abcdef";
6143set TestRegexp(SubBackRefPardbsdbsZero) {\\(a.\\)\\(c.\\)\\(e.\\)};
6144set TestSubexp(SubBackRefPardbsdbsZero) {\\1 \\0};
6145
6146#Test for limit on number of groups in substitution backreference with \\k and  \\(\\)
6147set TestData(SubBackRefPardbsdbsAtLeastTen)   "abcdefghijklmnopqrstuvwxyz";
6148set Intended(SubBackRefPardbsdbsAtLeastTen)   "ajmnopqrstuvwxyz";
6149set TestRegexp(SubBackRefPardbsdbsAtLeastTen) {\\(a\\)\\(b\\)\\(c\\)\\(d\\)\\(e\\)\\(f\\)\\(g\\)\\(h\\)\\(i\\)\\(j\\)\\(k\\)\\(l\\)};
6150set TestSubexp(SubBackRefPardbsdbsAtLeastTen) {\\1\\10};
6151
6152#Test for substitution backreference to entire match with 0
6153set TestData(SubEntBackRefZero)   "abcdef";
6154set Intended(SubEntBackRefZero)   "abcdefabcdef";
6155set TestRegexp(SubEntBackRefZero) {(ab)(cdef)};
6156set TestSubexp(SubEntBackRefZero) {0 0};
6157
6158#Test for substitution backreference to entire match with & as in Vim
6159set TestData(Subampentbackrefs)   "abcdef";
6160set Intended(Subampentbackrefs)   "abcdefabcdef";
6161set TestRegexp(Subampentbackrefs) {abcdef};
6162set TestSubexp(Subampentbackrefs) {&&};
6163
6164#Test for substitution backreference to entire match with \\&
6165set TestData(Subampentbackrefsdbs)   "abcdef";
6166set Intended(Subampentbackrefsdbs)   "abcdefabcdef";
6167set TestRegexp(Subampentbackrefsdbs) {(ab)(cdef)};
6168set TestSubexp(Subampentbackrefsdbs) {\\&\\&};
6169
6170#Test for substitution backreference to entire match with $&
6171set TestData(SubDolAmpEntBackRef)   "abcdef";
6172set Intended(SubDolAmpEntBackRef)   "abcdefabcdef";
6173set TestRegexp(SubDolAmpEntBackRef) {(ab)(cdef)};
6174set TestSubexp(SubDolAmpEntBackRef) {$&$&};
6175
6176#Test for substitution backreference to entire match with \\& where
6177#parentheses must be double-backslashed.
6178set TestData(SubampentbackrefsPardbsdbs)   "abcdef";
6179set Intended(SubampentbackrefsPardbsdbs)   "abcdefabcdef";
6180set TestRegexp(SubampentbackrefsPardbsdbs) {\\(ab\\)\\(cdef\\)};
6181set TestSubexp(SubampentbackrefsPardbsdbs) {\\&\\&};
6182
6183#Test for backreference to pre-match
6184set TestData(SubPreMatch)   "abcdef";
6185set Intended(SubPreMatch)   "ababef";
6186set TestRegexp(SubPreMatch) {cd};
6187set TestSubexp(SubPreMatch) {\`};
6188
6189#Test for backreference to pre-match
6190set TestData(SubPreMatchDol)   "abcdef";
6191set Intended(SubPreMatchDol)   "ababef";
6192set TestRegexp(SubPreMatchDol) {cd};
6193set TestSubexp(SubPreMatchDol) {$`};
6194
6195#Test for backreference to pre-match with 'pre
6196set TestData(SubPreMatchLit)   "abcdef";
6197set Intended(SubPreMatchLit)   "ab";
6198set TestRegexp(SubPreMatchLit) {cd};
6199set TestSubexp(SubPreMatchLit) {'pre};
6200
6201#Test for backreference to post-match
6202set TestData(SubPostMatch)   "abcdef";
6203set Intended(SubPostMatch)   "abefef";
6204set TestRegexp(SubPostMatch) {cd};
6205set TestSubexp(SubPostMatch) {\'};
6206
6207#Test for backreference to post-match
6208set TestData(SubPostMatchDol)   "abcdef";
6209set Intended(SubPostMatchDol)   "abefef";
6210set TestRegexp(SubPostMatchDol) {cd};
6211set TestSubexp(SubPostMatchDol) {$'};
6212
6213#Test for backreference to post-match with post
6214set TestData(SubPostMatchLit)   "abcdef";
6215set Intended(SubPostMatchLit)   "ef";
6216set TestRegexp(SubPostMatchLit) {cd};
6217set TestSubexp(SubPostMatchLit) {'post};
6218
6219#Test for backreference to last captured subgroup
6220set TestData(SubLastCapture)   "abcdef";
6221set Intended(SubLastCapture)   "ef";
6222set TestRegexp(SubLastCapture) {((ab)cd)(ef)};
6223set TestSubexp(SubLastCapture) {\+};
6224
6225#Test for backreference to last captured subgroup
6226set TestData(SubLastCaptureDol)   "abcdef";
6227set Intended(SubLastCaptureDol)   "ef";
6228set TestRegexp(SubLastCaptureDol) {((ab)cd)(ef)};
6229set TestSubexp(SubLastCaptureDol) {$+};
6230
6231#Test for tr style repetition notation C*N
6232set TestData(SubCStarN)   "starz";
6233set Intended(SubCStarN)   "aaaaz";
6234set TestRegexp(SubCStarN) {abcdefghijklmnopqrstuvwxyz};
6235set TestSubexp(SubCStarN) {[a*25]z};
6236
6237#Test for tr style repetition notation C*
6238set TestData(SubCStar)   "starz";
6239set Intended(SubCStar)   "aaaaa";
6240set TestRegexp(SubCStar) {abcdefghijklmnopqrstuvwxyz};
6241set TestSubexp(SubCStar) {[a*]};
6242
6243#Tests for tr versions of POSIX character classes
6244
6245set TestData(SubAlnum) "a\nB\nc\nZ\n+\n4\n:\n?";
6246set Intended(SubAlnum)  "x\nx\nx\nx\n+\nx\n:\n?";
6247set TestRegexp(SubAlnum)   {[:alnum:]};
6248set TestSubexp(SubAlnum)   {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx};
6249
6250set TestData(SubAlpha) "a\nB\nc\nZ\n+\n4\n:\n?";
6251set Intended(SubAlpha)  "x\nx\nx\nx\n+\n4\n:\n?";
6252set TestRegexp(SubAlpha)   {[:alpha:]};
6253set TestSubexp(SubAlpha)   {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx};
6254
6255set TestData(SubBlank) "a\040b\na\011b\na\n4\n:";
6256set Intended(SubBlank) "axb\naxb\na\n4\n:";
6257set TestRegexp(SubBlank)   {[:blank:]};
6258set TestSubexp(SubBlank)   {xxxxxxxxxx};
6259
6260set TestData(SubCntrl) "aabaAba4ba:ba\040ba\011ba\023ba\177b";
6261set Intended(SubCntrl) "aabaAba4ba:ba\040baXbaXbaXbX"; #Last X is for newline added to data
6262set TestRegexp(SubCntrl)   {[:cntrl:]};
6263set TestSubexp(SubCntrl)   {XXXXXXXXXXXXXXXXXXXXXXXXXX};
6264
6265set TestData(SubDigit) "A\n:\nB\nb\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n?";
6266set Intended(SubDigit) "A\n:\nB\nb\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\n?";
6267set TestRegexp(SubDigit)  {[:digit:]};
6268set TestSubexp(SubDigit)  {DDDDDDDDDD};
6269
6270set TestData(SubGraph) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
6271set Intended(SubGraph) "ggg\nggg\nggg\nggg\ng\040g\ng\011g\ng\023g";
6272set TestRegexp(SubGraph)   {[:graph:]};
6273set TestSubexp(SubGraph)   {gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg};
6274
6275set TestData(SubLower) "AaZ\nABZ\nAcZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
6276set Intended(SubLower) "AAZ\nABZ\nACZ\nAZZ\nA+Z\nA4Z\nA:Z\nA?Z";
6277set TestRegexp(SubLower)  {[:lower:]};
6278set TestSubexp(SubLower)  {[:upper:]};
6279
6280set TestData(SubPrint) "aab\naAb\na4b\na:b\na\040b\na\011b\na\023b";
6281set Intended(SubPrint) "ggg\nggg\nggg\nggg\nggg\ng\011g\ng\023g";
6282set TestRegexp(SubPrint)   {[:print:]};
6283set TestSubexp(SubPrint)   {gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg};
6284
6285set TestData(SubPunct) "aaz\naBz\nacz\naZz\na4z\na:z\na?z\na!z\na\#z\na\$z\na%z\na&z\na*z\na(z\na)z\na-z\na,z\na.z\na/z";
6286set Intended(SubPunct)  "aaz\naBz\nacz\naZz\na4z\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz\naPz";
6287set TestRegexp(SubPunct)   {[:punct:]};
6288set TestSubexp(SubPunct)   {PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP};
6289
6290set TestData(SubSpace) "a\040ba\014ba\011ba\013ba4ba:bacb";
6291set Intended(SubSpace) "axbaxbaxbaxba4ba:bacbx"; #Last X is for newline added to data
6292set TestRegexp(SubSpace)   {[:space:]};
6293set TestSubexp(SubSpace)   {xxxxxxxxxx};
6294
6295set TestData(SubUpper)     "aaz\naBz\nacz\naZz\na+z\na4z\na:z\na?z";
6296set Intended(SubUpper)     "aaz\nabz\nacz\nazz\na+z\na4z\na:z\na?z";
6297set TestRegexp(SubUpper)   {[:upper:]};
6298set TestSubexp(SubUpper)   {[:lower:]};
6299
6300set TestData(SubXdigit) "A\nB\nC\nD\nE\nF\na\nb\nc\nd\ne\nf\n1\n2\n3\n4\n5\n6\n7\n8\n9\n0\nj\nk\n;\n?";
6301set Intended(SubXdigit) "D\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nD\nj\nk\n;\n?";
6302set TestRegexp(SubXdigit) {[:xdigit:]};
6303set TestSubexp(SubXdigit) {DDDDDDDDDDDDDDDDDDDDDD};
6304
6305set TestData(SubRange) "x\ny\nz\na\nf\n4";
6306set Intended(SubRange) "F\nF\nF\na\nf\n4";
6307set TestRegexp(SubRange)   {[x-z]};
6308set TestSubexp(SubRange) {FFF};
6309
6310#Tests for reluctant quantifiers
6311#These work for Java and Perl.
6312#To generalize them, turn them into templates and generate the actual expressions using our knowledge
6313#of what backreference notation the program uses and what quoting is necessary for
6314#capture groups.
6315
6316set TestData(SubReluctantStarPrevDollar)     "abbbba";
6317set Intended(SubReluctantStarPrevDollar)     "bbbb";
6318set TestRegexp(SubReluctantStarPrevDollar)   {(a)(b*?)(b*)(a)};
6319set TestSubexp(SubReluctantStarPrevDollar)   {$3};
6320
6321set TestData(SubReluctantPlusPrevDollar)     "abbbba";
6322set Intended(SubReluctantPlusPrevDollar)     "b";
6323set TestRegexp(SubReluctantPlusPrevDollar)   {(a)(b+?)(b+)(a)};
6324set TestSubexp(SubReluctantPlusPrevDollar)   {$2};
6325
6326set TestData(SubReluctantQuestionMarkPrevDollar)     "abbbba";
6327set Intended(SubReluctantQuestionMarkPrevDollar)     "bbbb";
6328set TestRegexp(SubReluctantQuestionMarkPrevDollar)   {(a)(b??)(b+)(a)};
6329set TestSubexp(SubReluctantQuestionMarkPrevDollar)   {$3};
6330
6331set TestData(SubReluctantIntegerRangeDollar)     "abbbba";
6332set Intended(SubReluctantIntegerRangeDollar)     "bb";
6333set TestRegexp(SubReluctantIntegerRangeDollar)   {(a)(b{2,4}?)(b+)(a)};
6334set TestSubexp(SubReluctantIntegerRangeDollar)   {$3};
6335
6336# For Ruby
6337set TestData(SubReluctantStarPrevBackslash)     "abbbba";
6338set Intended(SubReluctantStarPrevBackslash)     "bbbb";
6339set TestRegexp(SubReluctantStarPrevBackslash)   {(a)(b*?)(b*)(a)};
6340set TestSubexp(SubReluctantStarPrevBackslash)   {\3};
6341
6342set TestData(SubReluctantPlusPrevBackslash)     "abbbba";
6343set Intended(SubReluctantPlusPrevBackslash)     "b";
6344set TestRegexp(SubReluctantPlusPrevBackslash)   {(a)(b+?)(b+)(a)};
6345set TestSubexp(SubReluctantPlusPrevBackslash)   {\2};
6346
6347set TestData(SubReluctantQuestionMarkPrevBackslash)     "abbbba";
6348set Intended(SubReluctantQuestionMarkPrevBackslash)     "bbbb";
6349set TestRegexp(SubReluctantQuestionMarkPrevBackslash)   {(a)(b??)(b+)(a)};
6350set TestSubexp(SubReluctantQuestionMarkPrevBackslash)   {\3};
6351
6352set TestData(SubReluctantIntegerRangeBackslash)     "abbbba";
6353set Intended(SubReluctantIntegerRangeBackslash)     "bb";
6354set TestRegexp(SubReluctantIntegerRangeBackslash)   {(a)(b{2,4}?)(b+)(a)};
6355set TestSubexp(SubReluctantIntegerRangeBackslash)   {\3};
6356
6357set TestData(ReluctantIntegerRangeVIMBackslash) "abbbbab\nabbbbabb\nabbbbabbb\nabbbbabbbb";
6358set Intended(ReluctantIntegerRangeVIMBackslash) "abbbbabb\nabbbbabbb"
6359set TestRegexp(ReluctantIntegerRangeVIMBackslash)   "^\\(a\\)\\(b\\\{-2,4}\\)\\(b\\+\\)\\(a\\)\\2$";
6360set TestData(ReluctantAtLeastMVIMBackslash) "abbbbab\nabbbbabb\nabbbbabbb\nabbbbabbbb";
6361set Intended(ReluctantAtLeastMVIMBackslash)  "abbbbabb\nabbbbabbb";
6362set TestRegexp(ReluctantAtLeastMVIMBackslash)   "^\\(a\\)\\(b\\\{-2,}\\)\\(b\\+\\)\\(a\\)\\2$";
6363
6364set TestData(ReluctantAtMostNVIMBackslash) "abbbbab\nabbbbabb\nabbbbabbb\nabbbbabbbb";
6365set Intended(ReluctantAtMostNVIMBackslash)  "abbbbab\nabbbbabb\nabbbbabbb"
6366set TestRegexp(ReluctantAtMostNVIMBackslash)   "^\\(a\\)\\(b\\\{-,4}\\)\\(b\\+\\)\\(a\\)\\2$";
6367
6368set TestData(ReluctantExactlyMVIMBackslash) "abbbbab\nabbbbabb\nabbbbabbb\nabbbbabbbb";
6369set Intended(ReluctantExactlyMVIMBackslash)  "abbbbabbb"
6370set TestRegexp(ReluctantExactlyMVIMBackslash)   "^\\(a\\)\\(b\\\{-3}\\)\\(b\\+\\)\\(a\\)\\2$";
6371
6372set TestData(SubReluctantZeroOrMoreVIMBackslash)    "abc"
6373set TestRegexp(SubReluctantZeroOrMoreVIMBackslash)  ".\\\{-\}"
6374set TestSubexp(SubReluctantZeroOrMoreVIMBackslash)  X
6375set Intended(SubReluctantZeroOrMoreVIMBackslash)    "XaXbXc"
6376
6377set TestData(PossStarA)     "aaaa";
6378set Intended(PossStarA)     "aaaa";
6379set TestRegexp(PossStarA)   "a*+";
6380
6381set TestData(PossStarB)     "aaaa";
6382set Intended(PossStarB)     "";
6383set TestRegexp(PossStarB)   "a*+a";
6384
6385set TestData(PossPlusA)     "aaaa";
6386set Intended(PossPlusA)     "aaaa";
6387set TestRegexp(PossPlusA)   "a++";
6388
6389set TestData(PossPlusB)     "aaaa";
6390set Intended(PossPlusB)     "";
6391set TestRegexp(PossPlusB)   "a++a";
6392
6393set TestData(PossQMarkA)     "a";
6394set Intended(PossQMarkA)     "a";
6395set TestRegexp(PossQMarkA)   "a?+";
6396
6397set TestData(PossQMarkB)     "a";
6398set Intended(PossQMarkB)     "";
6399set TestRegexp(PossQMarkB)   "a?+a";
6400
6401set TestData(PossAtLeastMA)     "aaaa";
6402set Intended(PossAtLeastMA)     "aaaa";
6403set TestRegexp(PossAtLeastMA)   "a{1,}+";
6404
6405set TestData(PossAtLeastMB)     "aaaa";
6406set Intended(PossAtLeastMB)     "";
6407set TestRegexp(PossAtLeastMB)   "a{1,}+a";
6408
6409set TestData(PossMToNA)     "aa\na";
6410set Intended(PossMToNA)     "aa\na";
6411set TestRegexp(PossMToNA)   "a{1,2}+";
6412
6413set TestData(PossMToNB)     "aa\na";
6414set Intended(PossMToNB)     "";
6415set TestRegexp(PossMToNB)   "a{1,2}+a";
6416
6417set TestData(PossMToNC)     "aaa\naa\na";
6418set Intended(PossMToNC)     "aaa";
6419set TestRegexp(PossMToNC)   "a{1,2}+a";
6420
6421set TestData(SubLitString)    "abcde";
6422set Intended(SubLitString)    "GH";
6423set TestRegexp(SubLitString)  ".*cd.*";
6424set TestSubexp(SubLitString)  "\"GH\"";
6425
6426set TestData(ExactMatchWD)      "read\nready\nbeads\nroads\nreads"
6427set Intended(ExactMatchWD)      "read\nready\nbeads\nreads";
6428set TestRegexp(ExactMatchWD)    "r<ead>s";
6429
6430set TestData(ExactMatchTRE)      "read\nready\nbeads\nroads\nreads"
6431set Intended(ExactMatchTRE)      "read\nready\nbeads\nreads";
6432set TestRegexp(ExactMatchTRE)    "r(ead){~0}s";
6433
6434set TestData(ExactMatchCgrep)      "read\nready\nbeads\nroads\nreads"
6435set Intended(ExactMatchCgrep)      "read\nready\nbeads\nreads";
6436set TestRegexp(ExactMatchCgrep)    "r<ead>";
6437
6438set TestData(TRECostSetting)      "read\nready\nbeads\nroads\nreads\nrains"
6439set Intended(TRECostSetting)      "read\nready\nroads\nreads"
6440set TestRegexp(TRECostSetting)    "r(eads){~1,1i+1d+1s}";
6441
6442set TestData(TotalErrorCrosshatchA) "abc\ndbc\nadc\nabd\nabcd\nzabc"
6443set Intended(TotalErrorCrosshatchA) "abc\ndbc\nadc\nabd\nabcd\nzabc"
6444set TestRegexp(TotalErrorCrosshatchA) {(#a1)^abc$}
6445
6446#The results I get disagree with the documentation so leave this
6447#out until I can find out if sleep is buggy or if I have misunderstood.
6448
6449#set TestData(ReluctantStar) "this is me testing with this test\nthis is me test";
6450#set Intended(ReluctantStar) "this is me test";
6451#set TestRegexp(ReluctantStar) {this*test}
6452
6453#set TestData(GreedyDoubleStar) "this is me testing with this test\nthis is me test";
6454#set Intended(GreedyDoubleStar) "this is me testing with this test";
6455#set TestRegexp(GreedyDoubleStar) {this**test}
6456
6457set TestData(ColumnSpecifier) "abcde\nabcd\nabc\nab\na"
6458set Intended(ColumnSpecifier) "abcde\nabcd"
6459set TestRegexp(ColumnSpecifier) {\%4c.}
6460
6461set TestData(PreColumnSpecifier)   "X\nAX\nABX\nABCX"
6462set Intended(PreColumnSpecifier)   "X\nAX"
6463set TestRegexp(PreColumnSpecifier) {\%<3cX}
6464
6465set TestData(PostColumnSpecifier)   "X\nAX\nABX\nABCX\nABCDX"
6466set Intended(PostColumnSpecifier)   "ABCX\nABCDX"
6467set TestRegexp(PostColumnSpecifier) {\%>3cX}
6468
6469#Tests for Sgrep
6470
6471#Test for Sgrep-style character range
6472set TestData(CposRange) "abcde"
6473set Intended(CposRange)  "bcd"
6474set TestRegexp(CposRange)  {[(1,3)]};
6475
6476#Test for Sgrep-style bounded region
6477set TestData(RegionDoubleDot) "<b>foo</b>\n</b>foo<b>\nfoo\n(foo)\n<b>bar</b>"
6478set Intended(RegionDoubleDot)  "foo"
6479set TestRegexp(RegionDoubleDot)  {"<b>" .. "</b>"};
6480
6481
6482proc NoEnc {or re} {
6483    set ol [split $or  ""]
6484    set rl [split $re ""]
6485    foreach o $ol r $rl {
6486	if {($o != $r) && ($r == "?")} {
6487	    lappend NoEncoding $o
6488	}
6489    }
6490    return [lsort -unique $NoEncoding]
6491}
6492
6493proc PutNL {fh} {
6494    puts $fh ""
6495}
6496
6497proc PutWithEncoding {fh enc s} {
6498    set es [encoding convertto $enc $s]
6499    set re [encoding convertfrom $enc $es]
6500    if {[string equal $s $re] == 1} {
6501	set SavedEncoding [fconfigure $fh -encoding]
6502	fconfigure $fh -encoding binary
6503	puts -nonewline $fh $es
6504	fconfigure $fh -encoding $SavedEncoding
6505    } else {
6506	foreach c [NoEnc $s $re] {
6507	    scan $c "%c" t
6508	    append str [format "%s (U+%04X)  " $c $t]
6509	}
6510	set str [string trimright $str]
6511	error "The following characters do not exist in the $enc encoding: $str"
6512    }
6513}
6514
6515proc GetVersion {p} {
6516    set failmsg  [_ "version unknown"];
6517    switch -exact -- $p {
6518	agrep {
6519	    if {[catch {exec agrep --version} vinfo] == 0} {
6520		return [lindex [split $vinfo "\n"] 0]
6521	    } else {
6522		return [_ "Agrep declines to reveal its age"]
6523	    }
6524	}
6525	arena {
6526	    return [exec arena -V]
6527	}
6528	awk {
6529	    return [lindex [split [exec awk --version] "\n"] 0]
6530	}
6531	bash {
6532	    return [lindex [split [exec bash --version] "\n"] 0]
6533	}
6534	boo {
6535	    return [lindex [split [exec boo --version] "\n"] 0];# Fix this
6536	}
6537	BusyBoxEgrep {
6538	    catch {exec busybox grep} vinfo
6539	    return [lindex [lindex [split $vinfo "\n"] 0] 1]
6540	}
6541	C {
6542	    return [_ "C declines to reveal its age"]
6543	}
6544	cgrep {
6545	    catch {exec cgrep} vline;
6546	    return [lindex [split $vline] 4]
6547	}
6548	ed {
6549	    return [lindex [split [exec ed --version] "\n"] 0]
6550	}
6551	egrep {
6552	    return [lindex [split [exec egrep --version] "\n"] 0]
6553	}
6554	emacs {
6555	    return [lindex [split [exec emacs --version] "\n"] 0]
6556	}
6557	euphoria {
6558	    return [_ "Euphoria declines to reveal its age"]
6559	}
6560	"expr" {
6561	    return [lindex [exec expr --version] 3]
6562        }
6563	fgrep {
6564	    return [lindex [split [exec fgrep --version] "\n"] 0]
6565	}
6566	fish {
6567	    catch {[exec fish -v 2> $::VersionFile]}
6568	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6569		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6570		return $failmsg;
6571	    }
6572	    if {[gets $TmpHandle vline] < 1} {
6573		return $failmsg;
6574	    }
6575	    close $TmpHandle
6576	    #	    file delete -force $::VersionFile; #debug
6577	    return [string trim [lindex [split $vline ","] 1]]
6578	}
6579	flex {
6580	    return [exec flex -V]
6581	}
6582	frink {
6583	    return [exec java -cp frink.jar frink.parser.Frink --version];
6584	}
6585	gawk {
6586	    return [lindex [split [exec gawk --version] "\n"] 0]
6587	}
6588	glark {
6589	    return [lindex [split [exec glark -v] "\n"] 0]
6590	}
6591	gpp {
6592	    return [exec gpp --version]
6593	}
6594	grep {
6595	    return [lindex [split [exec grep --version] "\n"] 0]
6596	}
6597	groovy {
6598	    set r [exec groovy --version]
6599	    return [lindex $r 2]
6600	}
6601	guile {
6602	    return [lindex [split [exec guile -v] "\n"] 0]
6603	}
6604	icon {
6605	    catch {[exec icon -V 2> $::VersionFile]}
6606	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6607		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6608		return $failmsg;
6609	    }
6610	    if {[gets $TmpHandle vline] < 1} {
6611		return $failmsg;
6612	    }
6613	    close $TmpHandle
6614	    file delete -force $::VersionFile
6615	    return [string range $vline 0 [expr [string first "," $vline] -1] ];
6616	}
6617	ici {
6618	    catch {[exec ici -v 2> $::VersionFile]}
6619	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6620		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6621		return $failmsg;
6622	    }
6623	    if {[gets $TmpHandle vline] < 1} {
6624		return $failmsg;
6625	    }
6626	    close $TmpHandle
6627	    file delete -force $::VersionFile
6628	    return [lindex [split $vline] 1]
6629	}
6630	java {
6631	    catch {[exec java -version 2> $::VersionFile]}
6632	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6633		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6634		return $failmsg;
6635	    }
6636	    if {[gets $TmpHandle vline] < 1} {
6637		return $failmsg;
6638	    }
6639	    close $TmpHandle
6640	    file delete -force $::VersionFile
6641	    return [string trim [lindex [split $vline] 2] {\"}];
6642	}
6643	javascript {
6644	    return [lindex [split [exec js --version] "\n"] 0]
6645	}
6646	jgrep {
6647	    return [_ "Jgrep declines to reveal its age"]
6648	}
6649	judoscript {
6650	    return [lindex [split [exec java -jar judo.jar] "\n"] 1]
6651	}
6652	ksh {
6653	    return [_ "Ksh declines to reveal its age"]
6654	}
6655	lua {
6656	    catch {[exec lua -v 2> $::VersionFile]}
6657	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6658		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6659		return $failmsg;
6660	    }
6661	    if {[gets $TmpHandle vline] < 1} {
6662		return $failmsg;
6663	    }
6664	    close $TmpHandle
6665	    file delete -force $::VersionFile
6666	    return [string range $vline 0 [expr [string first "Copyright" $vline] -3]];
6667	}
6668	m4 {
6669	    return [exec m4 --version]
6670	}
6671	mawk {
6672	    set vinfo [lindex [split [exec mawk -W version 2> /dev/null] "\n"] 0];
6673	    return [list [lindex $vinfo 0] [lindex $vinfo 1]];
6674	}
6675	minised {
6676	    return [_ "Minised declines to reveal its age"]
6677	}
6678	mysql {
6679	    set vinfo [split [exec mysql -V]]
6680	    lappend v [lindex $vinfo 2]
6681	    lappend v [lindex $vinfo 3]
6682	    lappend v [lindex $vinfo 4]
6683	    lappend v [lindex $vinfo 5]
6684	    return [join $v]
6685	}
6686	nawk {
6687	    return [_ "Nawk declines to reveal its age"]
6688	}
6689	nrgrep {
6690	    set vinfo [lindex [split [exec nrgrep -H] "\n"] 2];
6691	    return [format "%s %s" [_ "version"] [string trimright [lindex $vinfo 2] ","]];
6692	}
6693	numgrep {
6694	    return [_ "Numgrep declines to reveal its age"]
6695	}
6696	patmatch {
6697	    return [_ "Patmatch declines to reveal its age"]
6698	}
6699	pcregrep {
6700	    catch {[exec pcregrep --version 2> $::VersionFile]}
6701	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6702		ShowMessage [format \
6703			 [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6704		return $failmsg;
6705	    }
6706	    if {[gets $TmpHandle vline] < 1} {
6707		return $failmsg;
6708	    }
6709	    close $TmpHandle
6710	    file delete -force $::VersionFile
6711	    set version [lindex $vline 2]
6712	    set date [lindex $vline 3]
6713	    set pcreversion [lindex $vline 7]
6714	    set pcredate [lindex $vline 8]
6715	    return [format "%s (%s\) using pcre %s (%s)" $version $date $pcreversion $pcredate]
6716	}
6717	perl {
6718	    set vinfo [lindex [split [exec perl -v] "\n"] 1];
6719	    return [lindex [split $vinfo] 3];
6720	}
6721	pike {
6722	    catch {[exec pike -v 2> $::VersionFile]}
6723	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6724		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6725		return $failmsg;
6726	    }
6727	    if {[gets $TmpHandle vline] < 1} {
6728		return $failmsg;
6729	    }
6730	    close $TmpHandle
6731	    file delete -force $::VersionFile
6732	    return [string range $vline 0 [string first "Copyright" $vline]];
6733	}
6734	python {
6735	    catch {[exec python -V 2> $::VersionFile]}
6736	    if {[catch {open $::VersionFile "r"} TmpHandle ] != 0} {
6737		ShowMessage [format [_ "Mysterious failure to open temporary file %s."] $::VersionFile];
6738		return $failmsg;
6739	    }
6740	    if {[gets $TmpHandle vline] < 1} {
6741		return $failmsg;
6742	    }
6743	    close $TmpHandle
6744	    file delete -force $::VersionFile
6745	    return $vline;
6746	}
6747	rc {
6748	    return [lindex [exec rc -c {echo $version}] 0]
6749	}
6750	rebol {
6751	    set vinfo [lindex [split [exec rebol --help --do q] "\n"] 1];
6752	    return [string range $vinfo [string first REBOL $vinfo] end]
6753	}
6754	rep {
6755	    return [exec rep --version]
6756	}
6757	ruby {
6758	    set vinfo [lindex [split [exec ruby -v] "\n"] 0];
6759	    return [string range $vinfo 0 [expr [string first \[ $vinfo] -2]];
6760	}
6761	sed {
6762	    if {[catch {exec sed --version} vinfo] == 0} {
6763		return [lindex [split $vinfo "\n"] 0]
6764	    } else {
6765		return [_ "Sed declines to reveal its age"]
6766	    }
6767	}
6768	sgrep {
6769	    return [lindex [exec sgrep -V] 2]
6770	}
6771	ssed {
6772	    return [lindex [split [lindex [split [exec ssed --version] "\n"] 0]] 2]
6773	}
6774	tcl {
6775	    return [info patchlevel]
6776	}
6777	tclglob {
6778	    return [info patchlevel]
6779	}
6780	tcsh {
6781	    set vilist [split [lindex [split [exec tcsh --version] "\n"] 0]]
6782	    return [format "%s %s %s" [lindex $vilist 1] [lindex $vilist 2] [lindex $vilist 3]]
6783	}
6784	tr {
6785	    return [lindex [split [exec tr --version] "\n"] 0]
6786	}
6787	vim {
6788	    set vilist [split [lindex [split [exec vim --version] "\n"] 0]]
6789	    return [join [lreplace $vilist 0 3]]
6790	}
6791	xmlgawk {
6792	    return [lindex [split [lindex [split [exec xmlgawk --version] "\n"] 0]] 3]
6793	}
6794	xmlstarlet {
6795	    return [exec xml --version]
6796	}
6797	wmagrep {
6798	    return [_ "Wu-Manber agrep declines to reveal its age"]
6799	}
6800	zsh {
6801	    return [exec zsh --version]
6802	}
6803	default {
6804	    return $failmsg;
6805	}
6806    }
6807}
6808
6809#Return the full name of the currently selected daughter program
6810proc NameProgram {} {
6811    if {[string equal $::program agrep]} {
6812	if {$::ProgramInfo(agrep,TreAgrepP) == 1} {
6813	    return "TRE agrep";
6814	} else {
6815	    return "Wu-Manber agrep";
6816	}
6817    } elseif {[string equal $::program sed]} {
6818	return $::ProgramInfo(sed,Which)
6819    } else {
6820	return $::program;
6821    }
6822}
6823
6824proc LoadMessageCatalog {} {
6825    global DebugP;
6826
6827    if {$DebugP} {
6828	if {[::msgcat::mcload "msgs"] == 0} {
6829	    puts "No message catalog loaded."
6830	} else {
6831	    puts "Message catalog loaded."
6832	}
6833    } else {
6834	::msgcat::mcload [file join [file dirname [info script]] msgs];
6835    }
6836}
6837
6838proc ScaleMoveBigIncrement {w k x y} {
6839    set part [$w identify $x $y]
6840    set inc 0;
6841    switch -exact -- $part {
6842	trough1 {
6843	    set dir -1;
6844	}
6845	trough2 {
6846	    set dir  1;
6847	}
6848	default {
6849	    return ;
6850	}
6851    }
6852    set Resolution [$w cget -resolution]
6853    set CurrentValue [$w get]
6854    set Delta [expr $dir * $k * $Resolution]
6855    $w set [expr $CurrentValue + $Delta]
6856}
6857
6858# Given a number represented as a string, insert delimiters to break it up for
6859# readability. Normally, the delimiter will be a comma which will be inserted every
6860# three digits. However, the delimiter and groupsize are arguments, permitting use
6861# in other locales.
6862#
6863# The string is assumed to consist of digits, possibly preceded by spaces,
6864# and possibly containing a decimal point, i.e.: [:space:]*[:digit:]*\.[:digit:]*
6865
6866proc DelimitNumber {number {delim ","} {GroupSize 3}} {
6867    # First, extract right hand part of number, up to and including decimal point
6868    set point [string last "." $number];
6869    if {$point >= 0} {
6870	set PostDecimal [string range $number [expr $point + 1] end];
6871	set PostDecimalP 1;
6872    } else {
6873	set point [expr [string length $number] + 1]
6874	set PostDecimal "";
6875	set PostDecimalP 0;
6876    }
6877
6878    # Now extract any leading spaces.
6879    set ind 0;
6880    while {[string equal [string index $number $ind] \u0020]} {
6881	incr ind;
6882    }
6883    set FirstNonSpace $ind;
6884    set LastSpace [expr $FirstNonSpace - 1];
6885    set LeadingSpaces [string range $number 0 $LastSpace];
6886
6887    # Now extract the non-fractional part of the number, omitting leading spaces.
6888    set MainNumber [string range $number $FirstNonSpace [expr $point - 1]];
6889
6890    # Insert commas into the main number.
6891    set Length [string length $MainNumber];
6892    set Phase  [expr $Length % $GroupSize]
6893    set PhaseMinusOne  [expr $Phase -1];
6894    set DelimitedMain "";
6895
6896    #First we deal with the extra stuff.
6897    if {$Phase > 0} {
6898	append DelimitedMain [string range $MainNumber 0 $PhaseMinusOne];
6899    }
6900    set FirstInGroup $Phase;
6901    set LastInGroup [expr $FirstInGroup + $GroupSize -1];
6902    while {$LastInGroup < $Length} {
6903	if {$FirstInGroup > 0} {
6904	    append DelimitedMain $delim;
6905	}
6906	set ToAppend [string range $MainNumber $FirstInGroup $LastInGroup];
6907	append DelimitedMain [string range $MainNumber $FirstInGroup $LastInGroup];
6908	incr FirstInGroup $GroupSize
6909	incr LastInGroup  $GroupSize
6910    }
6911
6912    # Reassemble the number.
6913    if {$PostDecimalP} {
6914	return [format "%s%s.%s" $LeadingSpaces $DelimitedMain $PostDecimal];
6915    } else {
6916	return [format "%s%s" $LeadingSpaces $DelimitedMain];
6917    }
6918}
6919
6920#Font system begins here
6921
6922# We set these outside the namespace since FontInfo has to be global.
6923# Default defaults
6924if {$TkEightFivePlusOnX11P} {
6925    set FontInfo(size) 9
6926} else {
6927    set FontInfo(size) 12
6928}
6929set FontInfo(family) courier
6930set FontInfo(weight) normal
6931set FontInfo(slant) roman
6932set FontInfo(underline) 0
6933set FontInfo(overstrike) 0
6934
6935namespace eval fontsel {
6936    variable FontPropertyList [list family size weight slant underline overstrike]
6937    variable FontPropertyClass
6938    variable FSCColors
6939
6940    foreach p $FontPropertyList {
6941	set FontPropertyClass($p) generic;
6942    }
6943    set FontPropertyClass(underline) boolean
6944    set FontPropertyClass(overstrike) boolean
6945
6946    #We check the existence of the variable so that this
6947    #can safely be called AFTER non-default values are set.
6948    proc SetFontInfoDefaults {} {
6949	global FontInfo;
6950	foreach ft $::FontList {
6951	    if {![info exist FontInfo($ft,family)]} {
6952		set FontInfo($ft,family)	$FontInfo(family)
6953	    }
6954	    if {![info exist FontInfo($ft,size)]} {
6955		set FontInfo($ft,size)	$FontInfo(size)
6956	    }
6957	    if {![info exist FontInfo($ft,weight)]} {
6958		set FontInfo($ft,weight)	$FontInfo(weight)
6959	    }
6960	    if {![info exist FontInfo($ft,slant)]} {
6961		set FontInfo($ft,slant)	$FontInfo(slant)
6962	    }
6963	    if {![info exist FontInfo($ft,underline)]} {
6964		set FontInfo($ft,underline)	$FontInfo(underline)
6965	    }
6966	    if {![info exist FontInfo($ft,overstrike)]} {
6967		set FontInfo($ft,overstrike)	$FontInfo(overstrike)
6968	    }
6969	    if {![info exist FontInfo($ft,gloss)]} {
6970		set FontInfo($ft,gloss)	$ft;
6971	    }
6972	    if {![info exist FontInfo($ft,help)]} {
6973		set FontInfo($ft,help)	"?"
6974	    }
6975	}
6976    }
6977
6978    #For a given font assign font-specific properties from generics.
6979    proc FontSet {which} {
6980	global FontInfo
6981	variable FontPropertyList
6982	foreach prop $FontPropertyList {
6983	    set FontInfo($which,$prop) $FontInfo($prop);
6984	}
6985    }
6986
6987    #Assign the proprety values of a specified font to the generics.
6988    proc InverseFontSet {which} {
6989	global FontInfo
6990	variable FontPropertyList
6991	foreach prop $FontPropertyList {
6992	    set FontInfo($prop) $FontInfo($which,$prop);
6993	}
6994    }
6995
6996    #Configure a specified font according to the font-specific properties.
6997    proc ConfigureFont {which} {
6998	global FontInfo
6999	variable FontPropertyList
7000	foreach prop $FontPropertyList {
7001	    font configure $which -$prop $FontInfo($which,$prop)
7002	}
7003    }
7004
7005    #Record as default values the font-specific values of properties at the
7006    #time of the call. The recorded values are intended for use by
7007    #ResetToDefaults
7008    proc RecordDefaults {} {
7009	global FontInfo
7010	global FontList;
7011	variable FontPropertyList
7012
7013	foreach f $FontList {
7014	    foreach p $FontPropertyList {
7015		set FontInfo($f,$p,Default) $FontInfo($f,$p);
7016	    }
7017	}
7018    }
7019
7020    #Create all of the fonts on the font list and configure them
7021    #according to the generic values of the properties, which are
7022    #also assigned at this time to the font-specific variables.
7023    proc CreateFonts {} {
7024	global FontList;
7025
7026	foreach ft $FontList {
7027	    font create $ft;
7028	    InverseFontSet $ft;
7029	    ConfigureFont $ft;
7030	}
7031
7032    }
7033
7034    #Get the values from the three scales, combine them into a hex RGB spec,
7035    #assign its value to FontExampleColor, and configure the two examples.
7036    proc UpdateFontExampleColor {x} {
7037	variable FSCColors
7038	global FontExampleColorConfigureWhich
7039
7040	UpdateFontExampleColorHex;
7041	.selectFont.curcan.att.r1c1 configure \
7042	    -$::FontExampleColorConfigureWhich  \#$::FontExampleColor
7043	.selectFont.curcan.att.r2c1 configure \
7044	    -$::FontExampleColorConfigureWhich \#$::FontExampleColor
7045	set FSCColors(red,$FontExampleColorConfigureWhich)   $::FontRed;
7046	set FSCColors(green,$FontExampleColorConfigureWhich) $::FontGreen;
7047	set FSCColors(blue,$FontExampleColorConfigureWhich)  $::FontBlue;
7048    }
7049
7050    proc UpdateFontExampleColorHex {} {
7051	set ::FontExampleColor [format "%02X%02X%02X" $::FontRed $::FontGreen $::FontBlue];
7052    }
7053
7054    proc RestoreCSColors {} {
7055	variable FSCColors
7056	global FontExampleColorConfigureWhich
7057	set ::FontRed   $FSCColors(red,$FontExampleColorConfigureWhich)
7058	set ::FontGreen $FSCColors(green,$FontExampleColorConfigureWhich)
7059	set ::FontBlue  $FSCColors(blue,$FontExampleColorConfigureWhich)
7060	UpdateFontExampleColorHex;
7061    }
7062
7063    proc CloneMainFontAsFontControlPanelFont {} {
7064	variable FontPropertyList
7065	global FontInfo
7066
7067	foreach p $FontPropertyList {
7068	    font configure FontControlPanelFont -$p $FontInfo(MainFont,$p);
7069	}
7070    }
7071
7072
7073    #We create this separately because we don't want it on the FontList.
7074    font create FontControlPanelFont;
7075
7076    #This is the main procedure of this package.
7077    #It creates the font control panel.
7078    proc CreateFontControlPanel {args} {
7079	global FontInfo;
7080	global WhichFontToSet
7081	global FontList;
7082	variable FontPropertyList
7083	variable FSCColors
7084
7085	set General 1
7086	set exwid 10
7087
7088	set w .selectFont
7089	if {[winfo exists $w]} {
7090	    wm deiconify $w;
7091	    raise $w;
7092	    return ;
7093	}
7094	toplevel $w
7095	wm title $w [_ "Font Selection"]
7096	BindKeys $w
7097	wm protocol $w WM_DELETE_WINDOW "wm withdraw $w"
7098
7099	#The idea is that in general we want to use the main
7100	#font here, but we keep them separate so that we
7101	#can wait before switching the control panel to
7102	#the new main font configuration so that
7103	#the user isn't confronted with an unusable
7104	#control panel if he or she sets the mainfont to something
7105	#crazy.
7106	CloneMainFontAsFontControlPanelFont;
7107
7108	if {[llength $args] > 0} {
7109	    set ::WhichFontToSet [lindex $args 0];
7110	    set General 0;
7111	}
7112	set FontTypes [llength $FontList];
7113	if {$FontTypes == 1} {
7114	    set ::WhichFontToSet [lindex $FontList 0];
7115	    set General 0;
7116	}
7117
7118	frame $w.which -relief ridge -border 3
7119	if {$General} {
7120	    set msg [_ "For what aspect of the program\ndo you wish to set the font?"]
7121	    balloonhelp_for $w.which $msg
7122	    label $w.which.title -text [_ "Use for which to set font"] \
7123		-anchor w -font FontControlPanelFont
7124	    frame $w.which.btns;
7125	    set k 0;
7126	    set PerRow 4;
7127	    set ypad 3
7128	    set xpad 10
7129	    foreach ft $FontList {
7130		set bn $w.which.btns.f$ft;
7131		radiobutton $bn -text [_ $FontInfo($ft,gloss)]  \
7132		    -variable WhichFontToSet -value $ft \
7133		    -command fontsel::SetFontSelectionDefaults \
7134		    -font FontControlPanelFont \
7135		    -indicatoron 0 -selectcolor $::ColorSpecs(Default,Background)
7136		balloonhelp_for $w.which.btns.f$ft $FontInfo($ft,help)
7137		set row [expr 1+ $k/$PerRow]
7138		set col [expr $k%$PerRow]
7139		if {$FontTypes >= $PerRow} {
7140		    grid $w.which.btns.f$ft -row $row -column $col \
7141			-sticky we -ipadx 3 -padx $xpad -pady $ypad
7142		}
7143		incr k
7144	    }
7145	    if {$FontTypes < $PerRow} {
7146		foreach ft $FontList {
7147		    pack $w.which.btns.f$ft -side left -expand 1 -fill x \
7148			-ipadx 5 -ipady 3 -padx 40 -pady 3
7149		}
7150	    }
7151	    frame $w.which.pad  -height 4
7152	    pack $w.which.title -side top -expand 1 -fill both -anchor w
7153	    pack $w.which.btns  -side top -expand 1 -fill both -anchor w
7154	    pack $w.which.pad   -side top -expand 0 -fill x    -anchor w
7155
7156	}
7157
7158	frame $w.mid
7159	frame $w.mid.opts  -relief ridge -border 3
7160	frame $w.mid.families  -relief ridge -border 3
7161	label $w.mid.families.lab -text [_ "Family"] -relief ridge \
7162	    -justify center -font FontControlPanelFont
7163	listbox $w.mid.families.lb -height 1 -exportselection 0 \
7164	    -yscrollcommand "$w.mid.families.sbar set" -selectmode single \
7165	    -font FontControlPanelFont
7166	scrollbar $w.mid.families.sbar -orient vertical -command "$w.mid.families.lb yview"
7167	bind $w.mid.families.sbar <<B3>> \
7168	    "ScrollbarMoveBigIncrement $w.mid.families.sbar 0.20 %x %y"
7169
7170	bind $w.mid.families.lb <<B3>> ProvideFontDescription
7171
7172	pack $w.mid.families.lab  -side top -expand 0 -fill x
7173	pack $w.mid.families.lb   -side left -expand 1 -fill both
7174	pack $w.mid.families.sbar -side left -expand 1 -fill y
7175
7176	label $w.mid.opts.lab -text [_ "Attributes"] -relief ridge \
7177	    -justify center -font FontControlPanelFont
7178	label $w.mid.opts.sizel -text [_ "Size:"]  -font FontControlPanelFont
7179	scale $w.mid.opts.size -orient h -digit 1 -from 5 -to 55 \
7180	    -variable FontInfo(size)  -tickinterval 0 -length 150 \
7181	    -font FontControlPanelFont
7182	bind $w.mid.opts.size <<B3>> "ScaleMoveBigIncrement $w.mid.opts.size 5 %x %y"
7183
7184	label $w.mid.opts.weightl -text [_ "Bold:"] \
7185	    -font FontControlPanelFont
7186	checkbutton $w.mid.opts.weight -variable FontInfo(weight) \
7187	    -onvalue bold -offvalue normal  -font FontControlPanelFont
7188
7189	label $w.mid.opts.slantl -text [_ "Italic:"] \
7190	    -font FontControlPanelFont
7191	checkbutton $w.mid.opts.slant -variable FontInfo(slant) \
7192	    -onvalue italic -offvalue roman -font FontControlPanelFont
7193
7194	label $w.mid.opts.ulinel -text [_ "Underline:"] \
7195	    -font FontControlPanelFont
7196	checkbutton $w.mid.opts.uline -variable FontInfo(underline) \
7197	    -onvalue 1 -offvalue 0  -font FontControlPanelFont
7198
7199	label $w.mid.opts.strkovl -text [_ "Overstrike:"] \
7200	    -font FontControlPanelFont
7201	checkbutton $w.mid.opts.strkov -variable FontInfo(overstrike) \
7202	    -onvalue 1 -offvalue 0  -font FontControlPanelFont
7203
7204	grid $w.mid.opts.lab   -row 0 -column 0 -columnspan 2 -sticky ew
7205	grid $w.mid.opts.sizel -row 1 -column 0 -sticky w
7206	grid $w.mid.opts.size -row 1 -column 1 -sticky w
7207	grid $w.mid.opts.weightl -row 2 -column 0 -sticky w
7208	grid $w.mid.opts.weight -row 2 -column 1 -sticky w
7209	grid $w.mid.opts.slantl -row 3 -column 0 -sticky w
7210	grid $w.mid.opts.slant -row 3 -column 1 -sticky w
7211	grid $w.mid.opts.ulinel -row 4 -column 0 -sticky w
7212	grid $w.mid.opts.uline -row 4 -column 1 -sticky w
7213	grid $w.mid.opts.strkovl -row 5 -column 0 -sticky w
7214	grid $w.mid.opts.strkov -row 5 -column 1 -sticky w
7215
7216	pack $w.mid.families -side left -expand 1 -fill both -padx 5 -pady 2
7217	pack $w.mid.opts     -side left -expand 1 -fill both -padx 5 -pady 2
7218
7219	eval $w.mid.families.lb insert 0 [lsort [font families]]
7220
7221	bind $w.mid.families.lb <ButtonPress-1> {fontsel::SelectFontFamily %W %y}
7222
7223	frame $w.cntls -relief ridge -border 3
7224	button $w.cntls.sav -text [_ "Apply"]  -command fontsel::FontSave \
7225	    -font FontControlPanelFont
7226	button $w.cntls.res -text [_ "Reset"] -command  fontsel::ResetToDefaults \
7227	    -font FontControlPanelFont
7228	button $w.cntls.can -text [_ "Dismiss"] -command "wm withdraw $w" \
7229	    -font FontControlPanelFont
7230	button $w.cntls.cpanel -text [_ "Here Too?"] \
7231	    -command fontsel::CloneMainFontAsFontControlPanelFont \
7232	-font FontControlPanelFont
7233	pack $w.cntls.cpanel -side left  -expand 1 -fill both -padx 3
7234	pack $w.cntls.can    -side left  -expand 1 -fill both -padx 3
7235	pack $w.cntls.res    -side left  -expand 1 -fill both -padx 3
7236	pack $w.cntls.sav    -side right -expand 1 -fill both -padx 3
7237
7238	set msg [_ "Press this button to dismiss the popup."];
7239	balloonhelp_for $w.cntls.can $msg
7240	set msg [_ "Press this button to reset the font to its defaults."];
7241	balloonhelp_for $w.cntls.res $msg
7242	set msg [_ "Press this button to make the changes\nyou have made take effect."]
7243	balloonhelp_for $w.cntls.sav $msg
7244	set msg [format \
7245	     [_ "Press this button to set the fonts\nin this control panel to the %s font."] \
7246		     [_ $::FontInfo(MainFont,gloss)]]
7247	balloonhelp_for $w.cntls.cpanel $msg
7248
7249	frame $w.curcan -relief ridge -border 1
7250	set ATT [frame $w.curcan.att]
7251	set Row 0
7252	foreach r {Header Current Candidate} {
7253	    set Column 2
7254	    foreach p $FontPropertyList {
7255		set v $w.curcan.att.r${Row}c${Column};
7256		label $v  -font FontControlPanelFont
7257		incr Column;
7258	    }
7259	    incr Row;
7260	}
7261
7262	font create CurrentFontExampleFont \
7263	    -family $FontInfo($::WhichFontToSet,family) \
7264	    -size $FontInfo($::WhichFontToSet,size) \
7265	    -weight $FontInfo($::WhichFontToSet,weight) \
7266	    -slant $FontInfo($::WhichFontToSet,slant) \
7267	    -underline $FontInfo($::WhichFontToSet,underline) \
7268	    -overstrike $FontInfo($::WhichFontToSet,overstrike);
7269
7270	font create CandidateFontExampleFont \
7271	    -family $FontInfo($::WhichFontToSet,family) \
7272	    -size $FontInfo($::WhichFontToSet,size) \
7273	    -weight $FontInfo($::WhichFontToSet,weight) \
7274	    -slant $FontInfo($::WhichFontToSet,slant) \
7275	    -underline $FontInfo($::WhichFontToSet,underline) \
7276	    -overstrike $FontInfo($::WhichFontToSet,overstrike);
7277
7278	label $w.curcan.att.r0c0 -font FontControlPanelFont
7279	label $w.curcan.att.r0c1 -font FontControlPanelFont
7280	label $w.curcan.att.r1c0  -text [_ "Current"] -font FontControlPanelFont
7281	entry $w.curcan.att.r1c1 -font CurrentFontExampleFont -relief flat -width $exwid
7282	$w.curcan.att.r1c1 insert 0 [_ "example"]
7283	label $w.curcan.att.r2c0  -text [_ "Candidate"] -font FontControlPanelFont
7284	entry $w.curcan.att.r2c1 -font CandidateFontExampleFont -relief flat  -width $exwid
7285	$w.curcan.att.r2c1 insert 0 [_ "example"]
7286
7287	#This is for use in conjunction with my character insertion library.
7288	#It arranges for the various character insertion widgets to insert
7289	#characters into the focussed window.
7290	if {[llength [info commands BindInsertionTarget]]} {
7291	    BindInsertionTarget $w.curcan.att.r1c1;
7292	    BindInsertionTarget $w.curcan.att.r2c1;
7293	}
7294
7295	set CLR [frame $w.curcan.clr]
7296	set ln 60;
7297	set wd 10
7298	set trc \#D4B8C1
7299	scale $CLR.red -orient v -digit 1 -from 255 -to 0 -tickinterval 0 \
7300	    -variable FontRed  -showvalue 0 -length $ln -width $wd\
7301	    -troughcolor $trc -activebackground \#F0AAAA \
7302	    -bg red -fg yellow -command fontsel::UpdateFontExampleColor
7303	scale $CLR.grn -orient v -digit 1 -from 255 -to 0 -tickinterval 0 \
7304	    -variable FontGreen  -showvalue 0 -length $ln -width $wd\
7305	    -troughcolor $trc -activebackground \#AAF0AA \
7306	    -bg green -fg yellow -command fontsel::UpdateFontExampleColor
7307	scale $CLR.blu -orient v -digit 1 -from 255 -to 0 -tickinterval 0 \
7308	    -variable FontBlue  -showvalue 0 -length $ln -width $wd\
7309	    -troughcolor $trc -activebackground \#AAAAF0 \
7310	    -bg blue -fg yellow -command fontsel::UpdateFontExampleColor
7311	set FSCColors(red,bg)   0x00
7312	set FSCColors(green,bg) 0x00
7313	set FSCColors(blue,bg)  0x00
7314	set FSCColors(red,fg)   0x00
7315	set FSCColors(green,fg) 0x00
7316	set FSCColors(blue,fg)  0x00
7317
7318	bind $CLR.red <<B3>> "ScaleMoveBigIncrement $CLR.red -20 %x %y"
7319	bind $CLR.grn <<B3>> "ScaleMoveBigIncrement $CLR.grn -20 %x %y"
7320	bind $CLR.blu <<B3>> "ScaleMoveBigIncrement $CLR.blu -20 %x %y"
7321
7322	set ::FontRed   255
7323	set ::FontGreen 255
7324	set ::FontBlue  255
7325	set FontExampleColor \#FFFFFF
7326	label $CLR.rdt -textvariable FontExampleColor -width 7 -relief raised
7327	bind $CLR.rdt <Button-1> "pack forget $CLR"
7328	bind $ATT <Button-1> "pack $w.curcan.clr -before $ATT -side left -expand 1 -fill both"
7329	set msg [_ "Left click here to remove the color selector."]
7330	balloonhelp_for $CLR.rdt $msg;
7331	set msg [_ "Use this to set the colors in the example text boxes."]
7332	balloonhelp_for $CLR.red $msg;
7333	balloonhelp_for $CLR.grn $msg;
7334	balloonhelp_for $CLR.blu $msg;
7335
7336	frame $CLR.whi
7337	set ::FontExampleColorConfigureWhich bg;
7338	radiobutton $CLR.whi.t -variable FontExampleColorConfigureWhich \
7339	    -value fg -command fontsel::RestoreCSColors -text [_ "fg"] \
7340	    -indicatoron 0 -activebackground gray -selectcolor gray \
7341	    -font FontControlPanelFont
7342	radiobutton $CLR.whi.b -variable FontExampleColorConfigureWhich \
7343	    -value bg -command fontsel::RestoreCSColors -text [_ "bg"] \
7344	    -indicatoron 0 -activebackground gray -selectcolor gray \
7345	    -font FontControlPanelFont
7346	pack $CLR.whi.t -side left -expand 1 -fill both
7347	pack $CLR.whi.b -side left -expand 1 -fill both
7348
7349	pack $CLR.rdt -side top -expand 1  -fill both
7350	pack $CLR.whi -side bottom -expand 1  -fill both
7351	pack $CLR.red -side left -expand 1 -fill y
7352	pack $CLR.grn -side left -expand 1 -fill y
7353	pack $CLR.blu -side left -expand 1 -fill y
7354
7355	set msg [_ "Choose the color for the sample text."]
7356	balloonhelp_for $CLR.whi.t $msg;
7357	set msg [_ "Choose the background color for the sample text."]
7358	balloonhelp_for $CLR.whi.b $msg;
7359
7360	#Now grid them all
7361	set xp 5
7362	set yp 3
7363	set CLimit [expr [llength $FontPropertyList] + 2];
7364	for {set r 0} {$r < 3} {incr r} {
7365	    for {set c 0} {$c < $CLimit} {incr c} {
7366		set v $w.curcan.att.r${r}c${c};
7367		grid $v -row $r -column $c -sticky w -padx $xp -pady $yp
7368	    }
7369	}
7370
7371	set xp 3
7372	set yp 1
7373	if {!$General} {
7374	    $w.curcan.att.r0c0 configure -text [string totitle [_ $FontInfo($::WhichFontToSet,gloss)]]
7375	}
7376
7377	pack $w.curcan.clr -side left -expand 1 -fill both -padx 9 -pady 5
7378	pack $w.curcan.att -side left -expand 1 -fill both -padx 3 -pady 5
7379
7380	#Put it all together
7381	frame $w.botsep -height 4
7382	pack $w.which -side top -expand 1 -fill x -padx 8 -pady 6
7383	pack $w.curcan -side top -expand 1 -fill x -padx 8 -pady 6
7384	pack $w.mid   -side top -expand 1 -fill x -padx 8 -pady 1
7385	pack $w.cntls -side top -expand 1 -fill x -padx 8 -pady 2
7386	pack $w.botsep -side top -expand 1 -fill x -padx 8 -pady 2
7387	if {$General} {
7388	    $w.which.btns.f[lindex $FontList 0] invoke;#  Default to first on list
7389	}
7390	foreach f $FontPropertyList {
7391	    trace add variable FontInfo($f) write fontsel::FontShow;
7392	}
7393	return $w;
7394    }
7395
7396    #This resets the properties of the font specified by WhichFontToSet
7397    #to their default values, where "default" means whatever values
7398    #are stored in FontInfo(<font>,<property>,Default). The intention
7399    #is that these values will have been set by RecordDefaults at
7400    #a suitable point. A suitable point might be program startup or it
7401    #might be after init files have been read.
7402    #After resetting the attributes for the current font to their
7403    #default values, it configures the fonts for both the current and candidate
7404    #examples in the control panel to match.
7405    proc ResetToDefaults {} {
7406	global FontInfo;
7407	global WhichFontToSet
7408	variable FontPropertyList
7409
7410	foreach prop $FontPropertyList {
7411	    set FontInfo($::WhichFontToSet,$prop) $FontInfo($::WhichFontToSet,$prop,Default);
7412	    set FontInfo($prop) $FontInfo($::WhichFontToSet,$prop,Default);
7413	}
7414	ConfigureFont $::WhichFontToSet;
7415	ConfigureCurrentExampleFont;
7416	ConfigureCandidateExampleFont;
7417	DescribeBothFonts;
7418    }
7419
7420    #This is the procedure called from the control panel when the user decides
7421    #to apply and save the values set on the control panel. It sets the font-specific
7422    #attributes from the generic ones, configures the target font as well as the
7423    #current example font, and updates the description of the current font
7424    #in the control panel.
7425    proc FontSave {} {
7426	global FontInfo
7427
7428	set f $::WhichFontToSet;
7429	FontSet $f;
7430	ConfigureFont $f
7431	ConfigureCurrentExampleFont;
7432	DescribeBothFonts;
7433    }
7434
7435    #This procedure configures the font used to display the candidate example
7436    #in the control panel. It is intended to be called whenever a property
7437    #is changed in the control panel or when the target font is changed.
7438    proc ConfigureCandidateExampleFont {} {
7439	global FontInfo
7440	global WhichFontToSet
7441	variable FontPropertyList
7442
7443	foreach prop $FontPropertyList {
7444	    font configure CandidateFontExampleFont -$prop $FontInfo($prop)
7445	}
7446    }
7447
7448    #This procedure configures the font used to display the current example
7449    #in the control panel. It is intended to be called when the user
7450    #applies new values or when the target font is changed.
7451    proc ConfigureCurrentExampleFont {} {
7452	global FontInfo
7453	global WhichFontToSet
7454	variable FontPropertyList
7455
7456	foreach prop $FontPropertyList {
7457	    font configure CurrentFontExampleFont -$prop $FontInfo($::WhichFontToSet,$prop)
7458	}
7459    }
7460
7461    #This procedure configures the candidate example font#and updates the
7462    #description of the candidate font in the control panel. It is intended
7463    #to be called whenever a proprty of the candidate font is changed.
7464    proc FontShow {args} {
7465	ConfigureCandidateExampleFont;
7466	DescribeBothFonts;
7467    }
7468
7469    #This procedure generates the descriptions of the current and candidate
7470    #fonts that are shown in the control panel.
7471    proc DescribeBothFonts {} {
7472	global FontInfo
7473	global WhichFontToSet;
7474	variable FontPropertyList
7475
7476	set f $::WhichFontToSet;
7477	set c 2;
7478	foreach prop $FontPropertyList {
7479	    .selectFont.curcan.att.r0c$c configure -text  [string totitle [_ $prop]]
7480	    set value $FontInfo($f,$prop)
7481	    if {$value == 1} {set value [_ "Yes"]} else {
7482		if {$value == 0} {set value [_ "No"]}}
7483	    .selectFont.curcan.att.r1c$c configure -text $value;
7484	    set value $FontInfo($prop)
7485	    if {$value == 1} {set value [_ "Yes"]} else {
7486		if {$value == 0} {set value [_ "No"]}}
7487	    .selectFont.curcan.att.r2c$c configure -text $value;
7488	    incr c;
7489	}
7490    }
7491
7492#This is to be called when we change font targets.
7493#It resets the control panel to show the current
7494#configuration for the newly targeted font.
7495    proc SetFontSelectionDefaults {} {
7496	global FontInfo;
7497	global WhichFontToSet;
7498	variable FontPropertyList
7499
7500	foreach prop $FontPropertyList {
7501	    set FontInfo($prop) $FontInfo($WhichFontToSet,$prop);
7502	}
7503	set FontChoices [.selectFont.mid.families.lb size];
7504	set k 1;
7505	while {$k <= $FontChoices} {
7506	    set Family [.selectFont.mid.families.lb get $k];
7507	    if {[string equal $Family [string tolower $FontInfo($WhichFontToSet,family)]]} {
7508		.selectFont.mid.families.lb selection clear 0 end;
7509		.selectFont.mid.families.lb see $k
7510		.selectFont.mid.families.lb selection set $k $k;
7511		.selectFont.mid.families.lb activate $k;
7512		set FontInfo(family) [.selectFont.mid.families.lb get $k]
7513		break
7514	    }
7515	    incr k;
7516	}
7517	ConfigureCandidateExampleFont
7518	ConfigureCurrentExampleFont;
7519	DescribeBothFonts;
7520    }
7521
7522    #This is the callback that extracts a new font family
7523    #setting from the control panel.
7524    proc SelectFontFamily {w y} {
7525	global FontInfo
7526
7527	set index [$w nearest $y]
7528	if {$index != ""} {
7529	    set FontInfo(family) [$w get $index]
7530	}
7531    }
7532
7533    #This is the callback that extracts a new font size
7534    #from the control panel.
7535    proc SelectFontSize {w} {
7536	global WhichFontToSet
7537	global FontInfo
7538
7539	set size [$w get]
7540	if {[catch {expr round($size)} size] == 0} {
7541	    if { ($size > 0) && ($size <= 60) } {
7542		set FontInfo(size) $size
7543		return ;
7544	    }
7545	}
7546	$w delete 0 end
7547	$w insert 0 $FontInfo($WhichFontToSet,size)
7548    }
7549
7550    #This is presently a stub.
7551    #It is intended to be called on an event, probably <B3>,
7552    #in the font family listbox in the control panel.
7553    #Its purpose is to provide the user with information about
7554    #the particular font.
7555    proc ProvideFontDescription {w y} {
7556	variable FontDescriptions
7557
7558	set index [$w nearest $y]
7559	if {$index != ""} {
7560	    FontDescriptions([$w get $index])
7561	}
7562    }
7563
7564    #Create a command for setting each combination of font and property.
7565    proc DefineFontSettingProcs {} {
7566	variable FontPropertyList
7567	variable FontPropertyClass
7568	global FontList;
7569	global FontProcList;
7570
7571	foreach ft $FontList {
7572	    foreach prop $fontsel::FontPropertyList {
7573		if {[string equal $FontPropertyClass($prop) boolean]} {
7574		    set ProcName  [format "::fontsel::Set%s%sP" $ft [string totitle $prop]];
7575		    lappend FontProcList $ProcName;
7576		    set cmd [list "proc"  $ProcName  "\{v\}" \
7577			 "set ::FontInfo($ft,$prop) \[SlaveBoolean \$v\];\nConfigureFont $ft;"]
7578		} else {
7579		    set ProcName  [format "::fontsel::Set%s%s" $ft [string totitle $prop]];
7580		    lappend FontProcList $ProcName;
7581		    set cmd [list "proc" $ProcName "\{v\}" \
7582			 "set ::FontInfo($ft,$prop) \$v;\nConfigureFont $ft;"]
7583		}
7584		eval $cmd;
7585	    }
7586	}
7587    }
7588
7589    #Create aliases in the named daughter interpreter for the font setting commands
7590    proc AliasFontSettings {interp} {
7591	variable FontPropertyList
7592	variable FontPropertyClass
7593	global FontList;
7594
7595	foreach ft $FontList {
7596	    foreach prop $FontPropertyList {
7597		set Tprop [string totitle $prop]
7598		set Tprop2 $Tprop;
7599		if {[string equal $FontPropertyClass($prop) boolean]} {
7600		    set Tprop ${Tprop}P
7601		}
7602		eval [split [format "%s alias %s%s ::fontsel::Set%s%s" \
7603			 $interp $ft $Tprop $ft $Tprop2]]
7604	    }
7605	}
7606    }
7607
7608    #Returns a list of init file commands representing the current font settings.
7609    proc SaveFontSettings {} {
7610	variable FontPropertyList
7611	variable FontPropertyClass
7612	global FontInfo
7613	global FontList;
7614
7615	set cl [list]
7616	foreach ft $FontList {
7617	    foreach prop $FontPropertyList {
7618		set Tprop [string totitle $prop]
7619		if {[string equal $FontPropertyClass($prop) boolean]} {
7620		    set Tprop ${Tprop}P
7621		}
7622		lappend cl [format "%s%s %s" $ft $Tprop [list $FontInfo($ft,$prop)]]
7623	    }
7624	}
7625	return [lsort $cl];
7626    }
7627}
7628
7629namespace import ::msgcat::mcset;
7630
7631# End of namespace fontsel
7632
7633# This is the stuff specific to this program.
7634
7635set FontList [list MainFont MenuFont BalloonHelpFont PopupTitleFont CharacterEntryFont TextFont \
7636		  RegexpFont AccentedLetterFont DiacriticFont];
7637
7638set FontInfo(family) courier
7639set FontInfo(BalloonHelpFont,family) lucida
7640set FontInfo(PopupTitleFont,family) "bookman l"
7641set FontInfo(MainFont,family) courier
7642set FontInfo(MainFont,weight) bold
7643set FontInfo(MenuFont,family) courier
7644set FontInfo(MenuFont,weight) bold
7645set FontInfo(AccentedLetterFont,family) "code2000"
7646set FontInfo(CharacterEntryLabelFont,family) bible
7647set FontInfo(CharacterEntryFont,family) "doulos sil"
7648set FontInfo(RegexpFont,family)  "doulos sil"
7649
7650if {$TkEightFivePlusOnX11P} {
7651    set FontInfo(BalloonHelpFont,size) 10
7652    set FontInfo(PopupTitleFont,size) 13
7653    set FontInfo(MainFont,size)  9
7654    set FontInfo(MenuFont,size)  10
7655    set FontInfo(AccentedLetterFont,size) 11
7656    set FontInfo(CharacterEntryLabelFont,size) 10
7657    set FontInfo(CharacterEntryFont,size) 11
7658    set FontInfo(RegexpFont,size) 11
7659    set FontInfo(TextFont,size) 10
7660    set FontInfo(CharacterEntryFont,size) 11
7661} else {
7662    set FontInfo(BalloonHelpFont,size) 13
7663    set FontInfo(PopupTitleFont,size) 16
7664    set FontInfo(MainFont,size) 12
7665    set FontInfo(MenuFont,size) 12
7666    set FontInfo(AccentedLetterFont,size) 14
7667    set FontInfo(CharacterEntryLabelFont,size) 13
7668    set FontInfo(CharacterEntryFont,size) 14
7669    set FontInfo(RegexpFont,size) 13
7670    set FontInfo(TextFont,size) 12
7671    set FontInfo(CharacterEntryFont,size) 14
7672}
7673
7674set FontInfo(DiacriticFont,size)  [expr $FontInfo(CharacterEntryFont,size) + 40];
7675
7676proc SetFontGlossHelpTranslations {} {
7677    global FontInfo;
7678
7679    set FontInfo(BalloonHelpFont,gloss) [_ "balloon help"]
7680    set FontInfo(BalloonHelpFont,help) [_ "This font is used in help balloons."]
7681
7682    set FontInfo(TextFont,gloss) [_ "text"]
7683    set FontInfo(TextFont,help) [_ "This font is used in the three text windows."]
7684
7685    set FontInfo(MainFont,gloss) [_ "general"]
7686    set FontInfo(MainFont,help) [_ "This font is used for most things."]
7687
7688    set FontInfo(MenuFont,gloss) [_ "menu"]
7689    set FontInfo(MenuFont,help) [_ "This font is used for menu labels."]
7690
7691    set FontInfo(PopupTitleFont,gloss) [_ "popup titles"]
7692    set FontInfo(PopupTitleFont,help) [_ "This font is used for the titles of popup windows."]
7693
7694    set FontInfo(RegexpFont,gloss) "regexp"
7695    set FontInfo(RegexpFont,help) \
7696	[_ "This font is used for regular expressions\nand substitution expressions"];
7697
7698    set FontInfo(CharacterEntryFont,gloss) [_ "character entry"]
7699    set FontInfo(CharacterEntryFont,help) \
7700	[_ "This font is used on the labels of\ncharacter insertion widgets."]
7701    set FontInfo(AccentedLetterFont,gloss) [_ "accented letters"]
7702    set FontInfo(AccentedLetterFont,help) \
7703	[_ "This font is used on the labels of the\naccented character insertion widget."]
7704
7705    set FontInfo(DiacriticFont,gloss) [_ "diacritics"]
7706    set FontInfo(DiacriticFont,help) \
7707	[_ "This font is used on the labels of the\ndiacritic insertion widget."]
7708}
7709
7710SetFontGlossHelpTranslations;
7711fontsel::SetFontInfoDefaults;
7712fontsel::CreateFonts;
7713
7714option add *selectFont*Font FontControlPanelFont 100
7715option add *Label.Font MainFont 100
7716option add *Menu.Font MenuFont 100
7717option add *Radiobutton.Font MainFont 100
7718option add *Scale.Font MainFont 100
7719
7720#This is the history system.
7721namespace eval hist {
7722    namespace export AddToHistoryList ClearHistoryList ConstructHistory ParseHistoryEntry;
7723    namespace export PruneHistoryList SaveHistoryList ShowHistory ToggleHistory;
7724    namespace export ToggleHistoryProgramDisplay HistoryIsDisplayedP AddToHistoryFile ToggleHistoryMark;
7725    # 0xFDDF is a codepoint guaranteeed to be unused.
7726    # The same value must be used as the field separator when history
7727    # file entries are made in ExecuteRegexp, SaveRegexp, and
7728    # SaveHistoryList, and when they are parsed by ParseHistoryEntry.
7729    variable HistoryDelimiter "\uFDDF";
7730    variable HistoryIsDisplayedP 0;
7731    variable HistoryIsToBeDisplayedP 0;
7732    variable HistoryCnt 0;		# The number of entries in the history list
7733    variable HistoryCntOffset 0;	# The number of entries read from files rather than
7734    					# executed in the current session.
7735    variable HistoryMax 10		# The maximum number of history entries
7736    variable HistoryShowProgP 0;	# Should the history window display the program used?
7737    variable HistoryRegexps [list];	# Regular expression executed
7738    variable HistorySubexps [list];	# Substitution expression (may be null)
7739    variable HistoryMarks [list];	# Flag indicating whether entry is marked
7740    variable HistoryProgs [list];	# Program in use when regexp was executed
7741
7742    variable HistoryListIndex 0; #Used by color configuration system.
7743    variable HistoryListHandle;
7744    variable EventNumberFieldWidth 4;
7745    variable ProgramFieldWidth 12;
7746    variable LocalP 1;
7747    variable RecordHistoryP 1;
7748
7749    proc ShowHistory {} {
7750	pack $::HISTF.hlist -expand 1 -fill both
7751	wm deiconify .hl;
7752    }
7753
7754    proc OpenHistoryFile {} {
7755	variable RecordHistoryP;
7756	variable HistoryListHandle;
7757	variable LocalP;
7758	if {$LocalP} {
7759	    set hf $::HistoryFile;
7760	    if {[catch {open $hf "a"} HistoryListHandle] == 0} {
7761		return ;
7762	    } else {
7763		ShowMessage [format \
7764			 [_ "Unable to open history file %s for writing in directory %s."]\
7765			 $hf [pwd]];
7766		ShowMessage [_ "Using home directory instead."]
7767	    }
7768	}
7769	set hf [file join $::HomeDir $::HistoryFile]
7770	if {[catch {open $hf "a"} HistoryListHandle] != 0} {
7771	    ShowMessage [format [_ "Unable to open history file %s for writing."] $hf];
7772	    ShowMessage [_ "History will not be automatically recorded."];
7773	    set RecordHistoryP 0;
7774	}
7775    }
7776
7777    proc ParseHistoryEntry {entry} {
7778	variable HistoryProgs;
7779	variable HistoryRegexps;
7780	variable HistorySubexps;
7781	variable HistoryMarks;
7782	variable HistoryDelimiter;
7783
7784	set Fields [split $entry $HistoryDelimiter];
7785	set FieldCnt [llength $Fields];
7786	lappend HistoryProgs [string trim  [lindex $Fields 0]];
7787	lappend HistoryRegexps [lindex $Fields 1];
7788	if {$FieldCnt > 2} {
7789	    lappend HistorySubexps [lindex $Fields 2];
7790	} else {
7791	    lappend HistorySubexps "";
7792	}
7793	lappend HistoryMarks 0;
7794    }
7795
7796    #Delete all the entries from the history list
7797    proc ClearHistoryList {} {
7798	variable HistoryCnt;
7799	variable HistoryCntOffset;
7800	variable HistoryRegexps;
7801	variable HistorySubexps;
7802	variable HistoryMarks;
7803	variable HistoryProgs;
7804	variable HistoryIsDisplayedP;
7805	variable ToggleHistoryIndex;
7806	global m;
7807
7808	set HistoryRegexps [lreplace $HistoryRegexps 0 end];
7809	set HistorySubexps [lreplace $HistorySubexps 0 end];
7810	set HistoryMarks   [lreplace $HistoryMarks 0 end];
7811	set HistoryProgs   [lreplace $HistoryProgs 0 end];
7812	set HistoryCnt 0;
7813	set HistoryCntOffset 0;
7814	if {$HistoryIsDisplayedP} {
7815	    destroy .hl;
7816	    set HistoryIsDisplayedP 0;
7817	    $m.history entryconfigure $ToggleHistoryIndex -label [_ "Popup History List"];
7818	}
7819	update;
7820    }
7821
7822    #Delete the unmarked entries from the history list
7823    proc PruneHistoryList {} {
7824	variable HistoryCnt;
7825	variable HistoryCntOffset;
7826	variable HistoryRegexps;
7827	variable HistorySubexps;
7828	variable HistoryMarks;
7829	variable HistoryProgs;
7830	variable HistoryIsDisplayedP;
7831	variable ToggleHistoryIndex;
7832	global m;
7833
7834	set MaxIndex [expr $HistoryCnt -1];
7835	for {set i $MaxIndex} {$i >= 0} {incr i -1} {
7836	    if {[lindex $HistoryMarks $i] == 0} { #if not marked, delete entry
7837		set HistoryRegexps [lreplace $HistoryRegexps $i $i];
7838		set HistorySubexps [lreplace $HistorySubexps $i $i];
7839		set HistoryMarks [lreplace $HistoryMarks $i $i];
7840		set HistoryProgs [lreplace $HistoryProgs $i $i];
7841		incr HistoryCnt -1;
7842	    } else {#if marked, retain but unset mark
7843		set HistoryMarks [lreplace $HistoryMarks $i $i 0];
7844	    }
7845	}
7846	set HistoryCntOffset 0;
7847	if {$HistoryCnt > 0} {
7848	    ConstructHistory;
7849	} else {
7850	    if {$HistoryIsDisplayedP} {
7851		pack forget $::HISTF.hlist
7852		pack forget $::HISTF
7853		pack forget .hl
7854		destroy .hl;
7855		set HistoryIsDisplayedP 0;
7856		$m.history entryconfigure $ToggleHistoryIndex -label [_ "Popup History List"];
7857	    }
7858	}
7859	update;
7860    }
7861
7862    proc ReadHistoryFile {FileName} {
7863	variable HistoryCnt;
7864	variable HistoryCntOffset;
7865	variable HistoryMax;
7866	if {[catch {open $FileName "r"} HistoryHandle] == 0} {
7867	    while { [gets $HistoryHandle line] > 0} {
7868		ParseHistoryEntry $line;
7869		incr HistoryCnt;
7870		if {$HistoryCnt >= $HistoryMax} { break }
7871	    }
7872	    set HistoryCntOffset $HistoryCnt;
7873	    close $HistoryHandle;
7874	} else {
7875	    ShowMessage [format [_ "Failed to open history file %s"] $FileName];
7876	}
7877    }
7878
7879    proc SaveHistoryList {} {
7880	variable HistoryRegexps;
7881	variable HistorySubexps;
7882	variable HistoryProgs;
7883	variable HistoryCnt;
7884	variable HistoryDelimiter;
7885	variable ProgramFieldWidth;
7886	variable HistoryMax;
7887
7888	if {$HistoryCnt == 0} {
7889	    ShowMessage [_ "There is nothing on the history list to save."];
7890	    return;
7891	}
7892	set HistorySaveFile [tk_getSaveFile -initialfile [_ "SavedHistoryList"]];
7893	if {[ string equal $HistorySaveFile ""] ==1} {
7894	    ShowMessage [_ "File selection cancelled."]
7895	    return;
7896	} else {
7897	    if { [catch {open $HistorySaveFile "w+"} HistorySaveHandle] != 0} {
7898		ShowMessage [format [_ "Unable to open file %s to save history."] \
7899				 [MinimizeFileName $HistorySaveFile]];
7900		return ;
7901	    }
7902	}
7903	if {$HistoryCnt >= $HistoryMax} {
7904	    set Limit $HistoryMax
7905	} else {
7906	    set Limit $HistoryCnt
7907	}
7908	for {set i 0} {$i < $Limit} {incr i} {
7909
7910	    puts $HistorySaveHandle [format "%*s%s%s%s%s" $ProgramFieldWidth [lindex $HistoryProgs $i] $HistoryDelimiter [lindex $HistoryRegexps $i] $HistoryDelimiter [lindex $HistorySubexps $i]];
7911	}
7912	close $HistorySaveHandle;
7913	ShowMessage [format [_ "History list saved in %s."] [MinimizeFileName $HistorySaveFile]];
7914    }
7915
7916    proc ToggleHistoryProgramDisplay {} {
7917	variable HistoryShowProgP;
7918	variable HistoryShowProgIndex;
7919	variable HistoryIsToBeDisplayedP;
7920	global m;
7921
7922	if { $HistoryShowProgP == 0} {
7923	    set HistoryShowProgP 1;
7924	    $m.history entryconfigure $HistoryShowProgIndex -label [_ "Do Not Show Program"];
7925	} else {
7926	    set HistoryShowProgP 0;
7927	    $m.history entryconfigure $HistoryShowProgIndex -label [_ "Show Program"];
7928	}
7929	ConstructHistory;
7930    }
7931
7932    proc ToggleHistory {} {
7933	variable HistoryIsDisplayedP;
7934	variable HistoryIsToBeDisplayedP;
7935	variable ToggleHistoryIndex;
7936	global m;
7937
7938	if {[winfo exists $::HISTF.hlist] == 0} {
7939	    if {[ConstructHistory] == 1} {return;}
7940	}
7941	if { $HistoryIsDisplayedP == 0} {
7942	    pack $::HISTF.hlist
7943	    wm deiconify .hl
7944	    set HistoryIsDisplayedP 1;
7945	    set HistoryIsToBeDisplayedP 1;
7946	    $m.history entryconfigure $ToggleHistoryIndex -label [_ "Hide History"];
7947	} else {
7948	    pack forget $::HISTF.hlist
7949	    wm iconify .hl
7950	    set HistoryIsDisplayedP 0;
7951	    set HistoryIsToBeDisplayedP 0;
7952	    $m.history entryconfigure $ToggleHistoryIndex -label [_ "Popup History"];
7953	}
7954    }
7955
7956    proc HistoryDestroyed {} {
7957	variable HistoryIsDisplayedP;
7958	variable HistoryIsToBeDisplayedP;
7959	variable ToggleHistoryIndex;
7960	global m;
7961
7962	set HistoryIsDisplayedP 0;
7963	set HistoryIsToBeDisplayedP 0;
7964	$m.history entryconfigure $ToggleHistoryIndex -label [_ "Popup History List"];
7965    }
7966
7967    proc AddToHistoryList {re se pr} {
7968	variable HistoryCnt;
7969	variable HistoryRegexps;
7970	variable HistoryMarks;
7971	variable HistoryProgs;
7972	variable HistorySubexps;
7973
7974	incr HistoryCnt;
7975	lappend HistoryRegexps $re;
7976	lappend HistoryMarks 0;
7977	lappend HistoryProgs $pr;
7978	lappend HistorySubexps $se;
7979    }
7980
7981    proc AddToHistoryFile {re se pr} {
7982	variable HistoryDelimiter;
7983	variable HistoryListHandle;
7984	variable ProgramFieldWidth;
7985	variable RecordHistoryP;
7986
7987	if {$RecordHistoryP} {
7988	    puts $HistoryListHandle \
7989		[format "%*s%s%s%s%s" \
7990	     $ProgramFieldWidth $pr $HistoryDelimiter $re $HistoryDelimiter $se];
7991	}
7992    }
7993
7994    #Extract the event number from a history entry and convert it into the real
7995    #index into the history list.
7996    #We have to strip leading zeroes (including those following a negative sign)
7997    #so that Tcl won't think that the string represents an octal number.
7998    proc HistoryEntryToIndex {EntryLine} {
7999	variable HistoryCntOffset;
8000
8001	set RawIndexString [string range $EntryLine 0 [string first " " $EntryLine]];
8002	if {[string match  "-*" $RawIndexString]} {
8003	    set StrippedString [string trimleft [string range $RawIndexString 1 end] "0"];
8004	    if {[string equal $StrippedString ""]} {set StrippedString 0}
8005	    set OffsetIndex [expr 0 - $StrippedString];
8006	} else {
8007	    set StrippedString [string trimleft $RawIndexString "0"];
8008	    if {[string equal $StrippedString ""]} {
8009		set OffsetIndex 0;
8010	    } else {
8011		set OffsetIndex $StrippedString;
8012	    }
8013	}
8014	return [expr $OffsetIndex + $HistoryCntOffset -1];
8015    }
8016
8017    #Toggles the marked status of the active entry in the history list.
8018    proc ToggleHistoryMark {} {
8019	variable HistoryCnt;
8020	variable HistoryMarks;
8021
8022	set RHIndex [HistoryEntryToIndex [$::HISTF.hlist get active]];
8023	if { [lindex $HistoryMarks $RHIndex] == 1} {
8024	    set HistoryMarks [lreplace $HistoryMarks $RHIndex $RHIndex 0];
8025	    $::HISTF.hlist itemconfigure [expr $HistoryCnt - $RHIndex -1] -foreground \#00000000ffff; #blue
8026	} else {
8027	    set HistoryMarks [lreplace $HistoryMarks $RHIndex $RHIndex 1];
8028	    $::HISTF.hlist itemconfigure [expr $HistoryCnt - $RHIndex -1] -foreground \#ffff11111111; #red
8029	}
8030    }
8031
8032    # Insert the regexp and subexp of the active history list entry.
8033    proc InsertHistoryEntry {} {
8034	variable HistoryRegexps;
8035	variable HistorySubexps;
8036
8037	set hi [HistoryEntryToIndex [$::HISTF.hlist get active]];
8038	$::REG  insert insert [lindex $HistoryRegexps $hi];
8039	$::SUB insert insert [lindex $HistorySubexps $hi];
8040    }
8041
8042    # Return 0 if created, 1 if not created (due to empty history list).
8043    proc ConstructHistory {} {
8044	global ColorSpecs;
8045	global UseScrollbarsP;
8046	variable ProgramFieldWidth;
8047	variable EventNumberFieldWidth;
8048	variable ProgramFieldWidth;
8049	variable HistoryRegexps;
8050	variable HistorySubexps;
8051	variable HistoryMarks;
8052	variable HistoryProgs;
8053	variable HistoryCnt;
8054	variable HistoryCntOffset;
8055	variable HistoryIsDisplayedP;
8056	variable HistoryIsToBeDisplayedP;
8057	variable HistoryShowProgP;
8058
8059	pack forget $::HISTF.sbar;
8060	if {$HistoryCnt == 0} {
8061	    ShowMessage [_ "There is nothing on the history list."];
8062	    return 1;
8063	}
8064	if {[winfo exists .hl] == 0} {toplevel .hl}
8065	wm withdraw .hl
8066	if {[winfo exists $::HISTF] == 0} {frame $::HISTF}
8067	pack $::HISTF -expand 1 -fill both
8068	if {[winfo exists $::HISTF.hlist] == 0} {
8069	    set Height 12
8070	    listbox $::HISTF.hlist -height $Height -width 0 -font RegexpFont \
8071		-fg $ColorSpecs(HistoryList,Foreground) \
8072		-bg $ColorSpecs(HistoryList,Background) -yscrollcommand {$::HISTF.sbar set}
8073	    scrollbar $::HISTF.sbar -command {$::HISTF.hlist yview} \
8074		-trough $::ColorSpecs(HistoryList,Background);
8075	    bind $::HISTF.sbar <<B3>> "ScrollbarMoveBigIncrement $::HISTF.sbar 0.20 %x %y"
8076	} else {$::HISTF.hlist delete 0 end}
8077	for {set i [expr $HistoryCnt -1]} {$i >= 0} {incr i -1} {
8078	    set UserIndex [expr $i - $HistoryCntOffset +1];
8079	    if {$HistoryShowProgP} {
8080		$::HISTF.hlist insert end [format "%0*d %-*s  %s  %s" $EventNumberFieldWidth \
8081			  $UserIndex $ProgramFieldWidth [lindex $HistoryProgs $i] \
8082			  [lindex $HistoryRegexps $i] [lindex $HistorySubexps $i]];
8083	    } else {
8084		$::HISTF.hlist insert end [format "%0*d  %s  %s" $EventNumberFieldWidth $UserIndex \
8085			  [lindex $HistoryRegexps $i] [lindex $HistorySubexps $i]];
8086	    }
8087	    if {[lindex $HistoryMarks $i] == 1} {
8088		$::HISTF.hlist itemconfigure [expr $HistoryCnt - $i -1]  -foreground \#ffff11111111; #red
8089	    }
8090	}
8091	BindKeys .hl;
8092	bind $::HISTF.hlist <Button-1> {+
8093	    hist::ToggleHistoryMark;
8094	}
8095	bind $::HISTF.hlist <<B3>> {
8096	    hist::InsertHistoryEntry;
8097	}
8098	bind $::HISTF.hlist <Destroy> {
8099	    hist::HistoryDestroyed;
8100	}
8101	balloonhelp_for $::HISTF.hlist  \
8102	    [_ "Left click to select and toggle mark.\nRight click to insert into regular expression."];
8103	if {$HistoryIsToBeDisplayedP} {
8104	    ShowHistory
8105	}
8106	return 0;
8107    }
8108}
8109
8110#Check whether the PCRE regexp extension to PHP is available on this system
8111proc PHPPCREAvailable {} {
8112    global CommandFile;
8113
8114    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
8115	ShowMessage [format [_ "Unable to open %s."] $CommandFile];
8116	return -2;
8117    }
8118    puts $CommandHandle "<?php if (preg_match('t', 't')){\n\t\tprintf('Success\\n');\n}?>";
8119    close $CommandHandle;
8120    if { [catch {set result [exec php -f $CommandFile]}] != 0} {
8121	return 0;
8122    }
8123    if { [string length $result]  > 0 } {
8124	return 1;
8125    }
8126    return 0;
8127}
8128
8129#Check whether the multibyte extension to PHP is available on this system
8130
8131proc PHPMBAvailable {} {
8132    global CommandFile;
8133
8134    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
8135	ShowMessage [format [_ "Unable to open %s."] $CommandFile];
8136	return -2;
8137    }
8138    puts $CommandHandle "<?php mb_regex_encoding('UTF-8';\nif (mb_ereg('t', 't')){\n\t\tprintf('Success\\n');\n}?>";
8139    close $CommandHandle;
8140    if { [catch {set result [exec php -f $CommandFile]}] != 0} {
8141	return 0;
8142    }
8143    if { [string length $result]  > 0 } {
8144	return 1;
8145    }
8146    return 0;
8147}
8148
8149# tk_exec is like exec but allows updates while the child process is running.
8150proc tk_exec_fileevent {id} {
8151    global tk_exec_data
8152    global tk_exec_cond
8153    global tk_exec_pipe
8154
8155    if {[eof $tk_exec_pipe($id)]} {
8156	fileevent $tk_exec_pipe($id) readable ""
8157	set tk_exec_cond($id) 1
8158	return
8159    }
8160    append tk_exec_data($id) [read $tk_exec_pipe($id) 1024]
8161  }
8162
8163  proc tk_exec {args} {
8164      global tk_exec_id
8165      global tk_exec_data
8166      global tk_exec_cond
8167      global tk_exec_pipe
8168
8169      if {![info exists tk_exec_id]} {
8170	  set tk_exec_id 0
8171      } else {
8172	  incr tk_exec_id
8173      }
8174      set keepnewline 0
8175
8176      for {set i 0} {$i < [llength $args]} {incr i} {
8177	  set arg [lindex $args $i]
8178	  switch -glob -- $arg {
8179	      -keepnewline {
8180		  set keepnewline 1
8181	      }
8182	      -- {
8183		  incr i
8184		  break
8185	      }
8186	      -* {
8187		  error "unknown option: $arg"
8188	      }
8189	      ?* {
8190		  break
8191	      }
8192	  }
8193      }
8194      if {$i > 0} {
8195	  set args [lrange $args $i end]
8196      }
8197      set pipe [open "|$args" r]
8198      set tk_exec_pipe($tk_exec_id) $pipe
8199      set tk_exec_data($tk_exec_id) ""
8200      set tk_exec_cond($tk_exec_id) 0
8201      set tk_exec_pipe(pid) [lindex [pid $pipe] 0]
8202
8203      fconfigure $pipe -blocking 0
8204      fileevent $pipe readable "tk_exec_fileevent $tk_exec_id"
8205      vwait tk_exec_cond($tk_exec_id)
8206      if {$keepnewline} {
8207	  set data $tk_exec_data($tk_exec_id)
8208      } else {
8209	  set data [string trimright $tk_exec_data($tk_exec_id) \n]
8210      }
8211
8212      unset tk_exec_pipe($tk_exec_id)
8213      unset tk_exec_data($tk_exec_id)
8214      unset tk_exec_cond($tk_exec_id)
8215
8216      if {[catch {close $pipe} err]} {
8217	  error "pipe error: $err"
8218      }
8219      return $data
8220  }
8221
8222proc CheckProgramAvailability {} {
8223    #If we're running, tcl is obviously available.
8224    set ::ProgramInfo(tcl,AvailableP) 1;
8225    set ::ProgramInfo(tclglob,AvailableP) 1;
8226
8227    foreach prog $::ProgList {
8228	if {!([expr [string equal $prog "tcl"] || \
8229	       [string equal $prog "tclglob"]])} {
8230	    if {[string length [auto_execok $::ExecName($prog)]] == 0} {
8231		set ::ProgramInfo($prog,AvailableP) 0;
8232	    } else {
8233		set ::ProgramInfo($prog,AvailableP) 1;
8234	    }
8235	}
8236    }
8237    #Maybe add check for file patmatch.pl too?
8238    if {[string length [auto_execok nrgrep_coords]] == 0} {
8239	set ::ProgramInfo(patmatch,AvailableP) 0;
8240    }
8241    if {$::ProgramInfo(sleep,AvailableP)} {
8242	set ::ProgramInfo(sleepwc,AvailableP) 1;
8243    }
8244    if {$::ProgramInfo(php,AvailableP)} {
8245	set ::ProgramInfo(php-posix,AvailableP) 1;
8246	set ::ProgramInfo(php-mb,AvailableP) [PHPMBAvailable];
8247	set ::ProgramInfo(php-pcre,AvailableP) [PHPPCREAvailable];
8248    } else {
8249	set ::ProgramInfo(php-posix,AvailableP) 0;
8250	set ::ProgramInfo(php-mb,AvailableP) 0;
8251	set ::ProgramInfo(php-pcre,AvailableP) 0;
8252    }
8253    if {$::ProgramInfo(arena,AvailableP)} {
8254	if {![CheckRegexpAvailabilityArena]} {
8255	    set ::ProgramInfo(arena,AvailableP) 0;
8256	    ShowMessage [_ "Arena was not built with regular expression support."]
8257	}
8258    }
8259}
8260
8261proc MarkProgramAvailability {} {
8262    set index 0;
8263    foreach prog $::DetailedProgList {
8264	    incr index;
8265	if {!$::ProgramInfo($prog,AvailableP)} {
8266	    .menubar.program entryconfigure $index -state disabled
8267	} else {
8268	    .menubar.program entryconfigure $index -state normal
8269	}
8270    }
8271}
8272
8273#Sets the color of program menu buttons to show whether the program has been
8274#tested in the current locale.
8275proc MarkProgramTested {} {
8276    set index 0;
8277    foreach prog $::DetailedProgList {
8278	incr index;
8279	if {[FeaturesUnSetP $prog $::InterfaceLocale]} {
8280	    .menubar.program entryconfigure $index \
8281		-foreground $::ColorSpecs(Menu,Foreground)
8282	    .menubar.program entryconfigure $index \
8283		-background $::ColorSpecs(Menu,Background)
8284	} else {
8285	    .menubar.program entryconfigure $index \
8286		-foreground $::ColorSpecs(ProgramMenu,TestedForeground)
8287	    .menubar.program entryconfigure $index \
8288		-background $::ColorSpecs(ProgramMenu,TestedBackground)
8289	}
8290    }
8291}
8292
8293proc SelectProgram {prog} {
8294    global Program;
8295    global program;
8296    global m;
8297    global PHPMB;
8298    global PHPPCRE;
8299    global ButtonName;
8300    global ExecName;
8301    global Features;
8302    global InterfaceLocale;
8303    global LeftImplicitStar;
8304    global RightImplicitStar;
8305    global FeatureTestDebugP;
8306
8307    ClearMessageWindow;
8308    if {$::TestingFeaturesP} {
8309	ShowMessage \
8310	    [_ "Please wait until the current feature test is completed."]
8311	return 0
8312    }
8313    set ::PreviousProgram $program;
8314    set ActualProgram $prog;
8315    if {[string range $prog 0 3] == "php-"} {
8316	set ActualProgram "php";
8317    }
8318    set Prog [format "%s%s" \
8319	  [string toupper [string range $ActualProgram 0 0]] \
8320	  [string range $ActualProgram 1 end]];
8321
8322    #If we're running, tcl is obviously available.
8323    if {![expr [string equal $ActualProgram "tcl"] || [string equal $ActualProgram "tclglob"]]} {
8324	if {![info exists ExecName($ActualProgram)]} {
8325	    ShowMessage [format [_ "Redet does not support the program %s."] $ActualProgram]
8326	    return 0;
8327	}
8328	if { [string length [auto_execok $ExecName($ActualProgram)]]  == 0 } {
8329	    ShowMessage [format [_ "%s is not available on this machine or not in your path."] $Prog];
8330	    return 0;
8331	}
8332    }
8333    set ::ProgramInfo($ActualProgram,version) [GetVersion $ActualProgram];
8334
8335    set PHPMB 0;
8336    set PHPPCRE 0;
8337    if { $ActualProgram == "php" } {
8338	set suffix [string range $prog 4 end];
8339	if { $suffix == "mb"} {
8340	    if {[PHPMBAvailable] == 0} {
8341		set PHPMB 1;
8342	    } else {
8343		ShowMessage [_ "The multibyte extension to PHP is not available."];
8344		return 0;
8345	    }
8346	}
8347	if { $suffix == "pcre"} {
8348	    if {[PHPPCREAvailable] == 0} {
8349		set PHPPCRE 1;
8350	    } else {
8351		ShowMessage [_ "The PCRE extension to PHP is not available."];
8352		return 0;
8353	    }
8354	}
8355    }
8356    if {[string equal $ActualProgram sed]} {
8357	WhichSed;
8358	ShowMessage [format "Identified sed as %s" $::ProgramInfo(sed,Which)]
8359    }
8360    set program $ActualProgram;
8361    set Program $Prog;
8362    set ButtonName [format "%s%s" [string toupper [string range $prog 0 0]] [string range $prog 1 end]];
8363    if { [FeaturesUnSetP $program $InterfaceLocale] } {
8364	TestFeatures
8365	RefreshProginfo;
8366    }
8367    if {$FeatureTestDebugP} {
8368	puts "Program is now $program";
8369	puts "Size of Features array [array size Features]";
8370    }
8371    ConstructPalette;
8372    if { [FeaturesUnSetP $program $InterfaceLocale] == 0} {
8373	if {$Features(embedding,$program,$InterfaceLocale) || \
8374		 $Features(embeddingLeft,$program,$InterfaceLocale) || \
8375		$Features(EmbeddingMatchOnly,$program,$InterfaceLocale)} {
8376	    set LeftImplicitStar "*";
8377	} else {
8378	    set LeftImplicitStar "^";
8379	}
8380	if {$Features(embedding,$program,$InterfaceLocale) || \
8381		$Features(embeddingRight,$program,$InterfaceLocale) || \
8382		$Features(EmbeddingMatchOnly,$program,$InterfaceLocale)} {
8383	    set RightImplicitStar "*";
8384	} else {
8385	    set RightImplicitStar "$";
8386	}
8387	set ExecLabel [format [_ "Execute-%s%s%s"] $LeftImplicitStar $ButtonName $RightImplicitStar]
8388    } else {
8389	set ExecLabel [format [_ "Execute-%s"]  $ButtonName];
8390    }
8391
8392    if {$::AquaP} {
8393	.cmnds.execute configure -text $ExecLabel;
8394    } else {
8395	$m entryconfigure 2 -label $ExecLabel;
8396    }
8397    UpdateProgramControlPanel;
8398    CheckUserClassAvailability;
8399    CheckModeCompatibility;
8400    return 1;
8401}
8402
8403proc CheckUserClassAvailability {} {
8404    if {[info exists ::Features(alttype,$::program,$::InterfaceLocale)]} {
8405	if {$::UserClassCnt > 0 && ($::Features(alttype,$::program,$::InterfaceLocale) == 0)} {
8406	    PopupAlert "UserClass" [format [_ "Warning: named character classes are defined\nbut %s does not support them."] $::program];
8407	    ShowMessage [format [_ "Warning: named character classes are defined\nbut %s does not support them."] $::program];
8408	}
8409    }
8410}
8411
8412proc CheckModeCompatibility {} {
8413    if {($::DoSubstitutionsP == 1) && ([info exists ::ExecCmd($::program,sub)] ==0) } {
8414	PopupAlert "Sub" [format \
8415	      [_ "Warning: redet is in substitution mode\nbut %s does not support substitution."] $::program];
8416	ShowMessage [format \
8417		 [_ "Warning: redet is in substitution mode but %s does not support substitution."] $::program];
8418	return 0;
8419    }
8420    if {($::DoSubstitutionsP == 0) && ([info exists ::ExecCmd($::program,match)] ==0) } {
8421	PopupAlert "Sub" [format \
8422	      [_ "Warning: redet is in match mode\nbut %s does not support matching."] $::program];
8423	ShowMessage [format \
8424	 [_ "Warning: redet is in match mode but %s does not support matching."] $::program];
8425	return 0;
8426    }
8427    return 1;
8428}
8429
8430proc YViewBothPalette {args} {
8431    set ac [llength $args];
8432    set a  [lindex $args 0]
8433    set b  [lindex $args 1]
8434    if {$ac == 3} {
8435	set c  [lindex $args 2]
8436	$::PALF.lba yview $a $b $c;
8437	$::PALF.lbb yview $a $b $c;
8438    } else {
8439	$::PALF.lba yview $a $b;
8440	$::PALF.lbb yview $a $b;
8441    }
8442}
8443
8444
8445proc DefineUserEtextProc {name etext} {
8446    set procname Explain$name
8447    set etext [lindex $etext 0]
8448    eval [list "proc" $procname \
8449	      \
8450	      "" \
8451    "global HPWidth;
8452    global HPLines;
8453    global PopupList;
8454    if \{\[PopupDown $name\] ==1\} \{return\}
8455    set po \[CreateTextDisplay \"$name\" \$HPWidth \$HPLines\]
8456    BindKeys \$po;
8457    set PopupList($name) \$po;
8458    AppendToTextDisplay \$po \"$etext\""]
8459}
8460
8461proc ConstructPalette {} {
8462    global Palette;
8463    global Program;
8464    global program;
8465    global InterfaceLocale;
8466    global Features;
8467    global PropertyList
8468    global PropertyUse
8469    global PaletteIsDisplayedP;
8470    global PaletteToBeDisplayedP;
8471    global PaletteFeatures;
8472    global UserPalette;
8473    global ButtonName;
8474    global FeatureTestP;
8475    global ColorSpecs;
8476    global linkNum;
8477
8478    destroy $::PALF.lba;
8479    destroy $::PALF.lbb;
8480    destroy $::PALF.sbar;
8481    set PaletteIsDisplayedP 0;
8482
8483    #See if we have a record of palette features for this program.
8484    if { [FeaturesUnSetP $program $InterfaceLocale] } {
8485	ShowMessage [_ "No feature list is available for this program and locale."]
8486	if {$FeatureTestP == 0} {
8487	    ShowMessage [_ "Feature testing is disabled."]
8488	}
8489	return;
8490    }
8491    #See if this program supports any palette features.
8492    set fcnt 0;
8493    foreach x $PropertyList {
8494	if {$PropertyUse($x,PaletteP)} {
8495	    set fcnt [expr $Features($x,$program,$InterfaceLocale) + $fcnt];
8496	}
8497    }
8498    set PaletteFeatures [expr $fcnt + $UserPalette($program,0)];
8499    if {$PaletteFeatures == 0} {
8500	destroy .pal;
8501	return
8502    }
8503    if {[winfo exists .pal] == 0} {toplevel .pal}
8504    if {[winfo exists $::PALF] == 0} {frame $::PALF}
8505    if {[string equal $program agrep]} {
8506	if {$::ProgramInfo(agrep,TreAgrepP) == 1} {
8507	    set which "TRE Agrep"
8508	} elseif {$::ProgramInfo(agrep,TreAgrepP) == 0} {
8509	    set which "Wu-Manber Agrep"
8510	} else {
8511	    set which "Agrep";
8512	}
8513	set TitleName $which
8514    } else {
8515	set TitleName $ButtonName
8516    }
8517    wm title .pal [format [_ "Regular Expression Palette for %s"] $TitleName];
8518    wm withdraw .pal;
8519
8520    if {$PaletteFeatures < $::PaletteHeightLimit} {
8521	set ht $PaletteFeatures;
8522    } else {
8523	set ht $::PaletteHeightLimit;
8524    }
8525    text $::PALF.lba -bd 0 -relief flat \
8526	-bg $ColorSpecs(PaletteGloss,Background) -fg $ColorSpecs(PaletteGloss,Foreground) \
8527	-font MainFont 	-yscrollcommand {$::PALF.sbar set} -width 62 -height $ht
8528    text  $::PALF.lbb -bd 0 -relief flat \
8529	-bg $ColorSpecs(PaletteNotation,Background) -fg $ColorSpecs(PaletteNotation,Foreground) \
8530	-font MainFont -yscrollcommand {$::PALF.sbar set} -width 28 -height $ht
8531
8532    scrollbar $::PALF.sbar -command {YViewBothPalette} \
8533	-troughcolor $::ColorSpecs(PaletteNotation,Background) \
8534	-bg $::ColorSpecs(PaletteNotation,Background) \
8535	-activebackground $::ColorSpecs(PaletteScrollbarSlider,Highlight)
8536
8537    grid rowconfigure $::PALF 0 -weight 1;
8538    grid columnconfigure $::PALF {0 1} -weight 1;
8539    grid columnconfigure $::PALF 2 -weight 0;
8540    grid configure $::PALF.lba $::PALF.lbb -sticky nsew;
8541    if {$::UseScrollbarsP} {
8542	grid configure $::PALF.sbar -row 0 -column 2 -sticky ns;
8543    }
8544    pack $::PALF -expand 1 -fill both;
8545
8546    bind $::PALF.sbar <<B3>> "ScrollbarMoveBigIncrement $::PALF.sbar 0.25 %x %y"
8547    bind $::PALF.lba <Motion>  {$::PALF.lbb yview moveto [lindex [$::PALF.lba yview] 0]}
8548    bind $::PALF.lbb <Motion>  {$::PALF.lba yview moveto [lindex [$::PALF.lbb yview] 0]}
8549
8550    bind $::PALF.lba <Button-1> {+
8551	$::PALF.lbb yview moveto [lindex [$::PALF.lba yview] 0];
8552	set ::PaletteLineNumber [lindex [split [$::PALF.lba index @%x,%y] "."] 0]
8553	MarkPaletteSelection;
8554    }
8555    bind $::PALF.lbb <Button-1> {+
8556	$::PALF.lba yview moveto [lindex [$::PALF.lbb yview] 0];
8557	set ::PaletteLineNumber [lindex [split [$::PALF.lbb index @%x,%y] "."] 0]
8558	MarkPaletteSelection;
8559    }
8560    bind $::PALF.lbb <<B3>> {InsertPaletteEntry}
8561    bind $::PALF.lbb <Double-Button-1> {UndoPaletteEntry;break}
8562    bind $::PALF.lba <Destroy> {
8563	destroy $::PALF.lbb;
8564	set PaletteIsDisplayedP 0;
8565	ClearPaletteUndoStacks;
8566    }
8567    bind $::PALF.lbb <Destroy> {
8568	destroy $::PALF.lba;
8569	set PaletteIsDisplayedP 0;
8570    }
8571    BindKeys .pal;
8572    foreach test $PropertyList {
8573	if {$PropertyUse($test,PaletteP)} {
8574	    if { $Features($test,$program,$InterfaceLocale) == 1} {
8575		if {![info exists Palette($test,gloss)]} {
8576		    continue ;
8577		}
8578		set gloss $Palette($test,gloss);
8579		set re   $Palette($test,re);
8580		if {[info exist Palette($test,link)]} {
8581		    set LinkCode [list ShowInfo $::Palette($test,link)]
8582		    set tag "link[incr linkNum]"
8583		    $::PALF.lba insert end [format " %s\n" $gloss] [list body $tag]
8584		    $::PALF.lba tag bind $tag <Enter> \
8585			"$::PALF.lba tag configure $tag -background $::ColorSpecs(PaletteHighlight,Background);\
8586		    $::PALF.lba tag configure $tag -foreground $::ColorSpecs(PaletteHighlight,Foreground)"
8587		    $::PALF.lba tag bind $tag <Leave> \
8588			"$::PALF.lba tag configure $tag -background $::ColorSpecs(PaletteGloss,Background);\
8589		    $::PALF.lba tag configure $tag -foreground $::ColorSpecs(PaletteGloss,Foreground)"
8590		    $::PALF.lba tag bind $tag <<B3>> \
8591			"$LinkCode"
8592		} else {
8593		    $::PALF.lba insert end [format " %s\n" $gloss]
8594		}
8595		$::PALF.lbb insert end "\040"
8596		foreach x $re {
8597		    $::PALF.lbb insert end [lindex $x 0] [list [lindex $x 1]]
8598		}
8599		$::PALF.lbb insert end "\n"
8600	    }
8601	}
8602    }
8603    if {$UserPalette($program,0) > 0} {
8604	$::PALF.lba insert end "______________________________________________________________\n"
8605	$::PALF.lbb insert end "____________________________\n"
8606    }
8607    foreach pe [array names ::UserPalette] {
8608	set pel [split $pe ","]
8609	set WhichProgram [lindex $pel 0];
8610	if {![string equal $WhichProgram $program]} {continue}
8611	set f [lindex $pel 1];
8612	if {[string equal $f 0]} {continue}
8613	DefineUserEtextProc $f [lindex $UserPalette($WhichProgram,$f) 1]
8614	set Body [lindex $UserPalette($WhichProgram,$f) 0]
8615	set LinkCode [list ShowInfo $f]
8616	set tag "link[incr linkNum]"
8617	$::PALF.lba insert end " $f\n" [list body $tag]
8618	$::PALF.lba tag bind $tag <Enter> "$::PALF.lba tag configure $tag -background $::ColorSpecs(PaletteHighlight,Background);\
8619		    $::PALF.lba tag configure $tag -foreground $::ColorSpecs(PaletteHighlight,Foreground)"
8620	$::PALF.lba tag bind $tag <Leave> \
8621		"$::PALF.lba tag configure $tag -background $::ColorSpecs(PaletteGloss,Background);\
8622		    $::PALF.lba tag configure $tag -foreground $::ColorSpecs(PaletteGloss,Foreground)"
8623	$::PALF.lba tag bind $tag <<B3>> \
8624		"$LinkCode"
8625    	$::PALF.lbb insert end " ";# This keeps the space from being within the tag.
8626	$::PALF.lbb insert end  $Body [list F]
8627	$::PALF.lbb insert end "\n"
8628    }
8629    $::PALF.lbb tag configure F -background $::ColorSpecs(Palette,Fixed)
8630    $::PALF.lbb tag configure V -background $::ColorSpecs(Palette,Variable)
8631    $::PALF.lba configure -state disabled
8632    $::PALF.lbb configure -state disabled
8633    balloonhelp_for $::PALF.lba  \
8634	[_ "Left click to select. Right click for further information."]
8635    balloonhelp_for $::PALF.lbb  \
8636	[_ "Left click to select. Right click to insert into regular expression.\n\Double left click to undo the insertion.\n"]
8637    set ::PaletteLineNumber 1;
8638    if {$PaletteToBeDisplayedP} {
8639	ShowPalette;
8640    }
8641}
8642
8643proc WritePaletteToFile {} {
8644    global Program
8645    global program
8646    global InterfaceLocale
8647    global Features
8648    global PropertyList
8649    global FeatureTestP;
8650    global PropertyUse
8651    global UserPalette
8652    global Palette
8653
8654    #See if we have a record of palette features for this program.
8655    if { [FeaturesUnSetP $program $InterfaceLocale] } {
8656	ShowMessage [_ "No feature list is available for this program and locale."]
8657	if {$FeatureTestP == 0} {
8658	    ShowMessage [_ "Feature testing is disabled."]
8659	}
8660	return;
8661    }
8662    #See if this program supports any palette features.
8663    set fcnt 0;
8664    foreach x $::PropertyList {
8665	if {$::PropertyUse($x,PaletteP)} {
8666	    set fcnt [expr $Features($x,$program,$InterfaceLocale) + $fcnt];
8667	}
8668    }
8669    set PaletteFeatures [expr $fcnt + $::UserPalette($program,0)];
8670    if {$PaletteFeatures == 0} {
8671	ShowMessage [_ "This program does not support any palette features."]
8672	return
8673    }
8674
8675    #Open file
8676    set PaletteInfoSaveFile [tk_getSaveFile -initialfile \
8677			      [format [_ "%sPalette"] $Program]]
8678    if {[ string equal $PaletteInfoSaveFile ""]} {
8679	ShowMessage [_ "File selection cancelled."]
8680	return ;
8681    } else {
8682	if { [catch {open $PaletteInfoSaveFile "w+"} PaletteInfoSaveHandle]} {
8683	    ShowMessage [format \
8684		     [_ "Unable to open file %s in which to save palette information"] \
8685			     [MinimizeFileName $PaletteInfoSaveFile]];
8686	    return ;
8687	}
8688    }
8689
8690    #Identify the precise program we are dealing with
8691    if {[string equal $Program agrep]} {
8692	if {$::ProgramInfo(agrep,TreAgrepP) == 1} {
8693	    set which "TRE Agrep"
8694	} elseif {$::ProgramInfo(agrep,TreAgrepP) == 0} {
8695	    set which "Wu-Manber Agrep"
8696	} else {
8697	    set which "Agrep";
8698	}
8699	set TitleName $which
8700    } else {
8701	set TitleName $::ButtonName
8702    }
8703
8704    #Write out header
8705    puts $PaletteInfoSaveHandle [format \
8706	     [_ "Regular Expression Palette for %s in InterfaceLocale %s."] \
8707	     $TitleName $InterfaceLocale];
8708    puts $PaletteInfoSaveHandle [format \
8709	     [_ "Program version: %s"] $::ProgramInfo($::program,version)];
8710    puts $PaletteInfoSaveHandle [format \
8711	     [_ "Generated %s by Redet %s.\n\n"] [clock format [clock seconds]] $::Version];
8712
8713    #Write out the internal palette
8714    foreach test $PropertyList {
8715	if {$PropertyUse($test,PaletteP)} {
8716	    if { $Features($test,$program,$InterfaceLocale) == 1} {
8717		if {![info exists Palette($test,gloss)]} {
8718		    continue ;
8719		}
8720		set gloss $Palette($test,gloss);
8721		set re [StripTclQuotes [StripTags $Palette($test,re)]];
8722		puts $PaletteInfoSaveHandle [format "%-50s\t%s" $gloss $re]
8723	    }
8724	}
8725    }
8726    #Write out the user palette
8727    if {$UserPalette($program,0) > 0} {
8728	puts $PaletteInfoSaveHandle "\#User-defined palette entries"
8729    }
8730    foreach x [array names UserPalette] {
8731	set el [split $x ","];
8732	set prg [lindex $el 0];
8733	if {![string equal $prg $program]} {continue}
8734	set en  [lindex $el 1];
8735	if {$en == 0} {continue}
8736 	puts $PaletteInfoSaveHandle \
8737 	    [format "%-50s\t%s\n" $en \
8738		 [StripTclQuotes [StripTags [lindex $::UserPalette($program,$en) 0]]]]
8739    }
8740     #Clean up
8741     close $PaletteInfoSaveHandle;
8742    ShowMessage [format [_ "Palette saved in file %s."] [MinimizeFileName $PaletteInfoSaveFile]]
8743}
8744
8745proc StripTags {s} {
8746    return [regsub -all "(^\{)|(\[\u0020\u0009\]\{)| \[FV\]\}" $s ""]
8747}
8748
8749proc StripTclQuotes {s} {
8750    return [regsub -all "\\\\" [regsub -all "\\\]" [regsub -all "\\\[" [regsub -all "\\\}" \
8751	    [regsub -all "\\\{" $s \{] "\}"] "\["] "\]"] "\\"]
8752}
8753
8754
8755 proc MarkPaletteSelection {} {
8756     $::PALF.lba tag delete Selected
8757     $::PALF.lbb tag delete Selected
8758     $::PALF.lba tag add Selected $::PaletteLineNumber.0 $::PaletteLineNumber.end
8759     $::PALF.lbb tag add Selected $::PaletteLineNumber.0 $::PaletteLineNumber.end
8760     $::PALF.lba tag configure Selected -underline 1
8761     $::PALF.lbb tag configure Selected -underline 1
8762 }
8763
8764 array set PStack {}
8765 set PStack($REG) [list]
8766 set PStack($SUB) [list]
8767
8768 proc ClearPaletteUndoStacks {} {
8769     set ::PStack($::REG) [list]
8770     set ::PStack($::SUB) [list]
8771 }
8772
8773 proc InsertPaletteEntry {} {
8774     set w $::InsertionTarget;
8775     set str [string trimleft [$::PALF.lbb get $::PaletteLineNumber.0 $::PaletteLineNumber.end]]
8776     if {[string equal $w $::SUB] == 0}  {
8777 	set w $::REG;
8778     }
8779     #Push the length of the entry on the stack
8780     lappend ::PStack($w) [string length $str];
8781     $w insert insert $str;
8782 }
8783
8784 proc UndoPaletteEntry {} {
8785     set w $::InsertionTarget;
8786     if {[string equal $w $::SUB] == 0}  {
8787 	set w $::REG;
8788     }
8789     #Pop the stack
8790     set l $::PStack($w)
8791     set Last [expr [llength $l] -1];
8792     if {$Last < 0} {
8793 	ShowMessage [_ "Nothing remains to delete."]
8794 	return ;
8795     }
8796     set CharsToDelete [lindex $l $Last];
8797     set ::PStack($w) [lreplace $l $Last $Last];
8798     #Compute the range to delete and delete it.
8799     set ins [$w index insert]
8800     set FirstToDelete [expr $ins - $CharsToDelete]
8801     $w delete $FirstToDelete $ins;
8802 }
8803
8804 proc ShowInfo {TopicList} {
8805     foreach k $TopicList {
8806 	Explain$k
8807     }
8808 }
8809
8810 proc WriteJournal {msg} {
8811     global JournalHandle;
8812     puts $JournalHandle $msg;
8813 }
8814
8815 proc FlushJournal {} {
8816     global JournalHandle;
8817     flush $JournalHandle;
8818 }
8819
8820 proc ShowMessage {msg} {
8821     if {[winfo exists .msg]} {
8822 	.msg configure -state normal;
8823 	.msg delete 1.0 end;
8824 	.msg insert 1.0 $msg;
8825 	.msg configure -state disabled;
8826     } else {
8827 	puts $msg;
8828     }
8829     WriteJournal $msg;
8830 }
8831
8832 proc ClearMessageWindow {} {
8833      .msg configure -state normal
8834      .msg delete 1.0 end;
8835      .msg configure -state disabled
8836}
8837
8838#Write data to temporary test file
8839proc WriteTestData {tdata} {
8840    global TestFile;
8841
8842    if {[catch {open $TestFile "w"} TempDataHandle ] != 0} {
8843	ShowMessage [format [_ "Unable to open %s."] $TestFile];
8844	return ;
8845    }
8846    puts -nonewline $TempDataHandle $tdata;
8847    close $TempDataHandle;
8848}
8849
8850# Check whether we already have tested this combination of
8851# program and locale.
8852proc FeaturesUnSetP {pro loc} {
8853    global Features;
8854    if { [info exists Features(tested,$pro,$loc)] } {
8855	if {$Features(tested,$pro,$loc)} {
8856	    return 0;
8857	} else {
8858	    return 1;
8859	}
8860    }
8861    return 1;
8862}
8863
8864proc DumpFeatures {pro loc} {
8865    global Features;
8866
8867    set fn [format [_ "FeatureList-%s-%s"]  $pro $loc] ;
8868    set FeatureSaveFile [tk_getSaveFile -initialfile $fn];
8869    if {[string equal $FeatureSaveFile ""] == 1} {
8870	return ;
8871    } else {
8872        if { [catch {open $FeatureSaveFile "w+"} FeatureSaveHandle] != 0} {
8873	    ShowMessage [format [_ "Unable to open file %s in which to save features."] \
8874			     [MinimizeFileName $FeatureSaveFile]];
8875	    return ;
8876        }
8877    }
8878    set TF [list "F" "T"];
8879    puts $FeatureSaveHandle [format "Prorgram %s %s in locale %s using Redet %s\nunder %s %s"\
8880	 $pro $::ProgramInfo($::program,version) \
8881	 $loc $::Version [OSName] [clock format [clock seconds]]];
8882    # Extract just the entries for the current program and locale.
8883    # En passant we convert 0s and 1s to Fs and Ts.
8884    foreach idx [array names Features] {
8885	set triple [split $idx ","]
8886	if { [string equal [lindex $triple 1] $pro] } {
8887	    if { [string equal [lindex $triple 2]  $loc] } {
8888		set cd([lindex $triple 0]) [lindex $TF $Features($idx)];
8889	    }
8890	}
8891    }
8892    # Now we write out the feature-value pairs in the order of PropertyList;
8893    foreach test $::PropertyList {
8894	if {[info exists cd($test)]} {
8895	    puts $FeatureSaveHandle [format "\t%-15s  %1s" $test $cd($test)];
8896	}
8897    }
8898    close $FeatureSaveHandle;
8899}
8900
8901proc ShowTestProgress {cnt StartTime FeatureCnt} {
8902    if {[expr $cnt % 5] == 0} {
8903	if {[winfo exists .placard]} {
8904	    set TimeElapsed [expr [clock seconds] - $StartTime];
8905	    set TotalTime [expr double($TimeElapsed) * (double($FeatureCnt)/double($cnt))];
8906	    set TimeRemaining [expr $TotalTime - $TimeElapsed];
8907	    set RoundedTimeRemaining [expr round($TimeRemaining)];
8908	    set RoundedTotalTime [expr round($TotalTime)];
8909	    set ElapsedMinutes [expr $TimeElapsed / 60]
8910	    set ElapsedSeconds [expr $TimeElapsed % 60]
8911	    set TotalMinutes [expr $RoundedTotalTime / 60]
8912	    set TotalSeconds [expr $RoundedTotalTime % 60]
8913	    set RemainingMinutes [expr $RoundedTimeRemaining / 60]
8914	    set RemainingSeconds [expr $RoundedTimeRemaining % 60]
8915
8916	    SetProgress .placard.progbar $cnt $FeatureCnt;
8917	    .placard.time configure -text\
8918		[format [_ "time elapsed: %1d minutes %2d seconds\nestimated total time: %1d minutes %2d seconds\nestimated time remaining: %1d minutes %2d seconds"]\
8919		     $ElapsedMinutes $ElapsedSeconds  $TotalMinutes $TotalSeconds $RemainingMinutes $RemainingSeconds]
8920	}
8921    }
8922}
8923
8924proc ExplicateErrorStatus {} {
8925    global FeatureTestDebugP;
8926    global FeatureTestLogHandle;
8927    switch -exact -- [lindex $::errorCode 0] {
8928	CHILDKILLED {
8929	    foreach { - pid sigName msg } $::errorCode break
8930	    if {$FeatureTestDebugP} {
8931		puts $FeatureTestLogHandle [format "Child process %d died on signal %s" $pid $sigName];
8932		puts $FeatureTestLogHandle [format "Error message: %s" $msg];
8933	    }
8934	}
8935	CHILDSTATUS {
8936	    foreach { - pid code } $::errorCode break
8937	    if {$FeatureTestDebugP} {
8938		puts $FeatureTestLogHandle [format "Child process %d exited with error code %d" $pid $code];
8939	    }
8940	}
8941	CHILDSUSP {
8942	    foreach { - pid sigName msg } $::errorCode break
8943	    if {$FeatureTestDebugP} {
8944		puts $FeatureTestLogHandle [format "Child process %d has been suspended due to signal %d" $pid $sigName];
8945		puts $FeatureTestLogHandle [format "Error message: %s" $msg];
8946	    }
8947	}
8948	POSIX {
8949	    foreach { - errName msg } $::errorCode break
8950	    if {$FeatureTestDebugP} {
8951		puts $FeatureTestLogHandle \
8952		    [format "One of the kernel calls to launch the command failed with error %s" $errName];
8953		puts $FeatureTestLogHandle [format "Error message: %s" $msg];
8954	    }
8955	}
8956    }
8957}
8958
8959
8960proc SetCompoundFeatures {} {
8961    global Features;
8962    global program;
8963    global InterfaceLocale;
8964
8965    set Features(alttype,$program,$InterfaceLocale) 0;
8966    if {$Features(pipebs,$program,$InterfaceLocale) == 1} {
8967	set Features(alttype,$program,$InterfaceLocale) 3; # (a\|b)
8968    }
8969    if {$Features(pipe,$program,$InterfaceLocale) == 1} {
8970	set Features(alttype,$program,$InterfaceLocale) 2; # (a|b)
8971    }
8972    if {$Features(pipedbs,$program,$InterfaceLocale) == 1} {
8973	set Features(alttype,$program,$InterfaceLocale) 6; # (a\\|b)
8974    }
8975    if {$Features(pipebsall,$program,$InterfaceLocale) == 1} {
8976	set Features(alttype,$program,$InterfaceLocale) 8; # \(a\|b\)
8977    }
8978    if {$Features(pipedbsall,$program,$InterfaceLocale) == 1} {
8979	set Features(alttype,$program,$InterfaceLocale) 7; # \\(a\\|b\\)
8980    }
8981    if {$Features(altcomma,$program,$InterfaceLocale) == 1} {
8982	set Features(alttype,$program,$InterfaceLocale) 4; # {a,b}
8983    }
8984    if {$Features(piperebol,$program,$InterfaceLocale) == 1} {
8985	set Features(alttype,$program,$InterfaceLocale) 5; # ("a"|"b")
8986    }
8987    # In programs that have them, sets are more efficient than alternation, so we
8988    # let sets override alternation if they are available.
8989    if {$Features(set,$program,$InterfaceLocale) == 1} {
8990	set Features(alttype,$program,$InterfaceLocale) 1;# [ab]
8991    }
8992
8993    #Compound tests for Selfish quantifiers
8994    if {$Features(PossStarA,$program,$InterfaceLocale) && $Features(PossStarB,$program,$InterfaceLocale)} {
8995	set Features(PossStar,$program,$InterfaceLocale) 1;
8996    } else {
8997	set Features(PossStar,$program,$InterfaceLocale) 0;
8998    }
8999
9000    if {$Features(PossPlusA,$program,$InterfaceLocale) && $Features(PossPlusB,$program,$InterfaceLocale)} {
9001	set Features(PossPlus,$program,$InterfaceLocale) 1;
9002    } else {
9003	set Features(PossPlus,$program,$InterfaceLocale) 0;
9004    }
9005
9006    if {$Features(PossQMarkA,$program,$InterfaceLocale) && $Features(PossQMarkB,$program,$InterfaceLocale)} {
9007	set Features(PossQMark,$program,$InterfaceLocale) 1;
9008    } else {
9009	set Features(PossQMark,$program,$InterfaceLocale) 0;
9010    }
9011
9012    if {$Features(PossAtLeastMA,$program,$InterfaceLocale) && $Features(PossAtLeastMB,$program,$InterfaceLocale)} {
9013	set Features(PossAtLeastM,$program,$InterfaceLocale) 1;
9014    } else {
9015	set Features(PossAtLeastM,$program,$InterfaceLocale) 0;
9016    }
9017
9018    if {$Features(PossMToNA,$program,$InterfaceLocale) && \
9019	    $Features(PossMToNB,$program,$InterfaceLocale) && \
9020	    $Features(PossMToNC,$program,$InterfaceLocale)} {
9021	set Features(PossMToN,$program,$InterfaceLocale) 1;
9022    } else {
9023	set Features(PossMToN,$program,$InterfaceLocale) 0;
9024    }
9025
9026    if {$Features(SelfishNoCaptureGroupA,$program,$InterfaceLocale) &&\
9027	    $Features(SelfishNoCaptureGroupB,$program,$InterfaceLocale) &&\
9028	    $Features(SelfishNoCaptureGroupC,$program,$InterfaceLocale) } {
9029	set Features(SelfishNoCaptureGroup,$program,$InterfaceLocale) 1;
9030    } else {
9031	set Features(SelfishNoCaptureGroup,$program,$InterfaceLocale) 0;
9032    }
9033    # Case-sensitivity
9034    if {$Features(CaseInsensitiveFlagSmallIAsciiLiteral,$program,$InterfaceLocale)} {
9035	set Features(CaseInsensitiveFlagSmallI,$program,$InterfaceLocale) 1;
9036    } else {
9037	set Features(CaseInsensitiveFlagSmallI,$program,$InterfaceLocale) 0;
9038    }
9039
9040    if {$Features(CaseInsensitiveFlagSmallIuNonAsciiLiteral,$program,$InterfaceLocale)} {
9041	set Features(CaseInsensitiveFlagSmallIu,$program,$InterfaceLocale) 1;
9042    } else {
9043	set Features(CaseInsensitiveFlagSmallIu,$program,$InterfaceLocale) 0;
9044    }
9045
9046    if {$Features(CaseInsensitiveCrosshatchAsciiLiteral,$program,$InterfaceLocale)} {
9047	set Features(CaseInsensitiveCrosshatch,$program,$InterfaceLocale) 1;
9048    } else {
9049	set Features(CaseInsensitiveCrosshatch,$program,$InterfaceLocale) 0;
9050    }
9051
9052    if {$Features(CaseInsensitiveCrosshatchuNonAsciiLiteral,$program,$InterfaceLocale)} {
9053	set Features(CaseInsensitiveCrosshatchu,$program,$InterfaceLocale) 1;
9054    } else {
9055	set Features(CaseInsensitiveCrosshatchu,$program,$InterfaceLocale) 0;
9056    }
9057
9058    if {$Features(CaseInsensitiveBSSmallCAsciiLiteral,$program,$InterfaceLocale)} {
9059	set Features(CaseInsensitiveBSSmallC,$program,$InterfaceLocale) 1;
9060    } else {
9061	set Features(CaseInsensitiveBSSmallC,$program,$InterfaceLocale) 0;
9062    }
9063
9064    #Miscellaenous
9065    if {($Features(atsignonenext,$program,$InterfaceLocale) == 1) &&\
9066	    ($Features(group,$program,$InterfaceLocale) == 0)  &&\
9067	    ($Features(groupbs,$program,$InterfaceLocale) == 0)  &&\
9068	    ($Features(groupdbsnqq,$program,$InterfaceLocale) == 0)  &&\
9069	    ($Features(groupdbs,$program,$InterfaceLocale) == 0)  &&\
9070	    ($Features(ncgroup,$program,$InterfaceLocale) == 0)  &&\
9071	    ($Features(ncgroupdb,$program,$InterfaceLocale) == 0)} {
9072	set Features(ObligatoryQuantifierGroup,$program,$InterfaceLocale) 1;
9073    } else {
9074	set Features(ObligatoryQuantifierGroup,$program,$InterfaceLocale) 0;
9075    }
9076}
9077
9078proc NullFeatures {program locale} {
9079    foreach test $::PropertyList {
9080	set ::Features($test,$program,$locale) 0;
9081    }
9082}
9083
9084proc TestFeatures {} {
9085    global DoSubstitutionsP;
9086    global ExecCmd;
9087    global Program;
9088    global program;
9089    global Features;
9090    global RegexpResult;
9091    global ComparisonData;
9092    global ComparisonDataFromWindowP;
9093    global FeatureTestDebugP;
9094    global TestData;
9095    global Intended;
9096    global Regexp;
9097    global TestRegexp;
9098    global TestSubexp;
9099    global InterfaceLocale;
9100    global errorCode;
9101    global TestingFeaturesP;
9102    global FeatureTestP;
9103
9104    if {$FeatureTestP == 0} {
9105	NullFeatures $program $InterfaceLocale
9106	ShowMessage [_ "Feature testing is disabled."];
9107	return;
9108    }
9109    if {[string equal $program agrep]} {
9110	WhichAgrep;
9111    }
9112    set TestingFeaturesP 1;
9113    PopupTestPatiencePlacard \
9114	[format [_ "Testing features of %1\$s in locale %2\$s\nand constructing palette.\nPlease be patient."]  $Program $InterfaceLocale] $::FirstTestP;
9115    update;
9116    set RedetFeatureTestFile [_ "FeatureTestLog"];
9117    set StartTime [clock seconds];
9118
9119    #We need to prevent the comparison data from being read from
9120    #the window, but it is perfectly possible that a user
9121    #will change programs while in edit mode, so we save
9122    #the comparison data source, set it to non-window, then
9123    #restore it when we are done.
9124    set SaveComparisonDataFromWindowP $ComparisonDataFromWindowP;
9125    set ComparisonDataFromWindowP 0;
9126
9127
9128    if {$FeatureTestDebugP} {
9129	if {[catch {open $RedetFeatureTestFile "w"} FeatureTestLogHandle ] != 0} {
9130	    ShowMessage [format [_ "Unable to open %s."] $RedetFeatureTestFile];
9131	    return ;
9132	}
9133	puts $FeatureTestLogHandle [format [_ "%s InterfaceLocale: %s"] \
9134			[clock format [clock seconds]] $::InterfaceLocale]
9135    }
9136    set tcnt 0;
9137    set FeatureCnt 0;
9138    foreach test $::PropertyList {
9139	if {$::PropertyUse($test,TestP)} {incr FeatureCnt}
9140    }
9141    #We can't do tests properly with global costs non-zero in those programs that
9142    #do approximate matching.
9143    if {[info exists ::ProgramInfo($::program,TotalCost)] } {
9144	set SavedTotalCost $::ProgramInfo($::program,TotalCost);
9145	set ::ProgramInfo($::program,TotalCost) 0;
9146    }
9147    set SavedDoSubstitutionsP $DoSubstitutionsP;
9148    set DoSubstitutionsP 0;#For now we have to run the tests in match mode no matter what.
9149    foreach test $::PropertyList {
9150	if {$::AbortFeatureTestP} {
9151	    set ::AbortFeatureTestP 0;
9152	    if {[info exists ::Features(tested,$program,$InterfaceLocale)]} {
9153		unset ::Features(tested,$program,$InterfaceLocale);
9154	    }
9155	    set DoSubstitutionsP $SavedDoSubstitutionsP;
9156	    set ComparisonData "";
9157	    set RegexpResult "";
9158	    set ComparisonDataFromWindowP $SaveComparisonDataFromWindowP;
9159	    destroy .placard;
9160	    set TestingFeaturesP 0;
9161	    if {$FeatureTestDebugP} {
9162		puts $FeatureTestLogHandle [_ "Test run aborted by user."];
9163		close $FeatureTestLogHandle;
9164	    }
9165	    ShowMessage [_ "Test run aborted by user."];
9166	    if {[SelectProgram $::InitialProgram] != 1} {
9167		after 5000; #Give the user a chance to see the message
9168		SelectProgram tcl
9169	    }
9170	    return ;
9171	}
9172	if {$::PropertyUse($test,TestP) == 0} {continue}
9173
9174	#Skip tests that hang the program
9175	if {[info exists ::ProgramTestSkipList($program,$test)]} {
9176	    set ::Features($test,$program,$InterfaceLocale) 0;
9177	    continue;
9178	}
9179
9180	incr tcnt;
9181	ShowTestProgress $tcnt $StartTime $FeatureCnt;update;
9182	if {$FeatureTestDebugP} {
9183	    puts -nonewline $FeatureTestLogHandle\
9184		[format "\n\[%3d/%3d\] %s - test %s" $tcnt $FeatureCnt $Program $test];
9185	    flush $FeatureTestLogHandle
9186	}
9187	WriteTestData $TestData($test);
9188	set Features($test,$program,$InterfaceLocale) 0;
9189	set RegexpResult "";
9190	set ComparisonData $Intended($test);
9191	#Set any program-specific parameters required for this test
9192	if {[info exists ::ProgramInfo($program,$test)]} {
9193	    set PropertyList $::ProgramInfo($program,$test);
9194	    foreach {property value} $PropertyList {
9195		#Save the current value so we can restore it after the test.
9196		lappend SavedPropertyList $property;
9197		lappend SavedPropertyList $::ProgramInfo($program,$property);
9198		#Temporarily substitute the value required for the test
9199		set ::ProgramInfo($program,$property) $value;
9200	    }
9201	}
9202	if {[string equal [string range $test 0 2] "Sub"]} {
9203	    if {[info exists ExecCmd($program,sub)]} {
9204		set SubExp $TestSubexp($test)
9205		set status [catch { $ExecCmd($program,sub) $TestRegexp($test) $SubExp} RegexpResult];
9206	    } else {
9207		if {$FeatureTestDebugP} {
9208		    puts $FeatureTestLogHandle "\tn/a - skipped"
9209		    flush $FeatureTestLogHandle
9210		}
9211		continue
9212	    }
9213	} else {
9214	    set SubExp "";
9215	    if {[info exists ExecCmd($program,match)]} {
9216		if {[info exists ExecCmd($program,match,$test)]} {
9217		    set tx $ExecCmd($program,match,$test);
9218		    set status [catch { $ExecCmd($program,match) $TestRegexp($test) $tx} RegexpResult];
9219		} else {
9220		    set status [catch { $ExecCmd($program,match) $TestRegexp($test)} RegexpResult];
9221		}
9222	    } else {
9223		if {$FeatureTestDebugP} {
9224		    puts $FeatureTestLogHandle "\tn/a - skipped"
9225		    flush $FeatureTestLogHandle
9226		}
9227		continue
9228	    }
9229	}
9230	set RegexpResult [string trimright $RegexpResult "\n"];
9231	#Restore any program-specific parameters required for this test
9232	if {[info exists ::ProgramInfo($program,$test)]} {
9233	    foreach {property value} $SavedPropertyList {
9234		set ::ProgramInfo($program,$property) $value;
9235	    }
9236	}
9237	# Command succeeded and wrote nothing to stderr.
9238	if { $status == 0} {
9239	    if {[string equal $program "bash"] || \
9240		    [string equal $program "fish"] || \
9241		    [string equal $program "ksh"] || \
9242		    [string equal $program "rc"] || \
9243		    [string equal $program "tcsh"] || \
9244		    [string equal $program "zsh"]} {
9245		set RegexpResult [lsort $RegexpResult]
9246		set ComparisonData [lsort $ComparisonData]
9247	    }
9248	    if {[string equal $RegexpResult $ComparisonData]} {
9249		set Features($test,$program,$InterfaceLocale) 1;
9250		if {$FeatureTestDebugP} {
9251		    puts $FeatureTestLogHandle "\t\tPassed"
9252		    puts $FeatureTestLogHandle "Regexp: $TestRegexp($test)\n"
9253		    if {[string equal $SubExp ""] == 0} {
9254			puts $FeatureTestLogHandle "Subexp: $SubExp\n"
9255		    }
9256		    puts $FeatureTestLogHandle [format "Result:\n%s\nIntended:\n%s" $RegexpResult $ComparisonData];
9257		    flush $FeatureTestLogHandle
9258		}
9259	    } else {
9260		set Features($test,$program,$InterfaceLocale) 0;
9261		if {$FeatureTestDebugP} {
9262		    puts $FeatureTestLogHandle "\t\tFailed on diff";
9263		    puts $FeatureTestLogHandle "Regexp: $TestRegexp($test)\n"
9264		    if {[string equal $SubExp ""] == 0} {
9265			puts $FeatureTestLogHandle "Subexp: $SubExp\n"
9266		    }
9267		    puts $FeatureTestLogHandle [format "Result:\n%s\nIntended:\n%s" $RegexpResult $ComparisonData];
9268		    flush $FeatureTestLogHandle
9269		}
9270	    }
9271	} elseif { [string equal $::errorCode NONE] } {
9272	    # The command exited with a normal status, but wrote something
9273	    # to stderr, which is included in RegexpResult.
9274	    set Features($test,$program,$InterfaceLocale) 0;
9275	    if {$FeatureTestDebugP} {
9276		puts $FeatureTestLogHandle "\tCommand exited normally but failed due to output to stderr: $errorCode";
9277		puts $FeatureTestLogHandle "RegexpResult = $RegexpResult";
9278		flush $FeatureTestLogHandle
9279	    }
9280	} else {
9281	    set Features($test,$program,$InterfaceLocale) 0;
9282	    if {$FeatureTestDebugP} {
9283		puts $FeatureTestLogHandle "\tCommand exited abnormally\nRegexpResult = $RegexpResult";
9284		flush $FeatureTestLogHandle
9285	    }
9286	    ExplicateErrorStatus;
9287	}
9288    }; #End of loop over feature tests
9289
9290    # Implications
9291    if {$Features(taggedgroup,$program,$InterfaceLocale)} {
9292	set Features(taggedgroupref,$program,$InterfaceLocale) 1;
9293    } else {
9294	set Features(taggedgroupref,$program,$InterfaceLocale) 0;
9295    }
9296
9297    if {$Features(group,$program,$InterfaceLocale)} {
9298	set Features(GroupNoWildcards,$program,$InterfaceLocale) 0;
9299    }
9300
9301    if {$Features(dot,$program,$InterfaceLocale)} {
9302	set Features(DotAnySingle,$program,$InterfaceLocale) 0;
9303    }
9304
9305    if {$Features(SubBackRefbs,$program,$InterfaceLocale) && \
9306	    $Features(SubBackRefParbs,$program,$InterfaceLocale)} {
9307	set Features(SubBackRefParbs,$program,$InterfaceLocale) 0;
9308    }
9309
9310    if {$Features(xmldigit,$program,$InterfaceLocale)} {
9311	set Features(pdigit,$program,$InterfaceLocale) 0
9312    }
9313    if {$Features(xmldigitc,$program,$InterfaceLocale)} {
9314	set Features(pdigitc,$program,$InterfaceLocale) 0
9315    }
9316
9317    # Replicate this for the other case insensitive features
9318    # Then change the Explain popups to use the generic features
9319    if {($Features(FlagQWideScope,$program,$InterfaceLocale)) ||\
9320	($Features(FlagCrosshatchWideScope,$program,$InterfaceLocale)) ||\
9321	($Features(FlagBSSmallCWideScope,$program,$InterfaceLocale))} {
9322	set Features(CaseInsensitiveFlagWideScope,$program,$InterfaceLocale) 1;
9323    } else {
9324	set Features(CaseInsensitiveFlagWideScope,$program,$InterfaceLocale) 0;
9325    }
9326
9327    if {($Features(CaseInsensitiveFlagSmallIAsciiLiteral,$program,$InterfaceLocale)) ||\
9328	($Features(CaseInsensitiveCrosshatchAsciiLiteral,$program,$InterfaceLocale)) ||\
9329	($Features(CaseInsensitiveBSSmallCAsciiLiteral,$program,$InterfaceLocale))} {
9330	set Features(CaseInsensitiveAsciiLiteral,$program,$InterfaceLocale) 1;
9331    } else {
9332	set Features(CaseInsensitiveAsciiLiteral,$program,$InterfaceLocale) 0;
9333    }
9334
9335    if {($Features(CaseInsensitiveFlagSmallINonAsciiLiteral,$program,$InterfaceLocale)) ||\
9336	($Features(CaseInsensitiveCrosshatchNonAsciiLiteral,$program,$InterfaceLocale)) ||\
9337	($Features(CaseInsensitiveBSSmallCNonAsciiLiteral,$program,$InterfaceLocale))} {
9338	set Features(CaseInsensitiveNonAsciiLiteral,$program,$InterfaceLocale) 1;
9339    } else {
9340	set Features(CaseInsensitiveNonAsciiLiteral,$program,$InterfaceLocale) 0;
9341    }
9342
9343    if {($Features(CaseInsensitiveFlagSmallIAsciiClass,$program,$InterfaceLocale)) ||\
9344	($Features(CaseInsensitiveCrosshatchAsciiClass,$program,$InterfaceLocale)) ||\
9345	($Features(CaseInsensitiveBSSmallCAsciiClass,$program,$InterfaceLocale))} {
9346	set Features(CaseInsensitiveAsciiClass,$program,$InterfaceLocale) 1;
9347    } else {
9348	set Features(CaseInsensitiveAsciiClass,$program,$InterfaceLocale) 0;
9349    }
9350
9351    if {($Features(CaseInsensitiveFlagSmallINonAsciiClass,$program,$InterfaceLocale)) ||\
9352	($Features(CaseInsensitiveCrosshatchNonAsciiClass,$program,$InterfaceLocale)) ||\
9353	($Features(CaseInsensitiveBSSmallCNonAsciiClass,$program,$InterfaceLocale))} {
9354	set Features(CaseInsensitiveNonAsciiClass,$program,$InterfaceLocale) 1;
9355    } else {
9356	set Features(CaseInsensitiveNonAsciiClass,$program,$InterfaceLocale) 0;
9357    }
9358
9359    if {($Features(CaseInsensitiveFlagSmallIAsciiClassSymmetric,$program,$InterfaceLocale)) ||\
9360	($Features(CaseInsensitiveCrosshatchAsciiClassSymmetric,$program,$InterfaceLocale)) ||\
9361	($Features(CaseInsensitiveBSSmallCAsciiClassSymmetric,$program,$InterfaceLocale))} {
9362	set Features(CaseInsensitiveAsciiClassSymmetric,$program,$InterfaceLocale) 1;
9363    } else {
9364	set Features(CaseInsensitiveAsciiClassSymmetric,$program,$InterfaceLocale) 0;
9365    }
9366
9367    if {($Features(CaseInsensitiveFlagSmallINonAsciiClassSymmetric,$program,$InterfaceLocale)) ||\
9368	($Features(CaseInsensitiveCrosshatchNonAsciiClassSymmetric,$program,$InterfaceLocale)) ||\
9369	($Features(CaseInsensitiveBSSmallCNonAsciiClassSymmetric,$program,$InterfaceLocale))} {
9370	set Features(CaseInsensitiveNonAsciiClassSymmetric,$program,$InterfaceLocale) 1;
9371    } else {
9372	set Features(CaseInsensitiveNonAsciiClassSymmetric,$program,$InterfaceLocale) 0;
9373    }
9374
9375    if {($Features(CaseInsensitiveFlagSmallIOctal,$program,$InterfaceLocale)) ||\
9376	($Features(CaseInsensitiveCrosshatchOctal,$program,$InterfaceLocale)) ||\
9377	($Features(CaseInsensitiveBSSmallCOctal,$program,$InterfaceLocale))} {
9378	set Features(CaseInsensitiveOctal,$program,$InterfaceLocale) 1;
9379    } else {
9380	set Features(CaseInsensitiveOctal,$program,$InterfaceLocale) 0;
9381    }
9382
9383    if {($Features(CaseInsensitiveFlagSmallIHex,$program,$InterfaceLocale)) ||\
9384	($Features(CaseInsensitiveCrosshatchHex,$program,$InterfaceLocale)) ||\
9385	($Features(CaseInsensitiveBSSmallCHex,$program,$InterfaceLocale))} {
9386	set Features(CaseInsensitiveHex,$program,$InterfaceLocale) 1;
9387    } else {
9388	set Features(CaseInsensitiveHex,$program,$InterfaceLocale) 0;
9389    }
9390
9391    # We don't need to set to 0 in the else case because that will already have been done
9392    # when dollar was tested for.
9393#    if {$Features(AbsoluteEndOfString,$program,$InterfaceLocale)} {
9394#	set Features(dollar,$program,$InterfaceLocale) 1;
9395#    }
9396
9397    if {$Features(CondLookaroundSimple,$program,$InterfaceLocale)} {
9398	set Features(CondPosLookaheadSimple,$program,$InterfaceLocale) 1;
9399	set Features(CondPosLookbackSimple,$program,$InterfaceLocale) 1;
9400	set Features(CondNegLookaheadSimple,$program,$InterfaceLocale) 1;
9401	set Features(CondNegLookbackSimple,$program,$InterfaceLocale) 1;
9402    } else {
9403	set Features(CondPosLookaheadSimple,$program,$InterfaceLocale) 0;
9404	set Features(CondPosLookbackSimple,$program,$InterfaceLocale) 0;
9405	set Features(CondNegLookaheadSimple,$program,$InterfaceLocale) 0;
9406	set Features(CondNegLookbackSimple,$program,$InterfaceLocale) 0;
9407    }
9408
9409    if {$Features(CondLookaroundElse,$program,$InterfaceLocale)} {
9410	set Features(CondPosLookaheadElse,$program,$InterfaceLocale) 1;
9411	set Features(CondPosLookbackElse,$program,$InterfaceLocale) 1;
9412	set Features(CondNegLookaheadElse,$program,$InterfaceLocale) 1;
9413	set Features(CondNegLookbackElse,$program,$InterfaceLocale) 1;
9414    } else {
9415	set Features(CondPosLookaheadElse,$program,$InterfaceLocale) 0;
9416	set Features(CondPosLookbackElse,$program,$InterfaceLocale) 0;
9417	set Features(CondNegLookaheadElse,$program,$InterfaceLocale) 0;
9418	set Features(CondNegLookbackElse,$program,$InterfaceLocale) 0;
9419    }
9420
9421    SetCompoundFeatures;
9422
9423    #To force a feature to appear in the palette for debugging purposes,
9424    #Insert its name in place of F below and uncomment.
9425    #set Features(F,$program,$InterfaceLocale) 1;
9426#    set Features(W3CharClassSubtraction,$program,$InterfaceLocale) 1;#
9427
9428    #Clean up
9429    set ComparisonData "";
9430    set RegexpResult "";
9431    set ComparisonDataFromWindowP $SaveComparisonDataFromWindowP;
9432    destroy .placard;
9433    set TestingFeaturesP 0;
9434    if {$FeatureTestDebugP} {
9435	puts $FeatureTestLogHandle [format [_ "Elapsed time: %d seconds."] [expr [clock seconds] - $StartTime]];
9436	close $FeatureTestLogHandle;
9437    }
9438    set DoSubstitutionsP $SavedDoSubstitutionsP;
9439    if {[info exists ::ProgramInfo($::program,TotalCost)] } {
9440	set ::ProgramInfo($::program,TotalCost) $SavedTotalCost;
9441    }
9442    set ::UpdateJavaByteCodeP 1;
9443    set ::FirstTestP 0;
9444
9445    if {[string equal $program sed]} {
9446	set ::Features(tested,sed,$InterfaceLocale) 1;
9447	switch -exact --  $::ProgramInfo(sed,Which) {
9448	    minised {
9449		set ::Features(tested,minised,$InterfaceLocale) 1;
9450	    }
9451	    supersed {
9452		set ::Features(tested,ssed,$InterfaceLocale) 1;
9453	    }
9454	}
9455    } else {
9456	set ::Features(tested,$program,$InterfaceLocale) 1;
9457    }
9458    MarkProgramTested;
9459    #If the program has a control panel popup, retitle it in case
9460    #it was marked as untested.
9461    set wn [format ".pcp%s" $Program]
9462    if {[winfo exists $wn]} {
9463	$wn.title configure -text [_ [format "%s Settings" $Program]]
9464    }
9465}
9466
9467#Shut down gracefully.
9468proc ShutDown {} {
9469
9470    WriteJournal [format [_ "Session ended: %s\n"] [clock format [clock seconds]]];
9471    close $hist::HistoryListHandle;
9472    close $::JournalHandle;
9473    #Clean up temp files.
9474    #Use -f flag so that there is no error if a file does not exist.
9475    if {$::DebugP} {
9476	puts [format [_ "Temporary files left in %s. Clean up when you're done."] $::TempDir];
9477    } else {
9478	file delete -force $::CommandFile;
9479	file delete -force $::CSourceFile;
9480	file delete -force $::JavaMatchClassFile;
9481	file delete -force $::JavaMatchFile;
9482	file delete -force $::JavaSubClassFile;
9483	file delete -force $::JavaSubFile;
9484	file delete -force $::TestFile;
9485	file delete -force $::TempCompFile;
9486	file delete -force $::TempOutputFile;
9487	file delete -force $::TempSortFile;
9488	file delete -force $::TempGlobDir;
9489	file delete -force $::DiffResultFile;
9490	file delete -force $::EmacsWrapper
9491	file delete -force $::EmacsOutputFile
9492	file delete -force $::VersionFile
9493    }
9494    #Shutdown child browsers
9495    foreach pid $::BrowserPIDS {
9496	catch {exec kill $pid};
9497    }
9498    exit 0;
9499}
9500
9501proc SaveRegexpAsHistory {} {
9502    global program;
9503
9504    set rexp [string trim [$::REG get] "\n"];
9505    set sexp ""; # Just to be safe.
9506    set sexp [string trim [$::SUB get] "\n"];
9507    if {$rexp == ""} {
9508	ShowMessage [_ "There is no regular expression to save."];
9509	return;
9510    }
9511    set ReSaveFile [tk_getSaveFile -initialfile "Regexp"];
9512    if {$ReSaveFile != ""} {
9513	if {[catch {open $ReSaveFile "w"} ReSaveHandle ] != 0} {
9514	    ShowMessage [format [_ "Unable to open %s."] [MinimizeFileName $ReSaveFile]];
9515	    return;
9516	}
9517	puts $ReSaveHandle [format "%-*s%s%s%s%s" $hist::ProgramFieldWidth $program $hist::HistoryDelimiter $rexp $hist::HistoryDelimiter $sexp];
9518	close $ReSaveHandle;
9519	ShowMessage [format [_ "Regular expression saved in %s."] [MinimizeFileName $ReSaveFile]];
9520    }
9521}
9522
9523proc SaveRegexpPlain {} {
9524    global program;
9525
9526    set rexp [string trim [$::REG get] "\n"];
9527    if {$rexp == ""} {
9528	ShowMessage [_ "There is no regular expression to save."];
9529	return;
9530    }
9531    set ReSaveFile [tk_getSaveFile -initialfile "RegularExpression"];
9532    if {$ReSaveFile != ""} {
9533	if {[catch {open $ReSaveFile "w"} ReSaveHandle ] != 0} {
9534	    ShowMessage [format [_ "Unable to open %s."] [MinimizeFileName $ReSaveFile]];
9535	    return;
9536	}
9537	puts $ReSaveHandle $rexp;
9538	close $ReSaveHandle;
9539	ShowMessage [format [_ "Regular expression saved in %s."] [MinimizeFileName $ReSaveFile]];
9540    }
9541}
9542
9543proc SaveSubexpPlain {} {
9544    global program;
9545
9546    set sexp [string trim [$::SUB get] "\n"];
9547    if {$sexp == ""} {
9548	ShowMessage [_ "There is no substitution expression to save."];
9549	return;
9550    }
9551    set SeSaveFile [tk_getSaveFile -initialfile "SubstitutionExpression"];
9552    if {$SeSaveFile != ""} {
9553	if {[catch {open $SeSaveFile "w"} SeSaveHandle ] != 0} {
9554	    ShowMessage [format [_ "Unable to open %s."] [MinimizeFileName $SeSaveFile]];
9555	    return;
9556	}
9557	puts $SeSaveHandle $sexp;
9558	close $SeSaveHandle;
9559	ShowMessage [format [_ "Substitution expression saved in %s."] [MinimizeFileName $SeSaveFile]];
9560    }
9561}
9562
9563proc SaveActualRegexp {} {
9564    if {$::PreviousActualRegexp == ""} {
9565	ShowMessage [_ "There is no actual regular expression to save."];
9566	return;
9567    }
9568    set ReSaveFile [tk_getSaveFile -initialfile "ActualRegularExpression"];
9569    if {$ReSaveFile != ""} {
9570	if {[catch {open $ReSaveFile "w"} ReSaveHandle ] != 0} {
9571	    ShowMessage [format [_ "Unable to open %s."] [MinimizeFileName $ReSaveFile]];
9572	    return;
9573	}
9574	puts $ReSaveHandle  $::PreviousActualRegexp
9575	close $ReSaveHandle;
9576	ShowMessage [format [_ "Regular expression saved in %s."] [MinimizeFileName $ReSaveFile]];
9577    }
9578}
9579
9580proc SaveResults {} {
9581    global RegexpResult;
9582    global OutputFromWindowP;
9583
9584    if {$OutputFromWindowP} {
9585	set RegexpResult [$::OUT get 1.0 end];
9586    }
9587    if {$RegexpResult == ""} {
9588	ShowMessage [_ "There is no output to save."];
9589	return ;
9590    }
9591    set OutputSaveFile [tk_getSaveFile -initialfile [_ "REDETOutput"]];
9592    if {$OutputSaveFile == ""} {
9593	ShowMessage [format [_ "Unable to open %s."] [MinimizeFileName $OutputSaveFile]];
9594	return ;
9595    }
9596    if {[catch {open $OutputSaveFile "w"} OutputSaveHandle ] != 0} {
9597	ShowMessage [format [_ "Unable to open file %s to save regular expression output."] \
9598			 [MinimizeFileName $OutputSaveFile]];
9599	return ;
9600    }
9601
9602    if {[string equal $::Pars(ResultEncoding) utf-8]} {
9603	#There's no point incurring the overhead of pwe if we don't need to
9604	fconfigure $OutputSaveHandle -encoding utf-8
9605	puts $OutputSaveHandle $RegexpResult;
9606	set msg [format [_ "Regular expression output saved in %s."] [MinimizeFileName $OutputSaveFile]];
9607    } else {
9608	if {[catch {PutWithEncoding $OutputSaveHandle $::Pars(ResultEncoding) $RegexpResult} msg] != 0} {
9609	} else {
9610	    PutNL $OutputSaveHandle
9611	    set msg [format [_ "Regular expression output saved in %s."] [MinimizeFileName $OutputSaveFile]];
9612	}
9613    }
9614    close $OutputSaveHandle;
9615    ShowMessage $msg
9616}
9617
9618proc TogglePalette {} {
9619    global PaletteIsDisplayedP;
9620    global PaletteToBeDisplayedP;
9621    global Program;
9622    global PaletteFeatures;
9623    global FeatureTestP;
9624
9625    if {$::TestingFeaturesP} {
9626	ShowMessage [_ "Testing of palette features is in progress. Please wait a moment."]
9627	return ;
9628    }
9629
9630    if {$PaletteFeatures == 0} {
9631	if {$FeatureTestP == 0} {
9632	    ShowMessage [_ "Feature testing is disabled."];
9633	} else {
9634	    ShowMessage [format [_ "%s does not support any palette entries."] $Program];
9635	}
9636	return;
9637    }
9638
9639    if {[winfo exists $::PALF.lba] == 0} {ConstructPalette;}
9640
9641    if { $PaletteIsDisplayedP == 0} {
9642	ShowPalette;
9643	set PaletteIsDisplayedP 1;
9644	set PaletteToBeDisplayedP 1;
9645    } else {
9646	wm withdraw .pal
9647	set PaletteIsDisplayedP 0;
9648	set PaletteToBeDisplayedP 0;
9649    }
9650}
9651
9652
9653
9654proc ShowPalette {} {
9655    wm deiconify .pal
9656}
9657
9658# The following sets up a progress bar.
9659option add *Progress.undoneForeground black  widgetDefault
9660option add *Progress.undoneBackground white  widgetDefault
9661option add *Progress.doneForeground   white  widgetDefault
9662option add *Progress.doneBackground   \#EFAC49 widgetDefault
9663option add *Progress.borderWidth      3      widgetDefault
9664option add *Progress$.relief           sunken widgetDefault
9665
9666namespace eval dkfprogress {
9667    namespace export Progress SetProgress
9668
9669    proc Progress {w args} {
9670	uplevel 1 [list frame $w -class Progress] $args
9671
9672	foreach {val} {
9673	    undoneForeground doneForeground
9674	    undoneBackground doneBackground
9675	} {
9676	    set class [string toupper [string index $val 0]\
9677		    ][string range $val 1 end]
9678	    set $val [option get $w $val $class]
9679	}
9680
9681	set varname [namespace current]::progressPercent($w)
9682	frame $w.l -borderwidth 0 -background $undoneBackground
9683	label $w.l.l -textvariable $varname -borderwidth 0 \
9684		-foreground $undoneForeground -background $undoneBackground
9685	$w.l configure -height [expr {int([winfo reqheight $w.l.l]+2)}]
9686	frame $w.l.fill -background $doneBackground
9687	label $w.l.fill.l -textvariable $varname -borderwidth 0 \
9688		-foreground $doneForeground -background $doneBackground
9689
9690	bind $w.l <Configure> [namespace code [list ProgressConf $w "%w"]]
9691
9692	pack $w.l -fill both -expand 1
9693	place $w.l.l -relx 0.5 -rely 0.5 -anchor center
9694	place $w.l.fill -x 0 -y 0 -relheight 1 -relwidth 0
9695	place $w.l.fill.l -x 0 -rely 0.5 -anchor center
9696
9697	SetProgress $w 0
9698	return $w
9699    }
9700
9701    proc ProgressConf {w width} {
9702	place conf $w.l.fill.l -x [expr {int($width/2)}]
9703    }
9704
9705    proc ColorSequence n {
9706	if {$n<0} {set n 0} elseif {$n>100} {set n 100}
9707	set green 0;
9708	set red 0;
9709	set blue 0;
9710	set red  [expr int(2.55 *(100 - $n))];
9711	set green [expr  int(2.55 * $n)];
9712	return [format "#%02x%02x%02x" $red $green $blue];
9713    }
9714
9715    proc SetProgress {win value {range 100}} {
9716	set progress [expr {int(100*$value)/int($range)}]
9717	set relwidth [expr {double($value)/double($range)}]
9718	variable progressPercent
9719	place conf $win.l.fill -relwidth $relwidth
9720	.placard.progbar.l.fill configure -bg [ColorSequence $progress];
9721	set progressPercent($win) "${progress}%"
9722	wm title .placard [format [_ "%3d%% Feature Test Progress"] $progress]
9723    }
9724}
9725
9726namespace import dkfprogress::Progress dkfprogress::SetProgress
9727
9728#This works, but it could probably be made more efficient if we figured out
9729#what the cause of the extra newlines is and eliminated them at the source.
9730proc CountChanges {a b} {
9731    if { [string length $a] < 1} {return 0;}
9732    if { [string length $b] < 1} {return 0;}
9733    set a [string trimright $a "\n"];
9734    set b [string trimright $b "\n"];
9735    set ALines [split $a "\n"];
9736    set BLines [split $b "\n"];
9737    set ALength [llength $ALines];
9738    set BLength [llength $BLines];
9739    if {$ALength != $BLength} {
9740	ShowMessage [_ "Substitution error: input and output do not contain the same number of lines"];
9741	puts [format "len(a) = %d\tlen(B) = %d" $ALength $BLength];
9742	return -1;
9743    }
9744    set ChangeCount 0;
9745    for {set i 0} {$i < $ALength} {incr i} {
9746	if { [string equal [lindex $ALines $i]  [lindex $BLines $i]] != 1} {
9747	    incr ChangeCount;
9748	}
9749    }
9750    return $ChangeCount;
9751}
9752
9753proc GetChanges {a b} {
9754    set ChangedLines [list];
9755    set a [string trimright $a "\n"];
9756    set b [string trimright $b "\n"];
9757    set ALines [split $a "\n"];
9758    set BLines [split $b "\n"];
9759    set ALength [llength $ALines];
9760    set BLength [llength $BLines];
9761    if {$ALength != $BLength} {
9762	ShowMessage [format [_ "Possible substitution error: test lines %d != output lines %d"] $ALength $BLength];
9763    }
9764    if {$ALength < $BLength} {
9765	set len $ALength;
9766    } else {
9767	set len $BLength;
9768    }
9769    for {set i 0} {$i < $len} {incr i} {
9770	set BLine [lindex $BLines $i];
9771	if { [string equal [lindex $ALines $i]  $BLine] != 1} {
9772	    lappend ChangedLines $BLine;
9773	}
9774    }
9775    return $ChangedLines;
9776}
9777
9778proc CountChars {t} {
9779    return  [llength [split $t ""]];
9780}
9781
9782#This is MUCH faster than directly counting newline characters.
9783proc CountLines {s} {
9784    if { [string length $s] < 1} {return 0;}
9785    return [llength [split $s "\n"]];
9786}
9787
9788proc ToggleSubstitutionMode {} {
9789    global DoSubstitutionsP;
9790    global m;
9791    global SubstitutionModeIndex;
9792    global Features;
9793    global program;
9794
9795    if {$DoSubstitutionsP == 0} {
9796	set DoSubstitutionsP 1;
9797	ShowMessage [_ "Entering substitution mode."]
9798	$m.configure entryconfigure $SubstitutionModeIndex -label \
9799	    [_ "Change to Match Mode"];
9800	CheckModeCompatibility;
9801	if {$::StandardConfigurationP} {
9802	    set ::SideBySideLayoutP 1;
9803	    set ::RegSubSideBySideP 1;
9804	}
9805    } else {
9806	set DoSubstitutionsP 0;
9807	ShowMessage [_ "Entering match mode."]
9808	$m.configure entryconfigure $SubstitutionModeIndex -label \
9809	    [_ "Change to Substitution Mode"];
9810	CheckModeCompatibility;
9811	if {$::StandardConfigurationP} {
9812	    set ::SideBySideLayoutP 0;
9813	    set ::RegSubSideBySideP 0;
9814	}
9815    }
9816    SetRegReturnBinding;
9817    SetTitle $::Version [ProgramTimeDateStamp] $::InterfaceLocale $::DoSubstitutionsP;
9818    LayoutWindows;
9819}
9820
9821proc InOutScrollLinkage {} {
9822    global DoSubstitutionsP;
9823    global OutputOnlyChangedLinesP;
9824    if {$DoSubstitutionsP} {
9825	if {$OutputOnlyChangedLinesP == 0} {
9826	    bind $::IND  <Motion>  {$::OUT yview moveto [lindex [$::IND yview] 0]}
9827	    bind $::OUT <Motion>  {$::IND yview moveto [lindex [$::OUT yview] 0]}
9828	    return ;
9829	}
9830    }
9831    bind $::IND  <Motion> "";
9832    bind $::OUT <Motion> "";
9833}
9834
9835
9836#Character entry code begins here
9837#Set this to the path to character entry menu
9838set CEM .menubar.tools.charentry
9839#Set the default insertion target here.
9840set InsertionTarget $::REG;
9841set UseNoGlyphsP 0; #Should we include in widgets characters not in Code2000?
9842#Anywhere that you want to insert characters, set up a binding like this:
9843#bind WIDGETPATHNAME <FocusIn> {SetInsertionTargets WIDGETPATHNAME}
9844
9845set DisplayConsonantChartColumnLabelsP 1
9846set DisplayConsonantChartRowLabelsP 1
9847set DisplayVowelChartColumnLabelsP 1
9848set DisplayVowelChartRowLabelsP 1
9849
9850proc BindInsertionTarget {v} {
9851    bind $v <FocusIn> "+SetInsertionTargets $v"
9852}
9853
9854option add *ipaec.Button.font CharacterEntryFont 100
9855option add *ipaec.Label.background  $ColorSpecs(IPAEntry,Background)
9856option add *ipaec.Button.background $ColorSpecs(IPAEntry,Background)
9857option add *ipaec.Button.foreground $ColorSpecs(IPAEntry,Foreground)
9858option add *ipaec.Label.relief raised
9859
9860option add *ipaev.Button.font CharacterEntryFont 100
9861option add *ipaev.Label.background  $ColorSpecs(IPAEntry,Background)
9862option add *ipaev.Button.background $ColorSpecs(IPAEntry,Background)
9863option add *ipaev.Button.foreground $ColorSpecs(IPAEntry,Foreground)
9864option add *ipaev.Label.relief raised
9865
9866option add *ipaea.Button.font AccentedLetterFont 100
9867option add *ipaea.Label.background  "\#E0E0E0"
9868option add *ipaea.Button.background "\#FFFFFF"
9869option add *ipaea.Button.foreground "\#000000"
9870option add *ipaea.Label.relief raised
9871
9872option add *ipaed.Button.font DiacriticFont 100
9873#option add *ipaed.Label.background  $ColorSpecs(IPAEntry,Background)
9874option add *ipaed.Button.background "\#E0E0FF"
9875option add *ipaed.Label.background "\#E0E0E0"
9876option add *ipaed.Button.foreground "\#000000"
9877option add *ipaed.Label.relief raised
9878
9879proc SetInsertionTargets {tgt} {
9880    set ::InsertionTarget $tgt;
9881    set ::CharByCodeInsertionTarget $tgt;
9882}
9883
9884option add *ipae*.*Label.font CharacterEntryLabelFont 100
9885option add *ipaec.*Button.font CharacterEntryFont 100
9886namespace eval ipaentry {
9887    variable IPAECColumnLabelList [list];
9888    variable IPAECRowLabelList [list];
9889    variable IPAEVColumnLabelList [list];
9890    variable IPAEVRowLabelList [list];
9891
9892    set row 0;
9893    variable poa $row;
9894    incr row;
9895    variable vlstop $row;
9896    incr row;
9897    variable vdstop $row;
9898    incr row;
9899    variable vdimplosive $row;
9900    incr row;
9901    variable click $row;
9902    incr row;
9903    variable nasal  $row;
9904    incr row;
9905    variable trill $row;
9906    incr row;
9907    variable tap $row;
9908    incr row;
9909    variable vlfric $row;
9910    incr row;
9911    variable vdfric $row;
9912    incr row;
9913    variable vlaffric $row;
9914    incr row;
9915    variable vdaffric $row;
9916    incr row;
9917    variable approx $row;
9918    incr row;
9919    variable latapprox $row;
9920    variable lastrow $row;
9921
9922    set col 0;
9923    variable manner $col;
9924    incr col;
9925    variable labial $col;
9926    incr col;
9927    variable labiodental $col;
9928    incr col;
9929    variable dental $col;
9930    incr col;
9931    variable alveolar $col;
9932    incr col;
9933    variable postalveolar $col;
9934    incr col;
9935    variable retroflex $col;
9936    incr col;
9937    variable palatal $col;
9938    incr col;
9939    variable velar $col;
9940    incr col;
9941    variable uvular $col;
9942    incr col;
9943    variable pharyngeal $col;
9944    incr col;
9945    variable epiglottal $col;
9946    incr col;
9947    variable glottal $col;
9948    variable lastcolumn $col;
9949
9950    proc cfesh {} {
9951	variable vlfric
9952	variable postalveolar
9953	eval [list [format ".ipaec.r%dc%d" $vlfric $postalveolar] configure -text "\u0161"];
9954    }
9955    proc cresh {} {
9956	variable vlfric
9957	variable postalveolar
9958	eval [list [format ".ipaec.r%dc%d" $vlfric $postalveolar] configure -text "\u0283"];
9959    }
9960
9961    proc cfeshr {} {
9962	variable vlfric
9963	variable retroflex
9964	eval [list [format ".ipaec.r%dc%d" $vlfric $retroflex] configure -text "\u1E63"];
9965    }
9966    proc creshr {} {
9967	variable vlfric
9968	variable retroflex
9969	eval [list [format ".ipaec.r%dc%d" $vlfric $retroflex] configure -text "\u0282"];
9970    }
9971
9972    proc cryod {} {
9973	variable approx
9974	variable palatal
9975	eval [list [format ".ipaec.r%dc%d" $approx $palatal] configure -text "j"];
9976    }
9977
9978    proc cfyod {} {
9979	variable approx
9980	variable palatal
9981	eval [list [format ".ipaec.r%dc%d" $approx $palatal] configure -text "y"];
9982    }
9983
9984    proc crny {} {
9985	variable nasal
9986	variable palatal
9987	eval [list [format ".ipaec.r%dc%d" $nasal $palatal] configure -text "\u0272"];
9988    }
9989    proc cfny {} {
9990	variable nasal
9991	variable palatal
9992	eval [list [format ".ipaec.r%dc%d" $nasal $palatal] configure -text "\u00F1"];
9993    }
9994
9995    proc crch {} {
9996	variable vlaffric
9997	variable postalveolar
9998	eval [list [format ".ipaec.r%dc%d" $vlaffric $postalveolar] configure -text "t\u0283"];
9999    }
10000    proc cfch {} {
10001	variable vlaffric
10002	variable postalveolar
10003	eval [list [format ".ipaec.r%dc%d" $vlaffric $postalveolar] configure -text "\u010D"];
10004    }
10005
10006    proc crchr {} {
10007	variable vlaffric
10008	variable retroflex
10009	eval [list [format ".ipaec.r%dc%d" $vlaffric $retroflex] configure -text "\u0288\u0282"];
10010    }
10011
10012    proc cfchr {} {
10013	variable vlaffric
10014	variable retroflex
10015	eval [list [format ".ipaec.r%dc%d" $vlaffric $retroflex] configure -text "\u1E6D\u1E63"];
10016    }
10017
10018
10019    proc crdj {} {
10020	eval [list [format ".ipaec.r%dc%d" $ipaentry::vdaffric $ipaentry::postalveolar] configure -text "d\u0292"];
10021    }
10022
10023    proc cfdj {} {
10024	eval [list [format ".ipaec.r%dc%d" $ipaentry::vdaffric $ipaentry::postalveolar] configure -text "\u01C6"];
10025    }
10026
10027    proc crdjr {} {
10028	eval [list [format ".ipaec.r%dc%d" $ipaentry::vdaffric $ipaentry::retroflex] configure -text "\u0256\u0290"];
10029    }
10030
10031    proc cfdjr {} {
10032	eval [list [format ".ipaec.r%dc%d" $ipaentry::vdaffric $ipaentry::retroflex] configure -text "\u1E0D\u1E93"];
10033    }
10034
10035    proc crzh {} {
10036	variable vdfric
10037	variable postalveolar
10038	eval [list [format ".ipaec.r%dc%d" $vdfric $postalveolar] configure -text "\u0292"];
10039    }
10040    proc cfzh {} {
10041	variable vdfric
10042	variable postalveolar
10043	eval [list [format ".ipaec.r%dc%d" $vdfric $postalveolar] configure -text "\u017E"];
10044    }
10045
10046    proc crtr {} {
10047	variable vlstop
10048	variable retroflex
10049	eval [list [format ".ipaec.r%dc%d" $vlstop $retroflex] configure -text "\u0288"];
10050    }
10051    proc cftr {} {
10052	variable vlstop
10053	variable retroflex
10054	eval [list [format ".ipaec.r%dc%d" $vlstop $retroflex] configure -text "\u1E6D"];
10055    }
10056
10057    proc crdr {} {
10058	variable vdstop
10059	variable retroflex
10060	eval [list [format ".ipaec.r%dc%d" $vdstop $retroflex] configure -text "\u0256"];
10061    }
10062    proc cfdr {} {
10063	variable vdstop
10064	variable retroflex
10065	eval [list [format ".ipaec.r%dc%d" $vdstop $retroflex] configure -text "\u1E0D"];
10066    }
10067
10068
10069    proc crnr {} {
10070	variable nasal
10071	variable retroflex
10072	eval [list [format ".ipaec.r%dc%d" $nasal $retroflex] configure -text "\u0273"];
10073    }
10074    proc cfnr {} {
10075	variable nasal
10076	variable retroflex
10077	eval [list [format ".ipaec.r%dc%d" $nasal $retroflex] configure -text "\u1E47"];
10078    }
10079
10080
10081    proc crzhr {} {
10082	variable vdfric
10083	variable retroflex
10084	eval [list [format ".ipaec.r%dc%d" $vdfric $retroflex] configure -text "\u0290"];
10085    }
10086    proc cfzhr {} {
10087	variable vdfric
10088	variable retroflex
10089	eval [list [format ".ipaec.r%dc%d" $vdfric $retroflex] configure -text "\u1E93"];
10090    }
10091
10092    proc crflapr {} {
10093	variable tap;
10094	variable retroflex
10095	eval [list [format ".ipaec.r%dc%d" $tap $retroflex] configure -text "\u027D"];
10096    }
10097    proc cfflapr {} {
10098	variable tap;
10099	variable retroflex
10100	eval [list [format ".ipaec.r%dc%d" $tap $retroflex] configure -text "\u1E5B"];
10101    }
10102
10103    proc crlr {} {
10104	variable latapprox;
10105	variable retroflex
10106	eval [list [format ".ipaec.r%dc%d" $latapprox $retroflex] configure -text "\u026D"];
10107    }
10108    proc cflr {} {
10109	variable latapprox;
10110	variable retroflex
10111	eval [list [format ".ipaec.r%dc%d" $latapprox $retroflex] configure -text "\u1E37"];
10112    }
10113
10114    proc crrr {} {
10115	variable approx;
10116	variable retroflex
10117	eval [list [format ".ipaec.r%dc%d" $approx $retroflex] configure -text "\u027B"];
10118    }
10119    proc cfrr {} {
10120	variable approx;
10121	variable retroflex
10122	eval [list [format ".ipaec.r%dc%d" $approx $retroflex] configure -text "\u1E5B"];
10123    }
10124
10125    proc bhcham {w} {
10126	balloonhelp_for $w "The standard IPA character is shown by default. When the mouse\npointer is over the button, the \"North American\" variant is shown.\nRight click to insert the variant."
10127    }
10128
10129    proc bhsp {w} {
10130	balloonhelp_for $w "The characters below and to the right are characters\nthat do not fit neatly into the chart."
10131    }
10132
10133    proc UnpackConsonantColumnLabels {} {
10134	variable IPAECColumnLabelList;
10135	foreach l $IPAECColumnLabelList {
10136	    grid forget $l;
10137	}
10138    }
10139
10140    proc PackConsonantColumnLabels {} {
10141	destroy .ipaec
10142	PopupIPAEntryC;
10143    }
10144
10145    proc UnpackConsonantRowLabels {} {
10146	variable IPAECRowLabelList;
10147	foreach l $IPAECRowLabelList {
10148	    grid forget $l;
10149	}
10150    }
10151
10152    proc PackConsonantRowLabels {} {
10153	destroy .ipaec;
10154	PopupIPAEntryC;
10155    }
10156
10157    proc UnpackVowelColumnLabels {} {
10158	variable IPAEVColumnLabelList;
10159	foreach l $IPAEVColumnLabelList {
10160	    grid forget $l;
10161	}
10162    }
10163
10164    proc PackVowelColumnLabels {} {
10165	destroy .ipaev;
10166	PopupIPAEntryV;
10167    }
10168
10169    proc UnpackVowelRowLabels {} {
10170	variable IPAEVRowLabelList;
10171	foreach l $IPAEVRowLabelList {
10172	    grid forget $l;
10173	}
10174    }
10175
10176    proc PackVowelRowLabels {} {
10177	destroy .ipaev;
10178	PopupIPAEntryV;
10179    }
10180
10181    proc PopupIPAEntryC {} {
10182	variable poa
10183	variable vlstop
10184	variable vdstop
10185	variable vdimplosive
10186	variable click
10187	variable nasal
10188	variable trill
10189	variable tap
10190	variable vlfric
10191	variable vdfric
10192	variable vlaffric
10193	variable vdaffric
10194	variable approx
10195	variable latapprox
10196	variable lastrow
10197
10198	variable manner
10199	variable labial
10200	variable labiodental
10201	variable dental
10202	variable alveolar
10203	variable postalveolar
10204	variable retroflex
10205	variable palatal
10206	variable velar
10207	variable uvular
10208	variable pharyngeal
10209	variable epiglottal
10210	variable glottal
10211	variable lastcolumn
10212
10213	variable IPAECColumnLabelList;
10214	variable IPAECRowLabelList;
10215	global DisplayConsonantChartColumnLabelsP
10216	global DisplayConsonantChartRowLabelsP
10217
10218	set IPAECColumnLabelList [list];
10219	set IPAECRowLabelList [list];
10220
10221	set xp 2;
10222	set yp 3;
10223	set spcolor 	\#c46276;
10224	toplevel .ipaec -borderwidth 3 -class CharEntry
10225	wm title .ipaec [_ "Consonant Symbols"]
10226	BindKeys .ipaec;
10227	set DownMsg [_ "Display IPA Consonant Chart"];
10228	set UpMsg   [_ "Remove IPA Consonant Chart"];
10229	bind .ipaec <Destroy> \
10230	    "set ::IPACIsDisplayedP 0;$::CEM entryconfigure $::ToggleIPACIndex -label \"$DownMsg\""
10231	bind .ipaec <Unmap> \
10232	    "set ::IPACIsDisplayedP 0;$::CEM entryconfigure $::ToggleIPACIndex -label \"$DownMsg\""
10233	bind .ipaec <Map> \
10234	    "set ::IPACIsDisplayedP 1;$::CEM entryconfigure $::ToggleIPACIndex -label \"$UpMsg\""
10235	set tmp [label [format ".ipaec.r%dc%d" $manner $poa] \
10236	  -text [_ "IPA\nConsonants"]  -padx 5 -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10237	lappend IPAECColumnLabelList $tmp;
10238	lappend IPAECRowLabelList $tmp;
10239	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $labial] \
10240	    -text [_ "labial"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10241	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $labiodental] \
10242	    -text [_ "labio\ndental"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10243	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $dental] \
10244	    -text [_ "dental"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10245	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $alveolar] \
10246	    -text [_ "alveolar"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10247	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $postalveolar] \
10248	    -text [_ "post\nalveolar"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10249	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $retroflex] \
10250	    -text [_ "retro\nflex"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10251	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $palatal] \
10252	    -text [_ "palatal"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10253	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $velar] \
10254	    -text [_ "velar"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10255	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $uvular] \
10256	    -text [_ "uvular"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10257	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $pharyngeal] \
10258	    -text [_ "pharyn\ngeal"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10259	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $epiglottal] \
10260	    -text [_ "epi\nglottal"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10261	lappend IPAECColumnLabelList [label [format ".ipaec.r%dc%d" $manner $glottal] \
10262	    -text [_ "glottal"]   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10263
10264	#Voiceless oral stops
10265	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vlstop $poa] \
10266	       -text [_ "voiceless stops"] -anchor w  -padx $xp -pady $yp \
10267	       -bg $::ColorSpecs(IPAHeadings,Background)]
10268	set cmd {$::InsertionTarget insert insert [list p]}
10269	set bn [format ".ipaec.r%dc%d"  $vlstop $labial]
10270	button $bn  -text "p" -padx $xp -pady $yp -command  $cmd \
10271	    -fg $::ColorSpecs(UserTextEntry,Foreground); #debug
10272	balloonhelpd_for $bn [_ "voiceless labial stop"]
10273
10274	label [format ".ipaec.r%dc%d" $vlstop $labiodental] \
10275	    -text " " -padx $xp -pady $yp
10276
10277	set cmd {$::InsertionTarget insert insert [list t\u032A]}
10278	set bn [format ".ipaec.r%dc%d"  $vlstop $dental]
10279	button $bn  -text "t\u032A"   -padx $xp -pady $yp -command  $cmd
10280	balloonhelpd_for $bn [_ "voiceless dental stop"]
10281
10282	set cmd {$::InsertionTarget insert insert [list t]}
10283	set bn [format ".ipaec.r%dc%d"  $vlstop $alveolar]
10284	button $bn -text "t"   -padx $xp -pady $yp -command $cmd
10285	balloonhelpd_for $bn [_ "voiceless alveolar stop"]
10286
10287	label [format ".ipaec.r%dc%d"  $vlstop $postalveolar] -text " "   -padx $xp -pady $yp
10288
10289	set cmd {$::InsertionTarget insert insert [list \u0288]}
10290	set bn [format ".ipaec.r%dc%d"  $vlstop $retroflex]
10291	button $bn  -text \u0288   -padx $xp -pady $yp -command $cmd
10292	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E6D]}
10293	bind $bn <Enter> {ipaentry::cftr}
10294	bind $bn <Leave> {ipaentry::crtr}
10295	bhcham $bn;
10296	balloonhelpd_for $bn [_ "voiceless retroflex stop"]
10297
10298	set cmd {$::InsertionTarget insert insert [list c]}
10299	set bn [format ".ipaec.r%dc%d"  $vlstop $palatal]
10300	button $bn -text "c"   -padx $xp -pady $yp -command $cmd
10301	balloonhelpd_for $bn [_ "voiceless palatal stop"]
10302
10303	set cmd {$::InsertionTarget insert insert [list k]}
10304	set bn [format ".ipaec.r%dc%d" $vlstop $velar]
10305	button $bn -text "k" -padx $xp -pady $yp -command $cmd
10306	balloonhelpd_for $bn [_ "voiceless velar stop"]
10307
10308	set cmd {$::InsertionTarget insert insert [list q]}
10309	set bn [format ".ipaec.r%dc%d" $vlstop $uvular]
10310	button $bn  -text "q"   -padx $xp -pady $yp -command $cmd
10311	balloonhelpd_for $bn [_ "voiceless uvular stop"]
10312
10313	label [format ".ipaec.r%dc%d" $vlstop $pharyngeal] -text " "   -padx $xp -pady $yp
10314	label [format ".ipaec.r%dc%d" $vlstop $epiglottal] -text " "   -padx $xp -pady $yp
10315
10316	set cmd {$::InsertionTarget insert insert [list \u0294]}
10317	set bn [format ".ipaec.r%dc%d" $vlstop $glottal]
10318	button $bn -text \u0294   -padx $xp -pady $yp -command $cmd
10319	balloonhelpd_for $bn [_ "voiceless glottal stop"]
10320
10321	#Voiced oral stops
10322	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vdstop $poa] \
10323	       -text [_ "voiced stops"] -anchor w   -padx $xp -pady $yp \
10324	       -bg $::ColorSpecs(IPAHeadings,Background)]
10325	set cmd {$::InsertionTarget insert insert [list b]}
10326	set bn [format ".ipaec.r%dc%d" $vdstop $labial]
10327	button $bn -text "b"   -padx $xp -pady $yp -command $cmd
10328	balloonhelpd_for $bn [_ "voiced bilabial stop"]
10329
10330	label [format ".ipaec.r%dc%d" $vdstop $labiodental] -text " "   -padx $xp -pady $yp
10331
10332	set cmd {$::InsertionTarget insert insert [list d\u032A]}
10333	set bn [format ".ipaec.r%dc%d" $vdstop $dental]
10334	button $bn -text "d\u032A"   -padx $xp -pady $yp -command $cmd
10335	balloonhelpd_for $bn [_ "voiced dental stop"]
10336
10337	set cmd {$::InsertionTarget insert insert [list d]}
10338	set bn [format ".ipaec.r%dc%d" $vdstop $alveolar]
10339	button  $bn -text "d"   -padx $xp -pady $yp -command $cmd
10340	balloonhelpd_for $bn [_ "voiced alveolar stop"]
10341
10342	label [format ".ipaec.r%dc%d"  $vdstop $postalveolar] -text " "   -padx $xp -pady $yp
10343
10344	set cmd {$::InsertionTarget insert insert [list \u0256]}
10345	set bn [format ".ipaec.r%dc%d"  $vdstop $retroflex]
10346	button $bn  -text \u0256   -padx $xp -pady $yp -command $cmd
10347	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E0D]}
10348	bind $bn <Enter> {ipaentry::cfdr}
10349	bind $bn <Leave> {ipaentry::crdr}
10350	bhcham $bn;
10351	balloonhelpd_for $bn [_ "voiced retroflex stop"]
10352
10353	set cmd {$::InsertionTarget insert insert [list \u025F]}
10354	set bn [format ".ipaec.r%dc%d" $vdstop $palatal]
10355	button $bn -text \u025F   -padx $xp -pady $yp -command $cmd
10356	balloonhelpd_for $bn [_ "voiced palatal stop"]
10357
10358
10359	set cmd {$::InsertionTarget insert insert [list g]}
10360	set bn [format ".ipaec.r%dc%d" $vdstop $velar]
10361	button $bn -text "g"   -padx $xp -pady $yp -command $cmd
10362	balloonhelpd_for $bn [_ "voiced velar stop"]
10363
10364	set cmd {$::InsertionTarget insert insert [list \u0262]}
10365	set bn [format ".ipaec.r%dc%d" $vdstop $uvular]
10366	button $bn -text \u0262  -padx $xp -pady $yp -command $cmd
10367	balloonhelpd_for $bn [_ "voiced uvular stop"]
10368
10369	label [format ".ipaec.r%dc%d" $vdstop $pharyngeal] -text " "  -padx $xp -pady $yp
10370
10371	set cmd {$::InsertionTarget insert insert [list \u02A1]}
10372	set bn [format ".ipaec.r%dc%d" $vdstop $epiglottal]
10373	button $bn -text \u02A1  -padx $xp -pady $yp -command $cmd
10374	balloonhelpd_for $bn [_ "voiced epiglottal stop"]
10375
10376	label [format ".ipaec.r%dc%d" $vdstop $glottal] -text " "  -padx $xp -pady $yp
10377
10378	#Nasals
10379	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $nasal $poa] \
10380	       -text [_ "nasals"] -anchor w -padx $xp -pady $yp \
10381	       -bg $::ColorSpecs(IPAHeadings,Background)]
10382
10383	set cmd {$::InsertionTarget insert insert [list m]}
10384	set bn [format ".ipaec.r%dc%d" $nasal $labial]
10385	button $bn -text "m" -padx $xp -pady $yp -command $cmd
10386	balloonhelpd_for $bn [_ "bilabial nasal"]
10387
10388	set cmd {$::InsertionTarget insert insert [list \u0271]}
10389	set bn [format ".ipaec.r%dc%d" $nasal $labiodental]
10390	button $bn -text \u0271   -padx $xp -pady $yp -command $cmd
10391	balloonhelpd_for $bn [_ "labiodental nasal"]
10392
10393	set cmd {$::InsertionTarget insert insert [list n\u032A]}
10394	set bn [format ".ipaec.r%dc%d" $nasal $dental]
10395	button $bn -text n\u032A   -padx $xp -pady $yp -command $cmd
10396	balloonhelpd_for $bn [_ "dental nasal"]
10397
10398	set cmd {$::InsertionTarget insert insert [list n]}
10399	set bn [format ".ipaec.r%dc%d" $nasal $alveolar]
10400	button $bn -text "n"      -padx $xp -pady $yp -command $cmd
10401	balloonhelpd_for $bn [_ "alveolar nasal"]
10402
10403	label [format ".ipaec.r%dc%d"  $nasal $postalveolar] -text " "   -padx $xp -pady $yp
10404
10405	set cmd {$::InsertionTarget insert insert [list \u0273]}
10406	set bn [format ".ipaec.r%dc%d"  $nasal $retroflex]
10407	button $bn  -text \u0273   -padx $xp -pady $yp -command $cmd
10408	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E47]}
10409	bind $bn <Enter> {ipaentry::cfnr}
10410	bind $bn <Leave> {ipaentry::crnr}
10411	bhcham $bn;
10412	balloonhelpd_for $bn [_ "retroflex nasal"]
10413
10414	set cmd {$::InsertionTarget insert insert [list \u0272]}
10415	set bn [format ".ipaec.r%dc%d" $nasal $palatal]
10416	button $bn  -text \u0272    -padx $xp -pady $yp -command $cmd
10417	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u00F1]}
10418	bind $bn <Enter> {ipaentry::cfny}
10419	bind $bn <Leave> {ipaentry::crny}
10420	bhcham $bn;
10421	balloonhelpd_for $bn [_ "palatal nasal"]
10422
10423	set cmd {$::InsertionTarget insert insert [list \u014B]}
10424	set bn [format ".ipaec.r%dc%d" $nasal $velar]
10425	button $bn -text \u014B    -padx $xp -pady $yp -command $cmd
10426	balloonhelpd_for $bn [_ "velar nasal"]
10427
10428	set cmd {$::InsertionTarget insert insert [list \u0274]}
10429	set bn [format ".ipaec.r%dc%d" $nasal $uvular]
10430	button $bn -text \u0274    -padx $xp -pady $yp -command $cmd
10431	balloonhelpd_for $bn [_ "uvular nasal"]
10432
10433	label [format ".ipaec.r%dc%d" $nasal $pharyngeal] -text " "    -padx $xp -pady $yp
10434	label [format ".ipaec.r%dc%d" $nasal $epiglottal] -text " "    -padx $xp -pady $yp
10435	label [format ".ipaec.r%dc%d" $nasal $glottal] -text " "    -padx $xp -pady $yp
10436
10437	#Voiceless fricatives
10438	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vlfric $poa] \
10439	       -text [_ "voiceless fricatives"] -anchor w  -padx $xp -pady $yp \
10440	       -bg $::ColorSpecs(IPAHeadings,Background)]
10441
10442	set cmd {$::InsertionTarget insert insert [list \u03C6]}
10443	set bn [format ".ipaec.r%dc%d" $vlfric $labial]
10444	button $bn -text \u03C6  -padx $xp -pady $yp -command $cmd
10445	balloonhelpd_for $bn [_ "voiceless bilabial fricative"]
10446
10447	set cmd {$::InsertionTarget insert insert [list f]}
10448	set bn [format ".ipaec.r%dc%d" $vlfric $labiodental]
10449	button $bn  -text "f"   -padx $xp -pady $yp -command $cmd
10450	balloonhelpd_for $bn [_ "voiceless labiodental fricative"]
10451
10452	set cmd {$::InsertionTarget insert insert [list \u03B8]}
10453	set bn [format ".ipaec.r%dc%d" $vlfric $dental]
10454	button $bn -text \u03B8   -padx $xp -pady $yp -command $cmd
10455	balloonhelpd_for $bn [_ "voiceless dental fricative"]
10456
10457	set cmd {$::InsertionTarget insert insert [list "s"]}
10458	set bn [format ".ipaec.r%dc%d" $vlfric $alveolar]
10459	button $bn -text "s"  -padx $xp -pady $yp -command $cmd
10460	balloonhelpd_for $bn [_ "voiceless alveolar fricative"]
10461
10462	set cmd {$::InsertionTarget insert insert [list \u0283]}
10463	set bn [format ".ipaec.r%dc%d" $vlfric $postalveolar];
10464	button $bn -text \u0283   -padx $xp -pady $yp -command $cmd
10465	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u0161]}
10466	bind $bn <Enter> {ipaentry::cfesh}
10467	bind $bn <Leave> {ipaentry::cresh}
10468	bhcham $bn;
10469	balloonhelpd_for $bn [_ "voiceless postalveolar fricative"]
10470
10471	set cmd {$::InsertionTarget insert insert [list \u0282]}
10472	set bn [format ".ipaec.r%dc%d" $vlfric $retroflex];
10473	button $bn -text \u0282   -padx $xp -pady $yp -command $cmd
10474	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E63]}
10475	bind $bn <Enter> {ipaentry::cfeshr}
10476	bind $bn <Leave> {ipaentry::creshr}
10477	bhcham $bn;
10478	balloonhelpd_for $bn [_ "voiceless retroflex fricative"]
10479
10480	set cmd {$::InsertionTarget insert insert [list \u0255]}
10481	set bn [format ".ipaec.r%dc%d" $vlfric $palatal]
10482	button $bn -text \u0255  -padx $xp -pady $yp -command $cmd
10483	balloonhelpd_for $bn [_ "voiceless palatal fricative"]
10484
10485	set cmd {$::InsertionTarget insert insert [list "x"]}
10486	set bn [format ".ipaec.r%dc%d" $vlfric $velar]
10487	button $bn -text "x" -padx $xp -pady $yp -command $cmd
10488	balloonhelpd_for $bn [_ "voiceless velar fricative"]
10489
10490	set cmd {$::InsertionTarget insert insert [list "\u03C7"]}
10491	set bn [format ".ipaec.r%dc%d" $vlfric $uvular]
10492	button $bn -text "\u03C7"    -padx $xp -pady $yp -command $cmd
10493	balloonhelpd_for $bn [_ "voiceless uvular fricative"]
10494
10495	set cmd {$::InsertionTarget insert insert [list \u0127]}
10496	set bn [format ".ipaec.r%dc%d" $vlfric $pharyngeal]
10497	button $bn -text \u0127 -padx $xp -pady $yp -command $cmd
10498	balloonhelpd_for $bn [_ "voiceless pharyngeal fricative"]
10499
10500	set cmd {$::InsertionTarget insert insert [list \u029C]}
10501	set bn [format ".ipaec.r%dc%d" $vlfric $epiglottal]
10502	button $bn -text \u029C   -padx $xp -pady $yp -command $cmd
10503	balloonhelpd_for $bn [_ "voiceless epiglottal fricative"]
10504
10505	set cmd {$::InsertionTarget insert insert [list "h"]}
10506	set bn [format ".ipaec.r%dc%d" $vlfric $glottal]
10507	button $bn -text "h" -padx $xp -pady $yp -command $cmd
10508	balloonhelpd_for $bn [_ "voiceless glottal fricative"]
10509
10510	#Voiced fricatives
10511	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vdfric $poa] \
10512	       -text [_ "voiced fricatives"] -anchor w \
10513	       -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10514
10515	set cmd {$::InsertionTarget insert insert [list \u03B2]}
10516	set bn [format ".ipaec.r%dc%d" $vdfric $labial]
10517	button $bn -text \u03B2  -padx $xp -pady $yp -command $cmd
10518	balloonhelpd_for $bn [_ "voiced bilabial fricative"]
10519
10520	set cmd {$::InsertionTarget insert insert [list v]}
10521	set bn [format ".ipaec.r%dc%d" $vdfric $labiodental]
10522	button $bn -text "v" -padx $xp -pady $yp -command $cmd
10523	balloonhelpd_for $bn [_ "voiced labiodental fricative"]
10524
10525	set cmd {$::InsertionTarget insert insert [list "\u00F0"]}
10526	set bn [format ".ipaec.r%dc%d" $vdfric $dental]
10527	button $bn -text "\u00F0"    -padx $xp -pady $yp -command $cmd
10528	balloonhelpd_for $bn [_ "voiced dental fricative"]
10529
10530	set cmd {$::InsertionTarget insert insert [list "z"]}
10531	set bn [format ".ipaec.r%dc%d" $vdfric $alveolar]
10532	button $bn -text "z"   -padx $xp -pady $yp -command $cmd
10533	balloonhelpd_for $bn [_ "voiced alveolar fricative"]
10534
10535	set cmd {$::InsertionTarget insert insert [list \u0292]}
10536	set bn [format ".ipaec.r%dc%d" $vdfric $postalveolar]
10537	button $bn -text \u0292  -padx $xp -pady $yp -command $cmd
10538	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u017E]}
10539	bind $bn <Enter> {ipaentry::cfzh}
10540	bind $bn <Leave> {ipaentry::crzh}
10541	bhcham $bn;
10542	balloonhelpd_for $bn [_ "voiced postalveolar fricative"]
10543
10544	set cmd {$::InsertionTarget insert insert [list \u0290]}
10545	set bn [format ".ipaec.r%dc%d" $vdfric $retroflex]
10546	button $bn -text \u0290   -padx $xp -pady $yp -command $cmd
10547	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E93]}
10548	bind $bn <Enter> {ipaentry::cfzhr}
10549	bind $bn <Leave> {ipaentry::crzhr}
10550	bhcham $bn;
10551	balloonhelpd_for $bn [_ "voiced retroflex fricative"]
10552
10553	set cmd {$::InsertionTarget insert insert [list \u029D]}
10554	set bn [format ".ipaec.r%dc%d" $vdfric $palatal]
10555	button $bn -text  \u029D  -padx $xp -pady $yp -command $cmd
10556	balloonhelpd_for $bn [_ "voiced palatal fricative"]
10557
10558	set cmd {$::InsertionTarget insert insert [list \u0263]}
10559	set bn [format ".ipaec.r%dc%d" $vdfric $velar]
10560	button $bn -text \u0263  -padx $xp -pady $yp -command $cmd
10561	balloonhelpd_for $bn [_ "voiced velar fricative"]
10562
10563	set cmd {$::InsertionTarget insert insert [list "\u0281"]}
10564	set bn [format ".ipaec.r%dc%d" $vdfric $uvular]
10565	button $bn -text "\u0281" -padx $xp -pady $yp -command $cmd
10566	balloonhelpd_for $bn [_ "voiced uvular fricative"]
10567
10568	set cmd {$::InsertionTarget insert insert [list \u0295]}
10569	set bn [format ".ipaec.r%dc%d" $vdfric $pharyngeal]
10570	button $bn -text \u0295 -padx $xp -pady $yp -command $cmd
10571	balloonhelpd_for $bn [_ "voiced pharyngeal fricative"]
10572
10573	set cmd {$::InsertionTarget insert insert [list \u02A2]}
10574	set bn [format ".ipaec.r%dc%d" $vdfric $epiglottal]
10575	button $bn -text \u02A2    -padx $xp -pady $yp -command $cmd
10576	balloonhelpd_for $bn [_ "voiced epiglottal fricative"]
10577
10578	set cmd {$::InsertionTarget insert insert [list \u0266]}
10579	set bn [format ".ipaec.r%dc%d" $vdfric $glottal]
10580	button $bn -text \u0266    -padx $xp -pady $yp -command $cmd
10581	balloonhelpd_for $bn [_ "voiced glottal fricative"]
10582
10583	#trills
10584	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $trill $poa] \
10585	       -text [_ "trills"] -anchor w   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10586	set cmd {$::InsertionTarget insert insert [list \u0299]}
10587	set bn [format ".ipaec.r%dc%d" $trill $labial]
10588	button  $bn -text \u0299      -padx $xp -pady $yp -command $cmd
10589	balloonhelpd_for $bn [_ "bilabial trill"]
10590
10591	label [format ".ipaec.r%dc%d" $trill $labiodental] -text " "   -padx $xp -pady $yp
10592	label [format ".ipaec.r%dc%d" $trill $dental] -text " "   -padx $xp -pady $yp
10593	set cmd {$::InsertionTarget insert insert [list r]}
10594	set bn [format ".ipaec.r%dc%d" $trill $alveolar]
10595	button $bn -text "r"      -padx $xp -pady $yp -command $cmd
10596	balloonhelpd_for $bn [_ "alveolar trill"]
10597
10598	label [format ".ipaec.r%dc%d"  $trill $postalveolar] -text " "   -padx $xp -pady $yp
10599	label [format ".ipaec.r%dc%d"  $trill $retroflex] -text " "   -padx $xp -pady $yp
10600	label [format ".ipaec.r%dc%d" $trill $palatal] -text " "    -padx $xp -pady $yp
10601	label [format ".ipaec.r%dc%d" $trill $velar] -text " "    -padx $xp -pady $yp
10602
10603	set cmd {$::InsertionTarget insert insert [list \u0280]}
10604	set bn [format ".ipaec.r%dc%d" $trill $uvular]
10605	button $bn -text \u0280    -padx $xp -pady $yp -command $cmd
10606	balloonhelpd_for $bn [_ "uvular trill"]
10607
10608	label [format ".ipaec.r%dc%d" $trill $pharyngeal] -text " "    -padx $xp -pady $yp
10609	label [format ".ipaec.r%dc%d" $trill $epiglottal] -text " "    -padx $xp -pady $yp
10610	label [format ".ipaec.r%dc%d" $trill $glottal] -text " "    -padx $xp -pady $yp
10611
10612	#taps and flaps
10613	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $tap $poa] \
10614	       -text [_ "taps/flaps"] -anchor w   -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10615	label [format ".ipaec.r%dc%d" $tap $labial] -text " "      -padx $xp -pady $yp
10616	label [format ".ipaec.r%dc%d" $tap $labiodental] -text " "   -padx $xp -pady $yp
10617	label [format ".ipaec.r%dc%d" $tap $dental] -text " "   -padx $xp -pady $yp
10618
10619	set cmd {$::InsertionTarget insert insert [list \u027E]}
10620	set bn [format ".ipaec.r%dc%d" $tap $alveolar]
10621	button $bn -text \u027E -padx $xp -pady $yp -command $cmd
10622	balloonhelpd_for $bn [_ "uvular trill"]
10623
10624	label [format ".ipaec.r%dc%d"  $tap $postalveolar] -text " "   -padx $xp -pady $yp
10625
10626	set cmd {$::InsertionTarget insert insert [list \u027D]}
10627	set bn [format ".ipaec.r%dc%d"  $tap $retroflex];
10628	button $bn -text \u027D   -padx $xp -pady $yp -command $cmd
10629	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E5B]}
10630	bind $bn <Enter> {ipaentry::cfflapr}
10631	bind $bn <Leave> {ipaentry::crflapr}
10632	bhcham $bn;
10633	balloonhelpd_for $bn [_ "retroflex tap"]
10634
10635	label [format ".ipaec.r%dc%d" $tap $palatal] -text " "    -padx $xp -pady $yp
10636	label [format ".ipaec.r%dc%d" $tap $velar] -text " "    -padx $xp -pady $yp
10637	label [format ".ipaec.r%dc%d" $tap $uvular] -text " "    -padx $xp -pady $yp
10638	label [format ".ipaec.r%dc%d" $tap $pharyngeal] -text " "    -padx $xp -pady $yp
10639	label [format ".ipaec.r%dc%d" $tap $epiglottal] -text " "    -padx $xp -pady $yp
10640	label [format ".ipaec.r%dc%d" $tap $glottal] -text " "    -padx $xp -pady $yp
10641
10642	#approximants
10643	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $approx $poa] \
10644	       -text [_ "approximants"] -anchor w \
10645	       -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10646	label [format ".ipaec.r%dc%d" $approx $labial] -text " "      -padx $xp -pady $yp
10647	set cmd {$::InsertionTarget insert insert [list \u028B]}
10648	set bn [format ".ipaec.r%dc%d" $approx $labiodental]
10649	button $bn -text \u028B   -padx $xp -pady $yp -command $cmd
10650	balloonhelpd_for $bn [_ "labiodental approximant"]
10651
10652	label [format ".ipaec.r%dc%d" $approx $dental] -text " "   -padx $xp -pady $yp
10653	set cmd {$::InsertionTarget insert insert [list \u0279]}
10654	set bn [format ".ipaec.r%dc%d" $approx $alveolar]
10655	button $bn -text  \u0279 -padx $xp -pady $yp -command $cmd
10656	balloonhelpd_for $bn [_ "alveolar approximant"]
10657
10658	label [format ".ipaec.r%dc%d"  $approx $postalveolar] -text " "   -padx $xp -pady $yp
10659
10660	set cmd {$::InsertionTarget insert insert [list \u027B]}
10661	set bn [format ".ipaec.r%dc%d"  $approx $retroflex]
10662	button $bn -text \u027B   -padx $xp -pady $yp -command $cmd
10663	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E5B]}
10664	bind $bn <Enter> {ipaentry::cfrr}
10665	bind $bn <Leave> {ipaentry::crrr}
10666	bhcham $bn;
10667	balloonhelpd_for $bn [_ "retroflex approximant"]
10668
10669	set cmd {$::InsertionTarget insert insert [list "j"]}
10670	set bn [format ".ipaec.r%dc%d" $approx $palatal]
10671	button $bn -text "j"    -padx $xp -pady $yp -command $cmd
10672	bind $bn <<B3>> {$::InsertionTarget insert insert [list "y"]}
10673	bind $bn <Enter> {ipaentry::cfyod}
10674	bind $bn <Leave> {ipaentry::cryod}
10675	bhcham $bn;
10676	balloonhelpd_for $bn [_ "palatal approximant"]
10677
10678	set cmd {$::InsertionTarget insert insert [list \u0270]}
10679	set bn [format ".ipaec.r%dc%d" $approx $velar]
10680	button $bn  -text \u0270    -padx $xp -pady $yp -command $cmd
10681	balloonhelpd_for $bn [_ "velar approximant"]
10682
10683	label [format ".ipaec.r%dc%d" $approx $uvular] -text " "  \
10684	    -padx $xp -pady $yp -bg $spcolor
10685	label [format ".ipaec.r%dc%d" $approx $pharyngeal] -text " "  \
10686	    -padx $xp -pady $yp -bg $spcolor
10687
10688	#label [format ".ipaec.r%dc%d" $approx $epiglottal] -text " "  \
10689	    -padx $xp -pady $yp -bg $spcolor
10690	#label [format ".ipaec.r%dc%d" $approx $glottal] -text " "   \
10691	    -padx $xp -pady $yp -bg $spcolor
10692
10693	#lateral approximants
10694	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $latapprox $poa] \
10695	       -text [_ "lateral approximants"] -anchor w \
10696	       -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10697	label [format ".ipaec.r%dc%d" $latapprox $labial] -text " "      -padx $xp -pady $yp
10698	label [format ".ipaec.r%dc%d" $latapprox $labiodental] -text " "   -padx $xp -pady $yp
10699	label [format ".ipaec.r%dc%d" $latapprox $dental] -text " "   -padx $xp -pady $yp
10700
10701	set cmd {$::InsertionTarget insert insert [list "l"]}
10702	set bn [format ".ipaec.r%dc%d" $latapprox $alveolar]
10703	button $bn -text "l"    -padx $xp -pady $yp -command $cmd
10704	balloonhelpd_for $bn [_ "alveolar lateral approximant"]
10705
10706	label [format ".ipaec.r%dc%d"  $latapprox $postalveolar] -text " "   -padx $xp -pady $yp
10707
10708	set cmd {$::InsertionTarget insert insert [list \u026D]}
10709	set bn [format ".ipaec.r%dc%d"  $latapprox $retroflex]
10710	button $bn  -text \u026D   -padx $xp -pady $yp -command $cmd
10711	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E37]}
10712	bind $bn <Enter> {ipaentry::cflr}
10713	bind $bn <Leave> {ipaentry::crlr}
10714	bhcham $bn;
10715	balloonhelpd_for $bn [_ "retroflex lateral approximant"]
10716
10717	set cmd {$::InsertionTarget insert insert [list \u028E]}
10718	set bn [format ".ipaec.r%dc%d" $latapprox $palatal]
10719	button $bn -text \u028E    -padx $xp -pady $yp -command $cmd
10720	balloonhelpd_for $bn [_ "palatal lateral approximant"]
10721
10722	set cmd {$::InsertionTarget insert insert [list \u029F]}
10723	set bn [format ".ipaec.r%dc%d" $latapprox $velar]
10724	button $bn -text \u029F    -padx $xp -pady $yp -command $cmd
10725	balloonhelpd_for $bn [_ "velar lateral approximant"]
10726
10727	label [format ".ipaec.r%dc%d" $latapprox $uvular] -text " "  \
10728	    -padx $xp -pady $yp -bg $spcolor
10729	#label [format ".ipaec.r%dc%d" $latapprox $pharyngeal] -text " "  \
10730	    -padx $xp -pady $yp -bg $spcolor
10731	#label [format ".ipaec.r%dc%d" $latapprox $epiglottal] -text " "  \
10732	    -padx $xp -pady $yp
10733	#label [format ".ipaec.r%dc%d" $latapprox $glottal] -text " "  \
10734	    -padx $xp -pady $yp
10735
10736	#voiced implosives
10737	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vdimplosive $poa] \
10738	       -text [_ "voiced implosives"] -anchor w \
10739	       -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10740
10741	set cmd {$::InsertionTarget insert insert [list \u0253]}
10742	set bn [format ".ipaec.r%dc%d" $vdimplosive $labial]
10743	button $bn -text \u0253 -padx $xp -pady $yp -command $cmd
10744	balloonhelpd_for $bn [_ "voiced bilabial implosive"]
10745
10746	label [format ".ipaec.r%dc%d" $vdimplosive $labiodental] -text " " \
10747	    -padx $xp -pady $yp
10748	label [format ".ipaec.r%dc%d" $vdimplosive $dental] -text " "  \
10749	    -padx $xp -pady $yp
10750
10751	set cmd {$::InsertionTarget insert insert [list \u0257]}
10752	set bn [format ".ipaec.r%dc%d" $vdimplosive $alveolar]
10753	button $bn -text \u0257   -padx $xp -pady $yp -command $cmd
10754	balloonhelpd_for $bn [_ "voiced alveolar implosive"]
10755
10756	label [format ".ipaec.r%dc%d"  $vdimplosive $postalveolar] -text " " \
10757	    -padx $xp -pady $yp
10758
10759	#Not officially recognized by IPA yet.
10760	set cmd {$::InsertionTarget insert insert [list \u1D91]}
10761	set bn [format ".ipaec.r%dc%d"  $vdimplosive $retroflex]
10762	button $bn -text \u1D91  -padx $xp -pady $yp -command $cmd
10763	balloonhelpd_for $bn [_ "voiced retroflex implosive"]
10764
10765	set cmd {$::InsertionTarget insert insert [list \u0284]}
10766	set bn [format ".ipaec.r%dc%d" $vdimplosive $palatal]
10767	button $bn -text \u0284  -padx $xp -pady $yp -command $cmd
10768	balloonhelpd_for $bn [_ "voiced palatal implosive"]
10769
10770	set cmd {$::InsertionTarget insert insert [list \u0260]}
10771	set bn [format ".ipaec.r%dc%d" $vdimplosive $velar]
10772	button $bn -text \u0260 -padx $xp -pady $yp -command $cmd
10773	balloonhelpd_for $bn [_ "voiced velar implosive"]
10774
10775	set cmd {$::InsertionTarget insert insert [list \u029B]}
10776	set bn [format ".ipaec.r%dc%d" $vdimplosive $uvular]
10777	button $bn -text \u029B    -padx $xp -pady $yp -command $cmd
10778	balloonhelpd_for $bn [_ "voiced uvular implosive"]
10779
10780	label [format ".ipaec.r%dc%d" $vdimplosive $pharyngeal] -text " "    -padx $xp -pady $yp
10781	label [format ".ipaec.r%dc%d" $vdimplosive $epiglottal] -text " "    -padx $xp -pady $yp
10782	label [format ".ipaec.r%dc%d" $vdimplosive $glottal] -text " "    -padx $xp -pady $yp
10783
10784	#clicks
10785	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $click $poa] \
10786	       -text [_ "clicks"] -anchor w  -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
10787
10788	set cmd {$::InsertionTarget insert insert [list \u0298]}
10789	set bn [format ".ipaec.r%dc%d" $click $labial]
10790	button $bn -text \u0298      -padx $xp -pady $yp -command $cmd
10791	balloonhelpd_for $bn [_ "labial click"]
10792
10793	label [format ".ipaec.r%dc%d" $click $labiodental] -text " "   -padx $xp -pady $yp
10794
10795	set cmd {$::InsertionTarget insert insert [list \u01C0]}
10796	set bn [format ".ipaec.r%dc%d" $click $dental]
10797	button $bn -text \u01C0   -padx $xp -pady $yp -command $cmd
10798	balloonhelpd_for $bn [_ "dental click"]
10799
10800	set cmd {$::InsertionTarget insert insert [list \u01C2]}
10801	set bn [format ".ipaec.r%dc%d" $click $alveolar]
10802	button $bn -text \u01C2   -padx $xp -pady $yp -command $cmd
10803	balloonhelpd_for $bn [_ "alveolar click"]
10804
10805	set cmd {$::InsertionTarget insert insert [list \u01C3]}
10806	set bn [format ".ipaec.r%dc%d"  $click $postalveolar]
10807	button $bn -text \u01C3 \
10808	    -padx $xp -pady $yp  -command $cmd
10809	balloonhelpd_for $bn [_ "postalveolar click"]
10810
10811	label [format ".ipaec.r%dc%d"  $click $retroflex] -text " "   -padx $xp -pady $yp
10812	label [format ".ipaec.r%dc%d" $click $palatal] -text " "  -padx $xp -pady $yp
10813	label [format ".ipaec.r%dc%d" $click $velar] -text " "    -padx $xp -pady $yp
10814	label [format ".ipaec.r%dc%d" $click $uvular] -text " "    -padx $xp -pady $yp
10815	label [format ".ipaec.r%dc%d" $click $pharyngeal] -text " "    -padx $xp -pady $yp
10816	label [format ".ipaec.r%dc%d" $click $epiglottal] -text " "    -padx $xp -pady $yp
10817	set cmd {BackDelete $::InsertionTarget}
10818	set bn [format ".ipaec.r%dc%d" $click $glottal];
10819	button $bn -text [_ "Delete"]  -padx $xp -pady $yp -command $cmd -background "\#E0D0FF";
10820	set DeleteButton $bn;
10821
10822
10823	#Voiceless affricates
10824	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vlaffric $poa] \
10825	       -text [_ "voiceless affricates"] -anchor w -padx $xp -pady $yp \
10826	       -bg $::ColorSpecs(IPAHeadings,Background)]
10827
10828	set cmd {$::InsertionTarget insert insert [list p\u03C6]}
10829	set bn [format ".ipaec.r%dc%d" $vlaffric $labial]
10830	button $bn -text "p\u03C6"      -padx $xp -pady $yp -command $cmd
10831	balloonhelpd_for $bn [_ "voiceless bilabial affricate"]
10832
10833	label [format ".ipaec.r%dc%d" $vlaffric $labiodental] -text "" -padx $xp -pady $yp
10834
10835	set cmd {$::InsertionTarget insert insert [list t\u03B8]}
10836	set bn [format ".ipaec.r%dc%d" $vlaffric $dental]
10837	button $bn -text "t\u03B8"   -padx $xp -pady $yp -command $cmd
10838	balloonhelpd_for $bn [_ "voiceless dental affricate"]
10839
10840	set cmd {$::InsertionTarget insert insert [list "ts"]}
10841	set bn [format ".ipaec.r%dc%d" $vlaffric $alveolar]
10842	button $bn -text "ts"    -padx $xp -pady $yp -command $cmd
10843	balloonhelpd_for $bn [_ "voiceless alveolar affricate"]
10844
10845	set cmd {$::InsertionTarget insert insert [list t\u0283]}
10846	set bn [format ".ipaec.r%dc%d"  $vlaffric $postalveolar]
10847	button $bn -text "t\u0283"   -padx $xp -pady $yp -command $cmd
10848	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u010D]}
10849	bind $bn <Enter> {ipaentry::cfch}
10850	bind $bn <Leave> {ipaentry::crch}
10851	bhcham $bn;
10852	balloonhelpd_for $bn [_ "voiceless postalveolar affricate"]
10853
10854	set cmd {$::InsertionTarget insert insert [list \u0288\u0282]}
10855	set bn [format ".ipaec.r%dc%d"  $vlaffric $retroflex]
10856	button $bn -text \u0288\u0282   -padx $xp -pady $yp -command $cmd
10857	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E6D\u1E63]}
10858	bind $bn <Enter> {ipaentry::cfchr}
10859	bind $bn <Leave> {ipaentry::crchr}
10860	bhcham $bn;
10861	balloonhelpd_for $bn [_ "voiceless retroflex affricate"]
10862
10863	set cmd {$::InsertionTarget insert insert [list t\u0255]}
10864	set bn [format ".ipaec.r%dc%d" $vlaffric $palatal]
10865	button $bn -text t\u0255 -padx $xp -pady $yp -command $cmd
10866	balloonhelpd_for $bn [_ "voiceless palatal affricate"]
10867
10868	set cmd {$::InsertionTarget insert insert [list "kx"]}
10869	set bn [format ".ipaec.r%dc%d" $vlaffric $velar]
10870	button $bn -text "kx"    -padx $xp -pady $yp -command $cmd
10871	balloonhelpd_for $bn [_ "voiceless velar affricate"]
10872
10873	set cmd {$::InsertionTarget insert insert [list "q\u03C7"]}
10874	set bn [format ".ipaec.r%dc%d" $vlaffric $uvular]
10875	button $bn -text "q\u03C7"    -padx $xp -pady $yp -command $cmd
10876	balloonhelpd_for $bn [_ "voiceless uvular affricate"]
10877
10878	label [format ".ipaec.r%dc%d" $vlaffric $pharyngeal] -text "" \
10879	    -padx $xp -pady $yp -bg $spcolor
10880	label [format ".ipaec.r%dc%d" $vlaffric $epiglottal] -text "" \
10881	    -padx $xp -pady $yp -bg $spcolor
10882	label [format ".ipaec.r%dc%d" $vlaffric $glottal] -text "" \
10883	    -padx $xp -pady $yp -bg $spcolor
10884
10885	#Voiced affricate
10886	lappend IPAECRowLabelList [label [format ".ipaec.r%dc%d" $vdaffric $poa] \
10887	       -text [_ "voiced affricates"] -anchor w -padx $xp -pady $yp \
10888	       -bg $::ColorSpecs(IPAHeadings,Background)]
10889
10890	set cmd {$::InsertionTarget insert insert [list b\u03B2]}
10891	set bn [format ".ipaec.r%dc%d" $vdaffric $labial]
10892	button $bn -text b\u03B2      -padx $xp -pady $yp -command $cmd
10893	balloonhelpd_for $bn [_ "voiced bilabial affricate"]
10894
10895	label [format ".ipaec.r%dc%d" $vdaffric $labiodental] -text ""   -padx $xp -pady $yp
10896
10897	set cmd {$::InsertionTarget insert insert [list "d\u00F0"]}
10898	set bn [format ".ipaec.r%dc%d" $vdaffric $dental]
10899	button $bn -text "d\u00F0"    -padx $xp -pady $yp -command $cmd
10900	balloonhelpd_for $bn [_ "voiced dental affricate"]
10901
10902	set cmd {$::InsertionTarget insert insert [list "dz"]}
10903	set bn [format ".ipaec.r%dc%d" $vdaffric $alveolar]
10904	button  $bn -text "dz"  -padx $xp -pady $yp -command $cmd
10905	balloonhelpd_for $bn [_ "voiced alveolar affricate"]
10906
10907	set cmd {$::InsertionTarget insert insert [list d\u0292]}
10908	set bn [format ".ipaec.r%dc%d" $vdaffric $postalveolar]
10909	button $bn -text d\u0292  -padx $xp -pady $yp -command $cmd
10910	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u01C6]}
10911	bind $bn <Enter> {ipaentry::cfdj}
10912	bind $bn <Leave> {ipaentry::crdj}
10913	bhcham $bn;
10914	balloonhelpd_for $bn [_ "voiced postalveolar affricate"]
10915
10916	set cmd {$::InsertionTarget insert insert [list \u0256\u0290]}
10917	set bn [format ".ipaec.r%dc%d" $vdaffric $retroflex]
10918	button $bn -text \u0256\u0290   -padx $xp -pady $yp -command $cmd
10919	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u1E0D\u1E93]}
10920	bind $bn <Enter> {ipaentry::cfdjr}
10921	bind $bn <Leave> {ipaentry::crdjr}
10922	bhcham $bn;
10923	balloonhelpd_for $bn [_ "voiced retroflex affricate"]
10924
10925	set cmd {$::InsertionTarget insert insert [list d\u029D]}
10926	set bn [format ".ipaec.r%dc%d" $vdaffric $palatal]
10927	button $bn -text  d\u029D  -padx $xp -pady $yp -command $cmd
10928	balloonhelpd_for $bn [_ "voiced palatal affricate"]
10929
10930	set cmd {$::InsertionTarget insert insert [list g\u0263]}
10931	set bn [format ".ipaec.r%dc%d" $vdaffric $velar]
10932	button $bn -text g\u0263    -padx $xp -pady $yp -command $cmd
10933	balloonhelpd_for $bn [_ "voiced velar affricate"]
10934
10935	set cmd {$::InsertionTarget insert insert [list "\u0262\u0281"]}
10936	set bn [format ".ipaec.r%dc%d" $vdaffric $uvular]
10937	button $bn -text "\u0262\u0281"    -padx $xp -pady $yp -command $cmd
10938	balloonhelpd_for $bn [_ "voiced uvular affricate"]
10939
10940	label [format ".ipaec.r%dc%d" $vdaffric $pharyngeal] -text "" \
10941	    -padx $xp -pady $yp -bg $spcolor
10942	#label [format ".ipaec.r%dc%d" $vdaffric $epiglottal] -text "" \
10943	    -padx $xp -pady $yp -bg $spcolor
10944	#label [format ".ipaec.r%dc%d" $vdaffric $glottal] -text ""   \
10945	    -padx $xp -pady $yp -bg $spcolor
10946
10947	set cmd {$::InsertionTarget insert insert [list "\u028D"]}
10948	button .ipaec.r13c10 -text \u028D -padx $xp -pady $yp -command $cmd
10949	balloonhelpd_for .ipaec.r13c10  [_ "Voiceless labio-velar fricative"]
10950	set cmd {$::InsertionTarget insert insert [list "\u0265"]}
10951	button .ipaec.r11c11 -text \u0265 -padx $xp -pady $yp -command $cmd
10952	balloonhelpd_for .ipaec.r11c11  [_ "Voiced labio-palatal approximant"]
10953	set cmd {$::InsertionTarget insert insert [list "\u0077"]}
10954	button .ipaec.r11c12 -text \u0077 -padx $xp -pady $yp -command $cmd
10955	balloonhelpd_for .ipaec.r11c12  [_ "Voiced labio-velar approximant"]
10956	set cmd {$::InsertionTarget insert insert [list "\u01C1"]}
10957	button .ipaec.r12c11 -text \u01C1 -padx $xp -pady $yp -command $cmd
10958	set cmd {$::InsertionTarget insert insert [list "\u02A0"]}
10959	button .ipaec.r12c12 -text \u02A0 -padx $xp -pady $yp -command $cmd
10960	set cmd {$::InsertionTarget insert insert [list "\u026C"]}
10961	button .ipaec.r13c11 -text \u026C -padx $xp -pady $yp -command $cmd
10962	set cmd {$::InsertionTarget insert insert [list "\u026E"]}
10963	button .ipaec.r13c12 -text \u026E -padx $xp -pady $yp -command $cmd
10964
10965	for {set row 0} {$row <= $lastrow} {incr row} {
10966	    set line [list];
10967	    for {set col 0} {$col <= $lastcolumn} {incr col} {
10968		set cell [format ".ipaec.r%dc%d" $row $col]
10969		lappend line $cell
10970		if {[string equal [winfo class $cell] "Label"]} {
10971		    balloonhelp_for $cell  [_ "Left click to insert standard characters.\nRight click to insert alternative characters."]
10972		}
10973	    }
10974	    eval grid $line -sticky news;
10975	}
10976	balloonhelpd_for .ipaec.r12c11  [_ "Lateral click"]
10977	balloonhelpd_for .ipaec.r12c12  [_ "Voiceless uvular implosive"]
10978	balloonhelpd_for .ipaec.r13c11  [_ "Voiceless lateral fricative"]
10979	balloonhelpd_for .ipaec.r13c12  [_ "Voiced lateral fricative"]
10980	bhsp [format ".ipaec.r%dc%d" $latapprox $uvular]
10981	bhsp [format ".ipaec.r%dc%d" $approx $uvular]
10982	bhsp [format ".ipaec.r%dc%d" $approx $pharyngeal]
10983	bhsp [format ".ipaec.r%dc%d" $vlaffric $pharyngeal]
10984	bhsp [format ".ipaec.r%dc%d" $vlaffric $epiglottal]
10985	bhsp [format ".ipaec.r%dc%d" $vlaffric $glottal]
10986	bhsp [format ".ipaec.r%dc%d" $vdaffric $pharyngeal]
10987	balloonhelpd_for $DeleteButton [_ "No, there isn't a glottal click  called \"Delete\".\nThis is so that you can correct mistakes while using\nthe mouse, without having to go back to the keyboard."]
10988	after idle {
10989	    update idletasks
10990	    raise .ipaec;
10991	}
10992	if {!$DisplayConsonantChartColumnLabelsP} {UnpackConsonantColumnLabels}
10993	if {!$DisplayConsonantChartRowLabelsP} {UnpackConsonantRowLabels}
10994    }
10995
10996    set row 0;
10997    variable frontness $row;
10998    incr row;
10999    variable close $row;
11000    incr row;
11001    variable closeclosemid $row;
11002    incr row;
11003    variable closemid $row;
11004    incr row;
11005    variable midmid $row;
11006    incr row;
11007    variable openmid $row;
11008    incr row;
11009    variable openopenmid $row;
11010    incr row;
11011    variable open $row;
11012    variable lastvrow $row;
11013
11014    set col 0;
11015    variable height $col;
11016    incr col;
11017    variable fronturd $col;
11018    incr col;
11019    variable frontrnd $col;
11020    incr col;
11021    variable centurd $col;
11022    incr col;
11023    variable centrnd $col;
11024    incr col;
11025    variable backurd $col;
11026    incr col;
11027    variable backrnd $col;
11028    variable lastvcolumn $col;
11029
11030    proc vry {} {
11031	variable close
11032	variable frontrnd
11033	eval [list [format ".ipaev.r%dc%d" $close $frontrnd] configure -text "y"];
11034	}
11035
11036    proc vfy {} {
11037	variable close
11038	variable frontrnd
11039	eval [list [format ".ipaev.r%dc%d" $close $frontrnd] configure -text "\u00FC"];
11040	}
11041
11042    proc vrphi {} {
11043	variable frontrnd;
11044	variable closemid
11045	eval [list [format ".ipaev.r%dc%d" $closemid $frontrnd] configure -text "\u00F8"];
11046    }
11047
11048    proc vfphi {} {
11049	variable frontrnd;
11050	variable closemid
11051	eval [list [format ".ipaev.r%dc%d" $closemid $frontrnd] configure -text "o\u0308"];
11052    }
11053
11054    proc vroe {} {
11055	variable frontrnd;
11056	variable openmid
11057	eval [list [format ".ipaev.r%dc%d" $openmid $frontrnd] configure -text "\u0153"];
11058    }
11059
11060    proc vfoe {} {
11061	variable frontrnd;
11062	variable openmid
11063	eval [list [format ".ipaev.r%dc%d" $openmid $frontrnd] configure -text "\u0254\0308"];
11064    }
11065
11066
11067    proc PopupIPAEntryV {} {
11068	variable frontness
11069	variable close
11070	variable closeclosemid
11071	variable closemid
11072	variable openmid
11073	variable midmid
11074	variable openopenmid
11075	variable open
11076	variable lastvrow
11077
11078	variable height
11079	variable fronturd
11080	variable frontrnd
11081	variable centurd
11082	variable centrnd
11083	variable backurd
11084	variable backrnd
11085	variable lastvcolumn
11086
11087	variable IPAEVColumnLabelList
11088	variable IPAEVRowLabelList
11089	global DisplayVowelChartColumnLabelsP
11090	global DisplayVowelChartRowLabelsP
11091
11092	set xp 2;
11093	set yp 3;
11094	toplevel .ipaev -borderwidth 3
11095	wm title .ipaev [_ "Vowel Symbols"]
11096	BindKeys .ipaev;
11097	bind .ipaev <Destroy> {set ::IPAVIsDisplayedP 0}
11098	set DownMsg [_ "Display IPA Vowel Chart"];
11099	set UpMsg   [_ "Remove IPA Vowel Chart"];
11100	#Column headers
11101	set tmp [label [format ".ipaev.r%dc%d" $height $frontness] \
11102	     -text [_ "IPA\nVowels"]  -padx $xp -pady $yp -bg $::ColorSpecs(IPAHeadings,Background)]
11103	lappend IPAEVColumnLabelList $tmp;
11104	lappend IPAEVRowLabelList $tmp;
11105	lappend IPAEVColumnLabelList [label [format ".ipaev.r%dc%d" $height $fronturd] \
11106	     -text [_ "Front\nUnrounded"]  -padx $xp -pady $yp \
11107     	     -bg $::ColorSpecs(IPAHeadings,Background)]
11108	lappend IPAEVColumnLabelList [label [format ".ipaev.r%dc%d" $height $frontrnd] \
11109	     -text [_ "Front\nRounded"]  -padx $xp -pady $yp \
11110  	     -bg $::ColorSpecs(IPAHeadings,Background)]
11111	lappend IPAEVColumnLabelList [label [format ".ipaev.r%dc%d" $height $centurd] \
11112	     -text [_ "Central\nUnrounded"]  -padx $xp -pady $yp \
11113	     -bg $::ColorSpecs(IPAHeadings,Background)]
11114	lappend IPAEVColumnLabelList [label [format ".ipaev.r%dc%d" $height $centrnd] \
11115	     -text [_ "Central\nRounded"]  -padx $xp -pady $yp \
11116   	     -bg $::ColorSpecs(IPAHeadings,Background)]
11117	lappend IPAEVColumnLabelList [label [format ".ipaev.r%dc%d" $height $backurd] \
11118	     -text [_ "Back\nUnrounded"]  -padx $xp -pady $yp \
11119  	     -bg $::ColorSpecs(IPAHeadings,Background)]
11120	lappend IPAEVColumnLabelList [label [format ".ipaev.r%dc%d" $height $backrnd] \
11121	     -text [_ "Back\nRounded"]  -padx $xp -pady $yp \
11122  	     -bg $::ColorSpecs(IPAHeadings,Background)]
11123
11124
11125	#Close vowels
11126	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $close $frontness] \
11127	   -text [_ "Close"] -anchor w  -padx $xp -pady $yp \
11128  	   -bg $::ColorSpecs(IPAHeadings,Background)]
11129
11130	set cmd {$::InsertionTarget insert insert [list i]}
11131	set bn [format ".ipaev.r%dc%d"  $close $fronturd]
11132	button $bn -text "i"   -padx $xp -pady $yp -command  $cmd
11133	balloonhelpd_for $bn [_ "close front unrounded vowel"]
11134
11135	set cmd {$::InsertionTarget insert insert [list y]}
11136	set bn  [format ".ipaev.r%dc%d"  $close $frontrnd]
11137	button $bn -text "y"   -padx $xp -pady $yp -command  $cmd
11138	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u00FC]}
11139	bind $bn <Enter> {ipaentry::vfy}
11140	bind $bn <Leave> {ipaentry::vry}
11141	balloonhelpd_for $bn [_ "close front rounded vowel"]
11142
11143	set cmd {$::InsertionTarget insert insert [list \u0268]}
11144	set bn [format ".ipaev.r%dc%d"  $close $centurd]
11145	button  $bn -text "\u0268"   -padx $xp -pady $yp -command  $cmd
11146	balloonhelpd_for $bn [_ "close central unrounded vowel"]
11147
11148	set cmd {$::InsertionTarget insert insert [list \u0289]}
11149	set bn [format ".ipaev.r%dc%d"  $close $centrnd]
11150	button $bn -text "\u0289"   -padx $xp -pady $yp -command  $cmd
11151	balloonhelpd_for $bn [_ "close central rounded vowel"]
11152
11153	set cmd {$::InsertionTarget insert insert [list \u0268]}
11154	set bn [format ".ipaev.r%dc%d"  $close $backurd]
11155	button $bn -text "\u0268"   -padx $xp -pady $yp -command  $cmd
11156	balloonhelpd_for $bn [_ "close back unrounded vowel"]
11157
11158	set cmd {$::InsertionTarget insert insert [list u]}
11159	set bn [format ".ipaev.r%dc%d"  $close $backrnd]
11160	button $bn -text "u"   -padx $xp -pady $yp -command  $cmd
11161	balloonhelpd_for $bn [_ "close back rounded vowel"]
11162
11163	# Close close mid vowels
11164	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $closeclosemid $frontness] \
11165	     -text [_ "Close Close Mid"] -anchor w  -padx $xp -pady $yp \
11166	  -bg $::ColorSpecs(IPAHeadings,Background)]
11167	set cmd {$::InsertionTarget insert insert [list I]}
11168	set bn [format ".ipaev.r%dc%d"  $closeclosemid $fronturd]
11169	button $bn -text "I"   -padx $xp -pady $yp -command  $cmd
11170	balloonhelpd_for $bn [_ "close close mid front unrounded vowel"]
11171
11172	set cmd {$::InsertionTarget insert insert [list Y]}
11173	set bn [format ".ipaev.r%dc%d"  $closeclosemid $frontrnd]
11174	button $bn -text "Y"   -padx $xp -pady $yp -command  $cmd
11175	balloonhelpd_for $bn [_ "close close mid front rounded vowel"]
11176
11177	set bn [format ".ipaev.r%dc%d"  $closeclosemid $centurd]
11178	label $bn -text ""   -padx $xp -pady $yp
11179	bhcham $bn
11180
11181	set cmd {$::InsertionTarget insert insert [list \u028A]}
11182	set bn [format ".ipaev.r%dc%d"  $closeclosemid $centrnd]
11183	button $bn  -text "\u028A"   -padx $xp -pady $yp -command  $cmd
11184	balloonhelpd_for $bn [_ "close close mid central rounded vowel"]
11185
11186	set bn [format ".ipaev.r%dc%d"  $closeclosemid $backurd]
11187	label $bn -text ""   -padx $xp -pady $yp
11188	bhcham $bn
11189
11190	set bn [format ".ipaev.r%dc%d"  $closeclosemid $backrnd]
11191	label $bn -text ""   -padx $xp -pady $yp
11192	bhcham $bn
11193
11194	# Close mid vowels
11195	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $closemid $frontness] \
11196	     -text [_ "Close Mid"] -anchor w  -padx $xp -pady $yp \
11197	  -bg $::ColorSpecs(IPAHeadings,Background)]
11198	set cmd {$::InsertionTarget insert insert [list e]}
11199	set bn [format ".ipaev.r%dc%d"  $closemid $fronturd]
11200	button $bn -text "e"   -padx $xp -pady $yp -command  $cmd
11201	balloonhelpd_for $bn [_ "close mid front unrounded vowel"]
11202
11203	set cmd {$::InsertionTarget insert insert [list \u00F8]}
11204	set bn [format ".ipaev.r%dc%d"  $closemid $frontrnd]
11205	button $bn -text "\u00F8"   -padx $xp -pady $yp -command  $cmd
11206	bind $bn <<B3>> {$::InsertionTarget insert insert [list o\u0308]}
11207	bind $bn <Enter> {ipaentry::vfphi}
11208	bind $bn <Leave> {ipaentry::vrphi}
11209	balloonhelpd_for $bn [_ "close mid front rounded vowel"]
11210
11211	set cmd {$::InsertionTarget insert insert [list \u0258]}
11212	set bn [format ".ipaev.r%dc%d"  $closemid $centurd]
11213	button $bn -text "\u0258"   -padx $xp -pady $yp -command  $cmd
11214	balloonhelpd_for $bn [_ "close mid central unrounded vowel"]
11215
11216	set cmd {$::InsertionTarget insert insert [list \u0275]}
11217	set bn [format ".ipaev.r%dc%d"  $closemid $centrnd]
11218	button $bn  -text "\u0275"   -padx $xp -pady $yp -command  $cmd
11219	balloonhelpd_for $bn [_ "close mid central rounded vowel"]
11220
11221	set cmd {$::InsertionTarget insert insert [list \u0264]}
11222	set bn [format ".ipaev.r%dc%d"  $closemid $backurd]
11223	button $bn  -text "\u0264"   -padx $xp -pady $yp -command  $cmd
11224	balloonhelpd_for $bn [_ "close mid back unrounded vowel"]
11225
11226	set cmd {$::InsertionTarget insert insert [list o]}
11227	set bn [format ".ipaev.r%dc%d"  $closemid $backrnd]
11228	button $bn -text "o"   -padx $xp -pady $yp -command  $cmd
11229	balloonhelpd_for $bn [_ "close mid back rounded vowel"]
11230
11231	# Mid mid vowels
11232	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $midmid $frontness] \
11233	     -text [_ "Mid Mid"] -anchor w  -padx $xp -pady $yp \
11234	  -bg $::ColorSpecs(IPAHeadings,Background)]
11235	label [format ".ipaev.r%dc%d"  $midmid $fronturd] \
11236	     -text ""   -padx $xp -pady $yp
11237	label [format ".ipaev.r%dc%d"  $midmid $frontrnd] \
11238	     -text ""   -padx $xp -pady $yp
11239	set cmd {$::InsertionTarget insert insert [list \u0259]}
11240	set bn [format ".ipaev.r%dc%d"  $midmid $centurd]
11241	button $bn -text "\u0259"   -padx $xp -pady $yp -command  $cmd
11242	balloonhelpd_for $bn [_ "mid mid central unrounded vowel"]
11243
11244	set cmd {BackDelete $::InsertionTarget}
11245	set bn [format ".ipaev.r%dc%d" $midmid $centrnd];
11246	button $bn -text [_ "Delete"]  \
11247	     -padx $xp -pady $yp -command $cmd -background "\#E0D0FF";
11248	set DeleteButton $bn;
11249	label [format ".ipaev.r%dc%d"  $midmid $backurd] -text ""   -padx $xp -pady $yp
11250	label [format ".ipaev.r%dc%d"  $midmid $backrnd] -text ""   -padx $xp -pady $yp
11251
11252	# Open mid vowels
11253	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $openmid $frontness] \
11254	     -text [_ "Open Mid"] -anchor w  -padx $xp -pady $yp \
11255  	     -bg $::ColorSpecs(IPAHeadings,Background)]
11256	set cmd {$::InsertionTarget insert insert [list \u025B]}
11257	set bn [format ".ipaev.r%dc%d"  $openmid $fronturd]
11258	button $bn -text \u025B   -padx $xp -pady $yp -command  $cmd
11259	balloonhelpd_for $bn [_ "open mid front unrounded vowel"]
11260
11261	set cmd {$::InsertionTarget insert insert [list \u0153]}
11262	set bn [format ".ipaev.r%dc%d"  $openmid $frontrnd]
11263	button $bn -text "\u0153"   -padx $xp -pady $yp -command  $cmd
11264	bind $bn <<B3>> {$::InsertionTarget insert insert [list \u0254\u0308]}
11265	bind $bn <Enter> {ipaentry::vfoe}
11266	bind $bn <Leave> {ipaentry::vroe}
11267	balloonhelpd_for $bn [_ "open mid front rounded vowel"]
11268
11269	set cmd {$::InsertionTarget insert insert [list \u025C]}
11270	set bn [format ".ipaev.r%dc%d"  $openmid $centurd]
11271	button $bn -text "\u025C"   -padx $xp -pady $yp -command  $cmd
11272	balloonhelpd_for $bn [_ "open mid central unrounded vowel"]
11273
11274	set cmd {$::InsertionTarget insert insert [list \u025E]}
11275	set bn [format ".ipaev.r%dc%d"  $openmid $centrnd]
11276	button $bn -text "\u025E"   -padx $xp -pady $yp -command  $cmd
11277	balloonhelpd_for $bn [_ "open mid central rounded vowel"]
11278
11279	set cmd {$::InsertionTarget insert insert [list \u028C]}
11280	set bn [format ".ipaev.r%dc%d"  $openmid $backurd]
11281	button $bn -text "\u028C"   -padx $xp -pady $yp -command  $cmd
11282	balloonhelpd_for $bn [_ "open mid back unrounded vowel"]
11283
11284	set cmd {$::InsertionTarget insert insert [list \u0254]}
11285	set bn [format ".ipaev.r%dc%d"  $openmid $backrnd]
11286	button $bn -text "\u0254"   -padx $xp -pady $yp -command  $cmd
11287	balloonhelpd_for $bn [_ "open mid back rounded vowel"]
11288
11289	# Open open mid vowels
11290	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $openopenmid $frontness] \
11291	     -text [_ "Open Open Mid"] -anchor w  -padx $xp -pady $yp \
11292  	     -bg $::ColorSpecs(IPAHeadings,Background)]
11293	set cmd {$::InsertionTarget insert insert [list \u00E6]}
11294	set bn [format ".ipaev.r%dc%d"  $openopenmid $fronturd]
11295	button $bn -text \u00E6   -padx $xp -pady $yp -command  $cmd
11296	balloonhelpd_for $bn [_ "open open mid front unrounded vowel"]
11297
11298	label [format ".ipaev.r%dc%d"  $openopenmid $frontrnd] -text ""   -padx $xp -pady $yp
11299	set cmd {$::InsertionTarget insert insert [list \u0250]}
11300	set bn [format ".ipaev.r%dc%d"  $openopenmid $centurd]
11301	button $bn  -text "\u0250"   -padx $xp -pady $yp -command  $cmd
11302	balloonhelpd_for $bn [_ "open open mid central unrounded vowel"]
11303
11304	label [format ".ipaev.r%dc%d"  $openopenmid $centrnd] \
11305		     -text ""   -padx $xp -pady $yp
11306	label [format ".ipaev.r%dc%d"  $openopenmid $backurd] \
11307	     -text ""   -padx $xp -pady $yp
11308	label [format ".ipaev.r%dc%d"  $openopenmid $backrnd] \
11309	     -text ""   -padx $xp -pady $yp
11310
11311	# Open  vowels
11312	lappend IPAEVRowLabelList [label [format ".ipaev.r%dc%d" $open $frontness] \
11313	   -text [_ "Open"] -anchor w  -padx $xp -pady $yp \
11314	   -bg $::ColorSpecs(IPAHeadings,Background)]
11315	set cmd {$::InsertionTarget insert insert [list a]}
11316	set bn [format ".ipaev.r%dc%d"  $open $fronturd]
11317	button $bn -text "a"   -padx $xp -pady $yp -command  $cmd
11318	balloonhelpd_for $bn [_ "open front unrounded vowel"]
11319
11320	set cmd {$::InsertionTarget insert insert [list \u0276]}
11321	set bn [format ".ipaev.r%dc%d"  $open $frontrnd]
11322	button $bn -text "\u0276"   -padx $xp -pady $yp -command  $cmd
11323	balloonhelpd_for $bn [_ "open front rounded vowel"]
11324
11325	label [format ".ipaev.r%dc%d"  $open $centurd] \
11326	     -text ""   -padx $xp -pady $yp
11327	label [format ".ipaev.r%dc%d"  $open $centrnd] \
11328	     -text ""   -padx $xp -pady $yp
11329	set cmd {$::InsertionTarget insert insert [list \u0251]}
11330	set bn [format ".ipaev.r%dc%d"  $open $backurd]
11331	button $bn -text "\u0251"   -padx $xp -pady $yp -command  $cmd
11332	balloonhelpd_for $bn [_ "open back unrounded vowel"]
11333
11334	set cmd {$::InsertionTarget insert insert [list \u0252]}
11335	set bn [format ".ipaev.r%dc%d"  $open  $backrnd]
11336	button $bn -text "\u0252"   -padx $xp -pady $yp -command  $cmd
11337	balloonhelpd_for $bn [_ "open back rounded vowel"]
11338
11339	for {set row 0} {$row <= $lastvrow} {incr row} {
11340	    set line [list];
11341	    for {set col 0} {$col <= $lastvcolumn} {incr col} {
11342		set cell [format ".ipaev.r%dc%d" $row $col]
11343		lappend line $cell
11344		if {$::TwoCaseP} {
11345		    balloonhelp_for $cell  \
11346			[_ "Left click to insert standard characters.\n\
11347Right click to insert alternative characters."]
11348		}
11349	    }
11350	    eval grid $line -sticky news;
11351	}
11352	balloonhelpd_for $DeleteButton [_ "No, there isn't a mid-mid central rounded vowel called \"Delete\".\nThis is so that you can correct mistakes while using\nthe mouse, without having to go back to the keyboard."]
11353	if {!$DisplayVowelChartColumnLabelsP} {UnpackVowelColumnLabels}
11354	if {!$DisplayVowelChartRowLabelsP} {UnpackVowelRowLabels}
11355    }
11356
11357#Rearrange into functional groups, e.g. tone marks, vowel quality marks,
11358#etc. Separate IPA and non-IPA.
11359
11360    proc PopupIPAEntryD {} {
11361	set PerRow 10;
11362	set BaseChar "o";
11363	set xp 2;
11364	set yp 3;
11365	toplevel .ipaed -borderwidth 3
11366	wm title .ipaed [_ "Phonetic Diacritics"]
11367	BindKeys .ipaed
11368	set DownMsg [_ "Display IPA Diacritic Chart"];
11369	set UpMsg   [_ "Remove IPA Diacritic Chart"];
11370	bind .ipaed <Destroy> \
11371	    "set ::IPADIsDisplayedP 0;$::CEM entryconfigure $::ToggleIPADIndex -label \"$DownMsg\""
11372	bind .ipaed <Unmap> \
11373	    "set ::IPADIsDisplayedP 0;$::CEM entryconfigure $::ToggleIPADIndex -label \"$DownMsg\""
11374	bind .ipaed <Map> \
11375	    "set ::IPADIsDisplayedP 1;$::CEM entryconfigure $::ToggleIPADIndex -label \"$UpMsg\""
11376	array set Diacritics [list\
11377				  0  {"\u02D0" "long"}\
11378				  1  {"\u02D1" "half long"}\
11379				  2  {"\u0303" "nasalized"}\
11380				  3  {"\u0324" "breathy voice"}\
11381				  4  {"\u0325" "voiceless"}\
11382				  5  {"\u032C" "voiced"}\
11383				  6  {"\u031A" "unreleased"}\
11384				  7  {"\u031C" "lower/open variety of vowel"}\
11385				  8  {"\u031D" "raised/closed variety of vowel"}\
11386				  9  {"\u031E" "lower/open variety of vowel"}\
11387				  10  {"\u031F" "advanced/fronted"}\
11388				  11  {"\u0320" "retracted/backed"}\
11389				  12  {"\u0321" "palatalized"}\
11390				  13  {"\u0322" "retroflex"}\
11391				  14  {"\u0323" "closer variety of vowel/retroflex"}\
11392				  15  {"\u0329" "syllabic"}\
11393				  16  {"\u032A" "dental"}\
11394				  17  {"\u032B" "labialized"}\
11395				  18  {"\u0330" "creaky voice"}\
11396				  19  {"\u0334" "velarized/pharyngealized"}\
11397				  20  {"\u0346" "dentolabial"}\
11398				  21  {"\u0347" "alveolar"}\
11399				  22  {"\u0348" "strong articulation"}\
11400				  23  {"\u0349" "weak articulation"}\
11401				  24  {"\u02CA" "high tone"}\
11402				  25  {"\u02CB" "low tone"}\
11403				  26  {"\u0302" "falling tone"}\
11404				  27  {"\u0304" "long"}\
11405				  28  {"\u0306" "short"}\
11406				  29  {"\u0308" "non-canonical backness"}\
11407				  30  {"\u02CC" "secondary stress"}\
11408				  31  {"\u02C8" "primary stress/downstep"}\
11409				  32  {"\u02B8" "palatalized"}\
11410				  33  {"\u02DE" "rhotacized"}\
11411				  34  {"\u0328" "nasalized"}\
11412				  35  {"\u034A" "denasal"}\
11413				  36  {"\u034B" "nasal escape"}\
11414				  37  {"\u034C" "velopharyngeal friction"}\
11415				  38  {"\u034D" "labial spreading"}\
11416				  39  {"\u034E" "whistled"}
11417				 ];
11418
11419	set DiacriticCnt [llength [array names Diacritics]];
11420	set Rows [expr ceil(double($DiacriticCnt)/double($PerRow))]
11421	set Total [expr $PerRow * $Rows]
11422	#Generate buttons with blank labels for empty padding slots
11423	for {set k 0} {$k < $Total} {incr k} {
11424	    set row [expr $k/$PerRow]
11425	    set col [expr $k%$PerRow]
11426	    if {[info exist Diacritics($k)]} {
11427		button .ipaed.r${row}c${col} -text "$BaseChar[lindex $Diacritics($k) 0]"\
11428		    -padx $xp -pady $yp\
11429		    -command "\$::InsertionTarget insert insert  [lindex $Diacritics($k) 0]"
11430		balloonhelpd_for .ipaed.r${row}c${col} [_ [lindex $Diacritics($k) 1]]
11431	    } else {
11432		label .ipaed.r${row}c${col} -text "";
11433	    }
11434	    set LastRow $row;
11435	    set LastCol $col;
11436	}
11437	#Lay the buttons and labels out in a grid.
11438	for {set row 0} {$row <= $LastRow} {incr row} {
11439	    set line [list];
11440	    for {set col 0} {$col <= $LastCol} {incr col} {
11441		set cell [format ".ipaed.r%dc%d" $row $col]
11442		lappend line $cell
11443	    }
11444	    eval grid $line -sticky news;
11445	}
11446    }
11447
11448#Accented letters
11449    proc PopupIPAEntryA {} {
11450	set xp 3;
11451	set yp 3;
11452	toplevel .ipaea -borderwidth 4
11453	wm title .ipaea [_ "Accented Letters"]
11454	BindKeys .ipaea
11455	bind .ipaea <Destroy> {set ::IPAAIsDisplayedP 0}
11456	set DownMsg [_ "Display Accented Letter Chart"]
11457	set UpMsg   [_ "Remove Accented Letter Chart"]
11458	set AccentedLetters [list \
11459				 {"\u00E0" "a with grave" "\u00C0"}\
11460				 {"\u00E1" "a with acute" "\u00C1"}\
11461				 {"\u00E2" "a with circumflex" "\u00C2"}\
11462				 {"\u00E3" "a with tilde" "\u00C3"}\
11463				 {"\u00E4" "a with diaresis" "\u00C4"}\
11464				 {"\u00E5" "a with ring above" "\u00C5"}\
11465				 {"\u0101" "a with macron" "\u0100"}\
11466				 {"\u0103" "a with breve" "\u0102"}\
11467				 {"\u0105" "a with ogonek" "\u0104"}\
11468				 {"\u01CE" "a with caron" "A\u030C"}\
11469				 {"\u2C65" "a with stroke" "\u023A"}\
11470				 {"\u0227" "a with dot above" "\u0226"}\
11471				 {"\u1EA1" "a with dot below" "\u1EA0"}\
11472				 {"\u0201" "a with double grave" "\u0200"}\
11473				 {"\u0203" "a with inverted breve" "\u0202"}\
11474				 {"\u01DF" "a with diaresis and macron" "\u01DE"}\
11475				 {"\u01E1" "a with dot above and macron" "\u01E0"}\
11476				 {"\u01FB" "a with ring above and acute" "\u01FA"}\
11477				 {"\u01E3" "ash with macron" "\u01E2"}\
11478				 {"\u01FD" "ash with acute" "\u01FC"}\
11479				 {"\u0180" "b with stroke" "\u0243"}\
11480				 {"\u0183" "b with topbar" "\u0182"}\
11481				 {"\u1E03" "b with dot above" "\u1E02"}\
11482				 {"\u1E05" "b with dot below" "\u1E04"}\
11483				 {"\u1E07" "b with line below" "\u1E06"}\
11484				 {"\u0188" "c with hook" "\u0187"}\
11485				 {"\u0107" "c with acute" "\u0106"}\
11486				 {"\u0109" "c with circumflex" "\u0108"}\
11487				 {"\u010B" "c with dot above" "\u010A"}\
11488				 {"\u00E7" "c with cedilla" "\u00C7"}\
11489				 {"\u1E09" "c with cedilla and acute" "\u1E08"}\
11490				 {"\u010D" "c with caron" "\u010C"}\
11491				 {"\u023C" "c with stroke" "\u023B"}\
11492				 {"\u018C" "d with topbar" "\u018B"}\
11493				 {"\u010F" "d with caron" "\u010E"}\
11494				 {"\u0111" "d with stroke" "\u0110"}\
11495				 {"\u0221" "d with curl" "\uFFFD"}\
11496				 {"\u1E0B" "d with dot above" "\u1E0A"}\
11497				 {"\u1E0D" "d with dot below" "\u1E0C"}\
11498				 {"\u1E0F" "d with line below" "\u1E0E"}\
11499				 {"\u00E8" "e with grave" "\u00C8"}\
11500				 {"\u00E9" "e with acute" "\u00C9"}\
11501				 {"\u00EA" "e with circumflex" "\u00CA"}\
11502				 {"\u00EB" "e with diaresis" "\u00CB"}\
11503				 {"\u0113" "e with macron" "\u0112"}\
11504				 {"\u0115" "e with breve" "\u0114"}\
11505				 {"\u0117" "e with dot above" "\u0116"}\
11506				 {"\u1EB9" "e with dot below" "\u1EB8"}\
11507				 {"\u0119" "e with ogonek" "\u0118"}\
11508				 {"\u011B" "e with caron" "\u011A"}\
11509				 {"\u0247" "e with stroke" "\u0246"}\
11510				 {"\u0229" "e with cedilla" "\u0228"}\
11511				 {"\u0205" "e with double grave" "\u0204"}\
11512				 {"\u0207" "e with inverted breve" "\u0206"}\
11513				 {"\u01F5" "g with acute" "\u01F4"}\
11514				 {"\u011D" "g with circumflex" "\u011C"}\
11515				 {"\u011F" "g with breve" "\u011E"}\
11516				 {"\u0121" "g with dot above" "\u0000"}\
11517				 {"\u0123" "g with cedilla" "\u0122"}\
11518				 {"\u01E5" "g with stroke" "\u01E4"}\
11519				 {"\u01E7" "g with caron" "\u01E6"}\
11520				 {"\u021F" "h with caron" "\u021E"}\
11521				 {"\u0125" "h with circumflex" "\u0124"}\
11522				 {"\u0127" "h with stroke" "\u0126"}\
11523				 {"\u1E25" "h with dot below" "\u1E24"}\
11524				 {"\u00EC" "i with grave" "\u00CC"}\
11525				 {"\u00ED" "i with acute" "\u00CD"}\
11526				 {"\u00EE" "i with circumflex" "\u00CE"}\
11527				 {"\u00EF" "i with diaresis" "\u00CF"}\
11528				 {"\u0129" "i with tilde" "\u0128"}\
11529				 {"\u012B" "i with macron" "\u012A"}\
11530				 {"\u012D" "i with breve" "\u012C"}\
11531				 {"\u012F" "i with ogonek" "\u012E"}\
11532				 {"\u01D0" "i with caron" "\u01CF"}\
11533				 {"\u0209" "i with double grave" "\u0208"}\
11534				 {"\u020B" "i with inverted breve" "\u020A"}\
11535				 {"\u1ECB" "i with dot below" "\u1ECA"}\
11536				 {"\u0131" "dotless i" "\u0049"}\
11537				 {"\u0135" "j with circumflex" "\u0134"}\
11538				 {"\u01F0" "j with caron" "J\u030C"}\
11539				 {"\u0249" "j with stroke" "J\u0248"}\
11540				 {"\u01E9" "k with caron" "\u01E8"}\
11541				 {"\u0199" "k with hook" "\u0198"}\
11542				 {"\u0137" "k with cedilla " "\u0136"}\
11543				 {"\u1E33" "k with dot below" "\u1E32"}\
11544				 {"\u013A" "l with acute" "\u0139"}\
11545				 {"\u013C" "l with cedilla" "\u013B"}\
11546				 {"\u013E" "l with caron" "\u013D"}\
11547				 {"\u0140" "l with middle dot" "\u013F"}\
11548				 {"\u0142" "l with stroke" "\u0141"}\
11549				 {"\u019A" "l with bar" "\u023D"}\
11550				 {"\u0234" "l with curl" "\uFFFD"}\
11551				 {"\u1E37" "l with dot below" "\u1E36"}\
11552				 {"\u1E39" "l with dot below and macron" "\u01E38"}\
11553				 {"\u1E3B" "l with line below" "\u1E3A"}\
11554				 {"\u019B" "lambda with stroke" "\uFFFD"}\
11555				 {"\u1E3F" "m with acute" "\u1E3E"}\
11556				 {"\u1E43" "m with dot below" "\u1E42"}\
11557				 {"\u1E41" "m with dot above" "\u1E40"}\
11558				 {"\u0271" "m with hook" "\uFFFD"}\
11559				 {"\u0235" "n with a curl" "\uFFFD"}\
11560				 {"\u0146" "n with cedilla" "\u0145"}\
11561				 {"\u0148" "n with caron" "\u0147"}\
11562				 {"\u01F9" "n with grave" "\u01F8"}\
11563				 {"\u00F1" "n with tilde" "\u00D1"}\
11564				 {"\u019E" "n with long right leg" "\u0220"}\
11565				 {"\u0144" "n with acute" "\u0143"}\
11566				 {"\u1E45" "n with dot above" "\u1E44"}\
11567				 {"\u1E47" "n with dot below" "\u1E46"}\
11568				 {"\u1E49" "n with line below" "\u1E48"}\
11569				 {"\u00F2" "o with grave" "\u00D2"}\
11570				 {"\u00F3" "o with acute" "\uD3"}\
11571				 {"\u00F4" "o with circumflex" "\u00D4"}\
11572				 {"\u00F5" "o with tilde" "\u00D5"}\
11573				 {"\u00F6" "o with diaresis" "\u00D6"}\
11574				 {"\u00F8" "o with stroke" "\u00D8"}\
11575				 {"\u014D" "o with macron" "\u014C"}\
11576				 {"\u014F" "o with breve" "\u014E"}\
11577				 {"\u0151" "o with double acute" "\u0150"}\
11578				 {"\u01A1" "o with horn" "\u01A0"}\
11579				 {"\u01EB" "o with ogonek" "\u01EA"}\
11580				 {"\u01ED" "o with ogonek and macron" "\u01EC"}\
11581				 {"\u01D2" "o with caron" "\u01D1"}\
11582				 {"\u022B" "o with diaresis and macron" "\u022A"}\
11583				 {"\u022D" "o with tilde and macron" "\u022C"}\
11584				 {"\u022F" "o with dot above" "\u022E"}\
11585				 {"\u01FF" "o with stroke and acute" "\u01FE"}\
11586				 {"\u020D" "o with double grave" "\u020C"}\
11587				 {"\u020F" "o with inverted breve" "\u020E"}\
11588				 {"\u0231" "o with dot above and macron" "\u0230"}\
11589				 {"\u1ECD" "o with dot below" "\u1ECC"}\
11590				 {"\u0223" "ou" "\u0222"}\
11591			         {"\u01A5" "p with hook" "\u01A4"}\
11592				 {"\u0155" "r with acute" "\u0154"}\
11593				 {"\u0157" "r with cedilla" "\u0156"}\
11594				 {"\u0159" "r with caron" "\u0158"}\
11595				 {"\u024D" "r with stroke" "\u024C"}\
11596				 {"\u0211" "r with double grave" "\u0210"}\
11597				 {"\u0213" "r with inverted breve" "\u0214"}\
11598				 {"\u1E5B" "r with dot below" "\u1E5A"}\
11599				 {"\u027F" "reversed r with fishhook" "\uFFFD"}\
11600				 {"\u015B" "s with acute" "\u015A"}\
11601				 {"\u015D" "s with circumflex" "\u015C"}\
11602				 {"\u015F" "s with cedilla" "\u015E"}\
11603				 {"\u0161" "s with caron" "\u0160"}\
11604				 {"\u0219" "s with comma below" "\u0218"}\
11605				 {"\u1E63" "s with dot below" "\u1E62"}\
11606				 {"\u021B" "t with comma below" "\u021A"}\
11607				 {"\u01AB" "t with palatal hook" "\uFFFD"}\
11608				 {"\u01AD" "t with hook" "\u01AC"}\
11609				 {"\u0163" "t wwith cedilla" "\u0162"}\
11610				 {"\u0165" "t with caron" "\u0164"}\
11611				 {"\u0167" "t with stroke" "\u0166"}\
11612				 {"\u2C66" "t with diagonal stroke" "\u023E"}\
11613				 {"\u00F9" "u with grave" "\u00D9"}\
11614				 {"\u00FA" "u with acute" "\u00DA"}\
11615				 {"\u00FB" "u with circumflex" "\u00DB"}\
11616				 {"\u00FC" "u with diaresis" "\u00DC"}\
11617				 {"\u01D4" "u with caron" "\u01D3"}\
11618				 {"\u01D6" "u with diaresis and macron" "\u01D5"}\
11619				 {"\u01D8" "u with diaresis and acute" "\u01D7"}\
11620				 {"\u01DA" "u with diaresis and caron" "\u01D9"}\
11621				 {"\u01DC" "u with diaresis and grave" "\u01DB"}\
11622				 {"\u01B0" "u with horn" "\u01AF"}\
11623				 {"\u0169" "u with tilde" "\u0168"}\
11624				 {"\u016B" "u with macron" "\u016A"}\
11625				 {"\u016D" "u with breve" "\u016C"}\
11626				 {"\u016F" "u with ring above" "\u016E"}\
11627				 {"\u0171" "u with double acute" "\u0170"}\
11628				 {"\u0173" "u with ogonek" "\u0172"}\
11629				 {"\u0215" "u with double grave" "\u0214"}\
11630				 {"\u0217" "u with inverted breve" "\u0216"}\
11631				 {"\u1EE5" "u with dot below" "\u1EE4"}\
11632				 {"\u2C74" "v with curl" "\uFFFD"}\
11633				 {"\u0175" "w with circumflex" "\u0174"}\
11634				 {"\u01B4" "y with hook" "\u01B3"}\
11635				 {"\u00FD" "y with acute" "\u00DD"}\
11636				 {"\u00FF" "y with diaresis" "\u0278"}\
11637				 {"\u0233" "y with macron" "\u0232"}\
11638				 {"\u0177" "y with circumflex" "\u0176"}\
11639				 {"\u024F" "y with stroke" "\u024E"}\
11640				 {"\u017A" "z with acute" "\u0179"}\
11641				 {"\u017C" "z with dot above" "\u017B"}\
11642				 {"\u017E" "z with caron" "\u017D"}\
11643				 {"\u01B6" "z with stroke" "\u01B5"}\
11644				 {"\u0225" "z with hook" "\u0224"}\
11645				 {"\u0236" "t with curl" "\uFFFD"}\
11646				 {"\u01EF" "zh with caron" "\u01EE"}]
11647
11648	if {$::UseNoGlyphsP} {
11649	    lappend AccentedLetters {"\u1D8D" "x with palatal hook" "X\u0321"}\
11650				 {"e\u0303" "e with tilde" "E\u0303"}\
11651				 {"\u1D6F" "m with middle tilde" "\uFFFD"}
11652	}
11653
11654	#Sort by gloss
11655	set AccentedLetters [lsort -index 1 $AccentedLetters]
11656
11657#Done through 0236
11658
11659	set AccentedLetterCnt [llength $AccentedLetters];
11660	if {[info exists ::AccentedLettersPerRow]} {
11661	    set PerRow $::AccentedLettersPerRow
11662	} else {
11663	    set PerRow [expr int(1.3 * ceil(sqrt($AccentedLetterCnt)))]
11664	}
11665	set Rows [expr ceil(double($AccentedLetterCnt)/double($PerRow))]
11666	set Total [expr $PerRow * $Rows]
11667	#Generate buttons with blank labels for empty padding slots
11668	for {set k 0} {$k < $Total} {incr k} {
11669	    set row [expr $k/$PerRow]
11670	    set col [expr $k%$PerRow]
11671	    if {$k < $AccentedLetterCnt} {
11672		button .ipaea.r${row}c${col} -text "[lindex [lindex $AccentedLetters $k] 0]"\
11673		    -padx $xp -pady $yp\
11674		    -command "\$::InsertionTarget insert insert  [lindex [lindex $AccentedLetters $k] 0]"
11675		balloonhelpd_for .ipaea.r${row}c${col} [_ [lindex [lindex $AccentedLetters $k] 1] ]
11676		set cap [lindex [lindex $AccentedLetters $k] 2]
11677		bind .ipaea.r${row}c${col} <<B3>> "\$::InsertionTarget insert insert $cap"
11678	    } else {
11679		label .ipaea.r${row}c${col} -text "";
11680	    }
11681	}
11682	set LastRow $row;
11683	set LastCol $col;
11684	set LastCell .ipaea.r${row}c${col}
11685	destroy $LastCell
11686	button $LastCell -image $::LeftArrowImage -command {BackDelete $::InsertionTarget}
11687	balloonhelpd_for $LastCell  [_ "Delete, so that you can correct mistakes while using\nthe mouse, without having to go back to the keyboard."]
11688
11689	#Lay the buttons and labels out in a grid.
11690	for {set row 0} {$row <= $LastRow} {incr row} {
11691	    set line [list];
11692	    for {set col 0} {$col <= $LastCol} {incr col} {
11693		set cell [format ".ipaea.r%dc%d" $row $col]
11694		lappend line $cell
11695	    }
11696	    eval grid $line -sticky news;
11697	}
11698    }
11699}
11700
11701
11702set LeftArrowImage [image create photo -data {
11703R0lGODlhFAAUAIAAAAAAAL+/vyH5BAEAAAEALAAAAAAUABQAAAIqjI+py43gGIAxTVrNxXVz
1170454WTIopWGZ7oRq7X4o4wm2lvbX+ZjGv9/ysAADs=
11705}]
11706
11707proc BackDelete {w} {
11708    if {[string equal [winfo class $w] "Text"]} {
11709	set Insert [$w index insert]
11710	set FirstHalf  [$w get 1.0 $Insert-1chars]
11711	set SecondHalf [string trimright [$w get insert end]]
11712	$w delete 1.0 end;
11713	$w insert 1.0 $FirstHalf$SecondHalf;
11714    } else {
11715	set delind [expr [$w index insert] -1];
11716	$w delete $delind;
11717    }
11718}
11719
11720proc PopupCharEntryByCode {} {
11721    toplevel .charent -borderwidth 4 -relief raised
11722    BindKeys .charent;
11723    wm title .charent "Entry By Codepoint";
11724    after idle {
11725	update idletasks
11726	set xmax [winfo screenwidth .charent]
11727	set ymax [winfo screenheight .charent]
11728	set x0 [expr 1 * ($xmax -[winfo reqwidth .charent])/3];
11729	set y0 [expr 1 * ($ymax -[winfo reqheight .charent])/3];
11730	wm geometry .charent "+$x0+$y0";
11731    }
11732    label .charent.title -text [_ "Insert Character by Numerical Code"]
11733    frame .charent.ef;
11734    entry .charent.ef.ent -width 8 -font MainFont -relief flat -bg \#E0EEFF;
11735    label .charent.ef.prefix -text "0x" -font MainFont
11736    pack .charent.ef.prefix -side left  -expand 1 -fill x -anchor e
11737    pack .charent.ef.ent    -side right -expand 1 -fill x -anchor w
11738    button .charent.d  -text [_ "Dismiss"] -command {destroy .charent}
11739    button .charent.x  -text [_ "Delete"] -command [list BackDelete $::CharByCodeInsertionTarget]
11740    button .charent.i  -text [_ "Insert"] -command {InsertUnicode}
11741    pack .charent.title -side top
11742    pack .charent.ef -side top
11743    pack .charent.d -side left -expand 1 -fill both
11744    pack .charent.x -side left -expand 1 -fill both
11745    pack .charent.i -side right -expand 1 -fill both
11746    focus .charent.ef.ent;
11747    set DownMsg [_ "Display Widget for Entering Characters by Unicode Code"];
11748    set UpMsg   [_ "Remove Widget for Entering Characters by Unicode Code"];
11749    bind .charent <Destroy> \
11750	"set ::CharEntryByCodeIsDisplayedP 0;$::CEM entryconfigure $::ToggleCharEntryByCodeIndex -label \"$DownMsg\""
11751    bind .charent <Unmap> \
11752	"set ::CharEntryByCodeIsDisplayedP 0;$::CEM entryconfigure $::ToggleCharEntryByCodeIndex -label \"$DownMsg\""
11753    bind .charent <Map> \
11754	"set ::CharEntryByCodeIsDisplayedP 1;$::CEM entryconfigure $::ToggleCharEntryByCodeIndex -label \"$UpMsg\""
11755    bind .charent.ef.ent <Destroy> {set ::InsertionTarget $::REG}
11756    bind .charent.ef.ent <Return> {InsertUnicode}
11757    bind .charent.ef.ent <Control-k> {.charent.ef.ent delete 0 end;break}
11758
11759
11760    set charentbh  [_ "Enter a character by its Unicode code, as a sequence of four hexadecimal digits.\nFor example, you may specify \'\u0298\', the International Phonetic Alphabet\nsymbol for the bilabial click, as 0298, and the Chinese character \'\u4E39\' \"egg\" as 4E39.\nDo not type the prefix 0x shown to the left of the entry box.\nIt is entered for you automatically. Return inserts the current character.\nControl-k erases the current character code."]
11761    balloonhelp_for .charent $charentbh
11762    balloonhelp_for .charent.title $charentbh
11763    balloonhelp_for .charent.ef.ent $charentbh
11764    balloonhelp_for .charent.i $charentbh
11765    balloonhelp_for .charent.d $charentbh
11766    balloonhelp_for .charent.x $charentbh
11767    set ::CharEntryByCodeIsDisplayedP 1;
11768}
11769
11770#Get entry from popup, validate it, and insert it into the insertion target.
11771proc InsertUnicode {} {
11772    ClearMessageWindow;
11773    set str [.charent.ef.ent get];
11774    if {[string length $str] == 0} {
11775	ShowMessage [_ "The empty string is not a valid Unicode codepoint"]
11776	return ;
11777    }
11778    #Validate
11779    set BadValueP 0;
11780    #Make sure all digits are hex and that prefix is appropriate.
11781    if {[regexp {[[:xdigit:]]{4,4}} $str] == 0} {
11782	ShowMessage [_ "$str is not a well-formed hexadecimal Unicode value"]
11783	return;
11784    }
11785    set str [format "0x%s" $str]
11786    if {[scan $str "%x" num] < 1} {
11787	ShowMessage [format [_ "Ill-formed code %s"] $str]
11788	return;
11789    }
11790
11791    #Reject illegal codepoints.
11792    if {$num  >  65535} {
11793	ShowMessage [_ "Tcl/Tk may not support codepoints outside the BMP (Plane 0)."]
11794    }
11795    set BadValueP 0;
11796    set BadRanges [list\
11797  	       0x0750 0x077F\
11798	       0x07C0 0x08FF\
11799	       0x1380 0x139F\
11800	       0x18B0 0x18FF\
11801	       0x1980 0x19DF\
11802	       0x1A00 0x1CFF\
11803	       0x1D80 0x1DFF\
11804	       0x2C00 0x2E7F\
11805	       0x2FE0 0x2FEF\
11806	       0x31C0 0x31EF\
11807	       0x9FB0 0x9FFF\
11808	       0xA4D0 0xABFF\
11809	       0xD7B0 0xD7FF\
11810	       0xD800 0xDBFF\
11811	       0xDC00 0xDFFF\
11812	       0xFE10 0xFE1F\
11813	       0x10140 0x102FF\
11814	       0x104B0 0x107FF\
11815	       0x10840 0x1CFFF\
11816	       0x1D200 0x1D2FF\
11817	       0x1D360 0x1D3FF\
11818	       0x1D800 0x1FFFF\
11819	       0x2A6E0 0x2F7FF\
11820	       0x2FAB0 0x2FFFF\
11821	       0xE0080 0xE00FF\
11822	       0xE01F0 0xEFFFF\
11823	       0xFFFFE 0xFFFFF];
11824
11825    for {set k 0} {$k < [llength $BadRanges]} {incr k} {
11826	if { ($num >= [lindex $BadRanges [expr 2 * $k]]) &&\
11827		 ($num <= [lindex $BadRanges [expr (2 * $k) + 1]])} {
11828	    set BadValueP 1;
11829	    break;
11830	}
11831    }
11832    if {$BadValueP} {
11833	ShowMessage [format [_ "%s is not a valid Unicode codepoint"] $str]
11834	return;
11835    }
11836    if {$num >= 1114110} {
11837	ShowMessage [_ "Warning: codepoints above 0x10FFFD have not been assigned as of version 4.0."]
11838    }
11839
11840    #Insert
11841    $::CharByCodeInsertionTarget insert insert [format "%c" $num]
11842}
11843
11844
11845proc IndicateIPACUp {} {
11846	$::CEM entryconfigure $::ToggleIPACIndex \
11847	    -label [_ "Remove IPA Consonant Chart"];
11848	set ::IPACIsDisplayedP 1;
11849}
11850
11851proc IndicateIPACDown {} {
11852	$::CEM entryconfigure $::ToggleIPACIndex \
11853	    -label [_ "Display IPA Consonant Chart"];
11854	set ::IPACIsDisplayedP 0;
11855}
11856
11857proc ToggleIPAC {} {
11858    global IPACIsDisplayedP;
11859    global m;
11860
11861    if { $IPACIsDisplayedP == 0} {
11862	if {[winfo exists .ipaec]} {
11863	    wm deiconify .ipaec;
11864	} else {
11865	    ipaentry::PopupIPAEntryC;
11866	}
11867	IndicateIPACUp;
11868    } else {
11869	wm iconify .ipaec;
11870	IndicateIPACDown;
11871    }
11872}
11873
11874proc IndicateIPAVUp {} {
11875	$::CEM entryconfigure $::ToggleIPAVIndex \
11876	    -label [_ "Remove IPA Vowel Chart"];
11877	set ::IPAVIsDisplayedP 1;
11878}
11879
11880proc IndicateIPAVDown {} {
11881	$::CEM entryconfigure $::ToggleIPAVIndex \
11882	    -label [_ "Display IPA Vowel Chart"];
11883	set ::IPAVIsDisplayedP 0;
11884}
11885
11886proc ToggleIPAV {} {
11887    global IPAVIsDisplayedP;
11888    global m;
11889
11890    if { $IPAVIsDisplayedP == 0} {
11891	if {[winfo exists .ipaev]} {
11892	    wm deiconify .ipaev;
11893	} else {
11894	    ipaentry::PopupIPAEntryV;
11895	}
11896	$::CEM entryconfigure $::ToggleIPAVIndex -label [_ "Remove IPA Vowel Chart"];
11897	set IPAVIsDisplayedP 1;
11898    } else {
11899	wm iconify .ipaev;
11900	$::CEM entryconfigure $::ToggleIPAVIndex -label [_ "Display IPA Vowel Chart"];
11901	set IPAVIsDisplayedP 0;
11902    }
11903}
11904
11905proc IndicateIPADUp {} {
11906	$::CEM entryconfigure $::ToggleIPADIndex \
11907	    -label [_ "Remove IPA Diacritic Chart"];
11908	set ::IPADIsDisplayedP 1;
11909}
11910
11911proc IndicateIPADDown {} {
11912	$::CEM entryconfigure $::ToggleIPADIndex \
11913	    -label [_ "Display IPA Diacritic Chart"];
11914	set ::IPADIsDisplayedP 0;
11915}
11916
11917proc ToggleIPAD {} {
11918    global IPADIsDisplayedP;
11919    global m;
11920
11921    if { $IPADIsDisplayedP == 0} {
11922	if {[winfo exists .ipaed]} {
11923	    wm deiconify .ipaed;
11924	} else {
11925	    ipaentry::PopupIPAEntryD;
11926	}
11927	IndicateIPADUp
11928    } else {
11929	wm iconify .ipaed;
11930	IndicateIPADDown;
11931    }
11932}
11933
11934proc IndicateIPAAUp {} {
11935	$::CEM entryconfigure $::ToggleIPAAIndex \
11936	    -label [_ "Remove Accented Letter Chart"];
11937	set ::IPAAIsDisplayedP 1;
11938}
11939
11940proc IndicateIPAADown {} {
11941	$::CEM entryconfigure $::ToggleIPAAIndex \
11942	    -label [_ "Display Accented Letter Chart"];
11943	set ::IPAAIsDisplayedP 0;
11944}
11945
11946proc ToggleIPAA {} {
11947    global m;
11948
11949    if { $::IPAAIsDisplayedP == 0} {
11950	if {[winfo exists .ipaea]} {
11951	    wm deiconify .ipaea;
11952	} else {
11953	    ipaentry::PopupIPAEntryA;
11954	}
11955	IndicateIPAAUp;
11956    } else {
11957	wm iconify .ipaea;
11958	IndicateIPAADown;
11959    }
11960}
11961
11962
11963
11964
11965proc IndicateCharEntryByCodeUp {} {
11966	$::CEM entryconfigure $::ToggleCharEntryByCodeIndex \
11967	    -label [_ "Remove Widget for Entering Characters by Unicode Code"];
11968	set ::CharEntryByCodeIsDisplayedP 1;
11969}
11970
11971proc IndicateCharEntryByCodeDown {} {
11972	$::CEM entryconfigure $::ToggleCharEntryByCodeIndex \
11973	    -label [_ "Display Widget for Entering Characters by Unicode Code"];
11974	set ::CharEntryByCodeIsDisplayedP 0;
11975}
11976
11977proc ToggleCharEntryByCode {} {
11978    global CharEntryByCodeIsDisplayedP;
11979    global m;
11980
11981    if { $CharEntryByCodeIsDisplayedP == 0} {
11982	if {[winfo exists .charent]} {
11983	    wm deiconify .charent;
11984	    raise .charent;
11985	} else {
11986	    PopupCharEntryByCode;
11987	}
11988	IndicateCharEntryByCodeUp;
11989    } else {
11990	wm iconify .charent;
11991	IndicateCharEntryByCodeDown;
11992    }
11993}
11994
11995proc SetTestDataEncoding {s} {
11996    if {[lsearch -exact [encoding names] $s] >= 0} {
11997	set ::Pars(TestDataEncoding) $s;
11998    } else {
11999	ShowMessage [_ "The encoding $s is not recognized."]
12000    }
12001}
12002
12003proc SetComparisonDataEncoding {s} {
12004    if {[lsearch -exact [encoding names] $s] >= 0} {
12005	set ::Pars(ComparisonDataEncoding) $s;
12006    } else {
12007	ShowMessage [_ "The encoding $s is not recognized."]
12008    }
12009}
12010
12011proc SetResultEncoding {s} {
12012    if {[lsearch -exact [encoding names] $s] >= 0} {
12013	set ::Pars(ResultEncoding) $s;
12014    } else {
12015	ShowMessage [_ "The encoding $s is not recognized."]
12016    }
12017}
12018
12019proc SetPaletteHeightLimit {s} {
12020    if {![string is integer -strict $s]} {return}
12021    if {$s < 3} {return}
12022    if {$s > 50} {return}
12023    set ::PaletteHeightLimit $s
12024}
12025
12026proc SetDisplayConsonantChartColumnLabelsP {b} {
12027    global DisplayConsonantChartColumnLabelsP
12028    set DisplayConsonantChartColumnLabelsP [Boolean $b];
12029}
12030
12031proc SetDisplayConsonantChartRowLabelsP {b} {
12032    global DisplayConsonantChartRowLabelsP
12033    set DisplayConsonantChartRowLabelsP [Boolean $b];
12034}
12035
12036proc SetDisplayVowelChartColumnLabelsP {b} {
12037    global DisplayVowelChartColumnLabelsP
12038    set DisplayVowelChartColumnLabelsP [Boolean $b]
12039}
12040
12041proc SetDisplayVowelChartRowLabelsP {b} {
12042    global DisplayVowelChartRowLabelsP
12043    set DisplayVowelChartRowLabelsP [Boolean $b]
12044}
12045
12046proc ControlDisplayConsonantChartColumnLabels {} {
12047    if {$::DisplayConsonantChartColumnLabelsP} {
12048	ipaentry::PackConsonantColumnLabels;
12049    } else {
12050	ipaentry::UnpackConsonantColumnLabels;
12051    }
12052}
12053
12054proc ControlDisplayConsonantChartRowLabels {} {
12055    if {$::DisplayConsonantChartRowLabelsP} {
12056	ipaentry::PackConsonantRowLabels;
12057    } else {
12058	ipaentry::UnpackConsonantRowLabels;
12059    }
12060}
12061
12062proc ControlDisplayVowelChartColumnLabels {} {
12063    if {$::DisplayVowelChartColumnLabelsP} {
12064	ipaentry::PackVowelColumnLabels;
12065    } else {
12066	ipaentry::UnpackVowelColumnLabels;
12067    }
12068}
12069
12070proc ControlDisplayVowelChartRowLabels {} {
12071    if {$::DisplayVowelChartRowLabelsP} {
12072	ipaentry::PackVowelRowLabels;
12073    } else {
12074	ipaentry::UnpackVowelRowLabels;
12075    }
12076}
12077
12078proc SetAccentedLetterColumns {s} {
12079    if {$s > 1} {
12080	set ::AccentedLettersPerRow $s;
12081    }
12082}
12083
12084####################################################
12085
12086#File     -> LineList	LoadCustomCharacterChart
12087#LineList -> CDEF	DefineCustomCharacterChart
12088#CDEF     -> Popup      PopupSpecialPalette
12089
12090proc ReadCustomCharacterChartPopup {args} {
12091    if {[llength $args]} {
12092	set dl [LoadCustomCharacterChart [lindex $args 0]]
12093    } else {
12094	set dl [LoadCustomCharacterChart];
12095    }
12096    PopupSpecialPalette [DefineCustomCharacterChart $dl]
12097}
12098
12099proc DefineCustomCharacterChartPopup {ll} {
12100    PopupSpecialPalette [DefineCustomCharacterChart $ll];
12101}
12102
12103#Returns a linelist.
12104proc LoadCustomCharacterChart {args} {
12105    if {[llength $args]} {
12106	set fn [lindex $args 0]
12107    } else {
12108	set fn [tk_getOpenFile -title [_ "Load Custom Character Chart"]];
12109	if {[string equal $fn ""]} {
12110	    ShowMessage [_ "File selection cancelled."];
12111	    return ;
12112	}
12113    }
12114    if { [catch {open $fn "r"} fhd ] != 0} {
12115	ShowMessage [format [_ "Unable to open character chart definition file %s."] \
12116			 [MinimizeFileName $fn]];
12117	return ;
12118    }
12119    set LineCnt 0
12120    while { [gets $fhd line] > 0} {
12121	lappend Lines $line;
12122	incr LineCnt
12123    }
12124    close $fhd;
12125    if {$LineCnt < 1} {
12126	ShowMessage [_ "File %s is empty" $fn]
12127	return "";
12128    }
12129    ShowMessage [format [_ "Loaded custom character chart definition from %s."] [MinimizeFileName $fn]]
12130    return $Lines;
12131}
12132
12133
12134#This procedure takes a list of lines defining a custom
12135#character entry chart, which may have been read from a
12136#standalone file or may be an instant list in an
12137#init file, and generates an internal character chart
12138#definition, which it stores. It does not actualy
12139#create a display
12140proc DefineCustomCharacterChart {LineList {fn NONE}} {
12141    #The first line is special. It contains meta-information:
12142    #the title, the desired number of buttons per row,
12143    #and the proposed font family and size. Only the
12144    #title is obligatory.
12145    set line [lindex $LineList 0]
12146    set flds [split $line "|"]
12147    set FieldCnt [llength $flds];
12148    set Title [lindex $flds 0];
12149    #The remaining lines contain pairs of code sequences and glosses.
12150    set cd [list];
12151    set LineList [lrange $LineList 1 end]
12152    foreach line $LineList {
12153	set f [split $line "|"];
12154	set gloss [lindex $f 1];
12155	set c [string trim [lindex $f 0] \"];
12156	set cf [split $c];
12157	set str "\{\"";
12158	foreach n $cf {
12159	    append str [format "%s" $n]
12160	}
12161	append str "\""
12162	append str [format " \"%s\"\}" $gloss]
12163	lappend cd $str;
12164    }
12165    set info [list [join $cd]]
12166    if {$FieldCnt > 1} {
12167	lappend info [lindex $flds 1];	# Columns
12168    }
12169    if {$FieldCnt > 2} {
12170	lappend info [lindex $flds 2];	# Font family
12171    }
12172    if {$FieldCnt > 3} {
12173	lappend info [lindex $flds 3];	# Font size
12174    }
12175    if {![string equal $fn NONE]} {	# File name
12176	lappend info $fn;
12177    }
12178    set ::SpecialCharacterPalette($Title) $info;
12179    $::CEM add command -label $Title -command "PopupSpecialPalette $Title";
12180    incr ::CharacterEntryMenuItems;
12181    return $Title;
12182}
12183
12184#Creates a popup chart from a stored definition.
12185set SccCnt 0;
12186proc PopupSpecialPalette {Title} {
12187    set name [format ".scc%d" $::SccCnt]
12188    if {[info exists ::SpecialCharacterPalette($Title,WidgetName)]} {
12189	set w $::SpecialCharacterPalette($Title,WidgetName);
12190	if {[winfo exists $w]} {
12191	    wm deiconify $w;
12192	    raise $w;
12193	    return ;
12194	}
12195    }
12196    set cdefs [lindex $::SpecialCharacterPalette($Title) 0];
12197    set Items [llength $::SpecialCharacterPalette($Title)];
12198    if {$Items > 1} {
12199	set PerRow [lindex $::SpecialCharacterPalette($Title) 1];
12200    } else {
12201	set PerRow 5;
12202    }
12203    if {$Items > 2} {
12204	set FontFamily [lindex $::SpecialCharacterPalette($Title) 2];
12205    } else {
12206	set FontFamily $::FontInfo(CharacterEntryFont,family)
12207    }
12208    if {$Items > 3} {
12209	set FontSize [lindex $::SpecialCharacterPalette($Title) 3];
12210    } else {
12211	set FontSize $::FontInfo(CharacterEntryFont,size);
12212    }
12213    incr ::SccCnt;
12214    set xp 3;
12215    set yp 3;
12216    toplevel $name -borderwidth 4
12217    set ::SpecialCharacterPalette($Title,WidgetName) $name;
12218    wm title $name $Title
12219    iwidgets::scrolledframe $name.sf -vscrollmode dynamic -hscrollmode dynamic \
12220	-height 180 -width 250
12221    set tf [$name.sf childsite]
12222    pack $name.sf -expand 1 -fill both
12223    BindKeys $name
12224    set msg [_ "Left click to insert the lower-case character.\nRight click to insert the upper-case character."]
12225    balloonhelp_for $name.sf $msg
12226    bind [$name.sf component vertsb] <<B3>> \
12227	"ScrollbarMoveBigIncrement [$name.sf component vertsb] 0.20 %x %y"
12228    set CdefCnt [llength $cdefs];
12229    set Rows [expr int(ceil(double($CdefCnt)/double($PerRow)))]
12230    set Total [expr $PerRow * $Rows]
12231    if {$CdefCnt == $Total} {
12232	incr Rows;
12233	set Total [expr $PerRow * $Rows]
12234    }
12235    set fontname [string trimleft $name .]Font
12236    font create $fontname -family $FontFamily -size $FontSize
12237    for {set k 0} {$k < $Total} {incr k} {
12238	set row [expr $k/$PerRow]
12239	set col [expr $k%$PerRow]
12240	if {$k < $CdefCnt} {
12241	    set csalt "";
12242	    set entry [lindex $cdefs $k];
12243	    set chstr [lindex $entry 0];
12244	    set gloss [lindex $entry 1];
12245	    set chstrParts [split $chstr ":"];
12246	    if {[llength $chstrParts] > 1} {
12247		set cs    [lindex $chstrParts 0];
12248		set csalt [lindex $chstrParts 1];
12249	    } else {
12250		set cs [lindex $chstr 0];
12251	    }
12252	    button $tf.r${row}c${col} -text $cs\
12253		-padx $xp -pady $yp -font $fontname\
12254		-command "\$::InsertionTarget insert insert $cs"
12255	    if {![string equal $csalt ""]} {
12256		bind $tf.r${row}c${col} <<B3>> "\$::InsertionTarget insert insert $csalt"
12257	    }
12258	    balloonhelpd_for $tf.r${row}c${col} $gloss;
12259	} else {
12260	    set ln $tf.r${row}c${col};
12261	    #Generate buttons with blank labels for empty padding slots
12262	    label $ln  -text "";
12263	}
12264    }
12265    set LastRow $row;
12266    set LastCol $col;
12267    set LastCell $tf.r${row}c${col}
12268    destroy $LastCell
12269    button $LastCell -image $::LeftArrowImage -command {BackDelete $::InsertionTarget}
12270    balloonhelpd_for $LastCell  [_ "Delete, so that you can correct mistakes while using\nthe mouse, without having to go back to the keyboard."]
12271
12272    #Lay the buttons and labels out in a grid.
12273    for {set row 0} {$row <= $LastRow} {incr row} {
12274	set line [list];
12275	for {set col 0} {$col <= $LastCol} {incr col} {
12276	    set cell [format "%s.r%dc%d" $tf $row $col]
12277	    lappend line $cell
12278	}
12279	eval grid $line -sticky news;
12280    }
12281    return $name;
12282}
12283
12284
12285proc ExecuteRegexp {} {
12286    global OutputOnlyChangedLinesP;
12287    global InData;
12288    global Program;
12289    global program;
12290    global InterfaceLocale;
12291    global ExecCmd;
12292    global InputDataFromWindowP;
12293    global RegexpResult;
12294    global PipeP;
12295    global TempOutputFile;
12296    global errorCode;
12297    global DoSubstitutionsP;
12298    global PreviousActualRegexp;
12299    global Features;
12300    global UserClassesEnabledP;
12301
12302    if {$::TestingFeaturesP} {
12303	ShowMessage [_ "Execution is impossible until feature testing is complete."]
12304	return ;
12305    }
12306    ClearMessageWindow;
12307    $::OUT configure -state normal
12308    $::OUT delete 1.0 end;
12309
12310    #Get the data from the window if in edit mode
12311    if {$InputDataFromWindowP} {
12312	set InData [$::IND get 1.0 end];
12313    }
12314    if {$InData == ""} {
12315	ShowMessage [_ "There is no test data on which to run the regular expression!"];
12316#	return;
12317    }
12318    #The next bit is a little complicated because we trigger regexp execution
12319    #on carriage return, resulting in the potential presence of more than one
12320    #line in the regexp window.
12321    #First we get the whole contents of the regexp window.
12322    set Regexp [$::REG get];
12323    #Clear the regexp window.
12324    $::REG delete 0 end;
12325    #Now we parse out just the one line we want, which is the last one,
12326    set Regexp [string range $Regexp [expr [string last "\n" $Regexp] + 1] end];
12327    #And put that single line back into the regexp window.
12328    $::REG insert 0 [string trimright $Regexp];
12329
12330    if {$Regexp == ""} {
12331	ShowMessage [_ "There is no regular expression to execute."];
12332	return;
12333    }
12334
12335    if {[CheckModeCompatibility] == 0} {
12336	return ;
12337    }
12338
12339    set Subexp ""; # This simplifies keeping the history list.
12340    if {$DoSubstitutionsP} {
12341	set Subexp [$::SUB get];
12342	if {$Subexp == ""} {
12343	    ShowMessage [_ "There is no substitution pattern to execute."];
12344	    return ;
12345	}
12346    }
12347    hist::AddToHistoryList $Regexp $Subexp $program;
12348    hist::AddToHistoryFile $Regexp $Subexp $program;
12349    if {[winfo exists .hl]} {hist::ConstructHistory}
12350    WriteJournal [format [_ "Regular expression as entered: %s"] $Regexp];
12351    if {$UserClassesEnabledP} {
12352	if {[WarnAboutDelimiters $Regexp]} {
12353	    return ;
12354	}
12355	if {[FeaturesUnSetP $program $InterfaceLocale] == 0} {
12356	    if {$Features(alttype,$program,$InterfaceLocale) > 0} {
12357		set Regexp [InstantiateUserClasses $Regexp $Features(alttype,$program,$InterfaceLocale)]
12358		if {[string length $Regexp] == 0} {
12359		    ShowMessage [_ "Regular Expression is null after user class instantiation."];
12360		    DisplayActualRegexp ""; # Clear actual regexp display.
12361		    return ;
12362		}
12363	    }
12364	}
12365    }
12366    WriteJournal [format [_ "Regular expression actually executed: %s"] $Regexp];
12367    if {$DoSubstitutionsP} {WriteJournal [format [_ "Substitution expression: %s"] $Subexp]}
12368    DisplayActualRegexp $Regexp;
12369    set PreviousActualRegexp $Regexp;
12370    WriteTestData $InData ;
12371    #Here is where we actually execute the regexp
12372    if {$DoSubstitutionsP} {
12373	set status [catch { $ExecCmd($program,sub) $Regexp $Subexp} RegexpResult];
12374	set Expressions [list $Regexp $Subexp];
12375    } else {
12376	set status [catch { $ExecCmd($program,match) $Regexp} RegexpResult];
12377	set Expressions [list $Regexp];
12378    }
12379    switch -exact -- $::ExecutionFlag {
12380	CommandInfo {
12381	    dmsg "Expressions = $Expressions"
12382	    dmsg "RegexpResult = $RegexpResult"
12383	    WriteExecutionInfo $Expressions $RegexpResult
12384	    set RegexpResult "";
12385	    return
12386	}
12387	CommandLine {
12388	    ShowMessage [lindex $RegexpResult 0];
12389	    set RegexpResult "";
12390	    return
12391	}
12392    }
12393    if { [expr ($status == 0) || [string equal $::errorCode NONE]]} {
12394	if {$DoSubstitutionsP} {
12395	    if {$OutputOnlyChangedLinesP} {
12396		if {[string equal $program sed]} {
12397		    set MatchCnt [CountLines $RegexpResult];
12398		} else {
12399		    set ResultList [GetChanges $InData $RegexpResult];
12400		    set MatchCnt [llength $ResultList];
12401		    set RegexpResult [join $ResultList "\n"];
12402		}
12403	    } else {
12404		set MatchCnt [CountChanges $InData $RegexpResult];
12405	    }
12406	} else {
12407	    set MatchCnt [CountLines $RegexpResult];
12408	}
12409
12410	if {$DoSubstitutionsP} {
12411	    set action [_ "substitution"];
12412	} else {
12413	    set action [_ "regular expression"];
12414	}
12415	if {$MatchCnt > 1} {
12416	    set msg  [format [_ "Executed %1\$s using %2\$s - %3\$s matches"] \
12417			  $action $Program [DelimitNumber $MatchCnt]];
12418
12419	} elseif {$MatchCnt == 1} {
12420	    set msg [format [_ "Executed %1\$s using %2\$s - 1 match"] $action $Program];
12421	} else {
12422	    set msg [format [_ "Executed %1\$s using %2\$s - 0 matches"] $action $Program];
12423	}
12424	ShowMessage $msg;
12425	resc::CacheResult $RegexpResult $program $Regexp $Subexp;
12426	if {[winfo exists .cacentry]} {
12427	    resc::UpdateCacheDisplay;
12428	}
12429        $::OUT insert end $RegexpResult;
12430	if {$PipeP} {
12431	    puts $RegexpResult;
12432	    flush stdout;
12433	}
12434	ShowDiffResult 1;
12435    } else {				# Command exited abnormally
12436	ShowMessage [format [_ "Executed regular expression using %s - 0 matches due to error exit"] $Program];
12437	puts stderr "Program exited abnormally";
12438	ExplicateErrorStatus;
12439    }
12440    $::OUT configure -state disabled
12441    if {$::AutoClearRegexpP} {
12442	ClearRegexp;
12443    }
12444}
12445
12446
12447#Figure out whether the program called sed is GNU sed, minised, or super sed or another.
12448proc WhichSed {} {
12449    if {[catch {exec sed --version} vinfo] != 0} {
12450	#We have encountered a sed other than GNU sed or super sed or something GNU-ish
12451	if {[catch {exec sed} vinfo] == 0} {
12452	    if {[string length $vinfo] == 0} {
12453		set ::ProgramInfo(sed,Which) minised;
12454		set ::ExecCmd(sed,match) ExecuteMatchMinised
12455		set ::ExecCmd(sed,sub) ExecuteSubMinised
12456	    } else {
12457		set ::ProgramInfo(sed,Which) bsdsed;
12458	    }
12459	}
12460    } else {
12461	set vl [lindex [split $vinfo "\n"] 0]
12462	set FirstVersionWord [string trim [lindex [split $vl] 0]]
12463	if {[string equal "super-sed" $FirstVersionWord]} {
12464	    set ::ProgramInfo(sed,Which) supersed;
12465	    set ::ExecCmd(sed,match) ExecuteMatchSsed
12466	    set ::ExecCmd(sed,sub) ExecuteSubSsed
12467	} elseif {[string equal "GNU" $FirstVersionWord]} {
12468	    set ::ProgramInfo(sed,Which) gnused;
12469	} else {
12470	    set ::ProgramInfo(sed,Which) othersed;
12471	}
12472    }
12473}
12474
12475proc WhichAgrep {} {
12476    set tf [file join $::TempDir tf]
12477    catch [list exec agrep 2> $tf]
12478    if {[catch {open $tf "r"} tfh] != 0} {
12479	ShowMessage [_ "WhichAgrep: unable to open file in $::TempDir"]
12480	set ::ProgramInfo(agrep,TreAgrepP) -1
12481	return ;
12482    }
12483    gets $tfh msg
12484    close $tfh
12485    set FirstWord [lindex [split $msg] 0]
12486    if {[string equal $FirstWord "Usage:"]} {
12487	set ::ProgramInfo(agrep,TreAgrepP) 1
12488	ShowMessage [_ "Detected TRE Agrep"]
12489    } elseif {[string equal $FirstWord "usage:"]} {
12490	set ::ProgramInfo(agrep,TreAgrepP) 0
12491	ShowMessage [_ "Detected Wu-Manber Agrep"]
12492    } else {
12493	set ::ProgramInfo(agrep,TreAgrepP) -1
12494	ShowMessage [_ "Failed to detect a recognizable version of agrep."]
12495    }
12496}
12497
12498option add  *pcpAgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
12499option add  *pcpAgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
12500option add  *pcpAgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
12501option add  *pcpAgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
12502option add  *pcpAgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
12503option add  *pcpAgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
12504option add  *pcpAgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
12505set agrepErrLim 0
12506set agrepDelWei 0
12507set agrepInsWei 0
12508set agrepSubWei 0
12509
12510proc PopupAgrepControls {} {
12511    set w .pcpAgrep
12512    if {[winfo exist .pcpAgrep]} {
12513	if {![winfo ismapped .pcpAgrep]} {
12514	    wm deiconify .pcpAgrep;
12515	    raise .pcpAgrep
12516	} else {
12517	    wm iconify .pcpAgrep;
12518	}
12519	return ;
12520    }
12521    toplevel $w -borderwidth 4 -relief raised
12522    wm title $w Agrep
12523    after idle {
12524	raise .pcpAgrep
12525	update idletasks
12526	set xmax [winfo screenwidth .pcpAgrep]
12527	set ymax [winfo screenheight .pcpAgrep]
12528	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpAgrep]))];
12529	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpAgrep]))];
12530	wm geometry .pcpAgrep "+$x0+$y0";
12531    }
12532    if {![info exist ::ProgramInfo(agrep,TreAgrepP)]} {
12533	WhichAgrep;
12534    }
12535    if {$::ProgramInfo(agrep,TreAgrepP)} {
12536	set which "TRE Agrep"
12537	set genmsg \
12538	    [_ "Set command-line options for agrep.\nNote that in TRE Agrep weights and maximum\ntotal cost can be set in-line for each group."]
12539    } elseif {$::ProgramInfo(agrep,TreAgrepP) == 0} {
12540	set which "Wu-Manber Agrep"
12541	set genmsg [_ "Set command-line options for agrep."]
12542    } else {
12543	ShowMessage [_ "Agrep is not available or is not in your path."]
12544	return ;
12545    }
12546    set title [format "%s\n%s" [_ "Agrep Settings"] $which]
12547    if {[FeaturesUnSetP agrep $::InterfaceLocale]} {
12548	append title \n[_ "(untested)"]
12549    }
12550    label $w.title -text $title  -font PopupTitleFont
12551    frame $w.main
12552    checkbutton $w.main.caseInsensitiveckb -text [_ "Case Insensitive?"] \
12553	-variable agrepCasIns -onvalue 1 -offvalue 0
12554    checkbutton $w.main.bestResultckb -text [_ "Near Misses?"] \
12555	-variable agrepBesRes -onvalue 1 -offvalue 0
12556
12557    frame $w.main.app -relief ridge -border 2
12558    label $w.main.app.tit -text [_ "Approximate Matching"] -relief raised -border 1
12559    iwidgets::spinint $w.main.app.tcost \
12560	-labelpos e \
12561	-width 3 \
12562	-range {0 100} \
12563	-wrap 0 \
12564	-labeltext "Total Cost" \
12565	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12566	-increment {.pcpAgrep.main.app.tcost up} \
12567	-decrement {.pcpAgrep.main.app.tcost down} \
12568	-invalid {};# Prevents irritating flashing or ringing of bell
12569    iwidgets::spinint $w.main.app.icost \
12570	-labelpos e \
12571	-width 3 \
12572	-range {0 100} \
12573	-wrap 0 \
12574	-labeltext "Insertion Cost" \
12575	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12576	-increment {.pcpAgrep.main.app.icost up} \
12577	-decrement {.pcpAgrep.main.app.icost down} \
12578	-invalid {};
12579    iwidgets::spinint $w.main.app.dcost \
12580	-labelpos e \
12581	-width 3 \
12582	-range {0 100} \
12583	-wrap 0 \
12584	-labeltext "Deletion Cost" \
12585	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12586	-increment {.pcpAgrep.main.app.dcost up} \
12587	-decrement {.pcpAgrep.main.app.dcost down} \
12588	-invalid {};
12589    iwidgets::spinint $w.main.app.scost \
12590	-labelpos e \
12591	-width 3 \
12592	-range {0 100} \
12593	-wrap 0 \
12594	-labeltext "Substitution Cost" \
12595	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12596	-increment {.pcpAgrep.main.app.scost up} \
12597	-decrement {.pcpAgrep.main.app.scost down} \
12598	-invalid {};
12599    pack $w.main.app.tit -side top  -expand 0 -fill none -pady 5 -padx 4 -ipadx 4 -ipady 2
12600    pack $w.main.app.tcost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
12601    pack $w.main.app.icost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
12602    pack $w.main.app.dcost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
12603    pack $w.main.app.scost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
12604    $w.main.app.tcost clear
12605    $w.main.app.tcost insert 0 $::ProgramInfo(agrep,TotalCost);
12606    $w.main.app.icost clear
12607    $w.main.app.icost insert 0 $::ProgramInfo(agrep,InsertionCost);
12608    $w.main.app.dcost clear
12609    $w.main.app.dcost insert 0 $::ProgramInfo(agrep,DeletionCost);
12610    $w.main.app.scost clear
12611    $w.main.app.scost insert 0 $::ProgramInfo(agrep,SubstitutionCost);
12612    pack $w.main.app                      -side bottom -expand 1 -fill both \
12613	-padx 3 -pady 5
12614    pack $w.main.caseInsensitiveckb -side top    -expand 1 -fill y \
12615	-padx 3 -pady 3 -anchor w
12616    pack $w.main.bestResultckb      -side top    -expand 1 -fill y \
12617	-padx 3 -pady 3 -anchor w
12618
12619    frame $w.cntls
12620    button $w.cntls.save -text [_ "Save"] -command SaveAgrepInfo
12621    set msg [_ "Press this button to dismiss the popup."]
12622    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
12623    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
12624    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
12625    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
12626    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
12627    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
12628
12629    balloonhelp_for $w $genmsg
12630    balloonhelp_for $w.title $genmsg
12631    balloonhelp_for $w.main $genmsg
12632    balloonhelp_for $w.cntls $genmsg
12633    set msg [_ "Press this button to make the changes you have made take effect."]
12634    balloonhelp_for $w.cntls.save $msg
12635    set msg [_ "Press this button to dismiss the popup."]
12636    balloonhelp_for $w.cntls.dis $msg
12637    if { ([FeaturesUnSetP agrep $::InterfaceLocale] == 0) &&
12638	 ($::Features(CaseInsensitiveCLFlagBackrefP,agrep,$::InterfaceLocale) == 0)} {
12639	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
12640    } else {
12641	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
12642    }
12643    balloonhelp_for $w.main.caseInsensitiveckb $msg
12644    set msg [_ "How many error units should each deletion cost?"]
12645    balloonhelp_for $w.main.app.dcost $msg
12646    set msg [_ "How many error units should each insertion cost?"]
12647    balloonhelp_for $w.main.app.icost $msg
12648    set msg [_ "How many error units should each substitution cost?"]
12649    balloonhelp_for $w.main.app.scost $msg
12650    set msg [_ "In the absence of exact matches, produce the best results?"]
12651    balloonhelp_for $w.main.bestResultckb $msg
12652    set msg [_ "What is the maximum total error cost permitted?"]
12653    balloonhelp_for $w.main.app.tcost $msg
12654}
12655
12656proc SaveAgrepInfo {} {
12657    set ::ProgramInfo(agrep,TotalCost) [.pcpAgrep.main.app.tcost get]
12658    set ::ProgramInfo(agrep,InsertionCost) [.pcpAgrep.main.app.icost get]
12659    set ::ProgramInfo(agrep,DeletionCost) [.pcpAgrep.main.app.dcost get]
12660    set ::ProgramInfo(agrep,SubstitutionCost) [.pcpAgrep.main.app.scost get]
12661    if {$::agrepCasIns} {
12662	set ::ProgramInfo(agrep,CaseInsensitiveP) 1
12663    } else {
12664	set ::ProgramInfo(agrep,CaseInsensitiveP) 0
12665    }
12666    if {$::agrepBesRes} {
12667	set ::ProgramInfo(agrep,BestResults) 1
12668    } else {
12669	set ::ProgramInfo(agrep,BestResults) 0
12670    }
12671}
12672
12673option add  *pcpCgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
12674option add  *pcpCgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
12675option add  *pcpCgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
12676option add  *pcpCgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
12677option add  *pcpCgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
12678option add  *pcpCgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
12679option add  *pcpCgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
12680
12681
12682
12683option add  *pcpBash.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
12684option add  *pcpBash.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
12685option add  *pcpBash.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
12686option add  *pcpBash.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
12687option add  *pcpBash.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
12688option add  *pcpBash.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
12689option add  *pcpBash.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
12690
12691option add  *pcpArena.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
12692option add  *pcpArena.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
12693option add  *pcpArena.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
12694option add  *pcpArena.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
12695option add  *pcpArena.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
12696option add  *pcpArena.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
12697option add  *pcpArena.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
12698
12699proc PopupArenaControls {} {
12700    set w .pcpArena
12701    if {[winfo exist .pcpArena]} {
12702	if {![winfo ismapped .pcpArena]} {
12703	    wm deiconify .pcpArena;
12704	    raise .pcpArena
12705	} else {
12706	    wm iconify .pcpArena;
12707	}
12708	return ;
12709    }
12710    toplevel $w -borderwidth 4 -relief raised
12711    wm title $w Arena
12712    after idle {
12713	raise .pcpArena
12714	update idletasks
12715	set xmax [winfo screenwidth .pcpArena]
12716	set ymax [winfo screenheight .pcpArena]
12717	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpArena]))];
12718	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpArena]))];
12719	wm geometry .pcpArena "+$x0+$y0";
12720    }
12721    set genmsg [_ "Set command-line options for Arena."]
12722    set title [_ "Arena Settings"]
12723    if {[FeaturesUnSetP arena $::InterfaceLocale]} {
12724	append title \n[_ "(untested)"]
12725    }
12726    label $w.title -text $title  -font PopupTitleFont
12727    frame $w.main
12728    checkbutton $w.main.arenaCaseInsensitiveckb -text [_ "Case Insensitive"] \
12729	-variable ::ProgramInfo(arena,CaseInsensitiveP) -onvalue 1 -offvalue 0
12730    checkbutton $w.main.arenaExpandedckb -text [_ "Verbose"] \
12731	-variable ::ProgramInfo(arena,VerboseP) -onvalue 1 -offvalue 0
12732    grid $w.main.arenaCaseInsensitiveckb -row 0 -column 0 -sticky w
12733    grid $w.main.arenaExpandedckb -row 1 -column 0 -sticky w
12734
12735    frame $w.cntls
12736    set msg [_ "Press this button to dismiss the popup."]
12737    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
12738    pack $w.cntls.dis -side left -expand 0 -fill none
12739    pack $w.title $w.main $w.cntls -side top -expand 1 -fill both -pady 4 -padx 15 -ipadx 5
12740    balloonhelp_for $w $genmsg
12741    balloonhelp_for $w.title $genmsg
12742    balloonhelp_for $w.main $genmsg
12743    balloonhelp_for $w.cntls $genmsg
12744    set msg [_ "Press this button to dismiss the popup."]
12745    balloonhelp_for $w.cntls.dis $msg
12746    if { ([FeaturesUnSetP arena $::InterfaceLocale] == 0) &&
12747	 ($::Features(CaseInsensitiveCLFlagBackrefP,arena,$::InterfaceLocale) == 0)} {
12748	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
12749    } else {
12750	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
12751    }
12752    balloonhelp_for $w.main.arenaCaseInsensitiveckb $msg;
12753    set msg [_ "Ignore whitespace and comments within regular expression?"]
12754    balloonhelp_for $w.main.arenaExpandedckb $msg;
12755}
12756
12757proc PopupBashControls {} {
12758    set w .pcpBash
12759    if {[winfo exist .pcpBash]} {
12760	if {![winfo ismapped .pcpBash]} {
12761	    wm deiconify .pcpBash;
12762	    raise .pcpBash
12763	} else {
12764	    wm iconify .pcpBash;
12765	}
12766	return ;
12767    }
12768    toplevel $w -borderwidth 4 -relief raised
12769    wm title $w Bash
12770    after idle {
12771	raise .pcpBash
12772	update idletasks
12773	set xmax [winfo screenwidth .pcpBash]
12774	set ymax [winfo screenheight .pcpBash]
12775	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpBash]))];
12776	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpBash]))];
12777	wm geometry .pcpBash "+$x0+$y0";
12778    }
12779    set genmsg [_ "Set command-line options for bash."]
12780    set title [_ "Bash Settings"]
12781    if {[FeaturesUnSetP bash $::InterfaceLocale]} {
12782	append title \n[_ "(untested)"]
12783    }
12784    label $w.title -text $title  -font PopupTitleFont
12785    frame $w.main
12786    checkbutton $w.main.bashCaseInsensitiveGlobPckb -text [_ "Case Insensitive Glob"] \
12787	-variable bashCaseInsensitiveGlobP -onvalue 1 -offvalue 0
12788    set ::bashCaseInsensitiveGlob $::ProgramInfo(bash,CaseInsensitiveGlobP)
12789    checkbutton $w.main.bashExtendedPckb -text [_ " Extended"] \
12790	-variable bashExtendedP -onvalue 1 -offvalue 0
12791    set ::bashExtendedP $::ProgramInfo(bash,ExtendedP)
12792    #Uncomment the following if we add support for matching in switches and conditions.
12793    if {0} {
12794	checkbutton $w.main.bashCaseInsensitiveMatchPckb -text [_ "Case Insensitive Match"] \
12795	    -variable bashCaseInsensitiveMatchP -onvalue 1 -offvalue 0
12796	set ::bashCaseInsensitiveMatch $::ProgramInfo(bash,CaseInsensitiveMatchP)
12797	grid $w.main.bashCaseInsensitiveMatchPckb -row 1 -column 0 -sticky w -pady 2
12798    }
12799    grid $w.main.bashCaseInsensitiveGlobPckb -row 0 -column 0 -sticky w -pady 2
12800    grid $w.main.bashExtendedPckb -row 2 -column 0 -sticky w -pady 2
12801
12802    frame $w.cntls
12803    button $w.cntls.save -text [_ "Save"] -command SaveBashInfo
12804    set msg [_ "Press this button to dismiss the popup."]
12805    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
12806    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
12807    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
12808    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
12809    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
12810    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
12811    balloonhelp_for $w $genmsg
12812    balloonhelp_for $w.title $genmsg
12813    balloonhelp_for $w.main $genmsg
12814    balloonhelp_for $w.cntls $genmsg
12815    set msg [_ "Press this button to make the changes you have made take effect."]
12816    balloonhelp_for $w.cntls.save $msg
12817    if { ([FeaturesUnSetP bash $::InterfaceLocale] == 0) &&
12818	 ($::Features(CaseInsensitiveCLFlagBackrefP,bash,$::InterfaceLocale) == 0)} {
12819	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
12820    } else {
12821	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
12822    }
12823    balloonhelp_for $w.main.bashCaseInsensitiveGlobPckb $msg;
12824    set msg [_ "Press this button to dismiss the popup."]
12825    balloonhelp_for $w.cntls.dis $msg
12826    set msg [_ "Use extended regular expressions"]
12827    balloonhelp_for $w.main.bashExtendedPckb $msg;
12828    #   set msg [_ "Match without regard to case in case and conditional statements?"]
12829    #   balloonhelp_for $w.main.bashCaseInsensitiveMatchPckb $msg;
12830}
12831
12832proc SaveBashInfo {} {
12833    if {$::bashCaseInsensitiveGlobP} {
12834	set ::ProgramInfo(bash,CaseInsensitiveGlobP) 1
12835    } else {
12836	set ::ProgramInfo(bash,CaseInsensitiveGlobP) 0
12837    }
12838    #Uncomment the following if we add support for matching in switches and conditions.
12839    if {0} {
12840	if {$::bashCaseInsensitiveMatchP} {
12841	    set ::ProgramInfo(bash,CaseInsensitiveMatchP) 1
12842	} else {
12843	    set ::ProgramInfo(bash,CaseInsensitiveMatchP) 0
12844	}
12845    }
12846    if {$::bashExtendedP} {
12847	set ::ProgramInfo(bash,ExtendedP) 1
12848    } else {
12849	set ::ProgramInfo(bash,ExtendedP) 0
12850    }
12851}
12852
12853
12854option add  *pcpBusyBoxEgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
12855option add  *pcpBusyBoxEgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
12856option add  *pcpBusyBoxEgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
12857option add  *pcpBusyBoxEgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
12858option add  *pcpBusyBoxEgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
12859option add  *pcpBusyBoxEgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
12860option add  *pcpBusyBoxEgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
12861
12862proc PopupBusyBoxEgrepControls {} {
12863    set w .pcpBusyBoxEgrep
12864    if {[winfo exist .pcpBusyBoxEgrep]} {
12865	if {![winfo ismapped .pcpBusyBoxEgrep]} {
12866	    wm deiconify .pcpBusyBoxEgrep;
12867	    raise .pcpBusyBoxEgrep
12868	} else {
12869	    wm iconify .pcpBusyBoxEgrep;
12870	}
12871	return ;
12872    }
12873    toplevel $w -borderwidth 4 -relief raised
12874    wm title $w BusyBoxEgrep
12875    after idle {
12876	raise .pcpBusyBoxEgrep
12877	update idletasks
12878	set xmax [winfo screenwidth .pcpBusyBoxEgrep]
12879	set ymax [winfo screenheight .pcpBusyBoxEgrep]
12880	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpBusyBoxEgrep]))];
12881	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpBusyBoxEgrep]))];
12882	wm geometry .pcpBusyBoxEgrep "+$x0+$y0";
12883    }
12884    set genmsg [_ "Set command-line options for Busybox Egrep."]
12885    set title [_ "BusyBoxEgrep Settings"]
12886    if {[FeaturesUnSetP BusyBoxEgrep $::InterfaceLocale]} {
12887	append title \n[_ "(untested)"]
12888    }
12889    label $w.title -text $title  -font PopupTitleFont
12890    frame $w.main
12891    checkbutton $w.main.busyboxegrepCaseInsensitiveckb -text [_ "Case Insensitive"] \
12892	-variable ::ProgramInfo(BusyBoxEgrep,CaseInsensitiveP) -onvalue 1 -offvalue 0
12893    checkbutton $w.main.busyboxegrepComplementckb -text [_ "Complement"] \
12894	-variable ::ProgramInfo(BusyBoxEgrep,Complement) -onvalue 1 -offvalue 0
12895    grid $w.main.busyboxegrepCaseInsensitiveckb -row 0 -column 0 -sticky w -pady 2
12896    grid $w.main.busyboxegrepComplementckb -row 1 -column 0 -sticky w -pady 2
12897
12898    frame $w.cntls
12899    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
12900    pack $w.cntls.dis -side left -expand 0 -fill none
12901    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 8
12902    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 8
12903    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 8
12904    balloonhelp_for $w $genmsg
12905    balloonhelp_for $w.title $genmsg
12906    balloonhelp_for $w.main $genmsg
12907    balloonhelp_for $w.cntls $genmsg
12908    if { ([FeaturesUnSetP busyboxegrep $::InterfaceLocale] == 0) &&
12909	 ($::Features(CaseInsensitiveCLFlagBackrefP,busyboxegrep,$::InterfaceLocale) == 0)} {
12910	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
12911    } else {
12912	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
12913    }
12914    balloonhelp_for $w.main.busyboxegrepCaseInsensitiveckb $msg;
12915    set msg [_ "Press this button to dismiss the popup."]
12916    balloonhelp_for $w.cntls.dis $msg
12917    set msg [_ "Emit only strings not matching the regular expression?"]
12918    balloonhelp_for $w.main.busyboxegrepComplementckb $msg;
12919}
12920
12921proc PopupCgrepControls {} {
12922    set w .pcpCgrep
12923    if {[winfo exist .pcpCgrep]} {
12924	if {![winfo ismapped .pcpCgrep]} {
12925	    wm deiconify .pcpCgrep;
12926	    raise .pcpCgrep
12927	} else {
12928	    wm iconify .pcpCgrep;
12929	}
12930	return ;
12931    }
12932    toplevel $w -borderwidth 4 -relief raised
12933    wm title $w Cgrep
12934    after idle {
12935	raise .pcpCgrep
12936	update idletasks
12937	set xmax [winfo screenwidth .pcpCgrep]
12938	set ymax [winfo screenheight .pcpCgrep]
12939	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpCgrep]))];
12940	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpCgrep]))];
12941	wm geometry .pcpCgrep "+$x0+$y0";
12942    }
12943    set genmsg [_ "Set command-line options for cgrep."]
12944    set title [_ "Cgrep Settings"]
12945    if {[FeaturesUnSetP cgrep $::InterfaceLocale]} {
12946	append title \n[_ "(untested)"]
12947    }
12948    label $w.title -text $title  -font PopupTitleFont
12949    frame $w.main
12950    checkbutton $w.main.cgrepCaseInsensitiveckb -text [_ "Case Insensitive?"] \
12951	-variable ProgramInfo(cgrep,CaseInsensitiveP) -onvalue 1 -offvalue 0
12952    checkbutton $w.main.cgrepComplementckb -text [_ "Complement?"] \
12953	-variable ProgramInfo(cgrep,Complement) -onvalue 1 -offvalue 0
12954    checkbutton $w.main.cgrepExtendedckb -text [_ "Extended Notation?"] \
12955	-variable ProgramInfo(cgrep,ExtendedP) -onvalue 1 -offvalue 0
12956
12957    frame $w.main.app -relief ridge -border 2
12958    label $w.main.app.tit -text [_ "Approximate Matching"] -relief raised -border 1
12959    iwidgets::spinint $w.main.app.tcost \
12960	-labelpos e \
12961	-width 3 \
12962	-range {0 100} \
12963	-wrap 0 \
12964	-labeltext "Total Cost" \
12965	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12966	-increment {.pcpCgrep.main.app.tcost up} \
12967	-decrement {.pcpCgrep.main.app.tcost down} \
12968	-invalid {};# Prevents irritating flashing or ringing of bell
12969    iwidgets::spinint $w.main.app.icost \
12970	-labelpos e \
12971	-width 3 \
12972	-range {0 100} \
12973	-wrap 0 \
12974	-labeltext "Insertion Cost" \
12975	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12976	-increment {.pcpCgrep.main.app.icost up} \
12977	-decrement {.pcpCgrep.main.app.icost down} \
12978	-invalid {};
12979    iwidgets::spinint $w.main.app.dcost \
12980	-labelpos e \
12981	-width 3 \
12982	-range {0 100} \
12983	-wrap 0 \
12984	-labeltext "Deletion Cost" \
12985	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12986	-increment {.pcpCgrep.main.app.dcost up} \
12987	-decrement {.pcpCgrep.main.app.dcost down} \
12988	-invalid {};
12989    iwidgets::spinint $w.main.app.scost \
12990	-labelpos e \
12991	-width 3 \
12992	-range {0 100} \
12993	-wrap 0 \
12994	-labeltext "Substitution Cost" \
12995	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
12996	-increment {.pcpCgrep.main.app.scost up} \
12997	-decrement {.pcpCgrep.main.app.scost down} \
12998	-invalid {};
12999    pack $w.main.app.tit -side top  -expand 0 -fill none -pady 5 -padx 4 -ipadx 4 -ipady 2
13000    pack $w.main.app.tcost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
13001    pack $w.main.app.icost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
13002    pack $w.main.app.dcost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
13003    pack $w.main.app.scost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
13004    $w.main.app.tcost clear
13005    $w.main.app.tcost insert 0 $::ProgramInfo(cgrep,TotalCost);
13006    $w.main.app.icost clear
13007    $w.main.app.icost insert 0 $::ProgramInfo(cgrep,InsertionCost);
13008    $w.main.app.dcost clear
13009    $w.main.app.dcost insert 0 $::ProgramInfo(cgrep,DeletionCost);
13010    $w.main.app.scost clear
13011    $w.main.app.scost insert 0 $::ProgramInfo(cgrep,SubstitutionCost);
13012    pack $w.main.app                      -side bottom -expand 1 -fill both \
13013	-padx 3 -pady 5
13014    pack $w.main.cgrepCaseInsensitiveckb -side top    -expand 1 -fill y \
13015	-padx 3 -pady 3 -anchor w
13016    pack $w.main.cgrepComplementckb      -side top    -expand 1 -fill y \
13017	-padx 3 -pady 3 -anchor w
13018    pack $w.main.cgrepExtendedckb      -side top    -expand 1 -fill y \
13019	-padx 3 -pady 3 -anchor w
13020
13021    frame $w.cntls
13022    button $w.cntls.save -text [_ "Save"] -command SaveCgrepInfo
13023    set msg [_ "Press this button to dismiss the popup."]
13024    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13025    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
13026    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
13027    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
13028    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
13029    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
13030    balloonhelp_for $w $genmsg
13031    balloonhelp_for $w.title $genmsg
13032    balloonhelp_for $w.main $genmsg
13033    balloonhelp_for $w.main.app $genmsg
13034    balloonhelp_for $w.main.app.tcost $genmsg
13035    balloonhelp_for $w.main.app.icost $genmsg
13036    balloonhelp_for $w.main.app.dcost $genmsg
13037    balloonhelp_for $w.main.app.scost $genmsg
13038    balloonhelp_for $w.cntls $genmsg
13039    set msg [_ "Press this button to make the changes you have made take effect."]
13040    balloonhelp_for $w.cntls.save $msg
13041    if { ([FeaturesUnSetP cgrep $::InterfaceLocale] == 0) &&
13042	 ($::Features(CaseInsensitiveCLFlagBackrefP,cgrep,$::InterfaceLocale) == 0)} {
13043	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13044    } else {
13045	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13046    }
13047    balloonhelp_for $w.main.cgrepCaseInsensitiveckb $msg;
13048    set msg [_ "Press this button to dismiss the popup."]
13049    balloonhelp_for $w.cntls.dis $msg
13050    set msg [_ "Emit only strings not matching the regular expression?"]
13051    balloonhelp_for $w.main.cgrepComplementckb $msg;
13052    set msg [_ "Recognize extended regular expression notation instead of basic?"]
13053    balloonhelp_for $w.main.cgrepExtendedckb $msg;
13054}
13055
13056
13057proc SaveCgrepInfo {} {
13058    set ::ProgramInfo(cgrep,TotalCost) [.pcpCgrep.main.app.tcost get]
13059    set ::ProgramInfo(cgrep,InsertionCost) [.pcpCgrep.main.app.icost get]
13060    set ::ProgramInfo(cgrep,DeletionCost) [.pcpCgrep.main.app.dcost get]
13061    set ::ProgramInfo(cgrep,SubstitutionCost) [.pcpCgrep.main.app.scost get]
13062}
13063
13064option add  *pcpGlark.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13065option add  *pcpGlark.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13066option add  *pcpGlark.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13067option add  *pcpGlark.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13068option add  *pcpGlark.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13069option add  *pcpGlark.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13070option add  *pcpGlark.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13071
13072proc PopupGlarkControls {} {
13073    set w .pcpGlark
13074    if {[winfo exist .pcpGlark]} {
13075	if {![winfo ismapped .pcpGlark]} {
13076	    wm deiconify .pcpGlark;
13077	    raise .pcpGlark
13078	} else {
13079	    wm iconify .pcpGlark;
13080	}
13081	return ;
13082    }
13083    toplevel $w -borderwidth 4 -relief raised
13084    wm title $w Glark
13085    after idle {
13086	raise .pcpGlark
13087	update idletasks
13088	set xmax [winfo screenwidth .pcpGlark]
13089	set ymax [winfo screenheight .pcpGlark]
13090	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpGlark]))];
13091	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpGlark]))];
13092	wm geometry .pcpGlark "+$x0+$y0";
13093    }
13094    set genmsg [_ "Set command-line options for Glark."]
13095    set title [_ "Glark Settings"]
13096    if {[FeaturesUnSetP glark $::InterfaceLocale]} {
13097	append title \n[_ "(untested)"]
13098    }
13099    label $w.title -text $title -font PopupTitleFont
13100    frame $w.main
13101    checkbutton $w.main.glarkCaseInsensitiveckb -text [_ "Case Insensitive"] \
13102	-variable glarkCaseInsensitive -onvalue 1 -offvalue 0
13103    set ::glarkCaseInsensitive $::ProgramInfo(glark,CaseInsensitiveP)
13104
13105    checkbutton $w.main.glarkMatchOnlyckb -text [_ "Emit Only Matching Portion"] \
13106	-variable glarkMatchOnly -onvalue 1 -offvalue 0
13107    set ::glarkMatchOnly $::ProgramInfo(glark,EmitMatchOnly)
13108
13109    checkbutton $w.main.glarkComplementckb -text [_ "Complement"] \
13110	-variable glarkComplement -onvalue 1 -offvalue 0
13111    set ::glarkComplement $::ProgramInfo(glark,Complement)
13112
13113    checkbutton $w.main.glarkMatchEntireLineckb -text [_ "Match Entire Line"] \
13114	-variable glarkMatchEntireLine -onvalue 1 -offvalue 0
13115    set ::glarkMatchEntireLine $::ProgramInfo(glark,MatchEntireLine)
13116
13117    grid $w.main.glarkCaseInsensitiveckb -row 1 -column 0 -sticky w -columnspan 3 -pady 3
13118    grid $w.main.glarkComplementckb -row 2 -column 0 -sticky w -columnspan 3 -pady 3
13119    grid $w.main.glarkMatchOnlyckb -row 3 -column 0 -sticky w -columnspan 3 -pady 3
13120    grid $w.main.glarkMatchEntireLineckb -row 4 -column 0 -sticky w -columnspan 3 -pady 3
13121
13122    frame $w.cntls
13123    button $w.cntls.save -text [_ "Save"] -command SaveGlarkInfo
13124    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13125    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
13126    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
13127    pack $w.title -side top -expand 1 -fill both -padx 8 -pady 4
13128    pack $w.main  -side top -expand 1 -fill both -padx 8 -pady 4
13129    pack $w.cntls -side top -expand 1 -fill both -padx 8 -pady {8 4}
13130    balloonhelp_for $w $genmsg
13131    balloonhelp_for $w.title $genmsg
13132    balloonhelp_for $w.main $genmsg
13133    balloonhelp_for $w.cntls $genmsg
13134    set msg [_ "Press this button to make the changes you have made take effect."]
13135    balloonhelp_for $w.cntls.save $msg
13136    set msg [_ "Press this button to dismiss the popup."]
13137    balloonhelp_for $w.cntls.dis $msg
13138    set msg [_ "Emit only the portion of the string that\nactually matched, not the whole line."]
13139    balloonhelp_for $w.main.glarkMatchOnlyckb $msg;
13140    if { ([FeaturesUnSetP glark $::InterfaceLocale] == 0) &&
13141	 ($::Features(CaseInsensitiveCLFlagBackrefP,glark,$::InterfaceLocale) == 0)} {
13142	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13143    } else {
13144	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13145    }
13146    balloonhelp_for $w.main.glarkCaseInsensitiveckb $msg;
13147    set msg [_ "Emit only strings not matching the regular expression?"]
13148    balloonhelp_for $w.main.glarkComplementckb $msg;
13149    set msg [_ "Emit only strings that match the entire line?"]
13150    balloonhelp_for $w.main.glarkMatchEntireLineckb $msg;
13151}
13152
13153proc SaveGlarkInfo {} {
13154    if {$::glarkCaseInsensitive} {
13155	set ::ProgramInfo(glark,CaseInsensitiveP) 1
13156    } else {
13157	set ::ProgramInfo(glark,CaseInsensitiveP) 0
13158    }
13159    if {$::glarkComplement} {
13160	set ::ProgramInfo(glark,Complement) 1
13161    } else {
13162	set ::ProgramInfo(glark,Complement) 0
13163    }
13164    if {$::glarkMatchOnly} {
13165	set ::ProgramInfo(glark,EmitMatchOnly) 1
13166    } else {
13167	set ::ProgramInfo(glark,EmitMatchOnly) 0
13168    }
13169    if {$::glarkMatchEntireLine} {
13170	set ::ProgramInfo(glark,MatchEntireLine 1
13171    } else {
13172	set ::ProgramInfo(glark,MatchEntireLine) 0
13173    }
13174    TestFeatures;
13175}
13176
13177option add  *pcpGrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13178option add  *pcpGrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13179option add  *pcpGrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13180option add  *pcpGrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13181option add  *pcpGrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13182option add  *pcpGrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13183option add  *pcpGrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13184
13185proc PopupGrepControls {} {
13186    set w .pcpGrep
13187    if {[winfo exist .pcpGrep]} {
13188	if {![winfo ismapped .pcpGrep]} {
13189	    wm deiconify .pcpGrep;
13190	    raise .pcpGrep
13191	} else {
13192	    wm iconify .pcpGrep;
13193	}
13194	return ;
13195    }
13196    toplevel $w -borderwidth 4 -relief raised
13197    wm title $w Grep
13198    after idle {
13199	raise .pcpGrep
13200	update idletasks
13201	set xmax [winfo screenwidth .pcpGrep]
13202	set ymax [winfo screenheight .pcpGrep]
13203	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpGrep]))];
13204	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpGrep]))];
13205	wm geometry .pcpGrep "+$x0+$y0";
13206    }
13207    set genmsg [_ "Set command-line options for grep."]
13208    set title [_ "Grep Settings"]
13209    if {[FeaturesUnSetP grep $::InterfaceLocale]} {
13210	append title \n[_ "(untested)"]
13211    }
13212    label $w.title -text $title  -font PopupTitleFont
13213    frame $w.main
13214    radiobutton $w.main.grepBasic -text [_ "Basic"] \
13215	-variable grepNotation -value Basic
13216    radiobutton $w.main.grepExtended -text [_ "Extended"] \
13217	-variable grepNotation -value Extended
13218    radiobutton $w.main.grepPerl -text [_ "Perl"] \
13219	-variable grepNotation -value Perl
13220    $w.main.grepExtended select;
13221
13222    checkbutton $w.main.grepCaseInsensitiveckb -text [_ "Case Insensitive"] \
13223	-variable grepCaseInsensitive -onvalue 1 -offvalue 0
13224    set ::grepCaseInsensitive $::ProgramInfo(grep,CaseInsensitiveP)
13225
13226    checkbutton $w.main.grepMatchOnlyckb -text [_ "Emit Only Matching Portion"] \
13227	-variable grepMatchOnly -onvalue 1 -offvalue 0
13228    set ::grepMatchOnly $::ProgramInfo(grep,EmitMatchOnly)
13229
13230    checkbutton $w.main.grepComplementckb -text [_ "Complement"] \
13231	-variable grepComplement -onvalue 1 -offvalue 0
13232    set ::grepComplement $::ProgramInfo(grep,Complement)
13233
13234    grid $w.main.grepBasic 	   -row 0 -column 0 -sticky w -pady 3 -padx 2
13235    grid $w.main.grepExtended	   -row 0 -column 1 -sticky w -pady 3 -padx 2
13236    grid $w.main.grepPerl	   -row 0 -column 2 -sticky w -pady 3 -padx 2
13237    grid $w.main.grepCaseInsensitiveckb -row 1 -column 0 -sticky w -columnspan 3 -pady 3
13238    grid $w.main.grepComplementckb -row 2 -column 0 -sticky w -columnspan 3 -pady 3
13239    grid $w.main.grepMatchOnlyckb -row 3 -column 0 -sticky w -columnspan 3 -pady 3
13240
13241    frame $w.cntls
13242    button $w.cntls.save -text [_ "Save"] -command SaveGrepInfo
13243    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13244    pack $w.cntls.dis -side left -expand 0 -fill none
13245    pack $w.cntls.save -side right -expand 0 -fill none
13246    pack $w.title -side top -expand 1 -fill both -padx 8 -pady 4
13247    pack $w.main  -side top -expand 1 -fill both -padx 8 -pady 4
13248    pack $w.cntls -side top -expand 1 -fill both -padx 8 -pady {8 4}
13249    balloonhelp_for $w $genmsg
13250    balloonhelp_for $w.title $genmsg
13251    balloonhelp_for $w.main $genmsg
13252    balloonhelp_for $w.cntls $genmsg
13253    set msg [_ "Press this button to make the changes you have made take effect."]
13254    balloonhelp_for $w.cntls.save $msg
13255    set msg [_ "Press this button to dismiss the popup."]
13256    balloonhelp_for $w.cntls.dis $msg
13257    set msg [_ "Use basic regular expression notation."]
13258    balloonhelp_for $w.main.grepBasic $msg;
13259    set msg [_ "Use extended regular expression notation."]
13260    balloonhelp_for $w.main.grepExtended $msg;
13261    set msg [_ "Use PERL 5 regular expression notation."]
13262    balloonhelp_for $w.main.grepPerl $msg;
13263    set msg [_ "Emit only the portion of the string that\nactually matched, not the whole line."]
13264    balloonhelp_for $w.main.grepMatchOnlyckb $msg;
13265    if { ([FeaturesUnSetP grep $::InterfaceLocale] == 0) &&
13266	 ($::Features(CaseInsensitiveCLFlagBackrefP,grep,$::InterfaceLocale) == 0)} {
13267	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13268    } else {
13269	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13270    }
13271    balloonhelp_for $w.main.grepCaseInsensitiveckb $msg;
13272    set msg [_ "Emit only strings not matching the regular expression?"]
13273    balloonhelp_for $w.main.grepComplementckb $msg;
13274}
13275
13276proc SaveGrepInfo {} {
13277    if {$::grepCaseInsensitive} {
13278	set ::ProgramInfo(grep,CaseInsensitiveP) 1
13279    } else {
13280	set ::ProgramInfo(grep,CaseInsensitiveP) 0
13281    }
13282    if {$::grepComplement} {
13283	set ::ProgramInfo(grep,Complement) 1
13284    } else {
13285	set ::ProgramInfo(grep,Complement) 0
13286    }
13287    if {$::grepMatchOnly} {
13288	set ::ProgramInfo(grep,EmitMatchOnly) 1
13289    } else {
13290	set ::ProgramInfo(grep,EmitMatchOnly) 0
13291    }
13292    set ::ProgramInfo(grep,Notation) $::grepNotation;
13293    TestFeatures;
13294}
13295
13296option add  *pcpGawk.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13297option add  *pcpGawk.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13298option add  *pcpGawk.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13299option add  *pcpGawk.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13300option add  *pcpGawk.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13301option add  *pcpGawk.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13302option add  *pcpGawk.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13303
13304proc PopupGawkControls {} {
13305    set w .pcpGawk
13306    if {[winfo exist .pcpGawk]} {
13307	if {![winfo ismapped .pcpGawk]} {
13308	    wm deiconify .pcpGawk;
13309	    raise .pcpGawk
13310	} else {
13311	    wm iconify .pcpGawk;
13312	}
13313	return ;
13314    }
13315    toplevel $w -borderwidth 4 -relief raised
13316    wm title $w Gawk
13317    after idle {
13318	raise .pcpGawk
13319	update idletasks
13320	set xmax [winfo screenwidth .pcpGawk]
13321	set ymax [winfo screenheight .pcpGawk]
13322	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpGawk]))];
13323	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpGawk]))];
13324	wm geometry .pcpGawk "+$x0+$y0";
13325    }
13326    set genmsg [_ "Set command-line options for gawk."]
13327    set title [_ "Gawk Settings"]
13328    if {[FeaturesUnSetP gawk $::InterfaceLocale]} {
13329	append title \n[_ "(untested)"]
13330    }
13331    label $w.title -text $title  -font PopupTitleFont
13332    frame $w.main
13333    radiobutton $w.main.gawkGNU -text [_ "GNU"] \
13334	-variable gawkNotation -value GNU
13335    radiobutton $w.main.gawkPosix -text [_ "Posix"] \
13336	-variable gawkNotation -value Posix
13337    radiobutton $w.main.gawkTraditional -text [_ "Traditional"] \
13338	-variable gawkNotation -value Traditional
13339    $w.main.gawkGNU select;
13340
13341    checkbutton $w.main.gawkCaseInsensitiveckb -text [_ "Case Insensitive"] \
13342	-variable gawkCaseInsensitive -onvalue 1 -offvalue 0
13343    checkbutton $w.main.gawkIntervalExpressionsckb -text [_ "Accept Interval Expressions"] \
13344	-variable gawkIntervalExpressions -onvalue 1 -offvalue 0
13345    set ::gawkCaseInsensitive $::ProgramInfo(gawk,CaseInsensitiveP)
13346    set ::gawkIntervalExpressions $::ProgramInfo(gawk,IntervalExpressions)
13347    grid $w.main.gawkGNU 	   		-row 0 -column 0 -sticky w -pady 3 -padx 2
13348    grid $w.main.gawkPosix	   		-row 0 -column 1 -sticky w -pady 3 -padx 2
13349    grid $w.main.gawkTraditional   		-row 0 -column 2 -sticky w -pady 3 -padx 2
13350    grid $w.main.gawkCaseInsensitiveckb		-row 1 -column 0 -sticky w -columnspan 3 -pady 3
13351    grid $w.main.gawkIntervalExpressionsckb	-row 2 -column 0 -sticky w -columnspan 3 -pady 3
13352
13353    frame $w.cntls
13354    button $w.cntls.save -text [_ "Save"] -command SaveGawkInfo
13355    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13356    pack $w.cntls.dis -side left -expand 0 -fill none
13357    pack $w.cntls.save -side right -expand 0 -fill none
13358    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 8
13359    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 8
13360    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 8
13361    balloonhelp_for $w $genmsg
13362    balloonhelp_for $w.title $genmsg
13363    balloonhelp_for $w.main $genmsg
13364    balloonhelp_for $w.cntls $genmsg
13365    set msg [_ "Press this button to make the changes you have made take effect."]
13366    balloonhelp_for $w.cntls.save $msg
13367    set msg [_ "Press this button to dismiss the popup."]
13368    balloonhelp_for $w.cntls.dis $msg
13369    set msg [_ "Use GNU extended regular expression notation."]
13370    balloonhelp_for $w.main.gawkGNU $msg;
13371    set msg [_ "Use POSIX regular expression notation."]
13372    balloonhelp_for $w.main.gawkPosix $msg;
13373    set msg [_ "Use traditional awk regular expression notation."]
13374    balloonhelp_for $w.main.gawkTraditional $msg;
13375    set msg [_ "Accept interval expressions."]
13376    balloonhelp_for $w.main.gawkIntervalExpressionsckb $msg;
13377    if { ([FeaturesUnSetP gawk $::InterfaceLocale] == 0) &&
13378	 ($::Features(CaseInsensitiveCLFlagBackrefP,gawk,$::InterfaceLocale) == 0)} {
13379	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13380    } else {
13381	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13382    }
13383    balloonhelp_for $w.main.gawkCaseInsensitiveckb $msg;
13384}
13385
13386proc SaveGawkInfo {} {
13387    if {$::gawkCaseInsensitive} {
13388	set ::ProgramInfo(gawk,CaseInsensitiveP) 1
13389    } else {
13390	set ::ProgramInfo(gawk,CaseInsensitiveP) 0
13391    }
13392    if {$::gawkIntervalExpressions} {
13393	set ::ProgramInfo(gawk,IntervalExpressions) 1
13394    } else {
13395	set ::ProgramInfo(gawk,IntervalExpressions) 0
13396    }
13397    set ::ProgramInfo(gawk,Notation) $::gawkNotation;
13398    TestFeatures;
13399}
13400
13401option add  *pcpEgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13402option add  *pcpEgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13403option add  *pcpEgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13404option add  *pcpEgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13405option add  *pcpEgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13406option add  *pcpEgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13407option add  *pcpEgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13408
13409proc PopupEgrepControls {} {
13410    set w .pcpEgrep
13411    if {[winfo exist .pcpEgrep]} {
13412	if {![winfo ismapped .pcpEgrep]} {
13413	    wm deiconify .pcpEgrep;
13414	    raise .pcpEgrep
13415	} else {
13416	    wm iconify .pcpEgrep;
13417	}
13418	return ;
13419    }
13420    toplevel $w -borderwidth 4 -relief raised
13421    wm title $w Egrep
13422    after idle {
13423	raise .pcpEgrep
13424	update idletasks
13425	set xmax [winfo screenwidth .pcpEgrep]
13426	set ymax [winfo screenheight .pcpEgrep]
13427	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpEgrep]))];
13428	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpEgrep]))];
13429	wm geometry .pcpEgrep "+$x0+$y0";
13430    }
13431    set genmsg [_ "Set command-line options for egrep."]
13432    set title [_ "Egrep Settings"]
13433    if {[FeaturesUnSetP egrep $::InterfaceLocale]} {
13434	append title \n[_ "(untested)"]
13435    }
13436    label $w.title -text $title  -font PopupTitleFont
13437    frame $w.main
13438    checkbutton $w.main.egrepCaseInsensitiveckb -text [_ "Case Insensitive"] \
13439	-variable egrepCaseInsensitive -onvalue 1 -offvalue 0
13440    set ::egrepCaseInsensitive $::ProgramInfo(egrep,CaseInsensitiveP)
13441    checkbutton $w.main.egrepMatchOnlyckb -text [_ "Emit Only Match"] \
13442	-variable egrepMatchOnly -onvalue 1 -offvalue 0
13443    set ::egrepMatchOnly $::ProgramInfo(egrep,EmitMatchOnly)
13444    checkbutton $w.main.egrepComplementckb -text [_ "Complement"] \
13445	-variable egrepComplement -onvalue 1 -offvalue 0
13446    set ::egrepComplement $::ProgramInfo(egrep,Complement)
13447
13448    grid $w.main.egrepCaseInsensitiveckb -row 0 -column 0 -sticky w -pady 2
13449    grid $w.main.egrepComplementckb -row 1 -column 0 -sticky w -pady 2
13450    grid $w.main.egrepMatchOnlyckb -row 2 -column 0 -sticky w -pady 2
13451
13452    frame $w.cntls
13453    button $w.cntls.save -text [_ "Save"] -command SaveEgrepInfo
13454    set msg [_ "Press this button to dismiss the popup."]
13455    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13456    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
13457    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
13458    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
13459    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
13460    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
13461    balloonhelp_for $w $genmsg
13462    balloonhelp_for $w.title $genmsg
13463    balloonhelp_for $w.main $genmsg
13464    balloonhelp_for $w.cntls $genmsg
13465    set msg [_ "Press this button to make the changes you have made take effect."]
13466    balloonhelp_for $w.cntls.save $msg
13467    if { ([FeaturesUnSetP egrep $::InterfaceLocale] == 0) &&
13468	 ($::Features(CaseInsensitiveCLFlagBackrefP,egrep,$::InterfaceLocale) == 0)} {
13469	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13470    } else {
13471	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13472    }
13473    balloonhelp_for $w.main.egrepCaseInsensitiveckb $msg;
13474    set msg [_ "Press this button to dismiss the popup."]
13475    balloonhelp_for $w.cntls.dis $msg
13476    set msg [_ "Emit only the portion of the string that\nactually matched, not the whole line."]
13477    balloonhelp_for $w.main.egrepMatchOnlyckb $msg;
13478    set msg [_ "Emit only strings not matching the regular expression?"]
13479    balloonhelp_for $w.main.egrepComplementckb $msg;
13480}
13481
13482proc SaveEgrepInfo {} {
13483    if {$::egrepCaseInsensitive} {
13484	set ::ProgramInfo(egrep,CaseInsensitiveP) 1
13485    } else {
13486	set ::ProgramInfo(egrep,CaseInsensitiveP) 0
13487    }
13488    if {$::egrepComplement} {
13489	set ::ProgramInfo(egrep,Complement) 1
13490    } else {
13491	set ::ProgramInfo(egrep,Complement) 0
13492    }
13493    if {$::egrepMatchOnly} {
13494	set ::ProgramInfo(egrep,EmitMatchOnly) 1
13495    } else {
13496	set ::ProgramInfo(egrep,EmitMatchOnly) 0
13497    }
13498}
13499
13500option add  *pcpEmacs.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13501option add  *pcpEmacs.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13502option add  *pcpEmacs.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13503option add  *pcpEmacs.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13504option add  *pcpEmacs.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13505option add  *pcpEmacs.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13506option add  *pcpEmacs.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13507
13508proc PopupEmacsControls {} {
13509    set w .pcpEmacs
13510    if {[winfo exist .pcpEmacs]} {
13511	if {![winfo ismapped .pcpEmacs]} {
13512	    wm deiconify .pcpEmacs;
13513	    raise .pcpEmacs
13514	} else {
13515	    wm iconify .pcpEmacs;
13516	}
13517	return ;
13518    }
13519    toplevel $w -borderwidth 4 -relief raised
13520    wm title $w Emacs
13521    after idle {
13522	raise .pcpEmacs
13523	update idletasks
13524	set xmax [winfo screenwidth .pcpEmacs]
13525	set ymax [winfo screenheight .pcpEmacs]
13526	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpEmacs]))];
13527	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpEmacs]))];
13528	wm geometry .pcpEmacs "+$x0+$y0";
13529    }
13530    set genmsg [_ "Set command-line options for emacs."]
13531    set title [_ "Emacs Settings"]
13532    if {[FeaturesUnSetP emacs $::InterfaceLocale]} {
13533	append title \n[_ "(untested)"]
13534    }
13535    label $w.title -text $title  -font PopupTitleFont
13536    frame $w.main
13537    checkbutton $w.main.emacsFoldCaseMatchPckb -text [_ "Fold Case Match"] \
13538	-variable emacsFoldCaseMatchP -onvalue 1 -offvalue 0
13539    set ::emacsFoldCaseMatchP $::ProgramInfo(emacs,FoldCaseMatchP)
13540    checkbutton $w.main.emacsFoldCaseReplacePckb -text [_ "Fold Case Replace"] \
13541	-variable emacsFoldCaseReplaceP -onvalue 1 -offvalue 0
13542    set ::emacsFoldCaseReplaceP $::ProgramInfo(emacs,FoldCaseReplaceP)
13543
13544    grid $w.main.emacsFoldCaseMatchPckb -row 0 -column 0 -sticky w -pady 2
13545    grid $w.main.emacsFoldCaseReplacePckb -row 1 -column 0 -sticky w -pady 2
13546
13547    frame $w.cntls
13548    button $w.cntls.save -text [_ "Save"] -command SaveEmacsInfo
13549    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13550    pack $w.cntls.dis -side left -expand 0 -fill none
13551    pack $w.cntls.save -side right -expand 0 -fill none
13552    pack $w.title  -side top -expand 1 -fill both -pady 4 -padx 8
13553    pack $w.main  -side top -expand 1 -fill both -pady 4 -padx 8
13554    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 8
13555    balloonhelp_for $w $genmsg
13556    balloonhelp_for $w.title $genmsg
13557    balloonhelp_for $w.main $genmsg
13558    balloonhelp_for $w.cntls $genmsg
13559    set msg [_ "Press this button to make the changes you have made take effect."]
13560    balloonhelp_for $w.cntls.save $msg
13561    set msg [_ "Press this button to dismiss the popup."]
13562    balloonhelp_for $w.cntls.dis $msg
13563    set msg [_ "Case insensitive match?"]
13564    balloonhelp_for $w.main.emacsFoldCaseMatchPckb $msg;
13565    set msg [_ "Case insensitive substitution?"]
13566    balloonhelp_for $w.main.emacsFoldCaseReplacePckb $msg;
13567}
13568
13569proc SaveEmacsInfo {} {
13570    if {$::emacsFoldCaseMatchP} {
13571	set ::ProgramInfo(emacs,FoldCaseMatchP) 1
13572    } else {
13573	set ::ProgramInfo(emacs,FoldCaseMatchP) 0
13574    }
13575    if {$::emacsFoldCaseReplaceP} {
13576	set ::ProgramInfo(emacs,FoldCaseReplaceP) 1
13577    } else {
13578	set ::ProgramInfo(emacs,FoldCaseReplaceP) 0
13579    }
13580}
13581
13582option add  *pcpFgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13583option add  *pcpFgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13584option add  *pcpFgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13585option add  *pcpFgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13586option add  *pcpFgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13587option add  *pcpFgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13588option add  *pcpFgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13589
13590proc PopupFgrepControls {} {
13591    set w .pcpFgrep
13592    if {[winfo exist .pcpFgrep]} {
13593	if {![winfo ismapped .pcpFgrep]} {
13594	    wm deiconify .pcpFgrep;
13595	    raise .pcpFgrep
13596	} else {
13597	    wm iconify .pcpFgrep;
13598	}
13599	return ;
13600    }
13601    toplevel $w -borderwidth 4 -relief raised
13602    wm title $w Fgrep
13603    after idle {
13604	raise .pcpFgrep
13605	update idletasks
13606	set xmax [winfo screenwidth .pcpFgrep]
13607	set ymax [winfo screenheight .pcpFgrep]
13608	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpFgrep]))];
13609	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpFgrep]))];
13610	wm geometry .pcpFgrep "+$x0+$y0";
13611    }
13612    set genmsg [_ "Set command-line options for fgrep."]
13613    set title [_ "Fgrep Settings"]
13614    if {[FeaturesUnSetP fgrep $::InterfaceLocale]} {
13615	append title \n[_ "(untested)"]
13616    }
13617    label $w.title -text $title  -font PopupTitleFont
13618    frame $w.main
13619    checkbutton $w.main.fgrepCaseInsensitiveckb -text [_ "Case Insensitive"] \
13620	-variable fgrepCaseInsensitive -onvalue 1 -offvalue 0
13621    set ::fgrepCaseInsensitive $::ProgramInfo(fgrep,CaseInsensitiveP)
13622    checkbutton $w.main.fgrepMatchOnlyckb -text [_ "Emit Only Match"] \
13623	-variable fgrepMatchOnly -onvalue 1 -offvalue 0
13624    set ::fgrepMatchOnly $::ProgramInfo(fgrep,EmitMatchOnly)
13625    checkbutton $w.main.fgrepComplementckb -text [_ "Complement"] \
13626	-variable fgrepComplement -onvalue 1 -offvalue 0
13627    set ::fgrepComplement $::ProgramInfo(fgrep,Complement)
13628
13629    grid $w.main.fgrepCaseInsensitiveckb -row 0 -column 0 -sticky w -pady 2
13630    grid $w.main.fgrepComplementckb -row 1 -column 0 -sticky w -pady 2
13631    grid $w.main.fgrepMatchOnlyckb -row 2 -column 0 -sticky w -pady 2
13632
13633    frame $w.cntls
13634    button $w.cntls.save -text [_ "Save"] -command SaveFgrepInfo
13635    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13636    pack $w.cntls.dis -side left -expand 0 -fill none
13637    pack $w.cntls.save -side right -expand 0 -fill none
13638    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 8
13639    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 8
13640    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 8
13641    balloonhelp_for $w $genmsg
13642    balloonhelp_for $w.title $genmsg
13643    balloonhelp_for $w.main $genmsg
13644    balloonhelp_for $w.cntls $genmsg
13645    set msg [_ "Press this button to make the changes you have made take effect."]
13646    balloonhelp_for $w.cntls.save $msg
13647    if { ([FeaturesUnSetP fgrep $::InterfaceLocale] == 0) &&
13648	 ($::Features(CaseInsensitiveCLFlagBackrefP,fgrep,$::InterfaceLocale) == 0)} {
13649	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13650    } else {
13651	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13652    }
13653    balloonhelp_for $w.main.fgrepCaseInsensitiveckb $msg;
13654    set msg [_ "Press this button to dismiss the popup."]
13655    balloonhelp_for $w.cntls.dis $msg
13656    set msg [_ "Emit only the portion of the string that\nactually matched, not the whole line."]
13657    balloonhelp_for $w.main.fgrepMatchOnlyckb $msg;
13658    set msg [_ "Emit only strings not matching the regular expression?"]
13659    balloonhelp_for $w.main.fgrepComplementckb $msg;
13660}
13661
13662proc SaveFgrepInfo {} {
13663    if {$::fgrepCaseInsensitive} {
13664	set ::ProgramInfo(fgrep,CaseInsensitiveP) 1
13665    } else {
13666	set ::ProgramInfo(fgrep,CaseInsensitiveP) 0
13667    }
13668    if {$::fgrepComplement} {
13669	set ::ProgramInfo(fgrep,Complement) 1
13670    } else {
13671	set ::ProgramInfo(fgrep,Complement) 0
13672    }
13673    if {$::fgrepMatchOnly} {
13674	set ::ProgramInfo(fgrep,EmitMatchOnly) 1
13675    } else {
13676	set ::ProgramInfo(fgrep,EmitMatchOnly) 0
13677    }
13678}
13679
13680
13681option add  *pcpIci.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13682option add  *pcpIci.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13683option add  *pcpIci.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13684option add  *pcpIci.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13685option add  *pcpIci.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13686option add  *pcpIci.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13687option add  *pcpIci.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13688
13689proc PopupIciControls {} {
13690    set w .pcpIci
13691    if {[winfo exist .pcpIci]} {
13692	if {![winfo ismapped .pcpIci]} {
13693	    wm deiconify .pcpIci;
13694	    raise .pcpIci
13695	} else {
13696	    wm iconify .pcpIci;
13697	}
13698	return ;
13699    }
13700    toplevel $w -borderwidth 4 -relief raised
13701    wm title $w Ici
13702    after idle {
13703	raise .pcpIci
13704	update idletasks
13705	set xmax [winfo screenwidth .pcpIci]
13706	set ymax [winfo screenheight .pcpIci]
13707	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpIci]))];
13708	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpIci]))];
13709	wm geometry .pcpIci "+$x0+$y0";
13710    }
13711    set genmsg [_ "Set command-line options for ici."]
13712    set title [_ "Ici Settings"]
13713    if {[FeaturesUnSetP ici $::InterfaceLocale]} {
13714	append title \n[_ "(untested)"]
13715    }
13716    label $w.title -text $title  -font PopupTitleFont
13717    frame $w.main
13718    checkbutton $w.main.iciCaseInsensitivePckb -text [_ "Case Insensitive"] \
13719	-variable iciCaseInsensitiveP -onvalue 1 -offvalue 0
13720    set ::iciCaseInsensitive $::ProgramInfo(ici,CaseInsensitiveP)
13721    checkbutton $w.main.iciVerbosePckb -text [_ "Verbose"] \
13722	-variable iciVerboseP -onvalue 1 -offvalue 0
13723    set ::iciVerboseP $::ProgramInfo(ici,VerboseP)
13724    grid $w.main.iciCaseInsensitivePckb -row 0 -column 0 -sticky w -pady 2
13725    grid $w.main.iciVerbosePckb -row 2 -column 0 -sticky w -pady 2
13726
13727    frame $w.cntls
13728    button $w.cntls.save -text [_ "Save"] -command SaveIciInfo
13729    set msg [_ "Press this button to dismiss the popup."]
13730    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13731    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
13732    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
13733    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
13734    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
13735    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
13736    balloonhelp_for $w $genmsg
13737    balloonhelp_for $w.title $genmsg
13738    balloonhelp_for $w.main $genmsg
13739    balloonhelp_for $w.cntls $genmsg
13740    set msg [_ "Press this button to make the changes you have made take effect."]
13741    balloonhelp_for $w.cntls.save $msg
13742    if { ([FeaturesUnSetP ici $::InterfaceLocale] == 0) &&
13743	 ($::Features(CaseInsensitiveCLFlagBackrefP,ici,$::InterfaceLocale) == 0)} {
13744	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13745    } else {
13746	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13747    }
13748    balloonhelp_for $w.main.iciCaseInsensitivePckb $msg;
13749    set msg [_ "Press this button to dismiss the popup."]
13750    balloonhelp_for $w.cntls.dis $msg
13751    set msg [_ "Ignore whitespace and comments?"]
13752    balloonhelp_for $w.main.iciVerbosePckb $msg;
13753}
13754
13755proc SaveIciInfo {} {
13756    if {$::iciCaseInsensitiveP} {
13757	set ::ProgramInfo(ici,CaseInsensitiveP) 1
13758    } else {
13759	set ::ProgramInfo(ici,CaseInsensitiveP) 0
13760    }
13761    if {$::iciVerboseP} {
13762	set ::ProgramInfo(ici,VerboseP) 1
13763    } else {
13764	set ::ProgramInfo(ici,VerboseP) 0
13765    }
13766}
13767
13768option add  *pcpJava.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13769option add  *pcpJava.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13770option add  *pcpJava.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13771option add  *pcpJava.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13772option add  *pcpJava.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13773option add  *pcpJava.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13774option add  *pcpJava.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13775
13776proc PopupJavaControls {} {
13777    set w .pcpJava
13778    if {[winfo exist .pcpJava]} {
13779	if {![winfo ismapped .pcpJava]} {
13780	    wm deiconify .pcpJava;
13781	    raise .pcpJava
13782	} else {
13783	    wm iconify .pcpJava;
13784	}
13785	return ;
13786    }
13787    toplevel $w -borderwidth 4 -relief raised
13788    wm title $w Java
13789    after idle {
13790	raise .pcpJava
13791	update idletasks
13792	set xmax [winfo screenwidth .pcpJava]
13793	set ymax [winfo screenheight .pcpJava]
13794	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpJava]))];
13795	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpJava]))];
13796	wm geometry .pcpJava "+$x0+$y0";
13797    }
13798    set genmsg [_ "Set command-line options for java."]
13799    set title [_ "Java Settings"]
13800    if {[FeaturesUnSetP java $::InterfaceLocale]} {
13801	append title \n[_ "(untested)"]
13802    }
13803    label $w.title -text $title  -font PopupTitleFont
13804    frame $w.main
13805    checkbutton $w.main.javaCanonEQckb -text \
13806	[_ "Use Canonical Equivalence?"] \
13807	-variable javaCanonEQ -onvalue 1 -offvalue 0
13808    checkbutton $w.main.javaCaseInsensitiveckb -text \
13809	[_ "Match ASCII Without Regard to Case?"] \
13810	-variable javaCaseInsensitive -onvalue 1 -offvalue 0
13811    checkbutton $w.main.javaUnicodeCaseckb -text \
13812	[_ "Match Unicode Without Regard to Case?"] \
13813	-variable javaUnicodeCase -onvalue 1 -offvalue 0
13814    set ::javaCanonEQ $::ProgramInfo(java,CanonEQ)
13815    set ::javaCaseInsensitive $::ProgramInfo(java,CaseInsensitiveP)
13816    set ::javaUnicodeCase $::ProgramInfo(java,UnicodeCase)
13817
13818    grid $w.main.javaCanonEQckb -row 0 -column 0 -sticky w -pady 3
13819    grid $w.main.javaCaseInsensitiveckb -row 1 -column 0 -sticky w -pady 3
13820    grid $w.main.javaUnicodeCaseckb -row 2 -column 0 -sticky w -pady 3
13821
13822    frame $w.cntls
13823    button $w.cntls.save -text [_ "Save"] -command SaveJavaInfo
13824    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13825    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
13826    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
13827    pack $w.title -side top -expand 1 -fill both -padx 8 -pady 4
13828    pack $w.main  -side top -expand 1 -fill both -padx 8 -pady 4
13829    pack $w.cntls -side top -expand 1 -fill both -padx 8 -pady {8 4}
13830    balloonhelp_for $w $genmsg
13831    balloonhelp_for $w.title $genmsg
13832    balloonhelp_for $w.main $genmsg
13833    balloonhelp_for $w.cntls $genmsg
13834    set msg [_ "Press this button to make the changes you have made take effect."]
13835    balloonhelp_for $w.cntls.save $msg
13836    set msg [_ "Press this button to dismiss the popup."]
13837    balloonhelp_for $w.cntls.dis $msg
13838    set msg [_ "Set the Pattern.Canon_EQ regexp compilation flag?"]
13839    balloonhelp_for $w.main.javaCanonEQckb $msg;
13840    set msg [_ "Match ASCII characters without regard to case?"]
13841    balloonhelp_for $w.main.javaCaseInsensitiveckb $msg;
13842    set msg [_ "Match all Unicode characters without regard to case?"]
13843    balloonhelp_for $w.main.javaUnicodeCaseckb $msg;
13844}
13845
13846proc SaveJavaInfo {} {
13847    if {$::javaCanonEQ} {
13848	set ::ProgramInfo(java,CanonEQ) 1
13849    } else {
13850	set ::ProgramInfo(java,CanonEQ) 0
13851    }
13852    if {$::javaCaseInsensitive} {
13853	set ::ProgramInfo(java,CaseInsensitiveP) 1
13854    } else {
13855	set ::ProgramInfo(java,CaseInsensitiveP) 0
13856    }
13857    if {$::javaUnicodeCase} {
13858	set ::ProgramInfo(java,UnicodeCase) 1
13859    } else {
13860	set ::ProgramInfo(java,UnicodeCase) 0
13861    }
13862    set ::UpdateJavaByteCodeP 1;
13863}
13864
13865option add  *pcpJgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13866option add  *pcpJgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13867option add  *pcpJgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13868option add  *pcpJgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13869option add  *pcpJgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13870option add  *pcpJgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13871option add  *pcpJgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13872
13873proc PopupJgrepControls {} {
13874    set w .pcpJgrep
13875    if {[winfo exist .pcpJgrep]} {
13876	if {![winfo ismapped .pcpJgrep]} {
13877	    wm deiconify .pcpJgrep;
13878	    raise .pcpJgrep
13879	} else {
13880	    wm iconify .pcpJgrep;
13881	}
13882	return ;
13883    }
13884    toplevel $w -borderwidth 4 -relief raised
13885    wm title $w Jgrep
13886    after idle {
13887	raise .pcpJgrep
13888	update idletasks
13889	set xmax [winfo screenwidth .pcpJgrep]
13890	set ymax [winfo screenheight .pcpJgrep]
13891	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpJgrep]))];
13892	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpJgrep]))];
13893	wm geometry .pcpJgrep "+$x0+$y0";
13894    }
13895    set genmsg [_ "Set command-line options for jgrep."]
13896    set title [_ "Jgrep Settings"]
13897    if {[FeaturesUnSetP jgrep $::InterfaceLocale]} {
13898	append title \n[_ "(untested)"]
13899    }
13900    label $w.title -text $title  -font PopupTitleFont
13901    frame $w.main
13902    checkbutton $w.main.jgrepCaseInsensitiveckb -text [_ "Case Insensitive"] \
13903	-variable jgrepCaseInsensitive -onvalue 1 -offvalue 0
13904    set ::jgrepCaseInsensitive $::ProgramInfo(jgrep,CaseInsensitiveP)
13905
13906    grid $w.main.jgrepCaseInsensitiveckb -row 0 -column 0 -sticky w
13907
13908    frame $w.cntls
13909    button $w.cntls.save -text [_ "Save"] -command SaveJgrepInfo
13910    set msg [_ "Press this button to dismiss the popup."]
13911    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13912    pack $w.cntls.dis -side left -expand 0 -fill none
13913    pack $w.cntls.save -side right -expand 0 -fill none
13914    pack $w.title $w.main $w.cntls -side top -expand 1 -fill both -pady 4 -padx 15 -ipadx 5
13915    balloonhelp_for $w $genmsg
13916    balloonhelp_for $w.title $genmsg
13917    balloonhelp_for $w.main $genmsg
13918    balloonhelp_for $w.cntls $genmsg
13919    set msg [_ "Press this button to make the changes you have made take effect."]
13920    balloonhelp_for $w.cntls.save $msg
13921    set msg [_ "Press this button to dismiss the popup."]
13922    balloonhelp_for $w.cntls.dis $msg
13923    if { ([FeaturesUnSetP jgrep $::InterfaceLocale] == 0) &&
13924	 ($::Features(CaseInsensitiveCLFlagBackrefP,jgrep,$::InterfaceLocale) == 0)} {
13925	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
13926    } else {
13927	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
13928    }
13929    balloonhelp_for $w.main.jgrepCaseInsensitiveckb $msg;
13930}
13931
13932proc SaveJgrepInfo {} {
13933    if {$::jgrepCaseInsensitive} {
13934	set ::ProgramInfo(jgrep,CaseInsensitiveP) 1
13935    } else {
13936	set ::ProgramInfo(jgrep,CaseInsensitiveP) 0
13937    }
13938}
13939
13940option add  *pcpMysql.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
13941option add  *pcpMysql.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
13942option add  *pcpMysql.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
13943option add  *pcpMysql.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
13944option add  *pcpMysql.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
13945option add  *pcpMysql.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
13946option add  *pcpMysql.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
13947
13948proc PopupMysqlControls {} {
13949    set w .pcpMysql
13950    if {[winfo exist .pcpMysql]} {
13951	if {![winfo ismapped .pcpMysql]} {
13952	    wm deiconify .pcpMysql;
13953	    raise .pcpMysql
13954	} else {
13955	    wm iconify .pcpMysql;
13956	}
13957	return ;
13958    }
13959    toplevel $w -borderwidth 4 -relief raised
13960    wm title $w Mysql
13961    after idle {
13962	raise .pcpMysql
13963	update idletasks
13964	set xmax [winfo screenwidth .pcpMysql]
13965	set ymax [winfo screenheight .pcpMysql]
13966	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpMysql]))];
13967	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpMysql]))];
13968	wm geometry .pcpMysql "+$x0+$y0";
13969    }
13970    set genmsg [_ "Set command-line options for mysql."]
13971    set title [_ "Mysql Settings"]
13972    if {[FeaturesUnSetP mysql $::InterfaceLocale]} {
13973	append title \n[_ "(untested)"]
13974    }
13975    label $w.title -text $title  -font PopupTitleFont
13976    frame $w.main
13977    radiobutton $w.main.mysqlSQLWildcards -text [_ "SQL Wildcards"] \
13978	-variable ProgramInfo(mysql,RegexpP) -value 0
13979    radiobutton $w.main.mysqlRegexps -text [_ "Regular Expressions"] \
13980	-variable ProgramInfo(mysql,RegexpP) -value 1
13981    pack $w.main.mysqlSQLWildcards -side top -expand 1 -fill y -pady {3 1} -anchor w
13982    pack $w.main.mysqlRegexps      -side top -expand 1 -fill y -pady {1 3} -anchor w
13983    frame $w.cntls
13984    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
13985    pack $w.cntls.dis -side left -expand 0 -fill none
13986    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 8
13987    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 8
13988    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 8
13989    balloonhelp_for $w $genmsg
13990    balloonhelp_for $w.title $genmsg
13991    balloonhelp_for $w.main $genmsg
13992    balloonhelp_for $w.cntls $genmsg
13993    set msg [_ "Press this button to dismiss the popup."]
13994    balloonhelp_for $w.cntls.dis $msg
13995    set msg [_ "Use SQL wildcards."]
13996    balloonhelp_for $w.main.mysqlSQLWildcards $msg;
13997    set msg [_ "Use regular expressions."]
13998    balloonhelp_for $w.main.mysqlRegexps $msg;
13999}
14000
14001trace add variable ProgramInfo(mysql,RegexpP) write ChangeMysql
14002
14003proc ChangeMysql {e o n} {
14004    if {[string equal $::program mysql]} {
14005	TestFeatures;
14006	ConstructPalette;
14007    }
14008}
14009
14010option add  *pcpNrgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14011option add  *pcpNrgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14012option add  *pcpNrgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14013option add  *pcpNrgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14014option add  *pcpNrgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14015option add  *pcpNrgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14016option add  *pcpNrgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14017
14018proc PopupNrgrepControls {} {
14019    set w .pcpNrgrep
14020    if {[winfo exist .pcpNrgrep]} {
14021	if {![winfo ismapped .pcpNrgrep]} {
14022	    wm deiconify .pcpNrgrep;
14023	    raise .pcpNrgrep
14024	} else {
14025	    wm iconify .pcpNrgrep;
14026	}
14027	return ;
14028    }
14029    toplevel $w -borderwidth 4 -relief raised
14030    wm title $w Nrgrep
14031    after idle {
14032	raise .pcpNrgrep
14033	update idletasks
14034	set xmax [winfo screenwidth .pcpNrgrep]
14035	set ymax [winfo screenheight .pcpNrgrep]
14036	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpNrgrep]))];
14037	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpNrgrep]))];
14038	wm geometry .pcpNrgrep "+$x0+$y0";
14039    }
14040    set genmsg [_ "Set command-line options for nrgrep."]
14041    if {[FeaturesUnSetP nrgrep $::InterfaceLocale]} {
14042	append title \n[_ "(untested)"]
14043    }
14044    label $w.title -text [_ "Nrgrep Settings"] -relief groove -border 1 -font PopupTitleFont
14045    frame $w.main
14046    checkbutton $w.main.nrgrepCaseInsensitiveckb -text [_ "Case Insensitive"] \
14047	-variable nrgrepCaseInsensitiveP -onvalue 1 -offvalue 0
14048    set ::nrgrepCaseInsensitiveP $::ProgramInfo(nrgrep,CaseInsensitiveP)
14049    checkbutton $w.main.nrgrepComplementckb -text [_ "Complement"] \
14050	-variable nrgrepComplementP -onvalue 1 -offvalue 0
14051    set ::nrgrepComplementP $::ProgramInfo(nrgrep,ComplementP)
14052
14053    frame $w.main.app -relief ridge -border 2
14054    label $w.main.app.tit -text [_ "Approximate Matching"] -relief raised -border 1
14055    iwidgets::spinint $w.main.app.cost \
14056	-labelpos e \
14057	-width 3 \
14058	-range {0 100} \
14059	-wrap 0 \
14060	-labeltext Cost \
14061	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
14062	-increment IncrementCost -decrement DecrementCost \
14063	-invalid {};# Prevents irritating flashing or ringing of bell
14064    checkbutton $w.main.app.nrgrepInsertionckb -text [_ "Insertions"] \
14065	-variable nrgrepInsertionsP -onvalue 1 -offvalue 0
14066    set ::nrgrepInsertionsP $::ProgramInfo(nrgrep,InsertionsP)
14067    checkbutton $w.main.app.nrgrepDeletionckb -text [_ "Deletions"] \
14068	-variable nrgrepDeletionsP -onvalue 1 -offvalue 0
14069    set ::nrgrepDeletionsP $::ProgramInfo(nrgrep,DeletionsP)
14070    checkbutton $w.main.app.nrgrepSubstitutionckb -text [_ "Substitutions"] \
14071	-variable nrgrepSubstitutionsP -onvalue 1 -offvalue 0
14072    set ::nrgrepSubstitutionsP $::ProgramInfo(nrgrep,SubstitutionsP)
14073    checkbutton $w.main.app.nrgrepTranspositionckb -text [_ "Transpositions"] \
14074	-variable nrgrepTranspositionsP -onvalue 1 -offvalue 0
14075    set ::nrgrepTranspositionsP $::ProgramInfo(nrgrep,TranspositionsP)
14076    pack $w.main.app.tit -side top  -expand 0 -fill none -pady 5 -padx 4 -ipadx 4 -ipady 2
14077    pack $w.main.app.cost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
14078    pack \
14079	$w.main.app.nrgrepInsertionckb \
14080	$w.main.app.nrgrepDeletionckb \
14081	$w.main.app.nrgrepSubstitutionckb \
14082	$w.main.app.nrgrepTranspositionckb \
14083	-side top -expand 1 -fill y -anchor w -padx 4  -pady 2
14084    $w.main.app.cost insert 0 $::ProgramInfo(nrgrep,TotalCost);
14085
14086    pack $w.main.app                      -side bottom -expand 1 -fill both \
14087	-padx 3 -pady 5
14088    pack $w.main.nrgrepCaseInsensitiveckb -side top    -expand 1 -fill y \
14089	-padx 3 -pady 3 -anchor w
14090    pack $w.main.nrgrepComplementckb      -side top    -expand 1 -fill y \
14091	-padx 3 -pady 3 -anchor w
14092
14093    frame $w.cntls;
14094    button $w.cntls.save -text [_ "Save"] -command SaveNrgrepInfo
14095    set msg [_ "Press this button to dismiss the popup."]
14096    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14097    pack $w.cntls.dis -side left -expand 0 -fill none -padx 5
14098    pack $w.cntls.save -side right -expand 0 -fill none -padx 5
14099
14100    pack $w.title -side top -expand 1 -fill both -pady {8 4} -padx 35 -ipadx 5 -ipady 3
14101    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 20
14102    pack $w.cntls -side top -expand 1 -fill both -pady {4 8} -padx 20
14103    #balloonhelp_for $w $genmsg
14104    balloonhelp_for $w.title $genmsg
14105    balloonhelp_for $w.main $genmsg
14106    balloonhelp_for $w.cntls $genmsg
14107    set msg [_ "Press this button to make the changes you have made take effect."]
14108    balloonhelp_for $w.cntls.save $msg
14109    if { ([FeaturesUnSetP nrgrep $::InterfaceLocale] == 0) &&
14110	 ($::Features(CaseInsensitiveCLFlagBackrefP,nrgrep,$::InterfaceLocale) == 0)} {
14111	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
14112    } else {
14113	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
14114    }
14115    balloonhelp_for $w.main.nrgrepCaseInsensitiveckb $msg;
14116    set msg [_ "Press this button to dismiss the popup."]
14117    balloonhelp_for $w.cntls.dis $msg
14118    set msg [_ "Emit only strings not matching the regular expression?"]
14119    balloonhelp_for $w.main.nrgrepComplementckb $msg;
14120}
14121
14122proc IncrementCost {} {
14123    .pcpNrgrep.main.app.cost up
14124}
14125
14126proc DecrementCost {} {
14127    .pcpNrgrep.main.app.cost down
14128}
14129
14130proc SaveNrgrepInfo {} {
14131    set ::ProgramInfo(nrgrep,TotalCost) [.pcpNrgrep.main.app.cost get]
14132    if {$::nrgrepCaseInsensitiveP} {
14133	set ::ProgramInfo(nrgrep,CaseInsensitiveP) 1
14134    } else {
14135	set ::ProgramInfo(nrgrep,CaseInsensitiveP) 0
14136    }
14137    if {$::nrgrepComplementP} {
14138	set ::ProgramInfo(nrgrep,ComplementP) 1
14139    } else {
14140	set ::ProgramInfo(nrgrep,ComplementP) 0
14141    }
14142    if {$::nrgrepInsertionsP} {
14143	set ::ProgramInfo(nrgrep,InsertionsP) 1
14144    } else {
14145	set ::ProgramInfo(nrgrep,InsertionsP) 0
14146    }
14147    if {$::nrgrepDeletionsP} {
14148	set ::ProgramInfo(nrgrep,DeletionsP) 1
14149    } else {
14150	set ::ProgramInfo(nrgrep,DeletionsP) 0
14151    }
14152    if {$::nrgrepSubstitutionsP} {
14153	set ::ProgramInfo(nrgrep,SubstitutionsP) 1
14154    } else {
14155	set ::ProgramInfo(nrgrep,SubstitutionsP) 0
14156    }
14157    if {$::nrgrepTranspositionsP} {
14158	set ::ProgramInfo(nrgrep,TranspositionsP) 1
14159    } else {
14160	set ::ProgramInfo(nrgrep,TranspositionsP) 0
14161    }
14162}
14163
14164option add  *pcpPatmatch.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14165option add  *pcpPatmatch.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14166option add  *pcpPatmatch.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14167option add  *pcpPatmatch.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14168option add  *pcpPatmatch.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14169option add  *pcpPatmatch.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14170option add  *pcpPatmatch.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14171
14172proc PopupPatmatchControls {} {
14173    set w .pcpPatmatch
14174    if {[winfo exist .pcpPatmatch]} {
14175	if {![winfo ismapped .pcpPatmatch]} {
14176	    wm deiconify .pcpPatmatch;
14177	    raise .pcpPatmatch
14178	} else {
14179	    wm iconify .pcpPatmatch;
14180	}
14181	return ;
14182    }
14183    toplevel $w -borderwidth 4 -relief raised
14184    wm title $w Patmatch
14185    after idle {
14186	raise .pcpPatmatch
14187	update idletasks
14188	set xmax [winfo screenwidth .pcpPatmatch]
14189	set ymax [winfo screenheight .pcpPatmatch]
14190	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpPatmatch]))];
14191	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpPatmatch]))];
14192	wm geometry .pcpPatmatch "+$x0+$y0";
14193    }
14194    set genmsg [_ "Set command-line options for patmatch."]
14195    if {[FeaturesUnSetP patmatch $::InterfaceLocale]} {
14196	append title \n[_ "(untested)"]
14197    }
14198    label $w.title -text [_ "Patmatch Settings"] -relief groove -border 1 \
14199	-font PopupTitleFont
14200    frame $w.main
14201    set rf [frame $w.main.res -relief ridge -border 2]
14202    label $rf.tit -text [_ "Residue"] -relief raised -border 1
14203    radiobutton $rf.nuc -variable ProgramInfo(patmatch,ResidueType) -value n \
14204	-text [_ "Nucleotides"] -indicatoron 0
14205    radiobutton $rf.pep -variable ProgramInfo(patmatch,ResidueType) -value p \
14206	-text [_ "Proteins"] -indicatoron 0
14207    radiobutton $rf.com -variable ProgramInfo(patmatch,ResidueType) -value c \
14208	-text [_ "Crick Strand"] -indicatoron 0
14209    pack $rf.tit -side top -expand 0 -fill none -padx 5 -pady 6 -anchor w
14210    pack $rf.nuc -side left -expand 1 -fill both -padx 5 -pady {4 6}
14211    pack $rf.pep -side left -expand 1 -fill both -padx 5 -pady {4 6}
14212    pack $rf.com -side left -expand 1 -fill both -padx 5 -pady {4 6}
14213    set ap [frame $w.main.app -relief ridge -border 2]
14214    label $ap.tit -text [_ "Approximate Matching"] -relief raised -border 1
14215    iwidgets::spinint $ap.mismatches \
14216	-labelpos w \
14217	-width 3 \
14218	-range {0 10} \
14219	-wrap 0 \
14220	-labeltext Mismatches \
14221	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
14222	-increment IncrementMismatches -decrement DecrementMismatches \
14223	-invalid {};# Prevents irritating flashing or ringing of bell
14224    $ap.mismatches delete 0 end
14225    $ap.mismatches insert 0 $::ProgramInfo(patmatch,MismatchNumber);
14226    checkbutton $ap.ins -text [_ "Insertions"] \
14227	-variable patmatchInsertionsP -onvalue 1 -offvalue 0 -indicatoron 1
14228    set ::patmatchInsertionsP [expr [string first i $::ProgramInfo(patmatch,MismatchTypes)] >= 0]
14229    checkbutton $ap.del -text [_ "Deletions"] \
14230	-variable patmatchDeletionsP -onvalue 1 -offvalue 0 -indicatoron 1
14231    set ::patmatchDeletionsP [expr [string first d $::ProgramInfo(patmatch,MismatchTypes)] >= 0]
14232    checkbutton $ap.sub -text [_ "Substitutions"] \
14233	-variable patmatchSubstitutionsP -onvalue 1 -offvalue 0 -indicatoron 1
14234    set ::patmatchSubstitutionsP [expr [string first s $::ProgramInfo(patmatch,MismatchTypes)] >= 0]
14235    pack $ap.tit -side top  -anchor w\
14236	-expand 0 -fill none -pady 5 -padx 4 -ipadx 4 -ipady 2
14237    pack $ap.mismatches \
14238	-side top -expand 1 -fill y -anchor w -padx 4  -pady 7
14239    pack $ap.ins \
14240	-side left -expand 1 -fill y -anchor w -padx 4  -pady {5 7}
14241    pack $ap.del  \
14242	-side left -expand 1 -fill y -anchor w -padx 4  -pady {5 7}
14243    pack $ap.sub \
14244	-side left -expand 1 -fill y -anchor w -padx 4  -pady {5 7}
14245
14246    pack $ap  -side bottom -expand 1 -fill both -padx 3 -pady 3
14247    pack $rf         -side bottom -expand 1 -fill both 	-padx 3 -pady 3
14248    frame $w.cntls;
14249    button $w.cntls.save -text [_ "Save"] -command SavePatmatchInfo
14250    set msg [_ "Press this button to dismiss the popup."]
14251    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14252    pack $w.cntls.dis -side left -expand 0 -fill none -padx {15 3}
14253    pack $w.cntls.save -side right -expand 0 -fill none -padx {3 15}
14254
14255    pack $w.title -side top -expand 1 -fill both -pady {8 4} -padx 35 -ipadx 5 -ipady 3
14256    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 20
14257    pack $w.cntls -side top -expand 1 -fill both -pady {4 8} -padx 20
14258    #balloonhelp_for $w $genmsg
14259    balloonhelp_for $w.title $genmsg
14260    balloonhelp_for $w.main $genmsg
14261    balloonhelp_for $w.cntls $genmsg
14262    set msg [_ "Choose the type of residue you wish to search."]
14263    balloonhelp_for $rf $msg
14264    balloonhelp_for $rf.tit $msg
14265    balloonhelp_for $rf.nuc $msg
14266    balloonhelp_for $rf.pep $msg
14267    balloonhelp_for $rf.com $msg
14268    set msg [_ "Set the maximum number of mismatches permitted."]
14269    balloonhelp_for $ap.mismatches $msg;
14270    set msg [_ "Choose which types of mismatches are permitted."]
14271    balloonhelp_for $ap.ins $msg
14272    balloonhelp_for $ap.del $msg
14273    balloonhelp_for $ap.sub $msg
14274    set msg [_ "Press this button to make the changes you have made take effect."]
14275    balloonhelp_for $w.cntls.save $msg
14276    set msg [_ "Press this button to dismiss the popup."]
14277    balloonhelp_for $w.cntls.dis $msg
14278}
14279
14280proc IncrementMismatches {} {
14281    .pcpPatmatch.main.app.mismatches up
14282}
14283
14284proc DecrementMismatches {} {
14285    .pcpPatmatch.main.app.mismatches down
14286}
14287
14288proc SavePatmatchInfo {} {
14289    set ::ProgramInfo(patmatch,MismatchNumber) [.pcpPatmatch.main.app.mismatches get]
14290    if {$::patmatchInsertionsP} {
14291	append ostr i
14292    }
14293    if {$::patmatchDeletionsP} {
14294	append ostr d
14295    }
14296    if {$::patmatchSubstitutionsP} {
14297	append ostr s
14298    }
14299    set ::ProgramInfo(patmatch,MismatchTypes) $ostr;
14300}
14301
14302option add  *pcpPerl.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14303option add  *pcpPerl.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14304option add  *pcpPerl.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14305option add  *pcpPerl.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14306option add  *pcpPerl.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14307option add  *pcpPerl.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14308option add  *pcpPerl.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14309
14310option add  *pcpNumgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14311option add  *pcpNumgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14312option add  *pcpNumgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14313option add  *pcpNumgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14314option add  *pcpNumgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14315option add  *pcpNumgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14316option add  *pcpNumgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14317
14318proc PopupNumgrepControls {} {
14319    set w .pcpNumgrep
14320    if {[winfo exist .pcpNumgrep]} {
14321	if {![winfo ismapped .pcpNumgrep]} {
14322	    wm deiconify .pcpNumgrep;
14323	    raise .pcpNumgrep
14324	} else {
14325	    wm iconify .pcpNumgrep;
14326	}
14327	return ;
14328    }
14329    toplevel $w -borderwidth 4 -relief raised
14330    wm title $w Numgrep
14331    after idle {
14332	raise .pcpNumgrep
14333	update idletasks
14334	set xmax [winfo screenwidth .pcpNumgrep]
14335	set ymax [winfo screenheight .pcpNumgrep]
14336	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpNumgrep]))];
14337	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpNumgrep]))];
14338	wm geometry .pcpNumgrep "+$x0+$y0";
14339    }
14340    set genmsg [_ "Set command-line options for numgrep."]
14341    set title [_ "Numgrep Settings"]
14342    if {[FeaturesUnSetP numgrep $::InterfaceLocale]} {
14343	append title \n[_ "(untested)"]
14344    }
14345    label $w.title -text $title  -font PopupTitleFont
14346    frame $w.main
14347    checkbutton $w.main.numgrepOutputNumberByNumberckb -text [_ "Output Number By Number"] \
14348	-variable numgrepOutputNumberByNumber -onvalue 1 -offvalue 0
14349    set ::numgrepOutputNumberByNumber $::ProgramInfo(numgrep,OutputNumberByNumberP)
14350
14351    grid $w.main.numgrepOutputNumberByNumberckb -row 0 -column 0 -sticky w
14352
14353    frame $w.cntls
14354    button $w.cntls.save -text [_ "Save"] -command SaveNumgrepInfo
14355    set msg [_ "Press this button to dismiss the popup."]
14356    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14357    pack $w.cntls.dis -side left -expand 0 -fill none
14358    pack $w.cntls.save -side right -expand 0 -fill none
14359    pack $w.title $w.main $w.cntls -side top -expand 1 -fill both -pady 4 -padx 15 -ipadx 5
14360    balloonhelp_for $w $genmsg
14361    balloonhelp_for $w.title $genmsg
14362    balloonhelp_for $w.main $genmsg
14363    balloonhelp_for $w.cntls $genmsg
14364    set msg [_ "Press this button to make the changes you have made take effect."]
14365    balloonhelp_for $w.cntls.save $msg
14366    set msg [_ "Press this button to dismiss the popup."]
14367    balloonhelp_for $w.cntls.dis $msg
14368    set msg [_ "Print the matching numbers one per line\neven if they are on a single line?"]
14369    balloonhelp_for $w.main.numgrepOutputNumberByNumberckb $msg;
14370}
14371
14372proc SaveNumgrepInfo {} {
14373    if {$::numgrepOutputNumberByNumber} {
14374	set ::ProgramInfo(numgrep,OutputNumberByNumberP) 1
14375    } else {
14376	set ::ProgramInfo(numgrep,OutputNumberByNumberP) 0
14377    }
14378}
14379
14380proc PopupPerlControls {} {
14381    set w .pcpPerl
14382    if {[winfo exist .pcpPerl]} {
14383	if {![winfo ismapped .pcpPerl]} {
14384	    wm deiconify .pcpPerl;
14385	    raise .pcpPerl
14386	} else {
14387	    wm iconify .pcpPerl;
14388	}
14389	return ;
14390    }
14391    toplevel $w -borderwidth 4 -relief raised
14392    wm title $w Perl
14393    after idle {
14394	raise .pcpPerl
14395	update idletasks
14396	set xmax [winfo screenwidth .pcpPerl]
14397	set ymax [winfo screenheight .pcpPerl]
14398	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpPerl]))];
14399	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpPerl]))];
14400	wm geometry .pcpPerl "+$x0+$y0";
14401    }
14402    set genmsg [_ "Set options for perl."]
14403    set title [_ "Perl Settings"]
14404    if {[FeaturesUnSetP perl $::InterfaceLocale]} {
14405	append title \n[_ "(untested)"]
14406    }
14407    label $w.title -text $title  -font PopupTitleFont
14408    frame $w.main
14409    checkbutton $w.main.perlUnicodeLocaleDependentPckb \
14410	-text [_ "Make Unicode Support\nInterfaceLocale Dependent?"] \
14411	-variable perlUnicodeLocaleDependentP -onvalue 1 -offvalue 0
14412    set ::perlUnicodeLocaleDependentP $::ProgramInfo(perl,UnicodeLocaleDependentP)
14413
14414    grid $w.main.perlUnicodeLocaleDependentPckb -row 0 -column 0 -sticky w
14415
14416    frame $w.cntls
14417    button $w.cntls.save -text [_ "Save"] -command SavePerlInfo
14418    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14419    pack $w.cntls.dis -side left -expand 0 -fill none
14420    pack $w.cntls.save -side right -expand 0 -fill none
14421    pack $w.title $w.main $w.cntls -side top -expand 1 -fill both -pady 4 -padx 10 -ipadx 5
14422    balloonhelp_for $w $genmsg
14423    balloonhelp_for $w.title $genmsg
14424    balloonhelp_for $w.main $genmsg
14425    balloonhelp_for $w.cntls $genmsg
14426    set msg [_ "Press this button to make the changes you have made take effect."]
14427    balloonhelp_for $w.cntls.save $msg
14428    set msg [_ "Press this button to dismiss the popup."]
14429    balloonhelp_for $w.cntls.dis $msg
14430    set msg [_ "Make Unicode support locale dependent?"]
14431    balloonhelp_for $w.main.perlUnicodeLocaleDependentPckb $msg;
14432}
14433
14434proc SavePerlInfo {} {
14435    if {$::perlUnicodeLocaleDependentP} {
14436	set ::ProgramInfo(perl,UnicodeLocaleDependentP) 1
14437    } else {
14438	set ::ProgramInfo(perl,UnicodeLocaleDependentP) 0
14439    }
14440}
14441
14442proc PerlUnicodeDepUpdate {n e o} {
14443    TestFeatures;
14444    LabelMenus;
14445}
14446
14447option add  *pcpPython.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14448option add  *pcpPython.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14449option add  *pcpPython.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14450option add  *pcpPython.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14451option add  *pcpPython.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14452option add  *pcpPython.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14453option add  *pcpPython.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14454
14455proc PopupPythonControls {} {
14456    set w .pcpPython
14457    if {[winfo exist .pcpPython]} {
14458	if {![winfo ismapped .pcpPython]} {
14459	    wm deiconify .pcpPython;
14460	    raise .pcpPython
14461	} else {
14462	    wm iconify .pcpPython;
14463	}
14464	return ;
14465    }
14466    toplevel $w -borderwidth 4 -relief raised
14467    wm title $w Python
14468    after idle {
14469	raise .pcpPython
14470	update idletasks
14471	set xmax [winfo screenwidth .pcpPython]
14472	set ymax [winfo screenheight .pcpPython]
14473	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpPython]))];
14474	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpPython]))];
14475	wm geometry .pcpPython "+$x0+$y0";
14476    }
14477    set genmsg [_ "Set options for python."]
14478    set title [_ "Python Settings"]
14479    if {[FeaturesUnSetP python $::InterfaceLocale]} {
14480	append title \n[_ "(untested)"]
14481    }
14482    label $w.title -text $title  -font PopupTitleFont
14483    frame $w.main
14484    checkbutton $w.main.pythonRawStringPckb -text [_ "Pass Expressions as\nRaw Strings?"] \
14485	-variable pythonRawStringP -onvalue 1 -offvalue 0
14486    set ::pythonRawStringP $::ProgramInfo(python,RawStringP)
14487
14488    grid $w.main.pythonRawStringPckb -row 0 -column 0 -sticky w
14489
14490    frame $w.cntls
14491    button $w.cntls.save -text [_ "Save"] -command SavePythonInfo
14492    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14493    pack $w.cntls.dis -side left -expand 0 -fill none
14494    pack $w.cntls.save -side right -expand 0 -fill none
14495    pack $w.title -side top -expand 1 -fill both -padx 8 -pady 4
14496    pack $w.main  -side top -expand 1 -fill both -padx 8 -pady 4
14497    pack $w.cntls -side top -expand 1 -fill both -padx 8 -pady {8 4}
14498    balloonhelp_for $w $genmsg
14499    balloonhelp_for $w.title $genmsg
14500    balloonhelp_for $w.main $genmsg
14501    balloonhelp_for $w.cntls $genmsg
14502    set msg [_ "Press this button to make the changes you have made take effect."]
14503    balloonhelp_for $w.cntls.save $msg
14504    set msg [_ "Press this button to dismiss the popup."]
14505    balloonhelp_for $w.cntls.dis $msg
14506    set msg [_ "Pass expressions as raw strings?"]
14507    balloonhelp_for $w.main.pythonRawStringPckb $msg;
14508}
14509
14510proc SavePythonInfo {} {
14511    if {$::pythonRawStringP} {
14512	set ::ProgramInfo(python,RawStringP) 1
14513    } else {
14514	set ::ProgramInfo(python,RawStringP) 0
14515    }
14516}
14517
14518option add  *pcpSed.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14519option add  *pcpSed.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14520option add  *pcpSed.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14521option add  *pcpSed.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14522option add  *pcpSed.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14523option add  *pcpSed.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14524option add  *pcpSed.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14525
14526proc PopupSedControls {} {
14527    if {[string equal $::ProgramInfo(sed,Which) supersed]} {
14528	PopupSsedControls
14529	return
14530    }
14531    if {[string equal $::ProgramInfo(sed,Which) minised]} {
14532	ShowMessage [_ "This version of sed does not support any options."]
14533	return
14534    }
14535    set w .pcpSed
14536    if {[winfo exist .pcpSed]} {
14537	if {![winfo ismapped .pcpSed]} {
14538	    wm deiconify .pcpSed;
14539	    raise .pcpSed
14540	} else {
14541	    wm iconify .pcpSed;
14542	}
14543	return ;
14544    }
14545    toplevel $w -borderwidth 4 -relief raised
14546    wm title $w Sed
14547    after idle {
14548	raise .pcpSed
14549	update idletasks
14550	set xmax [winfo screenwidth .pcpSed]
14551	set ymax [winfo screenheight .pcpSed]
14552	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpSed]))];
14553	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpSed]))];
14554	wm geometry .pcpSed "+$x0+$y0";
14555    }
14556    set genmsg [_ "Set command-line options for sed."]
14557    set title [_ "Sed Settings"]
14558    if {[FeaturesUnSetP sed $::InterfaceLocale]} {
14559	append title \n[_ "(untested)"]
14560    }
14561    label $w.title -text $title  -font PopupTitleFont
14562    frame $w.main
14563    checkbutton $w.main.sedExtendedRegexpckb -text \
14564	[_ "Use Extended Regular\nExpression Notation?"] \
14565	-variable sedExtendedRegexp -onvalue 1 -offvalue 0
14566    set ::sedExtendedRegexp $::ProgramInfo(sed,ExtendedRegexp)
14567
14568    grid $w.main.sedExtendedRegexpckb -row 0 -column 0 -sticky w
14569
14570    frame $w.cntls
14571    button $w.cntls.save -text [_ "Save"] -command SaveSedInfo
14572    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14573    pack $w.cntls.dis -side left -expand 0 -fill none
14574    pack $w.cntls.save -side right -expand 0 -fill none
14575    pack $w.title -side top -expand 1 -fill both -padx 8 -pady 4
14576    pack $w.main  -side top -expand 1 -fill both -padx 8 -pady 4
14577    pack $w.cntls -side top -expand 1 -fill both -padx 8 -pady {8 4}
14578    balloonhelp_for $w $genmsg
14579    balloonhelp_for $w.title $genmsg
14580    balloonhelp_for $w.main $genmsg
14581    balloonhelp_for $w.cntls $genmsg
14582    set msg [_ "Press this button to make the changes you have made take effect."]
14583    balloonhelp_for $w.cntls.save $msg
14584    set msg [_ "Press this button to dismiss the popup."]
14585    balloonhelp_for $w.cntls.dis $msg
14586    set msg [_ "Use extended regular expression notation?"]
14587    balloonhelp_for $w.main.sedExtendedRegexpckb $msg;
14588}
14589
14590proc SaveSedInfo {} {
14591    if {$::sedExtendedRegexp} {
14592	set ::ProgramInfo(sed,ExtendedRegexp) 1
14593    } else {
14594	set ::ProgramInfo(sed,ExtendedRegexp) 0
14595    }
14596    TestFeatures;
14597}
14598
14599option add  *pcpSsed.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14600option add  *pcpSsed.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14601option add  *pcpSsed.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14602option add  *pcpSsed.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14603option add  *pcpSsed.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14604option add  *pcpSsed.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14605option add  *pcpSsed.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14606
14607proc PopupSsedControls {} {
14608    set w .pcpSsed
14609    if {[winfo exist .pcpSsed]} {
14610	if {![winfo ismapped .pcpSsed]} {
14611	    wm deiconify .pcpSsed;
14612	    raise .pcpSsed
14613	} else {
14614	    wm iconify .pcpSsed;
14615	}
14616	return ;
14617    }
14618    toplevel $w -borderwidth 4 -relief raised
14619    wm title $w Ssed
14620    after idle {
14621	raise .pcpSsed
14622	update idletasks
14623	set xmax [winfo screenwidth .pcpSsed]
14624	set ymax [winfo screenheight .pcpSsed]
14625	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpSsed]))];
14626	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpSsed]))];
14627	wm geometry .pcpSsed "+$x0+$y0";
14628    }
14629    set genmsg [_ "Set command-line options for ssed."]
14630    set title [_ "Ssed Settings"]
14631    if {[FeaturesUnSetP ssed $::InterfaceLocale]} {
14632	append title \n[_ "(untested)"]
14633    }
14634    label $w.title -text $title  -font PopupTitleFont
14635    frame $w.main
14636
14637    checkbutton $w.main.ssedPOSIXckb -text [_ "Adhere to POSIX - no GNU extensions"] \
14638	-variable ::ProgramInfo(ssed,POSIX) -onvalue 1 -offvalue 0
14639
14640    radiobutton $w.main.ssedrdb1 -text [_ "basic"] \
14641	-variable ::ProgramInfo(ssed,RegexpType) -value "basic"
14642    radiobutton $w.main.ssedrdb2 -text [_ "extended"] \
14643	-variable ::ProgramInfo(ssed,RegexpType) -value "extended"
14644    radiobutton $w.main.ssedrdb3 -text [_ "perl"] \
14645	-variable ::ProgramInfo(ssed,RegexpType) -value "perl"
14646
14647    grid $w.main.ssedPOSIXckb -row 0 -column 0 -sticky w -pady 2 -columnspan 3
14648    grid $w.main.ssedrdb1     -row 1 -column 0 -sticky w -pady 2
14649    grid $w.main.ssedrdb2     -row 1 -column 1 -sticky w -pady 2
14650    grid $w.main.ssedrdb3     -row 1 -column 2 -sticky w -pady 2
14651
14652    frame $w.cntls
14653    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14654    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
14655    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
14656    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
14657    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
14658
14659    set msg [_ "Use only POSIX features - disable GNU extensions."]
14660    balloonhelp_for $w.main.ssedPOSIXckb $msg
14661    set msg [_ "Use basic regular expressions."]
14662    balloonhelp_for $w.main.ssedrdb1 $msg
14663    set msg [_ "Use extended regular expressions."]
14664    balloonhelp_for $w.main.ssedrdb2 $msg
14665    set msg [_ "Use PERL5 regular expressions."]
14666    balloonhelp_for $w.main.ssedrdb3 $msg
14667    balloonhelp_for $w $genmsg
14668    balloonhelp_for $w.title $genmsg
14669    balloonhelp_for $w.main $genmsg
14670    balloonhelp_for $w.cntls $genmsg
14671    set msg [_ "Press this button to dismiss the popup."]
14672    balloonhelp_for $w.cntls.dis $msg
14673}
14674
14675proc UpdateSsedPalette {e o n} {
14676    TestFeatures
14677    ConstructPalette
14678}
14679
14680option add  *pcpTcl.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14681option add  *pcpTcl.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14682option add  *pcpTcl.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14683option add  *pcpTcl.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14684option add  *pcpTcl.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14685option add  *pcpTcl.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14686option add  *pcpTcl.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14687
14688proc PopupTclControls {} {
14689    set w .pcpTcl
14690    if {[winfo exist .pcpTcl]} {
14691	if {![winfo ismapped .pcpTcl]} {
14692	    wm deiconify .pcpTcl;
14693	    raise .pcpTcl
14694	} else {
14695	    wm iconify .pcpTcl;
14696	}
14697	return ;
14698    }
14699    toplevel $w -borderwidth 4 -relief raised
14700    wm title $w Tcl
14701    after idle {
14702	raise .pcpTcl
14703	update idletasks
14704	set xmax [winfo screenwidth .pcpTcl]
14705	set ymax [winfo screenheight .pcpTcl]
14706	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpTcl]))];
14707	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpTcl]))];
14708	wm geometry .pcpTcl "+$x0+$y0";
14709    }
14710    set genmsg [_ "Set command-line options for tcl."]
14711    set title [_ "Tcl Settings"]
14712    if {[FeaturesUnSetP tcl $::InterfaceLocale]} {
14713	append title \n[_ "(untested)"]
14714    }
14715    label $w.title -text $title  -font PopupTitleFont
14716    frame $w.main
14717    checkbutton $w.main.tclCaseInsensitiveckb -text [_ "Case Insensitive"] \
14718	-variable ::ProgramInfo(tcl,CaseInsensitiveP) -onvalue 1 -offvalue 0
14719    checkbutton $w.main.tclEmitMatchOnlyckb -text [_ "Emit Match Only"] \
14720	-variable ::ProgramInfo(tcl,EmitMatchOnlyP) -onvalue 1 -offvalue 0
14721    checkbutton $w.main.tclExpandedckb -text [_ "Verbose"] \
14722	-variable ::ProgramInfo(tcl,ExpandedP) -onvalue 1 -offvalue 0
14723    grid $w.main.tclCaseInsensitiveckb -row 0 -column 0 -sticky w
14724    grid $w.main.tclEmitMatchOnlyckb -row 1 -column 0 -sticky w
14725    grid $w.main.tclExpandedckb -row 2 -column 0 -sticky w
14726
14727    frame $w.cntls
14728    set msg [_ "Press this button to dismiss the popup."]
14729    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14730    pack $w.cntls.dis -side left -expand 0 -fill none
14731    pack $w.title $w.main $w.cntls -side top -expand 1 -fill both -pady 4 -padx 15 -ipadx 5
14732    balloonhelp_for $w $genmsg
14733    balloonhelp_for $w.title $genmsg
14734    balloonhelp_for $w.main $genmsg
14735    balloonhelp_for $w.cntls $genmsg
14736    set msg [_ "Press this button to dismiss the popup."]
14737    balloonhelp_for $w.cntls.dis $msg
14738    if { ([FeaturesUnSetP tcl $::InterfaceLocale] == 0) &&
14739	 ($::Features(CaseInsensitiveCLFlagBackrefP,tcl,$::InterfaceLocale) == 0)} {
14740	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
14741    } else {
14742	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
14743    }
14744    balloonhelp_for $w.main.tclCaseInsensitiveckb $msg;
14745    set msg [_ "Emit only the portion of the string that\nactually matched, not the whole line."]
14746    balloonhelp_for $w.main.tclEmitMatchOnlyckb $msg;
14747    set msg [_ "Ignore whitespace and comments within regular expression?"]
14748    balloonhelp_for $w.main.tclExpandedckb $msg;
14749}
14750
14751option add  *pcpTr.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14752option add  *pcpTr.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14753option add  *pcpTr.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14754option add  *pcpTr.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14755option add  *pcpTr.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14756option add  *pcpTr.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14757option add  *pcpTr.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14758
14759proc PopupTrControls {} {
14760    set w .pcpTr
14761    if {[winfo exist .pcpTr]} {
14762	if {![winfo ismapped .pcpTr]} {
14763	    wm deiconify .pcpTr;
14764	    raise .pcpTr
14765	} else {
14766	    wm iconify .pcpTr;
14767	}
14768	return ;
14769    }
14770    toplevel $w -borderwidth 4 -relief raised
14771    wm title $w Tr
14772    after idle {
14773	raise .pcpTr
14774	update idletasks
14775	set xmax [winfo screenwidth .pcpTr]
14776	set ymax [winfo screenheight .pcpTr]
14777	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpTr]))];
14778	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpTr]))];
14779	wm geometry .pcpTr "+$x0+$y0";
14780    }
14781    set genmsg [_ "Set command-line options for Tr."]
14782    set title [_ "Tr Settings"]
14783    if {[FeaturesUnSetP tr $::InterfaceLocale]} {
14784	append title \n[_ "(untested)"]
14785    }
14786    label $w.title -text $title  -font PopupTitleFont
14787    frame $w.main
14788    checkbutton $w.main.trComplementckb -text [_ "Complement Set One?"] \
14789	-variable trComplement -onvalue 1 -offvalue 0
14790    set ::trComplement $::ProgramInfo(tr,Complement)
14791
14792    checkbutton $w.main.trSqueezeckb -text [_ "Squeeze Repeats?"] \
14793	-variable trSqueeze -onvalue 1 -offvalue 0
14794    set ::trSqueeze $::ProgramInfo(tr,Squeeze)
14795
14796    checkbutton $w.main.trTruncateckb -text [_ "Truncate Set One to Length\nof Set Two?"] \
14797	-variable trTruncate -onvalue 1 -offvalue 0
14798    set ::trTruncate $::ProgramInfo(tr,Truncate)
14799
14800    grid $w.main.trComplementckb -row 0 -column 0 -sticky w -pady 3
14801    grid $w.main.trSqueezeckb    -row 1 -column 0 -sticky w -pady 3
14802    grid $w.main.trTruncateckb   -row 2 -column 0 -sticky w -pady 3
14803
14804    frame $w.cntls
14805    button $w.cntls.save -text [_ "Save"] -command SaveTrInfo
14806    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14807    pack $w.cntls.dis -side left -expand 0 -fill none
14808    pack $w.cntls.save -side right -expand 0 -fill none
14809    pack $w.title -side top -expand 1 -fill both -padx 8 -pady 4
14810    pack $w.main  -side top -expand 1 -fill both -padx 8 -pady 4
14811    pack $w.cntls -side top -expand 1 -fill both -padx 8 -pady {8 4}
14812    balloonhelp_for $w $genmsg
14813    balloonhelp_for $w.title $genmsg
14814    balloonhelp_for $w.main $genmsg
14815    balloonhelp_for $w.cntls $genmsg
14816    set msg [_ "Press this button to make the changes you have made take effect."]
14817    balloonhelp_for $w.cntls.save $msg
14818    set msg [_ "Press this button to dismiss the popup."]
14819    balloonhelp_for $w.cntls.dis $msg
14820    set msg [_ "Map the characters not in set one rather than \
14821 	those in set one?"]
14822    balloonhelp_for $w.main.trComplementckb $msg;
14823    set msg [_ "Replace sequences of more than one of the same character in\n\
14824 	set one with a single token."];
14825    balloonhelp_for $w.main.trSqueezeckb $msg;
14826    set msg [_ "Truncate the length of set one to the length of set two."];
14827    balloonhelp_for $w.main.trTruncateckb $msg;
14828}
14829
14830proc SaveTrInfo {} {
14831    if {$::TrComplement} {
14832	set ::ProgramInfo(Tr,Complement) 1
14833    } else {
14834	set ::ProgramInfo(Tr,Complement) 0
14835    }
14836    if {$::TrSqueeze} {
14837	set ::ProgramInfo(Tr,Squeeze) 1
14838    } else {
14839	set ::ProgramInfo(Tr,Squeeze) 0
14840    }
14841    if {$::TrTruncate} {
14842	set ::ProgramInfo(Tr,Truncate) 1
14843    } else {
14844	set ::ProgramInfo(Tr,Truncate) 0
14845    }
14846}
14847
14848option add  *pcpVim.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14849option add  *pcpVim.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14850option add  *pcpVim.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14851option add  *pcpVim.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14852option add  *pcpVim.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14853option add  *pcpVim.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14854option add  *pcpVim.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14855
14856proc PopupVimControls {} {
14857    set w .pcpVim
14858    if {[winfo exist .pcpVim]} {
14859	if {![winfo ismapped .pcpVim]} {
14860	    wm deiconify .pcpVim;
14861	    raise .pcpVim
14862	} else {
14863	    wm iconify .pcpVim;
14864	}
14865	return ;
14866    }
14867    toplevel $w -borderwidth 4 -relief raised
14868    wm title $w Vim
14869    after idle {
14870	raise .pcpVim
14871	update idletasks
14872	set xmax [winfo screenwidth .pcpVim]
14873	set ymax [winfo screenheight .pcpVim]
14874	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpVim]))];
14875	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpVim]))];
14876	wm geometry .pcpVim "+$x0+$y0";
14877    }
14878    set genmsg [_ "Set options for vim."]
14879    set title [_ "Vim Settings"]
14880    if {[FeaturesUnSetP vim $::InterfaceLocale]} {
14881	append title \n[_ "(untested)"]
14882    }
14883    label $w.title -text $title  -font PopupTitleFont
14884    frame $w.main
14885    checkbutton $w.main.vimCaseInsensitiveckb -text [_ "Case Insensitive"] \
14886	-variable ::ProgramInfo(vim,CaseInsensitiveP) -onvalue 1 -offvalue 0
14887    checkbutton $w.main.vimSmartCaseckb -text [_ "Smart Case"] \
14888	-variable ::ProgramInfo(vim,SmartCaseP) -onvalue 1 -offvalue 0
14889    checkbutton $w.main.vimSubstitutionGlobalckb -text [_ "Substitution Global"] \
14890	-variable ::ProgramInfo(vim,SubstitutionGlobalP) -onvalue 1 -offvalue 0
14891
14892    grid $w.main.vimCaseInsensitiveckb -row 0 -column 0 -sticky w -pady 2
14893    grid $w.main.vimSmartCaseckb  -row 1 -column 0 -sticky w -pady 2
14894    grid $w.main.vimSubstitutionGlobalckb -row 2 -column 0 -sticky w -pady 2
14895
14896    frame $w.cntls
14897    set msg [_ "Press this button to dismiss the popup."]
14898    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
14899    pack $w.cntls.dis -side right -expand 0 -fill none -padx 4
14900    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
14901    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
14902    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
14903    balloonhelp_for $w $genmsg
14904    balloonhelp_for $w.title $genmsg
14905    balloonhelp_for $w.main $genmsg
14906    balloonhelp_for $w.cntls $genmsg
14907    if { ([FeaturesUnSetP vim $::InterfaceLocale] == 0) &&
14908	 ($::Features(CaseInsensitiveCLFlagBackrefP,vim,$::InterfaceLocale) == 0)} {
14909	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
14910    } else {
14911	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
14912    }
14913    balloonhelp_for $w.main.vimCaseInsensitiveckb $msg;
14914    set msg [_ "Press this button to dismiss the popup."]
14915    balloonhelp_for $w.cntls.dis $msg
14916    set msg [_ "Make lower case in pattern match any case but\nupper case in pattern match only upper case?"]
14917    balloonhelp_for $w.main.vimSmartCaseckb $msg;
14918    set msg [_ "Apply substitutions to every match or just the first?"]
14919    balloonhelp_for $w.main.vimSubstitutionGlobalckb $msg;
14920}
14921
14922
14923option add  *pcpWMAgrep.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
14924option add  *pcpWMAgrep.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
14925option add  *pcpWMAgrep.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
14926option add  *pcpWMAgrep.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
14927option add  *pcpWMAgrep.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
14928option add  *pcpWMAgrep.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
14929option add  *pcpWMAgrep.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
14930set wmagrepErrLim 0
14931set wmagrepDelWei 0
14932set wmagrepInsWei 0
14933set wmagrepSubWei 0
14934
14935proc PopupWMAgrepControls {} {
14936    set w .pcpWMAgrep
14937    if {[winfo exist .pcpWMAgrep]} {
14938	if {![winfo ismapped .pcpWMAgrep]} {
14939	    wm deiconify .pcpWMAgrep;
14940	    raise .pcpWMAgrep
14941	} else {
14942	    wm iconify .pcpWMAgrep;
14943	}
14944	return ;
14945    }
14946    toplevel $w -borderwidth 4 -relief raised
14947    wm title $w WMAgrep
14948    after idle {
14949	raise .pcpWMAgrep
14950	update idletasks
14951	set xmax [winfo screenwidth .pcpWMAgrep]
14952	set ymax [winfo screenheight .pcpWMAgrep]
14953	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpWMAgrep]))];
14954	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpWMAgrep]))];
14955	wm geometry .pcpWMAgrep "+$x0+$y0";
14956    }
14957    if {![info exist ::ProgramInfo(wmagrep,TreWMAgrepP)]} {
14958	WhichWMAgrep;
14959    }
14960    if {$::ProgramInfo(wmagrep,TreWMAgrepP)} {
14961	set which "TRE WMAgrep"
14962	set genmsg \
14963	    [_ "Set command-line options for wmagrep."]
14964    } elseif {$::ProgramInfo(wmagrep,TreWMAgrepP) == 0} {
14965	set which "Wu-Manber agrep"
14966	set genmsg [_ "Set command-line options for wmagrep."]
14967    } else {
14968	ShowMessage [_ "WMAgrep is not available or is not in your path."]
14969	return ;
14970    }
14971    set title [format "%s\n%s" [_ "WMAgrep Settings"] $which]
14972    if {[FeaturesUnSetP wmagrep $::InterfaceLocale]} {
14973	append title \n[_ "(untested)"]
14974    }
14975    label $w.title -text $title  -font PopupTitleFont
14976    frame $w.main
14977    checkbutton $w.main.caseInsensitiveckb -text [_ "Case Insensitive?"] \
14978	-variable wmagrepCasIns -onvalue 1 -offvalue 0
14979    checkbutton $w.main.bestResultckb -text [_ "Near Misses?"] \
14980	-variable wmagrepBesRes -onvalue 1 -offvalue 0
14981
14982    frame $w.main.app -relief ridge -border 2
14983    label $w.main.app.tit -text [_ "Approximate Matching"] -relief raised -border 1
14984    iwidgets::spinint $w.main.app.tcost \
14985	-labelpos e \
14986	-width 3 \
14987	-range {0 100} \
14988	-wrap 0 \
14989	-labeltext "Total Cost" \
14990	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
14991	-increment {.pcpWMAgrep.main.app.tcost up} \
14992	-decrement {.pcpWMAgrep.main.app.tcost down} \
14993	-invalid {};# Prevents irritating flashing or ringing of bell
14994    iwidgets::spinint $w.main.app.icost \
14995	-labelpos e \
14996	-width 3 \
14997	-range {0 100} \
14998	-wrap 0 \
14999	-labeltext "Insertion Cost" \
15000	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
15001	-increment {.pcpWMAgrep.main.app.icost up} \
15002	-decrement {.pcpWMAgrep.main.app.icost down} \
15003	-invalid {};
15004    iwidgets::spinint $w.main.app.dcost \
15005	-labelpos e \
15006	-width 3 \
15007	-range {0 100} \
15008	-wrap 0 \
15009	-labeltext "Deletion Cost" \
15010	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
15011	-increment {.pcpWMAgrep.main.app.dcost up} \
15012	-decrement {.pcpWMAgrep.main.app.dcost down} \
15013	-invalid {};
15014    iwidgets::spinint $w.main.app.scost \
15015	-labelpos e \
15016	-width 3 \
15017	-range {0 100} \
15018	-wrap 0 \
15019	-labeltext "Substitution Cost" \
15020	-textbackground $::ColorSpecs(ProgramSpecificControls,Select) \
15021	-increment {.pcpWMAgrep.main.app.scost up} \
15022	-decrement {.pcpWMAgrep.main.app.scost down} \
15023	-invalid {};
15024    pack $w.main.app.tit -side top  -expand 0 -fill none -pady 5 -padx 4 -ipadx 4 -ipady 2
15025    pack $w.main.app.tcost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
15026    pack $w.main.app.icost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
15027    pack $w.main.app.dcost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
15028    pack $w.main.app.scost -side top -expand 1 -fill y -anchor w -padx 4  -pady 5
15029    $w.main.app.tcost clear
15030    $w.main.app.tcost insert 0 $::ProgramInfo(wmagrep,TotalCost);
15031    $w.main.app.icost clear
15032    $w.main.app.icost insert 0 $::ProgramInfo(wmagrep,InsertionCost);
15033    $w.main.app.dcost clear
15034    $w.main.app.dcost insert 0 $::ProgramInfo(wmagrep,DeletionCost);
15035    $w.main.app.scost clear
15036    $w.main.app.scost insert 0 $::ProgramInfo(wmagrep,SubstitutionCost);
15037    pack $w.main.app                      -side bottom -expand 1 -fill both \
15038	-padx 3 -pady 5
15039    pack $w.main.caseInsensitiveckb -side top    -expand 1 -fill y \
15040	-padx 3 -pady 3 -anchor w
15041    pack $w.main.bestResultckb      -side top    -expand 1 -fill y \
15042	-padx 3 -pady 3 -anchor w
15043
15044    frame $w.cntls
15045    button $w.cntls.save -text [_ "Save"] -command SaveWMAgrepInfo
15046    set msg [_ "Press this button to dismiss the popup."]
15047    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
15048    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
15049    pack $w.cntls.save -side right -expand 0 -fill none -padx 4
15050    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
15051    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
15052    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
15053
15054    balloonhelp_for $w $genmsg
15055    balloonhelp_for $w.title $genmsg
15056    balloonhelp_for $w.main $genmsg
15057    balloonhelp_for $w.cntls $genmsg
15058    set msg [_ "Press this button to make the changes you have made take effect."]
15059    balloonhelp_for $w.cntls.save $msg
15060    set msg [_ "Press this button to dismiss the popup."]
15061    balloonhelp_for $w.cntls.dis $msg
15062    if { ([FeaturesUnSetP wmagrep $::InterfaceLocale] == 0) &&
15063	 ($::Features(CaseInsensitiveCLFlagBackrefP,wmagrep,$::InterfaceLocale) == 0)} {
15064	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGNoBackRef)
15065    } else {
15066	set msg $::Messages(CommandLineCaseInsensitiveFlagMSGStd)
15067    }
15068    balloonhelp_for $w.main.caseInsensitiveckb $msg
15069    set msg [_ "How many error units should each deletion cost?"]
15070    balloonhelp_for $w.main.app.dcost $msg
15071    set msg [_ "How many error units should each insertion cost?"]
15072    balloonhelp_for $w.main.app.icost $msg
15073    set msg [_ "How many error units should each substitution cost?"]
15074    balloonhelp_for $w.main.app.scost $msg
15075    set msg [_ "In the absence of exact matches, produce the best results?"]
15076    balloonhelp_for $w.main.bestResultckb $msg
15077    set msg [_ "What is the maximum total error cost permitted?"]
15078    balloonhelp_for $w.main.app.tcost $msg
15079}
15080
15081proc SaveWMAgrepInfo {} {
15082    set ::ProgramInfo(wmagrep,TotalCost) [.pcpWMAgrep.main.app.tcost get]
15083    set ::ProgramInfo(wmagrep,InsertionCost) [.pcpWMAgrep.main.app.icost get]
15084    set ::ProgramInfo(wmagrep,DeletionCost) [.pcpWMAgrep.main.app.dcost get]
15085    set ::ProgramInfo(wmagrep,SubstitutionCost) [.pcpWMAgrep.main.app.scost get]
15086    if {$::wmagrepCasIns} {
15087	set ::ProgramInfo(wmagrep,CaseInsensitiveP) 1
15088    } else {
15089	set ::ProgramInfo(wmagrep,CaseInsensitiveP) 0
15090    }
15091    if {$::wmagrepBesRes} {
15092	set ::ProgramInfo(wmagrep,BestResults) 1
15093    } else {
15094	set ::ProgramInfo(wmagrep,BestResults) 0
15095    }
15096}
15097
15098option add  *pcpZsh.*Background $::ColorSpecs(ProgramSpecificControls,Background) 100;
15099option add  *pcpZsh.*Foreground $::ColorSpecs(ProgramSpecificControls,Foreground) 100;
15100option add  *pcpZsh.*activeBackground $::ColorSpecs(ProgramSpecificControls,ActiveBackground) 100;
15101option add  *pcpZsh.*activeForeground $::ColorSpecs(ProgramSpecificControls,ActiveForeground) 100;
15102option add  *pcpZsh.*selectColor $::ColorSpecs(ProgramSpecificControls,Select) 100;
15103option add  *pcpZsh.*Entry.Background $::ColorSpecs(ProgramSpecificControls,EntryBackground) 100;
15104option add  *pcpZsh.*Entry.disabledBackground $::ColorSpecs(ProgramSpecificControls,DisabledEntryBackground) 100;
15105
15106proc PopupZshControls {} {
15107    set w .pcpZsh
15108    if {[winfo exist .pcpZsh]} {
15109	if {![winfo ismapped .pcpZsh]} {
15110	    wm deiconify .pcpZsh;
15111	    raise .pcpZsh
15112	} else {
15113	    wm iconify .pcpZsh;
15114	}
15115	return ;
15116    }
15117    toplevel $w -borderwidth 4 -relief raised
15118    wm title $w Zsh
15119    after idle {
15120	raise .pcpZsh
15121	update idletasks
15122	set xmax [winfo screenwidth .pcpZsh]
15123	set ymax [winfo screenheight .pcpZsh]
15124	set x0 [expr int( rand() * double($xmax -[winfo reqwidth  .pcpZsh]))];
15125	set y0 [expr int( rand() * double($ymax -[winfo reqheight .pcpZsh]))];
15126	wm geometry .pcpZsh "+$x0+$y0";
15127    }
15128    set genmsg [_ "Set command-line options for Zsh."]
15129    set title [_ "Zsh Settings"]
15130    if {[FeaturesUnSetP zsh $::InterfaceLocale]} {
15131	append title \n[_ "(untested)"]
15132    }
15133    label $w.title -text $title  -font PopupTitleFont
15134    frame $w.main
15135    checkbutton $w.main.zshKornQuantifiersPckb -text [_ "Korn Shell Extensions"] \
15136	-variable ProgramInfo(zsh,KornQuantifiersP) -onvalue 1 -offvalue 0
15137    checkbutton $w.main.zshExtendedGlobPckb -text [_ "Extended Glob"] \
15138	-variable ProgramInfo(zsh,ExtendedGlobP) -onvalue 1 -offvalue 0
15139    grid $w.main.zshKornQuantifiersPckb -row 0 -column 0 -sticky w -pady 2
15140    grid $w.main.zshExtendedGlobPckb -row 2 -column 0 -sticky w -pady 2
15141
15142    frame $w.cntls
15143    button $w.cntls.dis -text [_ "Dismiss"] -command [list destroy $w]
15144    pack $w.cntls.dis -side left -expand 0 -fill none -padx 4
15145    pack $w.title -side top -expand 1 -fill both -pady 4     -padx 10
15146    pack $w.main  -side top -expand 1 -fill both -pady 4     -padx 10
15147    pack $w.cntls -side top -expand 1 -fill both -pady {8 4} -padx 10
15148    balloonhelp_for $w $genmsg
15149    balloonhelp_for $w.title $genmsg
15150    balloonhelp_for $w.main $genmsg
15151    balloonhelp_for $w.cntls $genmsg
15152    set msg [_ "Recognize Korn shell style quantifiers?"]
15153    balloonhelp_for $w.main.zshKornQuantifiersPckb $msg;
15154    set msg [_ "Press this button to dismiss the popup."]
15155    balloonhelp_for $w.cntls.dis $msg
15156    set msg [_ "Recognize extended glob notation?"]
15157    balloonhelp_for $w.main.zshExtendedGlobPckb $msg;
15158}
15159
15160proc PopupCurrentProgramControls {{InteractiveP 1}} {
15161    set FunctionName Popup${::Program}Controls;
15162    if {[info commands $FunctionName] != ""} {
15163	eval $FunctionName
15164    } else {
15165	if {$InteractiveP} {
15166	    ShowMessage [_ "The current program, $::Program, has no settable parameters."]
15167	}
15168    }
15169}
15170
15171proc UpdateProgramControlPanel {} {
15172    set PreviousPanel .${::PreviousProgram}cp
15173    if {[winfo exists $PreviousPanel]} {
15174	destroy $PreviousPanel;
15175	PopupCurrentProgramControls 0;
15176    }
15177}
15178
15179#Here are the procedures that execute the individual programs.
15180
15181proc ExecuteMatchAgrep {args} {
15182    global TestFile;
15183    global CommandFile;
15184
15185    set re [lindex $args 0]
15186
15187#This is a temporary kludge to prevent agrep from crashing redet during
15188#feature testing when it hits the test for integer ranges, or if for some
15189#other reason a user includes a "<" in an expression. The real solution
15190#is to pass the regular expression through a file so that exec doesn't see it
15191#or to fix Tcl.
15192
15193    if {[string first "<" $re] == 0} {
15194	dmsg "Encountered a \"<\" in regexp $re";
15195	return "";
15196    }
15197
15198#    set cl [list agrep -N]
15199    set cl [list agrep]
15200
15201    if {$::ProgramInfo(agrep,CaseInsensitiveP)} {
15202	lappend cl -i
15203    }
15204    if {$::ProgramInfo(agrep,BestResults)} {
15205	lappend cl -B
15206	lappend cl -y
15207    }
15208    if {$::ProgramInfo(agrep,TotalCost) > 0} {
15209	lappend cl -A$::ProgramInfo(agrep,TotalCost)
15210	lappend cl -D$::ProgramInfo(agrep,DeletionCost)
15211	lappend cl -I$::ProgramInfo(agrep,InsertionCost)
15212	lappend cl -S$::ProgramInfo(agrep,SubstitutionCost)
15213    }
15214
15215    if {[llength $args] > 1} {
15216	set extras [split [lindex $args 1]]
15217	foreach x $extras {
15218	    lappend cl $x;
15219	}
15220    }
15221    lappend cl $re;
15222    lappend cl $TestFile;
15223
15224    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
15225    set cl [linsert $cl 0 "tk_exec"]
15226    return [eval $cl]
15227}
15228
15229proc ExecuteMatchWMAgrep {args} {
15230    global TestFile;
15231    global CommandFile;
15232
15233    set re [lindex $args 0]
15234
15235#This is a temporary kludge to prevent agrep from crashing redet during
15236#feature testing when it hits the test for integer ranges, or if for some
15237#other reason a user includes a "<" in an expression. The real solution
15238#is to pass the regular expression through a file so that exec doesn't see it
15239#or to fix Tcl.
15240
15241    if {[string first "<" $re] == 0} {
15242	dmsg "Encountered a \"<\" in regexp $re";
15243	return "";
15244    }
15245
15246#    set cl [list agrep -N]
15247    set cl [list wmagrep]
15248
15249    if {$::ProgramInfo(wmagrep,CaseInsensitiveP)} {
15250	lappend cl -i
15251    }
15252    if {$::ProgramInfo(wmagrep,BestResults)} {
15253	lappend cl -B
15254	lappend cl -y
15255    }
15256    if {$::ProgramInfo(wmagrep,TotalCost) > 0} {
15257	lappend cl -A$::ProgramInfo(wmagrep,TotalCost)
15258	lappend cl -D$::ProgramInfo(wmagrep,DeletionCost)
15259	lappend cl -I$::ProgramInfo(wmagrep,InsertionCost)
15260	lappend cl -S$::ProgramInfo(wmagrep,SubstitutionCost)
15261    }
15262
15263    if {[llength $args] > 1} {
15264	set extras [split [lindex $args 1]]
15265	foreach x $extras {
15266	    lappend cl $x;
15267	}
15268    }
15269    lappend cl $re;
15270    lappend cl $TestFile;
15271
15272    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
15273    set cl [linsert $cl 0 "tk_exec"]
15274    return [eval $cl]
15275}
15276
15277proc CheckRegexpAvailabilityArena {} {
15278    global CommandFile;
15279
15280    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15281	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15282	error "";
15283    }
15284    puts $CommandHandle "if (!pcre_supported())\{exit(2)\}\nexit(0);";
15285    close $CommandHandle;
15286    set cl [list arena]
15287    lappend cl $CommandFile
15288    set cl [linsert $cl 0 "tk_exec"]
15289    if {[catch {eval $cl}] == 0} {
15290	return 1;
15291    } else {
15292	return 0;
15293    }
15294}
15295
15296proc ExecuteMatchArena {re} {
15297    global TestFile;
15298    global CommandFile;
15299
15300    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15301	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15302	error "";
15303    }
15304    set cmd "restr=\"$re\";\nopts=0";
15305    if {$::ProgramInfo(arena,CaseInsensitiveP)} {append cmd "|PCRE_CASELESS"}
15306    if {$::ProgramInfo(arena,VerboseP)} {append cmd "|PCRE_EXTENDED"}
15307    append cmd ";
15308re = pcre_compile(restr,opts);
15309if(is_void(re)) exit(2);\n
15310while (!feof(stdin)) \{
15311  line=fgets(stdin);
15312  if(is_void(line)) break;
15313  if (pcre_match(re,line,0)) print(line);
15314\}
15315exit(0);\n"
15316    puts $CommandHandle $cmd;
15317    close $CommandHandle;
15318
15319    set cl [list arena]
15320    lappend cl $CommandFile
15321    lappend cl "<"
15322    lappend cl $TestFile
15323    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15324    set cl [linsert $cl 0 "tk_exec"]
15325    return [eval $cl]
15326}
15327
15328proc ExecuteMatchAwk {re} {
15329    global TestFile;
15330    global CommandFile;
15331
15332    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15333	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15334	error "";
15335    }
15336    set cmd "\$0 ~ /$re/ {print \$0}"
15337    puts $CommandHandle $cmd;
15338    close $CommandHandle;
15339
15340    set cl [list awk]
15341    lappend cl "-f"
15342    lappend cl $CommandFile
15343    lappend cl "<"
15344    lappend cl $TestFile
15345    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15346    set cl [linsert $cl 0 "tk_exec"]
15347    return [eval $cl]
15348}
15349
15350proc ExecuteSubAwk {re sub} {
15351    global TestFile;
15352    global CommandFile;
15353
15354    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15355	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15356	error "";
15357    }
15358    set cmd [format "\{print gensub(/%s/,\"%s\",1)\}" $re $sub];
15359    puts $CommandHandle $cmd;
15360    close $CommandHandle;
15361
15362    set cl [list awk]
15363    lappend cl "-f"
15364    lappend cl $CommandFile
15365    lappend cl "<"
15366    lappend cl $TestFile
15367    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15368    set cl [linsert $cl 0 "tk_exec"]
15369    return [eval $cl]
15370}
15371
15372proc ExecuteMatchBash {re} {
15373    global ShellItemLimit;
15374    global TestFile;
15375    global TempGlobDir;
15376    global CommandFile;
15377
15378    #Read test data back in, storing in array, one line at a time;
15379    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
15380	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
15381	error "ExecuteMatchBash";
15382    }
15383    set LineCount 0
15384    while { [gets $TempDataHandle line] > 0} {
15385	incr LineCount;
15386	set TestLines($LineCount) $line
15387    }
15388    close $TempDataHandle;
15389
15390    if {$LineCount >= $ShellItemLimit} {
15391	ShowMessage [format [_ "%1\$d items exceeds limit of %2\$d  for shells."] $LineCount $ShellItemLimit]
15392	#Delay so that user will get a chance to read above message.
15393	after 1000;
15394	error [format "ExecuteMatchBash: %s" [_ "item limit exceeded"]];
15395    }
15396
15397    #Clean out this directory if it already exists.
15398    file delete -force $TempGlobDir;
15399    file mkdir $TempGlobDir;
15400    for {set i 1} {$i <= $LineCount} {incr i} {
15401	set NewFile [file join $TempGlobDir $TestLines($i)];
15402	if {[catch {open  $NewFile "w"} TempDataHandle] != 0} {
15403	    WriteJournal [format [_ "Unable to open file %s."] $NewFile];
15404	    continue ;
15405	} else {
15406	    puts $TempDataHandle "x";
15407	    close $TempDataHandle;
15408	}
15409    }
15410    set cl [list bash]
15411    if {$::ProgramInfo(bash,ExtendedP)} {
15412	lappend cl "-O"
15413	lappend cl "extglob"
15414    }
15415    if {$::ProgramInfo(bash,CaseInsensitiveGlobP)} {
15416	lappend cl "-O"
15417	lappend cl "nocaseglob"
15418    }
15419    if {$::ProgramInfo(bash,CaseInsensitiveMatchP)} {
15420	lappend cl "-O"
15421	lappend cl "nocasematch"
15422    }
15423    lappend cl "-s"
15424    lappend cl "<"
15425    lappend cl $CommandFile
15426
15427    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15428	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15429	error "";
15430    }
15431    regsub -all ";" $re "\\;" qre
15432    set cmd "cd $TempGlobDir;ls $qre"
15433    puts $CommandHandle $cmd;
15434    close $CommandHandle;
15435
15436    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15437    set cl [linsert $cl 0 "tk_exec"]
15438    return [eval $cl]
15439}
15440
15441proc ExecuteMatchBoo {re} {
15442    global TestFile;
15443    global CommandFile;
15444
15445    set cl [list boo]
15446
15447    lappend cl "-f"
15448    lappend cl $CommandFile
15449    lappend cl "<"
15450    lappend cl $TestFile
15451
15452    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15453	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15454	error "";
15455    }
15456
15457set cmd "
15458import System.IO
15459try:
15460	cre = @/$re/
15461	using input = StreamReader($TestFile):
15462	      for line in input:
15463	      	  line = line.Trim()
15464		    	  if cre.Match(line).Success:
15465			  	        print line
15466except e:
15467       print \"Error\", e.ToString()
15468";
15469
15470    puts $CommandHandle $cmd
15471    close $CommandHandle;
15472
15473    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
15474    set cl [linsert $cl 0 "tk_exec"]
15475    return [eval $cl];
15476}
15477
15478proc ExecuteMatchBusyBoxEgrep {re} {
15479    global TestFile;
15480    global CommandFile;
15481
15482    set cl [list busybox grep -E]
15483
15484    if {$::ProgramInfo(BusyBoxEgrep,CaseInsensitiveP)} {
15485	lappend cl -i
15486    }
15487    if {$::ProgramInfo(BusyBoxEgrep,Complement)} {
15488	lappend cl -v
15489    }
15490    lappend cl "-f"
15491    lappend cl $CommandFile
15492    lappend cl "<"
15493    lappend cl $TestFile
15494
15495    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15496	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15497	error "";
15498    }
15499    puts $CommandHandle $re
15500    close $CommandHandle;
15501
15502    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
15503    set cl [linsert $cl 0 "tk_exec"]
15504    return [eval $cl];
15505}
15506
15507proc CQuote {s} {
15508    return [string map {"\\" "\\\\" "\#" "\\\\#" "\n" "\\n" \" \\\"} $s]
15509}
15510
15511proc ExecuteMatchC {re} {
15512    global TestFile;
15513    global CommandFile;
15514    global CSourceFile;
15515
15516    set qre [CQuote $re]
15517
15518    #Write the C program out to a file
15519    if {[catch {open $CSourceFile "w"} CSourceHandle ] != 0} {
15520	ShowMessage [format [_ "Unable to open file %s."] $CSourceFile];
15521	error "";
15522    }
15523    set cmd "\#include <stdlib.h>
15524\#include <stdio.h>
15525\#include <string.h>
15526\#include <regex.h>
15527";
15528
15529set cmdPart2 "\#define IBUFSIZE  10240
15530\#define REBUFSIZE 10240
15531static char ibuf\[IBUFSIZE+1\];
15532static char re\[REBUFSIZE+1\];
15533int main(int ac, char **av) {
15534  FILE *refp;
15535  regex_t rx;
15536  int li;
15537  if (regcomp(&rx,\"$qre\",REG_NEWLINE|REG_NOSUB|REG_EXTENDED) != 0) exit(3);
15538  while (fgets(ibuf,IBUFSIZE,stdin) != NULL)  {
15539      li = strlen(ibuf) -1;
15540      if(ibuf\[li\] == \'\\n\') ibuf\[li\] = \'\\0\';
15541      if(regexec(&rx,ibuf,0,NULL,0) == 0) puts(ibuf);
15542  }
15543  exit(0);
15544}";
15545
15546    append cmd "\#ifndef _POSIX_C_SOURCE
15547\#define _POSIX_C_SOURCE
15548\#endif
15549";# Force POSIX regexps even if gnu libc
15550
15551    append cmd $cmdPart2
15552    puts $CSourceHandle $cmd;
15553    close $CSourceHandle;
15554
15555    #Compile the C program
15556    if {[catch {exec cc -o $CommandFile $CSourceFile}] != 0} {
15557	ShowMessage [format [_ "Unable to compile C program with regexp %s (%s)."] $re $qre]
15558	error "";
15559    }
15560
15561    #Execute the C program
15562    lappend cl $CommandFile
15563    lappend cl "<"
15564    lappend cl $TestFile
15565    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15566    set cl [linsert $cl 0 "tk_exec"]
15567    return [eval $cl]
15568}
15569
15570proc ExecuteMatchCgrep {args} {
15571    global TestFile;
15572    global CommandFile;
15573
15574    set re [lindex $args 0]
15575    set cl [list cgrep]
15576
15577    if {$::ProgramInfo(cgrep,ExtendedP)} {
15578	lappend cl -E;
15579    }
15580    if {$::ProgramInfo(cgrep,CaseInsensitiveP)} {
15581	lappend cl -i
15582    }
15583    if {$::ProgramInfo(cgrep,Complement)} {
15584	lappend cl -v
15585    }
15586    lappend cl -A
15587    lappend cl $::ProgramInfo(cgrep,TotalCost);
15588    lappend cl +C
15589    lappend cl $::ProgramInfo(cgrep,InsertionCost);
15590    lappend cl -C
15591    lappend cl $::ProgramInfo(cgrep,DeletionCost);
15592    lappend cl +-C
15593    lappend cl $::ProgramInfo(cgrep,SubstitutionCost);
15594    if {[llength $args] > 1} {
15595	set extras [split [lindex $args 1]]
15596	foreach x $extras {
15597	    lappend cl $x;
15598	}
15599    }
15600    lappend cl -f
15601    lappend cl $CommandFile
15602    lappend cl "<"
15603    lappend cl $TestFile
15604
15605    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15606	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15607	error "";
15608    }
15609    set cmd $re;
15610    puts $CommandHandle $cmd;
15611    close $CommandHandle;
15612
15613    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15614    set cl [linsert $cl 0 "tk_exec"]
15615    return [eval $cl];
15616}
15617
15618proc ExecuteMatchEd {re} {
15619    global TestFile;
15620    global CommandFile;
15621
15622    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15623	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15624	error "";
15625    }
15626    set cmd "g/$re/";
15627    puts $CommandHandle $cmd;
15628    close $CommandHandle;
15629
15630    set cl [list ed]
15631    lappend cl "-s"
15632    lappend cl $TestFile
15633    lappend cl "<"
15634    lappend cl $CommandFile
15635    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
15636    set cl [linsert $cl 0 "tk_exec"]
15637    return [eval $cl]
15638}
15639
15640proc ExecuteSubEd {re sub} {
15641    global TestFile;
15642    global CommandFile;
15643
15644    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15645	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15646	error "";
15647    }
15648    set cmd "1,\$s/$re/$sub/g\n1,\$p";
15649    puts $CommandHandle $cmd;
15650    close $CommandHandle;
15651
15652    set cl [list ed]
15653    lappend cl "-s"
15654    lappend cl $TestFile
15655    lappend cl "<"
15656    lappend cl $CommandFile
15657    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15658    set cl [linsert $cl 0 "tk_exec"]
15659    return [eval $cl]
15660}
15661
15662proc ExecuteMatchEgrep {re} {
15663    global TestFile;
15664    global CommandFile;
15665
15666    set cl [list egrep]
15667
15668    if {$::ProgramInfo(egrep,CaseInsensitiveP)} {
15669	lappend cl -i
15670    }
15671    if {$::ProgramInfo(egrep,EmitMatchOnly)} {
15672	lappend cl -o
15673    }
15674    if {$::ProgramInfo(egrep,Complement)} {
15675	lappend cl -v
15676    }
15677    lappend cl "-f"
15678    lappend cl $CommandFile
15679    lappend cl "<"
15680    lappend cl $TestFile
15681
15682    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15683	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15684	error "";
15685    }
15686    puts $CommandHandle $re
15687    close $CommandHandle;
15688
15689    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
15690    set cl [linsert $cl 0 "tk_exec"]
15691    return [eval $cl];
15692}
15693
15694proc ExecuteMatchGlark {re} {
15695    global TestFile;
15696    global CommandFile;
15697
15698    set cl [list glark]
15699    lappend cl -h;			# Suppress listing of names of matching files
15700    lappend cl -q;			# Suppress warnings
15701    lappend cl -U;			# Suppress highlighting
15702    lappend cl -N;			# Suppress linenumbers
15703    if {$::ProgramInfo(glark,CaseInsensitiveP)} {
15704	lappend cl -i
15705    }
15706    if {$::ProgramInfo(glark,EmitMatchOnly)} {
15707	lappend cl -y;			# Output only the matching region, not the entire line
15708    }
15709    if {$::ProgramInfo(glark,Complement)} {
15710	lappend cl -v;			# Output only the lines that do not match.
15711    }
15712    if {$::ProgramInfo(glark,MatchEntireLine)} {
15713	lappend cl -x;			# Output only the lines that match the entire line.
15714    }
15715
15716    lappend cl "-f"
15717    lappend cl $CommandFile
15718    lappend cl "<"
15719    lappend cl $TestFile
15720
15721    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15722	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15723	error "";
15724    }
15725    puts $CommandHandle $re
15726    close $CommandHandle;
15727    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
15728    set cl [linsert $cl 0 "tk_exec"]
15729    return [eval $cl];
15730}
15731
15732proc ExecuteMatchGrep {re} {
15733    global TestFile;
15734    global CommandFile;
15735
15736    set cl [list grep]
15737
15738    set Which $::ProgramInfo(grep,Notation);
15739    switch -exact -- $Which {
15740	Basic  {lappend cl "-G"}
15741	Extended {lappend cl "-E"}
15742	Perl {lappend cl "-P"}
15743    }
15744    if {$::ProgramInfo(grep,CaseInsensitiveP)} {
15745	lappend cl -i
15746    }
15747    if {$::ProgramInfo(grep,EmitMatchOnly)} {
15748	lappend cl -o
15749    }
15750    if {$::ProgramInfo(grep,Complement)} {
15751	lappend cl -v
15752    }
15753    lappend cl "-f"
15754    lappend cl $CommandFile
15755    lappend cl "<"
15756    lappend cl $TestFile
15757
15758    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15759	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15760	error "";
15761    }
15762    puts $CommandHandle $re
15763    close $CommandHandle;
15764
15765    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
15766    set cl [linsert $cl 0 "tk_exec"]
15767    return [eval $cl];
15768}
15769
15770
15771proc ExecuteMatchEmacs {re} {
15772    global TestFile;
15773    global CommandFile;
15774    global EmacsOutputFile;
15775    global EmacsWrapper;
15776
15777    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15778	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15779	error "";
15780    }
15781    set cmd [format "(defun append-to-buffer-with-nl (buffer start end)\n\"Append to specified buffer the text between start and end.\"\n\t(let ((oldbuf (current-buffer)))\n\t(save-current-buffer\n\t\t(set-buffer (get-buffer-create buffer))\n\t\t(insert-buffer-substring oldbuf start end)\n\t\t(insert \"\\n\"))))\n(defun print-regexp-matches (pattern)\n\t\"Print the lines matching a regexp\"\n(set-variable 'case-fold-search nil)\n\t(goto-char (point-min))\n\t(while (re-search-forward pattern nil t 1)\n\t\t(append-to-buffer-with-nl \"output\" (line-beginning-position) (line-end-position)))\n(set-buffer (get-buffer-create \"output\"))\n(write-file \"%s\"))\n(print-regexp-matches \"%s\")\n" $EmacsOutputFile $re];
15782    puts $CommandHandle $cmd;
15783    close $CommandHandle;
15784
15785    set cl [list bash]
15786    lappend cl $EmacsWrapper
15787    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15788    set cl [linsert $cl 0 "tk_exec"]
15789    return [eval $cl]
15790}
15791
15792proc ExecuteSubEmacs {re sub} {
15793    global TestFile;
15794    global CommandFile;
15795    global EmacsOutputFile;
15796    global EmacsWrapper;
15797
15798    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15799	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15800	error "";
15801    }
15802    if {$::ProgramInfo(emacs,FoldCaseMatchP)} {
15803	set MatchCaseFlag "t";
15804    } else {
15805	set MatchCaseFlag "nil";
15806    }
15807    if {$::ProgramInfo(emacs,FoldCaseReplaceP)} {
15808	set ReplaceCaseFlag "t";
15809    } else {
15810	set ReplaceCaseFlag "nil";
15811    }
15812    set cmd [format \
15813		 "(set-variable 'case-fold-search %s)\n(goto-char (point-min))\n(while (re-search-forward \"%s\" nil t)\n\t(replace-match \"%s\" %s nil))\n(write-file \"%s\")\n" \
15814		 $MatchCaseFlag $re $sub $ReplaceCaseFlag $EmacsOutputFile];
15815    puts $CommandHandle $cmd;
15816    close $CommandHandle;
15817    set cl [list bash]; #This is correct. We need a shell.
15818    lappend cl $EmacsWrapper
15819    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15820    set cl [linsert $cl 0 "tk_exec"]
15821    return [eval $cl]
15822}
15823
15824proc ExecuteMatchEuphoria {re} {
15825    global TestFile;
15826    global CommandFile;
15827
15828    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15829	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15830	error "";
15831    }
15832    set cmd "include wildcard.e\nobject line\nwhile 1 do\n\tline = gets(0)\n\tif atom(line) then\n\t\texit\n\tend if\n\tline = line\[1..length(line)-1\]\n\tif wildcard_match(\"$re\",line) then\n\t\tputs(1,line)\n\t\tputs(1,'\\n')\n\tend if\nend while\n";
15833    puts $CommandHandle $cmd
15834    close $CommandHandle;
15835
15836    set cl [list exu]
15837    lappend cl $CommandFile
15838    lappend cl "<"
15839    lappend cl $TestFile
15840    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15841    set cl [linsert $cl 0 "tk_exec"]
15842    return [eval $cl]
15843}
15844
15845proc ExecuteMatchExpr {re} {
15846    global TestFile;
15847
15848    #Read test data back in, storing in list, one line at a time;
15849    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
15850	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
15851	error "ExecuteMatchExpr";
15852    }
15853    set TestLines [list]
15854    while { [gets $TempDataHandle line] > 0} {
15855	lappend TestLines $line
15856    }
15857    close $TempDataHandle;
15858
15859    set Result [list]
15860    if {[string match $::ExecutionFlag Normal] == 0} {return "N/A"}
15861    foreach dl $TestLines {
15862	set cl [list tk_exec]
15863	lappend cl expr
15864	lappend cl "$dl"
15865	lappend cl :
15866	lappend cl "$re"
15867	catch {eval $cl} res
15868	if {$res > 0} {
15869	    lappend Result $dl
15870	}
15871    }
15872    return [join $Result "\n"];
15873}
15874
15875proc ExecuteMatchFgrep {re} {
15876    global TestFile;
15877    global CommandFile;
15878
15879    set cl fgrep
15880    if {$::ProgramInfo(fgrep,CaseInsensitiveP)} {
15881	lappend cl "-i"
15882    }
15883    if {$::ProgramInfo(fgrep,EmitMatchOnly)} {
15884	lappend cl "-o"
15885    }
15886    if {$::ProgramInfo(fgrep,Complement)} {
15887	lappend cl "-v"
15888    }
15889    lappend cl "-f"
15890    lappend cl $CommandFile
15891    lappend cl "<"
15892    lappend cl $TestFile
15893
15894    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15895	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15896	error "";
15897    }
15898    puts $CommandHandle $re
15899    close $CommandHandle;
15900
15901    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
15902    set cl [linsert $cl 0 "tk_exec"]
15903    return [eval $cl];
15904}
15905
15906proc ExecuteMatchFish {re} {
15907    global ShellItemLimit;
15908    global TempGlobDir;
15909    global TestFile;
15910    global CommandFile;
15911
15912    #Read test data back in, storing in array, one line at a time;
15913    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
15914	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
15915	error "ExecuteMatchFish";
15916    }
15917    set LineCount 0;
15918    while { [gets $TempDataHandle line] > 0} {
15919	incr LineCount
15920	set TestLines($LineCount) $line
15921    }
15922    close $TempDataHandle;
15923
15924    if {$LineCount > $ShellItemLimit} {
15925	ShowMessage [format [_ "%1\$d items exceeds limit of %2\$d  for shells."] $LineCount $ShellItemLimit];
15926	puts [format "%d items exceeds limit of %d  for shells." $LineCount $ShellItemLimit]
15927	#Delay so that user will get a chance to read above message.
15928	after 5000;
15929	error [format "ExecuteMatchFish: %s" [_ "item limit exceeded"]];
15930    }
15931
15932    #Clean out this directory if it already exists. Then create files.
15933    file delete -force $TempGlobDir;
15934    file mkdir $TempGlobDir;
15935    for {set i 1} {$i <= $LineCount} {incr i} {
15936	set NewFile [file join $TempGlobDir $TestLines($i)];
15937	if {[catch {open  $NewFile "w"} TempDataHandle] != 0} {
15938	    WriteJournal [format [_ "Unable to open file %s."] $NewFile];
15939	    continue ;
15940	} else {
15941	    puts $TempDataHandle "x";
15942	    close $TempDataHandle;
15943	}
15944    }
15945
15946    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15947	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15948	error "";
15949    }
15950    set cmd "cd $TempGlobDir\nls -1 $re"
15951    puts $CommandHandle $cmd
15952    close $CommandHandle;
15953
15954    set cl [list fish < $CommandFile]
15955    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
15956    set cl [linsert $cl 0 "tk_exec"]
15957    return  [eval $cl]
15958}
15959
15960proc ExecuteMatchFrink {re} {
15961    global TestFile;
15962    global CommandFile;
15963
15964    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15965	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15966	error "";
15967    }
15968    set cmd "for line = lines\[\"file:$TestFile\",\"UTF-8\"\]\n\tif (line =~ %r/$re/)\n\t\tprintln\[line\]\n"
15969    puts $CommandHandle $cmd
15970    close $CommandHandle;
15971
15972    set cl [list java]
15973    lappend cl -cp
15974    lappend cl frink.jar
15975    lappend cl frink.parser.Frink
15976 #   lappend cl --nounits
15977    lappend cl $CommandFile
15978    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
15979    set cl [linsert $cl 0 "tk_exec"]
15980    return [eval $cl]
15981}
15982
15983proc ExecuteSubFrink {re se} {
15984    global TestFile;
15985    global CommandFile;
15986
15987    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
15988	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
15989	error "";
15990    }
15991    set cmd "for line = lines\[\"file:$TestFile\",\"UTF-8\"\]\n{\n\tline =~ %s/$re/$se/g\n\tprintln\[line\]\n}\n"
15992    puts $CommandHandle $cmd
15993    close $CommandHandle;
15994
15995    set cl [list java]
15996    lappend cl -cp
15997    lappend cl frink.jar
15998    lappend cl frink.parser.Frink
15999#    lappend cl --nounits
16000    lappend cl $CommandFile
16001    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16002    set cl [linsert $cl 0 "tk_exec"]
16003    return [eval $cl]
16004}
16005
16006
16007proc ExecuteMatchGawk {re} {
16008    global TestFile;
16009    global CommandFile;
16010
16011    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16012	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16013	error "";
16014    }
16015    set cmd "\$0 ~ /$re/ {print \$0}";
16016    puts $CommandHandle $cmd;
16017    close $CommandHandle;
16018    set cl [list gawk]
16019    set Which $::ProgramInfo(gawk,Notation);
16020    switch -exact -- $Which {
16021	Traditional  {lappend cl "--traditional"}
16022	Posix {lappend cl "--posix"}
16023    }
16024    if {$::ProgramInfo(gawk,CaseInsensitiveP)} {
16025	lappend cl -v
16026	lappend cl IGNORECASE=1
16027    }
16028    if {$::ProgramInfo(gawk,IntervalExpressions)} {
16029	lappend cl --re-interval
16030    }
16031    lappend cl "-f"
16032    lappend cl "$CommandFile"
16033    lappend cl "<"
16034    lappend cl $TestFile
16035    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16036    set cl [linsert $cl 0 "tk_exec"]
16037    return  [eval $cl];
16038
16039}
16040
16041proc ExecuteSubGawk {re sub} {
16042    global TestFile;
16043    global CommandFile;
16044
16045    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16046	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16047	error "";
16048    }
16049    set cmd [format "\{print gensub(/%s/,\"%s\",1)\}" $re $sub];
16050    puts $CommandHandle $cmd;
16051    close $CommandHandle;
16052
16053    set cl [list gawk]
16054    set Which $::ProgramInfo(gawk,Notation);
16055    switch -exact -- $Which {
16056	Traditional  {lappend cl "--traditional"}
16057	Posix {lappend cl "--posix"}
16058    }
16059    if {$::ProgramInfo(gawk,IntervalExpressions)} {
16060	lappend cl "--re-interval"
16061    }
16062    if {$::ProgramInfo(gawk,CaseInsensitiveP)} {
16063	lappend cl -v
16064	lappend cl IGNORECASE=1
16065    }
16066    lappend cl "-f"
16067    lappend cl "$CommandFile"
16068    lappend cl "<"
16069    lappend cl $TestFile
16070    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16071    set cl [linsert $cl 0 "tk_exec"]
16072    return  [eval $cl];
16073}
16074
16075proc ExecuteMatchGroovy {re} {
16076    global TestFile;
16077    global CommandFile;
16078
16079    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16080	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16081	error "";
16082    }
16083    set cmd "lines = System.in.readLines()
16084for (line in lines) {
16085    if ( line ==~ /$re/ ) println line
16086}"
16087    puts $CommandHandle $cmd
16088    close $CommandHandle;
16089
16090    set cl [list groovy]
16091    lappend cl $CommandFile
16092    lappend cl "<"
16093    lappend cl $TestFile
16094    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16095    set cl [linsert $cl 0 "tk_exec"]
16096    return [eval $cl]
16097}
16098
16099proc ExecuteMatchGuile {re} {
16100    global TestFile;
16101    global CommandFile;
16102
16103    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16104	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16105	error "";
16106    }
16107    set cmd "(use-modules (ice-9 rdelim))\n(define line \#f)\n(define re\n\t  (catch 'regular-expression-syntax\n\t\t(lambda () (make-regexp \"$re\"))\n\t\t(lambda (key . args)\n\t\t\t(begin\n\t\t\t\t(write-line \"regular expression syntax error\" (current-error-port))\n\t\t\t\t(quit 2)))))\n(while (begin (set! line (read-line)) (not (eof-object? line)))\n\t(if (regexp-exec re line)\n\t\t(write-line line)))\n";
16108    puts $CommandHandle $cmd;
16109    close $CommandHandle;
16110    set cl [list guile];
16111    lappend cl -s
16112    lappend cl $CommandFile
16113    lappend cl "<"
16114    lappend cl $TestFile;
16115
16116    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16117    set cl [linsert $cl 0 "tk_exec"]
16118    return  [eval $cl];
16119}
16120
16121proc ExecuteSubGuile {re se} {
16122    global TestFile;
16123    global CommandFile;
16124
16125    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16126	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16127	error "";
16128    }
16129    set cmd "(use-modules (ice-9 rdelim) (ice-9 regex))\n(define line \#f)\n(while (begin (set! line (read-line)) (not (eof-object? line)))\n\t(write-line\n\t (catch 'regular-expression-syntax\n\t\t(lambda () (regexp-substitute/global \#f \"$re\" line $se))\n\t\t\t(lambda (key . args)\n\t\t\t\t (begin\n\t\t\t\t\t(write-line \"regular expression syntax error\" (current-error-port))\n\t\t\t\t\t\t(quit 2))))))";
16130    puts $CommandHandle $cmd;
16131    close $CommandHandle;
16132    set cl [list guile];
16133    lappend cl -s
16134    lappend cl $CommandFile
16135    lappend cl "<"
16136    lappend cl $TestFile;
16137
16138    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16139    set cl [linsert $cl 0 "tk_exec"]
16140    return  [eval $cl];
16141}
16142
16143proc ExecuteMatchIci {re} {
16144    global TestFile;
16145    global CommandFile;
16146
16147    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16148	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16149	error "";
16150    }
16151    set flags 0
16152    if {$::ProgramInfo(ici,CaseInsensitiveP)} {
16153	set flags [expr $flags | 0x01]
16154    }
16155    if {$::ProgramInfo(ici,VerboseP)} {
16156	set flags [expr $flags | 0x08]
16157    }
16158    set cmd "rx = regexp(\"$re\",$flags);
16159while (line = getline(stdin)) \{
16160     if (line \~ rx) \{
16161       printf(\"%s\\n\",line);
16162     \}
16163\}
16164";
16165    puts $CommandHandle $cmd;
16166    close $CommandHandle;
16167    set cl [list ici]
16168    lappend cl $CommandFile
16169    lappend cl "<"
16170    lappend cl $TestFile
16171    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16172    set cl [linsert $cl 0 "tk_exec"]
16173    return [eval $cl]
16174}
16175
16176proc ExecuteMatchIcon {re} {
16177    global TestFile;
16178    global CommandFile;
16179
16180    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16181	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16182	error "";
16183    }
16184    set cmd "link regexp\nprocedure main()\n\tlocal line, rep\n\tif (rep:=RePat(\"$re\")) then {\n\t\twhile (line := read()) do\n\t\t\tif ReFind(rep,line) then write(line)\n\t\treturn 0\n\t}\n\treturn 1\nend\n";
16185    puts $CommandHandle $cmd;
16186    close $CommandHandle;
16187
16188    set cl [list icon]
16189    lappend cl $CommandFile
16190    lappend cl "<"
16191    lappend cl $TestFile
16192    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16193    set cl [linsert $cl 0 "tk_exec"]
16194    return [eval $cl]
16195}
16196
16197proc ExecuteMatchJava {re} {
16198    global TestFile;
16199    global TempDir;
16200    global FeatureTestLogHandle;
16201    global TestingFeaturesP;
16202    global CommandFile;
16203
16204    set FLAGS 0;
16205    if {$::ProgramInfo(java,CanonEQ)} {
16206	append FLAGS {|Pattern.CANON_EQ}
16207    }
16208    if {$::ProgramInfo(java,CaseInsensitiveP)} {
16209	append FLAGS {|Pattern.CASE_INSENSITIVE}
16210    } elseif {$::ProgramInfo(java,UnicodeCase)} {
16211	append FLAGS {|Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE}
16212    }
16213
16214    set cmd \
16215	"import java.io.*;\nimport java.util.regex.*;\npublic class $::JavaMatchClassName {\n\tpublic static void main(String\[\] args) {\n\t\tString thisLine;\n\t\tString regexp = (args\[0\]).substring(1);\n\t\ttry {\n\t\t\tPattern p = Pattern.compile(regexp,$FLAGS);\n\t\t\tMatcher m;\n\t\t\ttry {\n\t\t\t\tBufferedReader in = new BufferedReader(new InputStreamReader(System.in));\n\t\t\t\twhile ( (thisLine = in.readLine()) != null) {\n\t\t\t\t\tm = p.matcher(thisLine);\n\t\t\t\t\tif(m.matches()) System.out.println(thisLine);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (IOException e) {\n\t\t\t\tSystem.err.println(\"Error: \" + e);\n\t\t\t\tSystem.exit(2);\n\t\t\t}\n\t\t\tSystem.exit(0);\n\t\t}\n\t\tcatch (PatternSyntaxException e) {\n\t\t\tSystem.err.println(\"Error: \" + e);\n\t\t\tSystem.exit(1);\n\t\t}\n\t}\n}\n";
16216    if { ([file exists $::JavaMatchClassFile] == 0) || ($::UpdateJavaByteCodeP)} {
16217	if {[catch {open $::JavaMatchFile "w"} JavaHandle ] != 0} {
16218	    ShowMessage [format [_ "Unable to open file %s."] $::JavaMatchFile];
16219	    error [format [_ "Unable to open %s"] $::JavaMatchFile];
16220	}
16221	puts $JavaHandle $cmd;
16222	close $JavaHandle;
16223	# Byte compile the java source
16224	if { [catch {tk_exec javac $::JavaMatchFile}] != 0} {
16225	    if {$TestingFeaturesP} {
16226		if {$FeatureTestLogHandle != ""} {
16227		    puts $FeatureTestLogHandle [format "\t%s" [_ "Java compilation failed."]];
16228		}
16229	    } else {
16230		ShowMessage [_ "Java compilation failed."];
16231	    }
16232	    error [_ "Java compilation failed."];
16233	}
16234	set ::UpdateJavaByteCodeP 0;
16235    }
16236    set cl [list java]
16237    lappend cl "-classpath"
16238    lappend cl $TempDir
16239    lappend cl $::JavaMatchClassName
16240    set pre "\\"
16241    append pre $re
16242    lappend cl "$pre"
16243    lappend cl "<"
16244    lappend cl $TestFile
16245    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16246    set cl [linsert $cl 0 "tk_exec"]
16247    return [eval $cl]
16248}
16249
16250proc ExecuteSubJava {re sub} {
16251    global TestFile;
16252    global TempDir;
16253    global FeatureTestLogHandle;
16254    global TestingFeaturesP;
16255    global CommandFile;
16256
16257    set FLAGS 0;
16258    if {$::ProgramInfo(java,CanonEQ)} {
16259	append FLAGS {|Pattern.CANON_EQ}
16260    }
16261    if {$::ProgramInfo(java,CaseInsensitiveP)} {
16262	append FLAGS {|Pattern.CASE_INSENSITIVE}
16263    } elseif {$::ProgramInfo(java,UnicodeCase)} {
16264	append FLAGS {|Pattern.CASE_INSENSITIVE|Pattern.UNICODE_CASE}
16265    }
16266
16267    set cmd \
16268	"import java.io.*;\nimport java.util.regex.*;\npublic class $::JavaSubClassName {\n\tpublic static void main(String\[\] args) {\n\t\tString thisLine;\n\t\tString regexp = (args\[0\]).substring(1);\n\t\tString sub = (args\[1\]).substring(1);\n\t\ttry {\n\t\t\tPattern p = Pattern.compile(regexp,$FLAGS);\n\t\t\tMatcher m;\n\t\t\ttry {\n\t\t\t\tBufferedReader in = new BufferedReader(new InputStreamReader(System.in));\n\t\t\t\twhile ( (thisLine = in.readLine()) != null) {\n\t\t\t\t\tm = p.matcher(thisLine);\n\t\t\t\t\tSystem.out.println(m.replaceAll(sub));\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (IOException e) {\n\t\t\t\tSystem.err.println(\"Error: \" + e);\n\t\t\t\tSystem.exit(2);\n\t\t\t}\n\t\t\tSystem.exit(0);\n\t\t}\n\t\tcatch (PatternSyntaxException e) {\n\t\t\tSystem.err.println(\"Error: \" + e);\n\t\t\tSystem.exit(1);\n\t\t}\n\t}\n}\n";
16269
16270    if { ([file exists $::JavaSubClassFile] == 0) || ($::UpdateJavaByteCodeP)} {
16271	if {[catch {open $::JavaSubFile "w"} JavaHandle ] != 0} {
16272	    error [format [_ "Unable to open %s"] $::JavaSubFile];
16273	}
16274	puts $JavaHandle $cmd;
16275	close $JavaHandle;
16276	# Byte compile the java source
16277	if { [catch {tk_exec javac $::JavaSubFile}] != 0} {
16278	    if {$TestingFeaturesP} {
16279		if {$FeatureTestLogHandle != ""} {
16280		    puts $FeatureTestLogHandle [format "\t%s" [_ "Java compilation failed."]];
16281		}
16282	    } else {
16283		ShowMessage [_ "Java compilation failed."];
16284	    }
16285	    error [_ "Java compilation failed."];
16286	}
16287	set ::UpdateJavaByteCodeP 0;
16288    }
16289    set cl [list java]
16290    lappend cl "-classpath"
16291    lappend cl $TempDir
16292    lappend cl $::JavaSubClassName
16293    set pre "\\"
16294    append pre $re
16295    lappend cl "$pre"
16296    set psub "\\"
16297    append psub $sub
16298    lappend cl "$psub"
16299    lappend cl "<"
16300    lappend cl $TestFile
16301    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16302    set cl [linsert $cl 0 "tk_exec"]
16303    return [eval $cl]
16304}
16305
16306proc ExecuteMatchJavascript {re} {
16307    global TestFile;
16308    global CommandFile;
16309
16310    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16311	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16312	error "";
16313    }
16314    set cmd "var re = new RegExp (\"$re\");\nwhile (!System.stdin.eof()){\n\tline=System.stdin.readln();\n\tif(re.test (line)){\n\t\tSystem.stdout.write(line);\n\t\tSystem.stdout.write(\"\\n\");\n\t}\n}\nSystem.exit(0);";
16315    puts $CommandHandle $cmd;
16316    close $CommandHandle;
16317    set cl [list js]
16318    lappend cl $CommandFile
16319    lappend cl "<"
16320    lappend cl $TestFile
16321    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16322    set cl [linsert $cl 0 "tk_exec"]
16323    return [eval $cl]
16324}
16325
16326proc ExecuteSubJavascript {re sub} {
16327    global TestFile;
16328    global CommandFile;
16329
16330    if { [catch {open $CommandFile "w"} CommandHandle] != 0} {
16331	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16332	error "";
16333    }
16334    set cmd "while (!System.stdin.eof()){\n\tvar line=System.stdin.readln();\n\tSystem.stdout.write(line.replace(\/$re\/,\"$sub\"));\n\t\tSystem.stdout.write(\"\\n\");\n\t}\nSystem.exit(0);";
16335    puts $CommandHandle $cmd;
16336    close $CommandHandle;
16337    set cl [list js]
16338    lappend cl $CommandFile
16339    lappend cl "<"
16340    lappend cl $TestFile
16341    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16342    set cl [linsert $cl 0 "tk_exec"]
16343    return [eval $cl]
16344}
16345
16346proc ExecuteMatchJgrep {re} {
16347    global TestFile;
16348    global CommandFile;
16349
16350#This is a kludge to prevent jgrep from crashing redet during
16351#feature testing when it hits the test for integer ranges, or if for some
16352#other reason a user includes a "<" in an expression. Until Tcl is
16353#fixed there isn't a lot else to be done since jgrep has no option
16354#for reading the expression from a file.
16355
16356    if {[string first "<" $re] == 0} {
16357	dmsg "Encountered a \"<\" in regexp $re";
16358	return "";
16359    }
16360
16361    set cl [list jgrep]
16362
16363    if {$::ProgramInfo(jgrep,CaseInsensitiveP)} {
16364	lappend cl -i
16365    }
16366    lappend cl $re
16367    lappend cl $TestFile
16368    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16369    set cl [linsert $cl 0 "tk_exec"]
16370    #Jgrep insists on generating a line with the filename before the
16371    #results so we strip the first line.
16372    set rval [eval $cl];
16373    return [string range $rval [expr [string first "\n" $rval] + 1] end]
16374}
16375
16376proc ExecuteMatchJudoscript {re} {
16377    global TestFile;
16378    global CommandFile;
16379
16380    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16381	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16382	error "";
16383    }
16384    set cmd "while (line=readLine()) != eof {\n\tif (line.matches(\'$re\')) println line;\n}\n";
16385    puts $CommandHandle $cmd;
16386    close $CommandHandle;
16387    set cl [list java]
16388    lappend cl -jar
16389    lappend cl judo.jar
16390    lappend cl "-q"
16391    lappend cl $CommandFile
16392    lappend cl "<"
16393    lappend cl $TestFile
16394    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16395    set cl [linsert $cl 0 "tk_exec"]
16396    return [eval $cl]
16397}
16398
16399proc ExecuteSubJudoscript {re sub} {
16400    global TestFile;
16401    global CommandFile;
16402
16403    if { [catch {open $CommandFile "w"} CommandHandle] != 0} {
16404	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16405	error "";
16406    }
16407    set cmd "while (line=readLine()) != eof {\n\tprintln line.replaceAll(\'$re\',\'$sub\');\n}\n";
16408    puts $CommandHandle $cmd;
16409    close $CommandHandle;
16410    set cl [list java]
16411    lappend cl -jar
16412    lappend cl judo.jar
16413    lappend cl "-q"
16414    lappend cl $CommandFile
16415    lappend cl "<"
16416    lappend cl $TestFile
16417    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16418    set cl [linsert $cl 0 "tk_exec"]
16419    return [eval $cl]
16420}
16421
16422proc ExecuteMatchKsh {re} {
16423    global ShellItemLimit;
16424    global TestFile;
16425    global TempGlobDir;
16426    global CommandFile;
16427
16428    #Read test data back in, storing in array, one line at a time;
16429    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
16430	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
16431	error "ExecuteMatchKsh";
16432    }
16433    set LineCount 0
16434    while { [gets $TempDataHandle line] > 0} {
16435	incr LineCount;
16436	set TestLines($LineCount) $line
16437    }
16438    close $TempDataHandle;
16439
16440    if {$LineCount >= $ShellItemLimit} {
16441	ShowMessage [format [_ "%1\$d items exceeds limit of %2\$d  for shells."] $LineCount $ShellItemLimit]
16442	#Delay so that user will get a chance to read above message.
16443	after 1000;
16444	error [format "ExecuteMatchKsh: %s" [_ "item limit exceeded"]];
16445    }
16446
16447    #Clean out this directory if it already exists.
16448    file delete -force $TempGlobDir;
16449    file mkdir $TempGlobDir;
16450    for {set i 1} {$i <= $LineCount} {incr i} {
16451	set NewFile [file join $TempGlobDir $TestLines($i)];
16452	if {[catch {open  $NewFile "w"} TempDataHandle] != 0} {
16453	    WriteJournal [format [_ "Unable to open file %s."] $NewFile];
16454	    continue ;
16455	} else {
16456	    puts $TempDataHandle "x";
16457	    close $TempDataHandle;
16458	}
16459    }
16460    set cl [list ksh]
16461    lappend cl "-c"
16462    regsub -all ";" $re "\\;" qre
16463    lappend cl "cd $TempGlobDir;ls $qre"
16464    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16465    set cl [linsert $cl 0 "tk_exec"]
16466    return [eval $cl]
16467}
16468
16469proc ExecuteMatchLua {re} {
16470    global TestFile;
16471    global CommandFile;
16472
16473    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16474	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16475	error "";
16476    }
16477    set cmd "while true do\n\tlocal dline = io.read(\"*line\")\n\tif dline == nil then break end\n\ti = string.find(dline,\"$re\")\n\tif i ~= nil then print(dline) end\nend\n";
16478    puts $CommandHandle $cmd;
16479    close $CommandHandle;
16480    set cl [list lua]
16481    lappend cl $CommandFile
16482    lappend cl "<"
16483    lappend cl $TestFile
16484    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16485    set cl [linsert $cl 0 "tk_exec"]
16486    return [eval $cl]
16487}
16488
16489proc ExecuteSubLua {re sub} {
16490    global TestFile;
16491    global CommandFile;
16492
16493    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16494	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16495	error "";
16496    }
16497    set cmd "while true do\n\tlocal dline = io.read(\"*line\")\n\tif dline == nil then break end\n\tresult, cnt = string.gsub(dline,\"$re\",\"$sub\");\n\tprint(result)\n\tend\n";
16498    puts $CommandHandle $cmd;
16499    close $CommandHandle;
16500    set cl [list lua]
16501    lappend cl $CommandFile
16502    lappend cl "<"
16503    lappend cl $TestFile
16504    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16505    set cl [linsert $cl 0 "tk_exec"]
16506    return [eval $cl]
16507}
16508
16509#This is not ready yet. Just getting infrastructure in place.
16510proc ExecuteMatchM4 {re} {
16511    global TestFile;
16512    global CommandFile;
16513
16514    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16515	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16516	error "";
16517    }
16518    set cmd "\$0 ~ /$re/ {print \$0}"
16519    puts $CommandHandle $cmd;
16520    close $CommandHandle;
16521    set cl [list m4]
16522    lappend cl "-f"
16523    lappend cl $CommandFile
16524    lappend cl "<"
16525    lappend cl $TestFile
16526    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16527    set cl [linsert $cl 0 "tk_exec"]
16528    return [eval $cl]
16529}
16530
16531#This is not ready yet. Just getting infrastructure in place.
16532proc ExecuteSubM4 {re sub} {
16533    global TestFile;
16534    global CommandFile;
16535
16536    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16537	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16538	error "";
16539    }
16540    set cmd [format "\{gsub(/%s/,\"%s\");print\}" $re $sub];
16541    puts $CommandHandle $cmd;
16542    close $CommandHandle;
16543    set cl [list m4]
16544    lappend cl "-f"
16545    lappend cl $CommandFile
16546    lappend cl "<"
16547    lappend cl $TestFile
16548    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16549    set cl [linsert $cl 0 "tk_exec"]
16550    return [eval $cl]
16551}
16552
16553#This is not ready yet. Just getting infrastructure in place.
16554proc ExecuteMatchGPP {re} {
16555    global TestFile;
16556    global CommandFile;
16557
16558    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16559	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16560	error "";
16561    }
16562    set cmd "\$0 ~ /$re/ {print \$0}"
16563    puts $CommandHandle $cmd;
16564    close $CommandHandle;
16565    set cl [list gpp]
16566    lappend cl "-f"
16567    lappend cl $CommandFile
16568    lappend cl "<"
16569    lappend cl $TestFile
16570    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16571    set cl [linsert $cl 0 "tk_exec"]
16572    return [eval $cl]
16573}
16574
16575#This is not ready yet. Just getting infrastructure in place.
16576proc ExecuteSubGPP {re sub} {
16577    global TestFile;
16578    global CommandFile;
16579
16580    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16581	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16582	error "";
16583    }
16584    set cmd [format "\{gsub(/%s/,\"%s\");print\}" $re $sub];
16585    puts $CommandHandle $cmd;
16586    close $CommandHandle;
16587    set cl [list gpp]
16588    lappend cl "-f"
16589    lappend cl $CommandFile
16590    lappend cl "<"
16591    lappend cl $TestFile
16592    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16593    set cl [linsert $cl 0 "tk_exec"]
16594    return [eval $cl]
16595}
16596
16597proc ExecuteMatchMawk {re} {
16598    global TestFile;
16599    global CommandFile;
16600
16601    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16602	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16603	error "";
16604    }
16605    set cmd "\$0 ~ /$re/ {print \$0}"
16606    puts $CommandHandle $cmd;
16607    close $CommandHandle;
16608    set cl [list mawk]
16609    lappend cl "-f"
16610    lappend cl $CommandFile
16611    lappend cl "<"
16612    lappend cl $TestFile
16613    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16614    set cl [linsert $cl 0 "tk_exec"]
16615    return [eval $cl]
16616}
16617
16618proc ExecuteSubMawk {re sub} {
16619    global TestFile;
16620    global CommandFile;
16621
16622    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16623	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16624	error "";
16625    }
16626    set cmd [format "\{gsub(/%s/,\"%s\");print\}" $re $sub];
16627    puts $CommandHandle $cmd;
16628    close $CommandHandle;
16629    set cl [list mawk]
16630    lappend cl "-f"
16631    lappend cl $CommandFile
16632    lappend cl "<"
16633    lappend cl $TestFile
16634    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16635    set cl [linsert $cl 0 "tk_exec"]
16636    return [eval $cl]
16637}
16638
16639proc ExecuteMatchMinised {re} {
16640    global TestFile;
16641    global CommandFile;
16642    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16643	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16644	error "";
16645    }
16646    set cmd "/$re/p"
16647    puts $CommandHandle $cmd;
16648    close $CommandHandle;
16649
16650    #The -n flag is necessary since autoprinting results in double output.
16651    set cl [list minised -n]
16652    lappend cl "-f"
16653    lappend cl "$CommandFile"
16654    lappend cl "<"
16655    lappend cl $TestFile
16656    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16657    set cl [linsert $cl 0 "tk_exec"]
16658    return [eval $cl]
16659}
16660
16661proc ExecuteSubMinised {re sub} {
16662    global TestFile;
16663    global CommandFile;
16664
16665    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16666	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16667	error "";
16668    }
16669    set cl [list minised]
16670    if {$::OutputOnlyChangedLinesP} {
16671	set cmd "s/$re/$sub/gp"
16672	puts $CommandHandle $cmd;
16673	lappend cl "-n"
16674    } else {
16675	set cmd "s/$re/$sub/g"
16676	puts $CommandHandle $cmd;
16677    }
16678    close $CommandHandle;
16679    lappend cl "-f"
16680    lappend cl "$CommandFile"
16681    lappend cl "<"
16682    lappend cl $TestFile
16683    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16684    set cl [linsert $cl 0 "tk_exec"]
16685    return [eval $cl]
16686}
16687
16688proc ExecuteMatchMysql {re} {
16689    global TestFile;
16690    global CommandFile;
16691
16692    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16693	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16694	error "";
16695    }
16696    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
16697	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
16698	error "ExecuteMatchMysql";
16699    }
16700    #Read test data back in, one line at a time, and write out select commands
16701    set LineCount 0
16702    set Data [split [string trimright [read $TempDataHandle] "\n"] "\n"];
16703    close $TempDataHandle;
16704    if {$::ProgramInfo(mysql,RegexpP)} {
16705	set MTYPE REGEXP
16706    } else {
16707	set MTYPE LIKE
16708    }
16709    foreach line $Data {
16710	puts $CommandHandle "SELECT \'$line\' $MTYPE \'$re\'\;"
16711    }
16712    close $CommandHandle;
16713    set cl [list mysql]
16714    lappend cl "-B"
16715    lappend cl "<"
16716    lappend cl $CommandFile
16717    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16718    set cl [linsert $cl 0 "tk_exec"]
16719    #mysql produces for each entry two lines. The first line consists of the
16720    #data, then the word REGEXP, then the regular expression. The second line
16721    #is 0 or 1 according as the regexp matched.
16722    set index 0;
16723    set Result [list]
16724    set RawResult [eval $cl]
16725    foreach {r bool} [split $RawResult "\n"] {
16726	if {$bool} {
16727	    append Result [format "%s\n" [lindex $Data $index]]
16728	}
16729	incr index
16730    }
16731    return $Result;
16732}
16733
16734proc ExecuteMatchNawk {re} {
16735    global TestFile;
16736    global CommandFile;
16737
16738    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16739	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16740	error "";
16741    }
16742    set cmd "\$0 ~ /$re/ {print \$0}"
16743    puts $CommandHandle $cmd;
16744    close $CommandHandle;
16745    set cl [list nawk]
16746    lappend cl "-f"
16747    lappend cl $CommandFile
16748    lappend cl "<"
16749    lappend cl $TestFile
16750    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16751    set cl [linsert $cl 0 "tk_exec"]
16752    return [eval $cl]
16753}
16754
16755proc ExecuteSubNawk {re sub} {
16756    global TestFile;
16757    global CommandFile;
16758
16759    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16760	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16761	error "";
16762    }
16763    set cmd [format "\{gsub(/%s/,\"%s\");print\}" $re $sub];
16764    puts $CommandHandle
16765    close $CommandHandle;
16766    set cl [list nawk]
16767    lappend cl "-f"
16768    lappend cl $CommandFile
16769    lappend cl "<"
16770    lappend cl $TestFile
16771    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16772    set cl [linsert $cl 0 "tk_exec"]
16773    return [eval $cl]
16774}
16775
16776proc ExecuteMatchNrgrep {re} {
16777    global TestFile;
16778    global CommandFile;
16779
16780#This is a kludge to prevent nrgrep from crashing redet during
16781#feature testing when it hits the test for integer ranges, or if for some
16782#other reason a user includes a "<" in an expression.
16783
16784    if {[string first "<" $re] == 0} {
16785	dmsg "Encountered a \"<\" in regexp $re";
16786	return "";
16787    }
16788
16789    set cl [list nrgrep]
16790
16791    if {$::ProgramInfo(nrgrep,CaseInsensitiveP)} {
16792	lappend cl -i
16793    }
16794    if {$::ProgramInfo(nrgrep,ComplementP)} {
16795	lappend cl -v
16796    }
16797    if {$::ProgramInfo(nrgrep,TotalCost) > 0} {
16798	set cs $::ProgramInfo(nrgrep,TotalCost)
16799	set OptSet 0;
16800	if {$::ProgramInfo(nrgrep,InsertionsP)} {
16801	    append cs i
16802	    set OptSet 1;
16803	}
16804	if {$::ProgramInfo(nrgrep,DeletionsP)} {
16805	    append cs d
16806	    set OptSet 1;
16807	}
16808	if {$::ProgramInfo(nrgrep,SubstitutionsP)} {
16809	    append cs s
16810	    set OptSet 1;
16811	}
16812	if {$::ProgramInfo(nrgrep,TranspositionsP)} {
16813	    append cs t
16814	    set OptSet 1;
16815	}
16816	if {$OptSet} {
16817	    lappend cl "-k"
16818	    lappend cl $cs
16819	}
16820    }
16821    lappend cl $re
16822    lappend cl $TestFile
16823    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16824    set cl [linsert $cl 0 "tk_exec"]
16825    return [eval $cl];
16826}
16827
16828proc ExecuteMatchNumgrep {re} {
16829    global TestFile;
16830    global CommandFile;
16831
16832    set cl [list numgrep]
16833    if {$::ProgramInfo(numgrep,OutputNumberByNumberP)} {
16834	lappend cl "-l"
16835    }
16836    lappend cl /$re/
16837    lappend cl "<"
16838    lappend cl $TestFile
16839    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16840    set cl [linsert $cl 0 "tk_exec"]
16841    return [eval $cl];
16842}
16843
16844proc ExecuteMatchPatmatch {re} {
16845    global TestFile;
16846
16847#This is a kludge to prevent nrgrep from crashing redet during
16848#feature testing when it hits the test for integer ranges, or if for some
16849#other reason a user includes a "<" in an expression. I can set up a workaround
16850#for this later by running patmatch through a shell script.
16851
16852    if {[string first "<" $re] == 0} {
16853	devmsg "Encountered a \"<\" in regexp $re";
16854	return "";
16855    }
16856
16857    set cl [list perl]
16858    lappend cl [list patmatch.pl]
16859    lappend cl -$::ProgramInfo(patmatch,ResidueType)
16860    lappend cl $re
16861    lappend cl $TestFile
16862    lappend cl $::ProgramInfo(patmatch,MismatchNumber)
16863    lappend cl $::ProgramInfo(patmatch,MismatchTypes)
16864    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
16865    set cl [linsert $cl 0 "tk_exec"]
16866    #Patmatch produces two lines for each result. The first contains the indices
16867    #of the match, the second the match itself. Each match is followed by a space
16868    #even if it is the only one on the line.
16869    set RawResultList [split [eval $cl] "\n"]
16870    set Result [list]
16871    foreach {indices match} $RawResultList {
16872	lappend Result [string trim $match]
16873    }
16874    return [join $Result "\n"]
16875}
16876
16877proc ExecuteMatchPcregrep {re} {
16878    global TestFile;
16879    global CommandFile;
16880
16881    set cl [list pcregrep]
16882    lappend cl "-u";		# Necessary for Unicode
16883
16884    if {$::ProgramInfo(pcregrep,CaseInsensitiveP)} {
16885	lappend cl -i
16886    }
16887    if {$::ProgramInfo(pcregrep,EmitMatchOnly)} {
16888	lappend cl -o
16889    }
16890    if {$::ProgramInfo(pcregrep,Complement)} {
16891	lappend cl -v
16892    }
16893    lappend cl "-f"
16894    lappend cl $CommandFile
16895    lappend cl "<"
16896    lappend cl $TestFile
16897
16898    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16899	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16900	error "";
16901    }
16902    puts $CommandHandle $re
16903    close $CommandHandle;
16904
16905    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $re]}
16906    set cl [linsert $cl 0 "tk_exec"]
16907    return [eval $cl];
16908}
16909
16910proc ExecuteMatchPerl {re} {
16911    global TestFile;
16912    global CommandFile;
16913
16914    if {$::ProgramInfo(perl,UnicodeLocaleDependentP)} {
16915	set flags "-C";
16916    } else {
16917	set flags "-CSD";
16918    }
16919    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16920	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16921	error "";
16922    }
16923    set cmd "use utf8;\nuse charnames \":full\";\nwhile (\$line = <STDIN>){\n\t\$copy=\$line;\n\tchomp(\$copy);\n\tif(\$copy  =~ /$re/) {\n\t\tprint \$line\n\t}\n}";
16924    puts $CommandHandle $cmd;
16925    close $CommandHandle;
16926    set cl [list perl]
16927    lappend cl $flags
16928    lappend cl $CommandFile
16929    lappend cl "<"
16930    lappend cl $TestFile
16931    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16932    set cl [linsert $cl 0 "tk_exec"]
16933    return [eval $cl]
16934}
16935
16936proc ExecuteSubPerl {re sub} {
16937    global TestFile;
16938    global CommandFile;
16939
16940    if {$::ProgramInfo(perl,UnicodeLocaleDependentP)} {
16941	set flags "-C";
16942    } else {
16943	set flags "-CSD";
16944    }
16945    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16946	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16947	error "";
16948    }
16949    set cmd "use utf8;\nuse charnames \":full\";\nwhile (\$line = <STDIN>){\n\t\$copy=\$line;\n\tchomp(\$copy);\n\t\$_=\$copy;\n\ts/$re/$sub/;\n\tprint \$_ ;\nprint \"\\n\"\n}\n";
16950    puts $CommandHandle $cmd;
16951    close $CommandHandle;
16952    set cl [list perl]
16953    lappend cl $flags
16954    lappend cl $CommandFile
16955    lappend cl "<"
16956    lappend cl $TestFile
16957    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16958    set cl [linsert $cl 0 "tk_exec"]
16959    return [eval $cl]
16960}
16961
16962proc ExecuteMatchPhp {re} {
16963    global TestFile;
16964    global CommandFile;
16965    global PHPPCRE;
16966    global PHPMB;
16967
16968    set Prelude "";
16969    if {$PHPPCRE} {
16970	set PHPfunc "preg_match";
16971    } else {
16972	if {$PHPMB} {
16973	    set PHPfunc "mb_ereg";
16974	    set Prelude "mb_regex_encoding('UTF-8');";
16975	} else {
16976	    set PHPfunc "ereg";
16977	}
16978    }
16979    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
16980	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
16981	error "";
16982    }
16983    set cmd [format "<?php %s\n\$fd = fopen(\"%s\",\"r\");\nwhile(!feof(\$fd)){\n\t\$line = trim(fgets(\$fd,256));\n\tif (%s('%s', \$line)){\n\t\tprintf('%%s\n',\$line);\n\t}\n}\nfclose(\$fd);?>" $Prelude $TestFile $PHPfunc $re];
16984    puts $CommandHandle $cmd;
16985    close $CommandHandle;
16986    set cl [list php]
16987    lappend cl "-f"
16988    lappend cl $CommandFile
16989    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
16990    set cl [linsert $cl 0 "tk_exec"]
16991    return [eval $cl]
16992}
16993
16994proc ExecuteSubPhp {re sub} {
16995    global TestFile;
16996    global CommandFile;
16997    global PHPPCRE;
16998    global PHPMB;
16999
17000    if {$PHPPCRE} {
17001	set PHPfunc "preg_replace";
17002    } else {
17003	if {$PHPMB} {
17004	    set PHPfunc "mb_ereg_replace";
17005	    set Prelude "mb_regex_encoding('UTF-8');";
17006	} else {
17007	    set PHPfunc "ereg_replace";
17008	    set Prelude "";
17009	}
17010    }
17011
17012    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17013	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17014	error "";
17015    }
17016    set cmd [format "<?php %s\n\$fd = fopen(\"%s\",\"r\");\nwhile(!feof(\$fd)){\n\t\$line = trim(fgets(\$fd,256));\n\t\tprintf('%%s\n',%s('%s','%s',\$line));\n}\nfclose(\$fd);?>" $Prelude $TestFile $PHPfunc $re $sub];
17017    puts $CommandHandle
17018    close $CommandHandle;
17019    set cl [list php]
17020    lappend cl "-f"
17021    lappend cl $CommandFile
17022    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17023    set cl [linsert $cl 0 "tk_exec"]
17024    return [eval $cl]
17025}
17026
17027proc ExecuteMatchPike {re} {
17028    global TestFile;
17029    global CommandFile;
17030
17031    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17032	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17033	error "";
17034    }
17035    set cmd "\#charset UTF-8\nint main()\n{\n\tstring iline;\n\tstring line;\n\tRegexp.PCRE.Plain myre;\n\tmyre = Regexp.PCRE.Plain(\"$re\");\n\twhile ( (iline = Stdio.stdin.gets()) != 0 ){\n\t\tline = utf8_to_string(iline);\n\t\tif (myre->match(line)) write(\"%s\\n\",string_to_utf8(line));\n\t}\n\treturn 0;\n}\n";
17036    puts $CommandHandle $cmd;
17037    close $CommandHandle;
17038    set cl [list pike]
17039    lappend cl $CommandFile
17040    lappend cl "<"
17041    lappend cl $TestFile
17042    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17043    set cl [linsert $cl 0 "tk_exec"]
17044    return [eval $cl]
17045}
17046
17047proc ExecuteSubPike {re sub} {
17048    global TestFile;
17049    global CommandFile;
17050
17051    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17052	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17053	error "";
17054    }
17055    set cmd "\#charset UTF-8\nint main()\n{\n\tstring iline;\n\tstring line;\n\tRegexp.PCRE.Plain myre;\n\tmyre = Regexp.PCRE.Plain(\"$re\");\n\twhile ( (iline = Stdio.stdin.gets()) != 0 ){\n\t\tline = utf8_to_string(iline);\n\t\twrite(\"%s\\n\",string_to_utf8(myre->replace(line,\"$sub\")));\n\t}\n\treturn 0;\n}\n";
17056    puts $CommandHandle $cmd;
17057    close $CommandHandle;
17058    set cl [list pike]
17059    lappend cl $CommandFile
17060    lappend cl "<"
17061    lappend cl $TestFile
17062    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17063    set cl [linsert $cl 0 "tk_exec"]
17064    return [eval $cl]
17065}
17066
17067proc ExecuteMatchPython {re} {
17068    global CommandFile;
17069    global TestFile;
17070
17071    if {$::ProgramInfo(python,RawStringP)} {
17072	set Prefix "ur";
17073    } else {
17074	set Prefix "u";
17075    }
17076    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17077	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17078	error "";
17079    }
17080    set cmd [format "# -*- coding: UTF-8 -*-\nimport sys\nimport codecs\nfrom re import *\n(utf8_encode, utf8_decode, utf8_reader, utf8_writer) = codecs.lookup('utf-8')\noutfile = utf8_writer(sys.stdout)\ninfile=utf8_reader(open('%s','r'))\nr = compile(%s'%s')\nwhile (1):\n\ttry:\n\t\tline = infile.readline()\n\t\tif line == \"\":\n\t\t\tbreak\n\t\ttline=line.rstrip(\"\\n\")\n\t\tmo=r.match(tline)\n\t\tif mo:\n\t\t\toutfile.write(line)\n\texcept IOError:\n\t\tsys.exit(0)\n\texcept ValueError:\n\t\tsys.stderr.write(\"Invalid UTF-8 encountered.\")\n\t\tsys.exit(1)\n" $TestFile $Prefix $re]
17081    puts $CommandHandle $cmd;
17082    close $CommandHandle;
17083    set cl [list python]
17084    lappend cl $CommandFile
17085    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17086    set cl [linsert $cl 0 "tk_exec"]
17087    return [eval $cl]
17088}
17089
17090proc ExecuteSubPython {re sub} {
17091    global CommandFile;
17092    global TestFile;
17093
17094    if {$::ProgramInfo(python,RawStringP)} {
17095	set Prefix "ur";
17096    } else {
17097	set Prefix "u";
17098    }
17099    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17100	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17101	error "";
17102    }
17103    set cmd [format "# -*- coding: UTF-8 -*-\nimport sys\nimport codecs\nfrom re import *\n(utf8_encode, utf8_decode, utf8_reader, utf8_writer) = codecs.lookup('utf-8')\noutfile = utf8_writer(sys.stdout)\ninfile=utf8_reader(open('%s','r'))\nr = compile(%s'%s')\nwhile (1):\n\ttry:\n\t\tline = infile.readline().rstrip(\"\\n\")\n\t\tif line == \"\":\n\t\t\tbreak\n\t\toutfile.write(r.sub(%s'%s',line))\n\t\toutfile.write('\\n')\n\texcept IOError:\n\t\tsys.exit(0)\n\texcept ValueError:\n\t\tsys.stderr.write(\"Invalid UTF-8 encountered.\")\n\t\tsys.exit(1)\n" $TestFile $Prefix $re $Prefix $sub]
17104    puts $CommandHandle $cmd;
17105    close $CommandHandle;
17106    set cl [list python]
17107    lappend cl $CommandFile
17108    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17109    set cl [linsert $cl 0 "tk_exec"]
17110    return [eval $cl]
17111}
17112
17113# This procedure is a bit unusual in that we redirect stderr into a temp file
17114# from within Rc and then check whether this file is empty. The reason for this
17115# is that if Rc is given a command like: "ls (?e)foo" (as in the test for the ?e flag)
17116# it parses this as equivalent to: "ls ?e foo". Since there is no file named "?e"
17117# it generates a message to that effect on stderr. It then procedes to list "foo"
17118# on stdout. Inspection of stdout will therefore make it look like the test succeeded.
17119# One would think that we would detect the error because writing on stderr would cause
17120# the catch (in ExecuteRegexp) to return a non-zero status, but Rc seems to suppress
17121# undiverted output to stderr when executed non-interactively. I don't find anything
17122# to this effect in the manual, but my tests seem to show that this is what it is
17123# doing. I have therefore used the kludge described above as a way to find out whether
17124# Rc detected an error.
17125proc ExecuteMatchRc {re} {
17126    global ShellItemLimit;
17127    global TestFile;
17128    global TempGlobDir;
17129    global CommandFile;
17130
17131    #Read test data back in, storing in array, one line at a time;
17132    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
17133	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
17134	error "ExecuteMatchRc";
17135    }
17136    set LineCount 0
17137    while { [gets $TempDataHandle line] > 0} {
17138	incr LineCount;
17139	set TestLines($LineCount) $line
17140    }
17141    close $TempDataHandle;
17142
17143    if {$LineCount >= $ShellItemLimit} {
17144	ShowMessage [format [_ "%1\$d items exceeds limit of %2\$d  for shells."] $LineCount $ShellItemLimit]
17145	#Delay so that user will get a chance to read above message.
17146	after 1000;
17147	error [format "ExecuteMatchRc: %s" [_ "item limit exceeded"]];
17148    }
17149
17150    #Clean out this directory if it already exists.
17151    file delete -force $TempGlobDir;
17152    file mkdir $TempGlobDir;
17153    for {set i 1} {$i <= $LineCount} {incr i} {
17154	set NewFile [file join $TempGlobDir $TestLines($i)];
17155	if {[catch {open  $NewFile "w"} TempDataHandle] != 0} {
17156	    WriteJournal [format [_ "Unable to open file %s."] $NewFile];
17157	    continue ;
17158	} else {
17159	    puts $TempDataHandle "x";
17160	    close $TempDataHandle;
17161	}
17162    }
17163    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17164	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17165	error "";
17166    }
17167    set TempErrorLog [file join $::TempDir "rcerror.log"]
17168    file delete -force $TempErrorLog
17169    set cmd "cd $TempGlobDir;ls $re >\[2\] $TempErrorLog"
17170    puts $CommandHandle $cmd;
17171    close $CommandHandle;
17172
17173    set cl [list rc]
17174    lappend cl "-s"
17175    lappend cl "<"
17176    lappend cl $CommandFile
17177    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
17178    set cl [linsert $cl 0 "tk_exec"]
17179    set rval [eval $cl]
17180    if {[file exists $TempErrorLog]} {
17181	if {[file size $TempErrorLog]} {
17182	    error ""
17183	}
17184    }
17185    return $rval
17186}
17187
17188proc ExecuteMatchRebol {re} {
17189    global TestFile;
17190    global CommandFile;
17191
17192    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17193	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17194	error "";
17195    }
17196    set cmd "REBOL \[\n\tTitle: \"Script created by redet.\"\n\]\ndigit: charset \[\#\"0\" - \#\"9\"\]\nlower: charset \[\#\"a\" - \#\"z\"\]\nupper: charset \[\#\"A\" - \#\"Z\"\]\nalpha: union lower upper\nalnum: union alpha digit\nhexlet: charset \"AaBbCcDdEeFf\"\nxdigit: union digit hexlet\nwhile \[line: input\] \[\n\tif parse/all line \[$re\] \[\n\t\tprint line\n\t]\n\]\nquit\n";
17197    puts $CommandHandle $cmd;
17198    close $CommandHandle;
17199    set cl [list rebol]
17200    lappend cl -q
17201    lappend cl -w
17202    lappend cl $CommandFile
17203    lappend cl "<"
17204    lappend cl $TestFile
17205    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17206    set cl [linsert $cl 0 "tk_exec"]
17207    return [eval $cl]
17208}
17209
17210proc ExecuteMatchRep {re} {
17211    global TestFile;
17212    global CommandFile;
17213
17214    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17215	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17216	error "";
17217    }
17218    set cmd "(while (setq line (read-line))
17219      (setq lastpos (- (length line) 1))
17220      (if (equal (elt line lastpos) 10)
17221      	(setq line (substring line 0 lastpos)))
17222      (if (string-match \"$re\" line)
17223	  (write standard-output (concat line \"\n\"))))"
17224    puts $CommandHandle $cmd;
17225    close $CommandHandle;
17226    set cl [list rep]
17227    lappend cl "--no-rc"; #Suppress execution of user's init file.
17228    lappend cl $CommandFile
17229    lappend cl "<"
17230    lappend cl $TestFile
17231    lappend cl {2>}
17232    if {[string equal $::System Unix]} {
17233	lappend cl "/dev/null"
17234    } else {
17235	lappend cl "bitbucket"
17236    }
17237    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17238    set cl [linsert $cl 0 "tk_exec"]
17239    return [eval $cl]
17240}
17241
17242proc ExecuteMatchRuby {re} {
17243    global TestFile;
17244    global CommandFile;
17245
17246    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17247	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17248	error "";
17249    }
17250    set cmd "while line = STDIN.gets\n\tif  /$re/ =~ line then\n\t\tprint line\n\tend\nend\n";
17251    puts $CommandHandle $cmd;
17252    close $CommandHandle;
17253    set cl [list ruby]
17254    lappend cl $CommandFile
17255    lappend cl "<"
17256    lappend cl $TestFile
17257    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17258    set cl [linsert $cl 0 "tk_exec"]
17259    return [eval $cl]
17260}
17261
17262proc ExecuteSubRuby {re sub} {
17263    global TestFile;
17264    global CommandFile;
17265
17266    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17267	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17268	error "";
17269    }
17270    set cmd [format "while line = STDIN.gets.chomp\n\tprint (line.gsub(/%s/,%%q%s%s%s),\"\\n\")\nend\n" $re $::LeftRubyStringDelimiter $sub $::RightRubyStringDelimiter];
17271    puts $CommandHandle $cmd;
17272    close $CommandHandle;
17273    set cl [list ruby]
17274    lappend cl $CommandFile
17275    lappend cl "<"
17276    lappend cl $TestFile
17277    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17278    set cl [linsert $cl 0 "tk_exec"]
17279    return [eval $cl]
17280}
17281
17282proc ExecuteMatchSed {re} {
17283    global TestFile;
17284    global CommandFile;
17285    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17286	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17287	error "";
17288    }
17289    set cmd "/$re/p"
17290    puts $CommandHandle $cmd;
17291    close $CommandHandle;
17292
17293    #The -n flag is necessary since autoprinting results in double output.
17294    set cl [list sed -n]
17295    if {$::ProgramInfo(sed,ExtendedRegexp)} {
17296	lappend cl "-r"
17297    }
17298    lappend cl "-f"
17299    lappend cl "$CommandFile"
17300    lappend cl "<"
17301    lappend cl $TestFile
17302    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17303    set cl [linsert $cl 0 "tk_exec"]
17304    return [eval $cl]
17305}
17306
17307proc ExecuteSubSed {re sub} {
17308    global TestFile;
17309    global CommandFile;
17310
17311    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17312	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17313	error "";
17314    }
17315    set cl [list sed]
17316    if {$::OutputOnlyChangedLinesP} {
17317	set cmd "s/$re/$sub/gp"
17318	puts $CommandHandle $cmd;
17319	lappend cl "-n"
17320    } else {
17321	set cmd "s/$re/$sub/g"
17322	puts $CommandHandle $cmd;
17323    }
17324    close $CommandHandle;
17325    if {$::ProgramInfo(sed,ExtendedRegexp)} {
17326	lappend cl "-r"
17327    }
17328    lappend cl "-f"
17329    lappend cl "$CommandFile"
17330    lappend cl "<"
17331    lappend cl $TestFile
17332    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17333    set cl [linsert $cl 0 "tk_exec"]
17334    return [eval $cl]
17335}
17336
17337proc ExecuteMatchSgrep {re} {
17338    global TestFile;
17339    global CommandFile;
17340
17341    set cl [list sgrep]
17342    lappend cl -n;			# Suppress reading of ~/.sgreprc or /usr/lib/sgreprc
17343
17344    if {$::ProgramInfo(sgrep,CaseInsensitiveP)} {
17345	lappend cl -i
17346    }
17347    lappend cl "-f"
17348    lappend cl $CommandFile
17349    lappend cl "<"
17350    lappend cl $TestFile
17351    lappend cl {2>}
17352    if {[string equal $::System Unix]} {
17353	lappend cl "/dev/null"
17354    } else {
17355	lappend cl "bitbucket"
17356    }
17357
17358    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17359	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17360	error "";
17361    }
17362    regsub -all -- \" $re \\\" qre
17363#    set cmd [format "\'%s\'" $qre]
17364    set cmd $qre
17365    puts $CommandHandle $cmd
17366    close $CommandHandle;
17367
17368    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17369    set cl [linsert $cl 0 "tk_exec"]
17370    return [eval $cl];
17371}
17372
17373proc ExecuteMatchSleep {re} {
17374    global TestFile;
17375    global CommandFile;
17376
17377    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17378	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17379	error "";
17380    }
17381    set cmd "\$fh = getConsole();\nwhile (!-eof \$fh) {\n\t\$line = readln(\$fh);\n\tif (\$line ismatch \'$re\') {println (\$line)}\n}\nreturn 0;\n";
17382    puts $CommandHandle $cmd;
17383    close $CommandHandle;
17384    set cl [list java]
17385    lappend cl "-jar"
17386    lappend cl sleep.jar
17387    lappend cl $CommandFile
17388    lappend cl "<"
17389    lappend cl $TestFile
17390    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17391    set cl [linsert $cl 0 "tk_exec"]
17392    return [eval $cl]
17393}
17394
17395proc ExecuteSubSleep {re sub} {
17396    global TestFile;
17397    global CommandFile;
17398
17399    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17400	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17401	error "";
17402    }
17403    set cmd "\$fh = getConsole();\nwhile (!-eof \$fh) {\n\t\$line = readln(\$fh);\n\tprintln(replace(\$line,\'$re\',\'$sub\'));\n}\n";
17404    puts $CommandHandle $cmd;
17405    close $CommandHandle;
17406
17407    set cl [list java]
17408    lappend cl "-jar"
17409    lappend cl sleep.jar
17410    lappend cl $CommandFile
17411    lappend cl "<"
17412    lappend cl $TestFile
17413    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17414    set cl [linsert $cl 0 "tk_exec"]
17415    set res [eval $cl]
17416    if {[string equal [string range $res end-2 end] "EOF"]} {
17417	set res [string range $res 0 end-3];
17418    }
17419    return $res
17420}
17421
17422proc ExecuteMatchSleepWildcard {re} {
17423    global TestFile;
17424    global CommandFile;
17425
17426    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17427	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17428	error "";
17429    }
17430    set cmd "\$fh = getConsole();\nwhile (!-eof \$fh) {\n\t\$line = readln(\$fh);\n\tif (\'$re\' iswm \$line) {println (\$line)}\n}\nreturn 0;\n";
17431    puts $CommandHandle $cmd;
17432    close $CommandHandle;
17433
17434    set cl [list java]
17435    lappend cl "-jar"
17436    lappend cl sleep.jar
17437    lappend cl $CommandFile
17438    lappend cl "<"
17439    lappend cl $TestFile
17440    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17441    set cl [linsert $cl 0 "tk_exec"]
17442    return [eval $cl]
17443}
17444
17445proc ExecuteMatchSsed {re} {
17446    global TestFile;
17447    global CommandFile;
17448    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17449	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17450	error "";
17451    }
17452    set cmd "/$re/p"
17453    puts $CommandHandle $cmd;
17454    close $CommandHandle;
17455
17456    #The -n flag is necessary since autoprinting results in double output.
17457    set cl [list ssed -n]
17458    if {$::ProgramInfo(ssed,POSIX)} {
17459	lappend cl "--posix"
17460    }
17461    switch -exact -- $::ProgramInfo(ssed,RegexpType) {
17462	extended {
17463	    lappend cl "-r"
17464	}
17465	perl {
17466	    lappend cl "-R"
17467	}
17468    }
17469    lappend cl "-f"
17470    lappend cl "$CommandFile"
17471    lappend cl "<"
17472    lappend cl $TestFile
17473    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17474    set cl [linsert $cl 0 "tk_exec"]
17475    return [eval $cl]
17476}
17477
17478proc ExecuteSubSsed {re sub} {
17479    global TestFile;
17480    global CommandFile;
17481
17482    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17483	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17484	error "";
17485    }
17486    set cl [list ssed]
17487    if {$::OutputOnlyChangedLinesP} {
17488	set cmd "s/$re/$sub/gp"
17489	puts $CommandHandle $cmd;
17490	lappend cl "-n"
17491    } else {
17492	set cmd "s/$re/$sub/g"
17493	puts $CommandHandle $cmd;
17494    }
17495    close $CommandHandle;
17496    if {$::ProgramInfo(ssed,ExtendedRegexp)} {
17497	lappend cl "-r"
17498    } elseif {$::ProgramInfo(ssed,POSIX)} {
17499	lappend cl "--posix"
17500    } elseif {$::ProgramInfo(ssed,PERL)} {
17501	lappend cl "-R"
17502    }
17503    lappend cl "-f"
17504    lappend cl "$CommandFile"
17505    lappend cl "<"
17506    lappend cl $TestFile
17507    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17508    set cl [linsert $cl 0 "tk_exec"]
17509    return [eval $cl]
17510}
17511
17512proc ExecuteMatchTcl {re} {
17513    global TestFile;
17514
17515    set Result "";
17516    set MatchCnt 0;
17517
17518    if {[string match $::ExecutionFlag Normal] == 0} {return [list "Executed internally by tcl."] }
17519
17520    #Read test data back in, storing in list, one line at a time;
17521    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
17522	ShowMessage [format [_ "Unable to open %s."] $TempDataFile];
17523	error [_ "ExecuteMatchTcl: cannot open data file"];
17524    }
17525    set LineCount 0
17526    while { [gets $TempDataHandle line] > 0} {
17527	set line [string trimright $line "\n"];
17528	incr LineCount;
17529	lappend TestLines $line;
17530    }
17531    close $TempDataHandle;
17532
17533    #Now run regexp against each line;
17534    lappend cmdbase regexp
17535    if {$::ProgramInfo(tcl,CaseInsensitiveP)} {lappend cmdbase "-nocase"}
17536    if {$::ProgramInfo(tcl,ExpandedP)} {lappend cmdbase "-expanded"}
17537    lappend cmdbase "--"
17538    lappend cmdbase $re
17539    for {set i  0} {$i < $LineCount} {incr i} {
17540	set str [lindex $TestLines $i]
17541	set cmd $cmdbase
17542	lappend cmd $str
17543	lappend cmd match
17544	if {[eval $cmd] == 1}  {
17545	    if {$::ProgramInfo(tcl,EmitMatchOnlyP)} {
17546		append Result $match;
17547	    } else {
17548		append Result $str;
17549	    }
17550	    append Result "\n";
17551	    incr MatchCnt;
17552	}
17553    }
17554
17555    #If there are no matches, we throw an exception here so as to match
17556    #the result of executing a child process as we do for the other programs.
17557    #The exception will be caught by catch() in ExecuteMatchRegexp().
17558    if {[string equal $Result ""]} {
17559	error "";
17560    }
17561    return [string trimright $Result "\n"];
17562}
17563
17564proc ExecuteSubTcl {re sub} {
17565    global TestFile;
17566
17567    set Result "";
17568    set MatchCnt 0;
17569
17570    if {[string match $::ExecutionFlag Normal] == 0} {return [list "Executed internally by tcl."] }
17571
17572    #Read test data back in, storing in list, one line at a time;
17573    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
17574	ShowMessage [format [_ "Unable to open %s."] $TempDataFile];
17575	error [_ "ExecuteSubTcl: cannot open data file"];
17576    }
17577    set LineCount 0
17578    while { [gets $TempDataHandle line] > 0} {
17579	set line [string trimright $line "\n"];
17580	incr LineCount;
17581	lappend TestLines $line;
17582    }
17583    close $TempDataHandle;
17584
17585    #Now run regexp against each line;
17586    lappend cmdbase regsub
17587    if {$::ProgramInfo(tcl,CaseInsensitiveP)} {lappend cmdbase "-nocase"}
17588    if {$::ProgramInfo(tcl,ExpandedP)} {lappend cmdbase "-expanded"}
17589    lappend cmdbase "-all"
17590    lappend cmdbase "--"
17591    lappend cmdbase $re
17592    for {set i  0} {$i < $LineCount} {incr i} {
17593	set str [lindex $TestLines $i]
17594	set cmd $cmdbase
17595	lappend cmd $str
17596	lappend cmd $sub
17597	lappend cmd subres
17598	eval $cmd
17599	append Result $subres
17600	append Result "\n";
17601	if {[string equal $subres $str] !=0} {incr MatchCnt}
17602    }
17603
17604    #If there are no matches, we throw an exception here so as to match
17605    #the result of executing a child process as we do for the other programs.
17606    #The exception will be caught by catch() in ExecuteMatchRegexp().
17607    if {[string equal $Result ""]} {
17608	error "";
17609    }
17610    return [string trimright $Result "\n"];
17611}
17612
17613proc ExecuteMatchTclGlob {re} {
17614    global TestFile;
17615
17616    set Result "";
17617    set MatchCnt 0;
17618
17619    if {[string match $::ExecutionFlag Normal] == 0} {return [list "Executed internally by tcl."] }
17620
17621    #Read test data back in, storing in list, one line at a time;
17622    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
17623	ShowMessage [format [_ "Unable to open %s."] $TempDataFile];
17624	error "";
17625    }
17626    set LineCount 0
17627    while { [gets $TempDataHandle line] > 0} {
17628	set line [string trimright $line "\n"];
17629	incr LineCount;
17630	lappend TestLines $line;
17631    }
17632    close $TempDataHandle;
17633
17634    #Now run regexp against each line;
17635    for {set i  0} {$i < $LineCount} {incr i} {
17636	if {[string match $re [lindex $TestLines $i]] == 1}  {
17637	    append Result [lindex $TestLines $i];
17638	    append Result "\n";
17639	    incr MatchCnt;
17640	}
17641    }
17642
17643    #If there are no matches, we throw an exception here so as to match
17644    #the result of executing a child process as we do for the other programs.
17645    #The exception will be caught by catch() in ExecuteRegexp().
17646    if {[string equal $Result ""]} {
17647	error "";
17648    }
17649    return [string trimright $Result "\n"];
17650}
17651
17652proc ExecuteMatchTcsh {re} {
17653    global ShellItemLimit;
17654    global TempGlobDir;
17655    global TestFile;
17656    global CommandFile;
17657
17658    #Read test data back in, storing in array, one line at a time;
17659    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
17660	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
17661	error "ExecuteMatchTcsh";
17662    }
17663    set LineCount 0;
17664    while { [gets $TempDataHandle line] > 0} {
17665	incr LineCount
17666	set TestLines($LineCount) $line
17667    }
17668    close $TempDataHandle;
17669
17670    if {$LineCount > $ShellItemLimit} {
17671	ShowMessage [format [_ "%1\$d items exceeds limit of %2\$d  for shells."] $LineCount $ShellItemLimit];
17672	puts [format "%d items exceeds limit of %d  for shells." $LineCount $ShellItemLimit]
17673	#Delay so that user will get a chance to read above message.
17674	after 5000;
17675	error [format "ExecuteMatchTcsh: %s" [_ "item limit exceeded"]];
17676    }
17677
17678    #Clean out this directory if it already exists.
17679    file delete -force $TempGlobDir;
17680    file mkdir $TempGlobDir;
17681    for {set i 1} {$i <= $LineCount} {incr i} {
17682	set NewFile [file join $TempGlobDir $TestLines($i)];
17683	if {[catch {open  $NewFile "w"} TempDataHandle] != 0} {
17684	    WriteJournal [format [_ "Unable to open file %s."] $NewFile];
17685	    continue ;
17686	} else {
17687	    puts $TempDataHandle "x";
17688	    close $TempDataHandle;
17689	}
17690    }
17691    set cl [list tcsh]
17692    lappend cl "-c"
17693    regsub -all ";" $re "\\;" qre
17694    lappend cl "cd $TempGlobDir;ls $qre"
17695    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
17696    set cl [linsert $cl 0 "tk_exec"]
17697    return [eval $cl]
17698}
17699
17700proc ExecuteSubTr {re sub} {
17701    global TestFile;
17702    global CommandFile;
17703
17704#This is a kludge to prevent tr from crashing redet during
17705#feature testing when it hits the test for integer ranges, or if for some
17706#other reason a user includes a "<" in an expression. Tr has no way
17707#to read expressions from a file so we can't shield the "<"
17708#from Tcl that way. On Unix systems we can execute Tr via a sub shell
17709#but that may not work on other systems. Need to think about this,
17710#or hope that Tcl gets fixed soon.
17711
17712    if {[string first "<" $re] == 0} {
17713	dmsg "Encountered a \"<\" in regexp $re";
17714	return "";
17715    }
17716
17717    if {[string first "<" $sub] == 0} {
17718	dmsg "Encountered a \"<\" in subexp $sub";
17719	return "";
17720    }
17721
17722    set cl [list tr]
17723    if {$::ProgramInfo(tr,Complement)} {
17724	lappend cl "-c"
17725    }
17726    if {$::ProgramInfo(tr,Squeeze)} {
17727	lappend cl "-s"
17728    }
17729    if {$::ProgramInfo(tr,Truncate)} {
17730	lappend cl "-t"
17731    }
17732    lappend cl $re;
17733    lappend cl $sub;
17734    lappend cl "<"
17735    lappend cl $TestFile
17736    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
17737    set cl [linsert $cl 0 "tk_exec"]
17738    return [eval $cl]
17739}
17740
17741proc ExecuteMatchVim {re} {
17742    global TestFile;
17743    global CommandFile;
17744    global TempOutputFile;
17745
17746    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17747	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17748	error "";
17749    }
17750    file delete $TempOutputFile;
17751    set cmd "";
17752    if {$::ProgramInfo(vim,CaseInsensitiveP)} {
17753	append cmd "set ignorecase\n"
17754    }
17755    if {$::ProgramInfo(vim,SmartCaseP)} {
17756	append cmd "set smartcase\n"
17757    }
17758    if {$::ProgramInfo(vim,ListModeP)} {
17759	append cmd "set list\n"
17760    }
17761    append cmd "set encoding=utf-8\ng/$re/.w! >> $TempOutputFile\nq!\n";
17762    fconfigure $CommandHandle -encoding utf-8
17763    puts $CommandHandle $cmd;
17764    close $CommandHandle;
17765    set cl [list vim]
17766    lappend cl "-e";			# Start up in ex mode
17767    lappend cl "-i";			# Prevent reading ~/.viminfo
17768    lappend cl "NONE"
17769    lappend cl "-T";
17770    lappend cl "dumb"
17771    lappend cl "-U"
17772    lappend cl "-NONE"
17773    lappend cl "-s"
17774    lappend cl $TestFile
17775    lappend cl "<"
17776    lappend cl $CommandFile
17777    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
17778    set cl [linsert $cl 0 "tk_exec"]
17779    set RawResult "";
17780    set Result ""
17781    eval $cl
17782    if {[catch {open $TempOutputFile "r"} fh] != 0} {
17783	if {$::DebugP} {
17784	    ShowMessage [format [_ "Unable to open file %s."] $TempOutputFile];
17785	}
17786    } else {
17787	fconfigure $fh -encoding utf-8
17788	set RawResult [split [read $fh] "\n"]
17789    }
17790    foreach line $RawResult {
17791	if {$line == ""} {continue}
17792	lappend Result $line
17793    }
17794    return [join $Result "\n"]
17795}
17796
17797proc ExecuteSubVim {re sub} {
17798    global TestFile;
17799    global CommandFile;
17800    global TempOutputFile
17801
17802    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17803	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17804	error "";
17805    }
17806    file delete $TempOutputFile
17807    set cmd "";
17808    if {$::ProgramInfo(vim,CaseInsensitiveP)} {
17809	append cmd "set ignorecase\n"
17810    }
17811    if {$::ProgramInfo(vim,SmartCaseP)} {
17812	append cmd "set smartcase\n"
17813    }
17814    if {$::ProgramInfo(vim,ListModeP)} {
17815	append cmd "set list\n"
17816    }
17817    append cmd "set encoding=utf-8\n%s/$re/$sub/"
17818    if {$::ProgramInfo(vim,SubstitutionGlobalP)} {
17819	append cmd "g"
17820    }
17821    append cmd "\nw $TempOutputFile\nq!\n";
17822    fconfigure $CommandHandle -encoding utf-8
17823    puts $CommandHandle $cmd;
17824    close $CommandHandle;
17825    set cl [list vim]
17826    lappend cl "-e";			# Start up in ex mode
17827    lappend cl "-i";			# Prevent reading ~/.viminfo
17828    lappend cl "NONE"
17829    lappend cl "-T";
17830    lappend cl "dumb"
17831    lappend cl "-U"
17832    lappend cl "-NONE"
17833    lappend cl "-s"
17834    lappend cl $TestFile
17835    lappend cl "<"
17836    lappend cl $CommandFile
17837    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
17838    set cl [linsert $cl 0 "tk_exec"]
17839    set RawResult "";
17840    set Result ""
17841    eval $cl
17842    if {[catch {open $TempOutputFile "r"} fh] != 0} {
17843	if {$::DebugP} {
17844	    ShowMessage [format [_ "Unable to open file %s."] $TempOutputFile];
17845	}
17846    } else {
17847	fconfigure $fh -encoding utf-8
17848	set RawResult [split [read $fh] "\n"]
17849    }
17850    foreach line $RawResult {
17851	if {$line == ""} {continue}
17852	lappend Result $line
17853    }
17854    return [join $Result "\n"]
17855}
17856
17857proc ExecuteMatchXmlstarlet {re} {
17858    global TestFile;
17859
17860    set cl [list xml select]
17861    lappend cl "$re"
17862    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl]]}
17863    set cl [linsert $cl 0 "tk_exec"]
17864    set RawResult "";
17865    set Result ""
17866    return [eval $cl]
17867}
17868
17869proc ExecuteMatchZsh {re} {
17870    global ShellItemLimit;
17871    global TempGlobDir;
17872    global TestFile;
17873    global CommandFile;
17874
17875    #Read test data back in, storing in array, one line at a time;
17876    if {[catch {open $TestFile "r"} TempDataHandle ] != 0} {
17877	ShowMessage [format [_ "Unable to read test data back in from %s."] $TestFile];
17878	error "ExecuteMatchZsh";
17879    }
17880    set LineCount 0;
17881    while { [gets $TempDataHandle line] > 0} {
17882	incr LineCount
17883	set TestLines($LineCount) $line
17884    }
17885    close $TempDataHandle;
17886
17887    if {$LineCount > $ShellItemLimit} {
17888	ShowMessage [format [_ "%1\$d items exceeds limit of %2\$d  for shells."] $LineCount $ShellItemLimit];
17889#	puts [format "%d items exceeds limit of %d  for shells." $LineCount $ShellItemLimit]
17890	#Delay so that user will get a chance to read above message.
17891	after 5000;
17892	error [format "ExecuteMatchZsh: %s" [_ "item limit exceeded"]];
17893    }
17894
17895    #Clean out this directory if it already exists.
17896    file delete -force $TempGlobDir;
17897    file mkdir $TempGlobDir;
17898    for {set i 1} {$i <= $LineCount} {incr i} {
17899	set NewFile [file join $TempGlobDir $TestLines($i)];
17900	if {[catch {open  $NewFile "w"} TempDataHandle] != 0} {
17901	    WriteJournal [format [_ "Unable to open file %s."] $NewFile];
17902	    continue ;
17903	} else {
17904	    puts $TempDataHandle "x";
17905	    close $TempDataHandle;
17906	}
17907    }
17908    if {[catch {open $CommandFile "w"} CommandHandle ] != 0} {
17909	ShowMessage [format [_ "Unable to open file %s."] $CommandFile];
17910	error "";
17911    }
17912    if {$::ProgramInfo(zsh,ExtendedGlobP)} {
17913	append cmd "setopt extendedglob;"
17914    }
17915    if {$::ProgramInfo(zsh,KornQuantifiersP)} {
17916	append cmd "setopt kshglob;"
17917    }
17918    regsub -all ";" $re "\\;" qre
17919    append cmd "cd $TempGlobDir;ls $qre"
17920    puts $CommandHandle $cmd
17921    close $CommandHandle;
17922
17923    set cl [list zsh]
17924    lappend cl $CommandFile
17925    if {[string match $::ExecutionFlag Normal] == 0} {return [list [join $cl] $cmd]}
17926    set cl [linsert $cl 0 "tk_exec"]
17927    return [eval $cl]
17928}
17929
17930
17931
17932#End of the procedures that execute the individual programs.
17933
17934# Write out the shell script that actually executes emacs.
17935# This is necessary because emacs writes to a file and we need to get the result
17936# from stdin.
17937proc CreateEmacsWrapper {} {
17938    global EmacsWrapper
17939    global TestFile;
17940    global CommandFile;
17941    global EmacsOutputFile;
17942
17943    if {[catch {open $EmacsWrapper "w"} EmacsDataHandle ] != 0} {
17944	ShowMessage [format [_ "Unable to write Emacs wrapper file %s."] $EmacsWrapper];
17945    }
17946    puts $EmacsDataHandle [format "emacs -batch -insert %s -l %s -kill >& /dev/null\nemstat=\$?\ncat %s\nexit \$emstat" $TestFile $CommandFile $EmacsOutputFile];
17947    close $EmacsDataHandle;
17948}
17949
17950
17951#Copy a regular expression from the clipboard
17952#and insert it into the regular expression window
17953
17954proc LoadRegularExpressionFromClipboard {} {
17955    set sel "";
17956    if {[catch {set sel [selection get -selection CLIPBOARD -type UTF8_STRING]}]} {
17957	ShowMessage [_ "The clipboard is empty."];
17958	return;
17959    } else {
17960	$::REG insert insert $sel;
17961	ShowMessage [_ "Clipboard contents copied to regular expression window."];
17962    }
17963}
17964
17965#Same as above, but from primary selection.
17966
17967proc LoadRegularExpressionFromPrimarySelection {} {
17968    set sel "";
17969    if {[catch {set sel [selection get -selection PRIMARY -type UTF8_STRING]}]} {
17970	ShowMessage [_ "The primary selection is empty."];
17971	return;
17972    } else {
17973	$::REG insert insert $sel;
17974	ShowMessage [_ "Primary selection copied to regular expression window."];
17975    }
17976}
17977
17978#Read a regular expression from a file
17979#and insert it into the regular expression window
17980
17981proc LoadRegularExpressionFromFile {} {
17982    set ReFile [tk_getOpenFile];
17983    if {$ReFile != ""} {
17984	if {[catch {open $ReFile "r"} ReHandle ] != 0} {
17985	    ShowMessage [format [_ "Unable to open regular expression file %s."] [MinimizeFileName $ReFile]];
17986	    return ;
17987	}
17988	if { [gets $ReHandle line] > 0} {
17989	    $::REG insert insert $line;
17990	}
17991	close $ReHandle;
17992    }
17993}
17994
17995proc ClearRegexp {} {
17996    $::REG  delete 0 end;
17997    $::SUB delete 0 end;
17998}
17999
18000proc ClearInput {} {
18001    $::IND configure -state normal
18002    $::IND delete 1.0 end;
18003    if {!$::INDEditableP} {
18004	$::IND configure -state disabled
18005    }
18006}
18007
18008proc EditTestInputData {} {
18009    global InputDataFromWindowP
18010
18011    $::IND configure -state normal
18012    set InputDataFromWindowP 1;
18013    set ::INDEditableP 1;
18014    focus -force $::IND;
18015}
18016
18017proc MoveResultsToTestData {} {
18018    #Get the result data
18019    set Results [$::OUT get 1.0 end]
18020    if {[string trim $Results] == ""} {
18021	ShowMessage [_ "The result window is empty."]
18022	return
18023    }
18024    #Clear the test data
18025    $::IND configure -state normal
18026    $::IND delete 1.0 end;
18027    #Copy the result data into the test data window
18028    $::IND insert end $Results
18029    if {!$::INDEditableP} {
18030	$::IND configure -state disabled
18031    }
18032    #Clear the result window
18033    $::OUT configure -state normal
18034    $::OUT delete 1.0 end;
18035    if {!$::OUTEditableP} {
18036	$::OUT configure -state disabled
18037    }
18038    ShowMessage [_ "Results transferred to test data."]
18039}
18040
18041#Copy test data from the clipboard.
18042proc LoadTestDataFromClipboard {} {
18043    global InputDataFromWindowP;
18044    set sel "";
18045
18046    if {[catch {set sel [selection get -selection CLIPBOARD -type UTF8_STRING]}]} {
18047	ShowMessage [_ "The clipboard is empty."];
18048	return;
18049    }
18050    $::IND configure -state normal
18051    $::IND insert insert $sel;
18052    set InputDataFromWindowP 1;
18053    if {!$::INDEditableP} {
18054	$::IND configure -state disabled
18055    }
18056    ShowMessage [_ "Loaded test data from clipboard."];
18057}
18058
18059proc LoadTestInputData {args} {		# Optional filename argument
18060    global InData;
18061    global InputDataFromWindowP;
18062    global PipeP;
18063
18064    if {$PipeP} {
18065	set new [read stdin];
18066	set InDataFile [_ "pipe to stdin"];
18067    } else {
18068	if {[llength $args] > 0} {
18069	    set InDataFile [lindex $args 0];
18070	} else {
18071	    set InDataFile [tk_getOpenFile];
18072	}
18073	if {$InDataFile != ""} {
18074	    if {[catch {open $InDataFile "r"} InDataHandle ] != 0} {
18075		ShowMessage [format [_ "Unable to open test input data file %s."] [MinimizeFileName $InDataFile]];
18076		return;
18077	    }
18078	    fconfigure $InDataHandle -encoding $::Pars(TestDataEncoding);
18079	    set new [read $InDataHandle];
18080	    close $InDataHandle;
18081	} else {
18082	    ShowMessage [_ "No file name specified for test data."];
18083	    return;
18084	}
18085    }
18086    if {$new == ""} {
18087	ShowMessage [format [_ "Unable to read test input data from file %s."] \
18088			 [MinimizeFileName $InDataFile]];
18089	return;
18090    }
18091    $::IND configure -state normal
18092    $::IND insert insert $new;
18093    set InputDataFromWindowP 1;
18094    if {!$::INDEditableP} {
18095	$::IND configure -state disabled
18096    }
18097    ShowMessage [format [_ "Loaded test data from %s."] [MinimizeFileName $InDataFile]]
18098}
18099
18100proc SaveTestInputData {} {
18101    global InData;
18102    global InputDataFromWindowP
18103
18104    if {$InputDataFromWindowP} {
18105	set InData [$::IND get 1.0 end];
18106    }
18107    if {$InData == ""} {
18108	ShowMessage [_ "There is no test data to save."];
18109	return;
18110    }
18111    set InputSaveFile [tk_getSaveFile -initialfile [_ "SavedTestData"]];
18112    if {$InputSaveFile != ""} {
18113	if {[catch {open $InputSaveFile "w+"} InputSaveHandle ] != 0} {
18114	    ShowMessage [format [_ "Unable to open file %s to save test data."] [MinimizeFileName $InputSaveFile]];
18115	    return ;
18116        }
18117
18118	if {[string equal $::Pars(TestDataEncoding) utf-8]} {
18119	    #There's no point incurring the overhead of pwe if we don't need to
18120	    fconfigure $InputSaveHandle -encoding utf-8
18121	    puts $InputSaveHandle $InData
18122	} else {
18123	    if {[catch {PutWithEncoding $InputSaveHandle $::Pars(TestDataEncoding) $InData} msg] != 0} {
18124	    } else {
18125		PutNL $InputSaveHandle
18126		set msg [format [_ "Test data saved in %s."] [MinimizeFileName $InputSaveFile]];
18127	    }
18128	}
18129	close $InputSaveHandle;
18130	ShowMessage $msg
18131    }
18132}
18133
18134proc ClearOutput {} {
18135    $::OUT configure -state normal
18136    $::OUT delete 1.0 end;
18137    if {!$::OUTEditableP} {
18138	LockOutput;
18139    }
18140}
18141
18142proc EditOutput {} {
18143    global OutputFromWindowP;
18144    $::OUT configure -state normal
18145    set OutputFromWindowP 1;
18146    set ::OUTEditableP 1;
18147    focus -force $::OUT;
18148}
18149
18150proc LockOutput {} {
18151    global OutputFromWindowP;
18152    $::OUT configure -state disabled;
18153    set OutputFromWindowP 0;
18154    set ::OUTEditableP 0;
18155}
18156
18157proc ClearOutputComparisonData {} {
18158    $::COM configure -state normal
18159    $::COM delete 1.0 end;
18160    if {!$::COMEditableP} {
18161	$::COM configure -state disabled
18162    }
18163}
18164
18165proc EditOutputComparisonData {} {
18166    global ComparisonDataFromWindowP
18167
18168    $::COM configure -state normal
18169    set ComparisonDataFromWindowP 1;
18170    set ::COMEditableP 1;
18171    focus -force $::COM;
18172}
18173
18174proc LoadOutputComparisonData {} {
18175    global ComparisonDataFromWindowP;
18176
18177    set ComparisonDataFile [tk_getOpenFile];
18178    if {$ComparisonDataFile != ""} {
18179	if {[catch {open $ComparisonDataFile "r"} ComparisonDataHandle ] != 0} {
18180	    ShowMessage [format [_ "Unable to open comparison data file %s."] \
18181			     [MinimizeFileName $ComparisonDataFile]];
18182	    return;
18183        }
18184	fconfigure $ComparisonDataHandle -encoding $::Pars(ComparisonDataEncoding)
18185        set new [read $ComparisonDataHandle];
18186        if {$new == ""} {
18187	    ShowMessage [format [_ "Unable to read comparison data from file %s."] \
18188			     [MinimizeFileName $ComparisonDataFile]];
18189	    return;
18190        }
18191	$::COM configure -state normal
18192	$::COM insert insert $new;
18193        close $ComparisonDataHandle;
18194	set ComparisonputDataFromWindowP 1;
18195	if {!$::COMEditableP} {
18196	    $::COM configure -state disabled
18197	}
18198	ShowMessage [_ "Loaded comparison data."]
18199    }
18200}
18201
18202proc LoadOutputComparisonDataFromClipboard {} {
18203    global ComparisonDataFromWindowP;
18204    set sel "";
18205
18206    if {[catch {set sel [selection get -selection CLIPBOARD -type UTF8_STRING]}]} {
18207	ShowMessage [_ "The clipboard is empty."];
18208	return;
18209    }
18210    $::COM configure -state normal
18211    $::COM insert insert $sel;
18212    set ComparisonputDataFromWindowP 1;
18213    if {!$::COMEditableP} {
18214	$::COM configure -state disabled
18215    }
18216    ShowMessage [_ "Loaded comparison data from clipboard."]
18217}
18218
18219proc SaveResultsComparisonData {} {
18220    global ComparisonData;
18221    global ComparisonDataFromWindowP
18222
18223    if {$ComparisonDataFromWindowP} {
18224	set ComparisonData [$::COM get 1.0 end];
18225	set ComparisonData [string trim $ComparisonData]; #Avoid single whitespace
18226    }
18227    if {$ComparisonData == ""} {
18228	ShowMessage [_ "There is no comparison data to save."];
18229	return;
18230    }
18231    set ComparisonSaveFile [tk_getSaveFile -initialfile [_ "SavedComparisonData"]];
18232    if {$ComparisonSaveFile != ""} {
18233	if {[catch {open $ComparisonSaveFile "w+"} ComparisonSaveHandle ] != 0} {
18234	    ShowMessage [format [_ "Unable to open file %s to save comparison data."] \
18235			     [MinimizeFileName $ComparisonSaveFile]];
18236	    return;
18237        }
18238
18239	if {[string equal $::ComparisonDataEncoding utf-8]} {
18240	    #There's no point incurring the overhead of pwe if we don't need to
18241	    fconfigure $ComparisonSaveHandle -encoding utf-8
18242	    puts $ComparisonSaveHandle $ComparisonData;
18243	} else {
18244	    if {[catch {PutWithEncoding $ComparisonSaveHandle $::Pars(ComparisonDataEncoding) $ComparisonData} msg] != 0} {
18245	    } else {
18246		PutNL $ComparisonSaveHandle
18247		set msg [format [_ "Comparison data saved in %s."] [MinimizeFileName $ComparisonSaveFile]];
18248	    }
18249	}
18250	close $ComparisonSaveHandle;
18251	ShowMessage $msg
18252    }
18253}
18254
18255
18256#Return: -1 on error
18257#         0 if output and intended are the same
18258#         1 if output and intended are different
18259
18260proc RunDiff {AutoP} {
18261    global DiffResultFile;
18262    global TempCompFile;
18263    global TempOutputFile;
18264    global TempSortFile;
18265    global ComparisonDataFromWindowP;
18266    global ComparisonData;
18267    global RegexpResult;
18268    global errorCode;
18269    global GNUDiffP;
18270
18271    #Get the comparison data from the window if in edit mode
18272    if {$ComparisonDataFromWindowP} {
18273	set ComparisonData [$::COM get 1.0 end];
18274	set ComparisonData [string trim $ComparisonData]; #Avoid single whitespace
18275    }
18276    if {$ComparisonData == ""} {
18277	if {$AutoP == 0} {
18278	    ShowMessage [_ "No comparison data is available."];
18279	}
18280	return -1;
18281    }
18282
18283    #Write output data to temporary file.
18284    #For now just do it all the time, but we can save on i/o and
18285    #only do it when it isn't already there.
18286    #Note that we need to sort no matter what so that the diff won't
18287    #fail due to different ordering.
18288    if {[catch {open $TempSortFile "w"} TempSortHandle ] != 0} {
18289	ShowMessage [format [_ "Unable to open temporary sort file %s."] $TempSortFile];
18290	return -1;
18291    }
18292    puts $TempSortHandle $RegexpResult;
18293    close $TempSortHandle;
18294    if {[catch {exec sort $TempSortFile > $TempOutputFile} ] != 0} {
18295	ShowMessage [_ "RunDiff: sort failed"];
18296	return -1;
18297    }
18298
18299    #Write comparison data to temporary test file
18300    if {[catch {open $TempSortFile "w"} TempSortHandle ] != 0} {
18301	ShowMessage [format [_ "Unable to open temporary sort file %s."] $TempSortFile];
18302	return -1;
18303    }
18304    puts $TempSortHandle $ComparisonData;
18305    close $TempSortHandle;
18306    if {[catch {exec sort $TempSortFile > $TempCompFile} ] != 0} {
18307	ShowMessage [_ "RunDiff: sort failed"];
18308	return -1;
18309    }
18310
18311    #We have to put the output of diff into a file because tcl considers any
18312    #non-zero exit status to be an error and aborts rather than return the contents
18313    #of stdout. Therefore, even if there is no real error but diff is merely
18314    #reporting that there was a difference, because diff returns 1, no output
18315    #is returned by exec.
18316    if {$GNUDiffP} {
18317	if { [catch { exec diff -B --side-by-side --suppress-common-lines $TempOutputFile $TempCompFile > $DiffResultFile} rval]  == 0} {
18318	    return 0;
18319	}
18320    } else {
18321	if { [catch { exec diff $TempOutputFile $TempCompFile > $DiffResultFile} rval]  == 0} {
18322	    return 0;
18323	}
18324    }
18325
18326    set ChildError [lindex [split $errorCode] 3];
18327    if {$ChildError > 1} {
18328	ShowMessage [_ "Error executing comparison."]
18329	return -1;
18330    }
18331    return 1;
18332}
18333
18334proc ShowDiffResult {{AutoP 0}} {
18335    global DiffPopup;
18336    global DiffResultFile;
18337
18338    if {!$::UseDiffP} {
18339	ShowMessage [_ "Diff is not available."]
18340	return ;
18341    }
18342
18343    set rstat [RunDiff $AutoP];
18344
18345    if {$rstat == -1} {return $rstat};
18346    if {$rstat == 0} {
18347	ShowMessage [_ "Result of executing regexp and comparison data are identical."];
18348	return $rstat;
18349    }
18350
18351    ShowMessage [_ "Result of executing regexp and comparison data are different."];
18352    #Get text from file and display in pop-up.
18353    if {[catch {open  $DiffResultFile "r"} DiffResultHandle] != 0} {
18354	ShowMessage [format [_ "Unable to open comparison result file %s."] $DiffResultFile];
18355	error "";
18356    } else {
18357	set DiffResults [read $DiffResultHandle];
18358    }
18359    if {$DiffResults == ""} {
18360	ShowMessage [format [_ "Unable to read comparison results from file %s"] $DiffResultFile ];
18361	return $rstat;
18362    }
18363    destroy $DiffPopup;
18364    set DiffPopup [CreateTextDisplay [_ "Differences between Regexp Output and Comparison Data"] 80 12]
18365    BindKeys $DiffPopup;
18366    AppendToTextDisplay $DiffPopup $DiffResults;
18367    return $rstat;
18368}
18369
18370
18371proc AssignEncoding {x e} {
18372    set ::Pars($x) $e
18373    destroy .encm
18374}
18375
18376set EncodingInfo(ascii) "The usual Roman encoding used in the United States\nand other English-speaking countries."
18377set EncodingInfo(big5) "A 2-byte encoding used in Taiwan and Hong Kong for\ntraditional Chinese characters."
18378set EncodingInfo(cp437) "This is the original encoding of the IBM PC."
18379set EncodingInfo(cp737) "An IBM PC encoding for the Greek alphabet."
18380set EncodingInfo(cp775) "MS DOS 8-bit encoding for Estonian, Latvian, and Lithuanian"
18381set EncodingInfo(cp850) "MS DOS Multilingual Latin I"
18382set EncodingInfo(cp852) "MS DOS Central European (Czech, Polish, Rumanian, Slovak)"
18383set EncodingInfo(cp855) "A rarely used MS DOS encoding of Cyrillic"
18384set EncodingInfo(cp857) "MS DOS Turkish"
18385set EncodingInfo(cp860) "MS DOS Portuguese"
18386set EncodingInfo(cp861) "MS DOS Icelandic/Nordic"
18387set EncodingInfo(cp862) "MS DOS Hebrew"
18388set EncodingInfo(cp863) "MS DOS Canadian French"
18389set EncodingInfo(cp864) "MS DOS Arabic"
18390set EncodingInfo(cp865) "MS DOS Nordic"
18391set EncodingInfo(cp866) "MS DOS Cyrillic"
18392set EncodingInfo(cp869) "MS DOS Modern Greek"
18393set EncodingInfo(cp874) "MS Windows Thai"
18394set EncodingInfo(cp932) "An MS Windows extension of Shift JIS for Japanese"
18395set EncodingInfo(cp936) "An MS Windows version of the GBK encoding of Chinese"
18396set EncodingInfo(cp949) "An MS Windows encoding for Korean Hangul similar to EUC-KR."
18397set EncodingInfo(cp950) "The Microsoft version of the Big5 encoding of traditional Chinese"
18398set EncodingInfo(cp1250) "MS Windows Latin 2"
18399set EncodingInfo(cp1251) "MS Windows Cyrillic"
18400set EncodingInfo(cp1252) "MS Windows Latin 1"
18401set EncodingInfo(cp1253) "MS Windows Greek"
18402set EncodingInfo(cp1254) "MS Windows Turkish"
18403set EncodingInfo(cp1255) "MS Windows Hebrew"
18404set EncodingInfo(cp1256) "MS Windows Arabic"
18405set EncodingInfo(cp1257) "MS Windows Estonian, Latvian, Lithuanian"
18406set EncodingInfo(cp1258) "MS Windows Vietnamese"
18407set EncodingInfo(dingbats) "Dingbats"
18408set EncodingInfo(ebcdic) "IBM's 8-bit encoding for American English"
18409set EncodingInfo(euc-cn) "The version of the Extended Unix Code multibyte encoding\nused for simplified Chinese."
18410set EncodingInfo(euc-jp) "The version of the Extended Unix Code multibyte encoding\nused for Japanese "
18411set EncodingInfo(euc-kr) "The version of the Extended Unix Code multibyte encoding\nused for Korean"
18412set EncodingInfo(gb1988) "A two-byte Chinese encoding."
18413set EncodingInfo(gb2312) "This is the principal character set used by the\nPeople's Republic of China\nencoded as EUC-CN."
18414set EncodingInfo(gb2312-raw) "This is the principal character set used by the\nPeople's Republic of China.\nThis is the version without further encoding as EUC-CN."
18415set EncodingInfo(gb12345) "An expansion of GB2312 for Chinese."
18416set EncodingInfo(identity) "The identity mapping. Maps everything onto itself."
18417set EncodingInfo(iso2022) "A multibyte encoding for Chinese."
18418set EncodingInfo(iso2022-jp)  "A multibyte encoding for Japanese."
18419set EncodingInfo(iso2022-kr)  "A multibyte encoding for Korean."
18420set EncodingInfo(iso8859-1) "This is the ASCII extension known as Latin-1,\nused for most Western European languages."
18421set EncodingInfo(iso8859-2) "This is an ASCII extension used for Eastern European languages."
18422set EncodingInfo(iso8859-3) "This is an ASCII extension used for Esperanto and Maltese."
18423set EncodingInfo(iso8859-4) "This is an ASCII extension used for Northern European languages."
18424set EncodingInfo(iso8859-5) "This is an ASCII extension used for Cyrillic."
18425set EncodingInfo(iso8859-6) "This is an ASCII extension used for Arabic."
18426set EncodingInfo(iso8859-7) "This is an ASCII extension used for Greek."
18427set EncodingInfo(iso8859-8) "This is an ASCII extension used for Hebrew."
18428set EncodingInfo(iso8859-9) "This is an ASCII extension used for Turkish."
18429set EncodingInfo(iso8859-10) "This is an ASCII extension used for Nordic languages."
18430set EncodingInfo(iso8859-11) "This is an ASCII extension used for Thai."
18431set EncodingInfo(iso8859-13) "This is an ASCII extension used for languages of the Baltic Rim."
18432set EncodingInfo(iso8859-14) "This is the ASCII extension used primarily for Celtic languages."
18433set EncodingInfo(iso8859-15) "This is the ASCII extension for Western European languages\nthat modernizes Latin-1."
18434set EncodingInfo(iso8859-16) "This is the ASCII extension used primarily South-Eastern European langauges."
18435set EncodingInfo(jis0201) "An eight-bit Japanese encoding containing roughly speaking ASCII plus kana"
18436set EncodingInfo(jis0208) "A two-byte Japanese encoding containing 6355 kanji plus\nkana, roman letters, Greek, adn Cyrillic"
18437set EncodingInfo(jis0212) "This is a supplementary set of characters for Japanese"
18438set EncodingInfo(koi8-r) "Russian Cyrillic"
18439set EncodingInfo(koi8-u) "Ukrainian Cyrillic"
18440set EncodingInfo(ksc5601) "A double-byte encoding for the Korean writing system"
18441set EncodingInfo(macCentEuro) "Macintosh Central European"
18442set EncodingInfo(macCroatian) "Macintosh Croatian"
18443set EncodingInfo(macCyrillic) "Macintosh Cyrillic"
18444set EncodingInfo(macDingbats) "Macintosh Dingbats"
18445set EncodingInfo(macGreek) "Macintosh Greek"
18446set EncodingInfo(macIceland) "Macintosh Icelandic"
18447set EncodingInfo(macJapan) "Macintosh Japanese"
18448set EncodingInfo(macRoman) "Macintosh Roman"
18449set EncodingInfo(macRomania) "Macintosh Romanian"
18450set EncodingInfo(macThai) "Macintosh Thai"
18451set EncodingInfo(macTurkish) "Macintosh Turkish"
18452set EncodingInfo(macUkraine) "Macintosh Ukrainian"
18453set EncodingInfo(pascii) "The Perso-Arabic Standard for Computer Information Interchange.\nThis is the Indian government 8-bit encoding for\nthe languages written in Arabic letters:\nArabic, Kashmiri, Persian, Sindhi, and Urdu.\nIt is the Arabic script counterpart to ISCII."
18454set EncodingInfo(shiftjis) "A two-byte encoding for the Japanese writing system standardized as JIS  0208."
18455set EncodingInfo(symbol) "Adobe Symbol font encoding"
18456set EncodingInfo(tis-620) "This is the Thai national standard 8-bit encoding."
18457set EncodingInfo(ucs-2be) "This is a two-byte encoding of the Basic Monolingual Plane of Unicode, with the two bytes in big-endian order."
18458set EncodingInfo(unicode) "This is a synonym for UCS-2, the two-byte encoding of the\nBasic Monolingual Plane of Unicode"
18459set EncodingInfo(utf-8) "The UTF-8 variable length encoding for Unicode."
18460
18461#Subtract list b from a
18462proc SubtractList {a b} {
18463    array set tmp {}
18464    foreach x $a {
18465	set tmp($x) ""
18466    }
18467    foreach y $b {
18468	if {[info exists tmp($y)]} {
18469	    unset tmp($y)
18470	}
18471    }
18472    return [array names tmp]
18473}
18474
18475proc PopupSelectEncoding {x} {
18476    set xp 3
18477    set yp 3
18478    if {[winfo exists .encm]} {
18479	raise .encm
18480	return
18481    }
18482    set w [toplevel .encm]
18483    wm title $w [_ "Select encoding"]
18484    set wf [frame $w.f -border 2 -relief flat -bg salmon]
18485    pack $wf
18486    .encm configure -bg salmon
18487    set EncodingList [lsort -dictionary \
18488		  [SubtractList [encoding names] [list "identity" "X11ControlChars"]]]
18489    set EncodingCnt [llength $EncodingList]
18490    set PerRow [expr int(0.7 * ceil(sqrt($EncodingCnt)))]
18491    set Rows [expr ceil(double($EncodingCnt)/double($PerRow))]
18492    set Total [expr $PerRow * $Rows]
18493
18494    for {set k 0} {$k < $Total} {incr k} {
18495	set row [expr $k/$PerRow]
18496	set col [expr $k%$PerRow]
18497	set c $wf.r${row}c${col}
18498	if {$k < $EncodingCnt} {
18499	    set Encoding [lindex $EncodingList $k]
18500	    button $c -text $Encoding \
18501		-padx $xp -pady $yp -command "AssignEncoding $x $Encoding" \
18502		-activeforeground $::ColorSpecs(Menu,ActiveForeground) \
18503		-activebackground $::ColorSpecs(Menu,ActiveBackground)
18504	    if {[string equal $Encoding $::Pars($x)]} {
18505		$c configure -bg coral -relief raised
18506	    }
18507	    if {[info exists ::EncodingInfo($Encoding)]} {
18508		balloonhelp_for $c $::EncodingInfo($Encoding)
18509	    }
18510	} else {
18511	    label $c
18512	}
18513	set LastRow $row;
18514	set LastCol $col;
18515    }
18516    #Lay the buttons and labels out in a grid.
18517    for {set row 0} {$row <= $LastRow} {incr row} {
18518	set line [list];
18519	for {set col 0} {$col <= $LastCol} {incr col} {
18520	    set cell [format ".encm.f.r%dc%d" $row $col]
18521	    lappend line $cell
18522	}
18523	eval grid $line -sticky news;
18524    }
18525    raise .encm
18526}
18527
18528
18529proc CreateTextDisplay {title width height} {
18530    set bg $::ColorSpecs(TextDisplay,Background)
18531    set fg $::ColorSpecs(TextDisplay,Foreground)
18532    set top [new_dialog_create Textdisplay]
18533    wm title $top $title
18534    set info [dialog_info $top]
18535    scrollbar $info.sbar -command "$info.text yview"
18536    pack $info.sbar  -side right -expand 0 -fill y
18537    text $info.text -height $height -width $width -font MainFont -wrap word \
18538	-yscrollcommand "$info.sbar set" -background $bg -foreground $fg \
18539	-exportselection 1;
18540    pack $info.text -side left -expand yes -fill both
18541    $info.text configure -state disabled
18542    bind $info.sbar <<B3>> "ScrollbarMoveBigIncrement $info.sbar 0.2 %x %y"
18543    return $top
18544}
18545
18546proc AppendToTextDisplay {top mesg} {
18547    set info [dialog_info $top]
18548    $info.text configure -state normal
18549    $info.text insert end $mesg
18550    $info.text configure -state disabled
18551}
18552
18553set linkNum 0;
18554proc AppendLinkToTextDisplay {top mesg LinkCode} {
18555    global linkNum
18556    set info [dialog_info $top]
18557    $info.text configure -state normal
18558    set tag "link[incr linkNum]"
18559    bind $info.text <ButtonPress> break
18560    $info.text insert end $mesg [list body $tag]
18561    $info.text tag configure $tag -foreground red -underline 1
18562    $info.text tag bind $tag <Enter> \
18563        "$info.text tag configure $tag -foreground blue"
18564    $info.text tag bind $tag <Leave> \
18565        "$info.text tag configure $tag -foreground red"
18566    $info.text tag bind $tag <ButtonPress> \
18567        "$LinkCode"
18568    $info.text configure -state disabled
18569}
18570
18571#This is Cameron Laird's procedure
18572proc launchBrowser url {
18573    global tcl_platform
18574
18575    # It *is* generally a mistake to switch on $tcl_platform(os), particularly
18576    # in comparison to $tcl_platform(platform).  For now, let's just regard it
18577    # as a stylistic variation subject to debate.
18578    switch $tcl_platform(os) {
18579        Darwin {
18580	    set command [list open $url]
18581        }
18582        HP-UX -
18583        Linux  -
18584        SunOS {
18585	    foreach executable {mozilla netscape iexplorer opera lynx
18586		w3m links galeon konqueror mosaic firefox amaya
18587		browsex elinks} {
18588		set executable [auto_execok $executable]
18589		if [string length $executable] {
18590		    # Do you want to mess with -remote?  How about other browsers?
18591		    set command [list $executable $url &]
18592		    break
18593		}
18594	    }
18595        }
18596        {Windows 95} -
18597        {Windows NT} {
18598	    set command "[auto_execok start] {} [list $url]"
18599        }
18600    }
18601    if [info exists command] {
18602        if [catch {exec {expand}$command} err] {
18603	    tk_messageBox -icon error -message "error '$err' with '$command'"
18604        }
18605    } else {
18606        tk_messageBox -icon error -message \
18607	    "Please tell CL that ($tcl_platform(os), $tcl_platform(platform)) is not yet ready for browsing."
18608    }
18609}
18610
18611proc ShowWebPage {url} {
18612    global BrowserPIDS;
18613
18614    if {[string equal $::System MacOSX]} {
18615	lappend BrowserPIDS [exec osascript -e "\"open location $url\""]
18616	return
18617    }
18618
18619    set BrowserFound 0;
18620    foreach Browser $::BrowserList {
18621	if { [string length [auto_execok $Browser]]} {
18622	    set BrowserFound 1;
18623	    break ;
18624	} else {
18625	    ShowMessage [format \
18626	     [_ "The browser %s is not available on this machine or not in your path."]\
18627		 $Browser];
18628	}
18629    }
18630    if {$BrowserFound} {
18631	lappend BrowserPIDS [exec $Browser $url &]
18632    } else {
18633	ShowMessage [_ "No browser on the browser list was located."]
18634    }
18635}
18636
18637proc WebManual {} {
18638    global ManualPath;
18639    global ManualURL;
18640
18641    if {[file exists $ManualPath] == 0} {
18642	ShowMessage [format [_ "Manual not found at location %s"] $ManualPath];
18643	return ;
18644    }
18645    ShowWebPage $ManualURL;
18646}
18647
18648proc OSName {} {
18649    set OS $::tcl_platform(os);
18650    if {$OS == "Linux"} {set OS "GNU/Linux"};
18651    return [format "%s %s" $OS  $::tcl_platform(osVersion)]
18652}
18653
18654proc BugReports {} {
18655    global Version;
18656
18657    if {[PopupDown BugReports] ==1} {return}
18658    set BugReportPopup [CreateTextDisplay [_ "Bug Reports"] 62 21];
18659    set ::PopupList(BugReports) $BugReportPopup;
18660    BindKeys $BugReportPopup;
18661    AppendToTextDisplay $BugReportPopup [_ "Report bugs to: billposer@alum.mit.edu.\n"];
18662    AppendToTextDisplay $BugReportPopup [_ "Please include the following information:\n\n"];
18663    AppendToTextDisplay $BugReportPopup [_ "  What version of the program are you using?\n"];
18664    AppendToTextDisplay $BugReportPopup [format [_ "    (This is version %s \[%s\].)\n\n"] $Version [ProgramTimeDateStamp]];
18665    AppendToTextDisplay $BugReportPopup [_ "  What operating system are you running?.\n"];
18666    AppendToTextDisplay $BugReportPopup [format [_ "    (This is %s.)\n\n"] [OSName]];
18667    AppendToTextDisplay $BugReportPopup [_ "  What window system are you using?.\n"];
18668    AppendToTextDisplay $BugReportPopup [format [_ "    (This is %s.)\n\n"] $::WindowSystem]
18669    AppendToTextDisplay $BugReportPopup [_ "  What version of tcl/tk are you using?.\n"];
18670    AppendToTextDisplay $BugReportPopup [format [_ "    (This is version %s.)\n\n"] [info patchlevel]];
18671    AppendToTextDisplay $BugReportPopup [_ "If the problem is restricted to a particular program, what program is it and what version is it?\n"];
18672    AppendToTextDisplay $BugReportPopup [format [_ "  (The current program is %s \[%s\].\n"] [NameProgram] $::ProgramInfo($::program,version)]
18673    AppendToTextDisplay $BugReportPopup [_ "  The \'This Program\' entry on the Help menu will provide\n  version information for the currently selected program.)\n\n"]
18674    AppendToTextDisplay $BugReportPopup [_ "Bug reports may be sent in any language that I can read without too much trouble or am trying to learn or improve. These include:\n\n"];
18675    AppendLinkToTextDisplay $BugReportPopup [_ "\tCatal\u00e1"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=cat};
18676    AppendToTextDisplay $BugReportPopup "\n";
18677    AppendLinkToTextDisplay $BugReportPopup [_ "\tDakelh/\u1455\u15F8\u14A1"] {ShowWebPage http://ydli.org}
18678    AppendToTextDisplay $BugReportPopup "\n";
18679    AppendLinkToTextDisplay $BugReportPopup [_ "\tDeutsch"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=deu};
18680    AppendToTextDisplay $BugReportPopup "\n";
18681    AppendLinkToTextDisplay $BugReportPopup [_ "\tEnglish"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=eng};
18682    AppendToTextDisplay $BugReportPopup "\n";
18683    AppendLinkToTextDisplay $BugReportPopup "\tEspa\u00F1ol" {ShowWebPage http://www.ethnologue.com/show_language.asp?code=spa}
18684    AppendToTextDisplay $BugReportPopup "\n";
18685    AppendLinkToTextDisplay $BugReportPopup [_ "\tEsperanto"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=epo};
18686    AppendToTextDisplay $BugReportPopup "\n";
18687    AppendLinkToTextDisplay $BugReportPopup "\tFran\u00e7ais" {ShowWebPage http://www.ethnologue.com/show_language.asp?code=fra};
18688    AppendToTextDisplay $BugReportPopup "\n";
18689    AppendLinkToTextDisplay $BugReportPopup [_ "\t\uD55C\uAD6D\uB9D0"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=kor};
18690    AppendToTextDisplay $BugReportPopup "\n";
18691    AppendLinkToTextDisplay $BugReportPopup [_ "\tItaliano"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=ita};
18692    AppendToTextDisplay $BugReportPopup "\n";
18693    AppendLinkToTextDisplay $BugReportPopup [_ "\t\u65E5\u672C\u8A9E"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=jpn};
18694    AppendToTextDisplay $BugReportPopup "\n";
18695    AppendLinkToTextDisplay $BugReportPopup [_ "\tLatina Lingua"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=lat};
18696    AppendToTextDisplay $BugReportPopup "\n";
18697    AppendLinkToTextDisplay $BugReportPopup [_ "\tNederlands"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=nld};
18698    AppendToTextDisplay $BugReportPopup "\n";
18699    AppendLinkToTextDisplay $BugReportPopup [_ "\t\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=pan};
18700    AppendToTextDisplay $BugReportPopup "\n";
18701    AppendLinkToTextDisplay $BugReportPopup [_ "\tPortugu\u00EAs"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=por};
18702    AppendToTextDisplay $BugReportPopup "\n";
18703    AppendLinkToTextDisplay $BugReportPopup [_ "\tT\u00FCrk\u00E7e"] {ShowWebPage http://www.ethnologue.com/show_language.asp?code=tur};
18704    AppendToTextDisplay $BugReportPopup "\n\n";
18705    AppendToTextDisplay $BugReportPopup [_ "Please note that in many cases although I can understand the language my ability to respond in it may be limited.\n"];
18706    AppendToTextDisplay $BugReportPopup "\n";
18707
18708    AppendToTextDisplay $BugReportPopup "\n";
18709}
18710
18711proc CommandLineOptions {} {
18712    if {[PopupDown CommandLineOptions] ==1} {return}
18713    set po [CreateTextDisplay [_ "Command Line Options"] 60 13];
18714    set ::PopupList(CommandLineOptions) $po;
18715    BindKeys $po;
18716    AppendToTextDisplay $po [_ "Usage: redet \[options\] (<input text file>)\n\n"];
18717    AppendToTextDisplay $po [_ "  -c <filename>   load class definitions from <filename>\n"];
18718    AppendToTextDisplay $po [_ "  -d              set the debug flag\n"];
18719    AppendToTextDisplay $po [_ "  -F <filename>   read a feature list from <filename> >\n"];
18720    AppendToTextDisplay $po [_ "  -f              read input text from standard input\n"];
18721    AppendToTextDisplay $po [_ "  -H              do not read the history file\n"];
18722    AppendToTextDisplay $po [_ "  -h              provide help\n"];
18723    AppendToTextDisplay $po [_ "  -I <filename>   read <filename> as the init file\n"];
18724    AppendToTextDisplay $po [_ "  -i              do not read the init file\n"];
18725    AppendToTextDisplay $po [_ "  -l <locale>     set the locale to <locale>\n"];
18726    AppendToTextDisplay $po [_ "  -n              disable feature testing\n"];
18727    AppendToTextDisplay $po [_ "  -o              use deprecated old style init files\n"];
18728    AppendToTextDisplay $po [_ "  -P              list the programs supported"];
18729    AppendToTextDisplay $po [_ "  -p <program>    set the program to <program>\n"];
18730    AppendToTextDisplay $po [_ "  -s              start up in substitution mode\n"];
18731    AppendToTextDisplay $po [_ "  -t              enable feature test debugging\n"];
18732    AppendToTextDisplay $po [_ "  -v              identify version"];
18733}
18734
18735
18736proc About {} {
18737    global Version;
18738    if {[PopupDown About] ==1} {return}
18739    set AboutPopup [CreateTextDisplay [_ "About This Program"] 72 12]
18740    set ::PopupList(About) $AboutPopup;
18741    BindKeys $AboutPopup;
18742    AppendToTextDisplay $AboutPopup [format [_ "This is Redet version %s \[%s\]."] $Version [ProgramTimeDateStamp]];
18743    AppendToTextDisplay $AboutPopup [_ " It is a tool for developing, testing, and executing regular expressions."];
18744    AppendToTextDisplay $AboutPopup [_ " You can obtain the latest version of Redet from: "];
18745    AppendLinkToTextDisplay $AboutPopup "http://www.billposer.org/Software/redet.html." {ShowWebPage http://www.billposer.org/Software/redet.html};
18746    AppendToTextDisplay $AboutPopup "\n\n";
18747    AppendToTextDisplay $AboutPopup "Copyright (C) 2003-2008 William J. Poser (billposer@alum.mit.edu).";
18748    AppendToTextDisplay $AboutPopup [_ "This program is free software; you can redistribute it and/or modify it under the terms of version 3 of the GNU General Public License as published by the Free Software Foundation."];
18749    AppendToTextDisplay $AboutPopup "\n\n";
18750    AppendToTextDisplay $AboutPopup [_ "This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"];
18751    AppendToTextDisplay $AboutPopup [_ "See the GNU General Public License for more details."];
18752    AppendToTextDisplay $AboutPopup "\n\n";
18753    AppendToTextDisplay $AboutPopup [_ "You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA."];
18754}
18755
18756proc Description {} {
18757    if {[PopupDown Description] ==1} {return}
18758    set DescriptionPopup [CreateTextDisplay "Description" 60 12]
18759    set ::PopupList(Description) $DescriptionPopup;
18760    AppendToTextDisplay $DescriptionPopup "This program allows you to construct regular\
18761 expressions and test them against input data by executing any of a variety of search\
18762 programs, editors, and programming languages that support regular expressions.\
18763 A variety of regular expression  notations are therefore supported.\
18764 One window is devoted to the test data. The test data may\
18765 be loaded from a file, entered by typing in the window, or constructed by editing data loaded\
18766 from a file. The user may also enter data representing the intended output of execution of the\
18767 regular expression. This data too may be loaded from a file, entered in the associated window\
18768 (which appears if needed), or constructed by editing data loaded from a file. If such comparison\
18769 data is supplied, the program will automatically compare the actual output with the intended\
18770 output and report on any differences. Comparisons may also be triggered by means of a menu\
18771 button. This allows the user to correct errors in the comparison data, or test a hypothesis\
18772 about what is wrong, by editing the data in the window and rerunning the comparison.\
18773 When a suitable regular expression has been constructed it may be saved to a file.\
18774 For each program, a palette of regular expression constructions available in that\
18775 program is provided, from which entries may be copied into the regular expression\
18776 window by means of a mouse click. Additional palette entries may be supplied by the\
18777 user in his or her initialization file.
18778\
18779
18780The full reference manual is available on-line at:
18781    http://www.billposer.org/Software/RedetManual.html"
18782}
18783
18784
18785#Uncomment these to make them the default once it is possible to restore explicit focus
18786#set FocusFollowsMouseP 1;
18787#tk_focusFollowsMouse;
18788
18789proc ShowUnicodeGCP {} {
18790    global PopupLines;
18791    global SortUnicodeRangesByCodepointP;
18792    if {[PopupDown ShowUnicodeGCP] ==1} {return}
18793    set po [CreateTextDisplay [_ "Unicode General Character Properties"] 50 $PopupLines];
18794    set ::PopupList(ShowUnicodeGCP) $po;
18795    BindKeys $po;
18796    AppendToTextDisplay $po [_ "Single letters represent major classes. "]
18797    AppendToTextDisplay $po [_ "Two letter sequences represent subclasses. "]
18798    AppendToTextDisplay $po [_ "Note that some regular expression engines may not implement all classes.\n"]
18799    AppendToTextDisplay $po "\n";
18800    AppendToTextDisplay $po [format "L\t%s\n" [_ "letter"]];
18801    AppendToTextDisplay $po "\n";
18802    AppendToTextDisplay $po [format "\tLu\t%s\n" [_ "uppercase letter, e.g. A (U+0041)"]];
18803    AppendToTextDisplay $po [format "\tLl\t%s\n" [_ "lowercase letter, e.g. a (U+0061"]];
18804    AppendToTextDisplay $po [format "\tLt\t%s\n" [_ "titlecase letter, e.g. \u01C8 (U+01C8)"]];
18805    AppendToTextDisplay $po [format "\tL&\t%s\n" [_ "union of upper, lower and title-case letters"]];
18806    AppendToTextDisplay $po [format "\tLm\t%s\n" [_ "modifier letter, e.g. \u02B0 (U+02B0)"]];
18807    AppendToTextDisplay $po [format "\tLo\t%s\n" [_ "other letter, e.g. \u05D0 (U+05D0) "]];
18808    AppendToTextDisplay $po "\n";
18809    AppendToTextDisplay $po [format "N\t%s\n" [_ "number"]];
18810    AppendToTextDisplay $po "\n";
18811    AppendToTextDisplay $po [format "\tNd\t%s\n" [_ "decimal digit, e.g. 3 (U+0033)"]];
18812    AppendToTextDisplay $po [format "\tNl\t%s\n" [_ "letter number, e.g. \u3023 (U+3023)"]];
18813    AppendToTextDisplay $po [format "\tNo\t%s\n" [_ "other number, e.g. \u00B3 (U+00B3)"]];
18814    AppendToTextDisplay $po "\n";
18815    AppendToTextDisplay $po [format "P\t%s\n" [_ "punctuation"]];
18816    AppendToTextDisplay $po "\n";
18817    AppendToTextDisplay $po [format "\tPc\t%s\n" [_ "punctuation - connector, e.g. \u203F (U+203F)"]];
18818    AppendToTextDisplay $po [format "\tPd\t%s\n" [_ "punctuation - dash"]];
18819    AppendToTextDisplay $po [format "\tPs\t%s\n" [_ "punctuation - open"]];
18820    AppendToTextDisplay $po [format "\tPe\t%s\n" [_ "punctuation - close"]];
18821    AppendToTextDisplay $po [format "\tPi\t%s\n" [_ "punctuation - initial quote"]];
18822    AppendToTextDisplay $po [format "\tPf\t%s\n" [_ "punctuation - final quote"]];
18823    AppendToTextDisplay $po [format "\tPo\t%s\n" [_ "punctuation - other"]];
18824    AppendToTextDisplay $po "\n";
18825    AppendToTextDisplay $po [format "S\t%s\n" [_ "symbol"]];
18826    AppendToTextDisplay $po "\n";
18827    AppendToTextDisplay $po [format "\tSm\t%s\n" [_ "math symbol, .e.g \u2245 (U+2245)"]];
18828    AppendToTextDisplay $po [format "\tSc\t%s\n" [_ "currency symbol, e.g. \u20A0 (U+20A0)"]];
18829    AppendToTextDisplay $po [format "\tSk\t%s\n" [_ "modifier symbol, e.g. \u005E (U+005E)"]];
18830    AppendToTextDisplay $po [format "\tSo\t%s\n" [_ "other symbol, e.g. \u00AE (U+00AE)"]];
18831    AppendToTextDisplay $po "\n";
18832    AppendToTextDisplay $po [format "Z\t%s\n" [_ "separator"]];
18833    AppendToTextDisplay $po "\n";
18834    AppendToTextDisplay $po [format "\tZs\t%s\n" [_ "space separator"]];
18835    AppendToTextDisplay $po [format "\tZl\t%s\n" [_ "line separator"]];
18836    AppendToTextDisplay $po [format "\tZp\t%s\n" [_ "paragraph separator"]];
18837    AppendToTextDisplay $po "\n";
18838    AppendToTextDisplay $po [format "M\t%s\n" [_ "mark"]];
18839    AppendToTextDisplay $po "\n";
18840    AppendToTextDisplay $po [format "\tMn\t%s\n" [_ "non-spacing mark"]];
18841    AppendToTextDisplay $po [format "\tMc\t%s\n" [_ "spacing combining mark"]];
18842    AppendToTextDisplay $po [format "\tMe\t%s\n" [_ "enclosing mark"]];
18843    AppendToTextDisplay $po "\n";
18844    AppendToTextDisplay $po [format "C\t%s\n" [_ "other"]];
18845    AppendToTextDisplay $po "\n";
18846    AppendToTextDisplay $po [format "\tCc\t%s\n" [_ "other - control"]];
18847    AppendToTextDisplay $po [format "\tCf\t%s\n" [_ "other - format"]];
18848    AppendToTextDisplay $po [format "\tCo\t%s\n" [_ "other - private use"]];
18849    AppendToTextDisplay $po [format "\tCn\t%s\n" [_ "other - not assigned"]];
18850
18851}
18852
18853proc ShowUnicodeRanges {} {
18854    global SortUnicodeRangesByCodepointP;
18855    global PopupLines;
18856    if {[PopupDown ShowUnicodeRanges] ==1} {return}
18857    set po  [CreateTextDisplay [_ "Unicode Ranges"] 78 $PopupLines];
18858    set ::PopupList(ShowUnicodeRanges) $po;
18859    BindKeys $po;
18860    if {$SortUnicodeRangesByCodepointP} {
18861	AppendToTextDisplay $po [format "%-52s  \[0x000000-0x00007F\]\n" [_ "Basic Latin"]];
18862	AppendToTextDisplay $po [format "%-52s  \[0x000080-0x0000FF\]\n" [_ "C1 Controls and Latin-1 Supplement"]];
18863	AppendToTextDisplay $po [format "%-52s  \[0x000100-0x00017F\]\n" [_ "Latin Extended-A"]];
18864	AppendToTextDisplay $po [format "%-52s  \[0x000180-0x00024F\]\n" [_ "Latin Extended-B"]];
18865	AppendToTextDisplay $po [format "%-52s  \[0x000250-0x0002AF\]\n" [_ "IPA Extensions"]];
18866	AppendToTextDisplay $po [format "%-52s  \[0x0002B0-0x0002FF\]\n" [_ "Spacing Modifier Letters"]];
18867	AppendToTextDisplay $po [format "%-52s  \[0x000300-0x00036F\]\n" [_ "Combining Diacritical Marks"]];
18868	AppendToTextDisplay $po [format "%-52s  \[0x000370-0x0003FF\]\n" [_ "Greek/Coptic"]];
18869	AppendToTextDisplay $po [format "%-52s  \[0x000400-0x0004FF\]\n" [_ "Cyrillic"]];
18870	AppendToTextDisplay $po [format "%-52s  \[0x000500-0x00052F\]\n" [_ "Cyrillic Supplement"]];
18871	AppendToTextDisplay $po [format "%-52s  \[0x000530-0x00058F\]\n" [_ "Armenian"]];
18872	AppendToTextDisplay $po [format "%-52s  \[0x000590-0x0005FF\]\n" [_ "Hebrew"]];
18873	AppendToTextDisplay $po [format "%-52s  \[0x000600-0x0006FF\]\n" [_ "Arabic"]];
18874	AppendToTextDisplay $po [format "%-52s  \[0x000700-0x00074F\]\n" [_ "Syriac"]];
18875	AppendToTextDisplay $po [format "%-52s  \[0x000750-0x00077F\]\n" [_ "Arabic Supplement"]];
18876	AppendToTextDisplay $po [format "%-52s  \[0x000780-0x0007BF\]\n" [_ "Thaana"]];
18877	AppendToTextDisplay $po [format "%-52s  \[0x0007C0-0x0007FF\]\n" [_ "Nko"]];
18878	AppendToTextDisplay $po [format "%-52s  \[0x0008C0-0x0008FF\]\n" [_ "Undefined"]];
18879	AppendToTextDisplay $po [format "%-52s  \[0x000900-0x00097F\]\n" [_ "Devanagari"]];
18880	AppendToTextDisplay $po [format "%-52s  \[0x000980-0x0009FF\]\n" [_ "Bengali/Assamese"]];
18881	AppendToTextDisplay $po [format "%-52s  \[0x000A00-0x000A7F\]\n" [_ "Gurmukhi"]];
18882	AppendToTextDisplay $po [format "%-52s  \[0x000A80-0x000AFF\]\n" [_ "Gujarati"]];
18883	AppendToTextDisplay $po [format "%-52s  \[0x000B00-0x000B7F\]\n" [_ "Oriya"]];
18884	AppendToTextDisplay $po [format "%-52s  \[0x000B80-0x000BFF\]\n" [_ "Tamil"]];
18885	AppendToTextDisplay $po [format "%-52s  \[0x000C00-0x000C7F\]\n" [_ "Telugu"]];
18886	AppendToTextDisplay $po [format "%-52s  \[0x000C80-0x000CFF\]\n" [_ "Kannada"]];
18887	AppendToTextDisplay $po [format "%-52s  \[0x000D00-0x000D7F\]\n" [_ "Malayalam"]];
18888	AppendToTextDisplay $po [format "%-52s  \[0x000D80-0x000DFF\]\n" [_ "Sinhala"]];
18889	AppendToTextDisplay $po [format "%-52s  \[0x000E00-0x000E7F\]\n" [_ "Thai"]];
18890	AppendToTextDisplay $po [format "%-52s  \[0x000E80-0x000EFF\]\n" [_ "Lao"]];
18891	AppendToTextDisplay $po [format "%-52s  \[0x000F00-0x000FFF\]\n" [_ "Tibetan"]];
18892	AppendToTextDisplay $po [format "%-52s  \[0x001000-0x00109F\]\n" [_ "Myanmar"]];
18893	AppendToTextDisplay $po [format "%-52s  \[0x0010A0-0x0010FF\]\n" [_ "Georgian"]];
18894	AppendToTextDisplay $po [format "%-52s  \[0x001100-0x0011FF\]\n" [_ "Hangul Jamo"]];
18895	AppendToTextDisplay $po [format "%-52s  \[0x001200-0x00137F\]\n" [_ "Ethiopic"]];
18896	AppendToTextDisplay $po [format "%-52s  \[0x001380-0x00139F\]\n" [_ "Ethiopic Supplement"]];
18897	AppendToTextDisplay $po [format "%-52s  \[0x0013A0-0x0013FF\]\n" [_ "Cherokee"]];
18898	AppendToTextDisplay $po [format "%-52s  \[0x001400-0x00167F\]\n" [_ "Unified Canadian Aboriginal Syllabics"]];
18899	AppendToTextDisplay $po [format "%-52s  \[0x001680-0x00169F\]\n" [_ "Ogham"]];
18900	AppendToTextDisplay $po [format "%-52s  \[0x0016A0-0x0016FF\]\n" [_ "Runic"]];
18901	AppendToTextDisplay $po [format "%-52s  \[0x001700-0x00171F\]\n" [_ "Tagalog"]];
18902	AppendToTextDisplay $po [format "%-52s  \[0x001720-0x00173F\]\n" [_ "Hanunoo"]];
18903	AppendToTextDisplay $po [format "%-52s  \[0x001740-0x00175F\]\n" [_ "Buhid"]];
18904	AppendToTextDisplay $po [format "%-52s  \[0x001760-0x00177F\]\n" [_ "Tagbanwa"]];
18905	AppendToTextDisplay $po [format "%-52s  \[0x001780-0x0017FF\]\n" [_ "Khmer"]];
18906	AppendToTextDisplay $po [format "%-52s  \[0x001800-0x0018AF\]\n" [_ "Mongolian"]];
18907	AppendToTextDisplay $po [format "%-52s  \[0x0018B0-0x0018FF\]\n" [_ "Undefined"]];
18908	AppendToTextDisplay $po [format "%-52s  \[0x001900-0x00194F\]\n" [_ "Limbu"]];
18909	AppendToTextDisplay $po [format "%-52s  \[0x001950-0x00197F\]\n" [_ "Tai Le"]];
18910	AppendToTextDisplay $po [format "%-52s  \[0x001980-0x0019DF\]\n" [_ "New Tai Lue"]];
18911	AppendToTextDisplay $po [format "%-52s  \[0x0019E0-0x0019FF\]\n" [_ "Khmer Symbols"]];
18912	AppendToTextDisplay $po [format "%-52s  \[0x001A00-0x001A1F\]\n" [_ "Buginese"]];
18913	AppendToTextDisplay $po [format "%-52s  \[0x001A20-0x001AFF\]\n" [_ "Undefined"]];
18914	AppendToTextDisplay $po [format "%-52s  \[0x001B00-0x001B7F\]\n" [_ "Balinese"]];
18915	AppendToTextDisplay $po [format "%-52s  \[0x001B80-0x001BBF\]\n" [_ "Sundanese"]];
18916	AppendToTextDisplay $po [format "%-52s  \[0x001BC0-0x001BFF\]\n" [_ "Undefined"]];
18917	AppendToTextDisplay $po [format "%-52s  \[0x001C00-0x001C4F\]\n" [_ "Lepcha"]];
18918	AppendToTextDisplay $po [format "%-52s  \[0x001C50-0x001C7F\]\n" [_ "Ol Chiki"]];
18919	AppendToTextDisplay $po [format "%-52s  \[0x001C80-0x001CFF\]\n" [_ "Undefined"]];
18920	AppendToTextDisplay $po [format "%-52s  \[0x001D00-0x001D7F\]\n" [_ "Phonetic Extensions"]];
18921	AppendToTextDisplay $po [format "%-52s  \[0x001D80-0x001DBF\]\n" [_ "Phonetic Extensions Supplement"]];
18922	AppendToTextDisplay $po [format "%-52s  \[0x001DC0-0x001DFF\]\n" [_ "Combining Diacritical Marks Supplement"]];
18923	AppendToTextDisplay $po [format "%-52s  \[0x001E00-0x001EFF\]\n" [_ "Latin Extended Additional"]];
18924	AppendToTextDisplay $po [format "%-52s  \[0x001F00-0x001FFF\]\n" [_ "Greek Extended"]];
18925	AppendToTextDisplay $po [format "%-52s  \[0x002000-0x00206F\]\n" [_ "General Punctuation"]];
18926	AppendToTextDisplay $po [format "%-52s  \[0x002070-0x00209F\]\n" [_ "Superscripts and Subscripts"]];
18927	AppendToTextDisplay $po [format "%-52s  \[0x0020A0-0x0020CF\]\n" [_ "Currency Symbols"]];
18928	AppendToTextDisplay $po [format "%-52s  \[0x0020D0-0x0020FF\]\n" [_ "Combining Diacritical Marks for Symbols"]];
18929	AppendToTextDisplay $po [format "%-52s  \[0x002100-0x00214F\]\n" [_ "Letterlike Symbols"]];
18930	AppendToTextDisplay $po [format "%-52s  \[0x002150-0x00218F\]\n" [_ "Number Forms"]];
18931	AppendToTextDisplay $po [format "%-52s  \[0x002190-0x0021FF\]\n" [_ "Arrows"]];
18932	AppendToTextDisplay $po [format "%-52s  \[0x002200-0x0022FF\]\n" [_ "Mathematical Operators"]];
18933	AppendToTextDisplay $po [format "%-52s  \[0x002300-0x0023FF\]\n" [_ "Miscellaneous Technical"]];
18934	AppendToTextDisplay $po [format "%-52s  \[0x002400-0x00243F\]\n" [_ "Control Pictures"]];
18935	AppendToTextDisplay $po [format "%-52s  \[0x002440-0x00245F\]\n" [_ "Optical Character Recognition"]];
18936	AppendToTextDisplay $po [format "%-52s  \[0x002460-0x0024FF\]\n" [_ "Enclosed Alphanumerics"]];
18937	AppendToTextDisplay $po [format "%-52s  \[0x002500-0x00257F\]\n" [_ "Box Drawing"]];
18938	AppendToTextDisplay $po [format "%-52s  \[0x002580-0x00259F\]\n" [_ "Block Elements"]];
18939	AppendToTextDisplay $po [format "%-52s  \[0x0025A0-0x0025FF\]\n" [_ "Geometric Shapes"]];
18940	AppendToTextDisplay $po [format "%-52s  \[0x002600-0x0026FF\]\n" [_ "Miscellaneous Symbols"]];
18941	AppendToTextDisplay $po [format "%-52s  \[0x002700-0x0027BF\]\n" [_ "Dingbats"]];
18942	AppendToTextDisplay $po [format "%-52s  \[0x0027C0-0x0027EF\]\n" [_ "Miscellaneous Mathematical Symbols-A"]];
18943	AppendToTextDisplay $po [format "%-52s  \[0x0027F0-0x0027FF\]\n" [_ "Supplemental Arrows-A"]];
18944	AppendToTextDisplay $po [format "%-52s  \[0x002800-0x0028FF\]\n" [_ "Braille Patterns"]];
18945	AppendToTextDisplay $po [format "%-52s  \[0x002900-0x00297F\]\n" [_ "Supplemental Arrows-B"]];
18946	AppendToTextDisplay $po [format "%-52s  \[0x002980-0x0029FF\]\n" [_ "Miscellaneous Mathematical Symbols-B"]];
18947	AppendToTextDisplay $po [format "%-52s  \[0x002A00-0x002AFF\]\n" [_ "Supplemental Mathematical Operators"]];
18948	AppendToTextDisplay $po [format "%-52s  \[0x002B00-0x002BFF\]\n" [_ "Miscellaneous Symbols and Arrows"]];
18949	AppendToTextDisplay $po [format "%-52s  \[0x002C00-0x002C5F\]\n" [_ "Glagolitic"]];
18950	AppendToTextDisplay $po [format "%-52s  \[0x002C60-0x002C7F\]\n" [_ "Latin Extended-C"]];
18951	AppendToTextDisplay $po [format "%-52s  \[0x002C80-0x002CFF\]\n" [_ "Coptic"]];
18952	AppendToTextDisplay $po [format "%-52s  \[0x002D00-0x002D2F\]\n" [_ "Georgian Supplement"]];
18953	AppendToTextDisplay $po [format "%-52s  \[0x002D30-0x002D7F\]\n" [_ "Tifinagh"]];
18954	AppendToTextDisplay $po [format "%-52s  \[0x002D80-0x002DDF\]\n" [_ "Ethiopic Extended"]];
18955	AppendToTextDisplay $po [format "%-52s  \[0x002E00-0x002E7F\]\n" [_ "Supplemental Punctuation"]];
18956	AppendToTextDisplay $po [format "%-52s  \[0x002E80-0x002EFF\]\n" [_ "CJK Radicals Supplement"]];
18957	AppendToTextDisplay $po [format "%-52s  \[0x002F00-0x002FDF\]\n" [_ "Kangxi Radicals"]];
18958	AppendToTextDisplay $po [format "%-52s  \[0x002FE0-0x002FEF\]\n" [_ "Undefined"]];
18959	AppendToTextDisplay $po [format "%-52s  \[0x002FF0-0x002FFF\]\n" [_ "Ideographic Description Characters"]];
18960	AppendToTextDisplay $po [format "%-52s  \[0x003000-0x00303F\]\n" [_ "CJK Symbols and Punctuation"]];
18961	AppendToTextDisplay $po [format "%-52s  \[0x003040-0x00309F\]\n" [_ "Hiragana"]];
18962	AppendToTextDisplay $po [format "%-52s  \[0x0030A0-0x0030FF\]\n" [_ "Katakana"]];
18963	AppendToTextDisplay $po [format "%-52s  \[0x003100-0x00312F\]\n" [_ "Bopomofo"]];
18964	AppendToTextDisplay $po [format "%-52s  \[0x003130-0x00318F\]\n" [_ "Hangul Compatibility Jamo"]];
18965	AppendToTextDisplay $po [format "%-52s  \[0x003190-0x00319F\]\n" [_ "Kanbun (Kunten)"]];
18966	AppendToTextDisplay $po [format "%-52s  \[0x0031A0-0x0031BF\]\n" [_ "Bopomofo Extended"]];
18967	AppendToTextDisplay $po [format "%-52s  \[0x0031C0-0x0031EF\]\n" [_ "CJK Strokes"]];
18968	AppendToTextDisplay $po [format "%-52s  \[0x0031F0-0x0031FF\]\n" [_ "Katakana Phonetic Extensions"]];
18969	AppendToTextDisplay $po [format "%-52s  \[0x003200-0x0032FF\]\n" [_ "Enclosed CJK Letters and Months"]];
18970	AppendToTextDisplay $po [format "%-52s  \[0x003300-0x0033FF\]\n" [_ "CJK Compatibility"]];
18971	AppendToTextDisplay $po [format "%-52s  \[0x003400-0x004DBF\]\n" [_ "CJK Unified Ideographs Extension A"]];
18972	AppendToTextDisplay $po [format "%-52s  \[0x004DC0-0x004DFF\]\n" [_ "Yijing Hexagram Symbols"]];
18973	AppendToTextDisplay $po [format "%-52s  \[0x004E00-0x009FAF\]\n" [_ "CJK Unified Ideographs"]];
18974	AppendToTextDisplay $po [format "%-52s  \[0x009FB0-0x009FFF\]\n" [_ "Undefined"]];
18975	AppendToTextDisplay $po [format "%-52s  \[0x00A000-0x00A48F\]\n" [_ "Yi Syllables"]];
18976	AppendToTextDisplay $po [format "%-52s  \[0x00A490-0x00A4CF\]\n" [_ "Yi Radicals"]];
18977	AppendToTextDisplay $po [format "%-52s  \[0x00A4D0-0x00A4FF\]\n" [_ "Undefined"]];
18978	AppendToTextDisplay $po [format "%-52s  \[0x00A500-0x00A63F\]\n" [_ "Vai"]];
18979	AppendToTextDisplay $po [format "%-52s  \[0x00A640-0x00A6FF\]\n" [_ "Undefined"]];
18980	AppendToTextDisplay $po [format "%-52s  \[0x00A700-0x00A71F\]\n" [_ "Modifier Tone Letters"]];
18981	AppendToTextDisplay $po [format "%-52s  \[0x00A720-0x00A7FF\]\n" [_ "Latin Extended-D"]];
18982	AppendToTextDisplay $po [format "%-52s  \[0x00A800-0x00A82F\]\n" [_ "Syloti Nagri"]];
18983	AppendToTextDisplay $po [format "%-52s  \[0x00A830-0x00A83F\]\n" [_ "Undefined"]];
18984	AppendToTextDisplay $po [format "%-52s  \[0x00A840-0x00A87F\]\n" [_ "Phags-pa"]];
18985	AppendToTextDisplay $po [format "%-52s  \[0x00A880-0x00A8DF\]\n" [_ "Saurashtra"]];
18986	AppendToTextDisplay $po [format "%-52s  \[0x00A8E0-0x00A8FF\]\n" [_ "Undefined"]];
18987	AppendToTextDisplay $po [format "%-52s  \[0x00A900-0x00A92F\]\n" [_ "Kayah Li"]];
18988	AppendToTextDisplay $po [format "%-52s  \[0x00A930-0x00A95F\]\n" [_ "Rejang"]];
18989	AppendToTextDisplay $po [format "%-52s  \[0x00A960-0x00A9FF\]\n" [_ "Undefined"]];
18990	AppendToTextDisplay $po [format "%-52s  \[0x00AA00-0x00AA5F\]\n" [_ "Cham"]];
18991	AppendToTextDisplay $po [format "%-52s  \[0x00A960-0x00ABFF\]\n" [_ "Undefined"]];
18992	AppendToTextDisplay $po [format "%-52s  \[0x00AC00-0x00D7AF\]\n" [_ "Hangul Syllables"]];
18993	AppendToTextDisplay $po [format "%-52s  \[0x00D7B0-0x00D7FF\]\n" [_ "Undefined"]];
18994	AppendToTextDisplay $po [format "%-52s  \[0x00D800-0x00DB7F\]\n" [_ "High Surrogate Area"]];
18995	AppendToTextDisplay $po [format "%-52s  \[0x00DB80-0x00DBFF\]\n" [_ "High Private Use Surrogate Area"]];
18996	AppendToTextDisplay $po [format "%-52s  \[0x00DC00-0x00DFFF\]\n" [_ "Low Surrogate Area"]];
18997	AppendToTextDisplay $po [format "%-52s  \[0x00E000-0x00E07F\]\n" [_ "Private Use Area - Conlang Tengwar"]];
18998	AppendToTextDisplay $po [format "%-52s  \[0x00E080-0x00E0FF\]\n" [_ "Private Use Area - Conlang brie.Cirth"]];
18999	AppendToTextDisplay $po [format "%-52s  \[0x00E2E0-0x00E2FF\]\n" [_ "Private Use Area - Conlang Xaini"]];
19000	AppendToTextDisplay $po [format "%-52s  \[0x00E300-0x00E33F\]\n" [_ "Private Use Area - Conlang Mizarian"]];
19001	AppendToTextDisplay $po [format "%-52s  \[0x00E340-0x00E35F\]\n" [_ "Private Use Area - Conlang Ziri:nka"]];
19002	AppendToTextDisplay $po [format "%-52s  \[0x00E360-0x00E37F\]\n" [_ "Private Use Area - Conlang Sarkai"]];
19003	AppendToTextDisplay $po [format "%-52s  \[0x00E380-0x00E3AF\]\n" [_ "Private Use Area - Conlang Thelwik"]];
19004	AppendToTextDisplay $po [format "%-52s  \[0x00E3B0-0x00E3FF\]\n" [_ "Private Use Area - Conlang Olaetyan"]];
19005	AppendToTextDisplay $po [format "%-52s  \[0x00E400-0x00E42F\]\n" [_ "Private Use Area - Conlang Niskloz"]];
19006	AppendToTextDisplay $po [format "%-52s  \[0x00E430-0x00E44F\]\n" [_ "Private Use Area - Conlang Kazat ?akkorou"]];
19007	AppendToTextDisplay $po [format "%-52s  \[0x00E450-0x00E46F\]\n" [_ "Private Use Area - Conlang Kazvarad"]];
19008	AppendToTextDisplay $po [format "%-52s  \[0x00E470-0x00E48F\]\n" [_ "Private Use Area - Conlang Zarkhand"]];
19009	AppendToTextDisplay $po [format "%-52s  \[0x00E490-0x00E4BF\]\n" [_ "Private Use Area - Conlang Rozhxh"]];
19010	AppendToTextDisplay $po [format "%-52s  \[0x00E4C0-0x00E4EF\]\n" [_ "Private Use Area - Conlang Serivelna"]];
19011	AppendToTextDisplay $po [format "%-52s  \[0x00E4F0-0x00E4FF\]\n" [_ "Private Use Area - Conlang Kelwathi"]];
19012	AppendToTextDisplay $po [format "%-52s  \[0x00E500-0x00E51F\]\n" [_ "Private Use Area - Conlang Saklor"]];
19013	AppendToTextDisplay $po [format "%-52s  \[0x00E520-0x00E54F\]\n" [_ "Private Use Area - Conlang Rynnan"]];
19014	AppendToTextDisplay $po [format "%-52s  \[0x00E550-0x00E57F\]\n" [_ "Private Use Area - Conlang Alzetjan"]];
19015	AppendToTextDisplay $po [format "%-52s  \[0x00E580-0x00E59F\]\n" [_ "Private Use Area - Conlang Telarasso"]];
19016	AppendToTextDisplay $po [format "%-52s  \[0x00E5A0-0x00E5BF\]\n" [_ "Private Use Area - Conlang Ssuraki"]];
19017	AppendToTextDisplay $po [format "%-52s  \[0x00E5C0-0x00E5DF\]\n" [_ "Private Use Area - Conlang Gargoyle"]];
19018	AppendToTextDisplay $po [format "%-52s  \[0x00E5E0-0x00E5FF\]\n" [_ "Private Use Area - Conlang Ophidian"]];
19019	AppendToTextDisplay $po [format "%-52s  \[0x00E600-0x00E62F\]\n" [_ "Private Use Area - Conlang Ferengi"]];
19020	AppendToTextDisplay $po [format "%-52s  \[0x00E630-0x00E64F\]\n" [_ "Private Use Area - Conlang Seussian Latin Extensions"]];
19021	AppendToTextDisplay $po [format "%-52s  \[0x00E650-0x00E68F\]\n" [_ "Private Use Area"]];
19022	AppendToTextDisplay $po [format "%-52s  \[0x00E690-0x00E6CF\]\n" [_ "Private Use Area - Conlang Ewellic"]];
19023	AppendToTextDisplay $po [format "%-52s  \[0x00E6D0-0x00E6FF\]\n" [_ "Private Use Area - Conlang Phaistos Disc"]];
19024	AppendToTextDisplay $po [format "%-52s  \[0x00E740-0x00E76F\]\n" [_ "Private Use Area - Conlang Unifon"]];
19025	AppendToTextDisplay $po [format "%-52s  \[0x00E770-0x00E77F\]\n" [_ "Private Use Area - Conlang Solresol"]];
19026	AppendToTextDisplay $po [format "%-52s  \[0x00E780-0x00E7FF\]\n" [_ "Private Use Area - Conlang Visible Speech"]];
19027	AppendToTextDisplay $po [format "%-52s  \[0x00E800-0x00E82F\]\n" [_ "Private Use Area - Conlang Monofon"]];
19028	AppendToTextDisplay $po [format "%-52s  \[0x00E830-0x00EDFF\]\n" [_ "Private Use Area"]];
19029	AppendToTextDisplay $po [format "%-52s  \[0x00EE00-0x00EEAF\]\n" [_ "Private Use Area - Hungarian Runes"]];
19030	AppendToTextDisplay $po [format "%-52s  \[0x00EEB0-0x00F89F\]\n" [_ "Private Use Area"]];
19031	AppendToTextDisplay $po [format "%-52s  \[0x00F8A0-0x00F8CF\]\n" [_ "Private Use Area - Conlang Aiha"]];
19032	AppendToTextDisplay $po [format "%-52s  \[0x00F8D0-0x00F8FF\]\n" [_ "Private Use Area - Conlang Klingon"]];
19033	AppendToTextDisplay $po [format "%-52s  \[0x00E000-0x00F8FF\]\n" [_ "Private Use Area"]];
19034	AppendToTextDisplay $po [format "%-52s  \[0x00F900-0x00FAFF\]\n" [_ "CJK Compatibility Ideographs"]];
19035	AppendToTextDisplay $po [format "%-52s  \[0x00FB00-0x00FB4F\]\n" [_ "Alphabetic Presentation Forms"]];
19036	AppendToTextDisplay $po [format "%-52s  \[0x00FB50-0x00FDFF\]\n" [_ "Arabic Presentation Forms-A"]];
19037	AppendToTextDisplay $po [format "%-52s  \[0x00FE00-0x00FE0F\]\n" [_ "Variation Selectors"]];
19038	AppendToTextDisplay $po [format "%-52s  \[0x00FE10-0x00FE1F\]\n" [_ "Vertical Forms"]];
19039	AppendToTextDisplay $po [format "%-52s  \[0x00FE20-0x00FE2F\]\n" [_ "Combining Half Marks"]];
19040	AppendToTextDisplay $po [format "%-52s  \[0x00FE30-0x00FE4F\]\n" [_ "CJK Compatibility Forms"]];
19041	AppendToTextDisplay $po [format "%-52s  \[0x00FE50-0x00FE6F\]\n" [_ "Small Form Variants"]];
19042	AppendToTextDisplay $po [format "%-52s  \[0x00FE70-0x00FEFF\]\n" [_ "Arabic Presentation Forms-B"]];
19043	AppendToTextDisplay $po [format "%-52s  \[0x00FF00-0x00FFEF\]\n" [_ "Halfwidth and Fullwidth Forms"]];
19044	AppendToTextDisplay $po [format "%-52s  \[0x00FFF0-0x00FFFF\]\n" [_ "Specials"]];
19045	AppendToTextDisplay $po [format "%-52s  \[0x010000-0x01007F\]\n" [_ "Linear B Syllabary"]];
19046	AppendToTextDisplay $po [format "%-52s  \[0x010080-0x0100FF\]\n" [_ "Linear B Ideograms"]];
19047	AppendToTextDisplay $po [format "%-52s  \[0x010100-0x01013F\]\n" [_ "Aegean Numbers"]];
19048	AppendToTextDisplay $po [format "%-52s  \[0x010140-0x01018F\]\n" [_ "Ancient Greek Numbers"]];
19049	AppendToTextDisplay $po [format "%-52s  \[0x010190-0x01027F\]\n" [_ "Undefined"]];
19050	AppendToTextDisplay $po [format "%-52s  \[0x010280-0x01029C\]\n" [_ "Lycian"]];
19051	AppendToTextDisplay $po [format "%-52s  \[0x01029D-0x01029F\]\n" [_ "Undefined"]];
19052	AppendToTextDisplay $po [format "%-52s  \[0x0102A0-0x0102D0\]\n" [_ "Carian"]];
19053	AppendToTextDisplay $po [format "%-52s  \[0x0102D1-0x0102FF\]\n" [_ "Undefined"]];
19054	AppendToTextDisplay $po [format "%-52s  \[0x010300-0x01032F\]\n" [_ "Old Italic"]];
19055	AppendToTextDisplay $po [format "%-52s  \[0x010330-0x01034F\]\n" [_ "Gothic"]];
19056	AppendToTextDisplay $po [format "%-52s  \[0x010380-0x01039F\]\n" [_ "Ugaritic"]];
19057	AppendToTextDisplay $po [format "%-52s  \[0x0103A0-0x0103DF\]\n" [_ "Old Persian"]];
19058	AppendToTextDisplay $po [format "%-52s  \[0x010400-0x01044F\]\n" [_ "Deseret"]];
19059	AppendToTextDisplay $po [format "%-52s  \[0x010450-0x01047F\]\n" [_ "Shavian"]];
19060	AppendToTextDisplay $po [format "%-52s  \[0x010480-0x0104AF\]\n" [_ "Osmanya"]];
19061	AppendToTextDisplay $po [format "%-52s  \[0x0104B0-0x0107FF\]\n" [_ "Undefined"]];
19062	AppendToTextDisplay $po [format "%-52s  \[0x010800-0x01083F\]\n" [_ "Cypriot Syllabary"]];
19063	AppendToTextDisplay $po [format "%-52s  \[0x010840-0x0108FF\]\n" [_ "Undefined"]];
19064	AppendToTextDisplay $po [format "%-52s  \[0x010900-0x01091F\]\n" [_ "Phoenician"]];
19065	AppendToTextDisplay $po [format "%-52s  \[0x010920-0x01093F\]\n" [_ "Lydian"]];
19066	AppendToTextDisplay $po [format "%-52s  \[0x010940-0x0109FF\]\n" [_ "Undefined"]];
19067	AppendToTextDisplay $po [format "%-52s  \[0x010A00-0x010A5F\]\n" [_ "Kharoshthi"]];
19068	AppendToTextDisplay $po [format "%-52s  \[0x010A60-0x011FFF\]\n" [_ "Undefined"]];
19069	AppendToTextDisplay $po [format "%-52s  \[0x012000-0x0123FF\]\n" [_ "Cuneiform"]];
19070	AppendToTextDisplay $po [format "%-52s  \[0x012400-0x01247F\]\n" [_ "Cuneiform Numbers and Punctuation"]];
19071	AppendToTextDisplay $po [format "%-52s  \[0x012480-0x01CFFF\]\n" [_ "Undefined"]];
19072	AppendToTextDisplay $po [format "%-52s  \[0x01D000-0x01D0FF\]\n" [_ "Byzantine Musical Symbols"]];
19073	AppendToTextDisplay $po [format "%-52s  \[0x01D100-0x01D1FF\]\n" [_ "Musical Symbols"]];
19074	AppendToTextDisplay $po [format "%-52s  \[0x01D200-0x01D24F\]\n" [_ "Ancient Greek Musical Notation"]];
19075	AppendToTextDisplay $po [format "%-52s  \[0x01D250-0x01D2FF\]\n" [_ "Undefined"]];
19076	AppendToTextDisplay $po [format "%-52s  \[0x01D300-0x01D35F\]\n" [_ "Tai Xuan Jing Symbols"]];
19077	AppendToTextDisplay $po [format "%-52s  \[0x01D360-0x01D37F\]\n" [_ "Counting Rod Numerals"]];
19078	AppendToTextDisplay $po [format "%-52s  \[0x01D380-0x01D3FF\]\n" [_ "Undefined"]];
19079	AppendToTextDisplay $po [format "%-52s  \[0x01D400-0x01D7FF\]\n" [_ "Mathematical Alphanumeric Symbols"]];
19080	AppendToTextDisplay $po [format "%-52s  \[0x01D800-0x01FFFF\]\n" [_ "Undefined"]];
19081	AppendToTextDisplay $po [format "%-52s  \[0x020000-0x02A6DF\]\n" [_ "CJK Unified Ideographs Extension B"]];
19082	AppendToTextDisplay $po [format "%-52s  \[0x02A6E0-0x02F7FF\]\n" [_ "Undefined"]];
19083	AppendToTextDisplay $po [format "%-52s  \[0x02F800-0x02FA1F\]\n" [_ "CJK Compatibility Ideographs Supplement"]];
19084	AppendToTextDisplay $po [format "%-52s  \[0x02FAB0-0x0DFFFF\]\n" [_ "Unused"]];
19085	AppendToTextDisplay $po [format "%-52s  \[0x0E0000-0x0E007F\]\n" [_ "Tags"]];
19086	AppendToTextDisplay $po [format "%-52s  \[0x0E0080-0x0E00FF\]\n" [_ "Unused"]];
19087	AppendToTextDisplay $po [format "%-52s  \[0x0E0100-0x0E01EF\]\n" [_ "Variation Selectors Supplement"]];
19088	AppendToTextDisplay $po [format "%-52s  \[0x0E01F0-0x0EFFFF\]\n" [_ "Unused"]];
19089	AppendToTextDisplay $po [format "%-52s  \[0x0F0000-0x0F0E69\]\n" [_ "Supplementary Private Use Area-A Conlang Kinya Syllables"]];
19090	AppendToTextDisplay $po [format "%-52s  \[0x0F0E70-0x0F16AF\]\n" [_ "Supplementary Private Use Area-A Conlang Pikto"]];
19091	AppendToTextDisplay $po [format "%-52s  \[0x0F16B0-0x0FFFFF\]\n" [_ "Supplementary Private Use Area-A"]];
19092	AppendToTextDisplay $po [format "%-52s  \[0x0FFFFE-0x0FFFFF\]\n" [_ "Unused"]];
19093	AppendToTextDisplay $po [format "%-52s  \[0x100000-0x10FFFD\]\n" [_ "Supplementary Private Use Area-B"]];
19094    } else {
19095	AppendToTextDisplay $po [format "%-52s  \[0x010100-0x01013F\]\n" [_ "Aegean Numbers"]];
19096	AppendToTextDisplay $po [format "%-52s  \[0x00FB00-0x00FB4F\]\n" [_ "Alphabetic Presentation Forms"]];
19097	AppendToTextDisplay $po [format "%-52s  \[0x01D200-0x01D24F\]\n" [_ "Ancient Greek Musical Notation"]];
19098	AppendToTextDisplay $po [format "%-52s  \[0x010140-0x01018F\]\n" [_ "Ancient Greek Numbers"]];
19099	AppendToTextDisplay $po [format "%-52s  \[0x00FB50-0x00FDFF\]\n" [_ "Arabic Presentation Forms-A"]];
19100	AppendToTextDisplay $po [format "%-52s  \[0x00FE70-0x00FEFF\]\n" [_ "Arabic Presentation Forms-B"]];
19101	AppendToTextDisplay $po [format "%-52s  \[0x000750-0x00077F\]\n" [_ "Arabic Supplement"]];
19102	AppendToTextDisplay $po [format "%-52s  \[0x000600-0x0006FF\]\n" [_ "Arabic"]];
19103	AppendToTextDisplay $po [format "%-52s  \[0x000530-0x00058F\]\n" [_ "Armenian"]];
19104	AppendToTextDisplay $po [format "%-52s  \[0x002190-0x0021FF\]\n" [_ "Arrows"]];
19105	AppendToTextDisplay $po [format "%-52s  \[0x001B00-0x001B7F\]\n" [_ "Balinese"]];
19106	AppendToTextDisplay $po [format "%-52s  \[0x000000-0x00007F\]\n" [_ "Basic Latin"]];
19107	AppendToTextDisplay $po [format "%-52s  \[0x000980-0x0009FF\]\n" [_ "Bengali/Assamese"]];
19108	AppendToTextDisplay $po [format "%-52s  \[0x002580-0x00259F\]\n" [_ "Block Elements"]];
19109	AppendToTextDisplay $po [format "%-52s  \[0x0031A0-0x0031BF\]\n" [_ "Bopomofo Extended"]];
19110	AppendToTextDisplay $po [format "%-52s  \[0x003100-0x00312F\]\n" [_ "Bopomofo"]];
19111	AppendToTextDisplay $po [format "%-52s  \[0x002500-0x00257F\]\n" [_ "Box Drawing"]];
19112	AppendToTextDisplay $po [format "%-52s  \[0x002800-0x0028FF\]\n" [_ "Braille Patterns"]];
19113	AppendToTextDisplay $po [format "%-52s  \[0x001A00-0x001A1F\]\n" [_ "Buginese"]];
19114	AppendToTextDisplay $po [format "%-52s  \[0x001740-0x00175F\]\n" [_ "Buhid"]];
19115	AppendToTextDisplay $po [format "%-52s  \[0x01D000-0x01D0FF\]\n" [_ "Byzantine Musical Symbols"]];
19116	AppendToTextDisplay $po [format "%-52s  \[0x000080-0x0000FF\]\n" [_ "C1 Controls and Latin-1 Supplement"]];
19117	AppendToTextDisplay $po [format "%-52s  \[0x002E80-0x002EFF\]\n" [_ "CJK Radicals Supplement"]];
19118	AppendToTextDisplay $po [format "%-52s  \[0x00F900-0x00FAFF\]\n" [_ "CJK Compatibility Ideographs"]];
19119	AppendToTextDisplay $po [format "%-52s  \[0x0031C0-0x0031EF\]\n" [_ "CJK Strokes"]];
19120	AppendToTextDisplay $po [format "%-52s  \[0x003300-0x0033FF\]\n" [_ "CJK Compatibility"]];
19121	AppendToTextDisplay $po [format "%-52s  \[0x00FE30-0x00FE4F\]\n" [_ "CJK Compatibility Forms"]];
19122	AppendToTextDisplay $po [format "%-52s  \[0x004E00-0x009FAF\]\n" [_ "CJK Unified Ideographs"]];
19123	AppendToTextDisplay $po [format "%-52s  \[0x02F800-0x02FA1F\]\n" [_ "CJK Compatibility Ideographs Supplement"]];
19124	AppendToTextDisplay $po [format "%-52s  \[0x003400-0x004DBF\]\n" [_ "CJK Unified Ideographs Extension A"]];
19125	AppendToTextDisplay $po [format "%-52s  \[0x020000-0x02A6DF\]\n" [_ "CJK Unified Ideographs Extension B"]];
19126	AppendToTextDisplay $po [format "%-52s  \[0x003000-0x00303F\]\n" [_ "CJK Symbols and Punctuation"]];
19127	AppendToTextDisplay $po [format "%-52s  \[0x0102A0-0x0102D0\]\n" [_ "Carian"]];
19128	AppendToTextDisplay $po [format "%-52s  \[0x00AA00-0x00AA5F\]\n" [_ "Cham"]];
19129	AppendToTextDisplay $po [format "%-52s  \[0x0013A0-0x0013FF\]\n" [_ "Cherokee"]];
19130	AppendToTextDisplay $po [format "%-52s  \[0x0020D0-0x0020FF\]\n" [_ "Combining Diacritical Marks for Symbols"]];
19131	AppendToTextDisplay $po [format "%-52s  \[0x001DC0-0x001DFF\]\n" [_ "Combining Diacritical Marks Supplement"]];
19132	AppendToTextDisplay $po [format "%-52s  \[0x000300-0x00036F\]\n" [_ "Combining Diacritical Marks"]];
19133	AppendToTextDisplay $po [format "%-52s  \[0x00FE20-0x00FE2F\]\n" [_ "Combining Half Marks"]];
19134	AppendToTextDisplay $po [format "%-52s  \[0x002400-0x00243F\]\n" [_ "Control Pictures"]];
19135	AppendToTextDisplay $po [format "%-52s  \[0x002C80-0x002CFF\]\n" [_ "Coptic"]];
19136	AppendToTextDisplay $po [format "%-52s  \[0x01D360-0x01D37F\]\n" [_ "Counting Rod Numerals"]];
19137	AppendToTextDisplay $po [format "%-52s  \[0x012400-0x01247F\]\n" [_ "Cuneiform Numbers and Punctuation"]];
19138	AppendToTextDisplay $po [format "%-52s  \[0x012000-0x0123FF\]\n" [_ "Cuneiform"]];
19139	AppendToTextDisplay $po [format "%-52s  \[0x0020A0-0x0020CF\]\n" [_ "Currency Symbols"]];
19140	AppendToTextDisplay $po [format "%-52s  \[0x010800-0x01083F\]\n" [_ "Cypriot Syllabary"]];
19141	AppendToTextDisplay $po [format "%-52s  \[0x000500-0x00052F\]\n" [_ "Cyrillic Supplement"]];
19142	AppendToTextDisplay $po [format "%-52s  \[0x000400-0x0004FF\]\n" [_ "Cyrillic"]];
19143	AppendToTextDisplay $po [format "%-52s  \[0x010400-0x01044F\]\n" [_ "Deseret"]];
19144	AppendToTextDisplay $po [format "%-52s  \[0x000900-0x00097F\]\n" [_ "Devanagari"]];
19145	AppendToTextDisplay $po [format "%-52s  \[0x002700-0x0027BF\]\n" [_ "Dingbats"]];
19146	AppendToTextDisplay $po [format "%-52s  \[0x002460-0x0024FF\]\n" [_ "Enclosed Alphanumerics"]];
19147	AppendToTextDisplay $po [format "%-52s  \[0x003200-0x0032FF\]\n" [_ "Enclosed CJK Letters and Months"]];
19148	AppendToTextDisplay $po [format "%-52s  \[0x002D80-0x002DDF\]\n" [_ "Ethiopic Extended"]];
19149	AppendToTextDisplay $po [format "%-52s  \[0x001380-0x00139F\]\n" [_ "Ethiopic Supplement"]];
19150	AppendToTextDisplay $po [format "%-52s  \[0x001200-0x00137F\]\n" [_ "Ethiopic"]];
19151	AppendToTextDisplay $po [format "%-52s  \[0x002000-0x00206F\]\n" [_ "General Punctuation"]];
19152	AppendToTextDisplay $po [format "%-52s  \[0x0025A0-0x0025FF\]\n" [_ "Geometric Shapes"]];
19153	AppendToTextDisplay $po [format "%-52s  \[0x002D00-0x002D2F\]\n" [_ "Georgian Supplement"]];
19154	AppendToTextDisplay $po [format "%-52s  \[0x0010A0-0x0010FF\]\n" [_ "Georgian"]];
19155	AppendToTextDisplay $po [format "%-52s  \[0x002C00-0x002C5F\]\n" [_ "Glagolitic"]];
19156	AppendToTextDisplay $po [format "%-52s  \[0x010330-0x01034F\]\n" [_ "Gothic"]];
19157	AppendToTextDisplay $po [format "%-52s  \[0x001F00-0x001FFF\]\n" [_ "Greek Extended"]];
19158	AppendToTextDisplay $po [format "%-52s  \[0x000370-0x0003FF\]\n" [_ "Greek/Coptic"]];
19159	AppendToTextDisplay $po [format "%-52s  \[0x000A80-0x000AFF\]\n" [_ "Gujarati"]];
19160	AppendToTextDisplay $po [format "%-52s  \[0x000A00-0x000A7F\]\n" [_ "Gurmukhi"]];
19161	AppendToTextDisplay $po [format "%-52s  \[0x00FF00-0x00FFEF\]\n" [_ "Halfwidth and Fullwidth Forms"]];
19162	AppendToTextDisplay $po [format "%-52s  \[0x003130-0x00318F\]\n" [_ "Hangul Compatibility Jamo"]];
19163	AppendToTextDisplay $po [format "%-52s  \[0x00AC00-0x00D7AF\]\n" [_ "Hangul Syllables"]];
19164	AppendToTextDisplay $po [format "%-52s  \[0x001100-0x0011FF\]\n" [_ "Hangul Jamo"]];
19165	AppendToTextDisplay $po [format "%-52s  \[0x001720-0x00173F\]\n" [_ "Hanunoo"]];
19166	AppendToTextDisplay $po [format "%-52s  \[0x000590-0x0005FF\]\n" [_ "Hebrew"]];
19167	AppendToTextDisplay $po [format "%-52s  \[0x00DB80-0x00DBFF\]\n" [_ "High Private Use Surrogate Area"]];
19168	AppendToTextDisplay $po [format "%-52s  \[0x00D800-0x00DB7F\]\n" [_ "High Surrogate Area"]];
19169	AppendToTextDisplay $po [format "%-52s  \[0x003040-0x00309F\]\n" [_ "Hiragana"]];
19170	AppendToTextDisplay $po [format "%-52s  \[0x000250-0x0002AF\]\n" [_ "IPA Extensions"]];
19171	AppendToTextDisplay $po [format "%-52s  \[0x002FF0-0x002FFF\]\n" [_ "Ideographic Description Characters"]];
19172	AppendToTextDisplay $po [format "%-52s  \[0x003190-0x00319F\]\n" [_ "Kanbun (Kunten)"]];
19173	AppendToTextDisplay $po [format "%-52s  \[0x002F00-0x002FDF\]\n" [_ "Kangxi Radicals"]];
19174	AppendToTextDisplay $po [format "%-52s  \[0x000C80-0x000CFF\]\n" [_ "Kannada"]];
19175	AppendToTextDisplay $po [format "%-52s  \[0x0031F0-0x0031FF\]\n" [_ "Katakana Phonetic Extensions"]];
19176	AppendToTextDisplay $po [format "%-52s  \[0x0030A0-0x0030FF\]\n" [_ "Katakana"]];
19177	AppendToTextDisplay $po [format "%-52s  \[0x00A900-0x00A92F\]\n" [_ "Kayah Li"]];
19178	AppendToTextDisplay $po [format "%-52s  \[0x010A00-0x010A5F\]\n" [_ "Kharoshthi"]];
19179	AppendToTextDisplay $po [format "%-52s  \[0x0019E0-0x0019FF\]\n" [_ "Khmer Symbols"]];
19180	AppendToTextDisplay $po [format "%-52s  \[0x001780-0x0017FF\]\n" [_ "Khmer"]];
19181	AppendToTextDisplay $po [format "%-52s  \[0x000E80-0x000EFF\]\n" [_ "Lao"]];
19182	AppendToTextDisplay $po [format "%-52s  \[0x001E00-0x001EFF\]\n" [_ "Latin Extended Additional"]];
19183	AppendToTextDisplay $po [format "%-52s  \[0x002C60-0x002C7F\]\n" [_ "Latin Extended-C"]];
19184	AppendToTextDisplay $po [format "%-52s  \[0x000180-0x00024F\]\n" [_ "Latin Extended-B"]];
19185	AppendToTextDisplay $po [format "%-52s  \[0x000100-0x00017F\]\n" [_ "Latin Extended-A"]];
19186	AppendToTextDisplay $po [format "%-52s  \[0x00A720-0x00A7FF\]\n" [_ "Latin Extended-D"]];
19187	AppendToTextDisplay $po [format "%-52s  \[0x001C00-0x001C4F\]\n" [_ "Lepcha"]];
19188	AppendToTextDisplay $po [format "%-52s  \[0x002100-0x00214F\]\n" [_ "Letterlike Symbols"]];
19189	AppendToTextDisplay $po [format "%-52s  \[0x001900-0x00194F\]\n" [_ "Limbu"]];
19190	AppendToTextDisplay $po [format "%-52s  \[0x010000-0x01007F\]\n" [_ "Linear B Syllabary"]];
19191	AppendToTextDisplay $po [format "%-52s  \[0x010080-0x0100FF\]\n" [_ "Linear B Ideograms"]];
19192	AppendToTextDisplay $po [format "%-52s  \[0x00DC00-0x00DFFF\]\n" [_ "Low Surrogate Area"]];
19193	AppendToTextDisplay $po [format "%-52s  \[0x010280-0x01029C\]\n" [_ "Lycian"]];
19194	AppendToTextDisplay $po [format "%-52s  \[0x010920-0x01093F\]\n" [_ "Lydian"]];
19195	AppendToTextDisplay $po [format "%-52s  \[0x000D00-0x000D7F\]\n" [_ "Malayalam"]];
19196	AppendToTextDisplay $po [format "%-52s  \[0x01D400-0x01D7FF\]\n" [_ "Mathematical Alphanumeric Symbols"]];
19197	AppendToTextDisplay $po [format "%-52s  \[0x002200-0x0022FF\]\n" [_ "Mathematical Operators"]];
19198	AppendToTextDisplay $po [format "%-52s  \[0x002300-0x0023FF\]\n" [_ "Miscellaneous Technical"]];
19199	AppendToTextDisplay $po [format "%-52s  \[0x0027C0-0x0027EF\]\n" [_ "Miscellaneous Mathematical Symbols-A"]];
19200	AppendToTextDisplay $po [format "%-52s  \[0x002980-0x0029FF\]\n" [_ "Miscellaneous Mathematical Symbols-B"]];
19201	AppendToTextDisplay $po [format "%-52s  \[0x002B00-0x002BFF\]\n" [_ "Miscellaneous Symbols and Arrows"]];
19202	AppendToTextDisplay $po [format "%-52s  \[0x002600-0x0026FF\]\n" [_ "Miscellaneous Symbols"]];
19203	AppendToTextDisplay $po [format "%-52s  \[0x00A700-0x00A71F\]\n" [_ "Modifier Tone Letters"]];
19204	AppendToTextDisplay $po [format "%-52s  \[0x001800-0x0018AF\]\n" [_ "Mongolian"]];
19205	AppendToTextDisplay $po [format "%-52s  \[0x01D100-0x01D1FF\]\n" [_ "Musical Symbols"]];
19206	AppendToTextDisplay $po [format "%-52s  \[0x001000-0x00109F\]\n" [_ "Myanmar"]];
19207	AppendToTextDisplay $po [format "%-52s  \[0x001980-0x0019DF\]\n" [_ "New Tai Lue"]];
19208	AppendToTextDisplay $po [format "%-52s  \[0x0007C0-0x0007FF\]\n" [_ "Nko"]];
19209	AppendToTextDisplay $po [format "%-52s  \[0x002150-0x00218F\]\n" [_ "Number Forms"]];
19210	AppendToTextDisplay $po [format "%-52s  \[0x001680-0x00169F\]\n" [_ "Ogham"]];
19211	AppendToTextDisplay $po [format "%-52s  \[0x001C50-0x001C7F\]\n" [_ "Ol Chiki"]];
19212	AppendToTextDisplay $po [format "%-52s  \[0x0103A0-0x0103DF\]\n" [_ "Old Persian"]];
19213	AppendToTextDisplay $po [format "%-52s  \[0x010300-0x01032F\]\n" [_ "Old Italic"]];
19214	AppendToTextDisplay $po [format "%-52s  \[0x002440-0x00245F\]\n" [_ "Optical Character Recognition"]];
19215	AppendToTextDisplay $po [format "%-52s  \[0x000B00-0x000B7F\]\n" [_ "Oriya"]];
19216	AppendToTextDisplay $po [format "%-52s  \[0x010480-0x0104AF\]\n" [_ "Osmanya"]];
19217	AppendToTextDisplay $po [format "%-52s  \[0x00A840-0x00A87F\]\n" [_ "Phags-pa"]];
19218	AppendToTextDisplay $po [format "%-52s  \[0x010900-0x01091F\]\n" [_ "Phoenician"]];
19219	AppendToTextDisplay $po [format "%-52s  \[0x001D00-0x001D7F\]\n" [_ "Phonetic Extensions"]];
19220	AppendToTextDisplay $po [format "%-52s  \[0x001D80-0x001DBF\]\n" [_ "Phonetic Extensions Supplement"]];
19221	AppendToTextDisplay $po [format "%-52s  \[0x00E580-0x00E59F\]\n" [_ "Private Use Area - Conlang Telarasso"]];
19222	AppendToTextDisplay $po [format "%-52s  \[0x00E800-0x00E82F\]\n" [_ "Private Use Area - Conlang Monofon"]];
19223	AppendToTextDisplay $po [format "%-52s  \[0x00E400-0x00E42F\]\n" [_ "Private Use Area - Conlang Niskloz"]];
19224	AppendToTextDisplay $po [format "%-52s  \[0x00E830-0x00EDFF\]\n" [_ "Private Use Area"]];
19225	AppendToTextDisplay $po [format "%-52s  \[0x00E470-0x00E48F\]\n" [_ "Private Use Area - Conlang Zarkhand"]];
19226	AppendToTextDisplay $po [format "%-52s  \[0x00EE00-0x00EEAF\]\n" [_ "Private Use Area - Hungarian Runes"]];
19227	AppendToTextDisplay $po [format "%-52s  \[0x00E4C0-0x00E4EF\]\n" [_ "Private Use Area - Conlang Serivelna"]];
19228	AppendToTextDisplay $po [format "%-52s  \[0x00EEB0-0x00F89F\]\n" [_ "Private Use Area"]];
19229	AppendToTextDisplay $po [format "%-52s  \[0x00E500-0x00E51F\]\n" [_ "Private Use Area - Conlang Saklor"]];
19230	AppendToTextDisplay $po [format "%-52s  \[0x00F8A0-0x00F8CF\]\n" [_ "Private Use Area - Conlang Aiha"]];
19231	AppendToTextDisplay $po [format "%-52s  \[0x00E550-0x00E57F\]\n" [_ "Private Use Area - Conlang Alzetjan"]];
19232	AppendToTextDisplay $po [format "%-52s  \[0x00F8D0-0x00F8FF\]\n" [_ "Private Use Area - Conlang Klingon"]];
19233	AppendToTextDisplay $po [format "%-52s  \[0x00E5C0-0x00E5DF\]\n" [_ "Private Use Area - Conlang Gargoyle"]];
19234	AppendToTextDisplay $po [format "%-52s  \[0x00E000-0x00F8FF\]\n" [_ "Private Use Area"]];
19235	AppendToTextDisplay $po [format "%-52s  \[0x00E600-0x00E62F\]\n" [_ "Private Use Area - Conlang Ferengi"]];
19236	AppendToTextDisplay $po [format "%-52s  \[0x00E630-0x00E64F\]\n" [_ "Private Use Area - Conlang Seussian Latin Extensions"]];
19237	AppendToTextDisplay $po [format "%-52s  \[0x00E650-0x00E68F\]\n" [_ "Private Use Area"]];
19238	AppendToTextDisplay $po [format "%-52s  \[0x00E690-0x00E6CF\]\n" [_ "Private Use Area - Conlang Ewellic"]];
19239	AppendToTextDisplay $po [format "%-52s  \[0x00E430-0x00E44F\]\n" [_ "Private Use Area - Conlang Kazat ?akkorou"]];
19240	AppendToTextDisplay $po [format "%-52s  \[0x00E740-0x00E76F\]\n" [_ "Private Use Area - Conlang Unifon"]];
19241	AppendToTextDisplay $po [format "%-52s  \[0x00E770-0x00E77F\]\n" [_ "Private Use Area - Conlang Solresol"]];
19242	AppendToTextDisplay $po [format "%-52s  \[0x00E380-0x00E3AF\]\n" [_ "Private Use Area - Conlang Thelwik"]];
19243	AppendToTextDisplay $po [format "%-52s  \[0x00E780-0x00E7FF\]\n" [_ "Private Use Area - Conlang Visible Speech"]];
19244	AppendToTextDisplay $po [format "%-52s  \[0x00E490-0x00E4BF\]\n" [_ "Private Use Area - Conlang Rozhxh"]];
19245	AppendToTextDisplay $po [format "%-52s  \[0x00E4F0-0x00E4FF\]\n" [_ "Private Use Area - Conlang Kelwathi"]];
19246	AppendToTextDisplay $po [format "%-52s  \[0x00E360-0x00E37F\]\n" [_ "Private Use Area - Conlang Sarkai"]];
19247	AppendToTextDisplay $po [format "%-52s  \[0x00E520-0x00E54F\]\n" [_ "Private Use Area - Conlang Rynnan"]];
19248	AppendToTextDisplay $po [format "%-52s  \[0x00E5E0-0x00E5FF\]\n" [_ "Private Use Area - Conlang Ophidian"]];
19249	AppendToTextDisplay $po [format "%-52s  \[0x00E000-0x00E07F\]\n" [_ "Private Use Area - Conlang Tengwar"]];
19250	AppendToTextDisplay $po [format "%-52s  \[0x00E6D0-0x00E6FF\]\n" [_ "Private Use Area - Conlang Phaistos Disc"]];
19251	AppendToTextDisplay $po [format "%-52s  \[0x00E080-0x00E0FF\]\n" [_ "Private Use Area - Conlang brie.Cirth"]];
19252	AppendToTextDisplay $po [format "%-52s  \[0x00E3B0-0x00E3FF\]\n" [_ "Private Use Area - Conlang Olaetyan"]];
19253	AppendToTextDisplay $po [format "%-52s  \[0x00E450-0x00E46F\]\n" [_ "Private Use Area - Conlang Kazvarad"]];
19254	AppendToTextDisplay $po [format "%-52s  \[0x00E5A0-0x00E5BF\]\n" [_ "Private Use Area - Conlang Ssuraki"]];
19255	AppendToTextDisplay $po [format "%-52s  \[0x00E2E0-0x00E2FF\]\n" [_ "Private Use Area - Conlang Xaini"]];
19256	AppendToTextDisplay $po [format "%-52s  \[0x00E300-0x00E33F\]\n" [_ "Private Use Area - Conlang Mizarian"]];
19257	AppendToTextDisplay $po [format "%-52s  \[0x00E340-0x00E35F\]\n" [_ "Private Use Area - Conlang Ziri:nka"]];
19258	AppendToTextDisplay $po [format "%-52s  \[0x00A930-0x00A95F\]\n" [_ "Rejang"]];
19259	AppendToTextDisplay $po [format "%-52s  \[0x0016A0-0x0016FF\]\n" [_ "Runic"]];
19260	AppendToTextDisplay $po [format "%-52s  \[0x00A880-0x00A8DF\]\n" [_ "Saurashtra"]];
19261	AppendToTextDisplay $po [format "%-52s  \[0x010450-0x01047F\]\n" [_ "Shavian"]];
19262	AppendToTextDisplay $po [format "%-52s  \[0x000D80-0x000DFF\]\n" [_ "Sinhala"]];
19263	AppendToTextDisplay $po [format "%-52s  \[0x00FE50-0x00FE6F\]\n" [_ "Small Form Variants"]];
19264	AppendToTextDisplay $po [format "%-52s  \[0x0002B0-0x0002FF\]\n" [_ "Spacing Modifier Letters"]];
19265	AppendToTextDisplay $po [format "%-52s  \[0x00FFF0-0x00FFFF\]\n" [_ "Specials"]];
19266	AppendToTextDisplay $po [format "%-52s  \[0x001B80-0x001BBF\]\n" [_ "Sundanese"]];
19267	AppendToTextDisplay $po [format "%-52s  \[0x002070-0x00209F\]\n" [_ "Superscripts and Subscripts"]];
19268	AppendToTextDisplay $po [format "%-52s  \[0x002A00-0x002AFF\]\n" [_ "Supplemental Mathematical Operators"]];
19269	AppendToTextDisplay $po [format "%-52s  \[0x0027F0-0x0027FF\]\n" [_ "Supplemental Arrows-A"]];
19270	AppendToTextDisplay $po [format "%-52s  \[0x002900-0x00297F\]\n" [_ "Supplemental Arrows-B"]];
19271	AppendToTextDisplay $po [format "%-52s  \[0x002E00-0x002E7F\]\n" [_ "Supplemental Punctuation"]];
19272	AppendToTextDisplay $po [format "%-52s  \[0x0F16B0-0x0FFFFF\]\n" [_ "Supplementary Private Use Area-A"]];
19273	AppendToTextDisplay $po [format "%-52s  \[0x100000-0x10FFFD\]\n" [_ "Supplementary Private Use Area-B"]];
19274	AppendToTextDisplay $po [format "%-52s  \[0x0F0E70-0x0F16AF\]\n" [_ "Supplementary Private Use Area-A Conlang Pikto"]];
19275	AppendToTextDisplay $po [format "%-52s  \[0x0F0000-0x0F0E69\]\n" [_ "Supplementary Private Use Area-A Conlang Kinya Syllables"]];
19276	AppendToTextDisplay $po [format "%-52s  \[0x00A800-0x00A82F\]\n" [_ "Syloti Nagri"]];
19277	AppendToTextDisplay $po [format "%-52s  \[0x000700-0x00074F\]\n" [_ "Syriac"]];
19278	AppendToTextDisplay $po [format "%-52s  \[0x001700-0x00171F\]\n" [_ "Tagalog"]];
19279	AppendToTextDisplay $po [format "%-52s  \[0x001760-0x00177F\]\n" [_ "Tagbanwa"]];
19280	AppendToTextDisplay $po [format "%-52s  \[0x0E0000-0x0E007F\]\n" [_ "Tags"]];
19281	AppendToTextDisplay $po [format "%-52s  \[0x01D300-0x01D35F\]\n" [_ "Tai Xuan Jing Symbols"]];
19282	AppendToTextDisplay $po [format "%-52s  \[0x001950-0x00197F\]\n" [_ "Tai Le"]];
19283	AppendToTextDisplay $po [format "%-52s  \[0x000B80-0x000BFF\]\n" [_ "Tamil"]];
19284	AppendToTextDisplay $po [format "%-52s  \[0x000C00-0x000C7F\]\n" [_ "Telugu"]];
19285	AppendToTextDisplay $po [format "%-52s  \[0x000780-0x0007BF\]\n" [_ "Thaana"]];
19286	AppendToTextDisplay $po [format "%-52s  \[0x000E00-0x000E7F\]\n" [_ "Thai"]];
19287	AppendToTextDisplay $po [format "%-52s  \[0x000F00-0x000FFF\]\n" [_ "Tibetan"]];
19288	AppendToTextDisplay $po [format "%-52s  \[0x002D30-0x002D7F\]\n" [_ "Tifinagh"]];
19289	AppendToTextDisplay $po [format "%-52s  \[0x010380-0x01039F\]\n" [_ "Ugaritic"]];
19290	AppendToTextDisplay $po [format "%-52s  \[0x00A4D0-0x00A4FF\]\n" [_ "Undefined"]];
19291	AppendToTextDisplay $po [format "%-52s  \[0x01D250-0x01D2FF\]\n" [_ "Undefined"]];
19292	AppendToTextDisplay $po [format "%-52s  \[0x002FE0-0x002FEF\]\n" [_ "Undefined"]];
19293	AppendToTextDisplay $po [format "%-52s  \[0x00A960-0x00A9FF\]\n" [_ "Undefined"]];
19294	AppendToTextDisplay $po [format "%-52s  \[0x001C80-0x001CFF\]\n" [_ "Undefined"]];
19295	AppendToTextDisplay $po [format "%-52s  \[0x009FB0-0x009FFF\]\n" [_ "Undefined"]];
19296	AppendToTextDisplay $po [format "%-52s  \[0x010840-0x0108FF\]\n" [_ "Undefined"]];
19297	AppendToTextDisplay $po [format "%-52s  \[0x001A20-0x001AFF\]\n" [_ "Undefined"]];
19298	AppendToTextDisplay $po [format "%-52s  \[0x0018B0-0x0018FF\]\n" [_ "Undefined"]];
19299	AppendToTextDisplay $po [format "%-52s  \[0x00A960-0x00ABFF\]\n" [_ "Undefined"]];
19300	AppendToTextDisplay $po [format "%-52s  \[0x0008C0-0x0008FF\]\n" [_ "Undefined"]];
19301	AppendToTextDisplay $po [format "%-52s  \[0x01D380-0x01D3FF\]\n" [_ "Undefined"]];
19302	AppendToTextDisplay $po [format "%-52s  \[0x00A8E0-0x00A8FF\]\n" [_ "Undefined"]];
19303	AppendToTextDisplay $po [format "%-52s  \[0x010190-0x01027F\]\n" [_ "Undefined"]];
19304	AppendToTextDisplay $po [format "%-52s  \[0x00A640-0x00A6FF\]\n" [_ "Undefined"]];
19305	AppendToTextDisplay $po [format "%-52s  \[0x01D800-0x01FFFF\]\n" [_ "Undefined"]];
19306	AppendToTextDisplay $po [format "%-52s  \[0x00A830-0x00A83F\]\n" [_ "Undefined"]];
19307	AppendToTextDisplay $po [format "%-52s  \[0x00D7B0-0x00D7FF\]\n" [_ "Undefined"]];
19308	AppendToTextDisplay $po [format "%-52s  \[0x010A60-0x011FFF\]\n" [_ "Undefined"]];
19309	AppendToTextDisplay $po [format "%-52s  \[0x02A6E0-0x02F7FF\]\n" [_ "Undefined"]];
19310	AppendToTextDisplay $po [format "%-52s  \[0x010940-0x0109FF\]\n" [_ "Undefined"]];
19311	AppendToTextDisplay $po [format "%-52s  \[0x012480-0x01CFFF\]\n" [_ "Undefined"]];
19312	AppendToTextDisplay $po [format "%-52s  \[0x0104B0-0x0107FF\]\n" [_ "Undefined"]];
19313	AppendToTextDisplay $po [format "%-52s  \[0x01029D-0x01029F\]\n" [_ "Undefined"]];
19314	AppendToTextDisplay $po [format "%-52s  \[0x0102D1-0x0102FF\]\n" [_ "Undefined"]];
19315	AppendToTextDisplay $po [format "%-52s  \[0x001BC0-0x001BFF\]\n" [_ "Undefined"]];
19316	AppendToTextDisplay $po [format "%-52s  \[0x001400-0x00167F\]\n" [_ "Unified Canadian Aboriginal Syllabics"]];
19317	AppendToTextDisplay $po [format "%-52s  \[0x0E01F0-0x0EFFFF\]\n" [_ "Unused"]];
19318	AppendToTextDisplay $po [format "%-52s  \[0x0FFFFE-0x0FFFFF\]\n" [_ "Unused"]];
19319	AppendToTextDisplay $po [format "%-52s  \[0x0E0080-0x0E00FF\]\n" [_ "Unused"]];
19320	AppendToTextDisplay $po [format "%-52s  \[0x02FAB0-0x0DFFFF\]\n" [_ "Unused"]];
19321	AppendToTextDisplay $po [format "%-52s  \[0x00A500-0x00A63F\]\n" [_ "Vai"]];
19322	AppendToTextDisplay $po [format "%-52s  \[0x00FE00-0x00FE0F\]\n" [_ "Variation Selectors"]];
19323	AppendToTextDisplay $po [format "%-52s  \[0x0E0100-0x0E01EF\]\n" [_ "Variation Selectors Supplement"]];
19324	AppendToTextDisplay $po [format "%-52s  \[0x00FE10-0x00FE1F\]\n" [_ "Vertical Forms"]];
19325	AppendToTextDisplay $po [format "%-52s  \[0x00A000-0x00A48F\]\n" [_ "Yi Syllables"]];
19326	AppendToTextDisplay $po [format "%-52s  \[0x00A490-0x00A4CF\]\n" [_ "Yi Radicals"]];
19327	AppendToTextDisplay $po [format "%-52s  \[0x004DC0-0x004DFF\]\n" [_ "Yijing Hexagram Symbols"]];
19328    }
19329}
19330
19331proc UpdateUnicodeRangeSort {} {
19332    if {[winfo exists $::PopupList(ShowUnicodeRanges)]} {
19333	destroy $::PopupList(ShowUnicodeRanges);
19334	ShowUnicodeRanges;
19335    }
19336}
19337
19338proc ToggleUnicodeGCP {} {
19339    if {[winfo exists $::PopupList(ShowUnicodeGCP)] == 0} {
19340	ShowUnicodeGCP;
19341    } else {
19342	destroy $::PopupList(ShowUnicodeGCP);
19343    }
19344}
19345
19346proc ToggleUnicodeRangesByCodepoint {} {
19347    if {$::SortUnicodeRangesByCodepointP} {
19348	set ::SortUnicodeRangesByCodepointP 0
19349    } else {
19350	set ::SortUnicodeRangesByCodepointP 1
19351    }
19352    UpdateUnicodeRangeSort;
19353}
19354
19355proc ToggleComparisonWindow {} {
19356    global ComparisonWindowDisplayedP;
19357    global MenuIndex;
19358    global m;
19359
19360    if {$ComparisonWindowDisplayedP} {
19361	set ComparisonWindowDisplayedP 0;
19362	$m.file.comp entryconfigure $MenuIndex(ToggleComparisonWindow) -label [_ "Display Comparison Window"];
19363    } else {
19364	set ComparisonWindowDisplayedP 1;
19365	$m.file.comp entryconfigure $MenuIndex(ToggleComparisonWindow) -label [_ "Hide Comparison Window"];
19366    }
19367    LayoutWindows;
19368}
19369
19370
19371proc ListWindows {} {
19372    global Wlist;
19373
19374    foreach key [lsort [array names Wlist]] {
19375	puts $Wlist($key);
19376    }
19377}
19378
19379proc new_dialog_create {class {win "auto"}} {
19380    if {$win == "auto"} {
19381        set count 0
19382        set win ".ndialog[incr count]"
19383        while {[winfo exists $win]} {
19384            set win ".ndialog[incr count]"
19385        }
19386    }
19387    toplevel $win -class $class;
19388    frame $win.info
19389    pack $win.info -expand yes -fill both -padx 4 -pady 4
19390    wm title $win $class
19391    wm group $win .
19392
19393    after idle [format {
19394        update idletasks
19395        wm minsize %s [winfo reqwidth %s] [winfo reqheight %s]
19396    } $win $win $win]
19397
19398    return $win
19399}
19400
19401# The following code is taken from the Efftcl library by Mark Harrison and
19402# Michael McLennan, copyrighted by Mark Harrison and Lucent Technologies, available
19403# from http://www.awprofessional.com/content/images/0201634740/sourcecode/efftcl.zip.
19404# As the authors explicitly give permission to "steal the code for your own applications"
19405# the relevant portions are included here so as not to require the user to install
19406# to install the library. If you install the library, remove the following and
19407# uncomment the line "#package require Efftcl" by deleting the crosshatch.
19408
19409#  Effective Tcl/Tk Programming
19410#    Mark Harrison, DSC Communications Corp.
19411#    Michael McLennan, Bell Labs Innovations for Lucent Technologies
19412#    Addison-Wesley Professional Computing Series
19413# ======================================================================
19414#  Copyright (c) 1996-1997  Lucent Technologies Inc. and Mark Harrison
19415# ======================================================================
19416
19417proc dialog_create {class {win "auto"}} {
19418    if {$win == "auto"} {
19419        set count 0
19420        set win ".dialog[incr count]"
19421        while {[winfo exists $win]} {
19422            set win ".dialog[incr count]"
19423        }
19424    }
19425    toplevel $win -class $class -background \#2200DD;
19426
19427    frame $win.info
19428    pack $win.info -expand yes -fill both -padx 4 -pady 4
19429    frame $win.sep -height 2 -borderwidth 1 -relief sunken
19430    pack $win.sep -fill x -pady 4
19431    frame $win.controls
19432    pack $win.controls -fill x -padx 4 -pady 1
19433
19434    wm title $win $class
19435    wm group $win .
19436
19437    after idle [format {
19438        update idletasks
19439        wm minsize %s [winfo reqwidth %s] [winfo reqheight %s]
19440    } $win $win $win]
19441
19442    return $win
19443}
19444
19445proc dialog_info {win} {
19446    return "$win.info"
19447}
19448
19449proc dialog_controls {win} {
19450    return "$win.controls"
19451}
19452
19453proc dialog_wait {win varName} {
19454    dialog_safeguard $win
19455
19456    set x [expr [winfo rootx .]+50]
19457    set y [expr [winfo rooty .]+50]
19458    wm geometry $win "+$x+$y"
19459
19460    wm deiconify $win
19461    grab set $win
19462
19463    vwait $varName
19464
19465    grab release $win
19466    wm withdraw $win
19467}
19468
19469bind modalDialog <ButtonPress> {
19470    wm deiconify %W
19471    raise %W
19472}
19473proc dialog_safeguard {win} {
19474    if {[lsearch [bindtags $win] modalDialog] < 0} {
19475        bindtags $win [linsert [bindtags $win] 0 modalDialog]
19476    }
19477}
19478
19479proc ShowGPL {} {
19480    if {[PopupDown ShowGPL] ==1} {return}
19481    set po [CreateTextDisplay [_ "License"] 70 24]
19482    set ::PopupList(ShowGPL) $po;
19483    BindKeys $po;
19484    AppendToTextDisplay $po [format "%s%s" [format "%s\n\t%s\n" [_ "For this license in your language see:"] [_ "http://www.gnu.org/copyleft/gpl.html"]]  "\
19485\
19486
19487		    GNU GENERAL PUBLIC LICENSE\
19488
19489                       Version 3, 29 June 2007\
19490
19491
19492 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
19493 Everyone is permitted to copy and distribute verbatim copies
19494 of this license document, but changing it is not allowed.
19495\
19496
19497                            Preamble
19498\
19499
19500  The GNU General Public License is a free, copyleft license for
19501software and other kinds of works.
19502\
19503
19504  The licenses for most software and other practical works are designed
19505to take away your freedom to share and change the works.  By contrast,
19506the GNU General Public License is intended to guarantee your freedom to
19507share and change all versions of a program--to make sure it remains free
19508software for all its users.  We, the Free Software Foundation, use the
19509GNU General Public License for most of our software; it applies also to
19510any other work released this way by its authors.  You can apply it to
19511your programs, too.
19512\
19513
19514  When we speak of free software, we are referring to freedom, not
19515price.  Our General Public Licenses are designed to make sure that you
19516have the freedom to distribute copies of free software (and charge for
19517them if you wish), that you receive source code or can get it if you
19518want it, that you can change the software or use pieces of it in new
19519free programs, and that you know you can do these things.
19520\
19521
19522  To protect your rights, we need to prevent others from denying you
19523these rights or asking you to surrender the rights.  Therefore, you have
19524certain responsibilities if you distribute copies of the software, or if
19525you modify it: responsibilities to respect the freedom of others.
19526\
19527
19528  For example, if you distribute copies of such a program, whether
19529gratis or for a fee, you must pass on to the recipients the same
19530freedoms that you received.  You must make sure that they, too, receive
19531or can get the source code.  And you must show them these terms so they
19532know their rights.
19533\
19534
19535  Developers that use the GNU GPL protect your rights with two steps:
19536(1) assert copyright on the software, and (2) offer you this License
19537giving you legal permission to copy, distribute and/or modify it.
19538\
19539
19540  For the developers' and authors' protection, the GPL clearly explains
19541that there is no warranty for this free software.  For both users' and
19542authors' sake, the GPL requires that modified versions be marked as
19543changed, so that their problems will not be attributed erroneously to
19544authors of previous versions.
19545\
19546
19547  Some devices are designed to deny users access to install or run
19548modified versions of the software inside them, although the manufacturer
19549can do so.  This is fundamentally incompatible with the aim of
19550protecting users' freedom to change the software.  The systematic
19551pattern of such abuse occurs in the area of products for individuals to
19552use, which is precisely where it is most unacceptable.  Therefore, we
19553have designed this version of the GPL to prohibit the practice for those
19554products.  If such problems arise substantially in other domains, we
19555stand ready to extend this provision to those domains in future versions
19556of the GPL, as needed to protect the freedom of users.
19557\
19558
19559  Finally, every program is threatened constantly by software patents.
19560States should not allow patents to restrict development and use of
19561software on general-purpose computers, but in those that do, we wish to
19562avoid the special danger that patents applied to a free program could
19563make it effectively proprietary.  To prevent this, the GPL assures that
19564patents cannot be used to render the program non-free.
19565\
19566
19567  The precise terms and conditions for copying, distribution and
19568modification follow.
19569\
19570
19571                       TERMS AND CONDITIONS
19572\
19573
19574  0. Definitions.
19575\
19576
19577  \"This License\" refers to version 3 of the GNU General Public License.
19578\
19579
19580  \"Copyright\" also means copyright-like laws that apply to other kinds of
19581works, such as semiconductor masks.
19582\
19583
19584  \"The Program\" refers to any copyrightable work licensed under this
19585License.  Each licensee is addressed as \"you\".  \"Licensees\" and
19586\"recipients\" may be individuals or organizations.
19587\
19588
19589  To \"modify\" a work means to copy from or adapt all or part of the work
19590in a fashion requiring copyright permission, other than the making of an
19591exact copy.  The resulting work is called a \"modified version\" of the
19592earlier work or a work \"based on\" the earlier work.
19593\
19594
19595  A \"covered work\" means either the unmodified Program or a work based
19596on the Program.
19597\
19598
19599  To \"propagate\" a work means to do anything with it that, without
19600permission, would make you directly or secondarily liable for
19601infringement under applicable copyright law, except executing it on a
19602computer or modifying a private copy.  Propagation includes copying,
19603distribution (with or without modification), making available to the
19604public, and in some countries other activities as well.
19605\
19606
19607  To \"convey\" a work means any kind of propagation that enables other
19608parties to make or receive copies.  Mere interaction with a user through
19609a computer network, with no transfer of a copy, is not conveying.
19610\
19611
19612  An interactive user interface displays \"Appropriate Legal Notices\"
19613to the extent that it includes a convenient and prominently visible
19614feature that (1) displays an appropriate copyright notice, and (2)
19615tells the user that there is no warranty for the work (except to the
19616extent that warranties are provided), that licensees may convey the
19617work under this License, and how to view a copy of this License.  If
19618the interface presents a list of user commands or options, such as a
19619menu, a prominent item in the list meets this criterion.
19620\
19621
19622  1. Source Code.
19623\
19624
19625  The \"source code\" for a work means the preferred form of the work
19626for making modifications to it.  \"Object code\" means any non-source
19627form of a work.
19628\
19629
19630  A \"Standard Interface\" means an interface that either is an official
19631standard defined by a recognized standards body, or, in the case of
19632interfaces specified for a particular programming language, one that
19633is widely used among developers working in that language.
19634\
19635
19636  The \"System Libraries\" of an executable work include anything, other
19637than the work as a whole, that (a) is included in the normal form of
19638packaging a Major Component, but which is not part of that Major
19639Component, and (b) serves only to enable use of the work with that
19640Major Component, or to implement a Standard Interface for which an
19641implementation is available to the public in source code form.  A
19642\"Major Component\", in this context, means a major essential component
19643(kernel, window system, and so on) of the specific operating system
19644(if any) on which the executable work runs, or a compiler used to
19645produce the work, or an object code interpreter used to run it.
19646\
19647
19648  The \"Corresponding Source\" for a work in object code form means all
19649the source code needed to generate, install, and (for an executable
19650work) run the object code and to modify the work, including scripts to
19651control those activities.  However, it does not include the work's
19652System Libraries, or general-purpose tools or generally available free
19653programs which are used unmodified in performing those activities but
19654which are not part of the work.  For example, Corresponding Source
19655includes interface definition files associated with source files for
19656the work, and the source code for shared libraries and dynamically
19657linked subprograms that the work is specifically designed to require,
19658such as by intimate data communication or control flow between those
19659subprograms and other parts of the work.
19660\
19661
19662  The Corresponding Source need not include anything that users
19663can regenerate automatically from other parts of the Corresponding
19664Source.
19665\
19666
19667  The Corresponding Source for a work in source code form is that
19668same work.
19669\
19670
19671  2. Basic Permissions.
19672\
19673
19674  All rights granted under this License are granted for the term of
19675copyright on the Program, and are irrevocable provided the stated
19676conditions are met.  This License explicitly affirms your unlimited
19677permission to run the unmodified Program.  The output from running a
19678covered work is covered by this License only if the output, given its
19679content, constitutes a covered work.  This License acknowledges your
19680rights of fair use or other equivalent, as provided by copyright law.
19681\
19682
19683  You may make, run and propagate covered works that you do not
19684convey, without conditions so long as your license otherwise remains
19685in force.  You may convey covered works to others for the sole purpose
19686of having them make modifications exclusively for you, or provide you
19687with facilities for running those works, provided that you comply with
19688the terms of this License in conveying all material for which you do
19689not control copyright.  Those thus making or running the covered works
19690for you must do so exclusively on your behalf, under your direction
19691and control, on terms that prohibit them from making any copies of
19692your copyrighted material outside their relationship with you.
19693\
19694
19695  Conveying under any other circumstances is permitted solely under
19696the conditions stated below.  Sublicensing is not allowed; section 10
19697makes it unnecessary.
19698\
19699
19700  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
19701\
19702
19703  No covered work shall be deemed part of an effective technological
19704measure under any applicable law fulfilling obligations under article
1970511 of the WIPO copyright treaty adopted on 20 December 1996, or
19706similar laws prohibiting or restricting circumvention of such
19707measures.
19708\
19709
19710  When you convey a covered work, you waive any legal power to forbid
19711circumvention of technological measures to the extent such circumvention
19712is effected by exercising rights under this License with respect to
19713the covered work, and you disclaim any intention to limit operation or
19714modification of the work as a means of enforcing, against the work's
19715users, your or third parties' legal rights to forbid circumvention of
19716technological measures.
19717\
19718
19719  4. Conveying Verbatim Copies.
19720\
19721
19722  You may convey verbatim copies of the Program's source code as you
19723receive it, in any medium, provided that you conspicuously and
19724appropriately publish on each copy an appropriate copyright notice;
19725keep intact all notices stating that this License and any
19726non-permissive terms added in accord with section 7 apply to the code;
19727keep intact all notices of the absence of any warranty; and give all
19728recipients a copy of this License along with the Program.
19729\
19730
19731  You may charge any price or no price for each copy that you convey,
19732and you may offer support or warranty protection for a fee.
19733\
19734
19735  5. Conveying Modified Source Versions.
19736\
19737
19738  You may convey a work based on the Program, or the modifications to
19739produce it from the Program, in the form of source code under the
19740terms of section 4, provided that you also meet all of these conditions:
19741\
19742
19743    a) The work must carry prominent notices stating that you modified
19744    it, and giving a relevant date.
19745\
19746
19747    b) The work must carry prominent notices stating that it is
19748    released under this License and any conditions added under section
19749    7.  This requirement modifies the requirement in section 4 to
19750    \"keep intact all notices\".
19751\
19752
19753    c) You must license the entire work, as a whole, under this
19754    License to anyone who comes into possession of a copy.  This
19755    License will therefore apply, along with any applicable section 7
19756    additional terms, to the whole of the work, and all its parts,
19757    regardless of how they are packaged.  This License gives no
19758    permission to license the work in any other way, but it does not
19759    invalidate such permission if you have separately received it.
19760\
19761
19762    d) If the work has interactive user interfaces, each must display
19763    Appropriate Legal Notices; however, if the Program has interactive
19764    interfaces that do not display Appropriate Legal Notices, your
19765    work need not make them do so.
19766\
19767
19768  A compilation of a covered work with other separate and independent
19769works, which are not by their nature extensions of the covered work,
19770and which are not combined with it such as to form a larger program,
19771in or on a volume of a storage or distribution medium, is called an
19772\"aggregate\" if the compilation and its resulting copyright are not
19773used to limit the access or legal rights of the compilation's users
19774beyond what the individual works permit.  Inclusion of a covered work
19775in an aggregate does not cause this License to apply to the other
19776parts of the aggregate.
19777\
19778
19779  6. Conveying Non-Source Forms.
19780\
19781
19782  You may convey a covered work in object code form under the terms
19783of sections 4 and 5, provided that you also convey the
19784machine-readable Corresponding Source under the terms of this License,
19785in one of these ways:
19786\
19787
19788    a) Convey the object code in, or embodied in, a physical product
19789    (including a physical distribution medium), accompanied by the
19790    Corresponding Source fixed on a durable physical medium
19791    customarily used for software interchange.
19792\
19793
19794    b) Convey the object code in, or embodied in, a physical product
19795    (including a physical distribution medium), accompanied by a
19796    written offer, valid for at least three years and valid for as
19797    long as you offer spare parts or customer support for that product
19798    model, to give anyone who possesses the object code either (1) a
19799    copy of the Corresponding Source for all the software in the
19800    product that is covered by this License, on a durable physical
19801    medium customarily used for software interchange, for a price no
19802    more than your reasonable cost of physically performing this
19803    conveying of source, or (2) access to copy the
19804    Corresponding Source from a network server at no charge.
19805\
19806
19807    c) Convey individual copies of the object code with a copy of the
19808    written offer to provide the Corresponding Source.  This
19809    alternative is allowed only occasionally and noncommercially, and
19810    only if you received the object code with such an offer, in accord
19811    with subsection 6b.
19812\
19813
19814    d) Convey the object code by offering access from a designated
19815    place (gratis or for a charge), and offer equivalent access to the
19816    Corresponding Source in the same way through the same place at no
19817    further charge.  You need not require recipients to copy the
19818    Corresponding Source along with the object code.  If the place to
19819    copy the object code is a network server, the Corresponding Source
19820    may be on a different server (operated by you or a third party)
19821    that supports equivalent copying facilities, provided you maintain
19822    clear directions next to the object code saying where to find the
19823    Corresponding Source.  Regardless of what server hosts the
19824    Corresponding Source, you remain obligated to ensure that it is
19825    available for as long as needed to satisfy these requirements.
19826\
19827
19828    e) Convey the object code using peer-to-peer transmission, provided
19829    you inform other peers where the object code and Corresponding
19830    Source of the work are being offered to the general public at no
19831    charge under subsection 6d.
19832\
19833
19834  A separable portion of the object code, whose source code is excluded
19835from the Corresponding Source as a System Library, need not be
19836included in conveying the object code work.
19837\
19838
19839  A \"User Product\" is either (1) a \"consumer product\", which means any
19840tangible personal property which is normally used for personal, family,
19841or household purposes, or (2) anything designed or sold for incorporation
19842into a dwelling.  In determining whether a product is a consumer product,
19843doubtful cases shall be resolved in favor of coverage.  For a particular
19844product received by a particular user, \"normally used\" refers to a
19845typical or common use of that class of product, regardless of the status
19846of the particular user or of the way in which the particular user
19847actually uses, or expects or is expected to use, the product.  A product
19848is a consumer product regardless of whether the product has substantial
19849commercial, industrial or non-consumer uses, unless such uses represent
19850the only significant mode of use of the product.
19851\
19852
19853  \"Installation Information\" for a User Product means any methods,
19854procedures, authorization keys, or other information required to install
19855and execute modified versions of a covered work in that User Product from
19856a modified version of its Corresponding Source.  The information must
19857suffice to ensure that the continued functioning of the modified object
19858code is in no case prevented or interfered with solely because
19859modification has been made.
19860\
19861
19862  If you convey an object code work under this section in, or with, or
19863specifically for use in, a User Product, and the conveying occurs as
19864part of a transaction in which the right of possession and use of the
19865User Product is transferred to the recipient in perpetuity or for a
19866fixed term (regardless of how the transaction is characterized), the
19867Corresponding Source conveyed under this section must be accompanied
19868by the Installation Information.  But this requirement does not apply
19869if neither you nor any third party retains the ability to install
19870modified object code on the User Product (for example, the work has
19871been installed in ROM).
19872\
19873
19874  The requirement to provide Installation Information does not include a
19875requirement to continue to provide support service, warranty, or updates
19876for a work that has been modified or installed by the recipient, or for
19877the User Product in which it has been modified or installed.  Access to a
19878network may be denied when the modification itself materially and
19879adversely affects the operation of the network or violates the rules and
19880protocols for communication across the network.
19881\
19882
19883  Corresponding Source conveyed, and Installation Information provided,
19884in accord with this section must be in a format that is publicly
19885documented (and with an implementation available to the public in
19886source code form), and must require no special password or key for
19887unpacking, reading or copying.
19888\
19889
19890  7. Additional Terms.
19891\
19892
19893  \"Additional permissions\" are terms that supplement the terms of this
19894License by making exceptions from one or more of its conditions.
19895Additional permissions that are applicable to the entire Program shall
19896be treated as though they were included in this License, to the extent
19897that they are valid under applicable law.  If additional permissions
19898apply only to part of the Program, that part may be used separately
19899under those permissions, but the entire Program remains governed by
19900this License without regard to the additional permissions.
19901\
19902
19903  When you convey a copy of a covered work, you may at your option
19904remove any additional permissions from that copy, or from any part of
19905it.  (Additional permissions may be written to require their own
19906removal in certain cases when you modify the work.)  You may place
19907additional permissions on material, added by you to a covered work,
19908for which you have or can give appropriate copyright permission.
19909\
19910
19911  Notwithstanding any other provision of this License, for material you
19912add to a covered work, you may (if authorized by the copyright holders of
19913that material) supplement the terms of this License with terms:
19914\
19915
19916    a) Disclaiming warranty or limiting liability differently from the
19917    terms of sections 15 and 16 of this License; or
19918\
19919
19920    b) Requiring preservation of specified reasonable legal notices or
19921    author attributions in that material or in the Appropriate Legal
19922    Notices displayed by works containing it; or
19923\
19924
19925    c) Prohibiting misrepresentation of the origin of that material, or
19926    requiring that modified versions of such material be marked in
19927    reasonable ways as different from the original version; or
19928\
19929
19930    d) Limiting the use for publicity purposes of names of licensors or
19931    authors of the material; or
19932\
19933
19934    e) Declining to grant rights under trademark law for use of some
19935    trade names, trademarks, or service marks; or
19936\
19937
19938    f) Requiring indemnification of licensors and authors of that
19939    material by anyone who conveys the material (or modified versions of
19940    it) with contractual assumptions of liability to the recipient, for
19941    any liability that these contractual assumptions directly impose on
19942    those licensors and authors.
19943\
19944
19945  All other non-permissive additional terms are considered \"further
19946restrictions\" within the meaning of section 10.  If the Program as you
19947received it, or any part of it, contains a notice stating that it is
19948governed by this License along with a term that is a further
19949restriction, you may remove that term.  If a license document contains
19950a further restriction but permits relicensing or conveying under this
19951License, you may add to a covered work material governed by the terms
19952of that license document, provided that the further restriction does
19953not survive such relicensing or conveying.
19954\
19955
19956  If you add terms to a covered work in accord with this section, you
19957must place, in the relevant source files, a statement of the
19958additional terms that apply to those files, or a notice indicating
19959where to find the applicable terms.
19960\
19961
19962  Additional terms, permissive or non-permissive, may be stated in the
19963form of a separately written license, or stated as exceptions;
19964the above requirements apply either way.
19965\
19966
19967  8. Termination.
19968\
19969
19970  You may not propagate or modify a covered work except as expressly
19971provided under this License.  Any attempt otherwise to propagate or
19972modify it is void, and will automatically terminate your rights under
19973this License (including any patent licenses granted under the third
19974paragraph of section 11).
19975\
19976
19977  However, if you cease all violation of this License, then your
19978license from a particular copyright holder is reinstated (a)
19979provisionally, unless and until the copyright holder explicitly and
19980finally terminates your license, and (b) permanently, if the copyright
19981holder fails to notify you of the violation by some reasonable means
19982prior to 60 days after the cessation.
19983\
19984
19985  Moreover, your license from a particular copyright holder is
19986reinstated permanently if the copyright holder notifies you of the
19987violation by some reasonable means, this is the first time you have
19988received notice of violation of this License (for any work) from that
19989copyright holder, and you cure the violation prior to 30 days after
19990your receipt of the notice.
19991\
19992
19993  Termination of your rights under this section does not terminate the
19994licenses of parties who have received copies or rights from you under
19995this License.  If your rights have been terminated and not permanently
19996reinstated, you do not qualify to receive new licenses for the same
19997material under section 10.
19998\
19999
20000  9. Acceptance Not Required for Having Copies.
20001\
20002
20003  You are not required to accept this License in order to receive or
20004run a copy of the Program.  Ancillary propagation of a covered work
20005occurring solely as a consequence of using peer-to-peer transmission
20006to receive a copy likewise does not require acceptance.  However,
20007nothing other than this License grants you permission to propagate or
20008modify any covered work.  These actions infringe copyright if you do
20009not accept this License.  Therefore, by modifying or propagating a
20010covered work, you indicate your acceptance of this License to do so.
20011\
20012
20013  10. Automatic Licensing of Downstream Recipients.
20014
20015  Each time you convey a covered work, the recipient automatically
20016receives a license from the original licensors, to run, modify and
20017propagate that work, subject to this License.  You are not responsible
20018for enforcing compliance by third parties with this License.
20019\
20020
20021  An \"entity transaction\" is a transaction transferring control of an
20022organization, or substantially all assets of one, or subdividing an
20023organization, or merging organizations.  If propagation of a covered
20024work results from an entity transaction, each party to that
20025transaction who receives a copy of the work also receives whatever
20026licenses to the work the party's predecessor in interest had or could
20027give under the previous paragraph, plus a right to possession of the
20028Corresponding Source of the work from the predecessor in interest, if
20029the predecessor has it or can get it with reasonable efforts.
20030\
20031
20032  You may not impose any further restrictions on the exercise of the
20033rights granted or affirmed under this License.  For example, you may
20034not impose a license fee, royalty, or other charge for exercise of
20035rights granted under this License, and you may not initiate litigation
20036(including a cross-claim or counterclaim in a lawsuit) alleging that
20037any patent claim is infringed by making, using, selling, offering for
20038sale, or importing the Program or any portion of it.
20039\
20040
20041  11. Patents.
20042\
20043
20044  A \"contributor\" is a copyright holder who authorizes use under this
20045License of the Program or a work on which the Program is based.  The
20046work thus licensed is called the contributor's \"contributor version\".
20047\
20048
20049  A contributor's \"essential patent claims\" are all patent claims
20050owned or controlled by the contributor, whether already acquired or
20051hereafter acquired, that would be infringed by some manner, permitted
20052by this License, of making, using, or selling its contributor version,
20053but do not include claims that would be infringed only as a
20054consequence of further modification of the contributor version.  For
20055purposes of this definition, \"control\" includes the right to grant
20056patent sublicenses in a manner consistent with the requirements of
20057this License.
20058\
20059
20060  Each contributor grants you a non-exclusive, worldwide, royalty-free
20061patent license under the contributor's essential patent claims, to
20062make, use, sell, offer for sale, import and otherwise run, modify and
20063propagate the contents of its contributor version.
20064\
20065
20066  In the following three paragraphs, a \"patent license\" is any express
20067agreement or commitment, however denominated, not to enforce a patent
20068(such as an express permission to practice a patent or covenant not to
20069sue for patent infringement).  To \"grant\" such a patent license to a
20070party means to make such an agreement or commitment not to enforce a
20071patent against the party.
20072\
20073
20074  If you convey a covered work, knowingly relying on a patent license,
20075and the Corresponding Source of the work is not available for anyone
20076to copy, free of charge and under the terms of this License, through a
20077publicly available network server or other readily accessible means,
20078then you must either (1) cause the Corresponding Source to be so
20079available, or (2) arrange to deprive yourself of the benefit of the
20080patent license for this particular work, or (3) arrange, in a manner
20081consistent with the requirements of this License, to extend the patent
20082license to downstream recipients.  \"Knowingly relying\" means you have
20083actual knowledge that, but for the patent license, your conveying the
20084covered work in a country, or your recipient's use of the covered work
20085in a country, would infringe one or more identifiable patents in that
20086country that you have reason to believe are valid.
20087\
20088
20089  If, pursuant to or in connection with a single transaction or
20090arrangement, you convey, or propagate by procuring conveyance of, a
20091covered work, and grant a patent license to some of the parties
20092receiving the covered work authorizing them to use, propagate, modify
20093or convey a specific copy of the covered work, then the patent license
20094you grant is automatically extended to all recipients of the covered
20095work and works based on it.
20096\
20097
20098  A patent license is \"discriminatory\" if it does not include within
20099the scope of its coverage, prohibits the exercise of, or is
20100conditioned on the non-exercise of one or more of the rights that are
20101specifically granted under this License.  You may not convey a covered
20102work if you are a party to an arrangement with a third party that is
20103in the business of distributing software, under which you make payment
20104to the third party based on the extent of your activity of conveying
20105the work, and under which the third party grants, to any of the
20106parties who would receive the covered work from you, a discriminatory
20107patent license (a) in connection with copies of the covered work
20108conveyed by you (or copies made from those copies), or (b) primarily
20109for and in connection with specific products or compilations that
20110contain the covered work, unless you entered into that arrangement,
20111or that patent license was granted, prior to 28 March 2007.
20112\
20113
20114  Nothing in this License shall be construed as excluding or limiting
20115any implied license or other defenses to infringement that may
20116otherwise be available to you under applicable patent law.
20117\
20118
20119  12. No Surrender of Others' Freedom.
20120\
20121
20122  If conditions are imposed on you (whether by court order, agreement or
20123otherwise) that contradict the conditions of this License, they do not
20124excuse you from the conditions of this License.  If you cannot convey a
20125covered work so as to satisfy simultaneously your obligations under this
20126License and any other pertinent obligations, then as a consequence you may
20127not convey it at all.  For example, if you agree to terms that obligate you
20128to collect a royalty for further conveying from those to whom you convey
20129the Program, the only way you could satisfy both those terms and this
20130License would be to refrain entirely from conveying the Program.
20131\
20132
20133  13. Use with the GNU Affero General Public License.
20134\
20135
20136  Notwithstanding any other provision of this License, you have
20137permission to link or combine any covered work with a work licensed
20138under version 3 of the GNU Affero General Public License into a single
20139combined work, and to convey the resulting work.  The terms of this
20140License will continue to apply to the part which is the covered work,
20141but the special requirements of the GNU Affero General Public License,
20142section 13, concerning interaction through a network will apply to the
20143combination as such.
20144\
20145
20146  14. Revised Versions of this License.
20147\
20148
20149  The Free Software Foundation may publish revised and/or new versions of
20150the GNU General Public License from time to time.  Such new versions will
20151be similar in spirit to the present version, but may differ in detail to
20152address new problems or concerns.
20153\
20154
20155  Each version is given a distinguishing version number.  If the
20156Program specifies that a certain numbered version of the GNU General
20157Public License \"or any later version\" applies to it, you have the
20158option of following the terms and conditions either of that numbered
20159version or of any later version published by the Free Software
20160Foundation.  If the Program does not specify a version number of the
20161GNU General Public License, you may choose any version ever published
20162by the Free Software Foundation.
20163\
20164
20165  If the Program specifies that a proxy can decide which future
20166versions of the GNU General Public License can be used, that proxy's
20167public statement of acceptance of a version permanently authorizes you
20168to choose that version for the Program.
20169\
20170
20171  Later license versions may give you additional or different
20172permissions.  However, no additional obligations are imposed on any
20173author or copyright holder as a result of your choosing to follow a
20174later version.
20175\
20176
20177  15. Disclaimer of Warranty.
20178\
20179
20180  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
20181APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
20182HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY
20183OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
20184THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20185PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
20186IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
20187ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
20188\
20189
20190  16. Limitation of Liability.
20191\
20192
20193  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
20194WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
20195THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
20196GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
20197USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
20198DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
20199PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
20200EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
20201SUCH DAMAGES.
20202\
20203
20204  17. Interpretation of Sections 15 and 16.
20205\
20206
20207  If the disclaimer of warranty and limitation of liability provided
20208above cannot be given local legal effect according to their terms,
20209reviewing courts shall apply local law that most closely approximates
20210an absolute waiver of all civil liability in connection with the
20211Program, unless a warranty or assumption of liability accompanies a
20212copy of the Program in return for a fee.
20213"]
20214}
20215
20216#Write out a list of init file commands that will reconstruct
20217#the current configuration
20218proc SaveState {{SaveFile Ask}} {
20219    if {[string equal $SaveFile Ask]} {
20220	set SaveFile [tk_getSaveFile -initialfile [_ "SavedState"]];
20221	if {$SaveFile == ""} {
20222	    ShowMessage [_ "File selection cancelled."]
20223	    return ;
20224	}
20225    }
20226    if {[catch {open $SaveFile "w"} fh ] != 0} {
20227	ShowMessage [format [_ "Unable to open file %s."] [MinimizeFileName $SaveFile]];
20228	return ;
20229    }
20230    set cl [concat \
20231	[list [format "\#%s" [clock format [clock seconds]]]] \
20232	[list [format "\#%s" [_ Fonts]]] \
20233	[fontsel::SaveFontSettings] \
20234	[list [format "\#%s" [_ Colors]]] \
20235	[SaveColorSettings] \
20236	[list [format "\#%s" [_ "Palette Entries"]]] \
20237	[SavePaletteEntries] \
20238	[list [format "\#%s" [_ "Character Classes"]]] \
20239	[SaveUserClasses] \
20240	[list [format "\#%s" [_ Miscellaneous]]] \
20241	[SaveMiscellaneousSettings]];
20242    foreach x $cl {
20243	puts $fh $x;
20244    }
20245    close $fh;
20246    ShowMessage [format [_ "The configuration has been saved in file %s."] \
20247		     [MinimizeFileName $SaveFile]]
20248}
20249
20250proc Usage {} {
20251    puts {Usage: redet [options] (<input text file>)};
20252    puts [_ "    -c <file>     read character class definitions from <file>"];
20253    puts [_ "    -d            set debug flag"];
20254    puts [_ "    -F <file>     read a feature list from <file>"];
20255    puts [_ "    -f            act as filter"];
20256    puts [_ "    -H            do not read history file"];
20257    puts [_ "    -h            help"];
20258    puts [_ "    -I <file>     read <file> as init file"];
20259    puts [_ "    -i            do not read init file"];
20260    puts [_ "    -l <locale>   internally set the locale to <locale>"];
20261    puts [_ "    -n            do not execute feature tests"];
20262    puts [_ "    -p <program>  use <program>"];
20263    puts [_ "    -P            list the programs supported"];
20264    puts [_ "    -s            start up in substitution mode"];
20265    puts [_ "    -t            show results of feature tests"];
20266    puts [_ "    -v            version"];
20267}
20268
20269proc PopupTestPatiencePlacard {txt ForbidAbortP} {
20270    global ColorSpecs;
20271
20272    toplevel .placard -borderwidth 4 -relief raised  -bg $ColorSpecs(Placard,Background)
20273    wm title .placard [_ "Feature Test Progress"];
20274    after idle {
20275	update idletasks
20276	set xmax [winfo screenwidth .placard]
20277	set ymax [winfo screenheight .placard]
20278	set x0 [expr int(2.4 * ($xmax -[winfo reqwidth .placard])/3.0)];
20279	set y0 [expr int(2.3 * ($ymax -[winfo reqheight .placard])/3.0)];
20280	wm geometry .placard "+$x0+$y0";
20281    }
20282    label .placard.title -text $txt -bg $ColorSpecs(Placard,Background) -fg $ColorSpecs(Placard,Foreground)
20283    button .placard.dismiss -text [_ "Abort"] -command AbortFeatureTests;
20284    Progress .placard.progbar;
20285    label .placard.time -text [format [_ "time elapsed: %1d minutes %2d seconds\nestimated total time: ? minutes  ? seconds\nestimated time remaining: ? minutes  ? seconds"] 0 0]\
20286	-bg $ColorSpecs(Placard,Background) -fg $ColorSpecs(Placard,Foreground)
20287    pack .placard.title -side top -fill x -padx 8 -pady 8;
20288    pack .placard.time -side top  -fill x -padx 8 -pady 8;
20289    pack .placard.progbar -side left -fill both -expand 1;
20290    if {!$ForbidAbortP} {
20291	pack .placard.dismiss -side right;
20292    }
20293    catch {.placard.title configure -font -*-Courier-bold-o-normal--*-140-*}
20294    catch {.placard.time configure -font -*-Courier-bold-o-normal--*-130-*}
20295}
20296
20297proc AbortFeatureTests {} {
20298    if {$::FirstTestP} {
20299	ShowMessage [_ "The initial test run cannot be aborted."]
20300	return ;
20301    }
20302    set ::AbortFeatureTestP 1;
20303    set killpid $::tk_exec_pipe(pid)
20304    # We give the daughter a chance to exit nicely
20305    # before terminating with extreme prejudice.
20306    if {$::tcl_platform(platform) eq "unix"} {
20307	catch {[exec kill -s TERM $killpid]}
20308	after 100 {
20309	    catch {[exec kill -s KILL $killpid]}
20310	}
20311    }
20312}
20313
20314proc AbortSearch {} {
20315    if {$::TestingFeaturesP} {
20316	AbortFeatureTests;
20317	return ;
20318    }
20319    if {$::tcl_platform(platform) eq "unix"} {
20320	if {[info exists ::tk_exec_pipe(pid)]} {
20321	    set killpid $::tk_exec_pipe(pid)
20322	    # We give the daughter a chance to exit nicely
20323	    # before terminating with extreme prejudice.
20324	    catch {[exec kill -s TERM $killpid]}
20325	    after 20 {
20326		catch {[exec kill -s KILL $killpid]}
20327	    }
20328	    if {$::DoSubstitutionsP} {
20329		ShowMessage [_ "Substitution aborted by user."]
20330	    } else {
20331		ShowMessage [_ "Search aborted by user."]
20332	    }
20333	} else {
20334	    ShowMessage [_ "There is nothing to abort."]
20335	}
20336    } else {
20337	ShowMessage [format [_ "%s does not support the abort command."] $::System]
20338    }
20339}
20340
20341proc PopupAlert {name txt} {
20342    global ColorSpecs;
20343
20344    destroy .alert_$name;
20345    toplevel .alert_$name -borderwidth 4 -relief raised -bg $ColorSpecs(Alert,Background)
20346    wm overrideredirect .alert_$name 1;
20347    label .alert_$name.title -text $txt -bg  $::ColorSpecs(Alert,Background) -fg $::ColorSpecs(Alert,Foreground);
20348    button .alert_$name.dismiss -text [_ "Dismiss"] -bg $::ColorSpecs(AlertDismiss,Background) -fg $::ColorSpecs(AlertDismiss,Foreground) -command "destroy .alert_$name";
20349    pack .alert_$name.title -side top -fill x -padx 8 -pady 8;
20350    pack .alert_$name.dismiss -side right;
20351    catch {.alert_$name.title configure -font -*-Courier-bold-o-normal--*-180-*}
20352}
20353
20354
20355option add  *art.*Background $::ColorSpecs(PopupWidgetDefault,Background) 100;
20356option add  *art.*Foreground $::ColorSpecs(PopupWidgetDefault,Foreground) 100;
20357option add  *art.*Text.Background $::ColorSpecs(PopupWidgetEntry,Background) 100;
20358
20359proc PopupActualRegexp {} {
20360    global MainWidth;
20361    global MainFont;
20362    toplevel .art -borderwidth 4 -relief raised
20363    wm title .art [_ "Actual Regular Expression"]
20364    after idle {
20365	update idletasks
20366	set xmax [winfo screenwidth .art]
20367	set ymax [winfo screenheight .art]
20368	set x0 [expr 2 * ($xmax -[winfo reqwidth .art])/3];
20369	set y0 [expr 2 * ($ymax -[winfo reqheight .art])/3];
20370	wm geometry .art "+$x0+$y0";
20371    }
20372    label .art.title -text [_ "Regular Expression Actually Executed"];
20373    pack .art.title -side top -fill x -padx 8 -pady 8;
20374    text .art.txt -width $MainWidth -height 3 -font TextFont -exportselection 1;
20375    pack .art.txt -side top -fill x -padx 8 -pady 8;
20376    catch {.art.title configure -font -*-Courier-bold-o-normal--*-180-*}
20377    BindKeys .art;
20378    bind .art.txt <<B3>> {ShowCode %W %x %y}
20379}
20380
20381proc ToggleActualRegexp {} {
20382    global PreviousActualRegexp;
20383    global DisplayActualRegexpIndex;
20384    global DescribeDisplayActualRegexpIndex;
20385    global m;
20386
20387    if {[winfo exists .art]} {
20388	destroy .art;
20389	$m.tools.classes entryconfigure $DisplayActualRegexpIndex -label [_ "Display Regular Expression Actually Executed"];
20390    } else {
20391	PopupActualRegexp;
20392	DisplayActualRegexp $PreviousActualRegexp;
20393	$m.tools.classes entryconfigure $DisplayActualRegexpIndex -label [_ "Do Not Display Regular Expression Actually Executed"];
20394    }
20395}
20396
20397proc DisplayActualRegexp {are} {
20398    if {[winfo exists .art.txt]} {
20399	.art.txt delete 1.0 end;
20400	.art.txt insert 1.0 $are;
20401    }
20402}
20403
20404#Put a title in the frame.
20405proc SetTitle {version TimeStamp locale dosubsp} {
20406    if {$dosubsp} {
20407	set mode [_ "Substitution Mode"];
20408    } else {
20409	set mode [_ "Match Mode"];
20410    }
20411    if {$::DebugP||$::DevP} {
20412	wm title . [format "Redet %s \[%s\]      %s        %s" $version $TimeStamp $locale $mode];
20413    } else {
20414	wm title . [format "Redet %s       %s        %s" $version $locale $mode];
20415    }
20416
20417}
20418
20419
20420#Set up balloon help
20421option add *Balloonhelp*background white widgetDefault
20422option add *Balloonhelp*foreground black widgetDefault
20423option add *Balloonhelpinfo.wrapLength 3i  widgetDefault
20424option add *Balloonhelp.info.justify left widgetDefault
20425toplevel .balloonhelp -class Balloonhelp -background black -borderwidth 1 -relief flat
20426#label .balloonhelp.arrow -anchor nw -bitmap @arrow.xbm
20427#pack .balloonhelp.arrow -side left -fill y
20428label .balloonhelp.info -font BalloonHelpFont;
20429pack .balloonhelp.info -side left -fill y
20430wm overrideredirect .balloonhelp 1
20431wm withdraw .balloonhelp
20432set bhInfo(active) 1
20433
20434proc balloonhelp_control {state} {
20435     global bhInfo
20436     if {$state} {
20437          set bhInfo(active) 1
20438     } else {
20439	balloonhelp_cancel
20440	set bhInfo(active) 0
20441     }
20442}
20443
20444proc balloonhelp_for {win mesg} {
20445    global bhInfo
20446    set bhInfo($win) $mesg
20447    set ::bhOverlapP($win) 1;
20448    bind $win <Enter> {+balloonhelp_pending %W}
20449    bind $win <Leave> {+balloonhelp_cancel}
20450}
20451
20452proc balloonhelpd_for {win mesg} {
20453    global bhInfo
20454    set ::bhOverlapP($win) 0;
20455    set bhInfo($win) $mesg
20456    bind $win <Enter> {+balloonhelp_show %W}
20457}
20458
20459proc balloonhelp_pending {win} {
20460     global bhInfo
20461     balloonhelp_cancel
20462     set bhInfo(pending) [after 1000 [list balloonhelp_show $win]]
20463}
20464
20465proc balloonhelp_cancel {} {
20466    global bhInfo
20467    if { [info exists bhInfo(pending)]} {
20468	after cancel $bhInfo(pending)
20469	unset bhInfo(pending)
20470    }
20471    wm withdraw .balloonhelp
20472}
20473
20474proc balloonhelp_show {win} {
20475    global bhInfo;
20476    global bhOverlapP;
20477    if {[info exists bhOverlapP($win)]} {
20478	if {$bhOverlapP($win)} {
20479	    set Overlap 25;
20480	} else {
20481	    set Overlap -10;
20482	}
20483	if {[winfo exists $win]} {
20484	    if {$bhInfo(active)} {
20485		.balloonhelp.info configure -text $bhInfo($win) -font BalloonHelpFont
20486		#Set abcissa
20487		set MaxStringWidth 0;
20488		foreach line [split $bhInfo($win) "\n"] {
20489		    set StringWidth [font measure BalloonHelpFont -displayof .balloonhelp.info $line]
20490		    if {$StringWidth > $MaxStringWidth} {
20491			set MaxStringWidth $StringWidth;
20492		    }
20493		}
20494		set ScreenWidth [winfo screenwidth $win]
20495		set Width [winfo width $win];
20496		set LeftEdge  [winfo rootx $win];
20497		set RightEdge [expr $LeftEdge + $Width];
20498		if {$ScreenWidth - $RightEdge < $MaxStringWidth} {
20499		    if {$LeftEdge > $MaxStringWidth} {
20500			set x [expr $LeftEdge - $MaxStringWidth + $Overlap];
20501		    } else {
20502			if {$ScreenWidth - $MaxStringWidth > 0} {
20503			    set x [expr $RightEdge - $MaxStringWidth];
20504			} else {
20505			    set x [expr $ScreenWidth - $MaxStringWidth];
20506			}
20507		    }
20508		} else {
20509		    set x [expr $RightEdge - $Overlap];
20510		}
20511		#Set ordinate
20512		set Height [winfo height $win];
20513		set TopEdge [winfo rooty $win];
20514		set y [expr $TopEdge + ($Height/2)];
20515		wm geometry .balloonhelp +$x+$y
20516		wm deiconify .balloonhelp
20517		raise .balloonhelp
20518	    }
20519	}
20520    }
20521	if {[info exist bhInfo(pending)]} {
20522	    unset bhInfo(pending)
20523	}
20524    }
20525
20526    proc GotoStandardLayout {} {
20527	if {$::DoSubstitutionsP} {
20528	    if {!$::RegSubSideBySideP || !$::SideBySideLayoutP} {
20529		set ::SideBySideLayoutP 1;
20530		set ::RegSubSideBySideP 1;
20531		LayoutWindows;
20532	    }
20533	} else {
20534	    if {$::RegSubSideBySideP || $::SideBySideLayoutP} {
20535		set ::SideBySideLayoutP 0;
20536		set ::RegSubSideBySideP 0;
20537		LayoutWindows;
20538	    }
20539	}
20540    }
20541
20542proc UpdateScrollbars {} {
20543    LayoutWindows;
20544    hist::ConstructHistory;
20545    ConstructPalette;
20546    ConstructUserClassPalette;
20547}
20548
20549#Any command to be made available for binding as a keyboard shortcut
20550#must be listed here.
20551#This needs to be called when we change locale so as to change the
20552#translations.
20553proc SetCommandGlosses {} {
20554    global CommandGlosses
20555
20556    set Pairs [list\
20557	   LoadRegularExpressionFromPrimarySelection "[_ "Load regular expression from primary selection."]"\
20558	   SaveActualRegexp "[_ "Save the regular expression resulting from expansion of user-defined character classes to a file."]"\
20559	   TestFeatures "[_ "Execute the feature test suite."]"\
20560	   LoadRegularExpressionFromClipboard   "[_ "Load regular expression from clipboard."]"\
20561	   LoadRegularExpressionFromFile    "[_ "Load regular expression from file"]"\
20562	   SaveRegularExpressionAsHistory   "[_ "Save the regular expression (& substitution expression) in history file format"]"\
20563	   SaveRegexpPlain  "[_ "Save the regular expression as plain text."]"\
20564	   SaveSubexpPlain  "[_ "Save the substitution expression as plain text"]"\
20565	   ClearInput     "[_ "Clear the test data."]"\
20566	   EditTestInputData  "[_ "Make the test input data window editable."]"\
20567	   LoadTestDataFromClipboard  "[_ "Load the test data window with the contents of the clipboard"]"\
20568           LoadTestInputData "[_ "Load the test data window from a file."]"\
20569           SaveTestInputData "[_ "Write the contents of the test data window to a file."]"\
20570	   ClearOutput	   "[_ "Clear the result window."]"\
20571	   EditOutput 	   "[_ "Make the result window editable."]"\
20572	   LockOutput	       "[_ "Make the result window uneditable."]"\
20573	   SaveResults	   "[_ "Write the contents of the results window to a file."]"\
20574	   ToggleComparisonWindow   "[_ "Toggle the comparison data window."]"\
20575	   ClearOutputComparisonData   "[_ "Clear the comparison data window."]"\
20576	   LoadOutputComparisonDataFromClipboard "[_ "Load the comparison data window with the contents of the clipboard."]"\
20577	   LoadOutputComparisonData "[_ "Load the comparison data window from a file."]"\
20578	   ShutDown   "[_ "Quit"]"\
20579	   ExecuteRegexp "[_ "Execute Regular Expression"]"\
20580	   hist::ToggleHistory  "[_ "Toggle the display of the history list."]"\
20581	   hist::ToggleHistoryProgramDisplay "[_ "Toggle the display of the program column in the history list."]"\
20582	   hist::SaveHistoryList "[_ "Write the history list to a file."]"\
20583           hist::PruneHistoryList  "[_ "Prune the history list."]"\
20584           hist::ClearHistoryList  "[_ "Clear the history list."]"\
20585	   ClearRegexp "[_ "Clear the regular expression window."]"\
20586	   TogglePalette "[_ "Toggle display of the palette"]"\
20587	   AbortSearch   "[_ "Abort the search or substitution in progress."]"\
20588	   resc::PopupCachedEntries "[_ "Pop up a control panel for manipulating stored results"]"\
20589	   search::SearchTestData    "[_ "Search the Test Data"]"\
20590	   search::SearchResults    "[_ "Search the Results"]"\
20591           PopupCurrentProgramControls    "[_ "Pop up the control panel for the current program."]"\
20592	   ReadCustomCharacterChartPopup  "[_ "Read a custom character chart definition from a file."]"\
20593	   ToggleIPAA    "[_ "Toggle the accented letter entry widget."]"\
20594	   ToggleIPAC 	   "[_ "Toggle the IPA consonant entry widget."]"\
20595	   ToggleIPAV 	   "[_ "Toggle the IPA vowel entry widget."]"\
20596	   ToggleIPAD 	   "[_ "Toggle the IPA diacritic entry widget."]"\
20597	   ToggleCharEntryByCode  "[_ "Toggle the popup for entering characters by their Unicode code."]"\
20598	   GotoStandardLayout  "[_ "Change to the standard layout for this mode."]"\
20599	   PopupUserClassEntry	 "[_ "Toggle the display of the character class definition tool"]"\
20600	   ToggleUserClassPalette  "[_ "Toggle the display of the user class palette"]" \
20601	   ToggleActualRegexp   "[_ "Toggle the display of the regular expression actually executed"]"\
20602	   ToggleBalloonHelp   "[_ "Toggle the display of balloon help"]"\
20603	   DescribeKeyBindings "[_ "Toggle the display of the current keyboard shortcuts."]"\
20604	   ShowGPL "[_ "Toggle display of this program's license."]"\
20605	   ToggleSubstitutionMode  "[_ "Toggle between match mode & substitution mode."]"\
20606	   ShowUnicodeRanges   "[_ "Toggle display of the Unicode range popup."]"\
20607	   ToggleUnicodeRangesByCodepoint "[_ "Toggle sorting of unicode ranges by codepoint or range name."]"\
20608	   ShowUnicodeGCP "[_ "Toggle display of the Unicode general character properties popup."]"\
20609	   SelectFont "[_ "Pop up the font control panel."]"\
20610	   SelectInterfaceLocale  "[_ "Pop up the locale selection control panel."]"\
20611	   About  "[_ "Toggle the popup with basic information about Redet."]"\
20612	   BugReports  "[_ "Toggle the bug reports popup."]"\
20613	   CommandDescriptions  "[_ "Bring up the reference manual section on commands in a browser"]"\
20614	   CommandLineOptions  "[_ "Toggle information on command line options."]"\
20615	   WebManual  "[_ "Bring up the reference manual in a browser."]"\
20616	   DescribePrograms  "[_ "Toggle information about the supported programs."]"\
20617	   PopupProgramInfo "[_ "Toggle information about the current pattern matching engine."]"\
20618	   Description  "[_ "Toggle a general description of Redet. "]"\
20619	   ShowCommandLine  "[_ "Show the command line."]"\
20620	   PostFileMenu "[_ "Post a tearoff copy of the File menu."]"\
20621	   PostRegularExpressionMenu  "[_ "Post a tearoff copy of the Regular Expression menu"]"\
20622	   PostTestDataMenu   "[_ "Post a tearoff copy of the Test Data menu"]"\
20623	   PostResultsMenu    "[_ "Post a tearoff copy of the Results  menu"]"\
20624	   PostComparisonDataMenu  "[_ "Post a tearoff copy of the Comparison Data  menu"]"\
20625	   PostProgramMenu "[_ "Post a tearoff copy of the Program menu."]"\
20626	   PostHistoryMenu "[_ "Post a tearoff copy of the History menu."]"\
20627	   PostToolsMenu "[_ "Post a tearoff copy of the Tools menu."]"\
20628	   PostConfigureMenu "[_ "Post a tearoff copy of the Configure menu."]"\
20629	   PostHelpMenu "[_ "Post a tearoff copy of the Help menu."]"\
20630	   PostCharacterEntryMenu "[_ "Post a tearoff copy of the Character Entry menu."]"\
20631	   PostUserClassMenu "[_ "Post a tearoff copy of the User Class menu."]"\
20632	   PostFeatureTestingMenu "[_ "Post a tearoff copy of the Feature Testing menu."]"\
20633	   PostLayoutMenu "[_ "Post a tearoff copy of the Layout menu."]"\
20634	   PostMiscellaneousMenu "[_ "Post a tearoff copy of the Miscellaneous Configuration menu."]"\
20635	   PostProgramSpecificMenu "[_ "Post a tearoff copy of the Program Specific Configuration menu."]"\
20636	   EditOutputComparisonData     "[_ "Make the comparison data window editable."]"\
20637	   MoveResultsToTestData      "[_ "Replace the test data with the results and clear the result window."]"]
20638    array set CommandGlosses $Pairs;
20639}
20640
20641proc SelectInterfaceLocale {} {
20642    global ProposedInterfaceLocale;
20643    global InterfaceLocaleText;
20644    global InterfaceLocaleListHeight;
20645
20646    catch {set InterfaceLocaleText [exec locale -a]};
20647    set InterfaceLocaleList [split $InterfaceLocaleText "\n"];
20648
20649    #See if there are any locales.
20650    if {$InterfaceLocaleList == 0} {
20651	ShowMessage [_ "No locales are available."];
20652	return 0;
20653    }
20654    if {[winfo exists .loclist] == 0} {
20655	toplevel .loclist;
20656    }
20657    wm title .loclist [_ "Available InterfaceLocales"];
20658    wm withdraw .loclist;
20659    destroy .loclist.lbf.lb;
20660    label .loclist.lab -text [_ "Select InterfaceLocale"];
20661    frame .loclist.lbf
20662    listbox .loclist.lbf.lb -height $InterfaceLocaleListHeight -width 0 -font MainFont \
20663	-yscrollcommand {.loclist.lbf.sb set}  -font MainFont \
20664	-fg $::ColorSpecs(PaletteGloss,Foreground) \
20665	-bg $::ColorSpecs(PaletteGloss,Background);
20666    scrollbar .loclist.lbf.sb -command {.loclist.lbf.lb yview} \
20667	-troughcolor $::ColorSpecs(PaletteGloss,Background) \
20668	-bg $::ColorSpecs(PaletteGloss,Background);
20669    bind .loclist.lbf.sb <<B3>> "ScrollbarMoveBigIncrement .loclist.lbf.sb 0.20 %x %y"
20670    foreach line $InterfaceLocaleList {
20671	.loclist.lbf.lb insert end $line;
20672    }
20673    bind .loclist.lbf.lb <<B3>> {
20674	set ProposedInterfaceLocale [.loclist.lbf.lb get active];
20675#	balloonhelp_cancel;
20676	destroy .loclist;
20677    }
20678    pack .loclist.lab -side top -expand 1  -fill both;
20679    pack .loclist.lbf.lb -side left -expand 1 -fill both -padx 5
20680    if {$::UseScrollbarsP} {
20681	pack .loclist.lbf.sb -side right -expand 1 -fill y;
20682    }
20683    pack .loclist.lbf -expand 1 -fill both
20684    button .loclist.cancel -text [_ "Cancel"] -command {destroy .loclist}
20685    button .loclist.proceed -text [_ "Save New InterfaceLocale"] -command {set ::ProposedInterfaceLocale [.loclist.lbf.lb get active];destroy .loclist};
20686    pack .loclist.cancel   -side left -expand yes -fill x;
20687    pack .loclist.proceed  -side left -expand yes -fill x;
20688    BindKeys .loclist;
20689    balloonhelp_for .loclist.lbf.lb  [_ "Right click to select new locale."]
20690    wm deiconify .loclist;
20691    grab set .loclist;
20692    tkwait window .loclist
20693}
20694
20695proc SetInterfaceLocale {loc} {
20696    set nl [::msgcat::mclocale $loc];
20697    if {$nl != 0} {
20698	# We don't use nl/InterfaceLocale because msgcat downcases but some programs are case-sensitive.
20699	# GNU grep etc. support Unicode if the locale is zh_TW.UTF-8 but not zh_tw.utf-8.
20700	set ::env(LC_ALL) $loc;
20701	set ::env(LANGUAGE) $loc;
20702	return $loc
20703    }
20704    return "";
20705}
20706
20707proc ChangeInterfaceLocale {} {
20708    global Version;
20709    global InterfaceLocale;
20710    global ProposedInterfaceLocale;
20711    global Features;
20712    global Program;
20713    global program;
20714    global ProposedInterfaceLocale;
20715    global FeatureTestDebugP;
20716
20717    SelectInterfaceLocale;
20718    if {[string equal $ProposedInterfaceLocale ""]} {
20719	return;
20720    }
20721    set InterfaceLocale [SetInterfaceLocale $ProposedInterfaceLocale];
20722    SetTitle $::Version [ProgramTimeDateStamp] $::InterfaceLocale $::DoSubstitutionsP;
20723    LoadMessageCatalog;
20724    if { [FeaturesUnSetP $program $InterfaceLocale] } {
20725	TestFeatures;
20726	LabelMenus;
20727	MarkProgramTested;
20728	RefreshProginfo;
20729    }
20730    if {$FeatureTestDebugP} {
20731	puts "InterfaceLocale is now $InterfaceLocale";
20732	puts "Size of Features array [array size Features]";
20733    }
20734    SetCommandGlosses;
20735    SetFontGlossHelpTranslations;
20736    SetPalette;
20737    ConstructPalette;
20738    if {$Features(unicodebmp,$program,$InterfaceLocale) == 1} {
20739	ShowMessage [format [_ "The new locale is %s. %s supports Unicode in this locale."] $InterfaceLocale $Program];
20740    } else {
20741	ShowMessage [format [_ "The new locale is %s. %s does not support Unicode in this locale."] $InterfaceLocale $Program];
20742    }
20743    return ;
20744}
20745
20746
20747proc DefineShortcut {command keyspec} {
20748    #Validate command
20749    if {![info exists ::CommandGlosses($command)]} {
20750	ShowMessage [format [_ "%s is not a command for which a shortcut can be created"] $command]
20751	return ;
20752    }
20753    #Validate keyspec
20754    if {![regexp -- {(<Control-[[:alpha:]]>|<KeyPress-F[1-9]>|<KeyPress-F1[0-2]>|<Control-KeyPress-F[1-9]>|<Control-KeyPress-F1[0-2]>)+} $keyspec]} {
20755	ShowMessage [format [_ "%s is not a valid key specification"] $keyspec]
20756	return ;
20757    }
20758    #Set
20759    set ::KeyBindings($keyspec) $command;
20760}
20761
20762set PopupList(DescribeKeyBindings) "";
20763proc DescribeKeyBindings {{bl KeyBindings}} {
20764    global CommandGlosses;
20765    upvar \#0 $bl kb;
20766    if {[PopupDown DescribeKeyBindings] ==1} {return}
20767    set po [CreateTextDisplay [_ "Key Bindings"] 88 9]
20768    set ::PopupList(DescribeKeyBindings) $po;
20769    BindKeys $po
20770    #Invert array and get maximum length of gloss while we are at it.
20771    set MaxGlossLength 0;
20772    foreach KeySeq [array names kb] {
20773	set Gloss $CommandGlosses($kb($KeySeq));
20774	set GlossLength [string length $Gloss];
20775	if {$MaxGlossLength < $GlossLength} {set MaxGlossLength $GlossLength}
20776	set GlossToKeySeq($Gloss) $KeySeq;
20777    }
20778    #Now generate entries in alphabetical order of command glosses
20779    foreach Gloss [lsort [array names GlossToKeySeq]] {
20780	AppendToTextDisplay $po \
20781	    [format "%-*s\t%s\n" $MaxGlossLength $Gloss $GlossToKeySeq($Gloss)];
20782    }
20783}
20784
20785proc PopupShortcutCommands {} {
20786    global PopupList;
20787    if {[PopupDown PopupShortcutCommands] ==1} {return}
20788    set CommandNames [array names ::CommandGlosses]
20789    set maxglosslen 0;
20790    set maxtotallen 0;
20791    foreach c $CommandNames {
20792	set GlossLength [string length $::CommandGlosses($c)]
20793	set CommandLength [string length $c]
20794	set TotalLength [expr $CommandLength + $GlossLength]
20795	if {$GlossLength > $maxglosslen} {
20796	    set maxglosslen $GlossLength;
20797	}
20798	if {$TotalLength > $maxtotallen} {
20799	    set maxtotallen $TotalLength;
20800	}
20801    }
20802    set ht [llength $CommandNames]
20803    if {$ht > 15} {set ht 15}
20804    set po [CreateTextDisplay [_ "Commands Available for Shortcuts"] [expr $maxtotallen + 9] $ht]
20805    BindKeys $po;
20806    set PopupList(PopupShortcutCommands) $po;
20807    AppendToTextDisplay $po [format "%-*s  Command\n\n" $maxglosslen "Description"];
20808    foreach n $CommandNames {
20809	lappend GlossList [list $::CommandGlosses($n) $n]
20810    }
20811    foreach pair [lsort -dictionary -index 0 $GlossList] {
20812	set gloss [lindex $pair 0]
20813	set command [lindex $pair 1]
20814	AppendToTextDisplay $po [format "%-*s  %s\n" $maxglosslen $gloss $command];
20815    }
20816}
20817
20818array set KeyBindings {
20819"<Control-a>"             ToggleIPAA
20820"<Control-b>" ToggleBalloonHelp
20821"<Control-d>"             ToggleIPAD
20822"<Control-E>"		  PopupUserClassEntry
20823"<Control-e>"             ExecuteRegexp
20824"<Control-f>"		  ClearRegexp
20825"<Control-h>"             hist::ToggleHistory
20826"<Control-i>"             ToggleActualRegexp
20827"<Control-j>"             ToggleIPAC
20828"<Control-k>"             DescribeKeyBindings
20829"<Control-L>" 		  GotoStandardLayout
20830"<Control-l>"             ToggleUserClassPalette
20831"<Control-m>"             ToggleSubstitutionMode
20832"<Control-o>"             SaveResults
20833"<Control-p>"             TogglePalette
20834"<Control-r>"             search::SearchResults
20835"<Control-u>"             search::SearchTestData
20836"<Control-w>"             ToggleIPAV
20837"<Control-z>"             resc::PopupCachedEntries
20838"<Control-x><Control-i>"  ClearInput
20839"<Control-x><Control-o>"  ClearOutput
20840"<Control-x><Control-q>"  ShutDown
20841"<KeyPress-F1>"	ShowUnicodeRanges
20842"<KeyPress-F2>"  ShowUnicodeGCP
20843"<KeyPress-F3>"  ToggleUnicodeRangesByCodepoint
20844"<KeyPress-F4>"  PopupCurrentProgramControls
20845"<KeyPress-F5>"  LoadRegularExpressionFromPrimarySelection
20846"<KeyPress-F6>"	 MoveResultsToTestData
20847"<KeyPress-F12>" AbortSearch
20848};
20849
20850proc BindKeys {w {bl KeyBindings}} {
20851    upvar \#0 $bl kb;
20852    foreach KeySeq [array names kb] {
20853	bind $w $KeySeq $kb($KeySeq);
20854    }
20855}
20856
20857proc SetRegReturnBinding {} {
20858    global DoSubstitutionsP;
20859
20860    if {$DoSubstitutionsP} {
20861    	bind $::REG <Return> {focus -force $::SUB}
20862    } else {
20863	bind $::REG <Return> {ExecuteRegexp};
20864    }
20865}
20866
20867proc ConfirmationDialog {WindowName TitleText MainText LeftText RightText} {
20868    global wret;
20869    global MainFont;
20870
20871    toplevel $WindowName -borderwidth 4 -relief raised
20872    wm title $WindowName "";
20873    label  $WindowName.title -text $TitleText -font MainFont;
20874    text $WindowName.txt -width 60 -height 2 -font MainFont;
20875    $WindowName.txt insert insert $MainText;
20876    button $WindowName.okay   -text $RightText -command {set wret 1} -font MainFont;
20877    button $WindowName.cancel -text $LeftText  -command {set wret 0} -font MainFont;
20878    grid $WindowName.title     -row 0 -column 0 -sticky ew -columnspan 2
20879    grid $WindowName.txt     -row 1 -column 0 -sticky ew -columnspan 2
20880    grid $WindowName.cancel    -row 2 -column 0
20881    grid $WindowName.okay      -row 2 -column 1
20882    tkwait variable wret;
20883    destroy $WindowName;
20884    return $wret;
20885}
20886
20887# This section provides user-defined character classes.
20888
20889set UserClassCnt 0;
20890array set UserClasses {};
20891array set UserClassGlosses {};
20892set UserClassPaletteIsDisplayedP 0;
20893set UserClassPaletteToBeDisplayedP 1;
20894set MaxUserClassGlossLength 0;
20895set UserClassColumnSeparation 6;
20896set LeftUserClassDelimiter  {[_}; #This is what the user uses to insert classes.
20897set RightUserClassDelimiter {_]}; #This is what the user uses to insert classes.
20898set LUDlen [string length $LeftUserClassDelimiter];
20899set RUDlen [string length $RightUserClassDelimiter];
20900set LeftUserIntDelimiter {<};
20901set RightUserIntDelimiter {>};
20902
20903proc WarnAboutDelimiters {re} {
20904    if { ([string first $::LeftUserIntDelimiter $re] > -1) ||
20905	 ([string first $:RighttUserIntDelimiter $re] > -1) } {
20906	if {$::UserClassCnt == 0} {
20907	    ShowMessage \
20908		[_ "Regular expression contains intersection markers but no classes are defined."]
20909	    return 1
20910	}
20911    }
20912    return 0;
20913}
20914
20915proc ToggleUserClassesEnabled {} {
20916    global UserClassesEnabledP;
20917    global ToggleUserClassesEnabledIndex;
20918    global DescribeToggleUserClassesEnabledIndex;
20919    global m;
20920
20921    if {$UserClassesEnabledP == 0} {
20922	set UserClassesEnabledP 1;
20923	ShowMessage [_ "User classes enabled."];
20924	$m.tools.classes entryconfigure $ToggleUserClassesEnabledIndex -label [_ "Disable User Classes"];
20925	CheckUserClassAvailability;
20926    } else {
20927	set UserClassesEnabledP 0;
20928	ShowMessage [_ "User classes disabled."];
20929	$m.tools.classes entryconfigure $ToggleUserClassesEnabledIndex -label  [_ "Enable User Classes"];
20930    }
20931}
20932
20933# return a string comprised of the characters in the
20934# intersection of two strings S1 and S2
20935proc stringint { S1 S2 } {
20936#We begin by constructing two arrays whose indices are the characters
20937#in the input strings.
20938    set list1 [split $S1 ""];
20939    set list2 [split $S2 ""];
20940    array set set1 {}
20941    array set set2 {}
20942    foreach x $list1 {
20943	set set1($x) 1;
20944    }
20945    foreach x $list2 {
20946	set set2($x) 1;
20947    }
20948    #Now we actually find the intersection.
20949    array set intset {}
20950    foreach k [array names set2] {
20951	if {[info exists set1($k)]} then {
20952	    set intset($k) 1;
20953	}
20954    }
20955    #Now convert from array to list to string, sorting en passant.
20956    return [join [lsort [array names intset]] ""];
20957}
20958
20959
20960#This takes a cset and inserts any punctuation (dividers and quotation) required
20961#by the program for which it is destined.
20962proc FormatClass {Cset AltType} {
20963
20964    set retlist [list];
20965    switch -exact -- $AltType {
20966	1 {
20967	    lappend retlist $Cset;
20968	}
20969	2 {
20970	    lappend retlist  [join [split $Cset ""] | ];
20971	}
20972	3 {
20973	    lappend retlist  [join [split $Cset ""] \\| ];
20974	}
20975	4 {
20976	    lappend retlist  [join [split $Cset ""] , ];
20977	}
20978	5 {
20979	    set letlist [split $Cset ""]
20980	    foreach x $letlist {
20981		lappend ql [format "\"%s\"" $x];
20982	    }
20983	    lappend retlist [join $ql |];
20984	}
20985	6 {
20986	    lappend retlist  [join [split $Cset ""] \\\\| ];
20987	}
20988	7 {
20989	    lappend retlist  [join [split $Cset ""] \\\\| ];
20990	}
20991	8 {
20992	    lappend retlist  [join [split $Cset ""] \\| ];
20993	}
20994    }
20995    return [join $retlist ""];
20996}
20997
20998#It is probably best to provide user-settable flags governing the responses to:
20999#(a) unbalanced delimiters and
21000#(b) unrecognized character classes.
21001#Warnings should always be issued, but the user should be able to let them go
21002#so that it is possible to write regexps that contain such things as literals.
21003
21004# Ways of handling alternation
21005# 0 Does not support alternation.
21006# 1 [ab]
21007# 2 (a|b)
21008# 3 (a\|b)
21009# 4 {a,b}
21010# 5 ("a"|"b")
21011# 6 (a\\|b)
21012# 7 \\(a\\|b\\)
21013
21014#We first look for an intersection. If we find one, we take note of its
21015#location, process the material leading up to it, then process the
21016#intersection. Then we shift and do another iteration.
21017# return modified copy of regexp
21018
21019proc InstantiateUserClasses {re AltType} {
21020    global LeftClassDelimiter;
21021    global RightClassDelimiter;
21022    global LeftUserClassDelimiter;
21023    global RightUserClassDelimiter;
21024    global LeftUserIntDelimiter;
21025    global RightUserIntDelimiter;
21026    global LUDlen;
21027    global RUDlen;
21028
21029    set LIDlen [string length $LeftUserIntDelimiter];
21030    set RIDlen [string length $RightUserIntDelimiter];
21031
21032    if { $AltType > 1 } {
21033	if {$AltType == 4} {
21034	   set LeftClassDelimiter  {\{} ;
21035  	   set RightClassDelimiter {\}} ;
21036	} elseif {$AltType == 7} {
21037	    set LeftClassDelimiter  {\\(} ;
21038   	    set RightClassDelimiter {\\)} ;
21039	} elseif {$AltType == 8} {
21040	    set LeftClassDelimiter  {\(} ;
21041   	    set RightClassDelimiter {\)} ;
21042	} else {
21043	    set LeftClassDelimiter  {(} ;
21044   	    set RightClassDelimiter {)} ;
21045	}
21046    } else {
21047	set LeftClassDelimiter  {[} ;
21048        set RightClassDelimiter {]} ;
21049    }
21050
21051    set ss $re;
21052    while {[string length $ss] > 0} {
21053	set IntResult "";
21054	set NoIntResult "";
21055	set ldloc [string first $LeftUserIntDelimiter $ss];
21056	set rdloc [expr [string length $ss] - $RIDlen]; #Effect is that by default we consume the whole string.
21057
21058	if {$ldloc < 0} {
21059	    if {[catch {InstRegWithoutIntersections $ss $AltType $LUDlen $RUDlen} NoIntResult] !=0} {
21060		return "";
21061	    } else {
21062		lappend strlist $NoIntResult;
21063	    }
21064	} else {
21065	    set rdloc [string first $RightUserIntDelimiter $ss];
21066	    if {$rdloc >= 0} {
21067		#If we get here, we've found a potential class intersection.
21068		if { [catch {InstantiateClassIntersection [string range $ss $ldloc $rdloc] $AltType $LIDlen} IntResult] != 0} {
21069		    #This means that the region was not a well-formed intersection.
21070		    #We handle it as a region not containing an intersection, only shift the
21071		    # right boundary of that region to the right delimiter of the putative intersection.
21072		    set NoIntersectionRegionEnd $rdloc;
21073		} else {
21074		    set NoIntersectionRegionEnd [expr $ldloc -1];
21075		}
21076	    } else {
21077		set NoIntersectionRegionEnd [expr [string length $ss] -1];
21078		set rdloc $NoIntersectionRegionEnd;
21079	    }
21080	    # Handle region with no intersections
21081	    if { [catch {InstRegWithoutIntersections [string range $ss 0 $NoIntersectionRegionEnd] $AltType $LUDlen $RUDlen} NoIntResult] != 0 } {
21082		puts "Caught exception on InstRegWithoutIntersections";
21083		return "";
21084	    } else {
21085		lappend strlist $NoIntResult;
21086	    }
21087
21088	    lappend strlist $IntResult;
21089	}
21090	set ss [string range $ss [expr $rdloc + $RIDlen] end];
21091    }
21092    return [join $strlist ""];
21093}
21094
21095
21096# We are passed a string that should contain two or more classes.
21097# We validate this and in the course of this obtain the parse.
21098# If validation fails, throw an error and catch it above.
21099# If validation succeeds, we instantiate each of the classes,
21100# and return their intersection.
21101proc InstantiateClassIntersection {is AltType LIDlen} {
21102    global UserClasses;
21103    global LeftClassDelimiter;
21104    global RightClassDelimiter;
21105    global LUDlen;
21106    global RUDlen;
21107
21108    set is [string range $is $LIDlen end-1]; #Ignore delimiters.
21109    set pre {(\[_[^][]+_\])};
21110    set IndexPairList [regexp -all -inline -indices $pre $is];
21111    set Matches [llength $IndexPairList];
21112    if {$Matches} {
21113	#Each entry is a pair containing the beginning and ending indices of [_name_] in is.
21114	set subcnt 0;
21115	set SetList [list];
21116	foreach k $IndexPairList {
21117	    set Left [lindex $k 0]
21118	    if {$Left < 0} {
21119		break
21120	    }
21121	    set Right [lindex $k 1]
21122	    if {$Right < 0} {
21123		break
21124	    }
21125	    set Name [string range $is [expr $Left+$LUDlen] [expr $Right-$RUDlen]]
21126	    if { [info exists UserClasses($Name)] } {
21127		lappend SetList $UserClasses($Name);
21128		incr subcnt;
21129	    } else {
21130		ShowMessage [format [_ "Undefined character class %s"] $Name];
21131		error $Name;
21132	    }
21133	}
21134	set accum [lindex $SetList 0];
21135	for {set j 1} {$j < $subcnt} {incr j} {
21136	    set accum [stringint $accum [lindex $SetList $j] ];
21137	}
21138	lappend retlist $LeftClassDelimiter;
21139	lappend retlist [FormatClass $accum $AltType];
21140	lappend retlist $RightClassDelimiter;
21141	return [join $retlist ""];
21142    }
21143}
21144
21145
21146proc InstRegWithoutIntersections { re AltType LDlen RDlen} {
21147    global UserClasses;
21148    global LeftClassDelimiter;
21149    global RightClassDelimiter;
21150    global LeftUserClassDelimiter;
21151    global RightUserClassDelimiter;
21152
21153    set strlist "";
21154    set ss $re;
21155    while {[string length $ss] > 0} {
21156	set ldloc [string first $LeftUserClassDelimiter $ss];
21157	if {$ldloc < 0} {
21158	    lappend strlist $ss;
21159	    break
21160	}
21161	set rdloc [string first $RightUserClassDelimiter $ss];
21162	if {$rdloc < 0} {
21163	    lappend strlist $ss;
21164	    ShowMessage [format [_ "Warning: left class delimiter without right counterpart in %s"] $ss];
21165	    break ;
21166	}
21167	set ClassName [string range $ss [expr $ldloc+$LDlen] [expr $rdloc-1]]
21168	if { [info exists UserClasses($ClassName)] } {
21169	    lappend strlist [string range $ss 0 [expr $ldloc -1]]; # Copy string up to $ldloc.
21170	    lappend strlist $LeftClassDelimiter;
21171	    lappend strlist [FormatClass $UserClasses($ClassName) $AltType];
21172	    lappend strlist $RightClassDelimiter;
21173	} else {
21174	    ShowMessage [format [_ "Undefined character class %s"] $ClassName];
21175	    error $re;
21176	}
21177	set ss [string range $ss [expr $rdloc + $RDlen] end]
21178    }
21179    return [join $strlist ""];
21180}
21181
21182proc ToggleUserClassPalette {} {
21183    global m;
21184    global UserClassCnt;
21185    global UserClassPaletteIsDisplayedP;
21186    global UserClassPaletteToBeDisplayedP;
21187    global ToggleUserClassPaletteIndex
21188    global DescribeToggleUserClassPaletteIndex;
21189
21190    if { $UserClassPaletteIsDisplayedP == 0} {
21191	if {$UserClassCnt == 0} {
21192	    ShowMessage [_ "No character classes have been defined."]
21193	    return
21194	}
21195	if {[winfo exists .ucpal.lb] == 0} {
21196	    ConstructUserClassPalette;
21197	}
21198	pack .ucpal.lb;
21199	wm deiconify .ucpal
21200	$m.tools.classes entryconfigure $ToggleUserClassPaletteIndex -label [_ "Do Not Display User-Defined Class Palette"];
21201	set UserClassPaletteIsDisplayedP 1;
21202	set UserClassPaletteToBeDisplayedP 1;
21203    } else {
21204	if {[winfo exists .ucpal] == 1} {
21205	    wm withdraw .ucpal;
21206	    if {[winfo exists .ucpal.lb] == 1} {
21207		pack forget .ucpal.lb;
21208	    }
21209	}
21210	$m.tools.classes entryconfigure $ToggleUserClassPaletteIndex -label [_ "Display User-Defined Class Palette"];
21211	set UserClassPaletteIsDisplayedP 0;
21212	set UserClassPaletteToBeDisplayedP 0;
21213    }
21214}
21215
21216proc ShowUserClassPalette {} {
21217    global .ucpal;
21218    global UserClassPaletteDisplayedP;
21219
21220    if {$::UseScrollbarsP} {
21221	pack .ucpal.sbar -side right -expand 0 -fill y;
21222    }
21223    pack .ucpal.lb -side left -expand 1 -fill both;
21224    wm deiconify .ucpal
21225    set UserClassPaletteDisplayedP 1;
21226}
21227
21228# Ignore leading + and - unless they are the only distinction between the strings.
21229proc ClassCompare {a b} {
21230    set cmp [string compare [string trimleft $a "+-"] [string trimleft $b "+-"]];
21231    if {$cmp != 0} {
21232	return $cmp;
21233    } else {
21234	return [string compare $a $b];
21235    }
21236}
21237
21238proc ListUserClassFromMenu {} {
21239    global LUDlen;
21240    global RUDlen;
21241    set renot [GetClassSpecFromClassMenu [.ucpal.lb get active]];
21242    #We can be sure that ClassName is defined since  we got it from the palette.
21243    ListUserClass [string range $renot $LUDlen end-$RUDlen];
21244}
21245
21246proc ListUserClass {ClassName} {
21247    global UserClasses;
21248    set MinWidth 30;
21249
21250    set SortedList [lsort [split $UserClasses($ClassName) ""]];
21251    set CharCnt [llength $SortedList];
21252    set Cset [join $SortedList ""];
21253    if {$CharCnt < 60} {
21254	set Width $CharCnt;
21255    } else {
21256	set Width 60;
21257    }
21258    if {$Width < $MinWidth} { set Width $MinWidth;}
21259    if {$CharCnt <= $Width} {
21260	set Lines 1
21261    } else {
21262	set Lines 3;
21263    }
21264    set ClassListPopup [CreateTextDisplay [format [_ "Class %s"] $ClassName] $Width $Lines];
21265    BindKeys $ClassListPopup;
21266    AppendToTextDisplay $ClassListPopup $Cset;
21267    return $ClassListPopup;
21268}
21269
21270proc ConstructUserClassPalette { } {
21271    global UserClasses;
21272    global UserClassGlosses;
21273    global UserClassPaletteIsDisplayedP;
21274    global UserClassPaletteToBeDisplayedP;
21275    global MaxUserClassPaletteHeight;
21276    global MaxUserClassGlossLength;
21277    global UserClassCnt;
21278    global UserClassColumnSeparation;
21279    global LeftUserClassDelimiter;
21280    global RightUserClassDelimiter;
21281    global program;
21282
21283    set MaxUserClassPaletteHeight 10;
21284
21285    destroy .ucpal.lb;
21286    destroy .ucpal.sbar
21287    if {$UserClassCnt == 0} {
21288	destroy .ucpal;
21289	return;
21290    }
21291    set UserClassPaletteIsDisplayedP 0;
21292    if {[winfo exists .ucpal] == 0} {
21293	toplevel .ucpal;
21294    }
21295    wm title .ucpal [_ "User Defined Named Character Classes"];
21296    wm withdraw .ucpal
21297    if {$UserClassCnt > $MaxUserClassPaletteHeight} {
21298	set lbentries $MaxUserClassPaletteHeight;
21299    } else {
21300	set lbentries 0;
21301    }
21302    if {[winfo exists .ucpal.lb] == 0} {
21303	listbox .ucpal.lb -height $lbentries -width 0 -font MainFont  \
21304	    -yscrollcommand {.ucpal.sbar set} -fg $::ColorSpecs(UserClassPalette,Foreground) \
21305	    -bg $::ColorSpecs(UserClassPalette,Background);
21306	scrollbar .ucpal.sbar -command {.ucpal.lb yview} \
21307	    -troughcolor $::ColorSpecs(UserClassPalette,Background) \
21308	    -bg $::ColorSpecs(UserClassPalette,Background);
21309    }
21310    bind .ucpal.lb <Double-ButtonPress-1> {
21311	ListUserClassFromMenu;
21312    }
21313    bind .ucpal.lb <<B3>> {
21314	$::REG insert insert [GetClassSpecFromClassMenu [.ucpal.lb get active]]
21315    }
21316    bind .ucpal.lb <Destroy> {
21317	set UserClassPaletteIsDisplayedP 0;
21318    }
21319    bind .ucpal.sbar <<B3>> "ScrollbarMoveBigIncrement .ucpal.sbar 0.25 %x %y"
21320    BindKeys .ucpal;
21321    set SortedList [lsort -command ClassCompare [array names UserClassGlosses]];
21322    foreach ClassName  $SortedList {
21323	.ucpal.lb insert end [format {%-*s %s%s%s} \
21324	   [expr $MaxUserClassGlossLength + $UserClassColumnSeparation] \
21325	  $UserClassGlosses($ClassName) $LeftUserClassDelimiter $ClassName \
21326		  $RightUserClassDelimiter];
21327    }
21328    balloonhelp_for .ucpal.lb [_ "Left click to select. Right click to insert into regular expression.\nDouble left click to display members of class."]
21329    if {$UserClassPaletteToBeDisplayedP} {
21330	ShowUserClassPalette;
21331    }
21332}
21333
21334proc StoreUserClassDefinition {name cset gloss} {
21335    global UserClassCnt;
21336    global UserClasses;
21337    global UserClassGlosses;
21338    global MaxUserClassGlossLength;
21339
21340    set UserClassGlosses($name) $gloss;
21341    set UserClasses($name) $cset;
21342    set lg [string length $gloss];
21343    # We keep track of the maximum length so we can use it to compute
21344    # the field width in the palette.
21345    if { $lg > $MaxUserClassGlossLength} {
21346	set MaxUserClassGlossLength $lg;
21347    }
21348    incr UserClassCnt;
21349    CheckUserClassAvailability;
21350}
21351
21352proc DefineUserClassFromPopup {} {
21353    global YesNoResponse;
21354    global UserClasses;
21355
21356    set redo 0;
21357    set name  [.udcentry.nameent get];
21358    set cset  [.udcentry.charent get];
21359    set gloss [.udcentry.glosent get];
21360    set nl [string length $name]
21361    set cl [string length $cset]
21362    set gl [string length $gloss]
21363    if {[expr $nl * $cl * $gl] == 0} {
21364	set redo 1;
21365	lappend msg [_ "Missing fields: "];
21366	if {$nl < 1} {
21367	    lappend msg [_ "name"];
21368	}
21369        if {$cl < 1} {
21370	    lappend msg [_ "characters"];
21371	}
21372	if {$gl < 1} {
21373	    lappend msg [_ "gloss"];
21374	}
21375	ShowMessage [join $msg];
21376    }
21377    destroy .udcentry;
21378    if {$redo == 0} {
21379	if {[info exists UserClasses($name)]} {
21380	    set SortedList [lsort [split $UserClasses($name) ""]];
21381	    set resp [ConfirmationDialog .udcconf [format [_ "You are about to redefine character class %s.\nHere is the current definition:\n"] $name] $SortedList [_ "Cancel Redefinition"] [_ "Proceed with Redefinition"]];
21382	    if {$resp == 0} {
21383		set redo 1;
21384		set name "";
21385	    }
21386	}
21387    }
21388    if {$redo == 1} {
21389	PopupUserClassEntry $name $cset $gloss;
21390    } else {
21391	StoreUserClassDefinition $name $cset $gloss;
21392	ShowMessage [format [_ "Definition of character class %s added."] $name];
21393	ConstructUserClassPalette;
21394	set ::UserClassesEnabledP 1
21395    }
21396}
21397
21398option add *udcentry*Button.background $::ColorSpecs(PopupWidgetButton,Background) 100
21399option add *udcentry*Button.foreground $::ColorSpecs(PopupWidgetButton,Foreground) 100
21400option add *udcentry*Entry.background $::ColorSpecs(PopupWidgetEntry,Background) 100
21401option add *udcentry*Entry.foreground $::ColorSpecs(PopupWidgetEntry,Foreground) 100
21402option add *udcentry*Label.background $::ColorSpecs(PopupWidgetLabel,Background) 100
21403option add *udcentry*Label.foreground $::ColorSpecs(PopupWidgetLabel,Foreground) 100
21404
21405proc PopupUserClassEntry {{name ""} {cset ""} {gloss ""} } {
21406    global MainFont;
21407
21408    if {[PopupDown UserClassEntry] == 1} {return}
21409    set po [toplevel .udcentry -borderwidth 4 -relief raised \
21410		-bg $::ColorSpecs(PopupWidgetDefault,Background)]
21411    set ::PopupList(UserClassEntry) $po;
21412    wm title .udcentry "";
21413    after idle {
21414	update idletasks
21415	set xmax [winfo screenwidth .udcentry]
21416	set ymax [winfo screenheight .udcentry]
21417	set x0 [expr 1 * ($xmax -[winfo reqwidth .udcentry])/3];
21418	set y0 [expr 1 * ($ymax -[winfo reqheight .udcentry])/3];
21419	wm geometry .udcentry "+$x0+$y0";
21420    }
21421    label  .udcentry.title -text [_ "Enter Character Class Definition"];
21422    label  .udcentry.namelab -text [format "%-12s" [_ "Name"]];
21423    entry  .udcentry.nameent -width 50 -font MainFont;
21424    .udcentry.nameent insert 0 $name;
21425    label  .udcentry.charlab  -text [format "%-12s" [_ "Characters"]];
21426    entry  .udcentry.charent -width 50 -font MainFont;
21427    .udcentry.charent insert 0 $cset;
21428    label  .udcentry.gloslab -text [format "%-12s" [_ "Gloss"]];
21429    entry  .udcentry.glosent -width 50 -font MainFont;
21430    .udcentry.glosent insert 0 $gloss;
21431    button .udcentry.okay   -text [_ "OK"]     -command DefineUserClassFromPopup;
21432    button .udcentry.cancel -text [_ "Cancel"] -command {destroy .udcentry}
21433    catch {.udcentry.title configure -font -*-Courier-bold-o-*--*-180-*}
21434    bind .udcentry.nameent <FocusIn> {SetInsertionTargets .udcentry.nameent}
21435    bind .udcentry.charent <FocusIn> {SetInsertionTargets .udcentry.charent}
21436    bind .udcentry.glosent <FocusIn> {SetInsertionTargets .udcentry.glosent}
21437    BindKeys .udcentry;
21438
21439    grid .udcentry.title     -row 0 -column 0 -sticky ew -columnspan 3
21440    grid .udcentry.namelab   -row 1 -column 0
21441    grid .udcentry.nameent   -row 1 -column 1 -sticky w
21442    grid .udcentry.charlab   -row 2 -column 0
21443    grid .udcentry.charent   -row 2 -column 1 -sticky w
21444    grid .udcentry.gloslab   -row 3 -column 0
21445    grid .udcentry.glosent   -row 3 -column 1 -sticky w
21446    grid .udcentry.cancel    -row 4 -column 0
21447    grid .udcentry.okay      -row 4 -column 2
21448}
21449
21450# Returns the number of fields found.
21451proc ParseUserClassEntry { def } {
21452    # First field is class name
21453    # Second field is set of characters
21454    # Third field is gloss
21455
21456    set def [string trim $def];
21457    set tabloc1 [string first "\t" $def];
21458    if {$tabloc1 == -1} {
21459	return 1;
21460    }
21461    set tabloc2 [string last "\t" $def];
21462    if {$tabloc1 == $tabloc2} {
21463	return 2;
21464    }
21465    set ClassName [string trim [string range $def 0 [expr $tabloc1 -1]]];
21466    set Cset [string trim [string range $def [expr $tabloc1 +1] [expr $tabloc2 -1]]];
21467    set Gloss [string trim [string range $def [expr $tabloc2 +1] end]];
21468
21469    StoreUserClassDefinition $ClassName $Cset $Gloss;
21470    return 3;
21471}
21472
21473proc DefineCharacterClass {name cset gloss} {
21474    StoreUserClassDefinition $name $cset $gloss
21475}
21476
21477proc ReadUserClasses { UserClassFile } {
21478    set cnt 0;
21479    if { [file exists $UserClassFile] } {
21480	if {[ catch {open $UserClassFile "r"} UserClassHandle] == 0} {
21481	    while { [gets $UserClassHandle line] > 0} {
21482		incr cnt;
21483		set fields [ParseUserClassEntry $line];
21484		if {$fields < 3} {
21485		    ShowMessage [format [_ "The class definition at line %1\$d of file %2\$s is ill-formed."] $cnt $UserClassFile]
21486		    if {$fields == 2} {
21487			ShowMessage [_ "It has only two of the three required fields"];
21488		    } else {
21489			ShowMessage [_ "It has only one of the three required fields"];
21490		    }
21491		    close $UserClassHandle;
21492		    return;
21493		}
21494	    }
21495	    close $UserClassHandle;
21496	    ShowMessage [format  [_ "%d character classes read from file %s."] $cnt $UserClassFile];
21497	} else {
21498	    ShowMessage [format [_ "Cannot open file %s."] $UserClassFile];
21499	    close $UserClassHandle;
21500	    return;
21501	}
21502    } else {
21503	ShowMessage [format [_ "There is no file named %s"] $UserClassFile];
21504    }
21505    return;
21506}
21507
21508proc ReadUserClassesInteractively { } {
21509    set UserClassFile [tk_getOpenFile];
21510    if {[string equal $UserClassFile ""] != 1} {
21511	ReadUserClasses $UserClassFile;
21512    } else {
21513	ShowMessage [_ "File selection aborted."];
21514    }
21515}
21516
21517proc SaveUserClasses {} {
21518    set ClassList [array names ::UserClassGlosses]
21519    if {[llength $ClassList] == 0} {
21520	return ""
21521    }
21522    foreach ClassName [lsort $ClassList] {
21523	lappend sl [format "%s\t%s\t%s" $ClassName $::UserClasses($ClassName) $::UserClassGlosses($ClassName)]
21524    }
21525    return $sl;
21526}
21527
21528proc SaveUserClassDefinitions {} {
21529    global UserClassGlosses;
21530    global UserClasses;
21531    global UserClassCnt;
21532
21533    if {$UserClassCnt == 0} {
21534	ShowMessage [_ "No named character classes have been defined."];
21535	return ;
21536    }
21537    set SaveFile [tk_getSaveFile -initialfile [_ "ClassDefinitions"]];
21538    if {[string equal $SaveFile ""] == 1} {
21539	return ;
21540    } else {
21541        if { [catch {open $SaveFile "w+"} fh] != 0} {
21542	    ShowMessage [format [_ "Unable to open file %s in which to save class definitions."] \
21543			     [MinimizeFileName $SaveFile]];
21544	    return ;
21545        }
21546    }
21547    foreach ClassName [lsort [array names UserClassGlosses]] {
21548	puts $fh [format "%s\t%s\t%s\n" $ClassName $UserClasses($ClassName) $UserClassGlosses($ClassName)]
21549    }
21550    close $fh;
21551}
21552
21553proc GetClassSpecFromClassMenu {mre} {
21554    global MaxUserClassGlossLength;
21555    global UserClassColumnSeparation;
21556
21557    return [string trimleft [string range $mre [expr $MaxUserClassGlossLength + $UserClassColumnSeparation] end]];
21558}
21559
21560proc ClearUserClasses {} {
21561    array set ::UserClasses {};
21562    array set ::UserClassGlosses {};
21563    set ::UserClassCnt 0;
21564    set ::MaxUserClassGlossLength 0;
21565    if {[winfo exists .ucpal]} {
21566	destroy .ucpal
21567    }
21568    $::m.tools.classes entryconfigure $::ToggleUserClassPaletteIndex \
21569	-label [_ "Display User-Defined Class Palette"];
21570    set ::UserClassPaletteIsDisplayedP 0;
21571    ShowMessage [_ "User classes cleared."]
21572}
21573
21574#End of user-defined named character class section
21575
21576
21577proc LayoutWindows {} {
21578    global SideBySideLayoutP;
21579    global RegSubSideBySideP;
21580    global DoSubstitutionsP;
21581    global ComparisonWindowDisplayedP;
21582    global MainWidth;
21583    global MainHeight;
21584    global PixelHeight;
21585    global UseScrollbarsP;
21586
21587    pack forget .sep1  .sep2  .sep3  .sepcmnds  .cmnds  .msg  .rsf  .dwf  .dwf.vwi  .dwf.vwo \
21588	.dwf.vwc  $::REG  $::SUB  $::IND  $::INDSB  $::OUT  $::OUTSB  $::COM  $::COMSB
21589
21590    if {$::AquaP} {
21591	pack .cmnds -side top                     -fill x
21592	pack .sepcmnds                            -fill x
21593    }
21594    pack .msg       -side top                     -fill x
21595    pack .sep2                                   -fill x
21596    set HeightInLines [expr $PixelHeight / [font metrics MainFont -linespace]];
21597    incr HeightInLines -5; #For messages, re, sub, menubar.
21598
21599    #Take care of the regexp and subexp windows.
21600    if {$RegSubSideBySideP && $DoSubstitutionsP} {
21601	set IndWidth [expr $MainWidth / 2];
21602	$::REG  configure -width $IndWidth;
21603	$::SUB configure -width $IndWidth;
21604    }
21605    pack .rsf -side top -expand 0    -fill x;
21606    if {$DoSubstitutionsP} {
21607	if {$RegSubSideBySideP} {
21608	    pack $::REG        -side left   -expand yes   -fill x;
21609	    pack $::SUB       -side right  -expand yes   -fill x;
21610	} else {
21611	    pack $::REG        -side top                 -fill x;
21612	    pack $::SUB       -side top                 -fill x;
21613	}
21614    } else {
21615	pack $::REG        -side top                 -fill x;
21616    }
21617
21618    #Compute the heights to use for the data windows.
21619    if {$SideBySideLayoutP == 0} {
21620	if {$ComparisonWindowDisplayedP} {
21621	    set IndHeight [expr $HeightInLines / 3];
21622	} else {
21623	    set IndHeight [expr $HeightInLines / 2];
21624	}
21625    } else {
21626	set IndHeight $MainHeight;
21627    }
21628    pack .dwf -side bottom -expand 1 -fill both;
21629
21630    if {$SideBySideLayoutP == 0} {
21631	$::IND configure -width $MainWidth  -height $IndHeight;
21632	$::OUT configure -width $MainWidth  -height $IndHeight;
21633	$::COM configure -width $MainWidth  -height $IndHeight;
21634	if {$ComparisonWindowDisplayedP} {
21635	    if {$UseScrollbarsP} {
21636		pack .dwf.vwi  -side top    -fill both -expand 1
21637		pack .dwf.vwo  -side top    -fill both -expand 1
21638		pack .dwf.vwc  -side bottom -fill both -expand 1
21639		pack $::INDSB  -side right  -fill y    -expand 0 -in .dwf.vwi;
21640		pack $::IND    -side left   -fill both -expand 1 -in .dwf.vwi;
21641		pack $::OUTSB  -side right  -fill y    -expand 0 -in .dwf.vwo;
21642		pack $::OUT    -side left   -fill both -expand 1 -in .dwf.vwo;
21643		pack $::COMSB  -side right  -fill y    -expand 0 -in .dwf.vwc;
21644		pack $::COM    -side left   -fill both -expand 1 -in .dwf.vwc;
21645	    } else {
21646		pack $::IND    -side top     -fill both -expand 1
21647		pack .sep1                   -fill x
21648		pack $::OUT    -side top     -fill both -expand 1
21649		pack .sep2                   -fill x
21650		pack $::COM    -side bottom  -fill both -expand 1
21651	    }
21652	} else {
21653	    if {$UseScrollbarsP} {
21654		pack .dwf.vwi  -side top    -fill both -expand 1
21655		pack .dwf.vwo  -side bottom -fill both -expand 1
21656		pack $::INDSB  -side right  -fill y    -expand 0 -in .dwf.vwi;
21657		pack $::IND    -side left   -fill both -expand 1 -in .dwf.vwi;
21658		pack $::OUTSB  -side right  -fill y    -expand 0 -in .dwf.vwo;
21659		pack $::OUT    -side left   -fill both -expand 1 -in .dwf.vwo;
21660	    } else {
21661		pack $::IND    -side top     -fill both -expand 1
21662		pack .sep1                   -fill x
21663		pack $::OUT    -side bottom  -fill both -expand 1
21664	    }
21665	}
21666    } else {
21667	if {$ComparisonWindowDisplayedP} {
21668	    set SideWidth [expr $MainWidth / 3];
21669	    $::IND configure -width $SideWidth -height $IndHeight;
21670	    $::OUT configure -width $SideWidth -height $IndHeight;
21671	    $::COM configure -width $SideWidth  -height $IndHeight;
21672	    if {$UseScrollbarsP} {pack $::INDSB  -side left  -expand 0 -fill y}
21673	    if {$UseScrollbarsP} {pack $::COMSB  -side right -expand 0 -fill y}
21674	    pack $::IND    -side left  -expand 1 -fill both
21675	    if {$UseScrollbarsP} {pack $::OUTSB  -side left  -expand 0 -fill y}
21676	    pack $::OUT    -side left  -expand 1 -fill both
21677	    pack $::COM    -side right -expand 1 -fill both
21678	} else {
21679	    set SideWidth [expr $MainWidth / 2];
21680	    $::IND configure -width $SideWidth  -height $IndHeight;
21681	    $::OUT configure -width $SideWidth  -height $IndHeight;
21682	    if {$UseScrollbarsP} {pack $::INDSB -side left  -fill y    -expand 0}
21683	    if {$UseScrollbarsP} {pack $::OUTSB -side right -fill y    -expand 0}
21684	    pack $::IND   -side left  -fill both -expand 1
21685	    pack $::OUT   -side right -fill both -expand 1
21686	}
21687    }
21688    if {$DoSubstitutionsP} {
21689	InOutScrollLinkage;
21690    }
21691}
21692
21693set LeftArrowImage [image create photo -data {
21694    R0lGODlhFAAUAIAAAAAAAL+/vyH5BAEAAAEALAAAAAAUABQAAAIqjI+py43gGIAxTVrNxXVz
21695    54WTIopWGZ7oRq7X4o4wm2lvbX+ZjGv9/ysAADs=
21696}];
21697
21698namespace eval search {
21699    variable SearchOffset;
21700    variable SrchWCnt 0;
21701    variable GotoCharWCnt 0;
21702    namespace export GetSearchTarget
21703
21704    proc SearchInitialize {w} {
21705	variable SearchOffset;
21706	set SearchOffset($w,f) 1.0;
21707	set SearchOffset($w,b) 1.0;
21708    }
21709
21710    proc SearchResults {} {
21711	if {[string length [$::OUT get 1.0 end]] <= 1 } {
21712	    ShowMessage [_ "There is no result text to search."]
21713	    return
21714	}
21715	PopupSearch $::OUT  [_ "Search Results"];
21716    }
21717
21718    proc SearchTestData {} {
21719	if {[string length [$::IND get 1.0 end]] <= 1 } {
21720	    ShowMessage [_ "There is no input text to search."]
21721	    return
21722	}
21723	PopupSearch $::IND  [_ "Search Input Text"];
21724    }
21725
21726    proc GotoCharResults {} {
21727	if {[string length [$::OUT get 1.0 end]] <= 1 } {
21728	    ShowMessage [_ "There are no results to search."]
21729	    return
21730	}
21731	PopupGotoChar $::OUT [_ "Go to Character in Results"];
21732    }
21733
21734    proc GotoCharTestData {} {
21735	if {[string length [$::IND get 1.0 end]] <= 1 } {
21736	    ShowMessage [_ "There is no test data to search."]
21737	    return
21738	}
21739	PopupGotoChar $::IND [_ "Go to Character in Test Data"];
21740    }
21741
21742
21743    proc SearchText {w re forwardp cw} {
21744	variable SearchOffset;
21745	if {$forwardp} {
21746	    set df "-forward";
21747	    set Offset $SearchOffset($w,f);
21748	} else {
21749	    set df "-backward";
21750	    set Offset $SearchOffset($w,b);
21751	}
21752	set CurrentLine [lindex [split $Offset "."] 0]
21753	set CurrentChar [lindex [split $Offset "."] 1]
21754	set ind [$w search $df -regexp -count MatchLen $re $CurrentLine.$CurrentChar]
21755	if {$ind == ""} {
21756	    ShowMessage [_ "No match found"];
21757	    return
21758	} else {
21759	    $w tag delete match;
21760	    $w tag configure "match" -background $::ColorSpecs(Match,Background);
21761	    $w tag add match $ind "$ind + $MatchLen chars"
21762	    $w see $ind
21763	    set MatchBegin [$w index match.first]
21764	    set MatchEnd   [$w index match.last-1chars];
21765	    set MatchBeginChar [CountChars [$w get 1.0 $MatchBegin-1chars]];
21766	    set MatchEndChar [expr $MatchBeginChar + [CountChars [$w get $MatchBegin $MatchEnd]]];
21767	    set msg [format [_ "Matched \[%s-%s\]  \[%s-%s\]"] $MatchBegin $MatchEnd [DelimitNumber $MatchBeginChar] [DelimitNumber $MatchEndChar]];
21768	    ShowMessage $msg
21769	    $cw.ri configure -text $msg;
21770	    set SearchOffset($w,f) "$ind + $MatchLen chars + 1 chars"
21771	    set SearchOffset($w,b) "$ind -1 chars"
21772	    return
21773	}
21774    }
21775
21776
21777    proc PopupSearch {w title} {
21778	global MainFont;
21779	variable SrchWCnt;
21780	incr SrchWCnt;
21781
21782	set pn [format ".srch%d" $SrchWCnt];
21783	if {[winfo exists $pn]} {
21784	    raise $pn
21785	    return
21786	}
21787	toplevel $pn -borderwidth 4 -relief raised \
21788	    -bg $::ColorSpecs(PopupWidgetDefault,Background);
21789	wm title $pn $title;
21790	label $pn.ri  -bg $::ColorSpecs(PopupWidgetDefault,Background);
21791	entry $pn.ent -width 40 -font MainFont   \
21792	    -bg $::ColorSpecs(PopupWidgetDefault,Background);
21793	button $pn.f  -text [_ "Search Forward"] \
21794	    -command "search::SearchForEntry $w 1 $pn"  \
21795	    -bg $::ColorSpecs(PopupWidgetButton,Background);
21796	button $pn.b  -text [_ "Search Backward"] \
21797	    -command "search::SearchForEntry $w 0 $pn" \
21798	    -bg $::ColorSpecs(PopupWidgetButton,Background);
21799	button $pn.d  -text [_ "Dismiss"] \
21800	    -command "destroy $pn" \
21801	    -bg $::ColorSpecs(PopupWidgetButton,Background);
21802	pack $pn.ri -side top
21803	pack $pn.ent -side top
21804	pack $pn.f -side right
21805	pack $pn.d -side left
21806	pack $pn.b -side right
21807	raise $pn;
21808	set AfterIdleCmd [format {update idletasks
21809	    set TextLeftEdge [winfo rootx %s];
21810	    dmsg "TextLeftEdge=$TextLeftEdge"
21811	    set TextRightEdge [expr $TextLeftEdge +  [winfo width %s]];
21812	    dmsg "TextRightEdge=$TextRightEdge"
21813	    set PopupWidth [winfo width %s];
21814	    dmsg "PopupWidth=$PopupWidth"
21815	    set x [expr int($TextRightEdge - ((2.0/3.0) * $PopupWidth))]
21816	    dmsg "x=$x"
21817	    set TextTopEdge  [winfo rooty %s];
21818	    dmsg "TextTopEdge=$TextTopEdge"
21819	    set TextMidHeight [expr $TextTopEdge + ([winfo height %s]/2.0)]
21820	    dmsg "TextMidHeight=$TextMidHeight"
21821	    set PopupHeight [winfo height %s];
21822	    dmsg "PopupHeight=$PopupHeight"
21823	    set y [expr int ($TextMidHeight -((2.0/3.0) * $PopupHeight))]
21824	    dmsg "y=$y"
21825	    wm geometry %s "+$x+$y"
21826	} $w $w $pn $w $pn $w $pn];
21827	after idle $AfterIdleCmd;
21828	BindKeys $pn;
21829	bind $pn <FocusIn> "SetInsertionTargets $pn.ent"
21830	bind $pn.ent <FocusIn> "SetInsertionTargets $pn.ent"
21831	bind $pn.ent <Return> "search::SearchForEntry $w 1 $pn"
21832    }
21833
21834    proc SearchForEntry {w d pn} {
21835	set tgt [$pn.ent get];
21836	SearchText $w $tgt $d $pn;
21837    }
21838
21839    proc PopupGotoChar {w title} {
21840	global MainFont;
21841	variable GotoCharWCnt;
21842	incr GotoCharWCnt;
21843
21844	set pn [format ".gotochar%s" [regsub -all "\\." $w "-"]]
21845	if {[winfo exists $pn]} {
21846	    raise $pn
21847	    return
21848	}
21849	toplevel $pn -borderwidth 4 -relief raised \
21850	    -bg $::ColorSpecs(PopupWidgetDefault,Background);
21851	wm title $pn "";
21852	label $pn.title -text $title \
21853	    -bg $::ColorSpecs(PopupWidgetDefault,Background);
21854	entry $pn.ent -width 40 -font MainFont \
21855    	    -bg $::ColorSpecs(PopupWidgetDefault,Background);
21856	bind $pn <FocusIn> "SetInsertionTargets $pn.ent"
21857	button $pn.f  -text [_ "Go"] \
21858	    -command "search::GotoCharInText $w $pn" \
21859	    -bg $::ColorSpecs(PopupWidgetButton,Background);
21860	button $pn.d  -text [_ "Dismiss"] \
21861	    -command "destroy $pn" \
21862	    -bg $::ColorSpecs(PopupWidgetButton,Background);
21863	pack $pn.title -side top
21864	pack $pn.ent -side top
21865	pack $pn.f -side right
21866	pack $pn.d -side left
21867	raise $pn;
21868	set AfterIdleCmd [format {update idletasks
21869	    set TextLeftEdge [winfo rootx %s];
21870	    dmsg "TextLeftEdge=$TextLeftEdge"
21871	    set TextRightEdge [expr $TextLeftEdge +  [winfo width %s]];
21872	    dmsg "TextRightEdge=$TextRightEdge"
21873	    set PopupWidth [winfo width %s];
21874	    dmsg "PopupWidth=$PopupWidth"
21875	    set x [expr int($TextRightEdge - ((2.0/3.0) * $PopupWidth))]
21876	    dmsg "x=$x"
21877	    set TextTopEdge  [winfo rooty %s];
21878	    dmsg "TextTopEdge=$TextTopEdge"
21879	    set TextMidHeight [expr $TextTopEdge + ([winfo height %s]/2.0)]
21880	    dmsg "TextMidHeight=$TextMidHeight"
21881	    set PopupHeight [winfo height %s];
21882	    dmsg "PopupHeight=$PopupHeight"
21883	    set y [expr int ($TextMidHeight -((2.0/3.0) * $PopupHeight))]
21884	    dmsg "y=$y"
21885	    wm geometry %s "+$x+$y"
21886	} $w $w $pn $w $pn $w $pn];
21887	after idle $AfterIdleCmd;
21888	BindKeys $pn;
21889	bind $pn.ent <FocusIn> "SetInsertionTargets $pn.ent"
21890	bind $pn.ent <Return>  "search::GotoCharInText $w $pn"
21891    }
21892
21893    #tw = text window in which to locate character
21894    #cw = calling window - the name of the popup from which to get the character position.
21895    proc GotoCharInText {tw cw} {
21896	#Handle both tcl line.char format indices and pure character offsets.
21897	set CharPos [$cw.ent get]
21898	$tw tag delete goto;
21899	$tw tag configure "goto" -background $::ColorSpecs(Match,Background);
21900	if {[scan $CharPos %d.%d line char] >= 2} {
21901	    $tw tag add goto $CharPos "$CharPos + 1 chars"
21902	    $tw see $CharPos;
21903	} else {
21904	    $tw tag add goto 1.0+${CharPos}chars 1.1+${CharPos}chars
21905	    $tw see 1.0+${CharPos}chars
21906	}
21907    }
21908}
21909
21910
21911namespace eval resc {
21912    namespace export CacheResult ResetNumberOfResultsToStore PopupCachedEntries
21913    variable ResultsToKeep 5;
21914    variable ResultsStored 0;
21915    variable EntriesDisplayed 0;
21916    variable ResultList;
21917    variable CacheChecked;
21918    variable EventNumber 0;
21919
21920    array set CacheChecked {};
21921
21922    proc CacheResult {res prg re se} {
21923	variable ResultsToKeep;
21924	variable ResultsStored;
21925	variable ResultList;
21926	variable EventNumber;
21927	global DoSubstitutionsP;
21928
21929	incr EventNumber;
21930	if {$ResultsStored >= $ResultsToKeep} {
21931	    set ResultList [lreplace $ResultList 0 0]; #Remove 1st element from list.
21932	    incr ResultsStored -1;
21933	}
21934	if {$DoSubstitutionsP} {
21935	    lappend ResultList [list $EventNumber $res $prg $re $se];
21936	} else {
21937	    lappend ResultList [list $EventNumber $res $prg $re];
21938	}
21939	incr ResultsStored;
21940    }
21941
21942    proc DeleteCacheEntry {k} {
21943	variable ResultsStored;
21944	variable ResultList;
21945
21946	set ResultList [lreplace $ResultList $k $k]
21947	incr ResultsStored -1;
21948    }
21949
21950    proc DeleteCacheEntries {} {
21951	variable ResultList
21952
21953	set SelectedEntries [list];
21954	set SelectedEntryCnt 0;
21955	foreach i [array names ::CacheChecked] {
21956	    if {$::CacheChecked($i) == 1} {
21957		lappend SelectedEntries $i;
21958		incr SelectedEntryCnt;
21959	    }
21960	}
21961	if {$SelectedEntryCnt == 0} {return}
21962
21963	set SelectedEntries [lsort -decreasing $SelectedEntries];
21964	foreach i $SelectedEntries {
21965	    DeleteCacheEntry [expr $i -1];
21966	    .cacentry.chk$i deselect
21967	}
21968	resc::UpdateCacheDisplay;
21969    }
21970
21971    proc ResetNumberOfResultsToStore {New} {
21972	variable ResultsToKeep;
21973	variable ResultsStored;
21974	variable ResultList;
21975
21976	if {$New < 0} {return}
21977	set ResultsToKeep $New;
21978	if {$New < $ResultsStored} {
21979	    set ResultList [lreplace $ResultList 0 [expr $ResultsStored - $New - 1]];
21980	    set ResultsStored $ResultsToKeep;
21981	}
21982    }
21983
21984    proc SaveCacheEntries {} {
21985	variable ResultList
21986
21987	set SelectedEntries [list];
21988	set SelectedEntryCnt 0;
21989	foreach i [array names ::CacheChecked] {
21990	    if {$::CacheChecked($i) == 1} {
21991		lappend SelectedEntries $i;
21992		incr SelectedEntryCnt;
21993	    }
21994	}
21995	for {set i 0} {$i < $SelectedEntryCnt} {incr i} {
21996	    set Entry [lindex $ResultList [expr [lindex $SelectedEntries $i] -1]]
21997	    set EntryEventNumber [lindex $Entry 0];
21998	    set SaveFile [tk_getSaveFile -initialfile \
21999			      [format [_ "Result-%03d"] $EntryEventNumber]];
22000	    if {[string equal $SaveFile ""] == 1} {
22001		ShowMessage [_ "File selection cancelled."];
22002		return ;
22003	    } else {
22004		if { [catch {open $SaveFile "w+"} fh] != 0} {
22005		    ShowMessage [format [_ "Unable to open file %s in which to save result."] \
22006				     [MinimizeFileName $SaveFile]];
22007		    return ;
22008		}
22009	    }
22010	    puts $fh [lindex $Entry 1];
22011	    close $fh;
22012	}
22013    }
22014
22015    proc CompareCacheEntries {} {
22016	variable ResultList;
22017	set SelectedEntries [list];
22018	set SelectedEntryCnt 0;
22019	foreach i [array names ::CacheChecked] {
22020	    if {$::CacheChecked($i) == 1} {
22021		lappend SelectedEntries $i;
22022		incr SelectedEntryCnt;
22023	    }
22024	}
22025	if {$SelectedEntryCnt < 2} {
22026	    ShowMessage [_ "There's no point in comparing fewer than two results."]
22027	    return ;
22028	}
22029
22030	for {set i 0} {$i < $SelectedEntryCnt} {incr i} {
22031	    for {set j [expr $i + 1]} {$j < $SelectedEntryCnt} {incr j} {
22032		set a [lindex $SelectedEntries $i]
22033		set b [lindex $SelectedEntries $j]
22034		if {[string equal [lindex [lindex $ResultList [expr $a -1]] 1]\
22035			 [lindex [lindex $ResultList [expr $b -1]] 1]]} {
22036		    lappend ol [format "%d=%d  "  $a $b];
22037		} else {
22038		    lappend ol [format "%d!=%d  " $a $b];
22039		}
22040	    }
22041	}
22042	if {$SelectedEntryCnt <=5} {
22043	    ShowMessage [join $ol]
22044	} else {
22045	    foreach i $ol {
22046		puts $i;
22047	    }
22048	    FlushJournal; #So that the results of multiple comparisons can be seen.
22049	}
22050    }
22051
22052    proc FormatPopupString {k entry} {
22053	set MaxRELength 15;
22054
22055	set EventNum [lindex $entry 0];
22056	set prog [lindex $entry 2]
22057	set lines [DelimitNumber [CountLines [lindex $entry 1]]]
22058	set rexp [lindex $entry 3]
22059	if {[string length $rexp] > $MaxRELength} {
22060	    set rexp [string range $rexp 0 [expr $MaxRELength -1]]
22061	}
22062	if {[llength $entry] > 4} {
22063	    set sexp [lindex $entry 4]
22064	    if {[string length $sexp] > $MaxRELength} {
22065		set sexp [string range $sexp 0 [expr $MaxRELength -1]]
22066	    }
22067	    set txt\
22068		[format "%d  %3d %-10s %6s  %-*s %*s" $k $EventNum $prog $lines $MaxRELength $rexp $MaxRELength $sexp]
22069	} else {
22070	    set txt \
22071		[format "%d  %3d %-10s %6s  %-*s" $k $EventNum $prog $lines $MaxRELength $rexp]
22072	}
22073	return $txt;
22074    }
22075
22076    option add *cacentry*.background $::ColorSpecs(PopupWidgetDefault,Background) 100
22077    option add *cacentry*.foreground $::ColorSpecs(PopupWidgetDefault,Foreground) 100
22078    option add *cacentry*Button.background $::ColorSpecs(PopupWidgetButton,Background) 100
22079    option add *cacentry*Button.foreground $::ColorSpecs(PopupWidgetButton,Foreground) 100
22080    option add *cacentry*Checkbutton.background $::ColorSpecs(PopupWidgetDefault,Background) 100
22081    option add *cacentry*Checkbutton.foreground $::ColorSpecs(PopupWidgetCheckbutton,Foreground) 100
22082    option add *cacentry*Label.background $::ColorSpecs(PopupWidgetLabel,Background) 100
22083    option add *cacentry*Label.foreground $::ColorSpecs(PopupWidgetLabel,Foreground) 100
22084
22085    proc PopupCachedEntries {} {
22086	if {[winfo exists .cacentry]} {
22087	    ShowMessage [_ "A recent result window already exists."]
22088	    return;
22089	}
22090	toplevel .cacentry -borderwidth 4 -relief raised \
22091	    -bg $::ColorSpecs(PopupWidgetDefault,Background)
22092	wm title .cacentry "";
22093	label .cacentry.title -text "Recent Results"
22094	grid .cacentry.title    -row 0 -column 0 -sticky ew -columnspan 5
22095
22096	button .cacentry.compare -text [_ "Compare"]    -command {resc::CompareCacheEntries}
22097	button .cacentry.save    -text [_ "Save"]       -command {resc::SaveCacheEntries}
22098	button .cacentry.delete  -text [_ "Delete"]     -command {resc::DeleteCacheEntries}
22099	button .cacentry.cancel  -text [_ "Dismiss"]     -command {destroy .cacentry}
22100
22101	balloonhelp_for .cacentry.compare  [_ "Compare the selected entries."]
22102	balloonhelp_for .cacentry.save    [_ "Write the selected entries to a file."]
22103	balloonhelp_for .cacentry.delete    [_ "Delete the selected entries."]
22104	balloonhelp_for .cacentry.cancel   [_ "Dismiss the popup."]
22105
22106	frame .cacentry.sep -height 10 -bg $::ColorSpecs(PopupWidgetDefault,Background)
22107	grid .cacentry.sep      -row 6 -column 0 -sticky ew  -columnspan 5
22108	grid .cacentry.compare  -row 7 -column 0
22109	grid .cacentry.save     -row 7 -column 1
22110	grid .cacentry.delete   -row 7 -column 3
22111	grid .cacentry.cancel   -row 7 -column 4
22112	UpdateCacheDisplay;
22113    }
22114
22115    proc UpdateCacheDisplay {} {
22116	variable ResultList;
22117	variable ResultsStored;
22118	variable ResultsToKeep;
22119	variable EntriesDisplayed;
22120
22121	for {set i 0} {$i < $EntriesDisplayed} {incr i} {
22122	    set I [expr $i + 1];
22123	    destroy .cacentry.chk$I
22124	    destroy .cacentry.txt$I
22125	}
22126
22127	if {$ResultsStored < $ResultsToKeep} {
22128	    set EntriesToDisplay $ResultsStored;
22129	} else {
22130	    set EntriesToDisplay $ResultsToKeep;
22131	}
22132
22133	for {set i 0} {$i < $EntriesToDisplay} {incr i} {
22134	    set I [expr $i + 1];
22135	    set ckbName .cacentry.chk$I
22136	    set labName .cacentry.txt$I
22137	    checkbutton $ckbName -width 2 -onvalue 1 -offvalue 0 -variable CacheChecked($I) \
22138		-relief sunken
22139	    label $labName  -justify left  -text \
22140		[FormatPopupString $I [lindex $ResultList $i]]
22141	    balloonhelp_for $labName  [lindex [lindex $ResultList $i] 2]
22142	    grid $ckbName  -row $I -column 0
22143	    grid $labName  -row $I -column 1 -sticky w  -columnspan 4
22144	}
22145	set EntriesDisplayed $EntriesToDisplay
22146    }
22147}
22148
22149proc ExplainAlpha {} {
22150    global HPWidth;
22151    global HPLines;
22152    global PopupList;
22153    if {[PopupDown Alpha] ==1} {return}
22154    set po [CreateTextDisplay [_ "Alpha Characters"] $HPWidth $HPLines]
22155    BindKeys $po;
22156    set PopupList(Alpha) $po;
22157    AppendToTextDisplay $po [_ "The ASCII alpha characters are the letters 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 and their upper-case counterparts. In other writing systems the alpha characters are the characters considered equivalent in function, that is, in having primarily phonological content, as opposed to punctuation, numerals, spaces, and so forth. The definition of this class depends on the locale."];
22158    AppendToTextDisplay $po "\n\n";
22159    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22160an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22161    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22162    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22163    AppendToTextDisplay $po ".\n"
22164}
22165
22166proc ExplainAlphaNumWord {} {
22167    global HPWidth;
22168    global HPLines;
22169    global PopupList;
22170    if {[PopupDown AlphaNumWord] ==1} {return}
22171    set po [CreateTextDisplay [_ "Alphanumeric and Word Characters"] $HPWidth $HPLines]
22172    BindKeys $po;
22173    set PopupList(AlphaNumWord) $po;
22174    AppendToTextDisplay $po [_ "Two subtly different classes of characters are used in regular expressions. The more traditional class is the \`alphanumeric\' class, which is the union of the letters and the digits. In the ASCII character set and in, e.g., the C locale, the alphanumeric class consists therefore of the 52 letters of the alphabet, upper- and lower-case, and the ten digits 0-9. In other locales the membership of the alpha characters and digits may vary, but the alphanumeric class always consists of the union of the two sets."];
22175    AppendToTextDisplay $po "\n\n";
22176    AppendToTextDisplay $po [_ "The related class of characters, sometimes confused with the alphanumerics and given the same name, is what are sometimes called the \`word\' characters. These are the characters that may be used in words, that is, in identifiers such as variables and function names, in certain programming languages. The word characters consist of the alphanumeric characters together with the underscore character."];
22177    AppendToTextDisplay $po "\n"
22178    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22179an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22180    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22181    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22182    AppendToTextDisplay $po ".\n"
22183}
22184
22185proc ExplainAny {} {
22186    global HPWidth;
22187    global HPLines;
22188    global PopupList;
22189    if {[PopupDown Any] ==1} {return}
22190    set po [CreateTextDisplay [_ "Any"] $HPWidth $HPLines]
22191    BindKeys $po;
22192    set PopupList(Any) $po;
22193    AppendToTextDisplay $po [_ "This matches any number of repetitions, including zero, of the folowing character or block."];
22194}
22195
22196proc ExplainBooleanAnd {} {
22197    global HPWidth;
22198    global HPLines;
22199    global PopupList;
22200    if {[PopupDown BooleanAnd] ==1} {return}
22201    set po [CreateTextDisplay [_ "And"] $HPWidth $HPLines]
22202    BindKeys $po;
22203    set PopupList(BooleanAnd) $po;
22204    AppendToTextDisplay $po [_ "This notation is used to require that the text match two regular expressions. The zero indicates that the two matches must be be located within zero lines of each other, that is, on the same line. In normal use, this program allows other values in this position, but since Redet is line-oriented these alternatives are not available."];
22205}
22206
22207
22208proc ExplainControlCharacter {} {
22209    global HPWidth;
22210    global HPLines;
22211    global PopupList;
22212    if {[PopupDown ControlCharacter] ==1} {return}
22213    set po [CreateTextDisplay [_ "ControlCharacter"] $HPWidth $HPLines]
22214    BindKeys $po;
22215    set PopupList(ControlCharacter) $po;
22216    AppendToTextDisplay $po [_ {The control characters are usually the ASCII control characters, namely the first 32 characters (0x00-0x1F) and the last ASCII character (0x7F). They are so named because their original purpose was to control actions of teletype machines, such as ringing the bell, as opposed to denoting printable characters. Many control characters are no longer routinely seen in text, but some are common since they include such characters as tab and linefeed. On many keyboards, pressing the Control key at the same time as typing another letter generates a code in the ASCII control range. Control characters are sometimes referred to by the combination of keys that generates them.  0x01 is Control-A, 0x02 is Control-B, through 0x26, which is control Z.  (The other keyboard equivalents are 0x00 = Control-@, 0x1B = Control-[, 0x1C = Control-\, 0x1D = Control-], 0x1E = Control-^, and 0x1F = Control-_.) The space character 0x20 is sometimes also considered a control character.}];
22217    AppendToTextDisplay $po "\n\n";
22218    AppendToTextDisplay $po [_ "Additional control characters are defined in some encodings. For instance, in the ISO-8859-1 extension of ASCII (also known as Latin-1) widely used for European languages, codepoints 0x80-0x9F are also control characters. The named class of control characters used in regular expressions refers either to just the ASCII control characters or to additional control characters from the ISO-8859-1 range depending on the locale. Unicode does not introduce any control characters beyond those defined in ISO-8859-1.\n"];
22219    AppendToTextDisplay $po "\n"
22220    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22221an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22222    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22223    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22224    AppendToTextDisplay $po ".\n"
22225}
22226
22227proc ExplainCrosshatchAny {} {
22228    global HPWidth;
22229    global HPLines;
22230    global PopupList;
22231    if {[PopupDown CrosshatchAny] ==1} {return}
22232    set po [CreateTextDisplay [_ "Crosshatch"] $HPWidth $HPLines]
22233    BindKeys $po;
22234    set PopupList(CrosshatchAny) $po;
22235    AppendToTextDisplay $po [_ "This matches one or more tokens of the preceding character."];
22236}
22237
22238
22239proc ExplainOrString {} {
22240    global HPWidth;
22241    global HPLines;
22242    global PopupList;
22243    if {[PopupDown OrString] ==1} {return}
22244    set po [CreateTextDisplay [_ "String Disjunction"] $HPWidth $HPLines]
22245    BindKeys $po;
22246    set PopupList(OrString) $po;
22247    AppendToTextDisplay $po [_ "This matches a string that contains either or both of the two argument strings."];
22248}
22249
22250proc ExplainAndString {} {
22251    global HPWidth;
22252    global HPLines;
22253    global PopupList;
22254    if {[info exists PopupList(AndString)]} {
22255	if {[winfo exists $PopupList(AndString)]} {
22256	    destroy $PopupList(AndString);
22257	    return;
22258	}
22259    }
22260    set po [CreateTextDisplay [_ "String Conjunction"] $HPWidth $HPLines]
22261    BindKeys $po;
22262    set PopupList(AndString) $po;
22263    AppendToTextDisplay $po [_ "This matches a string that contains both of the two argument strings."];
22264}
22265
22266proc ExplainDigit {} {
22267    global HPWidth;
22268    global HPLines;
22269    global PopupList;
22270    if {[info exists PopupList(Digit)]} {
22271	if {[winfo exists $PopupList(Digit)]} {
22272	    destroy $PopupList(Digit);
22273	    return;
22274	}
22275    }
22276    set po [CreateTextDisplay [_ "Digit"] $HPWidth $HPLines]
22277    BindKeys $po;
22278    set PopupList(Digit) $po;
22279    AppendToTextDisplay $po [_ "Digit here refers specifically to the decimal digits: 0 1 2 3 4 5 6 7 8 and 9. In some locales, additional local numerals may be included."];
22280    AppendToTextDisplay $po "\n\n"
22281    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22282an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22283    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22284    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22285    AppendToTextDisplay $po ".\n"
22286}
22287
22288proc ExplainLiteralMetachar {} {
22289    global HPWidth;
22290    global HPLines;
22291    global PopupList;
22292    if {[info exists PopupList(LiteralMetachar)]} {
22293	if {[winfo exists $PopupList(LiteralMetachar)]} {
22294	    destroy $PopupList(LiteralMetachar);
22295	    return;
22296	}
22297    }
22298    set po [CreateTextDisplay [_ "Literal Metacharacter"] $HPWidth $HPLines]
22299    BindKeys $po;
22300    set PopupList(LiteralMetachar) $po;
22301    AppendToTextDisplay $po [_ "It is sometimes necessary to give their ordinary meaning to\
22302metacharacters, that is, characters that have a special meaning in regular expressions.\
22303For example, we may want to match the character *, not any number of characters or any\
22304number of the preceding regular expression.  When a character is a metacharacter,\
22305prefixing it with an escape character gives it its literal meaning. For example,\
22306if * is a metacharacter, in many programs \\* is a literal star."];
22307}
22308
22309proc ExplainDot {} {
22310    global HPWidth;
22311    global HPLines;
22312    global PopupList;
22313    if {[info exists PopupList(Dot)]} {
22314	if {[winfo exists $PopupList(Dot)]} {
22315	    destroy $PopupList(Dot);
22316	    return;
22317	}
22318    }
22319    set po [CreateTextDisplay [_ "Dot"] $HPWidth $HPLines]
22320    BindKeys $po;
22321    set PopupList(Dot) $po;
22322    AppendToTextDisplay $po [_ "This matches any single character except, possibly, newline.\
22323Whether it matches newline depends on the program and sometimes can be set by the user.\
22324If you want dot to match newline, see if the matcher you are using supports the inline\
22325flag \`s\'. In several matchers, including Perl, Python, and Java, this flag causes dot\
22326to match newline."];
22327}
22328
22329proc ExplainExactMatch {} {
22330    global HPWidth;
22331    global HPLines;
22332    global PopupList;
22333    if {[info exists PopupList(ExactMatch)]} {
22334	if {[winfo exists $PopupList(ExactMatch)]} {
22335	    destroy $PopupList(ExactMatch);
22336	    return;
22337	}
22338    }
22339    set po [CreateTextDisplay [_ "Exact Matching"] $HPWidth $HPLines]
22340    BindKeys $po;
22341    set PopupList(ExactMatch) $po;
22342    AppendToTextDisplay $po [_ "Some programs that support approximate matching provide ways of restricting the permissible location of inexact matches. One such device is to mark a substring as requiring an exact match by surrounding it with angle brackets. For example, with the total error level set to 1, \`r<ead>s\' matches \`ready\' and \`beads\', since in both cases the errors fall outside the marked substring, but does not match \`roads\', since the error (o instead of e) falls within the marked substring. The other device is the \{~0\} operator, which requires the preceding group to match exactly. In this notation, our example is: \`r(ead)\{~0\}s\'"];
22343}
22344
22345
22346proc ExplainOctalDigit {} {
22347    global HPWidth;
22348    global HPLines;
22349    global PopupList;
22350    if {[PopupDown OctalDigit] ==1} {return}
22351    set po [CreateTextDisplay [_ "Octal Digit"] $HPWidth $HPLines]
22352    BindKeys $po;
22353    set PopupList(OctalDigit) $po;
22354    AppendToTextDisplay $po [_ "The octal digits are the characters used to write numbers in base 8. These are: 0,1,2,3,4,5,6,7,8."];
22355}
22356
22357proc ExplainHexDigit {} {
22358    global HPWidth;
22359    global HPLines;
22360    global PopupList;
22361    if {[PopupDown HexDigit] ==1} {return}
22362    set po [CreateTextDisplay [_ "Hexadecimal Digit"] $HPWidth $HPLines]
22363    BindKeys $po;
22364    set PopupList(HexDigit) $po;
22365    AppendToTextDisplay $po [_ "The hexadecimal digits are the characters used to write numbers in base 16.\
22366 These are: 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e, and f. The letters a-f may be either lower or upper case."];
22367    AppendToTextDisplay $po "\n\n"
22368    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22369an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22370    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22371    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22372    AppendToTextDisplay $po ".\n"
22373}
22374
22375proc ExplainHyphenPrev {} {
22376    global HPWidth;
22377    global HPLines;
22378    global PopupList;
22379    if {[info exists PopupList(HyphenPrev)]} {
22380	if {[winfo exists $PopupList(HyphenPrev)]} {
22381	    destroy $PopupList(HyphenPrev);
22382	    return;
22383	}
22384    }
22385    set po [CreateTextDisplay [_ "Hyphen"] $HPWidth $HPLines]
22386    BindKeys $po;
22387    set PopupList(HyphenPrev) $po;
22388    AppendToTextDisplay $po [_ "This matches any number of repetitions, including zero, of the preceding group. The group may be explicitly marked or it may be an implicit group consisting of a single character. For example, \`sing-\' means \`the letters sin followed by any number, including zero, of gs\'. \`sing*\'therefore matches \`sin\' but does not match \`sings\, \`singlet\', or \`singer\'."]
22389}
22390
22391proc ExplainPlus {} {
22392    global HPWidth;
22393    global HPLines;
22394    global PopupList;
22395    if {[info exists PopupList(Plus)]} {
22396	if {[winfo exists $PopupList(Plus)]} {
22397	    destroy $PopupList(Plus);
22398	    return;
22399	}
22400    }
22401    set po [CreateTextDisplay [_ "Plus"] $HPWidth $HPLines]
22402    BindKeys $po;
22403    set PopupList(Plus) $po;
22404    AppendToTextDisplay $po [_ "This matches one or more repetitions of the preceding group. The group may be explicitly marked or it may be an implicit group consisting of a single character. Thus \a+`\' matches \`a\', \`aa\', \`aaa\', \`aaaa\' and so forth, while, in a program in which parentheses are used for grouping, \`(abc)+\' matches \`abc\', \`abcabc\', \`abcabcabc\' and so forth. Since + quantifies another regular expression, it cannot stand alone. This usage should be distinguished from the alternative, found primarily in filename globbing, in which plus matches any string containing one or more characters. In that usage, plus does not quantify another regular expression and can therefore stand alone. For example, in the present usage \`sin+\' means matches \`match the sequence si followed by one or more ns\'. It therefore matches \`sin\' and \`sinn\' (if we include non-English words), but does not match \`sing\', \`sins\', or \`singlet\'. In the alternative usage, \`sing\', \`sins\', and \`singlet\' all match, but \`sin\' does not match, since the + requires that at least one character follow \`sin\'."]}
22405
22406proc ExplainPlusAny {} {
22407    global HPWidth;
22408    global HPLines;
22409    global PopupList;
22410    if {[info exists PopupList(PlusAny)]} {
22411	if {[winfo exists $PopupList(PlusAny)]} {
22412	    destroy $PopupList(PlusAny);
22413	    return;
22414	}
22415    }
22416    set po [CreateTextDisplay [_ "Plus"] $HPWidth $HPLines]
22417    BindKeys $po;
22418    set PopupList(PlusAny) $po;
22419    AppendToTextDisplay $po [_ "This matches any string containing at least one character. Since it does not quantify another regular expression, it can stand alone. This usage should be distinguished from the more common usage in which the + sign represents one or more repetitions of the preceding regular expression and therefore cannot stand alone. In the present usage, \`sing\', \`sins\', and \`singlet\' all match, but \`sin\' does not match, since the + requires that at least one character follow \`sin\'. In the alternative usage, \`sin+\' means \`match the sequence si followed by one or more ns\'. It therefore matches \`sin\' and \`sinn\' (if we include non-English words), but does not match \`sing\', \`sins\', or \`singlet\'."]}
22420
22421proc ExplainSelfishQuantifier {} {
22422    global HPWidth;
22423    global HPLines;
22424    global PopupList;
22425    if {[info exists PopupList(SelfishQuantifier)]} {
22426	if {[winfo exists $PopupList(SelfishQuantifier)]} {
22427	    destroy $PopupList(SelfishQuantifier);
22428	    return;
22429	}
22430    }
22431    set po [CreateTextDisplay [_ "Selfish Quantifier"] $HPWidth $HPLines]
22432    BindKeys $po;
22433    set PopupList(SelfishQuantifier) $po;
22434    AppendToTextDisplay $po [_ "Quantiers in regular expressions may be\
22435reluctant (also known as \`lazy\'), greedy, or selfish (also known as \`possessive\'.\
22436The traditional quantifiers are greedy. The distinction depends on how the quantifier interacts\
22437with other parts of the regular expression.\
22438An ordinary \`greedy\' quantifier matches as much as it can\
22439while still allowing other parts of the regular expression to match.\
22440A selfish quantifier matches the largest substring that it can, even\
22441if that causes other parts of the regular expression to fail to match and\
22442therefore causes the expression as a whole to fail to match."];
22443    AppendToTextDisplay $po "\n\n";
22444    AppendToTextDisplay $po [_ "
22445For example, consider the regular expression\
22446\`(a)(b++)(b+)(a)\', where\
22447\`+\' is the ordinary quantifier meaning \`one or more  repetitions of the preceding\
22448group\' and \`++\' is its selfish counterpart. What will happen when this\
22449expression is applied to the string \`abbbba\'? The \`a\'s at either end\
22450will match. The question is, how will the two terms with \`b\'s divide\
22451up the four \`b\'s in the string between them? Since the first b-term is\
22452selfish, it will match the largest substring that satisfies it, which is\
22453all four \`b\'s. This will leave no \`b\' to be matched by the third term,\
22454so the regular expression as a whole will fail to match. If we change\
22455the quantifier in the second term from selsifh to ordinary, the regular\
22456expression will match since the non-selfish quantifier in the second\
22457term will cede the last \`b\' to the third term."];
22458}
22459
22460proc ExplainReluctantQuantifier {} {
22461    global HPWidth;
22462    global HPLines;
22463    global PopupList;
22464    if {[info exists PopupList(ReluctantQuantifier)]} {
22465	if {[winfo exists $PopupList(ReluctantQuantifier)]} {
22466	    destroy $PopupList(ReluctantQuantifier);
22467	    return;
22468	}
22469    }
22470    set po [CreateTextDisplay [_ "Reluctant Quantifier"] $HPWidth $HPLines]
22471    BindKeys $po;
22472    set PopupList(ReluctantQuantifier) $po;
22473    AppendToTextDisplay $po [_ "Quantiers in regular expressions may be\
22474reluctant (also known as \`lazy\'), greedy, or selfish (also known as \`possessive\'.\
22475The traditional quantifiers are greedy. The distinction depends on how the quantifier interacts\
22476with other parts of the regular expression.\
22477A reluctant quantifier matches the smallest substring that it can.\
22478An ordinary \`greedy\' quantifier matches as much as it can\
22479while still allowing other parts of the regular expression to match."];
22480    AppendToTextDisplay $po "\n\n";
22481    AppendToTextDisplay $po [_ "For example, consider the regular expression\
22482\`(a)(b+?)(b+)(a)\', where\
22483\`+\' is the ordinary quantifier meaning \`one or more  repetitions of the preceding\
22484group\' and \`+?\' is its reluctant counterpart. What will happen when this\
22485expression is applied to the string \`abbbba\'? The \`a\'s at either end\
22486will match. The question is, how will the two terms with \`b\'s divide\
22487up the four \`b\'s in the string between them? Since the first b-term is\
22488reluctant, it will match the smallest substring that satisfies it, which is\
22489a single \`b\'. The other three \`b\'s will be matched by the third term.\
22490How the \`b\'s are divided up makes no difference to the success of the match\
22491in this case, but it is relevant when doing substitutions and for backreferences."];
22492}
22493
22494proc ExplainStar {} {
22495    global HPWidth;
22496    global HPLines;
22497    global PopupList;
22498    if {[info exists PopupList(Star)]} {
22499	if {[winfo exists $PopupList(Star)]} {
22500	    destroy $PopupList(Star);
22501	    return;
22502	}
22503    }
22504    set po [CreateTextDisplay [_ "Star"] $HPWidth $HPLines]
22505    BindKeys $po;
22506    set PopupList(Star) $po;
22507    AppendToTextDisplay $po [_ "This matches any number of repetitions, including zero, of the preceding group. The group may be explicitly marked or it may be an implicit group consisting of a single character. This usage of star should be distinguished from the alternative, familiar especially from filename globbing, in which the star stands for any number of any character. In the present usage, star cannot stand alone; it quantifies another regular expression. In the usage typical of filename globbing, star can stand alone. In other words, star in the globbing usage is equivalent to .* in the non-globbing usage (assuming that the program is one in which dot stands for any character). For example, in the present usage, \`sing*\' means \`the letters sin followed by any number, including zero, of gs\'. \`sing*\'therefore matches \`sin\' but does not match \`sings\, \`singlet\', or \`singer\'. in the other usage, \`sing*\' matches \`sings\, \`singlet\', and \`singer\', since the star indicates that anything may follow \`sing\', but not \`sin\', since the \`g\' is a fixed part of the expression."];
22508}
22509
22510proc ExplainZeroOrMoreCurly {} {
22511    global HPWidth;
22512    global HPLines;
22513    global PopupList;
22514    if {[PopupDown ZeroOrMoreOnly] ==1} {return}
22515    set po [CreateTextDisplay [_ "Empty Range"] $HPWidth $HPLines]
22516    set PopupList(ZeroOrMoreOnly) $po;
22517    BindKeys $po;
22518    AppendToTextDisplay $po [_ "This matches any number of repetitions, including zero, of the preceding group. The group may be explicitly marked or it may be an implicit group consisting of a single character."];
22519}
22520
22521proc ExplainStarAny {} {
22522    global HPWidth;
22523    global HPLines;
22524    global PopupList;
22525    if {[PopupDown StarAny] ==1} {return}
22526    set po [CreateTextDisplay [_ "Star"] $HPWidth $HPLines]
22527    BindKeys $po;
22528    set PopupList(StarAny) $po;
22529    AppendToTextDisplay $po [_ "This matches an arbitrary sequence of characters of any length, including zero. It should be distinguished from the more common usage of star in which a regular expression followed by star matches any number of repetitions of the regular expression. In that usage, star may not stand alone since it quantifies another regular expression. In the present usage, star may stand alone. For example, in the present usage, \`sing*\' matches \`sings\, \`singlet\', and \`singer\', since the star indicates that anything may follow \`sing\', but not \`sin\', since the \`g\' is a fixed part of the expression. In the other usage, \`sing*\' means \`the letters sin followed by any number, including zero, of gs\'. \`sing*\'therefore matches \`sin\' but does not match \`sings\, \`singlet\', or \`singer\'."];
22530}
22531
22532
22533proc ExplainBackReferenceSub {} {
22534    global HPWidth;
22535    global HPLines;
22536    global PopupList;
22537    if {[info exists PopupList(BackReferenceSub)]} {
22538	if {[winfo exists $PopupList(BackReferenceSub)]} {
22539	    destroy $PopupList(BackReferenceSub);
22540	    return;
22541	}
22542    }
22543    set po [CreateTextDisplay [_ "Substitution Backreferences"] $HPWidth $HPLines]
22544    BindKeys $po;
22545    set PopupList(BackReferenceSub) $po;
22546    AppendToTextDisplay $po [_ "Expressions of this form insert a copy of the corresponding captured group in the regular expression."]
22547    AppendToTextDisplay $po [_ "For example, if the regular expression is {(.*)(ity|ness)},\
22548where the first parenthesis matches any string and the second parenthesis matches either \"ity\"\
22549or \"ness\", and the backreference notation is \$k, the expression \$2 in the substitution\
22550will insert whichever of the two suffixes was matched and \$1 will insert the part of the\
22551string  preceding the suffix. The substitution expression \"\$2 \$1-\$2 \" will produce\
22552a copy of the string preceded by the suffix and with the suffix separated from the\
22553rest of the word by a hyphen. For example, the input \"ability\" will produce the\
22554output \"ity abil-ity\"."];
22555    if {[string equal $::program perl]} {
22556	AppendToTextDisplay $po "\n\n";
22557	AppendToTextDisplay $po [_ "In Perl, backreferences within the regular expression proper use backslash followed by the group number. Backreferences from the substitution expression to the regular expression use dollar sign instead of backslash. Backslash works in some circumstances, but it is only sure to work within the match expression, so to be safe you should use dollar sign in substitutions."];
22558    }
22559    AppendToTextDisplay $po "\n\n";
22560    foreach x  [list \
22561		    SubBackRefBare\
22562		    SubBackReferenceDol\
22563		    SubBackReferencePercent\
22564		    SubBackRefbs\
22565		    SubBackRefParbs\
22566		    SubBackRefdbs\
22567		    SubBackRefPardbsdbs] {
22568	if {$::Features($x,$::program,$::InterfaceLocale)} {
22569	    if {$::Features(${x}AtLeastTen,$::program,$::InterfaceLocale) == 0} {
22570		if {![string equal $::Palette($x,Prefix) ""]} {
22571		    AppendToTextDisplay $po [format \
22572			 [_ "The back reference index with prefix %s must be no greater than 9."] \
22573					     $::Palette($x,Prefix)];
22574		} else {
22575		    AppendToTextDisplay $po \
22576			[_ "The back reference index must be no greater than 9."];
22577		}
22578	    } else {
22579		if {![string equal $::Palette($x,Prefix) ""]} {
22580		    AppendToTextDisplay $po [format \
22581			 [_ "The back reference index with prefix %s may exceed 9."] \
22582					     $::Palette($x,Prefix)];
22583		} else {
22584		    AppendToTextDisplay $po \
22585			[_ "The back reference index may exceed 9."];
22586		}
22587	    }
22588	}
22589    }
22590}
22591
22592proc ExplainTRECostSetting {} {
22593    global HPWidth;
22594    global HPLines;
22595    global PopupList;
22596    if {[info exists PopupList(TRECostSetting)]} {
22597	if {[winfo exists $PopupList(TRECostSetting)]} {
22598	    destroy $PopupList(TRECostSetting);
22599	    return;
22600	}
22601    }
22602    set po [CreateTextDisplay [_ "TRE Cost Setting"] $HPWidth $HPLines]
22603    BindKeys $po;
22604    set PopupList(TRECostSetting) $po;
22605    AppendToTextDisplay $po [_ "This construction sets the error costs for the immediately preceding group. When using approximate matching, it is necessary to decide when an imperfect match is to count as good enough. This construction allows you to specify how to make this decision on a group-by-group basis."];
22606    AppendToTextDisplay $po [_ "\n\n"];
22607    AppendToTextDisplay $po [_ "Each cost specification consists of two parts, both optional. If both are present, they are separated by a comma. The first part sets limits on the number of different types of errors directly. The second part specifies a formula for computing the total error cost and setting a limit on it."];
22608    AppendToTextDisplay $po [_ "\n\n"];
22609    AppendToTextDisplay $po [_ "
22610Three types of error are recognized. An error is an insertion if the target string may be obtained from the match pattern by adding one character to it. For example, \`red\' becomes \`read\' by the insertion of an \`a\'. An error is a deletion if the target string may be obtained from the match pattern by removing one character from it. For example, \`read\' becomes \`red\' by deletion of an \`a\'. Two strings differing in that one contains one character more than the other may be regarded as related by either insertion or deletion, depending on which string is taken to be the source. In this case, the pattern is taken to be the source and the target string is taken to be the result of the transformation. Thus, the pattern \`red\' matches the string \`read\' if ane insertion is permitted but not if only deletions are permitted. An error is a substitution if one string may be obtained from the other by substituting one character for another. For example, \`read\' becomes \`road\' by substitution of \`o\' for \`e\'."];
22611    AppendToTextDisplay $po [_ "\n\n"];
22612    AppendToTextDisplay $po [_ "Limits on error numbers may be set on insertions, deletions, and substitutions individually or on the total number of errors, or both. The maximum permitted number of insertions takes the form \`+k\', where \`k\' is a non-negative integer. Similarly, the limit on deletions takes the form \`-k\', the number of substitutions the form \`\#k\', and the total number of errors of any type the form \`~k\'. The cost specification \`{+2-3\#1~4}\' therefore means that a maximum of two insertions, three deletions, and one substitution are permitted and that the total number of errors must not exceed four."];
22613    AppendToTextDisplay $po [_ "\n\n"];
22614    AppendToTextDisplay $po [_ "The cost equation (which is not really an equation) specifies the weight to be given to each of the three types of errors and sets a maximum total cost. The weights are specified by writing a non-negative integer before \`i\' for insertions, \`d\' for deletions, and \`s\' for substitutions. If more than one is specified, they may be separated by plus signs. The total cost, which is not optional (if a cost equation is given at all) consists of a less-than sign followed by a positive integer. Note that the less-than sign here does not have its usual mathematical meaning.  \`<k\' means that \`k\' is the maximum permitted, which is to say that the maximum total cost must be less than or equal to \`k\'. The cost equation \`1i + 3d + 2s < 4\' says that insertions count one unit, deletions three units, and substitutions two units, and that the total cost must be no greater than four. With this cost equation, \`reads\' matches \`brads\' because the total cost is one insertion and one deletion, for a permissible total of four, but not \`red\', because this requires two deletions, for an impermissible  total cost of six."];}
22615
22616proc ExplainUnicodeCategory {} {
22617    global HPWidth;
22618    global HPLines;
22619    global PopupList;
22620    if {[info exists PopupList(UnicodeCategory)]} {
22621	if {[winfo exists $PopupList(UnicodeCategory)]} {
22622	    destroy $PopupList(UnicodeCategory);
22623	    return;
22624	}
22625    }
22626    set po [CreateTextDisplay [_ "Unicode Categories"] $HPWidth $HPLines]
22627    BindKeys $po;
22628    set PopupList(UnicodeCategory) $po;
22629    AppendToTextDisplay $po [_ "Unicode characters are classified according to a number of properties, such as whether they are upper case letters, mathematical symbols, and so forth. Some programs allow you to refer to the classes of characters defined by these properties. For example, in Java \`\\p{Sm}\' matches any mathematical symbol.\n\n"];
22630    AppendToTextDisplay $po [_ "A list of the Unicode categories and their abbreviations is available under the \`Unicode General Character Properties\' on the \`Help\' menu. The classification of every character can be found in the file \`UnicodeData.txt\', which is distributed by the Unicode Consortium."];
22631    AppendToTextDisplay $po [_ "You can download a copy (approximately 950kb) here: "];
22632    AppendLinkToTextDisplay $po "UnicodeData.txt" {ShowWebPage http://www.unicode.org/Public/UNIDATA/UnicodeData.txt};
22633    AppendToTextDisplay $po [_ "\nIn Python this information is provided by the \`unicodedata\' module. Read the documentation: "];
22634    AppendLinkToTextDisplay $po "Python unicodedata module" {ShowWebPage http://www.python.org/doc/current/lib/module-unicodedata.html};
22635}
22636
22637proc ExplainUnicodeRange {} {
22638    global HPWidth;
22639    global HPLines;
22640    global PopupList;
22641    if {[info exists PopupList(UnicodeRange)]} {
22642	if {[winfo exists $PopupList(UnicodeRange)]} {
22643	    destroy $PopupList(UnicodeRange);
22644	    return;
22645	}
22646    }
22647    set po [CreateTextDisplay [_ "Unicode Range"] $HPWidth $HPLines]
22648    BindKeys $po;
22649    set PopupList(UnicodeRange) $po;
22650    AppendToTextDisplay $po [_ "Unicode characters are divided into \`ranges\', such as \`Basic Latin\', \`Armenian\', \`Georgian\' and \`Nebrew\'. As these names suggest, \`ranges\' correspond roughly to writing systems. For example, the Tamil range contains the characters specific to Tamil. However, the correspondance is only approximate. Many languages use characters drawn from two or more ranges. For example, Tamil uses the letters in the Tamil range but spaces and punctuation from the Basic Latin range, while Japanese uses the several ranges containng Chinese characters plus the Hiragana and Katakana ranges and the Basic Latin range. Conversely, many ranges contain characters from more than one writing system. The Canadian Aboriginal Syllabics range, for example, combines the historically related but distinct writing systems of Cree, Inuktitut, Carrier and severalother languages. Unicode ranges are therefore useful for some purposes, but it is a mistake to assume that they can be used straightforwardly to identify text in a particular writing system or language.\n\n"];
22651    AppendToTextDisplay $po [_ "A list of the Unicode ranges is available under \`Unicode Ranges\' on the \`Help\' menu. PDF files showing the contents of the various ranges may be downloaded from the Unicode Consortium: "];
22652    AppendLinkToTextDisplay $po "here" {ShowWebPage http://www.unicode.org/charts/PDF/};
22653    AppendToTextDisplay $po [_ " A list of ranges with links to web pages displaying the range and the above PDF files is available: "];
22654    AppendLinkToTextDisplay $po "here" {ShowWebPage http://www.ling.upenn.edu/courses/ling538/UnicodeRanges.html};
22655}
22656
22657proc ExplainUnicodeName {} {
22658    global HPWidth;
22659    global HPLines;
22660    global PopupList;
22661    if {[info exists PopupList(UnicodeName)]} {
22662	if {[winfo exists $PopupList(UnicodeName)]} {
22663	    destroy $PopupList(UnicodeName);
22664	    return;
22665	}
22666    }
22667    set po [CreateTextDisplay [_ "Unicode Name"] $HPWidth $HPLines]
22668    BindKeys $po;
22669    set PopupList(UnicodeName) $po;
22670    AppendToTextDisplay $po [_ "Every Unicode character has an official name by which it is designated in the Unicode standard. One way to include an arbitrary Unicode character in a regular expression is to refer to it by this name. (The other is to refer to it by its code number.)\n\n"];
22671    AppendToTextDisplay $po [_ "A list of Unicode characters and their names can be found in the file \`NamesList.txt\', which is distributed by the Unicode Consortium."];
22672    AppendToTextDisplay $po [_ "You can download a copy (approximately 786k) here: "];
22673    AppendLinkToTextDisplay $po "NamesList.txt" {ShowWebPage http://www.unicode.org/Public/UNIDATA/NamesList.txt};
22674    AppendToTextDisplay $po [_ " However, this file does not illustrate the characters. If you need to look at examples of the characters to determine their names, you can consult the PDF files containing the sections of the Unicode standard devoted to the various ranges "];
22675    AppendLinkToTextDisplay $po "here" {ShowWebPage http://www.unicode.org/charts/PDF/};
22676    AppendToTextDisplay $po [_ " or you can use a character map program such as "];
22677    AppendLinkToTextDisplay $po "gucharmap" {ShowWebPage http://gucharmap.sourceforge.net/}
22678    AppendToTextDisplay $po [_ " You can also look at the characters as they are rendered by your browser on pages such as "];
22679    AppendLinkToTextDisplay $po "these" {ShowWebPage http://www.ling.upenn.edu/courses/ling538/UnicodeCharts/UnicodeIndex.html}
22680    AppendToTextDisplay $po [_ " (The computer program used to generate these pages is available "];
22681    AppendLinkToTextDisplay $po "here" {ShowWebPage http://www.billposer.org/Software/software.html#unicodechart}
22682    AppendToTextDisplay $po [_ ") You can then use the NamesList to convert from codepoint to name."];
22683}
22684
22685proc ExplainWhitespace {} {
22686    global HPWidth;
22687    global HPLines;
22688    global PopupList;
22689    if {[info exists PopupList(Whitespace)]} {
22690	if {[winfo exists $PopupList(Whitespace)]} {
22691	    destroy $PopupList(Whitespace);
22692	    return;
22693	}
22694    }
22695    set po [CreateTextDisplay [_ "Whitespace"] $HPWidth $HPLines]
22696    BindKeys $po;
22697    set PopupList(Whitespace) $po;
22698    AppendToTextDisplay $po [_ "\`Whitespace\' traditionally refers to the ASCII characters: space (0x0020), tab (0x0009), vertical tab (0x000B), newline/linefeed (0x000A), carriage return (0x000D), and formfeed (0x000C). Vertical tab and formfeed will of course rarely be encountered in normal text. Carriage return and linefeed are generally encountered only as end-of-line markers (on Unix systems, linefeed alone, on Macintosh systems, carriage return alone, and on DOS and MS Windows systems, carriage return followed by linefeed). When working with line-oriented software, then, in practice \`whitespace\' will usually refer to just space and (horizontal) tab. Outside of the ASCII range, however, there are other characters that may be considered whitespace, such as 0x3000 IDEOGRAPHIC SPACE, which is commonly found in Japanese text. Whether these other characters are included depends on the locale."];
22699    AppendToTextDisplay $po "\n"
22700    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22701an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22702    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22703    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22704    AppendToTextDisplay $po ".\n"
22705}
22706
22707
22708proc ExplainBell {} {
22709    global HPWidth;
22710    global HPLines;
22711    global PopupList;
22712    if {[info exists PopupList(Bell)]} {
22713	if {[winfo exists $PopupList(Bell)]} {
22714	    destroy $PopupList(Bell);
22715	    return;
22716	}
22717    }
22718    set po [CreateTextDisplay [_ "Bell"] $HPWidth $HPLines]
22719    BindKeys $po;
22720    set PopupList(Bell) $po;
22721    AppendToTextDisplay $po [_ "The bell character, ASCII 0x07, is a non-printing character that used to ring the bell on teletype machines. On modern computers it will generally make a bell-like sound. On some systems it may be redefined to attract attention in some other way, such as by flashing the screen."];
22722}
22723
22724proc ExplainASCIIChar {} {
22725    global HPWidth;
22726    global HPLines;
22727    global PopupList;
22728    if {[info exists PopupList(ASCIIChar)]} {
22729	if {[winfo exists $PopupList(ASCIIChar)]} {
22730	    destroy $PopupList(ASCIIChar);
22731	    return;
22732	}
22733    }
22734    set po [CreateTextDisplay [_ "ASCII Character"] $HPWidth $HPLines]
22735    BindKeys $po;
22736    set PopupList(ASCIIChar) $po;
22737    AppendToTextDisplay $po [_ "This matches any ASCII character. An ASCII character is one of the 128 characters defined in the American Standard for Computer Information Interchange. The international equivalent is ISO 646. The ASCII characters consist of the 26 letters used in English, upper- and lower-case, the digits 0-9, 32 punctuation symbols, 33 control characters, most of which are not used in text, and the space character. The first 128 characters of Unicode are the same as in ASCII."];
22738    AppendToTextDisplay $po [_ "\n\n"];
22739    AppendToTextDisplay $po [_ "ASCII charts are widely available. On any UNIX system the command \`man 7 ascii\' should produce an ASCII chart. Charts may be found on the web at locations including:"];
22740    AppendLinkToTextDisplay $po "here, " {ShowWebPage http://www.jimprice.com/jim-asc.htm}
22741    AppendLinkToTextDisplay $po "here, " {ShowWebPage http://www.ling.upenn.edu/courses/ling538/ascii.html}
22742    AppendLinkToTextDisplay $po "here, " {ShowWebPage http://ostermiller.org/calc/ascii.html}
22743    AppendLinkToTextDisplay $po "and here." {ShowWebPage http://www.asciitable.com}
22744    AppendToTextDisplay $po [_ "\n"];
22745     AppendToTextDisplay $po [_ "An ASCII chart color-coded for the POSIX character classes is included in the reference manual section "];
22746    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22747    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22748    AppendToTextDisplay $po "\n"
22749}
22750
22751proc ExplainTaggedgroup {} {
22752    global HPWidth;
22753    global HPLines;
22754    global PopupList;
22755    if {[PopupDown TaggedGroup] ==1} {return}
22756    set po [CreateTextDisplay [_ "Tagged Group"] $HPWidth $HPLines]
22757    BindKeys $po;
22758    set PopupList(Taggedgroup) $po;
22759    AppendToTextDisplay $po [_ "Tagged groups provide a more mnemonic way to refer to subexpressions. Traditionally, capture groups can be identified only by their position: one specifies the first group, the third, or whatever. Tagged groups associate an identifier with each group. Backreferences may then be made using this identifier."];
22760}
22761
22762proc ExplainTaggedBackReference {} {
22763    global HPWidth;
22764    global HPLines;
22765    global PopupList;
22766    if {[PopupDown TaggedBackReference] ==1} {return}
22767    set po [CreateTextDisplay [_ "Tagged Group Backreference"] $HPWidth $HPLines]
22768    BindKeys $po;
22769    set PopupList(TaggedBackReference) $po;
22770    AppendToTextDisplay $po [_ "This matches the preceding group with the same tag."];
22771}
22772
22773proc ExplainEndOfString {} {
22774    global HPWidth;
22775    global HPLines;
22776    global PopupList;
22777    if {[PopupDown EndOfString] ==1} {return}
22778    set po [CreateTextDisplay [_ "End Of String"] $HPWidth $HPLines]
22779    BindKeys $po;
22780    set PopupList(EndOfString) $po;
22781    AppendToTextDisplay $po [_ "This matches the end of the string. Some regular expression matchers consider it to match only at the abolute end of the string. Others will ignore a terminating end-of-line marker."];
22782    AppendToTextDisplay $po [_ "\n\n"];
22783    AppendToTextDisplay $po [_ "If you find that patterns ending in end-of-string fail to match at the ends of lines, the problem may be the presence of end-of-line markers. This can arise in several ways. First, if you are reading data from a file line by line, readline functions vary as to whether or not they include the end-of-line marker at the end of the string. If they do, and if the regular expression matcher you are using is one in which a character is not considered to be at the end of the string if it is followed by end-of-line characters, what appears to you to be the last character in the string will not be treated as such. Second, if your data come from a DOS or MS Windows system in which end-of-line is marked by the sequence Carriage Return-Line Feed (0x0D 0x0A) and you are using a Unix system and no translation to native text format is done, even if your readline function strips the Line Feed, it will leave the Carriage Return, which from its point of view is not part of the end-of-line marker. The regular expression matcher will treat the Carriage Return as an ordinary character and so will not consider the character preceding it to be at the end of the string."];
22784    AppendToTextDisplay $po [_ "\n"];
22785
22786}
22787proc ExplainAbsoluteEndOfString {} {
22788    global HPWidth;
22789    global HPLines;
22790    global PopupList;
22791    if {[PopupDown EndOfString] ==1} {return}
22792    set po [CreateTextDisplay [_ "Absolute End Of String"] $HPWidth $HPLines]
22793    BindKeys $po;
22794    set PopupList(EndOfString) $po;
22795    AppendToTextDisplay $po [_ "This matches the end of the string. Some regular expression matchers consider it to match only at the abolute end of the string. Others will ignore a terminating end-of-line marker."];
22796    AppendToTextDisplay $po [_ "\n\n"];
22797    AppendToTextDisplay $po [_ "If you find that patterns ending in end-of-string fail to match at the ends of lines, the problem may be the presence of end-of-line markers. This can arise in several ways. First, if you are reading data from a file line by line, readline functions vary as to whether or not they include the end-of-line marker at the end of the string. If they do, and if the regular expression matcher you are using is one in which a character is not considered to be at the end of the string if it is followed by end-of-line characters, what appears to you to be the last character in the string will not be treated as such. Second, if your data come from a DOS or MS Windows system in which end-of-line is marked by the sequence Carriage Return-Line Feed (0x0D 0x0A) and you are using a Unix system and no translation to native text format is done, even if your readline function strips the Line Feed, it will leave the Carriage Return, which from its point of view is not part of the end-of-line marker. The regular expression matcher will treat the Carriage Return as an ordinary character and so will not consider the character preceding it to be at the end of the string."];
22798    AppendToTextDisplay $po [_ "\n"];
22799
22800}
22801
22802
22803proc ExplainTab {} {
22804    global HPWidth;
22805    global HPLines;
22806    if {[PopupDown Tab] ==1} {return}
22807    set po [CreateTextDisplay [_ "Tab"] $HPWidth $HPLines]
22808    BindKeys $po;
22809    set ::PopupList(Tab) $po;
22810    AppendToTextDisplay $po [_ "This matches the horizontal tab character (0x09)."];
22811}
22812
22813proc ExplainSpace {} {
22814    global HPWidth;
22815    global HPLines;
22816    global PopupList;
22817    if {[PopupDown Blank] ==1} {return}
22818    set po [CreateTextDisplay [_ "Blank"] $HPWidth $HPLines]
22819    BindKeys $po;
22820    set PopupList(Blank) $po;
22821    AppendToTextDisplay $po [_ "The Blank class consists of just space (0x20) and horizontal tab (0x09). It is a subset of Whitespace. In some locales it may contain equivalent characters from other ranges, such as 0x3000 Ideographic Space, which is used in Chinese, Japanese, and Korean."];
22822    AppendToTextDisplay $po "\n"
22823    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
22824an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
22825    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
22826    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
22827    AppendToTextDisplay $po ".\n"
22828}
22829
22830proc ExplainGroup {} {
22831    global HPWidth;
22832    global HPLines;
22833    global PopupList;
22834    if {[PopupDown Group] ==1} {return}
22835    set po [CreateTextDisplay [_ "Group"] $HPWidth $HPLines]
22836    BindKeys $po;
22837    set PopupList(Group) $po;
22838    AppendToTextDisplay $po [_ "Group notation serves two purposes.\
22839First, it groups together characters to which an\
22840operator such as a quantifier should apply as a unit. For example, in matchers\
22841in which + means \`one or more repetitions of the preceding group\', \
22842\`(ab)+\' matches \`ab\', \`abab\', \`ababab\', etc., whereas \`ab+\' matches\
22843\`ab\', \`abb\', \`abbb\', etc. Secondly, it creates subexpressions which can\
22844be referred to by  later portions of the same regular expression or by\
22845a substitution expression. For example, in matchers in which the expression\
22846\`(\\d{5})(-\\d{4})?)\' matches US zip codes consisting of five digits optionally\
22847followed by a hyphen and four digits, the parentheses create the possibility\
22848of backreferences to the two components of long form zip codes. A substitution\
22849could replace the input with just the first component, thereby converting\
22850any well-formed zip code into the short form. Groups that serve this second\
22851function are called \`capture groups\' to differentiate them from\
22852the \`no capture groups\' that some matchers provide, which are ignored for\
22853the purpose of back-references."];}
22854
22855proc ExplainNoCaptureGroup {} {
22856    global HPWidth;
22857    global HPLines;
22858    global PopupList;
22859    if {[PopupDown NoCaptureGroup] ==1} {return}
22860    set po [CreateTextDisplay [_ "No Capture Group"] $HPWidth $HPLines]
22861    BindKeys $po;
22862    set PopupList(NoCaptureGroup) $po;
22863    AppendToTextDisplay $po [_ "A no capture group is like an ordinary group in that it\
22864groups together characters to which an operator such as a quantifier\
22865should apply as a unit. It differs from an ordinary group in that\
22866it does not create a target for backreferences. For example, in a\
22867matcher in which \`(abc)\' is an ordinary group, \`(?:abc)\' is a no\
22868capture group,  and back references are of the form\
22869\`\\k\', the regular expression \`(ab)(?:cd)(ef)\\2\\1\'\
22870will match \`abcdefefab\', not \`abcdefcdab\'. Since\
22871\`cd\' is in a no capture group, it is ignored by backreferences."]}
22872
22873proc ExplainBackReferenceMatch {} {
22874    global HPWidth;
22875    global HPLines;
22876    global PopupList;
22877    if {[PopupDown BackReferenceMatch] ==1} {return}
22878    set po [CreateTextDisplay [_ "Match BackReference"] $HPWidth $HPLines]
22879    BindKeys $po;
22880    set PopupList(BackReferenceMatch) $po;
22881    AppendToTextDisplay $po [_ "This matches whatever was matched by the corresponding\
22882capture group. For example, in a matcher in which bare parentheses delimit capture groups\
22883and in which the notation for back reference is of the form \`\\k\', the expression\
22884\`(..)-\\1\'  matches any string consisting of two characters, a hyphen, and the same\
22885two characters, such as\`ab-ab\', \`fa-fa\', or \`oh-oh\'. "];
22886    if {$::Features([WhichMatchBackReference]AtLeastTen,$::program,$::InterfaceLocale) == 0} {
22887	AppendToTextDisplay $po "\n\n";
22888	AppendToTextDisplay $po "The back reference index must be no greater than 9.";
22889    }
22890}
22891
22892
22893#Returns the name of the match back reference feature that
22894#is available for the current program and locale, or the empty string
22895#if there is none.
22896proc WhichMatchBackReference {} {
22897    foreach x  [list \
22898		    backref\
22899		    backrefdbs\
22900		    backrefper\
22901		    backrefbsall\
22902		    backrefksh\
22903		    backrefdbsall] {
22904	if {$::Features($x,$::program,$::InterfaceLocale)} {
22905	    return $x;
22906	}
22907    }
22908    return "";
22909}
22910
22911proc PopupDown {n} {
22912    global PopupList;
22913    if {[info exists PopupList($n)]} {
22914	if {[winfo exists $PopupList($n)]} {
22915	    destroy $PopupList($n);
22916	    return 1;
22917	}
22918    }
22919    return 0;
22920}
22921
22922proc ExplainStarNext {} {
22923    global HPWidth;
22924    global HPLines;
22925    global PopupList;
22926    if {[PopupDown StarNext] ==1} {return}
22927    set po [CreateTextDisplay [_ "Star Next"] $HPWidth $HPLines]
22928    BindKeys $po;
22929    set PopupList(StarNext) $po;
22930    AppendToTextDisplay $po [_ "This expression matches zero or more occurences of the parenthesized group."];
22931}
22932
22933proc ExplainPlusNext {} {
22934    global HPWidth;
22935    global HPLines;
22936    global PopupList;
22937    if {[PopupDown PlusNext] ==1} {return}
22938    set po [CreateTextDisplay [_ "Plus Next"] $HPWidth $HPLines]
22939    BindKeys $po;
22940    set PopupList(PlusNext) $po;
22941    AppendToTextDisplay $po [_ "This expression matches one or more occurences of the parenthesized group."];
22942}
22943
22944proc ExplainZeroOneQMarkNext {} {
22945    global HPWidth;
22946    global HPLines;
22947    global PopupList;
22948    if {[PopupDown ZeroOneQMarkNext] ==1} {return}
22949    set po [CreateTextDisplay [_ "Question Mark Next"] $HPWidth $HPLines]
22950    BindKeys $po;
22951    set PopupList(ZeroOneQMarkNext) $po;
22952    AppendToTextDisplay $po [_ "This expression matches zero or one occurences of the parenthesized group."];
22953}
22954
22955proc ExplainAtSignOneNext {} {
22956    global HPWidth;
22957    global HPLines;
22958    global PopupList;
22959    if {[PopupDown AtSignOneNext] ==1} {return}
22960    set po [CreateTextDisplay [_ "At Sign Next"] $HPWidth $HPLines]
22961    BindKeys $po;
22962    set PopupList(AtSignOneNext) $po;
22963    AppendToTextDisplay $po [_ "This expression matches exactly one expression from the parenthesized group. If the group is non-compound, it matches the parenthesized group. If the group contains alternatives, it matches any one of them."];
22964}
22965
22966proc ExplainGroupComplement {} {
22967    global HPWidth;
22968    global HPLines;
22969    global PopupList;
22970    if {[PopupDown GroupComplement] ==1} {return}
22971    set po [CreateTextDisplay [_ "Group Complement"] $HPWidth $HPLines]
22972    BindKeys $po;
22973    set PopupList(GroupComplement) $po;
22974    AppendToTextDisplay $po [_ "This expression matches anything that does not match the parenthesized group."];
22975}
22976proc ExplainObligatoryQuantifierGroup {} {
22977    global HPWidth;
22978    global HPLines;
22979    global PopupList;
22980    if {[PopupDown ObligatoryQuantifierGroup] ==1} {return}
22981    set po [CreateTextDisplay [_ "Obligatorily Quantified Group"] $HPWidth $HPLines]
22982    BindKeys $po;
22983    set PopupList(ObligatoryQuantifierGroup) $po;
22984    AppendToTextDisplay $po [_ "The material within parentheses is treated as a group. The opening parenthesis must be preceded by one of the quantifiers: ?,+,*,@, or !. The parenthesized material may be a simple string, e.g. (abc) or it may be an alternative expression consisting of strings or quantified groups separated by | symbols, For example, the expression @(ab|cd) matches the strings ab and cd. The expression +(ab|cd|ef) matches strings including ab, cd, ef, abcd, cdef, abcdef, and cdabefab. It does not match bc, de, or abcde. The expression @(abc|*(cd)) matches the null string and the strings abc,cd,cdcd,cdcdcd, etc."];
22985    AppendToTextDisplay $po "\n\n"
22986    AppendToTextDisplay $po [_ "These groups may be referred to by backreferences. The difference between the expressions @(abc) and abc is that the former creates a capture group to which a backreference may refer whereas the latter does not."]
22987}
22988
22989
22990proc ExplainNCopies {} {
22991    global HPWidth;
22992    global HPLines;
22993    global PopupList;
22994    if {[PopupDown NCopies] ==1} {return}
22995    set po [CreateTextDisplay [_ "N Copies"] $HPWidth $HPLines]
22996    BindKeys $po;
22997    set PopupList(NCopies) $po;
22998    AppendToTextDisplay $po [_ "This matches exactly N copies of the immediately\
22999preceding group. For example, \`b{3}\' matches \`bbb\' but\
23000not \`bb\'. This notation is a special case of the more general\
23001\`from M to N copies\' construction."];
23002}
23003
23004proc ExplainMNAtLeast {} {
23005    global HPWidth;
23006    global HPLines;
23007    global PopupList;
23008    if {[PopupDown MNAtLeast] ==1} {return}
23009    set po [CreateTextDisplay [_ "At Least N Copies"] $HPWidth $HPLines]
23010    BindKeys $po;
23011    set PopupList(MNAtLeast) $po;
23012    AppendToTextDisplay $po [_ "This matches at least N copies of the immediately\
23013preceding group. For example, \`b{3,}\' matches \`bbb\'and \`bbbb\' but\
23014not \`bb\'. This notation is a special case of the more general\
23015\`from M to N copies\' construction."];
23016}
23017
23018proc ExplainMNAtMost {} {
23019    global HPWidth;
23020    global HPLines;
23021    global PopupList;
23022    if {[PopupDown MNAtMost] ==1} {return}
23023    set po [CreateTextDisplay [_ "At Most N Copies"] $HPWidth $HPLines]
23024    BindKeys $po;
23025    set PopupList(MNAtMost) $po;
23026    AppendToTextDisplay $po [_ "This matches at most N copies of the immediately\
23027preceding group. For example, in one notation, \`b\\\{,3\\\}\' matches \`b\', \`bb\' and \`bbb\'
23028but not \`bbbb\'. This is a special case of the more general
23029\`from M to N copies\' construction. Many matchers do not allow the beginning of the range to be omitted."];
23030}
23031
23032proc ExplainMNRange {} {
23033    global HPWidth;
23034    global HPLines;
23035    global PopupList;
23036    if {[PopupDown MNRange] ==1} {return}
23037    set po [CreateTextDisplay [_ "Match From M to N Copies"] $HPWidth $HPLines]
23038    BindKeys $po;
23039    set PopupList(MNRange) $po;
23040    AppendToTextDisplay $po [_ "This matches at least M copies and at most N copies\
23041of the immediately preceding group. For example,\
23042\`b{2,4}\' matches \`bb\', \'bbb\', and \`bbbb\' but not \`b\' or \`bbbbb\'"];
23043}
23044
23045proc ExplainPunctuation {} {
23046    global HPWidth;
23047    global HPLines;
23048    global PopupList;
23049    if {[PopupDown Punctuation] ==1} {return}
23050    set po [CreateTextDisplay [_ "Punctuation"] $HPWidth $HPLines]
23051    BindKeys $po;
23052    set PopupList(Punctuation) $po;
23053    AppendToTextDisplay $po [_ {In the C locale and in purely ASCII systems, the punctuation class contains the 32 ASCII punctuation symbols: \
23054	    \" \# $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` \{ | \} ~ \
23055In other locales, additional characters may be included and some of the ASCI\
23056characters may be excluded. Which characters fall into the punctuation class\
23057in a particular combination of program and locale is variable. Note that a common\
23058behavior is for programs to restrict the class to the ASCII characters in\
23059non-Unicode locales and to expand it to include all Unicode punctuation in\
23060Unicode locales, including punctuation that is not relevant to the locale.\
23061If the details matter to you, you should run tests to determine the membership\
23062of this class in your environment.}];
23063}
23064
23065proc ExplainASCIIPunctuation {} {
23066    global HPWidth;
23067    global HPLines;
23068    global PopupList;
23069    if {[PopupDown ASCIIPunctuation] ==1} {return}
23070    set po [CreateTextDisplay [_ "ASCII Punctuation"] $HPWidth $HPLines]
23071    BindKeys $po;
23072    set PopupList(ASCIIPunctuation) $po;
23073    AppendToTextDisplay $po [_ {These sets are defined purely in terms of the ASCII\
23074punctuation set, which consists of the 32 characters:\
23075	! " \# $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` \{ | \} ~ }];
23076}
23077# "
23078
23079proc ExplainOctalCode {} {
23080    global HPWidth;
23081    global HPLines;
23082    global PopupList;
23083    if {[PopupDown OctalCode] ==1} {return}
23084    set po [CreateTextDisplay [_ "Octal Character Codes"] $HPWidth $HPLines]
23085    BindKeys $po;
23086    set PopupList(OctalCode) $po;
23087    AppendToTextDisplay $po [_ "\
23088It is traditional to give character codes and other numbers\
23089relevant to the internal operation of computers in octal, that is,\
23090base 8. The main reason for this is that it is convenient to use numbers\
23091that are integral powers of two because they are easily convertible\
23092into the binary (base two) representation that directly reflects the\
23093bit patterns in the computer's memory. More recently, numbers such as\
23094character codes have come to be given in hexadecimal (base 16)."];
23095    AppendToTextDisplay $po "\n\n"
23096    AppendToTextDisplay $po [_ "\
23097In octal, each place represents a power of 8 rather than a power\
23098of 10. For example, the number 61 in octal is equivalent to decimal\
2309949 because it represents (6*8)+(1*1). The same number in binary is\
23100110001, representing (1*32)+(1*16)+(0*8)+(0*4)+(0*2)+(1*1). Octal\
23101numbers are usually written with a leading 0 as an indication that\
23102they are octal."];
23103    AppendToTextDisplay $po "\n\n"
23104    AppendToTextDisplay $po [_ "\
23105It is useful to be able to refer to characters by their\
23106numerical codes when they have special meaning to the language\
23107which will process them or for some other reason cannot appear\
23108as such. For example, entering a newline character directly\
23109may disarrange your text or trigger a command that you do not\
23110want to trigger. Entering the numerical code for newline\
23111(012) allows you to refer to a newline and pass it on\
23112to another program or level of processing."];
23113}
23114
23115proc ExplainDecimalCode {} {
23116    global HPWidth;
23117    global HPLines;
23118    global PopupList;
23119    if {[PopupDown DecimalCode] ==1} {return}
23120    set po [CreateTextDisplay [_ "Decimal Character Codes"] $HPWidth $HPLines]
23121    BindKeys $po;
23122    set PopupList(DecimalCode) $po;
23123    AppendToTextDisplay $po [_ "\
23124It is traditional to give character codes and other numbers\
23125relevant to the internal operation of computers in octal, that is,\
23126base 8. The main reason for this is that it is convenient to use numbers\
23127that are integral powers of two because they are easily convertible\
23128into the binary (base two) representation that directly reflects the\
23129bit patterns in the computer's memory. More recently, numbers such as\
23130character codes have come to be given in hexadecimal (base 16)."];
23131    AppendToTextDisplay $po "\n\n"
23132    AppendToTextDisplay $po "This program, however, lets you use decimal\
23133    (base 10, like ordinary numbers) character codes if you wish to."];
23134    AppendToTextDisplay $po "\n\n"
23135    AppendToTextDisplay $po [_ "\
23136It is useful to be able to refer to characters by their\
23137numerical codes when they have special meaning to the language\
23138which will process them or for some other reason cannot appear\
23139as such. For example, entering a newline character directly\
23140may disarrange your text or trigger a command that you do not\
23141want to trigger. Entering the numerical code for newline\
23142(012) allows you to refer to a newline and pass it on\
23143to another program or level of processing."];
23144}
23145
23146
23147proc ExplainHexCode {} {
23148    global HPWidth;
23149    global HPLines;
23150    global PopupList;
23151    if {[PopupDown HexCode] ==1} {return}
23152    set po [CreateTextDisplay [_ "Hexadecimal Character Codes"] $HPWidth $HPLines]
23153    BindKeys $po;
23154    set PopupList(HexCode) $po;
23155    AppendToTextDisplay $po [_ "\
23156Character codes and other numbers relevant to the internal operation\
23157of computers are usually given in hexadeciaml, that is, base 16.\
23158The main reason for this is that it is convenient to use numbers\
23159that are integral powers of two because they are easily convertible\
23160into the binary (base two) representation that directly reflects the\
23161bit patterns in the computer's memory."];
23162    AppendToTextDisplay $po "\n\n"
23163    AppendToTextDisplay $po [_ "\
23164In hexadecimal, each place represents a power of 16 rather than a power\
23165of 10. For example, the number 61 in hexadecimal is equivalent to decimal\
2316697 because it represents (6*16)+(1*1). The same number in binary is\
2316701100001, representing (1*64)+(1*32)+(0*16)+(0*8)+(0*4)+(0*2)+(1*1). Hexadecimal\
23168numbers are usually written with a leading 0x as an indication that\
23169they are hexadecimal. The digits greater than nine are written with the\
23170first six letters of the alphabet: a = 10, b = 11, and so on.\
23171Some programs accept either upper- or lower-case letters, while others\
23172insist on one or the other."];
23173    AppendToTextDisplay $po "\n\n"
23174    AppendToTextDisplay $po [_ "\
23175It is useful to be able to refer to characters by their\
23176numerical codes when they have special meaning to the language\
23177which will process them or for some other reason cannot appear\
23178as such. For example, entering a newline character directly\
23179may disarrange your text or trigger a command that you do not\
23180want to trigger. Entering the numerical code for newline\
23181(0x0A) allows you to refer to a newline and pass it on\
23182to another program or level of processing. Similarly, using\
23183numerical codes you can enter Unicode characters that you cannot\
23184enter by other means."];
23185}
23186
23187
23188proc ExplainEscape {} {
23189    global HPWidth;
23190    global HPLines;
23191    global PopupList;
23192    if {[PopupDown Escape] ==1} {return}
23193    set po [CreateTextDisplay [_ "Escape"] $HPWidth $HPLines]
23194    BindKeys $po;
23195    set PopupList(Escape) $po;
23196    AppendToTextDisplay $po [_ "
23197\`Escape\', ASCII/Unicode 0x1B, is not found in normal text. Its usual use\
23198is to send commands and messages to teletypes, terminals, and other such devices.\
23199It alerts the device that the next character is not to be interpreted as a\
23200normal character but rather is a code representing a special command.\
23201It is called \`Escape\' because it provides for an escape from the standard\
23202interpretation of the character codes. On most keyboards, the key labelled \`Esc\'
23203generates this character code."];
23204}
23205
23206proc ExplainCarriageReturn {} {
23207    global HPWidth;
23208    global HPLines;
23209    global PopupList;
23210    if {[PopupDown CarriageReturn] ==1} {return}
23211    set po [CreateTextDisplay [_ "Carriage Return"] $HPWidth $HPLines]
23212    BindKeys $po;
23213    AppendToTextDisplay $po [_ "Carriage Return (0x0D) is one of the characters used to\
23214mark end-of-line. On Unix systems, end-of-line is marked by Newline (0x0A). On Macintoshen,\
23215end-of-lineis marked by Carriage Return. On DOS and MS Windows sytems, end-of-line is\
23216marked by the sequence of Carriage Return followed by Newline."];
23217}
23218
23219proc ExplainComment {} {
23220    global HPWidth;
23221    global HPLines;
23222    global PopupList;
23223    if {[PopupDown Comment] ==1} {return}
23224    set po [CreateTextDisplay [_ "Comment"] $HPWidth $HPLines]
23225    BindKeys $po;
23226    set PopupList(Comment) $po;
23227    AppendToTextDisplay $po [_ "Some matchers use this notation to allow you to\
23228put comments and whitespace inside regular expressions. A comment consists of whatever text\
23229you would like to insert. It is there only for the benefit of people reading the program.\
23230It has no effect on the match. Comments begin with a crosshatch (\#) and continue until\
23231the end of the line. If this flag is set whitespace within the regular expression is\
23232ignored. This provides greater freedom in laying out the regular expression. This is\
23233especially useful if you are preparing teaching materials or if the regular expression is\
23234complex or obscure and therefore deserves explication."];
23235}
23236
23237proc ExplainCaseSensitiveInitial {} {
23238    global HPWidth;
23239    global HPLines;
23240    global PopupList;
23241    if {[PopupDown CaseSensitive] ==1} {return}
23242    set po [CreateTextDisplay [_ "Case Sensitive"] $HPWidth 4]
23243    BindKeys $po;
23244    set PopupList(CaseSensitive) $po;
23245    AppendToTextDisplay $po [_ "This flag causes matching in the subsequent part of the regular expression to be case sensitive. It is permitted only at the beginning of the regular expression."];
23246    AppendToTextDisplay $po [_ "It is useful only when the command-line case-insensitive flag is set."]
23247}
23248
23249proc ExplainCaseSensitive {} {
23250    global HPWidth;
23251    global HPLines;
23252    global PopupList;
23253    if {[PopupDown CaseSensitive] ==1} {return}
23254    set po [CreateTextDisplay [_ "Case Sensitive"] $HPWidth $HPLines]
23255    BindKeys $po;
23256    set PopupList(CaseSensitive) $po;
23257    AppendToTextDisplay $po [_ "This flag causes matching in the subsequent part of the regular expression to be case sensitive."];
23258}
23259
23260proc ExplainCaseInsensitive {} {
23261    global HPWidth;
23262    global HPLines;
23263    global PopupList;
23264    if {[PopupDown CaseInsensitive] ==1} {return}
23265    set po [CreateTextDisplay [_ "Case Insensitive Comparison"] $HPWidth $HPLines]
23266    BindKeys $po;
23267    set PopupList(CaseInsensitive) $po;
23268    AppendToTextDisplay $po [_ "A comparison is case-sensitive if two strings\
23269differing only in the case of one or more characters are considered\
23270different. If two strings differing only in case are considered the same, the\
23271comparison is case-insensitive. Case-insensitive matching can always be arranged\
23272by using disjunctions of upper- and lower-case pairs, e.g. \[Cc\]\[Aa\]\[Tt\], but this is\
23273tedious, so many matchers provide a flag for requesting case-insensitive matching.\
23274Matchers that support this notation allow you to set this flag from within the\
23275regular expression."];
23276    AppendToTextDisplay $po "\n\n"
23277    if {(!$::Features(CaseInsensitiveOctal,$::program,$::InterfaceLocale)) && \
23278	    (!$::Features(CaseInsensitiveHex,$::program,$::InterfaceLocale))} {
23279	AppendToTextDisplay $po "This flag does not apply to octal or hex escapes.\n\n"
23280    } elseif {!$::Features(CaseInsensitiveOctal,$::program,$::InterfaceLocale)} {
23281	AppendToTextDisplay $po "This flag does not apply to octal escapes.\n\n"
23282    } elseif {!$::Features(CaseInsensitiveHex,$::program,$::InterfaceLocale)} {
23283	AppendToTextDisplay $po "This flag does not apply to hex escapes.\n\n"
23284    }
23285    if {$::Features(CaseInsensitiveFlagWideScope,$::program,$::InterfaceLocale)} {
23286	AppendToTextDisplay $po "This flag has scope over the entire expression, including anything that precedes it."
23287    } else {
23288	AppendToTextDisplay $po "This flag takes effect where it is placed and remains in force until the end of the expression, the end of the group, or a countervailing flag."
23289    }
23290    if {!$::Features(CaseInsensitiveNonAsciiLiteral,$::program,$::InterfaceLocale)} {
23291	AppendToTextDisplay $po "\n\n"
23292	AppendToTextDisplay $po [_ "This flag affects only the ASCII characters."]
23293	if {!$::Features(CaseInsensitiveAsciiClass,$::program,$::InterfaceLocale)} {
23294	    AppendToTextDisplay $po "\n\n"
23295	    AppendToTextDisplay $po [_ "It has no effect on builtin character classes."]
23296	} else {
23297	    if {!$::Features(CaseInsensitiveAsciiClassSymmetric,$::program,$::InterfaceLocale)} {
23298		AppendToTextDisplay $po "\n\n"
23299		AppendToTextDisplay $po [_ "It affects builtin character classes asymmetrically."];
23300		AppendToTextDisplay $po [_ "It makes upper-case characters match \[:lower:\] but it does not make lower-case characters match \[:upper:\]"];
23301	    }
23302	}
23303    } else {
23304	if {!$::Features(CaseInsensitiveAsciiClass,$::program,$::InterfaceLocale)} {
23305	    AppendToTextDisplay $po "\n\n"
23306	    AppendToTextDisplay $po [_ "It has no effect on builtin character classes."];
23307	} else {
23308	    if {!$::Features(CaseInsensitiveNonAsciiClass,$::program,$::InterfaceLocale)} {
23309		AppendToTextDisplay $po "\n\n"
23310		AppendToTextDisplay $po [_ "It has no effect on builtin character classes outside the ASCII range."];
23311	    } else {
23312		if { (!$::Features(CaseInsensitiveAsciiClassSymmetric,$::program,$::InterfaceLocale)) && \
23313			 (!$::Features(CaseInsensitiveNonAsciiClassSymmetric,$::program,$::InterfaceLocale))} {
23314		    AppendToTextDisplay $po "\n\n"
23315		    AppendToTextDisplay $po [_ "It affects builtin character classes asymmetrically."];
23316		    AppendToTextDisplay $po [_ "It makes upper-case characters match \[:lower:\] but it does not make lower-case characters match \[:upper:\]"];
23317		} else {
23318		    if {$::Features(CaseInsensitiveAsciiClassSymmetric,$::program,$::InterfaceLocale)} {
23319			AppendToTextDisplay $po "\n\n"
23320			AppendToTextDisplay $po [_ "It affects builtin character classes asymmetrically outside the ASCII range."];
23321			AppendToTextDisplay $po [_ "It makes upper-case characters match \[:lower:\] but it does not make lower-case characters match \[:upper:\]"];
23322		    }
23323		}
23324	    }
23325	}
23326    }
23327}
23328
23329proc ExplainCaseInsensitiveIU {} {
23330    global HPWidth;
23331    global HPLines;
23332    global PopupList;
23333    if {[PopupDown CaseInsensitiveIU] ==1} {return}
23334    set po [CreateTextDisplay [_ "Unicode Case Insensitive Comparison"] $HPWidth $HPLines]
23335    BindKeys $po;
23336    set PopupList(CaseInsensitiveIU) $po;
23337    AppendToTextDisplay $po [_ "A comparison is case-sensitive if two strings\
23338differing only in the case of one or more characters are considered\
23339different. If two strings differing only in case are considered the same, the\
23340comparison is case-insensitive. Case-insensitive matching can always be arranged\
23341by using disjunctions of upper- and lower-case pairs, e.g. \[Cc\]\[Aa\]\[Tt\], but this is\
23342tedious, so many matchers provide a flag for requesting case-insensitive matching.\
23343Matchers that support this notation allow you to set this flag from within the\
23344regular expression."];
23345    AppendToTextDisplay $po "\n\n"
23346    if {$::Features(CaseInsensitiveFlagWideScope,$::program,$::InterfaceLocale)} {
23347	AppendToTextDisplay $po "This flag has scope over the entire expression, including anything that precedes it."
23348    } else {
23349	AppendToTextDisplay $po "This flag takes effect where it is placed and remains in force until the end of the expression, the end of the group, or a countervailing flag."
23350    }
23351    if {!$::Features(CaseInsensitiveuNonAsciiLiteral,$::program,$::InterfaceLocale)} {
23352	AppendToTextDisplay $po "\n\n"
23353	AppendToTextDisplay $po [_ "This flag affects only the ASCII characters."]
23354	if {!$::Features(CaseInsensitiveAsciiClass,$::program,$::InterfaceLocale)} {
23355	    AppendToTextDisplay $po "\n\n"
23356	    AppendToTextDisplay $po [_ "It has no effect on builtin character classes."]
23357	} else {
23358	    if {!$::Features(CaseInsensitiveAsciiClassSymmetric,$::program,$::InterfaceLocale)} {
23359		AppendToTextDisplay $po "\n\n"
23360		AppendToTextDisplay $po [_ "It affects builtin character classes asymmetrically."];
23361		AppendToTextDisplay $po [_ "It makes upper-case characters match \[:lower:\] but it does not make lower-case characters match \[:upper:\]"];
23362	    }
23363	}
23364    } else {
23365	if {!$::Features(CaseInsensitiveAsciiClass,$::program,$::InterfaceLocale)} {
23366	    AppendToTextDisplay $po "\n\n"
23367	    AppendToTextDisplay $po [_ "It has no effect on builtin character classes."];
23368	} else {
23369	    if {!$::Features(CaseInsensitiveuNonAsciiClass,$::program,$::InterfaceLocale)} {
23370		AppendToTextDisplay $po "\n\n"
23371		AppendToTextDisplay $po [_ "It has no effect on builtin character classes outside the ASCII range."];
23372	    } else {
23373		if { (!$::Features(CaseInsensitiveAsciiClassSymmetric,$::program,$::InterfaceLocale)) && \
23374			 (!$::Features(CaseInsensitiveuNonAsciiClassSymmetric,$::program,$::InterfaceLocale))} {
23375		    AppendToTextDisplay $po "\n\n"
23376		    AppendToTextDisplay $po [_ "It affects builtin character classes asymmetrically."];
23377		    AppendToTextDisplay $po [_ "It makes upper-case characters match \[:lower:\] but it does not make lower-case characters match \[:upper:\]"];
23378		} else {
23379		    if {$::Features(CaseInsensitiveAsciiClassSymmetric,$::program,$::InterfaceLocale)} {
23380			AppendToTextDisplay $po "\n\n"
23381			AppendToTextDisplay $po [_ "It affects builtin character classes asymmetrically outside the ASCII range."];
23382			AppendToTextDisplay $po [_ "It makes upper-case characters match \[:lower:\] but it does not make lower-case characters match \[:upper:\]"];
23383		    }
23384		}
23385	    }
23386	}
23387    }
23388}
23389
23390proc ExplainVisible {} {
23391    global HPWidth;
23392    global HPLines;
23393    global PopupList;
23394    if {[PopupDown Visible] ==1} {return}
23395    set po [CreateTextDisplay [_ "Visible ASCII Characters - Graph and Print"] $HPWidth $HPLines]
23396    BindKeys $po;
23397    set PopupList(Visible) $po;
23398    AppendToTextDisplay $po [_ "\
23399The POSIX standard defines two similar classes of \`visible\' chracters.\
23400The category \`graph\' may be defined as the set of characters that leave\
23401ink on the page. Within the ASCII character set, this means the classes\
23402\`alpha\', \`digit\', and \`punct\'. It does not include the space character.\
23403The complement of this class therefore consists of the control characters\
23404and the space character."];
23405    AppendToTextDisplay $po "\n\n"
23406    AppendToTextDisplay $po [_ "\
23407The category \`print\' consists of all characters other than the control\
23408characters. In ASCII, this means that the only difference between \`graph\'\
23409and \`print\' is that the latter includes the space character."]
23410    AppendToTextDisplay $po "\n\n"
23411    AppendToTextDisplay $po [_ "Some documentation, both printed and on the web,\
23412incorrectly describes\`graph\' and \`print\' as identical. They are not."];
23413    AppendToTextDisplay $po "\n\n"
23414    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
23415an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
23416    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
23417    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
23418    AppendToTextDisplay $po ".\n"
23419}
23420
23421proc ExplainIntersection {} {
23422    global HPWidth;
23423    global HPLines;
23424    global PopupList;
23425    if {[PopupDown Intersection] ==1} {return}
23426    set po [CreateTextDisplay [_ "Intersection"] $HPWidth $HPLines]
23427    BindKeys $po;
23428    set PopupList(Intersection) $po;
23429    AppendToTextDisplay $po [_ "\
23430This notation represents the intersection of two character classes, that is,\
23431the characters that belong to both classes.\
23432This is a recent innovation that most matchers do not provide."]
23433    AppendToTextDisplay $po "\n\n";
23434    AppendToTextDisplay $po [_ "Note that Redet provides a facility for intersecting\
23435user-defined character classes\
23436that does not depend on the ability of the regular expression matcher to\
23437do so."];
23438}
23439
23440
23441proc ExplainInsertPostMatch {} {
23442    global HPWidth;
23443    global HPLines;
23444    global PopupList;
23445    if {[PopupDown InsertPostMatch] ==1} {return}
23446    set po [CreateTextDisplay [_ "Insert the Portion Following the Match"] $HPWidth $HPLines]
23447    BindKeys $po;
23448    set PopupList(InsertPostMatch) $po;
23449    AppendToTextDisplay $po [_ "In matchers that treat a string as matching a\
23450regular expression if some substring\
23451matches, the match may be regarded as splitting the string into three parts: the\
23452substring that actually matched, the part of the string preceding the substring\
23453that matched, and the part of the string following the substring that matched.\
23454For example, if the regular expression is \`ment\' and the input string is\
23455\`segmentally\', the substring that actually matches is \`ment\', the\
23456prefix is \`seg\', and the suffix is \`ally\'.\
23457This notation stands for the suffix to the matching substring."];
23458}
23459
23460proc ExplainInsertPreMatch {} {
23461    global HPWidth;
23462    global HPLines;
23463    global PopupList;
23464    if {[PopupDown InsertPreMatch] ==1} {return}
23465    set po [CreateTextDisplay [_ "Insert the Portion Preceding the Match"] $HPWidth $HPLines]
23466    BindKeys $po;
23467    set PopupList(InsertPreMatch) $po;
23468    AppendToTextDisplay $po [_ "In matchers that treat a string as matching a\
23469regular expression if some substring\
23470matches, the match may be regarded as splitting the string into three parts: the\
23471substring that actually matched, the part of the string preceding the substring\
23472that matched, and the part of the string following the substring that matched.\
23473For example, if the regular expression is \`ment\' and the input string is\
23474\`segmentally\', the substring that actually matches is \`ment\', the\
23475prefix is \`seg\', and the suffix is \`ally\'.\
23476This notation stands for the prefix to the matching substring."];
23477}
23478
23479proc ExplainInsertEntireMatch {} {
23480    global HPWidth;
23481    global HPLines;
23482    global PopupList;
23483    if {[PopupDown InsertEntireMatch] ==1} {return}
23484    set po [CreateTextDisplay [_ "Insert Entire Match"] $HPWidth $HPLines]
23485    BindKeys $po;
23486    set PopupList(InsertEntireMatch) $po;
23487    AppendToTextDisplay $po [_ "This notation inserts into the substitution\
23488a copy of the entire match to the\
23489regular expression. It is useful when the purpose of the operation is not\
23490to change the matched text but to add to it in a conditional way.\
23491For example, if we wanted to make a list of all of the stems that occur\
23492with the prefix \`pre\' and the suffix \`al\' we might (using Perl notation)\
23493use the regular expression \`^(pre)(.*)(al)\$\' and the substitution\
23494expression \`\$2\\t$&\', which inserts a copy of the second captured group,\
23495a tab, and a copy of the entire match. The result would be two columns, first the stem,\
23496then the entire word."];
23497    AppendToTextDisplay $po [_ "For further information on substitution backreferences see: \n"]
23498    AppendLinkToTextDisplay $po [_ "Substitution Backreferences."] {ExplainBackReferenceSub};
23499}
23500
23501proc ExplainUpperCaseASCIILetter {} {
23502    global HPWidth;
23503    global HPLines;
23504    global PopupList;
23505    if {[PopupDown UpperCaseASCIILetter] ==1} {return}
23506    set po [CreateTextDisplay [_ "Upper Case ASCII Letter"] $HPWidth $HPLines]
23507    BindKeys $po;
23508    set PopupList(UpperCaseASCIILetter) $po;
23509    AppendToTextDisplay $po [_ "The class of upper case ASCII letters consists of the \
2351026 letters: 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"];
23511    AppendToTextDisplay $po "\n\n"
23512    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
23513an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
23514    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
23515    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
23516    AppendToTextDisplay $po ".\n"
23517}
23518
23519proc ExplainUpperCaseLetter {} {
23520    global HPWidth;
23521    global HPLines;
23522    global PopupList;
23523    if {[PopupDown UpperCaseLetter] ==1} {return}
23524    set po [CreateTextDisplay [_ "Upper Case Letter"] $HPWidth $HPLines]
23525    BindKeys $po;
23526    set PopupList(UpperCaseLetter) $po;
23527    AppendToTextDisplay $po [_ "The class of upper case letters, including not only the \
23528ASCII letters A, B, C, etc. but upper-case letters in other writing systems that have \
23529a case distinction, such as Armenian, Cyrillic, and Greek."];
23530    AppendToTextDisplay $po "\n\n"
23531    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
23532an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
23533    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
23534    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
23535    AppendToTextDisplay $po ".\n"
23536}
23537
23538proc ExplainLowerCaseASCIILetter {} {
23539    global HPWidth;
23540    global HPLines;
23541    global PopupList;
23542    if {[PopupDown LowerCaseASCIILetter] ==1} {return}
23543    set po [CreateTextDisplay [_ "Lower Case ASCII Letter"] $HPWidth $HPLines]
23544    BindKeys $po;
23545    set PopupList(LowerCaseASCIILetter) $po;
23546    AppendToTextDisplay $po [_ "The class of lower case ASCII letters consists of the \
2354726: letters 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"];
23548    AppendToTextDisplay $po "\n\n"
23549    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
23550an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
23551    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
23552    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
23553    AppendToTextDisplay $po ".\n"
23554}
23555
23556proc ExplainLowerCaseLetter {} {
23557    global HPWidth;
23558    global HPLines;
23559    global PopupList;
23560    if {[PopupDown LowerCaseLetter] ==1} {return}
23561    set po [CreateTextDisplay [_ "Lower Case Letter"] $HPWidth $HPLines]
23562    BindKeys $po;
23563    set PopupList(LowerCaseLetter) $po;
23564    AppendToTextDisplay $po [_ "The class of lower case letters, including not only the \
23565ASCII letters a, b, c, etc. but lower-case letters in other writing systems that have \
23566a case distinction, such as Armenian, Cyrillic, and Greek."];
23567    AppendToTextDisplay $po "\n\n"
23568    AppendToTextDisplay $po [_ "For details on the POSIX character classes, including\
23569an ASCII chart color-coded for the POSIX classes, see the reference manual section "];
23570    set url [PathToFileURL [file join $::ManualDirectory builtincharclass.html]]
23571    AppendLinkToTextDisplay $po "Builtin Character Classes" [list ShowWebPage $url]
23572    AppendToTextDisplay $po ".\n"
23573}
23574
23575proc ExplainMustPair {} {
23576    global HPWidth;
23577    global HPLines;
23578    global PopupList;
23579    if {[PopupDown MustPair] ==1} {return}
23580    set po [CreateTextDisplay [_ "Paired Character Sets"] $HPWidth $HPLines]
23581    BindKeys $po;
23582    set PopupList(MustPair) $po;
23583    AppendToTextDisplay $po [_ {Certain character sets cannot stand alone but must be
23584used in pairs, one set being mapped to the other set.\
23585For example, the tr command: "tr '[:upper:]' ' [:lower:]'"
23586is a valid command that converts upper case letters to lower case, but the\
23587command "tr '[:upper:]' X", intended to replace all upper case letters with the\
23588letter 'X', is not. (This can be accomplished by listing the characters in the\
23589first set explicitly: "tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'X'".)}];
23590    AppendToTextDisplay $po "\n\n"
23591AppendToTextDisplay $po [_ {This restriction applies only to mappings between\
23592two sets of characters. The command "tr -d [:upper:]]" is a valid command which\
23593strips upper case letters from its input.}];
23594    AppendToTextDisplay $po "\n"
23595}
23596
23597proc ExplainXYpair {} {
23598    global HPWidth;
23599    global HPLines;
23600    global PopupList;
23601    if {[PopupDown XYpair] ==1} {return}
23602    set po [CreateTextDisplay [_ "Balanced Delimiters"] $HPWidth $HPLines]
23603    BindKeys $po;
23604    set PopupList(XYpair) $po;
23605    AppendToTextDisplay $po [_ "This construction is intended for matching strings\
23606surrounded by balanced delimiters. The expression \`%b()\', for example, will\
23607a string surrounded by parentheses, such as \`(abc)\'"];
23608}
23609
23610proc ExplainClassComplement {} {
23611    global HPWidth;
23612    global HPLines;
23613    global PopupList;
23614    if {[PopupDown ClassComplement] ==1} {return}
23615    set po [CreateTextDisplay [_ "Complements of Named Classes"] $HPWidth $HPLines]
23616    BindKeys $po;
23617    set PopupList(ClassComplement) $po;
23618    AppendToTextDisplay $po [_ "This notation denotes the complement of a named
23619character class, that is, the set of characters that do not belong to it. For example,
23620if the class is \`\[:lower:\]\', the set of lower-case letters, its complement
23621consists of all characters that are not lower-case letters, including upper-case
23622letters, digits, punctuation, and control characters."];
23623}
23624
23625proc ExplainUnicodeCase {} {
23626    global HPWidth;
23627    global HPLines;
23628    global PopupList;
23629    if {[PopupDown UnicodeCase] ==1} {return}
23630    set po [CreateTextDisplay [_ "Unicode Case Flag"] $HPWidth $HPLines]
23631    BindKeys $po;
23632    set PopupList(UnicodeCase) $po;
23633    AppendToTextDisplay $po [_ "This flag makes matches case-insensitive for all
23634Unicode characters. It must be used in conjunction with the basic case-insensitive
23635flag, which by itself affects only the ASCII letters."];
23636}
23637
23638proc ExplainZeroOneQMark {} {
23639    global HPWidth;
23640    global HPLines;
23641    global PopupList;
23642    if {[PopupDown ZeroOneQMark] ==1} {return}
23643    set po [CreateTextDisplay [_ "Optional Quantifier"] $HPWidth $HPLines]
23644    BindKeys $po;
23645    set PopupList(ZeroOneQMark) $po;
23646    AppendToTextDisplay $po [_ "This quantifier indicates that the preceding group\
23647may be either present or absent. In other words, it says that a matching string will contain\
23648either zero or one token of the group."];
23649}
23650
23651proc ExplainBeginningOfString {} {
23652    global HPWidth;
23653    global HPLines;
23654    global PopupList;
23655    if {[PopupDown BeginningOfString] ==1} {return}
23656    set po [CreateTextDisplay [_ "Beginning of String"] $HPWidth $HPLines]
23657    BindKeys $po;
23658    set PopupList(BeginningOfString) $po;
23659    AppendToTextDisplay $po [_ "This matches at the beginning of the string."];
23660}
23661
23662proc ExplainBeginningOfWord {} {
23663    global HPWidth;
23664    global HPLines;
23665    global PopupList;
23666    if {[PopupDown BeginningOfWord] ==1} {return}
23667    set po [CreateTextDisplay [_ "Beginning of Word"] $HPWidth $HPLines]
23668    BindKeys $po;
23669    set PopupList(BeginningOfWord) $po;
23670    AppendToTextDisplay $po [_ "This matches at the beginning of a word.\
23671A word is considered to begin at the transition from a non-word character\
23672to a word character, where a word character is an alphanumeric character or\
23673underscore."];
23674}
23675
23676proc ExplainEndOfWord {} {
23677    global HPWidth;
23678    global HPLines;
23679    global PopupList;
23680    if {[PopupDown EndOfWord] ==1} {return}
23681    set po [CreateTextDisplay [_ "End of Word"] $HPWidth $HPLines]
23682    BindKeys $po;
23683    set PopupList(EndOfWord) $po;
23684    AppendToTextDisplay $po [_ "This matches at the end of a word.\
23685A word is considered to end at the transition from a word character\
23686to a non-word character, where a word character is an alphanumeric character or\
23687underscore."];
23688}
23689
23690
23691proc ExplainWordBoundary {} {
23692    global HPWidth;
23693    global HPLines;
23694    global PopupList;
23695    if {[PopupDown WordBoundary] ==1} {return}
23696    set po [CreateTextDisplay [_ "Word Boundary"] $HPWidth $HPLines]
23697    BindKeys $po;
23698    set PopupList(WordBoundary) $po;
23699    AppendToTextDisplay $po [_ "This matches at a word boundary, where a word\
23700boundary is considered to occur between any two adjacent characters of which\
23701one is a word character and the other is a non-word character."];
23702}
23703
23704proc ExplainNonWordBoundary {} {
23705    global HPWidth;
23706    global HPLines;
23707    global PopupList;
23708    if {[PopupDown NonWordBoundary] ==1} {return}
23709    set po [CreateTextDisplay [_ "NonWordBoundary"] $HPWidth $HPLines]
23710    BindKeys $po;
23711    set PopupList(NonWordBoundary) $po;
23712    AppendToTextDisplay $po [_ "This matches anywhere that is not word boundary, where a word\
23713boundary is considered to occur between any two adjacent characters of which\
23714one is a word character and the other is a non-word character. In other words, it\
23715matches if both characters are word characters or both are non-word characters."];
23716}
23717
23718proc ExplainSet {} {
23719    global HPWidth;
23720    global HPLines;
23721    global PopupList;
23722    if {[PopupDown Set] ==1} {return}
23723    set po [CreateTextDisplay [_ "Set"] $HPWidth $HPLines]
23724    BindKeys $po;
23725    set PopupList(Set) $po;
23726    AppendToTextDisplay $po [_ "This matches any of the characters in the set."];
23727}
23728
23729proc ExplainSetComplement {} {
23730    global HPWidth;
23731    global HPLines;
23732    global PopupList;
23733    if {[PopupDown SetComplement] ==1} {return}
23734    set po [CreateTextDisplay [_ "SetComplement"] $HPWidth $HPLines]
23735    BindKeys $po;
23736    set PopupList(SetComplement) $po;
23737    AppendToTextDisplay $po [_ "This matches the complement of the characters in the set,\
23738that is, any character that is not a member of the set. If you want to include circumflex\
23739in the set, just put it somewhere other than first; it denotes the complement only\
23740when it immediately follows the left square bracket."];
23741}
23742
23743proc ExplainRange {} {
23744    global HPWidth;
23745    global HPLines;
23746    global PopupList;
23747    if {[PopupDown Range] ==1} {return}
23748    set po [CreateTextDisplay [_ "Character Ranges"] $HPWidth $HPLines]
23749    BindKeys $po;
23750    set PopupList(Range) $po;
23751    AppendToTextDisplay $po [_ "This denotes the range of characters from a through d inclusive.\
23752Traditionally, the characters between the endpoints are those whose codes fall\
23753numerically between those of the endponts. For exmaple, in ASCII the range \[g-k\] consists\
23754of g, h, i, j, and k."];
23755    AppendToTextDisplay $po "\n\n"
23756    AppendToTextDisplay $po [_ "In the locale system, the meaning of a range depends on the\
23757collating order (sort order) defined for the locale, which may not be the same as the\
23758numerical order of codepoints. If you are writing code that may be used in a variety\
23759of locales, it is best to avoid the use of ranges. They can always be replaced by explicit\
23760lists."];
23761   if { $::Features(unicodebmp,$::program,$::InterfaceLocale) && \
23762	 (!$::Features(CrossUnicodeBlockP,$::program,$::InterfaceLocale))} {
23763    	AppendToTextDisplay $po [_ "\n\nCharacter ranges may not cross Unicode block boundaries."];
23764   }
23765   if {$::Features(Range128,$::program,$::InterfaceLocale) \
23766	&& (!$::Features(Range129,$::program,$::InterfaceLocale))} {
23767       AppendToTextDisplay $po [_ "\n\nRanges may span no more than 128 codepoints."]
23768   }
23769}
23770
23771proc ExplainMultiRange {} {
23772    global HPWidth;
23773    global HPLines;
23774    global PopupList;
23775    if {[PopupDown MultiRange] ==1} {return}
23776    set po [CreateTextDisplay [_ "Multiple Character Ranges"] $HPWidth $HPLines]
23777    BindKeys $po;
23778    set PopupList(MultiRange) $po;
23779    AppendToTextDisplay $po [_ "Multiple ranges may be included in the same character set. Each hyphen defines a range\
23780consisting of the the characters on either side of it. Any characters not adjacent to hyphens are individual\
23781members of the set. Thus, \[a-dw-z\] is the union of the ranges \[a-d\] and \[w-z\], in the C locale therefore\
23782a,b,c,d,w,x,y, and z. \[a-dsw-z\] is the union of the ranges \[a-d\] and \[w-z\] plus the letter \`s\', which is to\
23783say, the letters: a,b,c,d,s,w,x,y, and z."];
23784}
23785
23786proc ExplainTRStar {} {
23787    global HPWidth;
23788    global HPLines;
23789    global PopupList;
23790    if {[PopupDown TRStar] ==1} {return}
23791    set po [CreateTextDisplay [_ "TR Star"] $HPWidth $HPLines]
23792    BindKeys $po;
23793    set PopupList(TRStar) $po;
23794    AppendToTextDisplay $po [_ "Insert into the target character list as many copies of the\
23795specified character as are necessary to make the target list as long as the source list.\
23796For example, if the source list is \`aeioubcdfghklmnpqrstvwxyz\' and you want to map the vowels\
23797onto themselves and the consonants onto X, the second list could be written\
23798\`aeiouX*\'."];
23799}
23800
23801proc ExplainTRStarN {} {
23802    global HPWidth;
23803    global HPLines;
23804    global PopupList;
23805    if {[PopupDown TRStarN] ==1} {return}
23806    set po [CreateTextDisplay [_ "TR Star N"] $HPWidth $HPLines]
23807    BindKeys $po;
23808    set PopupList(TRStarN) $po;
23809    AppendToTextDisplay $po [_ "This is shorthand for N copies of a character. If N begins\
23810with a 0, it is taken to be in octal."];
23811}
23812
23813proc ExplainInsertLiteralString {} {
23814    global HPWidth;
23815    global HPLines;
23816    global PopupList;
23817    if {[PopupDown InsertLiteralString] ==1} {return}
23818    set po [CreateTextDisplay [_ "Insert Literal String"] $HPWidth $HPLines]
23819    BindKeys $po;
23820    set PopupList(InsertLiteralString) $po;
23821    AppendToTextDisplay $po [_ "In a substitution, insert the string between quotes."];
23822}
23823
23824
23825proc ExplainPositiveForwardAssertion {} {
23826    global HPWidth;
23827    global HPLines;
23828    global PopupList;
23829    if {[PopupDown PositiveForwardAssertion] ==1} {return}
23830    set po [CreateTextDisplay [_ "Positive Forward Assertion"] $HPWidth $HPLines]
23831    BindKeys $po;
23832    set PopupList(PositiveForwardAssertion) $po;
23833    AppendToTextDisplay $po [_ "A positive forward assertion requires that the string\
23834match the pattern in the assertion but does not consume the characters that match."];
23835}
23836
23837proc ExplainPositiveBackwardAssertion {} {
23838    global HPWidth;
23839    global HPLines;
23840    global PopupList;
23841    if {[PopupDown PositiveBackwardAssertion] ==1} {return}
23842    set po [CreateTextDisplay [_ "Positive Backward Assertion"] $HPWidth $HPLines]
23843    BindKeys $po;
23844    set PopupList(PositiveBackwardAssertion) $po;
23845    AppendToTextDisplay $po [_ "A positive backward assertion checks whether the
23846pattern in the assertion matches the string preceding the current candidate."];
23847}
23848
23849proc ExplainNegativeForwardAssertion {} {
23850    global HPWidth;
23851    global HPLines;
23852    global PopupList;
23853    if {[PopupDown NegativeForwardAssertion] ==1} {return}
23854    set po [CreateTextDisplay [_ "Negative Forward Assertion"] $HPWidth $HPLines]
23855    BindKeys $po;
23856    set PopupList(NegativeForwardAssertion) $po;
23857    AppendToTextDisplay $po [_ "A negative forward assertion requires that the string\
23858not match the pattern in the asertion. It does not consume any characters."];
23859}
23860
23861proc ExplainNegativeBackwardAssertion {} {
23862    global HPWidth;
23863    global HPLines;
23864    global PopupList;
23865    if {[PopupDown NegativeBackwardAssertion] ==1} {return}
23866    set po [CreateTextDisplay [_ "Negative Backward Assertion"] $HPWidth $HPLines]
23867    BindKeys $po;
23868    set PopupList(NegativeBackwardAssertion) $po;
23869    AppendToTextDisplay $po [_ "A negative backward assertion checks to see that the\
23870pattern in the assertion does not match the string preceding the current candidate."];
23871}
23872
23873proc ExplainSelfishNoCaptureGroup {} {
23874    global HPWidth;
23875    global HPLines;
23876    global PopupList;
23877    if {[PopupDown SelfishNoCaptureGroup] ==1} {return}
23878    set po [CreateTextDisplay [_ "Selfish No Capture Group"] $HPWidth $HPLines]
23879    BindKeys $po;
23880    set PopupList(SelfishNoCaptureGroup) $po;
23881    AppendToTextDisplay $po [_ "A selfish no capture group is a no capture group\
23882(one that does not count for purposes of backreference) that matches without regard\
23883to whether the rest of the regular expression can be matched. It may absorb characters\
23884needed by other parts of the regular expression. An ordinary group (capture or no capture)\
23885will relinquish matching characters if other parts of the regular expression are\
23886unable to match without them."];
23887    AppendToTextDisplay $po "\n\n";
23888    AppendToTextDisplay $po [_ "For example, consider the expression \`(?>a+)a\'.
23889This consists of a selfish no capture group matching one or more tokens of \`a\'
23890followed by a single \`a\'. In order for the regular expression to match, the final\
23891\`a\' must match. This can never happen because the \`a+\' will absorb all of the\
23892\`a\'s."];
23893}
23894
23895proc ExplainSimpleGroupConditional {} {
23896    global HPWidth;
23897    global HPLines;
23898    global PopupList;
23899    if {[PopupDown SimpleGroupConditional] ==1} {return}
23900    set po [CreateTextDisplay [_ "Simple Backreference Group Conditional"] $HPWidth $HPLines]
23901    BindKeys $po;
23902    set PopupList(SimpleGroupConditional) $po;
23903    AppendToTextDisplay $po [_ "A conditional regular expression is one in which\
23904whether one portion of the regular expression must match the target depends on\
23905whether another portion of\
23906the regular expression matches. Conditional regular expressions vary on two\
23907main dimensions: (a) what sort of condition they use; (b) whether or not\
23908they have an \`else\' clause."];
23909    AppendToTextDisplay $po "\n\n";
23910    AppendToTextDisplay $po [_ "This is the simplest type of conditional regular\
23911expression. The condition is whether or not a specified capture group matched.\
23912In the schema shown on the palette, k is the index of the group and x is the\
23913regular expression that must be matched if the specified group matched. For\
23914example, suppose that the entire regular expression is: \`(<)(.+)(?(1)>) \'.\
23915This consists of three parts: a capture group consisting of just a left\
23916angle bracket, another capture group consisting of \`.+\/, and a conditional\
23917expression. The conditional consists of a condition,\
23918namely that the first capture group match, and a regular expression, which in this\
23919case is the single character right angle bracket. This regular expression matches\
23920any non-null string that is either bare or enclosed by a balanced pair of\
23921angle brackets. No angle brackets are required, but if there is a left,\
23922angle bracket there must also be a right angle bracket."];
23923}
23924
23925proc ExplainElseGroupConditional {} {
23926    global HPWidth;
23927    global HPLines;
23928    global PopupList;
23929    if {[PopupDown ElseGroupConditional] ==1} {return}
23930    set po [CreateTextDisplay [_ "Group Backreference Conditional With Else Clause"] $HPWidth $HPLines]
23931    BindKeys $po;
23932    set PopupList(ElseGroupConditional) $po;
23933    AppendToTextDisplay $po [_ "A conditional regular expression is one in which\
23934whether one portion of the regular expression must match the target depends on\
23935whether another portion of\
23936the regular expression matches. Conditional regular expressions vary on two\
23937main dimensions: (a) what sort of condition they use; (b) whether or not\
23938they have an \`else\' clause."];
23939    AppendToTextDisplay $po "\n\n";
23940    AppendToTextDisplay $po [_ "This schema represents the type of condition\
23941in which the condition is whether or not a specified capture group matched\
23942and in which there is an else clause.\
23943In the schema shown on the palette, k is the index of the group, x is the\
23944regular expression that must be matched if the specified group matched, and\
23945y is the regular expression that must be matched if the group does not match.\
23946For example, suppose that the entire regular expression is: \`(<)(.+)(?(1)>|\[^>\])\'.\
23947(Depending on the language you are using and how you are entering the regular\
23948expression, additional quoting may be necessary.)\
23949This consists of three parts: a capture group consisting of just a left\
23950angle bracket, another capture group consisting of \`.+\/, and a conditional\
23951expression. The conditional consists of a condition,\
23952namely that the first capture group match, and two regular expressions separated\
23953by a pipe symbol. The first regular expression in the conditional\
23954is the single character right angle bracket. The second regular expression in the\
23955conditional is the set of characters other than right angle bracket.\
23956This regular expression matches\ any non-null string that is either bare or enclosed by\
23957a balanced pair of angle brackets. No angle brackets are required, but if there\
23958is a left angle bracket, there must also be a right angle bracket.\
23959The else clause requires that the string\
23960not end in a right angle bracket if it does not begin with left angle bracket"];
23961}
23962
23963
23964proc ExplainSimpleLookaroundConditional {} {
23965    global HPWidth;
23966    global HPLines;
23967    global PopupList;
23968    if {[PopupDown SimpleLookaroundConditional] ==1} {return}
23969    set po [CreateTextDisplay [_ "SimpleLookaroundConditional"] $HPWidth $HPLines]
23970    BindKeys $po;
23971    set PopupList(SimpleLookaroundConditional) $po;
23972    AppendToTextDisplay $po [_ "A conditional regular expression is one in which\
23973whether one portion of the regular expression must match the target depends on\
23974whether another portion of\
23975the regular expression matches. Conditional regular expressions vary on two\
23976main dimensions: (a) what sort of condition they use; (b) whether or not\
23977they have an \`else\' clause."];
23978    AppendToTextDisplay $po "\n\n";
23979    AppendToTextDisplay $po [_ "This schema shown is for the case in which the\
23980condition is an assertion and there is no else clause. The condition may consist\
23981of any of the four types of assertion: positive forward, negative forward, positive backward,\
23982and negative backward. The general form is: \`(?(assertion)re) \', where \'re\' is\
23983the regular expression that must be matched if the assertion is true. The assertion\
23984will take the form \`?=y\', \`?<=y\', \`?!y\',\`?<!y\' where \`y\' is a regular\
23985expression and the preceding characters indicate which kind of assertion it is,\
23986just as they do elsewhere."];
23987}
23988
23989proc ExplainElseLookaroundConditional {} {
23990    global HPWidth;
23991    global HPLines;
23992    global PopupList;
23993    if {[PopupDown ElseLookaroundConditional] ==1} {return}
23994    set po [CreateTextDisplay [_ "ElseLookaroundConditional"] $HPWidth $HPLines]
23995    BindKeys $po;
23996    set PopupList(ElseLookaroundConditional) $po;
23997    AppendToTextDisplay $po [_ "A conditional regular expression is one in which\
23998whether one portion of the regular expression must match the target depends on\
23999whether another portion of\
24000the regular expression matches. Conditional regular expressions vary on two\
24001main dimensions: (a) what sort of condition they use; (b) whether or not\
24002they have an \`else\' clause."];
24003    AppendToTextDisplay $po "\n\n";
24004    AppendToTextDisplay $po [_ "This schema shown is for the case in which the\
24005condition is an assertion and there is an else clause. The condition may consist\
24006of any of the four types of assertion: positive forward, negative forward, positive bachkward,\
24007and negative backward. The general form is: \`(?(assertion)re1|re2) \', where \'re1\' is\
24008the regular expression that must be matched if the assertion is true and re2 is\
24009the regular expression that must be matched if the assertion is false. The assertion\
24010will take the form \`?=y\', \`?<=y\', \`?!y\',\`?<!y\' where \`y\' is a regular\
24011expression and the preceding characters indicate which kind of assertion it is,\
24012just as they do elsewhere. "];
24013}
24014
24015proc ExplainInsertLastGroup {} {
24016    global HPWidth;
24017    global HPLines;
24018    global PopupList;
24019    if {[PopupDown InsertLastGroup] ==1} {return}
24020    set po [CreateTextDisplay [_ "Insert Last Captured Group"] $HPWidth $HPLines]
24021    BindKeys $po;
24022    set PopupList(InsertLastGroup) $po;
24023    AppendToTextDisplay $po [_ "In a substitution expression, this inserts the last\
24024captured group from the regular expression. For example,\
24025if the regular expression is \`(a.*)(b.*)(c.*)\', whatever \`c.*\' matched will be inserted.\
24026If the regular expression is \`(a.*)(b.*)\', whatever \`b.*\' matched will be inserted."];
24027}
24028
24029proc ExplainUnsetFlag {} {
24030    global HPWidth;
24031    global HPLines;
24032    global PopupList;
24033    if {[PopupDown UnsetFlag] ==1} {return}
24034    set po [CreateTextDisplay [_ "Inline Unset Flag"] $HPWidth $HPLines]
24035    BindKeys $po;
24036    set PopupList(UnsetFlag) $po;
24037    AppendToTextDisplay $po [_ "Where f is an inline flag,  this unsets it. For example,\
24038where\`?i\' sets the case-insensitive flag, \`?-i\' unsets it, making subsequent\
24039matches case-sensitive. It overrides any previous in-line setting of the flag as well as\
24040a setting from the command-line or in the argument to a function or method."];
24041    AppendToTextDisplay $po "\n\n"
24042    AppendToTextDisplay $po [_ "For further information on case-sensitivity, see: \n"]
24043    AppendLinkToTextDisplay $po "Case Sensitivity" {ExplainCaseInsensitive};
24044}
24045
24046proc ExplainStarClass {} {
24047    global HPWidth;
24048    global HPLines;
24049    global PopupList;
24050    if {[PopupDown StarClass] ==1} {return}
24051    set po [CreateTextDisplay [_ "Class Star"] $HPWidth $HPLines]
24052    BindKeys $po;
24053    set PopupList(StarClass) $po;
24054    AppendToTextDisplay $po [_ "This quantifier matches zero or more tokens belonging\
24055to the preceding character class. For example, \`%d*\' matches a sequence of any number\
24056of digits."];
24057}
24058
24059proc ExplainPlusClass {} {
24060    global HPWidth;
24061    global HPLines;
24062    global PopupList;
24063    if {[PopupDown PlusClass] ==1} {return}
24064    set po [CreateTextDisplay [_ "Class Plus"] $HPWidth $HPLines]
24065    BindKeys $po;
24066    set PopupList(PlusClass) $po;
24067    AppendToTextDisplay $po [_ "This quantifier matches one or more tokens belonging\
24068to the preceding character class. For example, \`%d+\' matches a sequence of one or\
24069more digits."];
24070}
24071
24072proc ExplainZeroOneQMarkClass {} {
24073    global HPWidth;
24074    global HPLines;
24075    global PopupList;
24076    if {[PopupDown QMarkClass] ==1} {return}
24077    set po [CreateTextDisplay [_ "Question Mark Class"] $HPWidth $HPLines]
24078    BindKeys $po;
24079    set PopupList(QMarkClass) $po;
24080    AppendToTextDisplay $po [_ "This quantifier matches zero or one token of the\
24081preceding character class. For example, \`%d%d?\' matches either one or two digits."];
24082}
24083
24084proc ExplainHyphenClass {} {
24085    global HPWidth;
24086    global HPLines;
24087    global PopupList;
24088    if {[PopupDown HyphenClass] ==1} {return}
24089    set po [CreateTextDisplay [_ "Hyphen Class"] $HPWidth $HPLines]
24090    BindKeys $po;
24091    set PopupList(HyphenClass) $po;
24092    AppendToTextDisplay $po [_ "This quantifier matches zero or more tokens belonging\
24093to the preceding character class. For example, \`%d-\' matches a sequence of any number\
24094of digits. However, unlike other similar quantifiers, it is a reluctant\
24095quantifier. For example, if the expression \`(a)(%u-)(%u*)(a)\' is matched against\
24096the string \`aBBBBa\', the third group will match \`BBBB\'. The second group\
24097contains nothing because the quantifier matches as little as it has to, and\
24098the subexpression \`(%u-)\'is satisfied with a match of the empty string."];
24099}
24100
24101proc ExplainCollationClass {} {
24102    global HPWidth;
24103    global HPLines;
24104    global PopupList;
24105    if {[PopupDown CollationClass] ==1} {return}
24106    set po [CreateTextDisplay [_ "CollationClass"] $HPWidth $HPLines]
24107    BindKeys $po;
24108    set PopupList(CollationClass) $po;
24109    AppendToTextDisplay $po [_ "A collation class is the set of characters that are assigned the same sort rank. For example, in languages in which vowels occur with a variety of accents or with no accent, as a primary sort key all versions of the same vowel are usually assigned the same sort rank, so that, for example, e, \u00E8, and \u00E9 will be treated the same. In a regular expression, a collation class matches any member of the class. A collation class is specified by listing any of its members."];
24110}
24111
24112
24113proc ExplainCollatingElementNamed {} {
24114    global HPWidth;
24115    global HPLines;
24116    global PopupList;
24117    if {[PopupDown ExplainCollatingElementNamed] ==1} {return}
24118    set po [CreateTextDisplay [_ "Named Collating Element"] $HPWidth $HPLines]
24119    BindKeys $po;
24120    set PopupList(ExplainCollatingElementNamed) $po;
24121    AppendToTextDisplay $po [_ "A named collating element is a symbolic name for a collating element, which may consist of a single character or may itself be a multicharacter collating element. See section 2.2.2.33 of POSIX ISO/IEC 9945-2:1993."];
24122}
24123
24124proc ExplainCollatingElementMultichar {} {
24125    global HPWidth;
24126    global HPLines;
24127    global PopupList;
24128    if {[PopupDown ExplainCollatingElementMultichar] ==1} {return}
24129    set po [CreateTextDisplay [_ "Multicharacter Collating Element"] $HPWidth $HPLines]
24130    BindKeys $po;
24131    set PopupList(ExplainCollatingElementMultichar) $po;
24132    AppendToTextDisplay $po [_ "A multicharacter collating element is a sequence of characters that are treated as a single unit for purposes of sorting. For example, in Spanish the sequence ch is conventionally treated as a single letter which follows c and precedes d. In a regular expression a multicharacter collating element is treated as a single character when counting letters. For example, if ch is defined as a collating element, the regular expression [[.ch.]]*c matches the string chchc. See section 2.2.2.33 of POSIX ISO/IEC 9945-2:1993."];
24133}
24134
24135proc ExplainIntegerRange {} {
24136    global HPWidth;
24137    global HPLines;
24138    global PopupList;
24139    if {[PopupDown IntegerRange] ==1} {return}
24140    set po [CreateTextDisplay [_ "Integer Range"] $HPWidth $HPLines]
24141    BindKeys $po;
24142    set PopupList(IntegerRange) $po;
24143    AppendToTextDisplay $po [_ "This expression matches any integer k such that m \u2264 k \u2264 n where m and n are non-negative integers and m \u2264 n. Note that this notation conflicts with our notation for intersection of named user-defined character classes. In order to make use integer ranges you will need to disable  named user-defined character classes from Tools:Classes."];
24144}
24145
24146proc ExplainIntegerRangeDoubleDot {} {
24147    global HPWidth;
24148    global HPLines;
24149    global PopupList;
24150    if {[PopupDown IntegerRange] ==1} {return}
24151    set po [CreateTextDisplay [_ "Integer Range"] $HPWidth $HPLines]
24152    BindKeys $po;
24153    set PopupList(IntegerRange) $po;
24154    AppendToTextDisplay $po [_ "This expression matches any integer k such that m \u2264 k \u2264 n where m and n are non-negative integers and m \u2264 n."];
24155}
24156
24157proc ExplainIntegerMultiple {} {
24158    global HPWidth;
24159    global HPLines;
24160    global PopupList;
24161    if {[PopupDown IntegerMultiple] ==1} {return}
24162    set po [CreateTextDisplay [_ "Integer Multiple"] $HPWidth $HPLines]
24163    BindKeys $po;
24164    set PopupList(IntegerMultiple) $po;
24165    AppendToTextDisplay $po [_ "The expression mp, where p is a positive integer, matches any positive integer that is an integral multiples of p, that is, any integer k > 0 such that k = jp for some integer j. For example, m3 matches any multiple of 3, e.g. 3,6,9, and 12."];
24166}
24167
24168proc ExplainIntegerFactor {} {
24169    global HPWidth;
24170    global HPLines;
24171    global PopupList;
24172    if {[PopupDown IntegerFactor] ==1} {return}
24173    set po [CreateTextDisplay [_ "Integer Factor"] $HPWidth $HPLines]
24174    BindKeys $po;
24175    set PopupList(IntegerFactor) $po;
24176    AppendToTextDisplay $po [_ "The expression fp, where p is a positive integer, matches any positive integer that is a factor of p, that is, any integer k > 0 such that kj = p for some positive integer j. For example, f12 matches 1,2,3,4,6, and 12."];
24177}
24178
24179proc ExplainVerboseFlag {} {
24180    global HPWidth;
24181    global HPLines;
24182    global PopupList;
24183    if {[PopupDown VerboseFlag] ==1} {return}
24184    set po [CreateTextDisplay [_ "Verbose Flag"] $HPWidth $HPLines]
24185    BindKeys $po;
24186    set PopupList(VerboseFlag) $po;
24187    AppendToTextDisplay $po [_ "If this flag is set, whitespace within the regular expression is ignored except within character classes and when preceded by an unescaped backslash, and crosshatch is interpreted as a comment character, so that the crosshatch and everything following it on the same line are ignored."];
24188}
24189
24190proc ExplainLiteralFlag {} {
24191    global HPWidth;
24192    global HPLines;
24193    global PopupList;
24194    if {[PopupDown LiteralFlag] ==1} {return}
24195    set po [CreateTextDisplay [_ "Literal Flag"] $HPWidth $HPLines]
24196    BindKeys $po;
24197    set PopupList(LiteralFlag) $po;
24198    AppendToTextDisplay $po [_ "The literal flag indicates that everything following it is to be treated as a literal string: nothing is to be interpreted as a metacharacter. For example, (?l)*** matches a string of three asterisks."];
24199}
24200
24201proc ExplainBasicFlag {} {
24202    global HPWidth;
24203    global HPLines;
24204    global PopupList;
24205    if {[PopupDown BasicFlag] ==1} {return}
24206    set po [CreateTextDisplay [_ "Basic Flag"] $HPWidth $HPLines]
24207    BindKeys $po;
24208    set PopupList(BasicFlag) $po;
24209    AppendToTextDisplay $po [_ "The basic flag indicates that everything following is to be interpreted as a basic regular expression. Extended regular expression notation is not to be recognized."];
24210}
24211
24212proc ExplainExtendedFlag {} {
24213    global HPWidth;
24214    global HPLines;
24215    global PopupList;
24216    if {[PopupDown ExtendedFlag] ==1} {return}
24217    set po [CreateTextDisplay [_ "Extended Flag"] $HPWidth $HPLines]
24218    BindKeys $po;
24219    set PopupList(ExtendedFlag) $po;
24220    AppendToTextDisplay $po [_ "The extended flag indicates that everything following is to be interpreted as an extended regular expression."]
24221}
24222
24223proc ExplainTotalErrorCrosshatchA {} {
24224    global HPWidth;
24225    global HPLines;
24226    global PopupList;
24227    if {[PopupDown TotalErrorCrosshatchA] ==1} {return}
24228    set po [CreateTextDisplay [_ "Error Limit"] $HPWidth $HPLines]
24229    BindKeys $po;
24230    set PopupList(TotalErrorCrosshatchA) $po;
24231    AppendToTextDisplay $po [_ "This flag sets the  total number of deviations from an exact match to N, which must be a non-negative integer. The setting applies to the remainder of the current group. For example, ((\#a0)ab)((\#a1)cd)((\#a0)ef) matches abcdef,abcef,abdef,abdcef,abczef,and abzdef but not acdef,abcde,kbcdef,akcdef,abcdeg, or abcdkf. The groups ab and ef must be matched exactly; it is only the group cd which need not match exactly."];
24232}
24233
24234proc ExplainAsymmetricCaseInsensitive {} {
24235    global HPWidth;
24236    global HPLines;
24237    global PopupList;
24238    if {[PopupDown AsymmetricCaseInsensitive] ==1} {return}
24239    set po [CreateTextDisplay [_ "Asymmetric Case Insensitive"] $HPWidth $HPLines]
24240    BindKeys $po;
24241    set PopupList(AsymmetricCaseInsensitive) $po;
24242    AppendToTextDisplay $po [_ "This flag causes lower-case letters in the subsequent portion of the pattern to match without regard to case. Upper-case letters in the pattern match only upper-case letters."];
24243}
24244
24245proc ExplainJResidueHydrophobic {} {
24246    global HPWidth;
24247    global HPLines;
24248    global PopupList;
24249    if {[PopupDown JResidueHydrophobic] ==1} {return}
24250    set po [CreateTextDisplay [_ "Hydrophobic Residues"] $HPWidth $HPLines]
24251    BindKeys $po;
24252    set PopupList(JResidueHydrophobic) $po;
24253    AppendToTextDisplay $po [_ "This matches any of the hydrophobic residues:
24254Alanine (A)
24255Cysteine (C)
24256Glycine (G)
24257Isoleucine (I)
24258Leucine (L)
24259Methionine (M)
24260Phenylalanine (F)
24261Tryptphan (W)
24262Tyrosine (Y)
24263Valine (V)"];
24264}
24265
24266proc ExplainOResidueHydrophilic {} {
24267    global HPWidth;
24268    global HPLines;
24269    global PopupList;
24270    if {[PopupDown OResidueHydrophilic] ==1} {return}
24271    set po [CreateTextDisplay [_ "Hydrophilic Residues"] $HPWidth $HPLines]
24272    BindKeys $po;
24273    set PopupList(OResidueHydrophilic) $po;
24274    AppendToTextDisplay $po [_ "This matches any of the hydrophilic residues:
24275Arginine (R)
24276Asparagine (N)
24277Aspartate (D)
24278Glutamate (E)
24279Glutamine (Q)
24280Histidine (H)
24281Lysine (K)
24282Serine (S)
24283Threonine (T)"];
24284}
24285
24286proc ExplainPerlPrint {} {
24287    global HPWidth;
24288    global HPLines;
24289    global PopupList;
24290    if {[PopupDown PerlPrint] ==1} {return}
24291    set po [CreateTextDisplay [_ "Perl Print"] $HPWidth $HPLines]
24292    BindKeys $po;
24293    set PopupList(PerlPrint) $po;
24294    AppendToTextDisplay $po [_ "This character class consists of the alphanumeric characters, the punctuation, and all of the characters in the \[:space:\] class, namely U+0020 SPACE, U+0009 TAB, U+000B VERTICAL TAB, U+000C FORM FEED, U+000A NEWLINE, and U+000D CARRIAGE RETURN."];
24295    AppendToTextDisplay $po [_ "It differs from the standard POSIX \[:print:\] class in including the \[:space:\] characters other than SPACE. In short, POSIX \[:print:\] = \[:graph:\] \u222A Space; Perl \[:print:\] = \[:graph:\] \u222A \[:space:\]."];
24296}
24297
24298proc ExplainMockPrint {} {
24299    global HPWidth;
24300    global HPLines;
24301    global PopupList;
24302    if {[PopupDown MockPrint] ==1} {return}
24303    set po [CreateTextDisplay [_ "Print"] $HPWidth $HPLines]
24304    BindKeys $po;
24305    set PopupList(MockPrint) $po;
24306    AppendToTextDisplay $po [_ "This class consists of the alpha characters and digits and so is the same as \[:alnum:\]. This definition is idiosyncratic: the POSIX \[:print:\] class is the union of \[:alpha:\], \[:digit:\], \[:punct:\], and space."];
24307}
24308
24309proc ExplainIgnoreCombiningCharacters {} {
24310    global HPWidth;
24311    global HPLines;
24312    global PopupList;
24313    if {[PopupDown IgnoreCombiningCharacters] ==1} {return}
24314    set po [CreateTextDisplay [_ "Ignore Combining Characters"] $HPWidth $HPLines]
24315    BindKeys $po;
24316    set PopupList(IgnoreCombiningCharacters) $po;
24317    AppendToTextDisplay $po [_ "Combining characters are characters like accents that do not normally stand on their own but are intended to be combined with other characters."];
24318    AppendToTextDisplay $po [_ "This flag causes combining characters to be ignored, which has the approximate effect of treating characters with diacritics the same as the corresponding character without any diacritic."];
24319    AppendToTextDisplay $po [_ "If, however, the text contains characters that intrinsically combine a base character and a diacritic, ignoring combining characters will not have the effect of equating characters with diacritics with their base character."];
24320    AppendToTextDisplay $po [_ "For example, in Unicode a lower case e with acute accent (\u00e9) may be encoded either as a single character U+00E9 or as a sequence of two characters, a plain e U+0065 and an acute accent U+0301. If the latter encoding is used, ignoring combining characters will have the effect of equating e with \u00e9, but if the former encoding is used, it will not."]
24321}
24322
24323proc ExplainZeroOneEqual {} {
24324    global HPWidth;
24325    global HPLines;
24326    global PopupList;
24327    if {[PopupDown ZeroOneEqual] ==1} {return}
24328    set po [CreateTextDisplay [_ "Zero or One"] $HPWidth $HPLines]
24329    BindKeys $po;
24330    set PopupList(ZeroOneEqual) $po;
24331    AppendToTextDisplay $po[_ "This expression matches zero or one occurences of the parenthesized group."];
24332}
24333
24334proc ExplainEndCaseDomain {} {
24335    global HPWidth;
24336    global HPLines;
24337    global PopupList;
24338    if {[PopupDown EndCaseDomain] ==1} {return}
24339    set po [CreateTextDisplay [_ "End Case Domain"] $HPWidth $HPLines]
24340    BindKeys $po;
24341    set PopupList(EndCaseDomain) $po;
24342    AppendToTextDisplay $po [_ "This flag terminates the effect of a preceding case-setting flag. "];
24343    AppendToTextDisplay $po [_ "For example, if the regular expression is \'^\\(.\\)\\(.*\\)\\(.\\)$\' (where backslashed parentheses are metacharacters delimiting capture groups) and the substitution expression is \'\\1\\U\\2\E\\3\' (where \\E is the end case domain flag), the result of the substitution is the input with every character of each line except for the first and the last made upper-case. The regular expression matches any string containing at least two characters and creates three groups, one consisting of the first character, one consisting of the last character, the third consisting of any intervening characters. The substitution copies the first and last characters with their case unchanged, but the case of the remainder is set to upper by the \'\\U\' flag. The \'\\E\' flag prevents the upcase string flag from affecting the last group."]
24344}
24345
24346proc ExplainQuoteFollowingMetachars {} {
24347    global HPWidth;
24348    global HPLines;
24349    global PopupList;
24350    if {[PopupDown QuoteFollowingMetachars] ==1} {return}
24351    set po [CreateTextDisplay [_ "Quote Following Metacharacters"] $HPWidth $HPLines]
24352    BindKeys $po;
24353    set PopupList(QuoteFollowingMetachars) $po;
24354    AppendToTextDisplay $po [_ "This flag causes subsequent characters in the pattern to be treated literally even if they would normally be metacharacters."];
24355    AppendToTextDisplay $po [_ "For example, in a matcher that treats a period as a metacharacter matching any single character, the pattern \'...\' will match any three characters."]
24356AppendToTextDisplay $po [_ "However, if this flag precedes the pattern, it will only match the sequence \'...\'."]
24357}
24358
24359proc ExplainDowncaseCharacter {} {
24360    global HPWidth;
24361    global HPLines;
24362    global PopupList;
24363    if {[PopupDown DowncaseFollowingCharacter] ==1} {return}
24364    set po [CreateTextDisplay [_ "Downcase Following Character"] $HPWidth $HPLines]
24365    BindKeys $po;
24366    set PopupList(DowncaseFollowingCharacter) $po;
24367    AppendToTextDisplay $po [_ "In a substitution this flag makes the case of the following character lower case if it has a lower-case counterpart."];
24368    AppendToTextDisplay $po [_ "For example, if the regular expression is \'^\\(.*\\)$\' (where backslashed parentheses are metacharacters delimiting capture groups) and the substitution expression is \'\\l\\1\', the result of the substitution is the input with the first character of each line made lower-case. The regular expression matches any string and creates a single group, which is copied in the substitution. The \'\\l\' flag causes the first character of the substitution to be lower-case."]
24369}
24370
24371proc ExplainUpcaseCharacter {} {
24372    global HPWidth;
24373    global HPLines;
24374    global PopupList;
24375    if {[PopupDown UpcaseFollowingCharacter] ==1} {return}
24376    set po [CreateTextDisplay [_ "Upcase Following Character"] $HPWidth $HPLines]
24377    BindKeys $po;
24378    set PopupList(UpcaseFollowingCharacter) $po;
24379    AppendToTextDisplay $po [_ "In a substitution this flag makes the case of the following character upper case if it has an upper-case counterpart."];
24380    AppendToTextDisplay $po [_ "For example, if the regular expression is \'^\\(.*\\)$\' (where backslashed parentheses are metacharacters delimiting capture groups) and the substitution expression is \'\\u\\1\', the result of the substitution is the input with the first character of each line made upper-case. The regular expression matches any string and creates a single group, which is copied in the substitution. The \'\\u\' flag causes the first character of the substitution to be upper-case."]
24381}
24382
24383proc ExplainUpcaseString {} {
24384    global HPWidth;
24385    global HPLines;
24386    global PopupList;
24387    if {[PopupDown UpcaseFollowingString] ==1} {return}
24388    set po [CreateTextDisplay [_ "Upcase Following String"] $HPWidth $HPLines]
24389    BindKeys $po;
24390    set PopupList(UpcaseFollowingString) $po;
24391    AppendToTextDisplay $po [_ "In a substitution this flag makes the case of the following string upper case where the characters have upper-case counterparts."];
24392    AppendToTextDisplay $po [_ "For example, if the regular expression is \'^\\(.\\)\\(.*\\)$\' (where backslashed parentheses are metacharacters delimiting capture groups) and the substitution expression is \'\\1\\U\\2\', the result of the substitution is the input with every character of each line except for the first made upper-case. The regular expression matches any string containing at least one character and creates two groups, one consisting of the first character, the other consisting of any following characters. The substitution copies the first character with its case unchanged, but the case of the remainder is set to upper by the \'\\U\' flag."]
24393}
24394
24395proc ExplainDowncaseString {} {
24396    global HPWidth;
24397    global HPLines;
24398    global PopupList;
24399    if {[PopupDown DowncaseFollowingString] ==1} {return}
24400    set po [CreateTextDisplay [_ "Downcase Following String"] $HPWidth $HPLines]
24401    BindKeys $po;
24402    set PopupList(DowncaseFollowingString) $po;
24403    AppendToTextDisplay $po [_ "In a substitution this flag makes the case of the following string lower case where the characters have lower-case counterparts."];
24404    AppendToTextDisplay $po [_ "For example, if the regular expression is \'^\\(.\\)\\(.*\\)$\' (where backslashed parentheses are metacharacters delimiting capture groups) and the substitution expression is \'\\1\\L\\2\', the result of the substitution is the input with every character of each line except for the first made lower-case. The regular expression matches any string containing at least one character and creates two groups, one consisting of the first character, the other consisting of any following characters. The substitution copies the first character with its case unchanged, but the case of the remainder is set to lower by the \'\\L\' flag."]
24405}
24406
24407proc ExplainSubNewline {} {
24408    global HPWidth;
24409    global HPLines;
24410    global PopupList;
24411    if {[PopupDown SubNewline] ==1} {return}
24412    set po [CreateTextDisplay [_ "Insert Line Break"] $HPWidth $HPLines]
24413    BindKeys $po;
24414    set PopupList(SubNewline) $po;
24415    AppendToTextDisplay $po [_ "This construct inserts a line break at the current position in the substitution."];
24416}
24417
24418proc ExplainShiftBackToMagic {} {
24419    global HPWidth;
24420    global HPLines;
24421    global PopupList;
24422    if {[PopupDown ShiftBackToMagic] ==1} {return}
24423    set po [CreateTextDisplay [_ "Shift Back To Magic"] $HPWidth $HPLines]
24424    BindKeys $po;
24425    set PopupList(ShiftBackToMagic) $po;
24426    AppendToTextDisplay $po [_ "This flag terminates the effect of a preceding Quote Following Metacharacters flag with the effect that subsequent characters in the pattern are treated as metacharacters if that is their normal behavior."];
24427    AppendToTextDisplay $po [_ "For example, in a matcher that treats a period as a metacharacter matching any single character, the pattern \'...\' will match any three characters."]
24428    AppendToTextDisplay $po [_ "If this pattern is preceded by the Quote Following Metacharacters flag, it will only match the string \'...\'."]
24429    AppendToTextDisplay $po [_ "The pattern \'...\\M...\\m...\' matches a string of nine characters consisting of any three characters followed by three periods followed by any three characters, assuming that \'\\M\' and \'\\m\' are the Quote Following Metacharacters and Shift Back To Magic flags."]
24430}
24431
24432proc ExplainBeginningOfFile {} {
24433    global HPWidth;
24434    global HPLines;
24435    global PopupList;
24436    if {[PopupDown BeginningOfFile] ==1} {return}
24437    set po [CreateTextDisplay [_ "Beginning of File"] $HPWidth $HPLines]
24438    BindKeys $po;
24439    set PopupList(BeginningOfFile) $po;
24440    AppendToTextDisplay $po [_ "This construct matches at the beginning of the file or, if used in a string match rather than an editor buffer, the beginning of the string."];
24441}
24442
24443proc ExplainEndOfFile {} {
24444    global HPWidth;
24445    global HPLines;
24446    global PopupList;
24447    if {[PopupDown EndOfFile] ==1} {return}
24448    set po [CreateTextDisplay [_ "End of File"] $HPWidth $HPLines]
24449    BindKeys $po;
24450    set PopupList(EndOfFile) $po;
24451    AppendToTextDisplay $po [_ "This construct matches at the end of the file or, if used in a string match rather than an editor buffer, the end of the string."];
24452}
24453
24454proc ExplainColumnSpecifier {} {
24455    global HPWidth;
24456    global HPLines;
24457    global PopupList;
24458    if {[PopupDown ColumnSpecifier] ==1} {return}
24459    set po [CreateTextDisplay [_ "Match in Specified Column"] $HPWidth $HPLines]
24460    BindKeys $po;
24461    set PopupList(ColumnSpecifier) $po;
24462    AppendToTextDisplay $po [_ "The following item matches only if it is located in the specified column, or, in string matches, at the specified character offset."];
24463}
24464
24465proc ExplainPreColumnSpecifier {} {
24466    global HPWidth;
24467    global HPLines;
24468    global PopupList;
24469    if {[PopupDown PreColumnSpecifier] ==1} {return}
24470    set po [CreateTextDisplay [_ "Match Prior to the Specified Column"] $HPWidth $HPLines]
24471    BindKeys $po;
24472    set PopupList(PreColumnSpecifier) $po;
24473    AppendToTextDisplay $po [_ "The following item matches only if it is located before the specified column, or, in string matches, the specified character offset."];
24474}
24475
24476proc ExplainPostColumnSpecifier {} {
24477    global HPWidth;
24478    global HPLines;
24479    global PopupList;
24480    if {[PopupDown PostColumnSpecifier] ==1} {return}
24481    set po [CreateTextDisplay [_ "Match Following the Specified Column"] $HPWidth $HPLines]
24482    BindKeys $po;
24483    set PopupList(PostColumnSpecifier) $po;
24484    AppendToTextDisplay $po [_ "The following item matches only if it is located after the specified column, or, in string matches, the specified character offset."];
24485}
24486
24487proc ExplainAmpersandAnd {} {
24488    global HPWidth;
24489    global HPLines;
24490    global PopupList;
24491    if {[PopupDown AmpersandAnd] ==1} {return}
24492    set po [CreateTextDisplay [_ "And"] $HPWidth $HPLines]
24493    BindKeys $po;
24494    set PopupList(AmpersandAnd) $po;
24495    AppendToTextDisplay $po [_ "This construct matches if both of the conjuncts independently match ."];
24496    AppendToTextDisplay $po [_ "For example, the expression \'.*dog\\&.*cat\' matches \'dogcat\', \'dogncat\', and \'catndog\' but not \'dog\' or \'digncat.\'"];
24497    AppendToTextDisplay $po [_ "The expression \'dog\\&cat\' matches only the null string because there is no non-null string that matches both \'dog\' and \'cat\' exactly."]
24498    AppendToTextDisplay $po [_ "The expression \'.*dog\\&cat\' matches \'catdog\' and \'catndog\' but not \'dogcat\' or \'dogncat\'."];
24499}
24500
24501proc ExplainHexWideCharCurly {} {
24502    global HPWidth;
24503    global HPLines;
24504    global PopupList;
24505    if {[PopupDown HexWideCharCurly] ==1} {return}
24506    set po [CreateTextDisplay [_ "Hexadecimal Wide Character Format \\x\{abcd\}"] $HPWidth $HPLines]
24507    BindKeys $po;
24508    set PopupList(HexWideCharCurly) $po;
24509    AppendToTextDisplay $po [_ "This notation represents a Unicode character by its hexadecimal code."];
24510    AppendToTextDisplay $po [_ " For example, \\x\{0561\} represents the character U+0561 \u0561 ARMENIAN SMALL LETTER AYB, decimal 1377."];
24511}
24512
24513proc ExplainSingleOctet {} {
24514    global HPWidth;
24515    global HPLines;
24516    global PopupList;
24517    if {[PopupDown SingleOctet] ==1} {return}
24518    set po [CreateTextDisplay [_ "SingleOctet"] $HPWidth $HPLines]
24519    BindKeys $po;
24520    set PopupList(SingleOctet) $po;
24521    AppendToTextDisplay $po [_ "This matches a single octet (byte) whether or not it constitutes an entire character. If the internal representation is UTF-8, as it is in Perl, then the character \u0065 will match \\C since its UTF-8 encoding is 0x65. The character \u0565 will match \\C\\C since its UTF-8 encoding is 0xD5 0xA1. The character \u53CB will match \\C\\C\\C since its UTF-8 encoding is 0xE5 0x8F 0x8B. If the internal representation is UTF-16, all characters will match \\C\\C since all occupy two bytes. Similarly, if the internal representation is UTF-32, all characters will match \\C\\C\\C\\C since all characters occupy four bytes."];
24522}
24523
24524if {0} {
24525#Template
24526proc ExplainXX {} {
24527    global HPWidth;
24528    global HPLines;
24529    global PopupList;
24530    if {[PopupDown XX] ==1} {return}
24531    set po [CreateTextDisplay [_ "XX"] $HPWidth $HPLines]
24532    BindKeys $po;
24533    set PopupList(XX) $po;
24534    AppendToTextDisplay $po [_ ""];
24535}
24536}
24537
24538#This provides an addition to the default methods of the Scrollbar
24539#widget. The default method, bound to <B1>, #increments or decrements
24540#the value by the resolution, by default 1. If you want a larger
24541#increment, you can use a larger resolution, but sometimes it is
24542#convenient to have a finer resolutio available while also being
24543#able to move in larger increments. A solution is to bind to
24544#<B3>, or some other event if you wish, a larger movement.
24545#This procedure moves by the specified multiplier k times
24546#the resolution of the Scrollbar.
24547
24548proc ScrollbarMoveBigIncrement {w f x y} {
24549    set part [$w identify $x $y]
24550    switch -exact -- $part {
24551	trough1 {
24552	    set dir -1;
24553	}
24554	arrow1 {
24555	    set dir -1;
24556	}
24557	trough2 {
24558	    set dir  1;
24559	}
24560	arrow2 {
24561	    set dir  1;
24562	}
24563	default {
24564	    return ;
24565	}
24566    }
24567    set CurrentFraction [lindex [$w get] 0]
24568    set NewFraction [expr $CurrentFraction + ($dir * $f)]
24569    eval [concat [$w cget -command] moveto $NewFraction]
24570}
24571
24572
24573option add *proginfo.*Background $::ColorSpecs(ProgramInfoPopup,Background)
24574option add *proginfo.*Foreground $::ColorSpecs(ProgramInfoPopup,Foreground)
24575
24576proc PopupProgramInfo {} {
24577    global ColorSpecs;
24578    if {[winfo exists .proginfo]} {
24579	destroy .proginfo;
24580	return
24581    }
24582    toplevel .proginfo -borderwidth 4 -relief raised
24583    wm title .proginfo [_ "Program Information"];
24584    after idle {
24585	update idletasks
24586	set xmax [winfo screenwidth .proginfo]
24587	set ymax [winfo screenheight .proginfo]
24588	set x0 [expr int(2.4 * ($xmax -[winfo reqwidth .proginfo])/3.0)];
24589	set y0 [expr int(2.3 * ($ymax -[winfo reqheight .proginfo])/3.0)];
24590	wm geometry .proginfo "+$x0+$y0";
24591    }
24592    set txt [format [_ "Properties of %s"] [NameProgram]]
24593    append txt [format "\n\[%s\]" $::ProgramInfo($::program,version)]
24594    label .proginfo.title -text $txt
24595    button .proginfo.dismiss -text [_ "Dismiss"] -command {destroy .proginfo} -anchor e
24596    pack .proginfo.title -side top -expand 1 -fill x
24597
24598    if {![FeaturesUnSetP $::program $::InterfaceLocale] } {
24599	if {$::Features(unicodefull,$::program,$::InterfaceLocale)} {
24600	    set txt [_ "Supports full Unicode in this locale."];
24601	} elseif {$::Features(unicodebmp,$::program,$::InterfaceLocale)} {
24602	    set txt [_ "Supports just the Basic Multilingual Plane of Unicode in this locale."];
24603	} else {
24604	    set txt [_ "Does not support Unicode in this locale."];
24605	}
24606	label .proginfo.unicode -text $txt -anchor w
24607
24608	if {($::Features(dollar,$::program,$::InterfaceLocale) == 0) && \
24609		($::Features(AbsoluteEndOfString,$::program,$::InterfaceLocale))} {
24610	    set txt [_ "Treats newline as an ordinary character."];
24611	} else {
24612	    set txt [_ "Does not treat newline as an ordinary character"];
24613	}
24614	label .proginfo.newlineordinary -text $txt -anchor w
24615
24616	if {[info exists ::ExecCmd($::program,match)]} {
24617	    if {[info exists ::ExecCmd($::program,sub)]} {
24618		set txt [_ "Is capable of both matching and substitution."];
24619	    } else {
24620		set txt [_ "Is capable of matching only."];
24621	    }
24622	} else {
24623	    set txt [_ "Is capable of substitution only."];
24624	}
24625	label .proginfo.matchsub -text $txt -anchor w
24626
24627	pack .proginfo.unicode -side top  -expand 1 -fill x -padx 3 -pady 2
24628	pack .proginfo.newlineordinary -side top  -expand 1 -fill x -padx 3 -pady 2
24629	pack .proginfo.matchsub -side top  -expand 1 -fill x -padx 3 -pady 2
24630    } else {
24631	label .proginfo.whynot -text [_ "Feature testing is disabled."]
24632	pack .proginfo.whynot -side top -expand 1 -fill x
24633    }
24634    pack .proginfo.dismiss -side bottom -anchor e -expand 1 -fill y -padx 3 -pady 6;
24635    catch {.proginfo.title configure -font -*-Courier-bold-o-normal--*-140-*}
24636}
24637
24638#If the program info popup exists, recreate it so that it will be up to date.
24639proc RefreshProginfo {} {
24640    if {[winfo exists .proginfo]} {
24641	destroy .proginfo;
24642	PopupProgramInfo;
24643    }
24644}
24645
24646proc WriteExecutionInfo {ExpList CLAndProg} {
24647    set Regexp [lindex $ExpList 0];
24648    set Subexp "";
24649    set DaughterProgram "";
24650    if {[llength $ExpList] > 1} {
24651	set Subexp [lindex $ExpList 1];
24652    }
24653    set CommandLine [lindex $CLAndProg 0]
24654    if {[llength $CLAndProg] > 1} {
24655	set DaughterProgram [lindex $CLAndProg 1];
24656    }
24657
24658    #Get a file to write it to
24659    set ExecInfoSaveFile [tk_getSaveFile -initialfile \
24660			      [format [_ "%sCommandInfo"] $::Program]]
24661    if {[ string equal $ExecInfoSaveFile ""]} {
24662	ShowMessage [_ "File selection cancelled."]
24663	return ;
24664    } else {
24665	if { [catch {open $ExecInfoSaveFile "w+"} ExecInfoSaveHandle]} {
24666	    ShowMessage [format [_ "Unable to open file %s to save command information"] \
24667			     [MinimizeFileName $ExecInfoSaveFile]];
24668	    return ;
24669	}
24670    }
24671
24672    #Write out the info
24673    puts $ExecInfoSaveHandle [format [_ "Generated by Redet using %s %s"] \
24674			 $::Program  [clock format [clock seconds]]];
24675    puts $ExecInfoSaveHandle [format [_ "Command Line\n\t%s"] $CommandLine]
24676    puts $ExecInfoSaveHandle [format [_ "Regular Expression:\n\t%s"] $Regexp]
24677    if {![string equal $Subexp ""]} {
24678	puts $ExecInfoSaveHandle [format [_ "Substitution Expression:\n\t%s"] $Subexp]
24679    }
24680    if {![string equal $DaughterProgram ""]} {
24681	puts $ExecInfoSaveHandle [format [_ "Daughter Program:\n------------------\n%s"] \
24682				      $DaughterProgram]
24683    }
24684    close $ExecInfoSaveHandle;
24685    ShowMessage [format [_ "Command information saved in file %s."] [MinimizeFileName $ExecInfoSaveFile]]
24686}
24687
24688proc SaveCommandInfo {} {
24689    set ::ExecutionFlag CommandInfo;
24690    ExecuteRegexp;
24691    set ::ExecutionFlag Normal;
24692}
24693
24694proc ShowCommandLine {} {
24695    set ::ExecutionFlag CommandLine;
24696    ExecuteRegexp;
24697    set ::ExecutionFlag Normal;
24698}
24699
24700proc GetHomeDir {} {
24701    set cwd [pwd];
24702    cd;
24703    set hd [pwd];
24704    cd $cwd;
24705    return $hd;
24706}
24707
24708set CustomCharacterChartFileNameList "";
24709proc StoreCustomCharacterChartFileName {fn} {
24710    lappend ::CustomCharacterChartFileNameList $fn;
24711}
24712
24713set CustomCharacterChartDataList "";
24714proc StoreCustomCharacterChartInPlace {dl} {
24715    lappend ::CustomCharacterChartDataList $dl;
24716}
24717
24718#Initialization file stuff
24719
24720#This creates a procedure for setting the color of each combination of
24721#object and feature. The procedure validates the color specification, so
24722#invalid color specifications are trapped in the slave interpreter.
24723proc DefineColorSettingProcs {} {
24724    global ColorProcList;
24725    foreach cs [array names ::ColorSpecs] {
24726	set csl [split $cs ","]
24727	set obj   [lindex $csl 0]
24728	set which [lindex $csl 1]
24729	set procname [format "Set%s%sColor" $obj $which]
24730	lappend ColorProcList $procname
24731	eval [list "proc" $procname \
24732		   \
24733		  "\{cs\}" \
24734		  "if \{!\[::validcolor::IsColorSpecQ \$cs\]\} \{
24735		  puts \[format \[_ \"\\\"%s\\\" is not a valid color specification.\"\] \$cs\]
24736		  return;
24737		 \}
24738		  set ::ColorSpecs($obj,$which) \$cs"]
24739    }
24740}
24741
24742proc SetStandardLayoutP {b} {
24743    set ::StandardConfigurationP [Boolean $b];
24744}
24745
24746proc SetUseScrollbarsP {b} {
24747    set ::UseScrollbarsP [Boolean $b];
24748}
24749
24750proc SetBalloonHelpShowP {b} {
24751    set ::BalloonHelpP [Boolean $b];
24752}
24753
24754proc SetFocusFollowsMouseP {b} {
24755    set ::FocusFollowsMouseP [Boolean $b];
24756    if {$::FocusFollowsMouseP} {
24757	tk_focusFollowsMouse;
24758    }
24759}
24760
24761proc SetHistoryIncludeProgramP {b} {
24762    set hist::HistoryShowProgP [Boolean $b];
24763}
24764
24765proc SelectBrowser {s} {
24766    set ::Browser $s;
24767}
24768
24769proc SetHistoryCentralP {b} {
24770    set hist::LocalP [Boolean $b];
24771}
24772
24773proc SetAutoClearRegexpP {b} {
24774    set ::AutoClearRegexpP [Boolean $b];
24775}
24776
24777proc SetOutputOnlyChangedLinesP {b} {
24778    set ::OutputOnlyChangedLinesP [Boolean $b];
24779}
24780
24781proc SetUserClassesEnabledP {b} {
24782   set ::UserClassesEnabledP [Boolean $b];
24783}
24784
24785proc SetLeftUserClassIntersectionDelimiter {s} {
24786    set ::LeftUserIntDelimiter [lindex [split $s] 0];
24787}
24788
24789proc SetRightUserClassIntersectionDelimiter {s} {
24790    set ::RightUserIntDelimiter [lindex [split $s] 0];
24791}
24792
24793#Commands for setting program-specific parameters
24794
24795proc SetAgrepCaseInsensitiveP {b} {
24796    set ::ProgramInfo(agrep,CaseInsensitiveP) [Boolean $b];
24797}
24798
24799proc SetAgrepBestResultsP {b} {
24800    set ::ProgramInfo(agrep,BestResults) [Boolean $b];
24801}
24802
24803proc SetAgrepErrorLimit {s} {
24804    set ::ProgramInfo(agrep,ErrorLimit) $s;
24805}
24806
24807proc SetAgrepDeletionCost {s} {
24808    set ::ProgramInfo(agrep,DeletionCost) $s;
24809}
24810
24811proc SetAgrepInsertionCost {s} {
24812    set ::ProgramInfo(agrep,InsertionCost) $s;
24813}
24814
24815proc SetAgrepSubstitutionCost {s} {
24816    set ::ProgramInfo(agrep,SubstitutionCost) $s;
24817}
24818
24819proc SetArenaCaseInsensitiveP {b} {
24820    set ::ProgramInfo(arena,CaseInsensitiveP) [Boolean $b];
24821}
24822
24823proc SetArenaVerboseP {b} {
24824    set ::ProgramInfo(arena,VerboseP) [Boolean $b];
24825}
24826
24827proc SetBashExtendedP {b} {
24828    set ::ProgramInfo(bash,ExtendedP) [Boolean $b];
24829}
24830
24831proc SetBusyBoxEgrepCaseInsensitiveP {b} {
24832    set ::ProgramInfo(BusyBoxEgrep,CaseInsensitiveP) [Boolean $b];
24833}
24834
24835proc SetBusyBoxEgrepComplementP {b} {
24836    set ::ProgramInfo(BusyBoxEgrep,Complement) [Boolean $b];
24837}
24838
24839proc SetCgrepCaseInsensitiveP {b} {
24840    set ::ProgramInfo(cgrep,CaseInsensitiveP) [Boolean $b];
24841}
24842
24843proc SetCgrepComplementP {b} {
24844    set ::ProgramInfo(cgrep,Complement) [Boolean $b];
24845}
24846
24847proc SetCgrepExtendedP {b} {
24848    set ::ProgramInfo(cgrep,ExtendedP) [Boolean $b];
24849}
24850
24851proc SetCgrepTotalCost {s} {
24852    set ::ProgramInfo(cgrep,TotalCost) $s;
24853}
24854
24855proc SetCgrepInsertionCost {s} {
24856    set ::ProgramInfo(cgrep,InsertionCost) $s;
24857}
24858
24859proc SetCgrepDeletionCost {s} {
24860    set ::ProgramInfo(cgrep,DeletionCost) $s;
24861}
24862
24863proc SetCgrepSubstitutionCost {s} {
24864    set ::ProgramInfo(cgrep,SubstitutionCost) $s;
24865}
24866
24867proc SetEgrepCaseInsensitiveP {b} {
24868    set ::ProgramInfo(egrep,CaseInsensitiveP) [Boolean $b];
24869}
24870
24871proc SetEgrepEmitMatchOnlyP {b} {
24872    set ::ProgramInfo(egrep,EmitMatchOnly) [Boolean $b];
24873}
24874
24875proc SetEgrepComplementP {b} {
24876    set ::ProgramInfo(egrep,Complement) [Boolean $b];
24877}
24878
24879proc SetEmacsFoldCaseMatchP {b} {
24880    set ::ProgramInfo(emacs,FoldCaseMatchP) [Boolean $b];
24881}
24882
24883proc SetEmacsFoldCaseReplaceP {b} {
24884    set ::ProgramInfo(emacs,FoldCaseReplaceP) [Boolean $b];
24885}
24886
24887proc SetFgrepCaseInsensitiveP {b} {
24888    set ::ProgramInfo(fgrep,CaseInsensitiveP) [Boolean $b];
24889}
24890
24891proc SetFgrepEmitMatchOnlyP {b} {
24892    set ::ProgramInfo(fgrep,EmitMatchOnly) [Boolean $b];
24893}
24894
24895proc SetFgrepComplementP {b} {
24896    set ::ProgramInfo(fgrep,Complement) [Boolean $b];
24897}
24898
24899proc SetGawkCaseInsensitiveP {b} {
24900    set ::ProgramInfo(gawk,CaseInsensitiveP) [Boolean $b];
24901}
24902
24903proc SetGawkIntervalExpressionsP {b} {
24904    set ::ProgramInfo(gawk,IntervalExpressions) [Boolean $b];
24905}
24906
24907proc SetGawkNotation {s} {
24908    set ::ProgramInfo(gawk,Notation) $s;
24909}
24910
24911proc SetGlarkCaseInsensitiveP {b} {
24912    set ::ProgramInfo(glark,CaseInsensitiveP) [Boolean $b];
24913}
24914
24915proc SetGlarkEmitMatchOnlyP {b} {
24916    set ::ProgramInfo(glark,EmitMatchOnly) [Boolean $b];
24917}
24918
24919proc SetGlarkComplementP {b} {
24920    set ::ProgramInfo(glark,Complement [Boolean $b];
24921}
24922
24923proc SetGlarkMatchEntireLineP {b} {
24924    set ::ProgramInfo(glark,MatchEntireLineP) [Boolean $b];
24925}
24926
24927proc SetGrepCaseInsensitiveP {b} {
24928    set ::ProgramInfo(grep,CaseInsensitiveP) [Boolean $b];
24929}
24930
24931proc SetGrepEmitMatchOnlyP {b} {
24932    set ::ProgramInfo(grep,EmitMatchOnly) [Boolean $b];
24933}
24934
24935proc SetGrepComplementP {b} {
24936    set ::ProgramInfo(grep,Complement) [Boolean $b];
24937}
24938
24939proc SetGrepNotation {s} {
24940    set ::ProgramInfo(grep,Notation) $s;
24941}
24942
24943proc SetIciCaseInsensitiveP {b} {
24944    set ::ProgramInfo(ici,CaseInsensitiveP) [Boolean $b];
24945}
24946
24947proc SetIciVerboseP {b} {
24948    set ::ProgramInfo(ici,VerboseP) [Boolean $b];
24949}
24950
24951proc SetIciExpandedP {b} {
24952    set ::ProgramInfo(ici,VerboseP) [Boolean $b];
24953}
24954
24955proc SetJavaCanonEQP {b} {
24956    set ::ProgramInfo(java,CanonEQ) [Boolean $b];
24957}
24958
24959proc SetJavaCaseInsensitiveP {b} {
24960    set ::ProgramInfo(java,CaseInsensitiveP) [Boolean $b];
24961}
24962
24963proc SetJavaUnicodeCaseP {b} {
24964    set ::ProgramInfo(java,UnicodeCase) [Boolean $b];
24965}
24966
24967proc SetJgrepCaseInsensitiveP {b} {
24968    set ::ProgramInfo(jgrep,CaseInsensitiveP) [Boolean $b];
24969}
24970
24971proc SetMysqlRegexpP {b} {
24972    set ::ProgramInfo(mysql,RegexpP) [Boolean $b];
24973}
24974
24975proc SetNrgrepCaseInsensitiveP {b} {
24976    set ::ProgramInfo(nrgrep,CaseInsensitiveP) [Boolean $b];
24977}
24978
24979proc SetNrgrepComplementP {b} {
24980    set ::ProgramInfo(nrgrep,ComplementP) [Boolean $b];
24981}
24982
24983proc SetNrgrepTotalCost {s} {
24984    set ::ProgramInfo(nrgrep,TotalCost) $s;
24985}
24986
24987proc SetNrgrepInsertionsP {b} {
24988    set ::ProgramInfo(nrgrep,InsertionsP) [Boolean $b];
24989}
24990
24991proc SetNrgrepDeletionsP {b} {
24992    set ::ProgramInfo(nrgrep,DeletionsP) [Boolean $b];
24993}
24994
24995proc SetNrgrepSubstitutionsP {b} {
24996    set ::ProgramInfo(nrgrep,SubstitutionsP) [Boolean $b];
24997}
24998
24999proc SetNrgrepTranspositionsP {b} {
25000    set ::ProgramInfo(nrgrep,TranspositionsP) [Boolean $b];
25001}
25002
25003proc SetNumgrepOutputNumberByNumberP {b} {
25004    set ::ProgramInfo(numgrep,OutputNumberByNumberP) [Boolean $b];
25005}
25006
25007proc SetPerlUnicodeLocaleDependentP {b} {
25008    set ::ProgramInfo(perl,UnicodeLocaleDependentP) [Boolean $b];
25009}
25010
25011proc SetPatmatchResidueType {s} {
25012    set ::ProgramInfo(patmatch,ResidueType) $s;
25013}
25014
25015proc SetPatmatchMismatchNumber {s} {
25016    set ::ProgramInfo(patmatch,MismatchNumber) $s;
25017}
25018
25019proc SetPatmatchMismatchTypes {s} {
25020    set ::ProgramInfo(patmatch,MismatchTypes) $s;
25021}
25022
25023proc SetPcregrepCaseInsensitiveP {b} {
25024    set ::ProgramInfo(pcregrep,CaseInsensitiveP) [Boolean $b];
25025}
25026
25027proc SetPcregrepEmitMatchOnlyP {b} {
25028    set ::ProgramInfo(pcregrep,EmitMatchOnly) [Boolean $b];
25029}
25030
25031proc SetPcregrepComplementP {b} {
25032    set ::ProgramInfo(pcregrep,Complement) [Boolean $b];
25033}
25034
25035proc SetPythonRawStringP {b} {
25036    set ::ProgramInfo(python,RawStringP) [Boolean $b];
25037}
25038
25039proc SetSedExtendedRegexpP {b} {
25040    set ::ProgramInfo(sed,ExtendedRegexp) [Boolean $b];
25041}
25042
25043proc SetSgrepCaseInsensitiveP {b} {
25044    set ::ProgramInfo(sgrep,CaseInsensitiveP) [Boolean $b];
25045}
25046
25047proc SetSsedPOSIXP {b} {
25048    set ::ProgramInfo(ssed,POSIX) [Boolean $b];
25049}
25050
25051proc SetSsedRegexpType {s} {
25052    if {[string match -nocase basic $s]} {
25053	set ::ProgramInfo(ssed,RegexpType) basic
25054    } elseif {[string match -nocase extended $s]} {
25055	set ::ProgramInfo(ssed,RegexpType) extended
25056    } elseif {[string match -nocase perl $s]} {
25057	set ::ProgramInfo(ssed,RegexpType) perl
25058    } else {
25059	ShowMessage [format [_ "%s is not a possible ssed regular expression type"] $s]
25060    }
25061}
25062
25063proc SetTclCaseInsensitiveP {b} {
25064    set ::ProgramInfo(tcl,CaseInsensitiveP) [Boolean $b];
25065}
25066
25067proc SetTclEmitMatchOnlyP {b} {
25068    set ::ProgramInfo(tcl,EmitMatchOnlyP) [Boolean $b];
25069}
25070
25071proc SetTclExpandedP {b} {
25072    set ::ProgramInfo(tcl,ExpandedP) [Boolean $b];
25073}
25074
25075proc SetTrComplementP {b} {
25076    set ::ProgramInfo(tr,Complement) [Boolean $b];
25077}
25078
25079proc SetTrSqueezeP {b} {
25080    set ::ProgramInfo(tr,Squeeze) [Boolean $b];
25081}
25082
25083proc SetTrTruncateP {b} {
25084    set ::ProgramInfo(tr,Truncate) [Boolean $b];
25085}
25086
25087proc SetVimCaseInsensitiveP {b} {
25088    set ::ProgramInfo(vim,CaseInsensitiveP) [Boolean $b];
25089}
25090
25091proc SetVimSmartCaseP {b} {
25092    set ::ProgramInfo(vim,SmartCaseP) [Boolean $b];
25093}
25094
25095proc SetVimSubstitutionGlobalP {b} {
25096    set ::ProgramInfo(vim,SubstitutionGlobalP) [Boolean $b];
25097}
25098
25099proc SetZshExtendedGlobP {b} {
25100    set ::ProgramInfo(zsh,ExtendedGlobP) [Boolean $b];
25101}
25102
25103proc SetZshKornQuantifiersP {b} {
25104    set ::ProgramInfo(zsh,KornQuantifiersP) [Boolean $b];
25105}
25106
25107proc SetShellItemLimit {s} {
25108    if {![string is integer -strict $s]} {
25109	return ;
25110    }
25111    if {$s < 1} {
25112	return
25113    }
25114    set ::ShellItemLimit $s;
25115}
25116
25117#Returns a list of init file commands representing the current user-defined palette entries.
25118proc SavePaletteEntries {} {
25119    set cl [list]
25120    foreach pe [array names ::UserPalette] {
25121	set pel [split $pe ","]
25122	set EntryName [lindex $pel 1];
25123	if {$EntryName == 0} {continue}
25124	set WhichProgram [lindex $pel 0];
25125	set e $::UserPalette($WhichProgram,$EntryName);
25126	set Body [list [lindex $e 0]]
25127	set Etext [lindex $e 1]
25128	lappend cl [format "AddUserPaletteEntry %s %s %s %s" \
25129			$WhichProgram $EntryName $Body $Etext]
25130    }
25131    return [lsort $cl];
25132}
25133
25134
25135#Returns a list of init file commands representing the current color settings.
25136proc SaveColorSettings {} {
25137    set cl [list]
25138    foreach cs [array names ::ColorSpecs] {
25139	set csl [split $cs ","]
25140	set obj   [lindex $csl 0]
25141	set which [lindex $csl 1]
25142	set ps $::ColorSpecs($cs)
25143	if {[string index $ps 0] == "\#"} {
25144	    set ps \\$::ColorSpecs($cs)
25145	} else {
25146	    set ps [list $ps];
25147	}
25148	lappend cl [format "%s%sColor %s" $obj $which $ps]
25149    }
25150    return [lsort $cl];
25151}
25152
25153#Check whether the argument represents a Boolean value
25154#and interpret it if it is.
25155proc Boolean {s} {
25156     switch -regexp $s {
25157	 1	{return 1}
25158	 T.*	{return 1}
25159	 t.*	{return 1}
25160	 Y.*	{return 1}
25161	 y.*	{return 1}
25162	 ok	{return 1}
25163	 on	{return 1}
25164	 0 	{return 0}
25165	 F.*	{return 0}
25166	 f.*	{return 0}
25167	 N.*	{return 0}
25168	 n.*	{return 0}
25169	 off	{return 0}
25170	 default {error}
25171     }
25172}
25173
25174proc GetInitCommands {} {
25175    # We want a fresh interpreter so that we don't
25176    # list any commands defined in a user's init file.
25177    if { [interp exists init]} {
25178	interp delete init
25179    }
25180    InitFileSetup;
25181    set n 0
25182    #We rely on the fact that all builtin commands have lower-case
25183    #case names to separate the commands we provide from the builtins.
25184    return [interp eval init {lsort [info commands \[A-Z\]*]}]
25185}
25186
25187proc SaveInitCommands {} {
25188    set SaveFile [tk_getSaveFile -initialfile [_ "InitFileCommands"]];
25189    if {[string equal $SaveFile ""]} {
25190	return ;
25191    } else {
25192        if { [catch {open $SaveFile "w+"} fh] != 0} {
25193	    ShowMessage [format \
25194		     [_ "Unable to open file %s in which to save class definitions."] \
25195			     [MinimizeFileName $SaveFile]];
25196	    return ;
25197        }
25198    }
25199    set n 0;
25200    foreach l [GetInitCommands] {
25201	incr n;
25202	puts $fh [format "\[%03d\] %s" $n $l]
25203    }
25204    close $fh;
25205}
25206
25207proc GetInitTclCommands {} {
25208    # We want a fresh interpreter so that we don't
25209    # list any commands defined in a user's init file.
25210    if { [interp exists init]} {
25211	interp delete init
25212    }
25213    interp create -safe -- init
25214    set n 0
25215    #We rely on the fact that all builtin commands have lower-case
25216    #case names to separate the commands we provide from the builtins.
25217    return [interp eval init {lsort [info commands \[a-z\]*]}]
25218}
25219
25220proc PopupInitCommandList {} {
25221    if {[PopupDown InitCommandList] ==1} {return}
25222    set po  [CreateTextDisplay [_ "Redet-Specific Initialization File Commands"] 65 10];
25223    set ::PopupList(InitCommandList) $po;
25224    BindKeys $po;
25225    set n 0;
25226    foreach l [GetInitCommands] {
25227	incr n;
25228	AppendToTextDisplay $po [format "\[%03d\] %s\n" $n $l];
25229    }
25230}
25231
25232proc SaveInitTclCommands {} {
25233    set SaveFile [tk_getSaveFile -initialfile [_ "InitFileTclCommands"]];
25234    if {[string equal $SaveFile ""]} {
25235	return ;
25236    } else {
25237        if { [catch {open $SaveFile "w+"} fh] != 0} {
25238	    ShowMessage [format \
25239		     [_ "Unable to open file %s in which to save Tcl commands."] \
25240			     [MinimizeFileName $SaveFile]];
25241	    return ;
25242        }
25243    }
25244    set n 0;
25245    foreach l [GetInitTclCommands] {
25246	incr n;
25247	puts $fh [format "\[%03d\] %s" $n $l]
25248    }
25249    close $fh;
25250}
25251
25252proc PopupInitTclCommandList {} {
25253    if {[PopupDown InitTclCommandList] ==1} {return}
25254    set po  [CreateTextDisplay [_ "Initialization File Tcl Commands"] 65 12];
25255    set ::PopupList(InitTclCommandList) $po;
25256    BindKeys $po;
25257    set n 0;
25258    foreach l [GetInitTclCommands] {
25259	incr n;
25260	AppendToTextDisplay $po [format "\[%03d\] %s\n" $n $l];
25261    }
25262}
25263
25264proc SaveMiscellaneousSettings {} {
25265    set MiscellaneousInitCommandList \
25266	[list \
25267	     [SlaveName SetTestDataEncoding] $::Pars(TestDataEncoding)\
25268	     [SlaveName SetComparisonDataEncoding] $::Pars(ComparisonDataEncoding)\
25269	     [SlaveName SetResultEncoding] $::Pars(ResultEncoding)\
25270	     [SlaveName SetPaletteHeightLimit] $::PaletteHeightLimit\
25271	     [SlaveName SetUserClassesEnabledP] $::UserClassesEnabledP\
25272	     [SlaveName SetLeftUserClassIntersectionDelimiter] $::LeftUserIntDelimiter\
25273	     [SlaveName SetRightUserClassIntersectionDelimiter] $::RightUserIntDelimiter\
25274	     [SlaveName SetAutoClearRegexpP] $::AutoClearRegexpP \
25275	     [SlaveName SelectBrowser] $::DefaultBrowser\
25276	     [SlaveName SetFocusFollowsMouseP] $::FocusFollowsMouseP \
25277	     [SlaveName SetHistoryCentralP] $hist::LocalP\
25278	     [SlaveName SetHistoryIncludeProgramP] $hist::HistoryShowProgP\
25279	     [SlaveName SetOutputOnlyChangedLinesP] $::OutputOnlyChangedLinesP\
25280	     [SlaveName SelectProgramInitFile] $::program \
25281	     [SlaveName SetStandardLayoutP] $::StandardConfigurationP\
25282	     [SlaveName SubstitutionModeInitFileP] $::DoSubstitutionsP\
25283	     [SlaveName SetUseScrollbarsP] $::UseScrollbarsP\
25284	     [SlaveName SetBalloonHelpShowP]			$::BalloonHelpP \
25285	     [SlaveName SetDisplayConsonantChartColumnLabelsP]	$::DisplayConsonantChartColumnLabelsP \
25286	     [SlaveName SetDisplayConsonantChartRowLabelsP]	$::DisplayConsonantChartRowLabelsP \
25287	     [SlaveName SetDisplayVowelChartColumnLabelsP]	$::DisplayVowelChartColumnLabelsP \
25288	     [SlaveName SetDisplayVowelChartRowLabelsP]		$::DisplayVowelChartRowLabelsP \
25289	     [SlaveName SetUseScrollbarsP]			$::UseScrollbarsP \
25290	     [SlaveName SetAgrepBestResultsP]	$::ProgramInfo(agrep,BestResults) \
25291	     [SlaveName SetAgrepCaseInsensitiveP]	$::ProgramInfo(agrep,CaseInsensitiveP) \
25292	     [SlaveName SetAgrepErrorLimit]	$::ProgramInfo(agrep,TotalCost) \
25293	     [SlaveName SetAgrepDeletionCost]	$::ProgramInfo(agrep,DeletionCost) \
25294	     [SlaveName SetAgrepInsertionCost]	$::ProgramInfo(agrep,InsertionCost) \
25295	     [SlaveName SetAgrepSubstitutionCost]	$::ProgramInfo(agrep,SubstitutionCost) \
25296	     [SlaveName SetArenaCaseInsensitiveP]	$::ProgramInfo(arena,CaseInsensitiveP) \
25297	     [SlaveName SetArenaVerboseP]	$::ProgramInfo(arena,VerboseP) \
25298	     [SlaveName SetBashExtendedP]	$::ProgramInfo(bash,ExtendedP) \
25299	     [SlaveName SetBusyBoxEgrepCaseInsensitiveP]	$::ProgramInfo(BusyBoxEgrep,CaseInsensitiveP) \
25300	     [SlaveName SetBusyBoxEgrepComplementP]	$::ProgramInfo(BusyBoxEgrep,Complement) \
25301	     [SlaveName SetCgrepCaseInsensitiveP]	$::ProgramInfo(cgrep,CaseInsensitiveP) \
25302	     [SlaveName SetCgrepComplementP]	$::ProgramInfo(cgrep,Complement) \
25303	     [SlaveName SetCgrepExtendedP]	$::ProgramInfo(cgrep,ExtendedP) \
25304	     [SlaveName SetCgrepTotalCost]	$::ProgramInfo(cgrep,TotalCost) \
25305	     [SlaveName SetCgrepInsertionCost]	$::ProgramInfo(cgrep,InsertionCost) \
25306	     [SlaveName SetCgrepDeletionCost]	$::ProgramInfo(cgrep,DeletionCost) \
25307	     [SlaveName SetCgrepSubstitutionCost]	$::ProgramInfo(cgrep,SubstitutionCost) \
25308	     [SlaveName SetEgrepCaseInsensitiveP]	$::ProgramInfo(egrep,CaseInsensitiveP) \
25309	     [SlaveName SetEgrepEmitMatchOnlyP]	$::ProgramInfo(egrep,EmitMatchOnly) \
25310	     [SlaveName SetEgrepComplementP]	$::ProgramInfo(egrep,Complement) \
25311	     [SlaveName SetEmacsFoldCaseMatchP]	$::ProgramInfo(emacs,FoldCaseMatchP) \
25312	     [SlaveName SetEmacsFoldCaseReplaceP]	$::ProgramInfo(emacs,FoldCaseReplaceP) \
25313	     [SlaveName SetFgrepCaseInsensitiveP]	$::ProgramInfo(fgrep,CaseInsensitiveP) \
25314	     [SlaveName SetFgrepEmitMatchOnlyP]	$::ProgramInfo(fgrep,EmitMatchOnly) \
25315	     [SlaveName SetFgrepComplementP]	$::ProgramInfo(fgrep,Complement) \
25316	     [SlaveName SetGawkCaseInsensitiveP]	$::ProgramInfo(gawk,CaseInsensitiveP) \
25317	     [SlaveName SetGawkIntervalExpressionsP]	$::ProgramInfo(gawk,IntervalExpressions) \
25318	     [SlaveName SetGawkNotation]	$::ProgramInfo(gawk,Notation) \
25319	     [SlaveName SetGlarkCaseInsensitiveP]	$::ProgramInfo(glark,CaseInsensitiveP) \
25320	     [SlaveName SetGlarkEmitMatchOnlyP]	$::ProgramInfo(glark,EmitMatchOnly) \
25321	     [SlaveName SetGlarkComplementP]	$::ProgramInfo(glark,Complement) \
25322	     [SlaveName SetGlarkMatchEntireLineP]	$::ProgramInfo(glark,MatchEntireLine) \
25323	     [SlaveName SetGrepCaseInsensitiveP]	$::ProgramInfo(grep,CaseInsensitiveP) \
25324	     [SlaveName SetGrepEmitMatchOnlyP]	$::ProgramInfo(grep,EmitMatchOnly) \
25325	     [SlaveName SetGrepComplementP]	$::ProgramInfo(grep,Complement) \
25326	     [SlaveName SetGrepNotation]	$::ProgramInfo(grep,Notation) \
25327	     [SlaveName SetIciCaseInsensitiveP]	$::ProgramInfo(ici,CaseInsensitiveP) \
25328	     [SlaveName SetIciVerboseP]	$::ProgramInfo(ici,VerboseP) \
25329	     [SlaveName SetJavaCanonEQP]	$::ProgramInfo(java,CanonEQ) \
25330	     [SlaveName SetJavaCaseInsensitiveP]	$::ProgramInfo(java,CaseInsensitiveP) \
25331	     [SlaveName SetJavaUnicodeCaseP]	$::ProgramInfo(java,UnicodeCase) \
25332	     [SlaveName SetJgrepCaseInsensitiveP]	$::ProgramInfo(jgrep,CaseInsensitiveP) \
25333	     [SlaveName SetMysqlRegexpP]	$::ProgramInfo(mysql,RegexpP) \
25334	     [SlaveName SetNrgrepCaseInsensitiveP]	$::ProgramInfo(nrgrep,CaseInsensitiveP) \
25335	     [SlaveName SetNrgrepComplementP]	$::ProgramInfo(nrgrep,ComplementP) \
25336	     [SlaveName SetNrgrepTotalCost]	$::ProgramInfo(nrgrep,TotalCost) \
25337	     [SlaveName SetNrgrepInsertionsP]	$::ProgramInfo(nrgrep,InsertionsP) \
25338	     [SlaveName SetNrgrepDeletionsP]	$::ProgramInfo(nrgrep,DeletionsP) \
25339	     [SlaveName SetNrgrepSubstitutionsP]	$::ProgramInfo(nrgrep,SubstitutionsP) \
25340	     [SlaveName SetNrgrepTranspositionsP]	$::ProgramInfo(nrgrep,TranspositionsP) \
25341	     [SlaveName SetNumgrepOutputNumberByNumberP]	$::ProgramInfo(numgrep,OutputNumberByNumberP) \
25342	     [SlaveName SetPatmatchResidueType] $::ProgramInfo(patmatch,ResidueType) \
25343	     [SlaveName SetPatmatchMismatchNumber] $::ProgramInfo(patmatch,MismatchNumber) \
25344	     [SlaveName SetPatmatchMismatchTypes] $::ProgramInfo(patmatch,MismatchTypes) \
25345	     [SlaveName SetPcregrepCaseInsensitiveP]	$::ProgramInfo(pcregrep,CaseInsensitiveP) \
25346	     [SlaveName SetPcregrepEmitMatchOnlyP]	$::ProgramInfo(pcregrep,EmitMatchOnly) \
25347	     [SlaveName SetPcregrepComplementP]	$::ProgramInfo(pcregrep,Complement) \
25348	     [SlaveName SetPerlUnicodeLocaleDependentP]	$::ProgramInfo(perl,UnicodeLocaleDependentP) \
25349	     [SlaveName SetPythonRawStringP]	$::ProgramInfo(python,RawStringP) \
25350	     [SlaveName SetSedExtendedRegexpP]	$::ProgramInfo(sed,ExtendedRegexp) \
25351	     [SlaveName SetSgrepCaseInsensitiveP]	$::ProgramInfo(sgrep,CaseInsensitiveP) \
25352	     [SlaveName SetSsedPOSIXP]	$::ProgramInfo(ssed,POSIX) \
25353	     [SlaveName SetSsedRegexpType]	$::ProgramInfo(ssed,RegexpType) \
25354	     [SlaveName SetTclCaseInsensitiveP]	$::ProgramInfo(tcl,CaseInsensitiveP) \
25355	     [SlaveName SetTclEmitMatchOnlyP]	$::ProgramInfo(tcl,EmitMatchOnlyP) \
25356	     [SlaveName SetTclExpandedP]	$::ProgramInfo(tcl,ExpandedP) \
25357	     [SlaveName SetTrComplementP]	$::ProgramInfo(tr,Complement) \
25358	     [SlaveName SetTrSqueezeP]	$::ProgramInfo(tr,Squeeze) \
25359	     [SlaveName SetTrTruncateP]	$::ProgramInfo(tr,Truncate) \
25360	     [SlaveName SetVimCaseInsensitiveP]	$::ProgramInfo(vim,CaseInsensitiveP) \
25361	     [SlaveName SetVimSmartCaseP]	$::ProgramInfo(vim,SmartCaseP) \
25362	     [SlaveName SetVimSubstitutionGlobalP]	$::ProgramInfo(vim,SubstitutionGlobalP) \
25363	     [SlaveName SetZshExtendedGlobP]	$::ProgramInfo(zsh,ExtendedGlobP) \
25364	     [SlaveName SetZshKornQuantifiersP]	$::ProgramInfo(zsh,KornQuantifiersP) \
25365	     [SlaveName SetShellItemLimit]	$::ShellItemLimit]
25366
25367    if {[info exists ::AccentedLettersPerRow]} {
25368	lappend MiscellaneousInitCommandList [SlaveName SetAccentedLetterColumns]
25369	lappend MiscellaneousInitCommandList $::AccentedLettersPerRow
25370    }
25371
25372    set cl [list]
25373    foreach {command value} $MiscellaneousInitCommandList {
25374	lappend cl [format "%s %s" $command $value]
25375    }
25376    foreach title [array names ::SpecialCharacterPalette] {
25377	if {[string match "*WidgetName" $title]} {continue}
25378	set info $::SpecialCharacterPalette($title);
25379	if {[llength $info] > 2} {
25380	    lappend cl [list ReadCharacterChart [lindex $info 2]];
25381	} else {
25382	    lappend cl [ReconstructCharacterChartDefinition $title];
25383	}
25384    }
25385    return $cl;
25386}
25387
25388proc ReconstructCharacterChartDefinition {Title} {
25389    set info $::SpecialCharacterPalette($Title);
25390    set txt DefineCharacterChart;
25391    append txt " \{\n"
25392    append txt [format "%s" [Quote $Title]]
25393    set flds [llength $info];
25394    if {$flds > 1} {
25395	append txt [format "|%d" [lindex $info 1]];# Number of columns
25396    }
25397    if {$flds > 2} {
25398	append txt [format "|%s" [lindex $info 2]];# Font family
25399    }
25400    if {$flds > 3} {
25401	append txt [format "|%s" [lindex $info 3]];# Font size
25402    }
25403    append txt "\n"
25404    #Each entry consists of a unicode string and a gloss
25405    foreach x [lindex $info 0] {
25406	set string [lindex $x 0]
25407	set gloss  [lindex $x 1]
25408	append txt [format "%s|%s\n" [UnicodeStringToHex $string] [Quote $gloss]];
25409    }
25410    append txt "\}"
25411    return  $txt;
25412}
25413
25414#This is a kludge but I encountered quoting hell trying to use (\\s) -> \\ \\1
25415#e.g.   regsub -all "\\s" $s {\ } r
25416
25417#Escape spaces and tabs
25418proc Quote {s} {
25419    regsub -all "\u0020" $s {\ } r
25420    regsub -all "\t" $r {\	} ret
25421    return $ret
25422}
25423
25424proc UnicodeStringToHex {s} {
25425    set rv "";
25426    foreach c [split $s ""] {
25427	scan $c "%c" t
25428	if {$t <= 0xFF} {
25429	    append rv $c;
25430	} else {
25431	    append rv [format "\\u%04X" $t];
25432	}
25433    }
25434    return $rv;
25435 }
25436
25437#This package defines a routine IsColorSpecQ that validates X11 color specifications.
25438#It returns 1 if its argument is either a recognized X11 color name or
25439#a well formed hexadecimal RGB specification. If so desired, the two routines on
25440#which it is based, IsColorNameQ and IsColorNumericQ can also be exported.
25441namespace eval validcolor {
25442    namespace export IsColorSpecQ;
25443    variable CN;
25444
25445    set CN([list ghost white]) 1
25446    set CN([list white smoke]) 1
25447    set CN([list floral white]) 1
25448    set CN([list antique white]) 1
25449    set CN([list old lace]) 1
25450    set CN([list papaya whip]) 1
25451    set CN([list blanched almond]) 1
25452    set CN([list peach puff]) 1
25453    set CN([list navajo white]) 1
25454    set CN([list lemon chiffon]) 1
25455    set CN([list mint cream]) 1
25456    set CN([list alice blue]) 1
25457    set CN([list lavender blush]) 1
25458    set CN([list misty rose]) 1
25459    set CN([list dark slate gray]) 1
25460    set CN([list dark slate grey]) 1
25461    set CN([list dim gray]) 1
25462    set CN([list dim grey]) 1
25463    set CN([list slate gray]) 1
25464    set CN([list slate grey]) 1
25465    set CN([list light slate gray]) 1
25466    set CN([list light slate grey]) 1
25467    set CN([list light grey]) 1
25468    set CN([list light gray]) 1
25469    set CN([list midnight blue]) 1
25470    set CN([list navy blue]) 1
25471    set CN([list cornflower blue]) 1
25472    set CN([list dark slate blue]) 1
25473    set CN([list slate blue]) 1
25474    set CN([list medium slate blue]) 1
25475    set CN([list light slate blue]) 1
25476    set CN([list medium blue]) 1
25477    set CN([list royal blue]) 1
25478    set CN([list dodger blue]) 1
25479    set CN([list deep sky blue]) 1
25480    set CN([list sky blue]) 1
25481    set CN([list light sky blue]) 1
25482    set CN([list steel blue]) 1
25483    set CN([list light steel blue]) 1
25484    set CN([list light blue]) 1
25485    set CN([list powder blue]) 1
25486    set CN([list pale turquoise]) 1
25487    set CN([list dark turquoise]) 1
25488    set CN([list medium turquoise]) 1
25489    set CN([list light cyan]) 1
25490    set CN([list cadet blue]) 1
25491    set CN([list medium aquamarine]) 1
25492    set CN([list dark green]) 1
25493    set CN([list dark olive green]) 1
25494    set CN([list dark sea green]) 1
25495    set CN([list sea green]) 1
25496    set CN([list medium sea green]) 1
25497    set CN([list light sea green]) 1
25498    set CN([list pale green]) 1
25499    set CN([list spring green]) 1
25500    set CN([list lawn green]) 1
25501    set CN([list medium spring green]) 1
25502    set CN([list green yellow]) 1
25503    set CN([list lime green]) 1
25504    set CN([list yellow green]) 1
25505    set CN([list forest green]) 1
25506    set CN([list olive drab]) 1
25507    set CN([list dark khaki]) 1
25508    set CN([list pale goldenrod]) 1
25509    set CN([list light goldenrod yellow]) 1
25510    set CN([list light yellow]) 1
25511    set CN([list light goldenrod]) 1
25512    set CN([list dark goldenrod]) 1
25513    set CN([list rosy brown]) 1
25514    set CN([list indian red]) 1
25515    set CN([list saddle brown]) 1
25516    set CN([list sandy brown]) 1
25517    set CN([list dark salmon]) 1
25518    set CN([list light salmon]) 1
25519    set CN([list dark orange]) 1
25520    set CN([list light coral]) 1
25521    set CN([list orange red]) 1
25522    set CN([list hot pink]) 1
25523    set CN([list deep pink]) 1
25524    set CN([list light pink]) 1
25525    set CN([list pale violet red]) 1
25526    set CN([list medium violet red]) 1
25527    set CN([list violet red]) 1
25528    set CN([list medium orchid]) 1
25529    set CN([list dark orchid]) 1
25530    set CN([list dark violet]) 1
25531    set CN([list blue violet]) 1
25532    set CN([list medium purple]) 1
25533    set CN(snow) 1
25534    set CN(GhostWhite) 1
25535    set CN(WhiteSmoke) 1
25536    set CN(gainsboro) 1
25537    set CN(FloralWhite) 1
25538    set CN(OldLace) 1
25539    set CN(linen) 1
25540    set CN(AntiqueWhite) 1
25541    set CN(PapayaWhip) 1
25542    set CN(BlanchedAlmond) 1
25543    set CN(bisque) 1
25544    set CN(PeachPuff) 1
25545    set CN(NavajoWhite) 1
25546    set CN(moccasin) 1
25547    set CN(cornsilk) 1
25548    set CN(ivory) 1
25549    set CN(LemonChiffon) 1
25550    set CN(seashell) 1
25551    set CN(honeydew) 1
25552    set CN(MintCream) 1
25553    set CN(azure) 1
25554    set CN(AliceBlue) 1
25555    set CN(lavender) 1
25556    set CN(LavenderBlush) 1
25557    set CN(MistyRose) 1
25558    set CN(white) 1
25559    set CN(black) 1
25560    set CN(DarkSlateGray) 1
25561    set CN(DarkSlateGrey) 1
25562    set CN(DimGray) 1
25563    set CN(DimGrey) 1
25564    set CN(SlateGray) 1
25565    set CN(SlateGrey) 1
25566    set CN(LightSlateGray) 1
25567    set CN(LightSlateGrey) 1
25568    set CN(gray) 1
25569    set CN(grey) 1
25570    set CN(LightGrey) 1
25571    set CN(LightGray) 1
25572    set CN(MidnightBlue) 1
25573    set CN(navy) 1
25574    set CN(NavyBlue) 1
25575    set CN(CornflowerBlue) 1
25576    set CN(DarkSlateBlue) 1
25577    set CN(SlateBlue) 1
25578    set CN(MediumSlateBlue) 1
25579    set CN(LightSlateBlue) 1
25580    set CN(MediumBlue) 1
25581    set CN(RoyalBlue) 1
25582    set CN(blue) 1
25583    set CN(DodgerBlue) 1
25584    set CN(DeepSkyBlue) 1
25585    set CN(SkyBlue) 1
25586    set CN(LightSkyBlue) 1
25587    set CN(SteelBlue) 1
25588    set CN(LightSteelBlue) 1
25589    set CN(LightBlue) 1
25590    set CN(PowderBlue) 1
25591    set CN(PaleTurquoise) 1
25592    set CN(DarkTurquoise) 1
25593    set CN(MediumTurquoise) 1
25594    set CN(turquoise) 1
25595    set CN(cyan) 1
25596    set CN(LightCyan) 1
25597    set CN(CadetBlue) 1
25598    set CN(MediumAquamarine) 1
25599    set CN(aquamarine) 1
25600    set CN(DarkGreen) 1
25601    set CN(DarkOliveGreen) 1
25602    set CN(DarkSeaGreen) 1
25603    set CN(SeaGreen) 1
25604    set CN(MediumSeaGreen) 1
25605    set CN(LightSeaGreen) 1
25606    set CN(PaleGreen) 1
25607    set CN(SpringGreen) 1
25608    set CN(LawnGreen) 1
25609    set CN(green) 1
25610    set CN(chartreuse) 1
25611    set CN(MediumSpringGreen) 1
25612    set CN(GreenYellow) 1
25613    set CN(LimeGreen) 1
25614    set CN(YellowGreen) 1
25615    set CN(ForestGreen) 1
25616    set CN(OliveDrab) 1
25617    set CN(DarkKhaki) 1
25618    set CN(khaki) 1
25619    set CN(PaleGoldenrod) 1
25620    set CN(LightGoldenrodYellow) 1
25621    set CN(LightYellow) 1
25622    set CN(yellow) 1
25623    set CN(gold) 1
25624    set CN(LightGoldenrod) 1
25625    set CN(goldenrod) 1
25626    set CN(DarkGoldenrod) 1
25627    set CN(RosyBrown) 1
25628    set CN(IndianRed) 1
25629    set CN(SaddleBrown) 1
25630    set CN(sienna) 1
25631    set CN(peru) 1
25632    set CN(burlywood) 1
25633    set CN(beige) 1
25634    set CN(wheat) 1
25635    set CN(SandyBrown) 1
25636    set CN(tan) 1
25637    set CN(chocolate) 1
25638    set CN(firebrick) 1
25639    set CN(brown) 1
25640    set CN(DarkSalmon) 1
25641    set CN(salmon) 1
25642    set CN(LightSalmon) 1
25643    set CN(orange) 1
25644    set CN(DarkOrange) 1
25645    set CN(coral) 1
25646    set CN(LightCoral) 1
25647    set CN(tomato) 1
25648    set CN(OrangeRed) 1
25649    set CN(red) 1
25650    set CN(HotPink) 1
25651    set CN(DeepPink) 1
25652    set CN(pink) 1
25653    set CN(LightPink) 1
25654    set CN(PaleVioletRed) 1
25655    set CN(maroon) 1
25656    set CN(MediumVioletRed) 1
25657    set CN(VioletRed) 1
25658    set CN(magenta) 1
25659    set CN(violet) 1
25660    set CN(plum) 1
25661    set CN(orchid) 1
25662    set CN(MediumOrchid) 1
25663    set CN(DarkOrchid) 1
25664    set CN(DarkViolet) 1
25665    set CN(BlueViolet) 1
25666    set CN(purple) 1
25667    set CN(MediumPurple) 1
25668    set CN(thistle) 1
25669    set CN(snow1) 1
25670    set CN(snow2) 1
25671    set CN(snow3) 1
25672    set CN(snow4) 1
25673    set CN(seashell1) 1
25674    set CN(seashell2) 1
25675    set CN(seashell3) 1
25676    set CN(seashell4) 1
25677    set CN(AntiqueWhite1) 1
25678    set CN(AntiqueWhite2) 1
25679    set CN(AntiqueWhite3) 1
25680    set CN(AntiqueWhite4) 1
25681    set CN(bisque1) 1
25682    set CN(bisque2) 1
25683    set CN(bisque3) 1
25684    set CN(bisque4) 1
25685    set CN(PeachPuff1) 1
25686    set CN(PeachPuff2) 1
25687    set CN(PeachPuff3) 1
25688    set CN(PeachPuff4) 1
25689    set CN(NavajoWhite1) 1
25690    set CN(NavajoWhite2) 1
25691    set CN(NavajoWhite3) 1
25692    set CN(NavajoWhite4) 1
25693    set CN(LemonChiffon1) 1
25694    set CN(LemonChiffon2) 1
25695    set CN(LemonChiffon3) 1
25696    set CN(LemonChiffon4) 1
25697    set CN(cornsilk1) 1
25698    set CN(cornsilk2) 1
25699    set CN(cornsilk3) 1
25700    set CN(cornsilk4) 1
25701    set CN(ivory1) 1
25702    set CN(ivory2) 1
25703    set CN(ivory3) 1
25704    set CN(ivory4) 1
25705    set CN(honeydew1) 1
25706    set CN(honeydew2) 1
25707    set CN(honeydew3) 1
25708    set CN(honeydew4) 1
25709    set CN(LavenderBlush1) 1
25710    set CN(LavenderBlush2) 1
25711    set CN(LavenderBlush3) 1
25712    set CN(LavenderBlush4) 1
25713    set CN(MistyRose1) 1
25714    set CN(MistyRose2) 1
25715    set CN(MistyRose3) 1
25716    set CN(MistyRose4) 1
25717    set CN(azure1) 1
25718    set CN(azure2) 1
25719    set CN(azure3) 1
25720    set CN(azure4) 1
25721    set CN(SlateBlue1) 1
25722    set CN(SlateBlue2) 1
25723    set CN(SlateBlue3) 1
25724    set CN(SlateBlue4) 1
25725    set CN(RoyalBlue1) 1
25726    set CN(RoyalBlue2) 1
25727    set CN(RoyalBlue3) 1
25728    set CN(RoyalBlue4) 1
25729    set CN(blue1) 1
25730    set CN(blue2) 1
25731    set CN(blue3) 1
25732    set CN(blue4) 1
25733    set CN(DodgerBlue1) 1
25734    set CN(DodgerBlue2) 1
25735    set CN(DodgerBlue3) 1
25736    set CN(DodgerBlue4) 1
25737    set CN(SteelBlue1) 1
25738    set CN(SteelBlue2) 1
25739    set CN(SteelBlue3) 1
25740    set CN(SteelBlue4) 1
25741    set CN(DeepSkyBlue1) 1
25742    set CN(DeepSkyBlue2) 1
25743    set CN(DeepSkyBlue3) 1
25744    set CN(DeepSkyBlue4) 1
25745    set CN(SkyBlue1) 1
25746    set CN(SkyBlue2) 1
25747    set CN(SkyBlue3) 1
25748    set CN(SkyBlue4) 1
25749    set CN(LightSkyBlue1) 1
25750    set CN(LightSkyBlue2) 1
25751    set CN(LightSkyBlue3) 1
25752    set CN(LightSkyBlue4) 1
25753    set CN(SlateGray1) 1
25754    set CN(SlateGray2) 1
25755    set CN(SlateGray3) 1
25756    set CN(SlateGray4) 1
25757    set CN(LightSteelBlue1) 1
25758    set CN(LightSteelBlue2) 1
25759    set CN(LightSteelBlue3) 1
25760    set CN(LightSteelBlue4) 1
25761    set CN(LightBlue1) 1
25762    set CN(LightBlue2) 1
25763    set CN(LightBlue3) 1
25764    set CN(LightBlue4) 1
25765    set CN(LightCyan1) 1
25766    set CN(LightCyan2) 1
25767    set CN(LightCyan3) 1
25768    set CN(LightCyan4) 1
25769    set CN(PaleTurquoise1) 1
25770    set CN(PaleTurquoise2) 1
25771    set CN(PaleTurquoise3) 1
25772    set CN(PaleTurquoise4) 1
25773    set CN(CadetBlue1) 1
25774    set CN(CadetBlue2) 1
25775    set CN(CadetBlue3) 1
25776    set CN(CadetBlue4) 1
25777    set CN(turquoise1) 1
25778    set CN(turquoise2) 1
25779    set CN(turquoise3) 1
25780    set CN(turquoise4) 1
25781    set CN(cyan1) 1
25782    set CN(cyan2) 1
25783    set CN(cyan3) 1
25784    set CN(cyan4) 1
25785    set CN(DarkSlateGray1) 1
25786    set CN(DarkSlateGray2) 1
25787    set CN(DarkSlateGray3) 1
25788    set CN(DarkSlateGray4) 1
25789    set CN(aquamarine1) 1
25790    set CN(aquamarine2) 1
25791    set CN(aquamarine3) 1
25792    set CN(aquamarine4) 1
25793    set CN(DarkSeaGreen1) 1
25794    set CN(DarkSeaGreen2) 1
25795    set CN(DarkSeaGreen3) 1
25796    set CN(DarkSeaGreen4) 1
25797    set CN(SeaGreen1) 1
25798    set CN(SeaGreen2) 1
25799    set CN(SeaGreen3) 1
25800    set CN(SeaGreen4) 1
25801    set CN(PaleGreen1) 1
25802    set CN(PaleGreen2) 1
25803    set CN(PaleGreen3) 1
25804    set CN(PaleGreen4) 1
25805    set CN(SpringGreen1) 1
25806    set CN(SpringGreen2) 1
25807    set CN(SpringGreen3) 1
25808    set CN(SpringGreen4) 1
25809    set CN(green1) 1
25810    set CN(green2) 1
25811    set CN(green3) 1
25812    set CN(green4) 1
25813    set CN(chartreuse1) 1
25814    set CN(chartreuse2) 1
25815    set CN(chartreuse3) 1
25816    set CN(chartreuse4) 1
25817    set CN(OliveDrab1) 1
25818    set CN(OliveDrab2) 1
25819    set CN(OliveDrab3) 1
25820    set CN(OliveDrab4) 1
25821    set CN(DarkOliveGreen1) 1
25822    set CN(DarkOliveGreen2) 1
25823    set CN(DarkOliveGreen3) 1
25824    set CN(DarkOliveGreen4) 1
25825    set CN(khaki1) 1
25826    set CN(khaki2) 1
25827    set CN(khaki3) 1
25828    set CN(khaki4) 1
25829    set CN(LightGoldenrod1) 1
25830    set CN(LightGoldenrod2) 1
25831    set CN(LightGoldenrod3) 1
25832    set CN(LightGoldenrod4) 1
25833    set CN(LightYellow1) 1
25834    set CN(LightYellow2) 1
25835    set CN(LightYellow3) 1
25836    set CN(LightYellow4) 1
25837    set CN(yellow1) 1
25838    set CN(yellow2) 1
25839    set CN(yellow3) 1
25840    set CN(yellow4) 1
25841    set CN(gold1) 1
25842    set CN(gold2) 1
25843    set CN(gold3) 1
25844    set CN(gold4) 1
25845    set CN(goldenrod1) 1
25846    set CN(goldenrod2) 1
25847    set CN(goldenrod3) 1
25848    set CN(goldenrod4) 1
25849    set CN(DarkGoldenrod1) 1
25850    set CN(DarkGoldenrod2) 1
25851    set CN(DarkGoldenrod3) 1
25852    set CN(DarkGoldenrod4) 1
25853    set CN(RosyBrown1) 1
25854    set CN(RosyBrown2) 1
25855    set CN(RosyBrown3) 1
25856    set CN(RosyBrown4) 1
25857    set CN(IndianRed1) 1
25858    set CN(IndianRed2) 1
25859    set CN(IndianRed3) 1
25860    set CN(IndianRed4) 1
25861    set CN(sienna1) 1
25862    set CN(sienna2) 1
25863    set CN(sienna3) 1
25864    set CN(sienna4) 1
25865    set CN(burlywood1) 1
25866    set CN(burlywood2) 1
25867    set CN(burlywood3) 1
25868    set CN(burlywood4) 1
25869    set CN(wheat1) 1
25870    set CN(wheat2) 1
25871    set CN(wheat3) 1
25872    set CN(wheat4) 1
25873    set CN(tan1) 1
25874    set CN(tan2) 1
25875    set CN(tan3) 1
25876    set CN(tan4) 1
25877    set CN(chocolate1) 1
25878    set CN(chocolate2) 1
25879    set CN(chocolate3) 1
25880    set CN(chocolate4) 1
25881    set CN(firebrick1) 1
25882    set CN(firebrick2) 1
25883    set CN(firebrick3) 1
25884    set CN(firebrick4) 1
25885    set CN(brown1) 1
25886    set CN(brown2) 1
25887    set CN(brown3) 1
25888    set CN(brown4) 1
25889    set CN(salmon1) 1
25890    set CN(salmon2) 1
25891    set CN(salmon3) 1
25892    set CN(salmon4) 1
25893    set CN(LightSalmon1) 1
25894    set CN(LightSalmon2) 1
25895    set CN(LightSalmon3) 1
25896    set CN(LightSalmon4) 1
25897    set CN(orange1) 1
25898    set CN(orange2) 1
25899    set CN(orange3) 1
25900    set CN(orange4) 1
25901    set CN(DarkOrange1) 1
25902    set CN(DarkOrange2) 1
25903    set CN(DarkOrange3) 1
25904    set CN(DarkOrange4) 1
25905    set CN(coral1) 1
25906    set CN(coral2) 1
25907    set CN(coral3) 1
25908    set CN(coral4) 1
25909    set CN(tomato1) 1
25910    set CN(tomato2) 1
25911    set CN(tomato3) 1
25912    set CN(tomato4) 1
25913    set CN(OrangeRed1) 1
25914    set CN(OrangeRed2) 1
25915    set CN(OrangeRed3) 1
25916    set CN(OrangeRed4) 1
25917    set CN(red1) 1
25918    set CN(red2) 1
25919    set CN(red3) 1
25920    set CN(red4) 1
25921    set CN(DeepPink1) 1
25922    set CN(DeepPink2) 1
25923    set CN(DeepPink3) 1
25924    set CN(DeepPink4) 1
25925    set CN(HotPink1) 1
25926    set CN(HotPink2) 1
25927    set CN(HotPink3) 1
25928    set CN(HotPink4) 1
25929    set CN(pink1) 1
25930    set CN(pink2) 1
25931    set CN(pink3) 1
25932    set CN(pink4) 1
25933    set CN(LightPink1) 1
25934    set CN(LightPink2) 1
25935    set CN(LightPink3) 1
25936    set CN(LightPink4) 1
25937    set CN(PaleVioletRed1) 1
25938    set CN(PaleVioletRed2) 1
25939    set CN(PaleVioletRed3) 1
25940    set CN(PaleVioletRed4) 1
25941    set CN(maroon1) 1
25942    set CN(maroon2) 1
25943    set CN(maroon3) 1
25944    set CN(maroon4) 1
25945    set CN(VioletRed1) 1
25946    set CN(VioletRed2) 1
25947    set CN(VioletRed3) 1
25948    set CN(VioletRed4) 1
25949    set CN(magenta1) 1
25950    set CN(magenta2) 1
25951    set CN(magenta3) 1
25952    set CN(magenta4) 1
25953    set CN(orchid1) 1
25954    set CN(orchid2) 1
25955    set CN(orchid3) 1
25956    set CN(orchid4) 1
25957    set CN(plum1) 1
25958    set CN(plum2) 1
25959    set CN(plum3) 1
25960    set CN(plum4) 1
25961    set CN(MediumOrchid1) 1
25962    set CN(MediumOrchid2) 1
25963    set CN(MediumOrchid3) 1
25964    set CN(MediumOrchid4) 1
25965    set CN(DarkOrchid1) 1
25966    set CN(DarkOrchid2) 1
25967    set CN(DarkOrchid3) 1
25968    set CN(DarkOrchid4) 1
25969    set CN(purple1) 1
25970    set CN(purple2) 1
25971    set CN(purple3) 1
25972    set CN(purple4) 1
25973    set CN(MediumPurple1) 1
25974    set CN(MediumPurple2) 1
25975    set CN(MediumPurple3) 1
25976    set CN(MediumPurple4) 1
25977    set CN(thistle1) 1
25978    set CN(thistle2) 1
25979    set CN(thistle3) 1
25980    set CN(thistle4) 1
25981    set CN(gray0) 1
25982    set CN(grey0) 1
25983    set CN(gray1) 1
25984    set CN(grey1) 1
25985    set CN(gray2) 1
25986    set CN(grey2) 1
25987    set CN(gray3) 1
25988    set CN(grey3) 1
25989    set CN(gray4) 1
25990    set CN(grey4) 1
25991    set CN(gray5) 1
25992    set CN(grey5) 1
25993    set CN(gray6) 1
25994    set CN(grey6) 1
25995    set CN(gray7) 1
25996    set CN(grey7) 1
25997    set CN(gray8) 1
25998    set CN(grey8) 1
25999    set CN(gray9) 1
26000    set CN(grey9) 1
26001    set CN(gray10) 1
26002    set CN(grey10) 1
26003    set CN(gray11) 1
26004    set CN(grey11) 1
26005    set CN(gray12) 1
26006    set CN(grey12) 1
26007    set CN(gray13) 1
26008    set CN(grey13) 1
26009    set CN(gray14) 1
26010    set CN(grey14) 1
26011    set CN(gray15) 1
26012    set CN(grey15) 1
26013    set CN(gray16) 1
26014    set CN(grey16) 1
26015    set CN(gray17) 1
26016    set CN(grey17) 1
26017    set CN(gray18) 1
26018    set CN(grey18) 1
26019    set CN(gray19) 1
26020    set CN(grey19) 1
26021    set CN(gray20) 1
26022    set CN(grey20) 1
26023    set CN(gray21) 1
26024    set CN(grey21) 1
26025    set CN(gray22) 1
26026    set CN(grey22) 1
26027    set CN(gray23) 1
26028    set CN(grey23) 1
26029    set CN(gray24) 1
26030    set CN(grey24) 1
26031    set CN(gray25) 1
26032    set CN(grey25) 1
26033    set CN(gray26) 1
26034    set CN(grey26) 1
26035    set CN(gray27) 1
26036    set CN(grey27) 1
26037    set CN(gray28) 1
26038    set CN(grey28) 1
26039    set CN(gray29) 1
26040    set CN(grey29) 1
26041    set CN(gray30) 1
26042    set CN(grey30) 1
26043    set CN(gray31) 1
26044    set CN(grey31) 1
26045    set CN(gray32) 1
26046    set CN(grey32) 1
26047    set CN(gray33) 1
26048    set CN(grey33) 1
26049    set CN(gray34) 1
26050    set CN(grey34) 1
26051    set CN(gray35) 1
26052    set CN(grey35) 1
26053    set CN(gray36) 1
26054    set CN(grey36) 1
26055    set CN(gray37) 1
26056    set CN(grey37) 1
26057    set CN(gray38) 1
26058    set CN(grey38) 1
26059    set CN(gray39) 1
26060    set CN(grey39) 1
26061    set CN(gray40) 1
26062    set CN(grey40) 1
26063    set CN(gray41) 1
26064    set CN(grey41) 1
26065    set CN(gray42) 1
26066    set CN(grey42) 1
26067    set CN(gray43) 1
26068    set CN(grey43) 1
26069    set CN(gray44) 1
26070    set CN(grey44) 1
26071    set CN(gray45) 1
26072    set CN(grey45) 1
26073    set CN(gray46) 1
26074    set CN(grey46) 1
26075    set CN(gray47) 1
26076    set CN(grey47) 1
26077    set CN(gray48) 1
26078    set CN(grey48) 1
26079    set CN(gray49) 1
26080    set CN(grey49) 1
26081    set CN(gray50) 1
26082    set CN(grey50) 1
26083    set CN(gray51) 1
26084    set CN(grey51) 1
26085    set CN(gray52) 1
26086    set CN(grey52) 1
26087    set CN(gray53) 1
26088    set CN(grey53) 1
26089    set CN(gray54) 1
26090    set CN(grey54) 1
26091    set CN(gray55) 1
26092    set CN(grey55) 1
26093    set CN(gray56) 1
26094    set CN(grey56) 1
26095    set CN(gray57) 1
26096    set CN(grey57) 1
26097    set CN(gray58) 1
26098    set CN(grey58) 1
26099    set CN(gray59) 1
26100    set CN(grey59) 1
26101    set CN(gray60) 1
26102    set CN(grey60) 1
26103    set CN(gray61) 1
26104    set CN(grey61) 1
26105    set CN(gray62) 1
26106    set CN(grey62) 1
26107    set CN(gray63) 1
26108    set CN(grey63) 1
26109    set CN(gray64) 1
26110    set CN(grey64) 1
26111    set CN(gray65) 1
26112    set CN(grey65) 1
26113    set CN(gray66) 1
26114    set CN(grey66) 1
26115    set CN(gray67) 1
26116    set CN(grey67) 1
26117    set CN(gray68) 1
26118    set CN(grey68) 1
26119    set CN(gray69) 1
26120    set CN(grey69) 1
26121    set CN(gray70) 1
26122    set CN(grey70) 1
26123    set CN(gray71) 1
26124    set CN(grey71) 1
26125    set CN(gray72) 1
26126    set CN(grey72) 1
26127    set CN(gray73) 1
26128    set CN(grey73) 1
26129    set CN(gray74) 1
26130    set CN(grey74) 1
26131    set CN(gray75) 1
26132    set CN(grey75) 1
26133    set CN(gray76) 1
26134    set CN(grey76) 1
26135    set CN(gray77) 1
26136    set CN(grey77) 1
26137    set CN(gray78) 1
26138    set CN(grey78) 1
26139    set CN(gray79) 1
26140    set CN(grey79) 1
26141    set CN(gray80) 1
26142    set CN(grey80) 1
26143    set CN(gray81) 1
26144    set CN(grey81) 1
26145    set CN(gray82) 1
26146    set CN(grey82) 1
26147    set CN(gray83) 1
26148    set CN(grey83) 1
26149    set CN(gray84) 1
26150    set CN(grey84) 1
26151    set CN(gray85) 1
26152    set CN(grey85) 1
26153    set CN(gray86) 1
26154    set CN(grey86) 1
26155    set CN(gray87) 1
26156    set CN(grey87) 1
26157    set CN(gray88) 1
26158    set CN(grey88) 1
26159    set CN(gray89) 1
26160    set CN(grey89) 1
26161    set CN(gray90) 1
26162    set CN(grey90) 1
26163    set CN(gray91) 1
26164    set CN(grey91) 1
26165    set CN(gray92) 1
26166    set CN(grey92) 1
26167    set CN(gray93) 1
26168    set CN(grey93) 1
26169    set CN(gray94) 1
26170    set CN(grey94) 1
26171    set CN(gray95) 1
26172    set CN(grey95) 1
26173    set CN(gray96) 1
26174    set CN(grey96) 1
26175    set CN(gray97) 1
26176    set CN(grey97) 1
26177    set CN(gray98) 1
26178    set CN(grey98) 1
26179    set CN(gray99) 1
26180    set CN(grey99) 1
26181    set CN(gray100) 1
26182    set CN(grey100) 1
26183
26184    proc GetColorNames {} {
26185	variable CN
26186	return [lsort -dictionary [array names CN]]
26187    }
26188
26189    proc IsColorNameQ {s} {
26190	variable CN
26191	if {[info exists CN($s)]} {
26192	    return 1;
26193	} else {
26194	    return 0;
26195	}
26196    }
26197
26198    proc IsColorNumericQ {s} {
26199	return [regexp \
26200		    {^\#([[:xdigit:]]{6}|[[:xdigit:]]{3}|[[:xdigit:]]{9}|[[:xdigit:]]{12})$} $s]
26201    }
26202
26203    proc IsColorSpecQ {s} {
26204	if {[IsColorNameQ $s]} {
26205	    return 1;
26206	} elseif {[IsColorNumericQ $s]} {
26207	    return 1;
26208	} else {
26209	    return 0;
26210	}
26211    }
26212}
26213#End of namespace validcolor
26214
26215proc PopupColorNameList {} {
26216    if {[PopupDown ColorNameList] ==1} {return}
26217    set po  [CreateTextDisplay [_ "Color Names"] 65 10];
26218    set ::PopupList(ColorNameList) $po;
26219    BindKeys $po;
26220    set n 0;
26221    foreach l [::validcolor::GetColorNames] {
26222	incr n;
26223	AppendToTextDisplay $po [format "\[%03d\] %s\n" $n $l];
26224    }
26225}
26226
26227#Ths procedure takes as its sole argument the name
26228#of an existing procedure in the same interpreter
26229#and creates a new master level procedure that
26230#wraps the other procedure with a test for the
26231#correct argument count.
26232
26233proc WrapMaster {pn} {
26234    regsub "^::fontsel::" $pn "" Stem
26235    set WrappedName Wrapped${Stem};
26236    set sp [format "proc $WrappedName \{args\} \{\n"];
26237    set ArgsNeeded [llength [info args $pn]];
26238    append sp [format "\tif \{\[llength \$args\] != %d\} \{\n" $ArgsNeeded]
26239    if {$ArgsNeeded == 1} {
26240	set emsg [format [_ "The command %s in the file %%s expects one argument"] \
26241	[SlaveName $WrappedName]]
26242	set cmd [format "\t\tputs \"$emsg\"\n" \$::InitFile]
26243	append sp $cmd
26244    } else {
26245	set emsg [format [_ "The command %s in the file %%s expects %d arguments\n"] \
26246	      [SlaveName $WrappedName] $ArgsNeeded]
26247	set cmd [format "\t\tputs \"$emsg\"\n" \$::InitFile];
26248	append sp $cmd;
26249    }
26250    append sp "\t\treturn;\n\t\}\n\t"
26251    append sp  $pn
26252    for {set i 0} {$i < $ArgsNeeded} {incr i} {
26253	append sp " \[lindex \$args $i\]"
26254    }
26255    append sp "\n\}"
26256    eval $sp;
26257    return $WrappedName;
26258}
26259
26260proc ReadInitFile {name} {
26261    if { [catch {interp invoke init source $name} msg] } {
26262	puts [format [_  "Error on reading init file %s: %s"] $name $msg]
26263    } else {
26264	ShowMessage [format [_ "Executed init file %s"] $name]
26265    }
26266    interp delete init
26267}
26268
26269proc SlavePuts {msg} {
26270    puts $msg;
26271}
26272
26273proc GetLocale {} {
26274    package require msgcat
26275    return [::msgcat::mclocale]
26276}
26277
26278proc SlaveMsgcat {} {
26279    package require msgcat
26280    ::msgcat::mcload [file join [file dirname [info script]] msgs];
26281}
26282
26283proc SetCharacterName {c s} {
26284    set ::UName($c) $s;
26285}
26286
26287#This is the list of the master interpreter commands
26288#other than those generated from data structures (currently
26289#color- and font-setting) that we wish to expose for use in
26290#the init file slave interpreter.
26291set MiscellaneousSlaveCommandList {
26292    AddUserPaletteEntry
26293    DefineCharacterClass
26294    DefineShortcut
26295    GetLocale
26296    ReadFeatureList
26297    SelectBrowser
26298    SelectProgramInitFile
26299    SetAccentedLetterColumns
26300    SetAgrepBestResultsP
26301    SetAgrepCaseInsensitiveP
26302    SetAgrepDeletionCost
26303    SetAgrepErrorLimit
26304    SetAgrepInsertionCost
26305    SetAgrepSubstitutionCost
26306    SetArenaCaseInsensitiveP
26307    SetArenaVerboseP
26308    SetAutoClearRegexpP
26309    SetBalloonHelpShowP
26310    SetBashExtendedP
26311    SetBusyBoxEgrepCaseInsensitiveP
26312    SetBusyBoxEgrepComplementP
26313    SetCgrepCaseInsensitiveP
26314    SetCgrepComplementP
26315    SetCgrepDeletionCost
26316    SetCgrepExtendedP
26317    SetCgrepInsertionCost
26318    SetCgrepSubstitutionCost
26319    SetCgrepTotalCost
26320    SetCharacterName
26321    SetComparisonDataEncoding
26322    SetDisplayConsonantChartColumnLabelsP
26323    SetDisplayConsonantChartRowLabelsP
26324    SetDisplayVowelChartColumnLabelsP
26325    SetDisplayVowelChartRowLabelsP
26326    SetEgrepCaseInsensitiveP
26327    SetEgrepComplementP
26328    SetEgrepEmitMatchOnlyP
26329    SetEmacsFoldCaseMatchP
26330    SetEmacsFoldCaseReplaceP
26331    SetFgrepCaseInsensitiveP
26332    SetFgrepComplementP
26333    SetFgrepEmitMatchOnlyP
26334    SetFocusFollowsMouseP
26335    SetGawkCaseInsensitiveP
26336    SetGawkIntervalExpressionsP
26337    SetGawkNotation
26338    SetGlarkCaseInsensitiveP
26339    SetGlarkComplementP
26340    SetGlarkEmitMatchOnlyP
26341    SetGlarkMatchEntireLineP
26342    SetGrepCaseInsensitiveP
26343    SetGrepComplementP
26344    SetGrepEmitMatchOnlyP
26345    SetGrepNotation
26346    SetHistoryCentralP
26347    SetHistoryIncludeProgramP
26348    SetIciCaseInsensitiveP
26349    SetIciVerboseP
26350    SetJavaCanonEQP
26351    SetJavaCaseInsensitiveP
26352    SetJavaUnicodeCaseP
26353    SetJgrepCaseInsensitiveP
26354    SetLeftUserClassIntersectionDelimiter
26355    SetMysqlRegexpP
26356    SetNrgrepCaseInsensitiveP
26357    SetNrgrepComplementP
26358    SetNrgrepDeletionsP
26359    SetNrgrepInsertionsP
26360    SetNrgrepSubstitutionsP
26361    SetNrgrepTotalCost
26362    SetNrgrepTranspositionsP
26363    SetNumgrepOutputNumberByNumberP
26364    SetOutputOnlyChangedLinesP
26365    SetPaletteHeightLimit
26366    SetPatmatchMismatchNumber
26367    SetPatmatchMismatchTypes
26368    SetPatmatchResidueType
26369    SetPcregrepCaseInsensitiveP
26370    SetPcregrepComplementP
26371    SetPcregrepEmitMatchOnlyP
26372    SetPerlUnicodeLocaleDependentP
26373    SetPythonRawStringP
26374    SetResultEncoding
26375    SetRightUserClassIntersectionDelimiter
26376    SetSedExtendedRegexpP
26377    SetSgrepCaseInsensitiveP
26378    SetShellItemLimit
26379    SetSsedPOSIXP
26380    SetSsedRegexpType
26381    SetStandardLayoutP
26382    SetTclCaseInsensitiveP
26383    SetTclEmitMatchOnlyP
26384    SetTclExpandedP
26385    SetTestDataEncoding
26386    SetTrComplementP
26387    SetTrSqueezeP
26388    SetTrTruncateP
26389    SetUseScrollbarsP
26390    SetUserClassesEnabledP
26391    SetVimCaseInsensitiveP
26392    SetVimSmartCaseP
26393    SetVimSubstitutionGlobalP
26394    SetZshExtendedGlobP
26395    SetZshKornQuantifiersP
26396    StoreCustomCharacterChartFileName
26397    StoreCustomCharacterChartInPlace
26398    SubstitutionModeInitFileP
26399}
26400#Add to above list when sgrep is ready:    SetSgrepCaseInsensitiveP
26401
26402#This procedure creates the master procedures that will be exposed
26403#in the slave interpreter. It takes care of creating the base procedures
26404#where, as in the case of color and font setting, these are created
26405#programmatically, then wraps these as well as the manually
26406#written procedures that are to be exposed.
26407proc CreateInitProcs {} {
26408    set ::FontProcList "";
26409    fontsel::DefineFontSettingProcs
26410    DefineColorSettingProcs;
26411    #This is the complete list of commands that we want to expose
26412    #in the slave init file interpreter. These are the raw, unwrapped, master
26413    #level commands.
26414    set ::MasterCommandsToBeExposedInInitList [concat \
26415	   [lsort $::ColorProcList] \
26416	   [lsort $::FontProcList]  \
26417	   [lsort $::MiscellaneousSlaveCommandList]];
26418    #Now we wrap them all so as to trap valence errors
26419    set ::WrappedMasterCommandList [list]
26420    foreach c $::MasterCommandsToBeExposedInInitList {
26421	lappend ::WrappedMasterCommandList [WrapMaster $c]
26422    }
26423}
26424
26425#This procedure takes the list of wrapped master
26426#procedures and exposes them in a specified, already
26427#created, slave interpreter.
26428proc ExposeInitProcs {Interpreter} {
26429    foreach c $::WrappedMasterCommandList {
26430	set sl [SlaveName $c];
26431	$Interpreter alias $sl $c;
26432    }
26433}
26434
26435set MasterToSlaveName(SetDisplayConsonantChartColumnLabelsP) ShowConsonantChartColumnLabelsP
26436set MasterToSlaveName(SetDisplayConsonantChartRowLabelsP) ShowConsonantChartRowLabelsP
26437set MasterToSlaveName(SetDisplayVowelChartColumnLabelsP) ShowVowelChartColumnLabelsP
26438set MasterToSlaveName(SetDisplayVowelChartRowLabelsP) ShowVowelChartRowLabelsP
26439set MasterToSlaveName(SelectProgramInitFile) Program;
26440set MasterToSlaveName(SelectBrowser) Browser;
26441set MasterToSlaveName(SlavePuts) Puts;
26442set MasterToSlaveName(StoreCustomCharacterChartInPlace) DefineCharacterChart
26443set MasterToSlaveName(StoreCustomCharacterChartFileName) ReadCharacterChart
26444set MasterToSlaveName(SubstitutionModeInitFileP) SubstitutionModeP
26445
26446#Given the name of a wrapped command in the master interpreter,
26447#returns the name that the command is to have when
26448#exposed in the slave interpreter. In most cases the alias
26449#is computed from the master name, but in some cases
26450#the relationship is irregular.
26451proc SlaveName {command} {
26452    regsub "^Wrapped" $command "" Unwrapped
26453    if {[info exists ::MasterToSlaveName($Unwrapped)]} {
26454	set EnglishSlaveName $::MasterToSlaveName($Unwrapped);
26455    } else {
26456	regsub "^Set" $Unwrapped "" EnglishSlaveName
26457    }
26458    return [_ $EnglishSlaveName]
26459}
26460
26461proc InitFileSetup {} {
26462    interp create -safe -- init
26463    #We use slaveMsgcat rather than SlaveMsgcat so that the name does not
26464    #appear in the list that the user sees.
26465    init alias slaveMsgcat SlaveMsgcat
26466    init eval slaveMsgcat
26467    init alias mc _
26468    ExposeInitProcs init
26469    #This takes care of errors in the name of commands while still in the
26470    #slave interpreter, without aborting, and using the user-name in the error-message.
26471    init eval {
26472	proc unknown {args} {
26473	    set cmd [lindex $args 0]
26474	    Puts [format  [mc "Unknown command %s in script file %s."]  $cmd [info script]];
26475#	    Puts [format  [mc "Unknown command %1\$s in script file %2\$s."]  $cmd [info script]];
26476	    return ;
26477	}
26478    }
26479}
26480
26481proc SlaveBoolean {s} {
26482    switch -regexp $s {
26483	1	{return 1}
26484	T.*	{return 1}
26485	t.*	{return 1}
26486	Y.*	{return 1}
26487	y.*	{return 1}
26488	ok	{return 1}
26489	on	{return 1}
26490	0 	{return 0}
26491	F.*	{return 0}
26492	f.*	{return 0}
26493	N.*	{return 0}
26494	n.*	{return 0}
26495	off	{return 0}
26496	default {
26497	    puts [format [_ "%s is not a Boolean argument."] $s]
26498	    return -1;
26499	}
26500    }
26501}
26502
26503#We can't just call SelectProgram from the init file
26504#because, for other reasons, we need to read the init
26505#file before enough of the infrastructure for SelectProgram
26506#is ready. We therefore just record the choice and execute
26507#SelectProgram later.
26508proc SelectProgramInitFile {p} {
26509    set ::CommandLineProgram $p;
26510}
26511
26512proc SubstitutionModeInitFileP {b} {
26513    set ::BeginInSubstitutionModeP [Boolean $b];
26514}
26515
26516
26517proc ReadFeatureList {args} {
26518    if {[llength $args]} {
26519	set fn [lindex $args 0]
26520    } else {
26521	set fn [tk_getOpenFile -title [_ "Read Feature List"]];
26522	if {[string equal $fn ""]} {
26523	    ShowMessage [_ "File selection cancelled."];
26524	    return ;
26525	}
26526    }
26527    if { [catch {open $fn "r"} fhd ] != 0} {
26528	ShowMessage [format [_ "Unable to open feature list %s."] [MinimizeFileName $fn]];
26529	return ;
26530    }
26531    set LineCnt 0
26532    while { [gets $fhd line] > 0} {
26533	if {$LineCnt == 0} {
26534	    set linep [split $line]
26535	    if {[llength $linep] != 2} {
26536		ShowMessage [_ "Header of file %s ill-formed."]
26537		close $fhd;
26538		return ;
26539	    }
26540	    set p [lindex $linep 0]
26541	    set l [lindex $linep 1]
26542	} else {
26543	    if {[scan $line "%s %s" Feature Value] != 2} {
26544		ShowMessage [format [_ "Ill-formed entry at line %d of file %s."] $LineCnt \
26545				 [MinimizeFileName $fn]]
26546		close $fhd;
26547		return
26548	    } else {
26549		set FTemp($Feature,$p,$l) $Value;
26550	    }
26551	}
26552	incr LineCnt;
26553    }
26554    close $fhd;
26555    if {$LineCnt < 1} {
26556	ShowMessage [_ "File %s is empty" [MinimizeFileName $fn]]
26557	return
26558    }
26559    foreach f [array names FTemp] {
26560	set ::Features($f) [Boolean $FTemp($f)]
26561    }
26562    SetCompoundFeatures;
26563    ShowMessage [format [_ "Read feature list for program %s in locale %s from %s."] $p $l \
26564		     [MinimizeFielName $fn]]
26565    if {[string equal $p $::program] && [string equal $l $::InterfaceLocale]} {
26566	ConstructPalette;
26567    }
26568}
26569
26570#New structure for UserPalette
26571#	UserPalette(Program,Name) -> [list Body Etext]
26572
26573proc AddUserPaletteEntry {Which Name Body {EText ""}} {
26574    global UserPalette;
26575    incr UserPalette($Which,0);
26576    set UserPalette($Which,$Name) [list $Body [list $EText]];
26577}
26578
26579#If the filename passed as argument is a pathname
26580#leading to a file in the current working directory,
26581#return just the basename+extension. Otherwise
26582#return the argument.
26583proc MinimizeFileName {s} {
26584    set cwd [pwd];
26585    set sdir [file dirname $s]
26586    if {[string equal $cwd $sdir]} {
26587	return [file tail $s]
26588    } else {
26589	return $s;
26590    }
26591}
26592
26593
26594#This is where the main action begins
26595#Entrypoint.
26596
26597
26598proc PathToFileURL {p} {
26599    return [format "file://%s" $p];
26600}
26601
26602set HomeDir [GetHomeDir];
26603set ColorFullPath [file join $HomeDir $ColorFile];
26604set ScriptPath [info script];
26605if {$DebugP} {
26606    set ManualDirectory [file join [file dir $ScriptPath] Manual];
26607} else {
26608    set ManualDirectory [file join $NonBinPath Manual];
26609}
26610set ManualPath [file join $ManualDirectory Manual.html];
26611set ManualURL [PathToFileURL $ManualPath];
26612
26613set InterfaceLocale [::msgcat::mclocale];
26614LoadMessageCatalog;
26615
26616# Find out whether we have GNU diff
26617if {$UseDiffP} {
26618    set GNUDiffP 0;
26619    if { [string length [auto_execok diff]]  != 0 } {
26620	if {[regexp "GNU diffutils" [lindex [split [exec diff -v] '\n'] 0]]}  {
26621	    set GNUDiffP 1;
26622	}
26623    }
26624}
26625
26626#Open the journal file.
26627set JournalFullPath [file join $HomeDir $JournalFile];
26628if {[catch {open $JournalFullPath "a"} JournalHandle ] != 0} {
26629    puts [format [_ "Unable to open journal file %s."] $JournalFullPath];
26630    exit 2;
26631}
26632WriteJournal [format [_ "Session started: %s in directory %s"] [clock format [clock seconds]] [pwd]];
26633
26634proc argshift {k} {
26635    set ::argv [lrange $::argv $k end];
26636}
26637
26638set CommandLineUserClassFile "";
26639#Get command line arguments
26640while {[string match -* [lindex $argv 0]]} {
26641    switch -regexp -- [lindex $argv 0] {
26642	--?c.* {
26643	    set CommandLineUserClassFile [lindex $argv 1];
26644	    argshift 2;
26645	}
26646	--?d.* {
26647	    set DebugP 1;
26648	    argshift 1;
26649	}
26650	--?F.* {
26651	    lappend FeatureFileList [lindex $argv 1]
26652	    argshift 2;
26653	}
26654	--?f.* {
26655	    set PipeP 1;
26656	    argshift 1;
26657	}
26658	--?H.* {
26659	    set ReadHistoryFileP 0;
26660	    argshift 1;
26661	}
26662	--?h.* {
26663	    Usage;
26664	    exit 0;
26665	}
26666	--?I.* {
26667	    set InitFile [lindex $argv 1]
26668	    argshift 2;
26669	}
26670	--?i.* {
26671	    set ReadInitFileP 0;
26672	    argshift 1;
26673	}
26674	--?l.* {
26675	    set CommandLineInterfaceLocale [lindex $argv 1];
26676	    argshift 2;
26677	    set nl [SetInterfaceLocale $CommandLineInterfaceLocale]
26678	    if {[string equal $nl ""] == 0} {
26679		set InterfaceLocale $nl;
26680		LoadMessageCatalog;
26681	    }
26682	}
26683	--?n.* {
26684	    set FeatureTestP 0;
26685	    argshift 1;
26686	}
26687	--?P.* {
26688	    CheckProgramAvailability
26689	    ListSupportedPrograms stdout
26690	    exit 0
26691	}
26692	--?p.* {
26693	    set CommandLineProgram [lindex $argv 1];
26694	    argshift 2;
26695	}
26696	--?s.* {
26697	    set BeginInSubstitutionModeP 1;
26698	    argshift 1
26699	}
26700	--?t.* {
26701	    set FeatureTestDebugP 1;
26702	    argshift 1
26703	}
26704	--?v.* {
26705	    puts "Redet $Version";
26706	    exit 0;
26707	}
26708	default {
26709	    puts [format [_ "Command line option %s not recognized."] [lindex $argv 0]];
26710	    Usage;
26711	    exit 0;
26712	}
26713    }
26714};					# End of while
26715
26716
26717
26718proc UnicodeStringToHex {s AsciiTooP} {
26719    set rv "";
26720    foreach c [split $s ""] {
26721	scan $c "%c" t
26722	if {($t <= 0xFF) && !$AsciiTooP} {
26723	    append rv $c;
26724	} else {
26725	    append rv [format " U+%04X" $t];
26726	}
26727	append rv " "
26728    }
26729    return $rv;
26730 }
26731
26732proc NameUChars {s} {
26733    set ns ""
26734    foreach c [split $s ""] {
26735	if {[info exist ::UName($c)]} {
26736	    append ns [format "%9s" $::UName($c)]
26737	} else {
26738	    append ns "  ??  "
26739	}
26740	append ns " ";
26741    }
26742    return [string trimright $ns " "];
26743}
26744
26745proc ShowCode {w x y} {
26746    $w tag delete match
26747    set c [format %s,%s $x $y]
26748    set s [$w get @$c]
26749    $w tag configure "match" -background $::ColorSpecs(Match,Background);
26750    $w tag add match @$c "@$c + 1chars"
26751    ShowMessage [format "%s: %s" [UnicodeStringToHex $s 1] [NameUChars $s]]
26752}
26753
26754
26755dmsg "InterfaceLocale = $InterfaceLocale"
26756::msgcat::mcset ja "any single character" "foo"
26757SetCommandGlosses;
26758foreach fn $FeatureFileList {
26759    ReadFeatureList $fn
26760}
26761
26762puts "Redet $Version";
26763puts "Copyright (C) 2003-2008 William J. Poser.";
26764puts [_ "This program is free software; you can redistribute it
26765and/or modify it under the terms of version 3 of the GNU General
26766Public License as published by the Free Software Foundation."];
26767
26768#If there is still a command line argument, it is a file to load as input data.
26769#We just record the name here as we don't want actually to read it until the windows
26770#are set up.
26771if { [llength $argv]} {
26772    set InitialTestInputDataFile [lindex $argv 0];
26773}
26774dmsg "About to create windows";
26775set PixelHeight 300;
26776wm geometry . =650x300+100+200
26777SetTitle $::Version [ProgramTimeDateStamp] $::InterfaceLocale $::DoSubstitutionsP;
26778#wm title . [_ "Regular Expression Development and Execution Tool"];
26779set SideWidth [expr $MainWidth / 2];
26780wm withdraw [fontsel::CreateFontControlPanel]
26781
26782CreateInitProcs;
26783
26784dmsg "About to read init file";
26785if {$ReadInitFileP} {
26786    InitFileSetup;
26787    #Look first in current directory, then in home directory.
26788    if { [file exists $InitFile] } {
26789	ReadInitFile $InitFile;
26790    } else {
26791	set cwd [pwd];
26792	cd;
26793	if {[file exists $InitFile] } {
26794	    ReadInitFile $InitFile;
26795	}
26796	cd $cwd;
26797    }
26798}
26799fontsel::SetFontSelectionDefaults
26800fontsel::RecordDefaults;
26801
26802option add *Menu.Background $ColorSpecs(Menu,Background) 100
26803option add *Menu.Foreground $ColorSpecs(Menu,Foreground) 100
26804option add *Menu*selectColor $ColorSpecs(Menu,Select) 100
26805option add *Menu.activeBackground $ColorSpecs(Menu,ActiveBackground) 100
26806option add *Menu.activeForeground  $ColorSpecs(Menu,ActiveForeground) 100
26807
26808proc MacintoshNotes {} {
26809    global PopupList;
26810    if {[PopupDown Macintosh] ==1} {return}
26811    set po [CreateTextDisplay [_ "Notes for Macintosh Users"] 60 12]
26812    set PopupList(Macintosh) $po;
26813    AppendToTextDisplay $po [_ "This program works a bit differently on the Macintosh than on other platforms. One difference is in mouse usage. Several features of the program make use of right-clicks. Since the typical Macintosh uses a single-button mouse, if the program detects that it is running on a Macintosh, it interprets the combination Control-mouse click as equivalent to a right-click.\n\n"]
26814    AppendToTextDisplay $po [_ "The graphics/windowing system that Redet uses is Tk, for which two implementations are available under MacOSX. One implementation uses X11 as the underlying graphics and window system. This version of Tk is almost identical to the Unix version for which Redet was written. If you use this version of Tk, you should find that Redet looks and behaves just as described in the documentation, which is based in the first instance on the GNU/Linux version of Redet.\n\n"]
26815    AppendToTextDisplay $po [_ "The other implementation of Tk for MacOSX uses Aqua as the underlying graphics and window system. This version of Tk provides a more native Macintosh look and feel, at the expense of introducing differences between the look and behavior of programs under MacOSX and on other machines. In particular, the Macintosh user interface guidelines, which the Aqua implementation of Tk enforces, allow only menus, not commands, to be placed on the menu bar. As a result, if you are using Tk-Aqua, the File, Program, History, Tools, Configure and Help menus will appear on the Macintosh menu, while the Execute, Clear, and Palette buttons will appear in a row at the top of the Redet window.\n\n"]
26816    if {$::AquaP} {
26817	AppendToTextDisplay $po [_ "You are currently using the Aqua implementation of Tk. If you would prefer to have the standard interface for Redet, you will need to install the X11 implementation of Tk as well as X11 itself. As of the Tiger release of Mac OS X, X11 is provided on the distribution CD as an optional componenent."]
26818    } else {
26819	AppendToTextDisplay $po [_ "You are currently using the X11 implementation of Tk. This provides the standard interface to Redet. If you prefer a more native Macintosh look-and-feel you can switch to the Aqua implementation of Tk."]
26820    }
26821}
26822
26823proc DescribePrograms {} {
26824    global Version;
26825    global tcl_platform;
26826    if {[PopupDown ProgramInfo] ==1} {return}
26827    set po [CreateTextDisplay [_ "Programs"] 50 21];
26828    set ::PopupList(ProgramInfo) $po;
26829    BindKeys $po;
26830    AppendToTextDisplay $po "Each program name is a link to information about the program\n\n\n";
26831    AppendLinkToTextDisplay $po [_ "agrep (Wu-Manber)"] \
26832	{ShowWebPage ftp://ftp.cs.arizona.edu/agrep};
26833    AppendToTextDisplay $po "\nWu-Manber agrep is a version of grep that provides for approximate matching, where matches deviating by no more than a specified amount from what the regular expression would otherwise have matched are accepted. The original version was developed by Sun Wu and Udi Manber at the University of Arizona around 1990. Several variants have arisen over the years and it has been ported to a wide range of platforms. TRE agrep provides some facilities that it does not, so if you are using Redet as a search tool TRE agrep is probably the better choice.";
26834    AppendToTextDisplay $po "\n\n";
26835    AppendLinkToTextDisplay $po [_ "agrep (TRE)"] \
26836	{ShowWebPage http://laurikari.net/tre};
26837    AppendToTextDisplay $po "\nTRE agrep is the 'approximate grep' program provided with the TRE regular expression library. This library uses a new, fast regular expression matching algorithm and provides a particularly rich set of regular expression features while at the same time exhibiting better conformance to the POSIX standard than most other implementations. In addition to the standard regular expression constructs, it supports approximate matching. This means that you can associate costs with deviations from what the regular expression would otherwise have matched and request all matches that deviate by no more than a specified cost. Costs may be assigned separately to insertions, deletions, and substitutions on a group-specific basis. TRE agrep is therefore a good choice if you are using Redet as a search tool and the optimal choice if you need approximate matching.";
26838    AppendToTextDisplay $po "\n\n";
26839    AppendLinkToTextDisplay $po [_ "arena"] \
26840	{ShowWebPage http://www.minimalinux.org/arena/index.html};
26841    AppendToTextDisplay $po "\nArena is a scripting language that closely resembles ANSI C in syntax and in its standard libraries. Unlike C, it is interpreted and has automatic memory management. It has runtime polymorphism, anonymous functions, and exceptions. The interpreter is very compact. Its regular expression support is based on PCRE.";
26842    AppendToTextDisplay $po "\n\n";
26843    AppendLinkToTextDisplay $po [_ "awk"] \
26844	{ShowWebPage http://cm.bell-labs.com/cm/cs/awkbook/};
26845    AppendToTextDisplay $po "\nAwk is the classic Unix text processing language. An Awk program consists of a set of patterns with associated actions. Whenever the input matches a pattern, the corresponding action is executed. Awk automatically parses the input into records (by default lines, but changeable) and records into fields (by default, on whitespace, but changeable). Regular expressions are used both in patterns and, by means of calls to builtin functions, in actions.\n\nThere are a number of versions of Awk. The original version was developed at Bell Laboratories by Al Aho, Peter Weinberger, and Brian Kernighan. The link here is to this original version of Awk. Bell Labs later produced a revised version of Awk that is frequently called nawk. The link below is to a free, somewhat modernized version of nawk. What is probably the most widely used version today is gawk, the GNU project Awk implementation. Gawk is roughly comparable to the revised version of ATT Awk.Mawk is another free implementation roughly equivalent to ATT nawk. Note that other versions of Awk,such as Gawk and Nawk, are not infrequently named Awk rather than, or in addition to, Gawk or Nawk  .";
26846    AppendToTextDisplay $po "\n\n";
26847    AppendLinkToTextDisplay $po [_ "bash"] \
26848	{ShowWebPage http://www.gnu.org/software/bash/bash.html};
26849    AppendToTextDisplay $po "\nBash (the 'born again shell')is one of the two most widely used Unix command interpreters. On many systems it is known as sh rather than, or in addition to, bash, because it is considered to supersede the original Bourne shell.";
26850    AppendToTextDisplay $po "\n\n";
26851    AppendLinkToTextDisplay $po [_ "busybox egrep"] \
26852	{ShowWebPage http://www.busybox.net/};
26853    AppendToTextDisplay $po "\nBusyBox combines tiny versions of many common UNIX utilities into a single small executable. It is intended for embedded systems and other applications in which small file size and memory usage are important. This is is the version of egrep provided by BusyBox.";
26854    AppendToTextDisplay $po "\n\n";
26855    AppendLinkToTextDisplay $po "C" \
26856	{ShowWebPage http://www.gnu.org/software/libc/manual/html_node/Regular-Expressions.html\#Regular-Expressions};
26857    AppendToTextDisplay $po "\nThe C language does not have built-in regular expressions, but there is a standard regular expression library defined in the POSIX standard which is provided with virtually all C implementations. On systems using the GNU C library, the default regular expressions contain GNU extensions. The C programs generated by Redet define _POSIX_C_SOURCE, which restricts the GNU C library to the POSIX standard.";
26858    AppendToTextDisplay $po "\n\n";
26859    AppendLinkToTextDisplay $po [_ "cgrep"] \
26860	{ShowWebPage http://freshmeat.net/projects/cgrep};
26861    AppendToTextDisplay $po "\nCgrep is an improved and extended version of the original Unix grep program developed by Bill Tannenbaum at Lucent Technologies. Its regular expression matching capabilities are a superset of those of the original egrep (not of GNU egrep), to which it adds approximate matching. It is also reported to be considerably faster. It has an extensive set of options controlling how much of the context surrounding the match to display and some capabilities for multi-line matching.";
26862    AppendToTextDisplay $po "\n\n";
26863    AppendLinkToTextDisplay $po [_ "ed"] \
26864	{ShowWebPage http://www.gnu.org/software/ed/ed.html};
26865    AppendToTextDisplay $po "\nEd is the classic Unix line editor. Although few people use line editors interactively anymore, it remains in use via scripts. Vi and its derivative vim are screen-oriented descendants of ed.";
26866    AppendToTextDisplay $po "\n\n";
26867    AppendLinkToTextDisplay $po [_ "egrep"] \
26868	{ShowWebPage http://www.gnu.org/software/grep/};
26869    AppendToTextDisplay $po "\nGrep is the classic Unix string search program. Egrep is a variant of grep that provided a richer regular expression notation usually known as 'extended regular expression' notation as opposed to 'basic regular expression' notation. On many systems egrep, grep, and fgrep are different names for the same program, which behaves differently depending on the name it is called by and/or the command-line options it is given.";
26870    AppendToTextDisplay $po "\n\n";
26871    AppendLinkToTextDisplay $po [_ "emacs"] \
26872	{ShowWebPage http://www.gnu.org/software/emacs/emacs.html};
26873    AppendToTextDisplay $po "\nEmacs is an extremely powerful fully programmable and extensible text editor. It is really an interpreter for a dialect of LISP with a number of primitives useful for editing. Much of emacs' functionality is implemented indirectly by libraries of emacs lisp code. It is possible to run emacs non-interactively as a powerful text-processing engine.";
26874    AppendToTextDisplay $po "\n\n";
26875    AppendLinkToTextDisplay $po [_ "euphoria"] \
26876	{ShowWebPage http://www.rapideuphoria.com/};
26877    AppendToTextDisplay $po "\nEuphoria is a language with a simple Pascal-like syntax used primarily on the Microsoft Windows platform though it is also available for GNU/Linux and FreeBSD. By some benchmarks it is the fastest of the interpreted languages. Euphoria provides a simple wildcard matching facility but not true regular expression matching."
26878    AppendToTextDisplay $po "\n\n";
26879    AppendLinkToTextDisplay $po [_ "expr"] \
26880	{ShowWebPage http://www.gnu.org/software/coreutils/manual/html_mono/coreutils.html#Conditions};
26881    AppendToTextDisplay $po "\nExpr evaluates expressions for use in conditionals in shell scripts."
26882    AppendToTextDisplay $po "\n\n";
26883    AppendLinkToTextDisplay $po [_ "fgrep"] \
26884	{ShowWebPage http://www.gnu.org/software/grep/};
26885    AppendToTextDisplay $po "\nFgrep stands for 'fast grep'. It is a version of grep that is limited to searches for fixed strings. As such, it does not actually provide for regular expression matching at all. It is included here because fixed string searches are sometimes useful and because it is a member of the same family as grep and egrep, indeed often the same program.";
26886    AppendToTextDisplay $po "\n\n";
26887    AppendLinkToTextDisplay $po [_ "fish"] \
26888	{ShowWebPage http://roo.no-ip.org/fish/};
26889    AppendToTextDisplay $po "\nFish, the 'friendly interactive shell', is a shell that is focused on interactive use, discoverability, and user friendliness. The design goal of fish is to give the user a rich set of powerful features in a way that is easy to discover, remember, and use. Fish features a user-friendly and powerful tab-completion, including descriptions of every completion, tab-completion of strings with wildcards, and many completions for specific commands.\n";
26890    AppendToTextDisplay $po "\n\n";
26891    AppendLinkToTextDisplay $po [_ "frink"] \
26892	{ShowWebPage http://futureboy.homeip.net/frinkdocs};
26893    AppendToTextDisplay $po "\nFrink is a language intended especially for numerical calculation. Its most unusual property is that all numerical values are associated with units, of which it has an extensive database. Frink therefore knows that the product of 2 furlongs and 3 feet is 367.9 square meters. It uses a modified version of the regular expression code from the Apache Java ORO project, which provides regular expression facilities compatible with those of Perl5.";
26894    AppendToTextDisplay $po "\n\n";
26895    AppendLinkToTextDisplay $po [_ "gawk"] \
26896	{ShowWebPage http://www.gnu.org/software/gawk/};
26897    AppendToTextDisplay $po "\nGawk is the GNU project implementation of Awk. It is roughly equivalent to ATT nawk but has some extensions. Note that on many systems this is the only version of Awk installed and may be named Awk rather than, or in addition to, Gawk.";
26898    AppendToTextDisplay $po "\n\n";
26899    AppendLinkToTextDisplay $po [_ "glark"] \
26900	{ShowWebPage http://www.incava.org/projects/glark/};
26901    AppendToTextDisplay $po "\nGlark is a text search program along the lines of grep implemented in Ruby. Additional features include Boolean combinations of patterns, highlighting of matches, and context around matches.";
26902    AppendToTextDisplay $po "\n\n";
26903    AppendLinkToTextDisplay $po [_ "grep"] \
26904	{ShowWebPage http://www.gnu.org/software/grep/};
26905    AppendToTextDisplay $po "\nGrep is the classic Unix string search program. The original version provided 'basic regular expression' notation, while egrep provided the richer 'extended regular expression' notation and fgrep could search only for fixed strings. Typically, when called as grep with no special command-line options basic regular expression notation will be used. In many cases, the same program if called by another name or with other command-line options will behave like fgrep or egrep.";
26906    AppendToTextDisplay $po "\n\n";
26907    AppendLinkToTextDisplay $po [_ "groovy"] \
26908	{ShowWebPage http://groovy.codehaus.org};
26909    AppendToTextDisplay $po "\nGroovy is a scripting language for the Java virtual machine.";
26910    AppendToTextDisplay $po "\n\n";
26911#    AppendLinkToTextDisplay $po [_ "gpp"] {ShowWebPage http://www.nothingisreal.com/gpp/};
26912#    AppendToTextDisplay $po "\nGPP is a general purpose preprocessor, similar to GNU m4.";
26913#    AppendToTextDisplay $po "\n\n";
26914    AppendLinkToTextDisplay $po [_ "guile"] \
26915	{ShowWebPage http://www.gnu.org/software/guile/};
26916    AppendToTextDisplay $po "\nGuile is a dialect of Lisp developed by the GNU Project with the intention that it serve as the primary extension language for GNU software. It provides roughly the classic egrep regular expression facilities but uses notation that in some respects is unusual.";
26917    AppendToTextDisplay $po "\n\n";
26918    AppendLinkToTextDisplay $po "ici" \
26919	{ShowWebPage http://ici.sourceforge.net};
26920    AppendToTextDisplay $po "\n Ici is an interpreted language very similar to C."
26921    AppendToTextDisplay $po "\n\n";
26922    AppendLinkToTextDisplay $po "icon" \
26923	{ShowWebPage http://www.cs.arizona.edu/icon};
26924    AppendToTextDisplay $po "\nIcon is the modern descendant of Snobol, the classic pattern matching language. Unlike Snobol, Icon has the usual Algol-type control structures. Syntactically, it feels much like C. However, Icon has a richer run-time system that supports such unusual constructs as goal-directed evaluation and generator functions. Icon has a regular expression matching toolkit of the standard type, but it is not used as much as in many other languages since Icon is designed for pattern matching and parsing by direct methods.";
26925    AppendToTextDisplay $po "\n\n";
26926    AppendLinkToTextDisplay $po [_ "java"] \
26927	{ShowWebPage http://java.sun.com};
26928    AppendToTextDisplay $po "\nJava is a cross-platform object-oriented language with automatic storage allocation and garbage collection otherwise similar in syntax and level to C. Java has an enormous collection of library functions, including one of the most sophisticated regular expression toolkits.";
26929    AppendToTextDisplay $po "\n\n";
26930    AppendLinkToTextDisplay $po [_ "javascript"] \
26931	{ShowWebPage http://www.njs-javascript.org};
26932    AppendToTextDisplay $po "\nJavascript is the original webpage programning language introduced with the Netscape browser. It is used primarily on web pages.";
26933    AppendToTextDisplay $po "\n\n";
26934    AppendLinkToTextDisplay $po [_ "jgrep"] \
26935	{ShowWebPage http://ourworld.compuserve.com/homepages/John_Maddock/regexpp.htm};
26936    AppendToTextDisplay $po "\nJgrep is a text search utility that accompanies the Regex++ regular expression library for C++ and C. This library provides full POSIX regular expression syntax plus some Perl extensions and handles Unicode.";
26937    AppendToTextDisplay $po "\n\n";
26938    AppendLinkToTextDisplay $po [_ "judoscript"] \
26939	{ShowWebPage http://www.judoscript.com/judo.html};
26940    AppendToTextDisplay $po "\nJudoscript is a scripting language implemented in Java and intended to provide easier access to Java. It provides high-level facilities for a variety of functions such as HTTP and encryption while at the same time allowing Java code to be included.";
26941    AppendToTextDisplay $po "\n\n";
26942    AppendLinkToTextDisplay $po [_ "ksh"] \
26943	{ShowWebPage http://www.kornshell.com/};
26944    AppendToTextDisplay $po "\nKsh is a shell in the Bourne shell lineage created by David Korn at AT&T. It exists in several versions, the 1988 AT&T version, the 1993 AT&T version, several derivatives of the AT&T version, and a public domain clone known as ";
26945    AppendLinkToTextDisplay $po "pdksh" \
26946	{ShowWebPage http://www.cs.mun.ca/~michael/pdksh/}
26947    AppendToTextDisplay $po [_ ". Note that both pdksh and the original AT&T versions are normally installed under the name ksh so it may not be obvious which version you have. As far as I can tell file globbing is the same in all versions except for the fact that pdksh does not support the POSIX named character classes (\[\[:digit:\]\] etc.)."];
26948    AppendToTextDisplay $po "\n\n";
26949    AppendLinkToTextDisplay $po [_ "lua"] \
26950	{ShowWebPage http://www.lua.org};
26951    AppendToTextDisplay $po "\nLua is a scripting language aimed especially at games and other embedded applications. It is designed to be fast and to use a minimum of memory. Lua's pattern matching commands do not, strictly speaking, match regular expressions since the quantifiers apply either to the preceding symbol or the preceding builtin character class. It has capture groups but they do not serve as quantifier domains. In mathematical terms, Lua string matching lacks closure of subexpressions. If you need full regular expression matching Lua is not suitable.";
26952    AppendToTextDisplay $po "\n\n";
26953#    AppendLinkToTextDisplay $po [_ "m4"] {ShowWebPage http://www.gnu.org/software/m4};
26954#    AppendToTextDisplay $po "\nM4 is the standard Unix macro language.";
26955#    AppendToTextDisplay $po "\n\n";
26956    AppendLinkToTextDisplay $po [_ "mawk"] \
26957	{ShowWebPage http://freshmeat.net/projects/mawk};
26958    AppendToTextDisplay $po "\nMike's Awk is a version of Awk that conforms to the POSIX 1003.2 standard and adds a few extensions. It is roughly equivalent to ATT nawk. Mawk is smaller and faster than Gawk.";
26959    AppendToTextDisplay $po "\n\n";
26960    AppendLinkToTextDisplay $po [_ "minised"] \
26961	{ShowWebPage http://www.exactcode.de/oss/minised/};
26962    AppendToTextDisplay $po "\nMinised is a version of sed originally used by the GNU project, before the GNU project created a new version of sed based on its new, expanded regular expression library.  It is the sed distributed with Minix. It is smaller and faster than GNU sed with fewer features. It was reverse-engineered by Eric S. Raymond from 4.1 BSD sed but has a few extensions.";
26963    AppendToTextDisplay $po "\n\n";
26964    AppendLinkToTextDisplay $po [_ "mysql"] \
26965	{ShowWebPage http://www.mysql.com/};
26966    AppendToTextDisplay $po "\nMysql is a widely used free relational database that supports the SQL query language. It provides both SQL wildcards and real regular expressions.";
26967    AppendToTextDisplay $po "\n\n";
26968    AppendLinkToTextDisplay $po [_ "nawk"] \
26969	{ShowWebPage http://heirloom.sourceforge.net};
26970    AppendToTextDisplay $po "\nThe Nawk to which the link is provided is the version provided as part of the Heirloom Toolchest, which contains updated versions of original Unix software released as open source by Caledera and Sun. Among the ways in which it has been updated is that it can handle UTF-8 Unicode.";
26971    AppendToTextDisplay $po "\n\n";
26972    AppendLinkToTextDisplay $po [_ "nrgrep"] \
26973	{ShowWebPage http://www.dcc.uchile.cl/~gnavarro/software/};
26974    AppendToTextDisplay $po "\nNrgrep is a text search utility that uses an algorithm developed by the author, Gonzalo Navarro. It supports approximate matching and has the unusual property of providing for transpositions. Costs may be set only globally, not for individual groups";
26975    AppendToTextDisplay $po "\n\n";
26976    AppendLinkToTextDisplay $po [_ "numgrep"] \
26977	{ShowWebPage http://suso.suso.org/programs/num-utils/};
26978    AppendToTextDisplay $po "\nNumgrep is a program specialized for matching integers based on their values rather than their textual form. It can do matches that are difficult or impossible using regular expressions.";
26979    AppendToTextDisplay $po "\n\n";
26980    AppendLinkToTextDisplay $po [_ "patmatch"] \
26981	{ShowWebPage http://nar.oxfordjournals.org/cgi/content/abstract/33/suppl_2/W262};
26982    AppendToTextDisplay $po "\nPatmatch is a specialized matcher for nucleotide and peptide sequences. It consists of a Perl front-end to a modified version of nrgrep.";
26983    AppendToTextDisplay $po "The software can be obtained from:";
26984    AppendLinkToTextDisplay $po ftp://ftp.arabidopsis.org/home/tair/Software/Patmatch/\
26985    {ShowWebPage ftp://ftp.arabidopsis.org/home/tair/Software/Patmatch/}
26986    AppendToTextDisplay $po "\n\n";
26987    AppendLinkToTextDisplay $po [_ "pcregrep"] \
26988	{ShowWebPage http://www.pcre.org/};
26989    AppendToTextDisplay $po "\nPcregrep is a command-line regular expression matcher similar to grep whose matching engine is the Perl Compatible Regular Expression library, which provides regular expression matching similar, but not identical to, Perl 5.";
26990    AppendToTextDisplay $po "\n\n";
26991    AppendLinkToTextDisplay $po [_ "perl"] \
26992	{ShowWebPage http://www.perl.org/};
26993    AppendToTextDisplay $po "\nPerl is a widely used scripting language considered by many to be the Swiss Army knife of programming. Version 5 of Perl introduced a number of extensions to standard regular expression notation, many of which have been adopted by other regular expression engines.";
26994    AppendToTextDisplay $po "\n\n";
26995    AppendLinkToTextDisplay $po [_ "php-mb"] \
26996	{ShowWebPage http://www.php.net};
26997    AppendToTextDisplay $po "\nThis is the PHP scripting language using a regular expression library that supports multibyte characters.";
26998    AppendToTextDisplay $po "\n\n";
26999    AppendLinkToTextDisplay $po [_ "php-pcre"] \
27000	{ShowWebPage http://www.php.net};
27001    AppendToTextDisplay $po "\nThis is the PHP scripting language using the PCRE regular expression library, wich provides regular expressions along the lines of those of Perl 5.";
27002    AppendToTextDisplay $po "\n\n";
27003    AppendLinkToTextDisplay $po [_ "php-posix"] \
27004	{ShowWebPage http://www.php.net};
27005    AppendToTextDisplay $po "\nPHP is a scripting language used primarily for generating dynamic web pages. It has several regular expression toolkits. This one provides regular expressions conformant to the POSIX standard.";
27006    AppendToTextDisplay $po "\n\n";
27007    AppendLinkToTextDisplay $po [_ "pike"] \
27008	{ShowWebPage http://pike.ida.liu.se};
27009    AppendToTextDisplay $po "\nPike is a scripting language roughly comparable to Python, Perl, Tcl and Ruby. It is object-oriented and has a C-like syntax. It has a somewhat lower-level orientation than comparable scripting languages. It has a fairly rich regular expression facility and is one of the faster languages of its type.";
27010    AppendToTextDisplay $po "\n\n";
27011    AppendLinkToTextDisplay $po [_ "python"] \
27012	{ShowWebPage http://www.python.org};
27013    AppendToTextDisplay $po "\nPython is one of the popular new generation scripting languages. It is object-oriented, but not as as thoroughly as Ruby. It is possible for someone with little understanding of object-oriented programming to write in Python. Python has one of the richer regular expression toolkits.";
27014    AppendToTextDisplay $po "\n\n";
27015    AppendLinkToTextDisplay $po [_ "rc"] \
27016	{ShowWebPage http://www.star.le.ac.uk/~tjg/rc/};
27017    AppendToTextDisplay $po "\nRc is the standard shell for Plan 9, the successor to Unix developed by Lucent.";
27018    AppendToTextDisplay $po "\n\n";
27019    AppendLinkToTextDisplay $po [_ "rebol"] \
27020	{ShowWebPage http://www.rebol.com};
27021    AppendToTextDisplay $po "\nRebol is a cross-platform scripting language that is intended for use both as a programming language and as a data description language. Rebol's patternmatching facilities are an integral part of the language rather than a separate regular expression matching component, so Redet does not provide an optimal interface to them.";
27022    AppendToTextDisplay $po "\n\n";
27023    AppendLinkToTextDisplay $po [_ "rep"] \
27024	{ShowWebPage http://librep.sourceforge.net};
27025    AppendToTextDisplay $po "\nLibrep is a library that provides an interpreter for a dialect of Lisp. The same functionality is available via the command-line program Rep. This is the extension language for a number of programs, including the Sawfish window manager and the Jade text editor. Rep uses a slightly modified version of Henry Spencer's regular expression package.";
27026    AppendToTextDisplay $po "\n\n";
27027    AppendLinkToTextDisplay $po [_ "ruby"] \
27028	{ShowWebPage http://ruby-lang.org};
27029    AppendToTextDisplay $po "\nRuby is a relatively new addition to the group of scripting languages that includes Perl, Python, and Tcl. It is more thoroughly object-oriented than Python and uses a syntax reminiscent in some ways of that of Perl. Perl fans in search of a cleaner, strongly object-oriented language tend to like Ruby. Ruby has a fairly rich regular expression facility and executes quickly, so it is a reasonable choice if you are using Redet as a search tool as well as if you are developing regular expressions for Ruby.";
27030    AppendToTextDisplay $po "\n\n";
27031    AppendLinkToTextDisplay $po [_ "sed"] \
27032	{ShowWebPage http://www.gnu.org/software/sed};
27033    AppendToTextDisplay $po "\nSed is the classic Unix stream editor. It is much like the line editor ed but is oriented toward use as a filter.";
27034    AppendToTextDisplay $po "\n\n";
27035#    AppendLinkToTextDisplay $po [_ "sgrep"] {ShowWebPage http://www.cs.helsinki.fi/u/jjaakkol/sgrep.html};
27036#    AppendToTextDisplay $po "\nSgrep is...";
27037#    AppendToTextDisplay $po "\n\n";
27038    AppendLinkToTextDisplay $po [_ "sleep"] \
27039	{ShowWebPage http://sleep.hick.org};
27040    AppendToTextDisplay $po "\nSleep is an embeddable scripting language implemented in Java. It is inspired by Perl with influence from Objective C. Sleep has both a full regular expression capability and a more limited wildcard matching facility.";
27041    AppendToTextDisplay $po "\n\n";
27042    AppendLinkToTextDisplay $po [_ "sleepwc"] \
27043	{ShowWebPage http://sleep.hick.org};
27044    AppendToTextDisplay $po "\nThis is the wildcard matching facility of the Sleep scripting language, which also has a full regular expression engine.";
27045    AppendToTextDisplay $po "\n\n";
27046    AppendLinkToTextDisplay $po [_ "ssed"] \
27047	{ShowWebPage http://sed.sourceforge.net/grabbag/ssed/};
27048    AppendToTextDisplay $po "\nSsed (super-sed) is an extension of GNU sed created by Paolo Bonzini. It uses Perl-style regular expressions and is reported to be much faster than GNU sed. Some of its extensions have been incorporated into GNU sed. It has some extensions not apparent in Redet, such as the ability to edit files in place.";
27049    AppendToTextDisplay $po "\n\n";
27050    AppendLinkToTextDisplay $po [_ "tcl"] \
27051	{ShowWebPage http://www.tcl.tk};
27052    AppendToTextDisplay $po "\nTcl is the language in which this program is written, so it is always available and is very fast since there is no overhead executing other programs as child processes. It has one of the richest regular expression facilities and so is a good choice if you are using Redet as a search tool.";
27053    AppendToTextDisplay $po "\n\n";
27054    AppendLinkToTextDisplay $po [_ "tclglob"] \
27055	{ShowWebPage http://www.tcl.tk};
27056    AppendToTextDisplay $po "\nTcl has a filename matching feature in addition to its richer regular expression facilities. If you are using Redet as a search tool, you had might as well use the full regular expression facilities. If you are constructing expressions for use with Tcl's file globbing commands you should select this program.";
27057    AppendToTextDisplay $po "\n\n";
27058    AppendLinkToTextDisplay $po [_ "tcsh"] \
27059	{ShowWebPage http://www.tcsh.org};
27060    AppendToTextDisplay $po "\nThis is one of the command line interpreters widely used on Unix systems. Tcsh is an extended version of csh, the shell developed at Berkeley. On many systems it is named csh instead of, or in addition to, tcsh. You should choose this program if you are developing regular expressions for use with tcsh. Otherwise you would be better advised to use a program with richer and faster regular expression facilities.";
27061    AppendToTextDisplay $po "\n\n";
27062    AppendLinkToTextDisplay $po [_ "tr"] \
27063	{ShowWebPage http://www.gnu.org/software/coreutils/manual/html_chapter/coreutils_9.html\#SEC44};
27064    AppendToTextDisplay $po "\nTr is one of the standard Unix utilities. It is used to map one set of characters to another. It can also delete selected characters or reduce sequences of adjacent identical characters to a single token. It is not really a regular expression matcher but is supported because users have asked for it and because it uses character classes similar to the named character classes used in POSIX regular expressions.";
27065    AppendToTextDisplay $po "\n\n";
27066    AppendLinkToTextDisplay $po "vim" \
27067	{ShowWebPage http://www.vim.org};
27068    AppendToTextDisplay $po "\nVim is a free reimplementation and extension of vi, the screen editor descended from the original Unix line editor ed.";
27069    AppendToTextDisplay $po "\n\n";
27070    AppendToTextDisplay $po "Vim's approach to matching newline characters is different from that of most other matchers. Instead of using a separate flag to control this, Vim provides newline-matching variants of constructs that do not match newline. The notation for these constructs is consistent: the newline-matching variant adds the prefix \\_, or the infix _ if the construct already begins with a backslash. For example, . matches any character other than newline; \\_. matches any character, including newline. \\s matches a space or tab; \\_s matches space, tab, or newline. Redet does not include these constructs in the palette since Redet operates on units of single lines.";
27071    AppendToTextDisplay $po "\n\n";
27072    AppendToTextDisplay $po "Vim provides another set of character classes that Redet does not list in the palette. These are: \\f 'filename character',\\i 'identifier character', \\k 'keyword character',\\p 'printable character', and their complements \\F, \\I, \\K, and \\P. These classes are intended to describe properties of the programming language and operating system and so are variable. They are usually defined in configuration files for editing a particular language. Because they have no fixed definition, Redet cannot provide palette entries for them.";
27073    AppendToTextDisplay $po "\n\n";
27074    AppendLinkToTextDisplay $po [_ "wmagrep"] \
27075	{ShowWebPage ftp://ftp.cs.arizona.edu/agrep};
27076    AppendToTextDisplay $po "\nSee agrep (Wu-Manber).";
27077    AppendToTextDisplay $po "\n\n";
27078    AppendLinkToTextDisplay $po [_ "zsh"] \
27079	{ShowWebPage http://www.zsh.org};
27080    AppendToTextDisplay $po "\nZsh is a command interpreter originally written by Paul Falstad in order to create a shell similar to the Korn shell (ksh) with features familiar to users of csh. It has what is probably the richest file globbing system of any of the shells.";
27081}
27082
27083#This is a slightly modified version of the standard unknown procedure
27084#loaded from init.tcl on startup.
27085proc unknown args {
27086    global auto_noexec auto_noload env unknown_pending tcl_interactive
27087    global errorCode errorInfo
27088
27089    set cmd [lindex $args 0]
27090
27091    #See if the command is a missing help popup.
27092    if {[string match Explain* $cmd]} {
27093	ShowMessage [format [_ "%s is not available. See Help:Bug Reports."] $cmd]
27094	return 0;
27095    }
27096
27097    # If the command word has the form "namespace inscope ns cmd"
27098    # then concatenate its arguments onto the end and evaluate it.
27099
27100    if {[regexp "^:*namespace\[ \t\n\]+inscope" $cmd] && [llength $cmd] == 4} {
27101        set arglist [lrange $args 1 end]
27102	set ret [catch {uplevel 1 ::$cmd $arglist} result]
27103        if {$ret == 0} {
27104            return $result
27105        } else {
27106	    return -code $ret -errorcode $errorCode $result
27107        }
27108    }
27109
27110    # Save the values of errorCode and errorInfo variables, since they
27111    # may get modified if caught errors occur below.  The variables will
27112    # be restored just before re-executing the missing command.
27113
27114    # Safety check in case something unsets the variables
27115    # ::errorInfo or ::errorCode.  [Bug 1063707]
27116    if {![info exists errorCode]} {
27117	set errorCode ""
27118    }
27119    if {![info exists errorInfo]} {
27120	set errorInfo ""
27121    }
27122    set savedErrorCode $errorCode
27123    set savedErrorInfo $errorInfo
27124    set name [lindex $args 0]
27125    if {![info exists auto_noload]} {
27126	#
27127	# Make sure we're not trying to load the same proc twice.
27128	#
27129	if {[info exists unknown_pending($name)]} {
27130	    return -code error "self-referential recursion in \"unknown\" for command \"$name\"";
27131	}
27132	set unknown_pending($name) pending;
27133	set ret [catch {auto_load $name [uplevel 1 {::namespace current}]} msg]
27134	unset unknown_pending($name);
27135	if {$ret != 0} {
27136	    append errorInfo "\n    (autoloading \"$name\")"
27137	    return -code $ret -errorcode $errorCode -errorinfo $errorInfo $msg
27138	}
27139	if {![array size unknown_pending]} {
27140	    unset unknown_pending
27141	}
27142	if {$msg} {
27143	    set errorCode $savedErrorCode
27144	    set errorInfo $savedErrorInfo
27145	    set code [catch {uplevel 1 $args} msg]
27146	    if {$code ==  1} {
27147		#
27148		# Compute stack trace contribution from the [uplevel].
27149		# Note the dependence on how Tcl_AddErrorInfo, etc.
27150		# construct the stack trace.
27151		#
27152		set cinfo $args
27153		set ellipsis ""
27154		while {[string bytelength $cinfo] > 150} {
27155		    set cinfo [string range $cinfo 0 end-1]
27156		    set ellipsis "..."
27157		}
27158		append cinfo $ellipsis "\"\n    (\"uplevel\" body line 1)"
27159		append cinfo "\n    invoked from within"
27160		append cinfo "\n\"uplevel 1 \$args\""
27161		#
27162		# Try each possible form of the stack trace
27163		# and trim the extra contribution from the matching case
27164		#
27165		set expect "$msg\n    while executing\n\"$cinfo"
27166		if {$errorInfo eq $expect} {
27167		    #
27168		    # The stack has only the eval from the expanded command
27169		    # Do not generate any stack trace here.
27170		    #
27171		    return -code error -errorcode $errorCode $msg
27172		}
27173		#
27174		# Stack trace is nested, trim off just the contribution
27175		# from the extra "eval" of $args due to the "catch" above.
27176		#
27177		set expect "\n    invoked from within\n\"$cinfo"
27178		set exlen [string length $expect]
27179		set eilen [string length $errorInfo]
27180		set i [expr {$eilen - $exlen - 1}]
27181		set einfo [string range $errorInfo 0 $i]
27182		#
27183		# For now verify that $errorInfo consists of what we are about
27184		# to return plus what we expected to trim off.
27185		#
27186		if {$errorInfo ne "$einfo$expect"} {
27187		    error "Tcl bug: unexpected stack trace in \"unknown\"" {} \
27188			[list CORE UNKNOWN BADTRACE $expect $errorInfo]
27189		}
27190		return -code error -errorcode $errorCode \
27191			-errorinfo $einfo $msg
27192	    } else {
27193		return -code $code $msg
27194	    }
27195	}
27196    }
27197
27198    if {([info level] == 1) && [string equal [info script] ""] \
27199	    && [info exists tcl_interactive] && $tcl_interactive} {
27200	if {![info exists auto_noexec]} {
27201	    set new [auto_execok $name]
27202	    if {$new != ""} {
27203		set errorCode $savedErrorCode
27204		set errorInfo $savedErrorInfo
27205		set redir ""
27206		if {[string equal [info commands console] ""]} {
27207		    set redir ">&@stdout <@stdin"
27208		}
27209		return [uplevel 1 exec $redir $new [lrange $args 1 end]]
27210	    }
27211	}
27212	set errorCode $savedErrorCode
27213	set errorInfo $savedErrorInfo
27214	if {[string equal $name "!!"]} {
27215	    set newcmd [history event]
27216	} elseif {[regexp {^!(.+)$} $name dummy event]} {
27217	    set newcmd [history event $event]
27218	} elseif {[regexp {^\^([^^]*)\^([^^]*)\^?$} $name dummy old new]} {
27219	    set newcmd [history event -1]
27220	    catch {regsub -all -- $old $newcmd $new newcmd}
27221	}
27222	if {[info exists newcmd]} {
27223	    tclLog $newcmd
27224	    history change $newcmd 0
27225	    return [uplevel 1 $newcmd]
27226	}
27227
27228	set ret [catch {set candidates [info commands $name*]} msg]
27229	if {[string equal $name "::"]} {
27230	    set name ""
27231	}
27232	if {$ret != 0} {
27233	    return -code $ret -errorcode $errorCode \
27234		"error in unknown while checking if \"$name\" is\
27235		a unique command abbreviation:\n$msg"
27236	}
27237	# Filter out bogus matches when $name contained
27238	# a glob-special char [Bug 946952]
27239	set cmds [list]
27240	foreach x $candidates {
27241	    if {[string range $x 0 [expr [string length $name]-1]] eq $name} {
27242		lappend cmds $x
27243	    }
27244	}
27245	if {[llength $cmds] == 1} {
27246	    return [uplevel 1 [lreplace $args 0 0 [lindex $cmds 0]]]
27247	}
27248	if {[llength $cmds]} {
27249	    if {[string equal $name ""]} {
27250		return -code error "empty command name \"\""
27251	    } else {
27252		return -code error \
27253			"ambiguous command name \"$name\": [lsort $cmds]"
27254	    }
27255	}
27256    }
27257    return -code error "invalid command name \"$name\""
27258}
27259proc PostFileMenu {} {
27260    .menubar.file invoke 0
27261}
27262
27263proc PostRegularExpressionMenu {} {
27264    .menubar.file.regexp invoke 0
27265}
27266
27267proc PostTestDataMenu {} {
27268    .menubar.file.tdata invoke 0
27269}
27270
27271proc PostResultsMenu {} {
27272    .menubar.file.results invoke 0
27273}
27274
27275proc PostComparisonDataMenu {} {
27276    .menubar.file.comp invoke 0
27277}
27278
27279proc PostProgramMenu {} {
27280    .menubar.program invoke 0
27281}
27282
27283proc PostHistoryMenu {} {
27284    .menubar.history invoke 0
27285}
27286
27287proc PostToolsMenu {} {
27288    .menubar.tools invoke 0
27289}
27290
27291proc PostConfigureMenu {} {
27292    .menubar.configure invoke 0
27293}
27294
27295proc PostHelpMenu {} {
27296    .menubar.help invoke 0
27297}
27298
27299proc PostCharacterEntryMenu {} {
27300    .menubar.tools.charentry invoke 0
27301}
27302
27303proc PostUserClassMenu {} {
27304    .menubar.tools.classes invoke 0
27305}
27306
27307proc PostFeatureTestingMenu {} {
27308    .menubar.configure.ft invoke 0
27309}
27310
27311proc PostLayoutMenu {} {
27312    .menubar.configure.layout invoke 0
27313}
27314
27315proc PostMiscellaneousMenu {} {
27316    .menubar.configure.misc invoke 0
27317}
27318
27319proc PostProgramSpecificMenu {} {
27320    .menubar.configure.progspec invoke 0
27321}
27322
27323#We need to use different menu entry numbers in Aqua
27324#because unlike the other Tk implementations, Aqua has no tearoffs.
27325#In non-Aqua Tk the tearoff counts as entry 0 when it is present.
27326
27327proc mdo {elnum} {
27328    if {$::AquaP} {
27329	return [expr $elnum -1]
27330    } else {
27331	return $elnum
27332    }
27333}
27334
27335# This procedure relabels the top level menu buttons and destroys and reconstructs
27336# the submenus. The latter is necessary because Tk does not allow the relabelling
27337# of submenus.
27338proc LabelMenus {} {
27339    global m;
27340    global program;
27341    global InterfaceLocale;
27342    global BalloonHelpP;
27343    global LeftImplicitStar;
27344    global RightImplicitStar;
27345    global ButtonName;
27346    global FeatureTestDebugP;
27347    global FocusFollowsMouseP;
27348    global SortUnicodeRangesByCodepointP;
27349    global MenuIndex;
27350    global UserClassPaletteIsDisplayedP;
27351    global CreateFontControlPanelIndex;
27352    global SelectInterfaceLocaleIndex;
27353    global SortUnicodeRangesIndex;
27354    global FocusFollowsMouseIndex;
27355    global PerlUnicodeLocaleDependentIndex;
27356    global BalloonHelpIndex;
27357    global ToggleActualRegexpIndex;
27358    global ShowActualRegexpP;
27359    global DisplayActualRegexpIndex;
27360    global DescribeDisplayActualRegexpIndex;
27361    global ToggleUserClassPaletteIndex;
27362    global DescribeToggleUserClassPaletteIndex;
27363    global ToggleUserClassesEnabledIndex;
27364    global DescribeToggleUserClassesEnabledIndex;
27365    global UserClassesEnabledP;
27366    global SubstitutionModeIndex;
27367    global DoSubstitutionsP;
27368    global OutputOnlyChangedLinesP;
27369    global ComparisonWindowDisplayedP;
27370    global SideBySideLayoutP;
27371    global RegSubSideBySideP;
27372    global UseScrollbarsP;
27373
27374    balloonhelp_control 0;
27375    $m entryconfigure $MenuIndex(FileMenu) -label  [_ "File"];
27376    $m.file delete [mdo 1] [mdo 8]
27377    set ind 0;
27378    destroy $m.file.regexp
27379    $m.file add cascade -label  [_ "Regular Expression"] -menu [menu $m.file.regexp]
27380    if {$::WindowSystem eq "X11"} {
27381	$m.file.regexp add command -label  [_ "Load Regular Expression From Primary Selection"]  \
27382	    -command LoadRegularExpressionFromPrimarySelection
27383    } else {
27384	$m.file.regexp add command -label  [_ "Load Regular Expression From Clipboard"]  \
27385	    -command LoadRegularExpressionFromClipboard;
27386    }
27387    $m.file.regexp add command -label  [_ "Load Regular Expression From File"] \
27388	-command LoadRegularExpressionFromFile;
27389    $m.file.regexp add command -label  [_ "Save Expressions In History Format"] \
27390	-command SaveRegexpAsHistory;
27391    $m.file.regexp add command -label  [_ "Save Regexp As Plain Text"] \
27392	-command SaveRegexpPlain;
27393    $m.file.regexp add command -label  [_ "Save Subexp As Plain Text"]\
27394	-command SaveSubexpPlain;
27395    $m.file.regexp add command -label [_ "Save Regular Expression Actually Executed"]\
27396	-command SaveActualRegexp;
27397    destroy $m.file.tdata
27398    $m.file add cascade -label  [_ "Test Data"] -menu [menu $m.file.tdata]
27399    $m.file.tdata add command -label  [_ "Clear Test Data"] -command ClearInput;
27400    $m.file.tdata add command -label  [_ "Edit Test Data"] -command EditTestInputData;
27401    $m.file.tdata add command -label  [_ "Load Test Data From Clipboard"] \
27402	-command LoadTestDataFromClipboard;
27403    $m.file.tdata add command -label  [_ "Load Test Data From File"] \
27404	-command LoadTestInputData;
27405    $m.file.tdata add command -label  [_ "Save Test Data To File"] \
27406	-command SaveTestInputData
27407    $m.file.tdata add command -label  [_ "Set Test Data Encoding"] \
27408	-command {PopupSelectEncoding TestDataEncoding}
27409    destroy $m.file.results;
27410    $m.file add cascade -label  [_ "Results"] -menu [menu $m.file.results]
27411    $m.file.results add command -label  [_ "Edit Results"] -command EditOutput
27412    $m.file.results add command -label  [_ "Lock Results"] -command LockOutput;
27413    $m.file.results add command -label  [_ "Save Results"] -command SaveResults;
27414    $m.file.results add command -label  [_ "Set Result Encoding"] \
27415	-command {PopupSelectEncoding ResultEncoding}
27416    destroy $m.file.comp
27417    $m.file add cascade -label  [_ "Comparison Data"] -menu [menu $m.file.comp]
27418    $m.file.comp add command -label  [_ "Display Comparison Window"] \
27419	-command ToggleComparisonWindow
27420    set MenuIndex(ToggleComparisonWindow) 1
27421    $m.file.comp add command -label  [_ "Clear Comparison Data"] \
27422	-command ClearOutputComparisonData;
27423    $m.file.comp add command -label  [_ "Edit Comparison Data"] \
27424	-command EditOutputComparisonData;
27425    $m.file.comp add command -label  [_ "Load Comparison Data From Clipboard"] \
27426	-command LoadOutputComparisonDataFromClipboard;
27427    $m.file.comp add command -label  [_ "Load Comparison Data From File"] \
27428	-command LoadOutputComparisonData;
27429    $m.file.comp add command -label  [_ "Set Comparison Data Encoding"] \
27430	-command {PopupSelectEncoding ComparisonDataEncoding}
27431    $m.file.comp add command -label  [_ "Save Comparison Data To File"] \
27432	-command SaveResultsComparisonData;
27433    $m.file.comp add command -label  [_ "Compare Output and Comparison Data"] \
27434	-command ShowDiffResult;
27435    $m.file add command -label  [_ "Move Results to Test Data"] -command MoveResultsToTestData;
27436    $m.file add separator
27437    $m.file add command -label  [_ "Quit"] -command ShutDown;
27438    incr ind;
27439    $m entryconfigure $MenuIndex(ProgramMenu) -label  [_ "Program"];
27440    set ProgramCnt [llength $::DetailedProgList]
27441    $m.program delete [mdo 1] [mdo $ProgramCnt]
27442    set ColumnHeight [expr int(ceil(double($ProgramCnt) / double(4)))]
27443    set k 0;
27444    foreach p $::DetailedProgList {
27445	if {$k % $ColumnHeight == 0} {
27446	    $m.program add command -label $p -command "SelectProgram $p"  -columnbreak 1
27447	} else {
27448	    $m.program add command -label $p -command "SelectProgram $p"
27449	}
27450	incr k
27451    }
27452    if {!$::AquaP} {
27453	$m entryconfigure $MenuIndex(ExecuteMenu) \
27454	    -label  [format [_ "Execute-%s%s%s"] $LeftImplicitStar $ButtonName $RightImplicitStar];
27455    }
27456    $m.history delete [mdo 1] [mdo 5];
27457    $m entryconfigure $MenuIndex(HistoryMenu) -label  [_ "History"];
27458    set ind 1;
27459    set hist::ToggleHistoryIndex $ind;
27460    if {$hist::HistoryIsDisplayedP} {
27461	set blabel [_ "Hide History"];
27462    } else {
27463	set blabel [_ "Popup History"];
27464    }
27465    $m.history add command -label $blabel -command {hist::ToggleHistory};
27466    incr ind;
27467    if {$hist::HistoryShowProgP} {
27468	set blabel [_ "Do Not Show Program"];
27469    } else {
27470	set blabel [_ "Show Program"];
27471    }
27472    set hist::HistoryShowProgIndex $ind;
27473    $m.history add command -label $blabel -command {hist::ToggleHistoryProgramDisplay};
27474    incr ind;
27475    $m.history add command -label [_ "Save History"] -command {hist::SaveHistoryList};
27476    incr ind;
27477    $m.history add command -label [_ "Prune History"] -command {hist::PruneHistoryList};
27478    incr ind;
27479    $m.history add command -label [_ "Clear History"] -command {hist::ClearHistoryList};
27480    incr ind;
27481    if {!$::AquaP} {
27482	$m entryconfigure $MenuIndex(ClearMenu) -label  [_ "Clear"];
27483	$m entryconfigure $MenuIndex(PaletteMenu) -label  [_ "Palette"];
27484    } else {
27485	.cmnds.clear configure -text [_ "Clear"];
27486	.cmnds.palette configure -text [_ "Palette"];
27487    }
27488    $m entryconfigure $MenuIndex(ToolsMenu) -label  [_ "Tools"];
27489    $m.tools delete [mdo 1] [mdo 7];
27490
27491    destroy $m.tools.charentry;
27492    $m.tools add cascade -label [_ "Character Entry"] -menu [menu $m.tools.charentry];
27493    $m.tools.charentry delete [mdo 1] [mdo $::CharentryMenuItems];
27494    set ::CharacterEntryMenuItems 0;
27495
27496    incr ::CharacterEntryMenuItems;
27497    set ::CustomCharacterChartIndex $::CharacterEntryMenuItems;
27498    $m.tools.charentry add command -label [_ "Load Custom Character Chart Definition"] \
27499	-command ReadCustomCharacterChartPopup;
27500
27501    incr ::CharacterEntryMenuItems;
27502    set ::ToggleIPAAIndex $::CharacterEntryMenuItems;
27503    $m.tools.charentry add command -label [_ "Display Accented Letter Chart"] -command ToggleIPAA;
27504
27505    incr ::CharacterEntryMenuItems;
27506    set ::ToggleIPACIndex $::CharacterEntryMenuItems;
27507    $m.tools.charentry add command -label [_ "Display IPA Consonants"] -command ToggleIPAC;
27508
27509    incr ::CharacterEntryMenuItems;
27510    set ::ToggleIPAVIndex $::CharacterEntryMenuItems;
27511    $m.tools.charentry add command -label [_ "Display IPA Vowel Chart"] -command ToggleIPAV;
27512
27513    incr ::CharacterEntryMenuItems;
27514    set ::ToggleIPADIndex $::CharacterEntryMenuItems;
27515    $m.tools.charentry add command -label [_ "Display IPA Diacritics"] -command ToggleIPAD;
27516
27517    incr ::CharacterEntryMenuItems;
27518    set ::ToggleCharEntryByCodeIndex $::CharacterEntryMenuItems;
27519    $m.tools.charentry add command -label \
27520	[_ "Display Widget for Entering Characters by Unicode Code"] \
27521	-command ToggleCharEntryByCode;
27522
27523    foreach Title [lsort [array names ::SpecialCharacterPalette]] {
27524	if {[string match *WidgetName $Title]} {continue}
27525	$::CEM add command -label $Title -command "PopupSpecialPalette $Title";
27526	incr ::CharacterEntryMenuItems;
27527    }
27528
27529    destroy $m.tools.classes
27530    $m.tools add cascade -label [_ "Classes"] -menu [menu $m.tools.classes];
27531    $m.tools.classes delete [mdo 1] [mdo 9];
27532    set ind 1;
27533    if {$ShowActualRegexpP} {
27534	set blabel [_ "Do Not Display Regular Expression Actually Executed"];
27535    } else {
27536	set blabel [_ "Display Regular Expression Actually Executed"];
27537    }
27538    set DisplayActualRegexpIndex $ind;
27539    $m.tools.classes add command -label  $blabel -command ToggleActualRegexp;
27540    incr ind;
27541
27542    $m.tools.classes add command -label [_ "Save Regular Expression Actually Executed"] -command SaveActualRegexp;
27543    incr ind;
27544
27545    if {$UserClassPaletteIsDisplayedP} {
27546	set blabel [_ "Do Not Display User-Defined Class Palette"];
27547    } else {
27548	set blabel [_ "Display User-Defined Class Palette"];
27549    }
27550    $m.tools.classes add command -label $blabel -command ToggleUserClassPalette;
27551    set ToggleUserClassPaletteIndex $ind;
27552
27553    incr ind;
27554    if {$UserClassesEnabledP} {
27555	set blabel [_ "Disable User Classes"];
27556    } else {
27557	set blabel [_ "Enable User Classes"];
27558    }
27559    $m.tools.classes add command -label $blabel -command ToggleUserClassesEnabled;
27560    set ToggleUserClassesEnabledIndex $ind;
27561
27562    incr ind;
27563    $m.tools.classes add command -label  [_ "Enter Character Class Definition"] \
27564	-command PopupUserClassEntry;
27565    set EnterCharacterClassDefinitionIndex $ind;
27566
27567    incr ind;
27568    $m.tools.classes add command -label  [_ "Load Character Class Definitions"] \
27569	-command ReadUserClassesInteractively;
27570    set LoadCharacterClassDefinitionIndex $ind;
27571
27572    incr ind;
27573    $m.tools.classes add command -label  [_ "Save Character Class Definitions to File"] \
27574	-command SaveUserClassDefinitions;
27575    set SaveCharacterClassDefinitionIndex $ind;
27576
27577    incr ind;
27578    $m.tools.classes add separator
27579
27580    incr ind;
27581    $m.tools.classes add command -label [_ "Clear User Classes"]  -command ClearUserClasses;
27582
27583    destroy $m.tools.search
27584    $m.tools add cascade -label [_ "Search"] -menu [menu $m.tools.search];
27585    $m.tools.search delete [mdo 1] [mdo 4]
27586    $m.tools.search add command -label  [_ "Search Test Data"] \
27587	-command search::SearchTestData
27588    $m.tools.search add command -label  [_ "Search Results"] \
27589	-command search::SearchResults;
27590    $m.tools.search add command -label  [_ "Go to Character in Test Data"] \
27591	-command search::GotoCharTestData
27592    $m.tools.search add command -label  [_ "Go to Character in Results"] \
27593	-command search::GotoCharResults;
27594    $m.tools add command -label [_ "Result Cache"] -command {resc::PopupCachedEntries}
27595    $m.tools add command -label [_ "Save Command Information"] -command {SaveCommandInfo}
27596    $m.tools add command -label [_ "Show Command Line"] -command {ShowCommandLine}
27597    $m.tools add command -label [_ "Abort"] -command {AbortSearch}
27598    $m entryconfigure $MenuIndex(ConfigureMenu) -label  [_ "Configure"];
27599    $m.configure delete [mdo 1] [mdo 12];
27600    set ind 1;
27601    destroy $m.configure.charentry
27602    $m.configure add cascade -label [_ "Character Entry"] -menu [menu $m.configure.charentry]
27603    incr ind;
27604    $m.configure.charentry delete [mdo 1]  [mdo 4];
27605    $m.configure.charentry add checkbutton -label [_ "Display Consonant Chart Column Labels"] \
27606	-variable DisplayConsonantChartColumnLabelsP -onvalue 1 -offvalue 0 \
27607	-command ControlDisplayConsonantChartColumnLabels
27608    $m.configure.charentry add checkbutton -label [_ "Display Consonant Chart Row Labels"] \
27609	-variable DisplayConsonantChartRowLabelsP -onvalue 1 -offvalue 0 \
27610	-command ControlDisplayConsonantChartRowLabels
27611    $m.configure.charentry add checkbutton -label [_ "Display Vowel Chart Column Labels"] \
27612	-variable DisplayVowelChartColumnLabelsP -onvalue 1 -offvalue 0 \
27613	-command ControlDisplayVowelChartColumnLabels
27614    $m.configure.charentry add checkbutton -label [_ "Display Vowel Chart Row Labels"] \
27615	-variable DisplayVowelChartRowLabelsP -onvalue 1 -offvalue 0 \
27616	-command ControlDisplayVowelChartRowLabels
27617
27618    destroy $m.configure.ft
27619    $m.configure add cascade -label [_ "Feature Testing"] -menu [menu $m.configure.ft];
27620    incr ind;
27621    $m.configure.ft delete [mdo 1]  [mdo 3];
27622    set ftind 1;
27623
27624    $m.configure.ft add command -label  [_ "Test Features"] -command TestFeatures;
27625    incr ftind;
27626    $m.configure.ft add command -label  [_ "Read Feature List"] \
27627	-command ReadFeatureList;
27628    incr ftind;
27629    $m.configure.ft add command -label  [_ "Write Feature List to File"] \
27630	-command {DumpFeatures $program $InterfaceLocale};
27631    incr ftind;
27632
27633    $m.configure.ft add checkbutton -label [_ "Feature Testing Enabled"] \
27634	-variable FeatureTestP -onvalue 1 -offvalue 0
27635
27636    $m.configure.ft add checkbutton -label [_ "Feature Test Debugging Enabled"] \
27637	-variable FeatureTestDebugP -onvalue 1 -offvalue 0
27638
27639    destroy $m.configure.layout
27640    $m.configure add cascade  -label [_ "Layout"] -menu [menu $m.configure.layout]
27641    incr ind;
27642
27643    $m.configure.layout add checkbutton -label [_ "Link Mode and Layout"] \
27644	-variable StandardConfigurationP -onvalue 1 -offvalue 0 \
27645	-command {if {$::StandardConfigurationP} { GotoStandardLayout}}
27646
27647    $m.configure.layout add checkbutton -label [_ "Text Windows Side-By-Side"] \
27648	-variable SideBySideLayoutP -onvalue 1 -offvalue 0 \
27649	-command LayoutWindows
27650
27651    $m.configure.layout add checkbutton -label [_ "Regexp and Subexp Side-By-Side"]\
27652	-variable RegSubSideBySideP -onvalue 1 -offvalue 0 \
27653	-command LayoutWindows;
27654
27655    $m.configure.layout add checkbutton -label [_ "Use Scrollbars"] \
27656	-variable UseScrollbarsP -onvalue 1 -offvalue 0 \
27657	-command UpdateScrollbars;
27658
27659    destroy $m.configure.misc
27660    $m.configure add cascade -label [_ "Miscellaneous"] -menu [menu $m.configure.misc]
27661    incr ind;
27662
27663    $m.configure.misc add checkbutton -label [_ "Autoclear Regular Expression"] \
27664	-variable AutoClearRegexpP -onvalue 1 -offvalue 0
27665
27666    $m.configure.misc add checkbutton -label [_ "Focus Follows Mouse"] \
27667	-variable FocusFollowsMouseP -onvalue 1 -offvalue 0 \
27668	-command {if {$::FocusFollowsMouseP} {tk_focusFollowsMouse}}
27669
27670    $m.configure.misc add checkbutton -label [_ "On Substitution Output Only Changed Lines"] \
27671	-variable OutputOnlyChangedLinesP -onvalue 1 -offvalue 0 \
27672	-command InOutScrollLinkage
27673
27674    $m.configure.misc add checkbutton -label [_ "Order Unicode Ranges by Codepoint"] \
27675	-variable SortUnicodeRangesByCodepointP  -onvalue 1 -offvalue 0 \
27676	-command UpdateUnicodeRangeSort;
27677
27678    $m.configure.misc add checkbutton -label [_ "Set Debug Flag"] \
27679	-variable DebugP -onvalue 1 -offvalue 0;
27680
27681    $m.configure.misc add checkbutton -label [_ "Show Balloon Help"] \
27682	-variable BalloonHelpP -onvalue 1 -offvalue 0 \
27683	-command {balloonhelp_control $::BalloonHelpP}
27684
27685    destroy $m.configure.progspec
27686    $m.configure add cascade -label [_ "Program Specific Features"] \
27687	-menu [menu $m.configure.progspec];
27688    incr ind;
27689    $m.configure.progspec add command -label  [_ "Agrep"] -command PopupAgrepControls
27690    $m.configure.progspec add command -label  [_ "Arena"] -command PopupArenaControls
27691    $m.configure.progspec add command -label  [_ "Bash"] -command PopupBashControls
27692    $m.configure.progspec add command -label  [_ "BusyBoxEgrep"] -command PopupBusyBoxEgrepControls
27693    $m.configure.progspec add command -label  [_ "Cgrep"] -command PopupCgrepControls
27694    $m.configure.progspec add command -label  [_ "Egrep"] -command PopupEgrepControls
27695    $m.configure.progspec add command -label  [_ "Emacs"] -command PopupEmacsControls
27696    $m.configure.progspec add command -label  [_ "Fgrep"] -command PopupFgrepControls
27697    $m.configure.progspec add command -label  [_ "Gawk"] -command PopupGawkControls
27698    $m.configure.progspec add command -label  [_ "Glark"] -command PopupGlarkControls
27699    $m.configure.progspec add command -label  [_ "Grep"] -command PopupGrepControls
27700    $m.configure.progspec add command -label  [_ "Ici"] -command PopupIciControls
27701    $m.configure.progspec add command -label  [_ "Java"] -command PopupJavaControls
27702    $m.configure.progspec add command -label  [_ "Jgrep"] -command PopupJgrepControls
27703    $m.configure.progspec add command -label  [_ "Mysql"] -command PopupMysqlControls \
27704	-columnbreak 1
27705    $m.configure.progspec add command -label  [_ "Nrgrep"] -command PopupNrgrepControls
27706    $m.configure.progspec add command -label  [_ "Numgrep"] -command PopupNumgrepControls
27707    $m.configure.progspec add command -label  [_ "Patmatch"] -command PopupPatmatchControls
27708    $m.configure.progspec add command -label  [_ "Perl"] -command PopupPerlControls
27709    $m.configure.progspec add command -label  [_ "Python"] -command PopupPythonControls
27710    $m.configure.progspec add command -label  [_ "Sed"] -command PopupSedControls
27711    $m.configure.progspec add command -label  [_ "Ssed"] -command PopupSsedControls
27712    $m.configure.progspec add command -label  [_ "Tcl"] -command PopupTclControls
27713    $m.configure.progspec add command -label  [_ "Tr"] -command PopupTrControls
27714    $m.configure.progspec add command -label  [_ "Vim"] -command PopupVimControls
27715    $m.configure.progspec add command -label  [_ "Zsh"] -command PopupZshControls
27716    $m.configure add separator
27717    incr ind;
27718
27719    set SubstitutionModeIndex $ind;
27720    if {$DoSubstitutionsP == 0} {
27721	set blabel [_ "Change to Substitution Mode"];
27722    } else {
27723	set blabel [_ "Change to Match Mode"];
27724    }
27725    $m.configure add command -label $blabel  -command ToggleSubstitutionMode;
27726    incr ind;
27727
27728    $m.configure add command -label [_ "Save Configuration"] -command {SaveState};
27729    incr ind;
27730
27731    $m.configure add separator
27732    incr ind;
27733
27734    set CreateFontControlPanelIndex $ind;
27735    $m.configure add command -label [_ "Select Font"] -command fontsel::CreateFontControlPanel;
27736    incr ind;
27737
27738    set SelectInterfaceLocaleIndex $ind;
27739    $m.configure add command -label  [_ "Select Locale"] -command ChangeInterfaceLocale;
27740
27741    $m entryconfigure 9 -label  [_ "Help"];
27742#Help Menu
27743    if {[string equal $::System MacOSX]} {
27744	$m.help delete [mdo 1] [mdo 15];
27745    } else {
27746	$m.help delete [mdo 1] [mdo 14];
27747    }
27748    set ind 1;
27749    $m.help add command -label [_ "About"] -command About;
27750    $m.help add command -label [_ "Bug Reports"] -command BugReports;
27751    $m.help add command -label [_ "Command Descriptions"] -command \
27752	{ShowWebPage [file join ${::ManualDirectory} comdesc.html]}
27753    $m.help add command -label [_ "Command Line Options"] -command CommandLineOptions;
27754    $m.help add command -label [_ "Description"] -command Description;
27755    $m.help add command -label [_ "Illustrated Web Manual"] -command WebManual;
27756    destroy $m.help.ifc
27757    $m.help add cascade -label [_ "Initialization File"] -menu [menu $m.help.ifc];
27758    $m.help.ifc add command -label [_ "Color Names"] -command PopupColorNameList;
27759    $m.help.ifc add command -label [_ "Commands for which Shortcuts may be Defined "] \
27760	-command PopupShortcutCommands
27761    $m.help.ifc add command -label [_ "Redet Commands - Popup"] -command PopupInitCommandList;
27762    $m.help.ifc add command -label [_ "Redet Commands - Save to File"] -command SaveInitCommands;
27763    $m.help.ifc add command -label [_ "Tcl Commands - Popup"] -command PopupInitTclCommandList;
27764    $m.help.ifc add command -label [_ "Tcl Commands - Save to File"] -command SaveInitTclCommands;
27765    $m.help add command -label [_ "Key Bindings"] -command DescribeKeyBindings;
27766    $m.help add command -label [_ "License"] -command ShowGPL;
27767    if {[string equal $::System MacOSX]} {
27768	$m.help add command -label [_ "Macintosh Notes"] -command MacintoshNotes;
27769    }
27770    $m.help add command -label [_ "Programs"] -command DescribePrograms;
27771    $m.help add command -label [_ "This Program"] -command PopupProgramInfo;
27772    $m.help add command -label [_ "Unicode General Character Properties"] -command ShowUnicodeGCP;
27773    $m.help add command -label [_ "Unicode Ranges"] -command ShowUnicodeRanges;
27774    $m.help add command -label [_ "Write Palette to File"] -command WritePaletteToFile
27775
27776    if {[winfo exists .hl]} {
27777	if {[winfo exists $::HISTF.hlist]} {
27778	    if {[winfo exists $::HISTF.histtitle]} {
27779		$::HISTF.histtitle configure -text [_ "History List"];
27780	    }
27781	}
27782    }
27783    if {$BalloonHelpP} {balloonhelp_control 1}
27784}
27785
27786#Create GUI
27787#Real frames
27788#Top one, for regular expression and substitution expression windows.
27789frame .rsf  -width $MainWidth  -height 3 -borderwidth 0 -relief sunken;
27790#Lower one, for data windows, that is, test data, result, and comparison data.
27791frame .dwf  -width $MainWidth  -height 0 -borderwidth 0 -relief sunken;
27792#These are used in vertical mode for pairs of windows and scrollbars
27793frame .dwf.vwi  -width $MainWidth  -height 0 -borderwidth 0
27794frame .dwf.vwo  -width $MainWidth  -height 0 -borderwidth 0
27795frame .dwf.vwc  -width $MainWidth  -height 0 -borderwidth 0
27796#Separators
27797frame .sep1 -width $MainWidth -height 2 -borderwidth 1 -relief sunken
27798frame .sep2 -width $MainWidth -height 2 -borderwidth 1 -relief sunken
27799frame .sep3 -width $MainWidth -height 2 -borderwidth 1 -relief sunken
27800#The quasi-menu
27801if {$AquaP} {
27802    frame .cmnds
27803    button .cmnds.execute -text [format [_ "Execute-%s"] $Program] -command ExecuteRegexp \
27804	-bg $::ColorSpecs(Menubar,Background) -fg $::ColorSpecs(Menubar,Foreground)
27805    button .cmnds.clear -text [format [_ "Clear"] $Program] -command ClearRegexp \
27806	-bg $::ColorSpecs(Menubar,Background) -fg $::ColorSpecs(Menubar,Foreground)
27807    button .cmnds.palette -text [format [_ "Palette"] $Program] -command TogglePalette \
27808	-bg $::ColorSpecs(Menubar,Background) -fg $::ColorSpecs(Menubar,Foreground)
27809    pack .cmnds.execute -side left -expand 1 -fill both
27810    pack .cmnds.clear -side left -expand 1 -fill both
27811    pack .cmnds.palette -side left -expand 1 -fill both
27812    BindKeys .cmnds
27813    frame .sepcmnds -width $MainWidth -height 2 -borderwidth 1 -relief sunken
27814}
27815#The message window.
27816text .msg -width $MainWidth -bg $ColorSpecs(Messages,Background) -fg $ColorSpecs(Messages,Foreground) -height 1\
27817    -relief raised -font MainFont -exportselection 1
27818#The regular expression and substitution expression windows.
27819entry .rsf.re -width $MainWidth -bg $ColorSpecs(Regexp,Background) -fg $ColorSpecs(Regexp,Foreground)\
27820    -font RegexpFont -exportselection 1;
27821entry .rsf.sub -width $MainWidth -bg $ColorSpecs(Subexp,Background) -fg $ColorSpecs(Subexp,Foreground)\
27822    -font RegexpFont -exportselection 1;
27823#The three data windows.
27824text $::IND  -width $SideWidth -bg $ColorSpecs(TestData,Background) -fg $ColorSpecs(TestData,Foreground)\
27825    -height $MainHeight -font TextFont -exportselection 1  -yscrollcommand {$::INDSB set}
27826text $::OUT -width $SideWidth  -bg $ColorSpecs(Results,Background) -fg $ColorSpecs(Results,Foreground)\
27827    -height $MainHeight -font TextFont -exportselection 1 -yscrollcommand {$::OUTSB set}
27828text $::COM -width $MainWidth -bg $ColorSpecs(ComparisonData,Background) -fg $ColorSpecs(ComparisonData,Foreground)\
27829    -height $MainHeight -font TextFont -exportselection 1 -yscrollcommand {$::COMSB set};
27830#The scrollbars for the data windows.
27831scrollbar $::INDSB -bg $ColorSpecs(TestData,Background) -troughcolor $ColorSpecs(TestData,Background) -command {$::IND yview}
27832scrollbar $::OUTSB -bg $ColorSpecs(Results,Background) -troughcolor $ColorSpecs(Results,Background) -command {$::OUT yview}
27833scrollbar $::COMSB -bg $ColorSpecs(ComparisonData,Background) -troughcolor $ColorSpecs(ComparisonData,Background) -command {$::COMo yview}
27834
27835LayoutWindows;
27836set InsertionTarget $::REG;
27837bind $::REG <FocusIn> "SetInsertionTargets $::REG"
27838bind $::SUB <FocusIn> "SetInsertionTargets $::SUB"
27839bind $::IND <FocusIn> "SetInsertionTargets $::IND"
27840bind $::OUT <FocusIn> "SetInsertionTargets $::OUT";
27841bind $::COM <FocusIn> "SetInsertionTargets $::COM"
27842
27843bind $::INDSB <<B3>> {ScrollbarMoveBigIncrement $::INDSB 0.10 %x %y};
27844bind $::OUTSB <<B3>> {ScrollbarMoveBigIncrement $::OUTSB 0.10 %x %y};
27845bind $::COMSB <<B3>> {ScrollbarMoveBigIncrement $::COMSB 0.10 %x %y};
27846
27847BindKeys .msg;
27848BindKeys $::REG;
27849BindKeys $::SUB;
27850BindKeys $::IND;
27851BindKeys $::OUT;
27852BindKeys $::COM;
27853bind $::SUB <Return> {ExecuteRegexp};
27854bind $::REG <Tab> {$::REG  insert insert "\t";break;}; #Allow entry of literal tab.
27855bind $::SUB <Tab> {$::SUB insert insert "\t";break;}; #Allow entry of literal tab.
27856
27857.msg  configure -state disabled
27858$::COM configure -state disabled
27859$::OUT  configure -state disabled
27860$::IND   configure -state disabled
27861
27862balloonhelp_for .msg  [_ "Messages from program appear here."]
27863balloonhelp_for $::REG  [_ "Assemble regular expression here."]
27864balloonhelp_for $::SUB  [_ "Assemble substitution expression here."]
27865balloonhelp_for $::IND  [_ "Data on which to run regexp"]
27866balloonhelp_for $::OUT  [_ "Result of execution of regexp"]
27867balloonhelp_for $::COM [_ "Data to be compared to result of execution of regexp"]
27868
27869#Setup menubar
27870
27871set m [menu .menubar -tearoff 0 -font MenuFont \
27872       -bg $ColorSpecs(Menubar,Background) \
27873       -fg $ColorSpecs(Menubar,Foreground) \
27874       -activebackground $ColorSpecs(Menubar,ActiveBackground)\
27875       -activeforeground $ColorSpecs(Menubar,ActiveForeground)]
27876BindKeys .menubar;
27877set MenuBarItemCnt -1;
27878$m add cascade -label [_ "File"]   -menu [menu $m.file]
27879incr MenuBarItemCnt;
27880set MenuIndex(FileMenu) $MenuBarItemCnt;
27881$m add cascade -label [_ "Program"] -menu [menu $m.program];
27882incr MenuBarItemCnt;
27883set MenuIndex(ProgramMenu) $MenuBarItemCnt;
27884if {!$AquaP} {
27885    $m add command -label [format [_ "Execute-%s"] $Program]  -command ExecuteRegexp;
27886    incr MenuBarItemCnt;
27887    set MenuIndex(ExecuteMenu) $MenuBarItemCnt;
27888}
27889$m add cascade -label [_ "History"] -menu [menu $m.history];
27890incr MenuBarItemCnt;
27891set MenuIndex(HistoryMenu) $MenuBarItemCnt;
27892if {!$AquaP} {
27893    $m add command -label [_ "Clear"] -command ClearRegexp;
27894    incr MenuBarItemCnt;
27895    set MenuIndex(ClearMenu) $MenuBarItemCnt;
27896    $m add command -label [_ "Palette"] -command TogglePalette;
27897    incr MenuBarItemCnt;
27898    set MenuIndex(PaletteMenu) $MenuBarItemCnt;
27899}
27900$m add cascade -label [_ "Tools"] -menu [menu $m.tools]
27901incr MenuBarItemCnt;
27902set MenuIndex(ToolsMenu) $MenuBarItemCnt;
27903$m add cascade -label [_ "Configure"] -menu [menu $m.configure]
27904incr MenuBarItemCnt;
27905set MenuIndex(ConfigureMenu) $MenuBarItemCnt;
27906$m add cascade -label [_ "Help"] -menu [menu $m.help]
27907incr MenuBarItemCnt;
27908set MenuIndex(HelpMenu) $MenuBarItemCnt;
27909LabelMenus;
27910. configure -menu .menubar
27911CheckProgramAvailability
27912MarkProgramAvailability;
27913trace add variable ProgramInfo(cgrep,ExtendedP) write {TestFeatures;ConstructPalette;nil}
27914
27915#Its okay to use the toggle since we can be sure that we are
27916#starting out in match mode.
27917if {$BeginInSubstitutionModeP} {
27918    ToggleSubstitutionMode;
27919}
27920
27921#Its easiest if we create the emacs command shell whether or not we're going to use emacs.
27922CreateEmacsWrapper;
27923
27924dmsg "About to read history file";
27925
27926#Read history file.
27927if {$ReadHistoryFileP} {
27928    if { [file exists $HistoryFile] } {
27929	hist::ReadHistoryFile $HistoryFile;
27930    } else {
27931	set HistoryFullPath [file join $HomeDir $HistoryFile];
27932	if { [file exists $HistoryFullPath] } {hist::ReadHistoryFile $HistoryFullPath}
27933    }
27934}
27935
27936#If a file named "Regexp" exists, read its contents into the history list.
27937if { [file exists "Regexp"] } {
27938    hist::ReadHistoryFile Regexp;
27939}
27940
27941#We want the default browser to be set before this code is executed.
27942#If the default browser is on the list, remove it.
27943set di [lsearch -exact $BrowserList $DefaultBrowser]
27944if {$di >= 0} {
27945    set BrowserList [lreplace $BrowserList $di $di]
27946}
27947#Add the default browser to the beginning of the list.
27948set BrowserList [linsert $BrowserList 0 $DefaultBrowser];
27949
27950foreach fn $CustomCharacterChartFileNameList {
27951    wm withdraw [ReadCustomCharacterChartPopup $fn]
27952}
27953foreach dl $CustomCharacterChartDataList {
27954    wm withdraw [DefineCustomCharacterChartPopup $dl]
27955}
27956
27957set InitialProgram $program;
27958hist::OpenHistoryFile; #For writing now;
27959SetRegReturnBinding;
27960search::SearchInitialize $::IND;
27961search::SearchInitialize $::OUT;
27962SetPalette;
27963trace add variable ProgramInfo(perl,UnicodeLocaleDependentP) write PerlUnicodeDepUpdate;
27964trace add variable ProgramInfo(ssed,RegexpType) write UpdateSsedPalette
27965trace add variable ProgramInfo(ssed,POSIX) write UpdateSsedPalette
27966
27967
27968dmsg "About to create UName array";
27969#Derived from Unicode 5.1.0 UnicodeData.txt.
27970array set UName {
27971\u0000 "NULL"
27972\u0001 "START OF HEADING"
27973\u0002 "START OF TEXT"
27974\u0003 "END OF TEXT"
27975\u0004 "END OF TRANSMISSION"
27976\u0005 "ENQUIRY"
27977\u0006 "ACKNOWLEDGE"
27978\u0007 "BELL"
27979\u0008 "BACKSPACE"
27980\u0009 "CHARACTER TABULATION"
27981\u000A "LINE FEED (LF)"
27982\u000B "LINE TABULATION"
27983\u000C "FORM FEED (FF)"
27984\u000D "CARRIAGE RETURN (CR)"
27985\u000E "SHIFT OUT"
27986\u000F "SHIFT IN"
27987\u0010 "DATA LINK ESCAPE"
27988\u0011 "DEVICE CONTROL ONE"
27989\u0012 "DEVICE CONTROL TWO"
27990\u0013 "DEVICE CONTROL THREE"
27991\u0014 "DEVICE CONTROL FOUR"
27992\u0015 "NEGATIVE ACKNOWLEDGE"
27993\u0016 "SYNCHRONOUS IDLE"
27994\u0017 "END OF TRANSMISSION BLOCK"
27995\u0018 "CANCEL"
27996\u0019 "END OF MEDIUM"
27997\u001A "SUBSTITUTE"
27998\u001B "ESCAPE"
27999\u001C "INFORMATION SEPARATOR FOUR"
28000\u001D "INFORMATION SEPARATOR THREE"
28001\u001E "INFORMATION SEPARATOR TWO"
28002\u001F "INFORMATION SEPARATOR ONE"
28003\u0020 "SPACE"
28004\u0021 "EXCLAMATION MARK"
28005\u0022 "QUOTATION MARK"
28006\u0023 "NUMBER SIGN"
28007\u0024 "DOLLAR SIGN"
28008\u0025 "PERCENT SIGN"
28009\u0026 "AMPERSAND"
28010\u0027 "APOSTROPHE"
28011\u0028 "LEFT PARENTHESIS"
28012\u0029 "RIGHT PARENTHESIS"
28013\u002A "ASTERISK"
28014\u002B "PLUS SIGN"
28015\u002C "COMMA"
28016\u002D "HYPHEN-MINUS"
28017\u002E "FULL STOP"
28018\u002F "SOLIDUS"
28019\u0030 "DIGIT ZERO"
28020\u0031 "DIGIT ONE"
28021\u0032 "DIGIT TWO"
28022\u0033 "DIGIT THREE"
28023\u0034 "DIGIT FOUR"
28024\u0035 "DIGIT FIVE"
28025\u0036 "DIGIT SIX"
28026\u0037 "DIGIT SEVEN"
28027\u0038 "DIGIT EIGHT"
28028\u0039 "DIGIT NINE"
28029\u003A "COLON"
28030\u003B "SEMICOLON"
28031\u003C "LESS-THAN SIGN"
28032\u003D "EQUALS SIGN"
28033\u003E "GREATER-THAN SIGN"
28034\u003F "QUESTION MARK"
28035\u0040 "COMMERCIAL AT"
28036\u0041 "LATIN CAPITAL LETTER A"
28037\u0042 "LATIN CAPITAL LETTER B"
28038\u0043 "LATIN CAPITAL LETTER C"
28039\u0044 "LATIN CAPITAL LETTER D"
28040\u0045 "LATIN CAPITAL LETTER E"
28041\u0046 "LATIN CAPITAL LETTER F"
28042\u0047 "LATIN CAPITAL LETTER G"
28043\u0048 "LATIN CAPITAL LETTER H"
28044\u0049 "LATIN CAPITAL LETTER I"
28045\u004A "LATIN CAPITAL LETTER J"
28046\u004B "LATIN CAPITAL LETTER K"
28047\u004C "LATIN CAPITAL LETTER L"
28048\u004D "LATIN CAPITAL LETTER M"
28049\u004E "LATIN CAPITAL LETTER N"
28050\u004F "LATIN CAPITAL LETTER O"
28051\u0050 "LATIN CAPITAL LETTER P"
28052\u0051 "LATIN CAPITAL LETTER Q"
28053\u0052 "LATIN CAPITAL LETTER R"
28054\u0053 "LATIN CAPITAL LETTER S"
28055\u0054 "LATIN CAPITAL LETTER T"
28056\u0055 "LATIN CAPITAL LETTER U"
28057\u0056 "LATIN CAPITAL LETTER V"
28058\u0057 "LATIN CAPITAL LETTER W"
28059\u0058 "LATIN CAPITAL LETTER X"
28060\u0059 "LATIN CAPITAL LETTER Y"
28061\u005A "LATIN CAPITAL LETTER Z"
28062\u005B "LEFT SQUARE BRACKET"
28063\u005C "REVERSE SOLIDUS"
28064\u005D "RIGHT SQUARE BRACKET"
28065\u005E "CIRCUMFLEX ACCENT"
28066\u005F "LOW LINE"
28067\u0060 "GRAVE ACCENT"
28068\u0061 "LATIN SMALL LETTER A"
28069\u0062 "LATIN SMALL LETTER B"
28070\u0063 "LATIN SMALL LETTER C"
28071\u0064 "LATIN SMALL LETTER D"
28072\u0065 "LATIN SMALL LETTER E"
28073\u0066 "LATIN SMALL LETTER F"
28074\u0067 "LATIN SMALL LETTER G"
28075\u0068 "LATIN SMALL LETTER H"
28076\u0069 "LATIN SMALL LETTER I"
28077\u006A "LATIN SMALL LETTER J"
28078\u006B "LATIN SMALL LETTER K"
28079\u006C "LATIN SMALL LETTER L"
28080\u006D "LATIN SMALL LETTER M"
28081\u006E "LATIN SMALL LETTER N"
28082\u006F "LATIN SMALL LETTER O"
28083\u0070 "LATIN SMALL LETTER P"
28084\u0071 "LATIN SMALL LETTER Q"
28085\u0072 "LATIN SMALL LETTER R"
28086\u0073 "LATIN SMALL LETTER S"
28087\u0074 "LATIN SMALL LETTER T"
28088\u0075 "LATIN SMALL LETTER U"
28089\u0076 "LATIN SMALL LETTER V"
28090\u0077 "LATIN SMALL LETTER W"
28091\u0078 "LATIN SMALL LETTER X"
28092\u0079 "LATIN SMALL LETTER Y"
28093\u007A "LATIN SMALL LETTER Z"
28094\u007B "LEFT CURLY BRACKET"
28095\u007C "VERTICAL LINE"
28096\u007D "RIGHT CURLY BRACKET"
28097\u007E "TILDE"
28098\u007F "DELETE"
28099\u0080 "unspecified control character"
28100\u0081 "unspecified control character"
28101\u0082 "BREAK PERMITTED HERE"
28102\u0083 "NO BREAK HERE"
28103\u0084 "unspecified control character"
28104\u0085 "NEXT LINE (NEL)"
28105\u0086 "START OF SELECTED AREA"
28106\u0087 "END OF SELECTED AREA"
28107\u0088 "CHARACTER TABULATION SET"
28108\u0089 "CHARACTER TABULATION WITH JUSTIFICATION"
28109\u008A "LINE TABULATION SET"
28110\u008B "PARTIAL LINE FORWARD"
28111\u008C "PARTIAL LINE BACKWARD"
28112\u008D "REVERSE LINE FEED"
28113\u008E "SINGLE SHIFT TWO"
28114\u008F "SINGLE SHIFT THREE"
28115\u0090 "DEVICE CONTROL STRING"
28116\u0091 "PRIVATE USE ONE"
28117\u0092 "PRIVATE USE TWO"
28118\u0093 "SET TRANSMIT STATE"
28119\u0094 "CANCEL CHARACTER"
28120\u0095 "MESSAGE WAITING"
28121\u0096 "START OF GUARDED AREA"
28122\u0097 "END OF GUARDED AREA"
28123\u0098 "START OF STRING"
28124\u0099 "unspecified control character"
28125\u009A "SINGLE CHARACTER INTRODUCER"
28126\u009B "CONTROL SEQUENCE INTRODUCER"
28127\u009C "STRING TERMINATOR"
28128\u009D "OPERATING SYSTEM COMMAND"
28129\u009E "PRIVACY MESSAGE"
28130\u009F "APPLICATION PROGRAM COMMAND"
28131\u00A0 "NO-BREAK SPACE"
28132\u00A1 "INVERTED EXCLAMATION MARK"
28133\u00A2 "CENT SIGN"
28134\u00A3 "POUND SIGN"
28135\u00A4 "CURRENCY SIGN"
28136\u00A5 "YEN SIGN"
28137\u00A6 "BROKEN BAR"
28138\u00A7 "SECTION SIGN"
28139\u00A8 "DIAERESIS"
28140\u00A9 "COPYRIGHT SIGN"
28141\u00AA "FEMININE ORDINAL INDICATOR"
28142\u00AB "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK"
28143\u00AC "NOT SIGN"
28144\u00AD "SOFT HYPHEN"
28145\u00AE "REGISTERED SIGN"
28146\u00AF "MACRON"
28147\u00B0 "DEGREE SIGN"
28148\u00B1 "PLUS-MINUS SIGN"
28149\u00B2 "SUPERSCRIPT TWO"
28150\u00B3 "SUPERSCRIPT THREE"
28151\u00B4 "ACUTE ACCENT"
28152\u00B5 "MICRO SIGN"
28153\u00B6 "PILCROW SIGN"
28154\u00B7 "MIDDLE DOT"
28155\u00B8 "CEDILLA"
28156\u00B9 "SUPERSCRIPT ONE"
28157\u00BA "MASCULINE ORDINAL INDICATOR"
28158\u00BB "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK"
28159\u00BC "VULGAR FRACTION ONE QUARTER"
28160\u00BD "VULGAR FRACTION ONE HALF"
28161\u00BE "VULGAR FRACTION THREE QUARTERS"
28162\u00BF "INVERTED QUESTION MARK"
28163\u00C0 "LATIN CAPITAL LETTER A WITH GRAVE"
28164\u00C1 "LATIN CAPITAL LETTER A WITH ACUTE"
28165\u00C2 "LATIN CAPITAL LETTER A WITH CIRCUMFLEX"
28166\u00C3 "LATIN CAPITAL LETTER A WITH TILDE"
28167\u00C4 "LATIN CAPITAL LETTER A WITH DIAERESIS"
28168\u00C5 "LATIN CAPITAL LETTER A WITH RING ABOVE"
28169\u00C6 "LATIN CAPITAL LETTER AE"
28170\u00C7 "LATIN CAPITAL LETTER C WITH CEDILLA"
28171\u00C8 "LATIN CAPITAL LETTER E WITH GRAVE"
28172\u00C9 "LATIN CAPITAL LETTER E WITH ACUTE"
28173\u00CA "LATIN CAPITAL LETTER E WITH CIRCUMFLEX"
28174\u00CB "LATIN CAPITAL LETTER E WITH DIAERESIS"
28175\u00CC "LATIN CAPITAL LETTER I WITH GRAVE"
28176\u00CD "LATIN CAPITAL LETTER I WITH ACUTE"
28177\u00CE "LATIN CAPITAL LETTER I WITH CIRCUMFLEX"
28178\u00CF "LATIN CAPITAL LETTER I WITH DIAERESIS"
28179\u00D0 "LATIN CAPITAL LETTER ETH"
28180\u00D1 "LATIN CAPITAL LETTER N WITH TILDE"
28181\u00D2 "LATIN CAPITAL LETTER O WITH GRAVE"
28182\u00D3 "LATIN CAPITAL LETTER O WITH ACUTE"
28183\u00D4 "LATIN CAPITAL LETTER O WITH CIRCUMFLEX"
28184\u00D5 "LATIN CAPITAL LETTER O WITH TILDE"
28185\u00D6 "LATIN CAPITAL LETTER O WITH DIAERESIS"
28186\u00D7 "MULTIPLICATION SIGN"
28187\u00D8 "LATIN CAPITAL LETTER O WITH STROKE"
28188\u00D9 "LATIN CAPITAL LETTER U WITH GRAVE"
28189\u00DA "LATIN CAPITAL LETTER U WITH ACUTE"
28190\u00DB "LATIN CAPITAL LETTER U WITH CIRCUMFLEX"
28191\u00DC "LATIN CAPITAL LETTER U WITH DIAERESIS"
28192\u00DD "LATIN CAPITAL LETTER Y WITH ACUTE"
28193\u00DE "LATIN CAPITAL LETTER THORN"
28194\u00DF "LATIN SMALL LETTER SHARP S"
28195\u00E0 "LATIN SMALL LETTER A WITH GRAVE"
28196\u00E1 "LATIN SMALL LETTER A WITH ACUTE"
28197\u00E2 "LATIN SMALL LETTER A WITH CIRCUMFLEX"
28198\u00E3 "LATIN SMALL LETTER A WITH TILDE"
28199\u00E4 "LATIN SMALL LETTER A WITH DIAERESIS"
28200\u00E5 "LATIN SMALL LETTER A WITH RING ABOVE"
28201\u00E6 "LATIN SMALL LETTER AE"
28202\u00E7 "LATIN SMALL LETTER C WITH CEDILLA"
28203\u00E8 "LATIN SMALL LETTER E WITH GRAVE"
28204\u00E9 "LATIN SMALL LETTER E WITH ACUTE"
28205\u00EA "LATIN SMALL LETTER E WITH CIRCUMFLEX"
28206\u00EB "LATIN SMALL LETTER E WITH DIAERESIS"
28207\u00EC "LATIN SMALL LETTER I WITH GRAVE"
28208\u00ED "LATIN SMALL LETTER I WITH ACUTE"
28209\u00EE "LATIN SMALL LETTER I WITH CIRCUMFLEX"
28210\u00EF "LATIN SMALL LETTER I WITH DIAERESIS"
28211\u00F0 "LATIN SMALL LETTER ETH"
28212\u00F1 "LATIN SMALL LETTER N WITH TILDE"
28213\u00F2 "LATIN SMALL LETTER O WITH GRAVE"
28214\u00F3 "LATIN SMALL LETTER O WITH ACUTE"
28215\u00F4 "LATIN SMALL LETTER O WITH CIRCUMFLEX"
28216\u00F5 "LATIN SMALL LETTER O WITH TILDE"
28217\u00F6 "LATIN SMALL LETTER O WITH DIAERESIS"
28218\u00F7 "DIVISION SIGN"
28219\u00F8 "LATIN SMALL LETTER O WITH STROKE"
28220\u00F9 "LATIN SMALL LETTER U WITH GRAVE"
28221\u00FA "LATIN SMALL LETTER U WITH ACUTE"
28222\u00FB "LATIN SMALL LETTER U WITH CIRCUMFLEX"
28223\u00FC "LATIN SMALL LETTER U WITH DIAERESIS"
28224\u00FD "LATIN SMALL LETTER Y WITH ACUTE"
28225\u00FE "LATIN SMALL LETTER THORN"
28226\u00FF "LATIN SMALL LETTER Y WITH DIAERESIS"
28227\u0100 "LATIN CAPITAL LETTER A WITH MACRON"
28228\u0101 "LATIN SMALL LETTER A WITH MACRON"
28229\u0102 "LATIN CAPITAL LETTER A WITH BREVE"
28230\u0103 "LATIN SMALL LETTER A WITH BREVE"
28231\u0104 "LATIN CAPITAL LETTER A WITH OGONEK"
28232\u0105 "LATIN SMALL LETTER A WITH OGONEK"
28233\u0106 "LATIN CAPITAL LETTER C WITH ACUTE"
28234\u0107 "LATIN SMALL LETTER C WITH ACUTE"
28235\u0108 "LATIN CAPITAL LETTER C WITH CIRCUMFLEX"
28236\u0109 "LATIN SMALL LETTER C WITH CIRCUMFLEX"
28237\u010A "LATIN CAPITAL LETTER C WITH DOT ABOVE"
28238\u010B "LATIN SMALL LETTER C WITH DOT ABOVE"
28239\u010C "LATIN CAPITAL LETTER C WITH CARON"
28240\u010D "LATIN SMALL LETTER C WITH CARON"
28241\u010E "LATIN CAPITAL LETTER D WITH CARON"
28242\u010F "LATIN SMALL LETTER D WITH CARON"
28243\u0110 "LATIN CAPITAL LETTER D WITH STROKE"
28244\u0111 "LATIN SMALL LETTER D WITH STROKE"
28245\u0112 "LATIN CAPITAL LETTER E WITH MACRON"
28246\u0113 "LATIN SMALL LETTER E WITH MACRON"
28247\u0114 "LATIN CAPITAL LETTER E WITH BREVE"
28248\u0115 "LATIN SMALL LETTER E WITH BREVE"
28249\u0116 "LATIN CAPITAL LETTER E WITH DOT ABOVE"
28250\u0117 "LATIN SMALL LETTER E WITH DOT ABOVE"
28251\u0118 "LATIN CAPITAL LETTER E WITH OGONEK"
28252\u0119 "LATIN SMALL LETTER E WITH OGONEK"
28253\u011A "LATIN CAPITAL LETTER E WITH CARON"
28254\u011B "LATIN SMALL LETTER E WITH CARON"
28255\u011C "LATIN CAPITAL LETTER G WITH CIRCUMFLEX"
28256\u011D "LATIN SMALL LETTER G WITH CIRCUMFLEX"
28257\u011E "LATIN CAPITAL LETTER G WITH BREVE"
28258\u011F "LATIN SMALL LETTER G WITH BREVE"
28259\u0120 "LATIN CAPITAL LETTER G WITH DOT ABOVE"
28260\u0121 "LATIN SMALL LETTER G WITH DOT ABOVE"
28261\u0122 "LATIN CAPITAL LETTER G WITH CEDILLA"
28262\u0123 "LATIN SMALL LETTER G WITH CEDILLA"
28263\u0124 "LATIN CAPITAL LETTER H WITH CIRCUMFLEX"
28264\u0125 "LATIN SMALL LETTER H WITH CIRCUMFLEX"
28265\u0126 "LATIN CAPITAL LETTER H WITH STROKE"
28266\u0127 "LATIN SMALL LETTER H WITH STROKE"
28267\u0128 "LATIN CAPITAL LETTER I WITH TILDE"
28268\u0129 "LATIN SMALL LETTER I WITH TILDE"
28269\u012A "LATIN CAPITAL LETTER I WITH MACRON"
28270\u012B "LATIN SMALL LETTER I WITH MACRON"
28271\u012C "LATIN CAPITAL LETTER I WITH BREVE"
28272\u012D "LATIN SMALL LETTER I WITH BREVE"
28273\u012E "LATIN CAPITAL LETTER I WITH OGONEK"
28274\u012F "LATIN SMALL LETTER I WITH OGONEK"
28275\u0130 "LATIN CAPITAL LETTER I WITH DOT ABOVE"
28276\u0131 "LATIN SMALL LETTER DOTLESS I"
28277\u0132 "LATIN CAPITAL LIGATURE IJ"
28278\u0133 "LATIN SMALL LIGATURE IJ"
28279\u0134 "LATIN CAPITAL LETTER J WITH CIRCUMFLEX"
28280\u0135 "LATIN SMALL LETTER J WITH CIRCUMFLEX"
28281\u0136 "LATIN CAPITAL LETTER K WITH CEDILLA"
28282\u0137 "LATIN SMALL LETTER K WITH CEDILLA"
28283\u0138 "LATIN SMALL LETTER KRA"
28284\u0139 "LATIN CAPITAL LETTER L WITH ACUTE"
28285\u013A "LATIN SMALL LETTER L WITH ACUTE"
28286\u013B "LATIN CAPITAL LETTER L WITH CEDILLA"
28287\u013C "LATIN SMALL LETTER L WITH CEDILLA"
28288\u013D "LATIN CAPITAL LETTER L WITH CARON"
28289\u013E "LATIN SMALL LETTER L WITH CARON"
28290\u013F "LATIN CAPITAL LETTER L WITH MIDDLE DOT"
28291\u0140 "LATIN SMALL LETTER L WITH MIDDLE DOT"
28292\u0141 "LATIN CAPITAL LETTER L WITH STROKE"
28293\u0142 "LATIN SMALL LETTER L WITH STROKE"
28294\u0143 "LATIN CAPITAL LETTER N WITH ACUTE"
28295\u0144 "LATIN SMALL LETTER N WITH ACUTE"
28296\u0145 "LATIN CAPITAL LETTER N WITH CEDILLA"
28297\u0146 "LATIN SMALL LETTER N WITH CEDILLA"
28298\u0147 "LATIN CAPITAL LETTER N WITH CARON"
28299\u0148 "LATIN SMALL LETTER N WITH CARON"
28300\u0149 "LATIN SMALL LETTER N PRECEDED BY APOSTROPHE"
28301\u014A "LATIN CAPITAL LETTER ENG"
28302\u014B "LATIN SMALL LETTER ENG"
28303\u014C "LATIN CAPITAL LETTER O WITH MACRON"
28304\u014D "LATIN SMALL LETTER O WITH MACRON"
28305\u014E "LATIN CAPITAL LETTER O WITH BREVE"
28306\u014F "LATIN SMALL LETTER O WITH BREVE"
28307\u0150 "LATIN CAPITAL LETTER O WITH DOUBLE ACUTE"
28308\u0151 "LATIN SMALL LETTER O WITH DOUBLE ACUTE"
28309\u0152 "LATIN CAPITAL LIGATURE OE"
28310\u0153 "LATIN SMALL LIGATURE OE"
28311\u0154 "LATIN CAPITAL LETTER R WITH ACUTE"
28312\u0155 "LATIN SMALL LETTER R WITH ACUTE"
28313\u0156 "LATIN CAPITAL LETTER R WITH CEDILLA"
28314\u0157 "LATIN SMALL LETTER R WITH CEDILLA"
28315\u0158 "LATIN CAPITAL LETTER R WITH CARON"
28316\u0159 "LATIN SMALL LETTER R WITH CARON"
28317\u015A "LATIN CAPITAL LETTER S WITH ACUTE"
28318\u015B "LATIN SMALL LETTER S WITH ACUTE"
28319\u015C "LATIN CAPITAL LETTER S WITH CIRCUMFLEX"
28320\u015D "LATIN SMALL LETTER S WITH CIRCUMFLEX"
28321\u015E "LATIN CAPITAL LETTER S WITH CEDILLA"
28322\u015F "LATIN SMALL LETTER S WITH CEDILLA"
28323\u0160 "LATIN CAPITAL LETTER S WITH CARON"
28324\u0161 "LATIN SMALL LETTER S WITH CARON"
28325\u0162 "LATIN CAPITAL LETTER T WITH CEDILLA"
28326\u0163 "LATIN SMALL LETTER T WITH CEDILLA"
28327\u0164 "LATIN CAPITAL LETTER T WITH CARON"
28328\u0165 "LATIN SMALL LETTER T WITH CARON"
28329\u0166 "LATIN CAPITAL LETTER T WITH STROKE"
28330\u0167 "LATIN SMALL LETTER T WITH STROKE"
28331\u0168 "LATIN CAPITAL LETTER U WITH TILDE"
28332\u0169 "LATIN SMALL LETTER U WITH TILDE"
28333\u016A "LATIN CAPITAL LETTER U WITH MACRON"
28334\u016B "LATIN SMALL LETTER U WITH MACRON"
28335\u016C "LATIN CAPITAL LETTER U WITH BREVE"
28336\u016D "LATIN SMALL LETTER U WITH BREVE"
28337\u016E "LATIN CAPITAL LETTER U WITH RING ABOVE"
28338\u016F "LATIN SMALL LETTER U WITH RING ABOVE"
28339\u0170 "LATIN CAPITAL LETTER U WITH DOUBLE ACUTE"
28340\u0171 "LATIN SMALL LETTER U WITH DOUBLE ACUTE"
28341\u0172 "LATIN CAPITAL LETTER U WITH OGONEK"
28342\u0173 "LATIN SMALL LETTER U WITH OGONEK"
28343\u0174 "LATIN CAPITAL LETTER W WITH CIRCUMFLEX"
28344\u0175 "LATIN SMALL LETTER W WITH CIRCUMFLEX"
28345\u0176 "LATIN CAPITAL LETTER Y WITH CIRCUMFLEX"
28346\u0177 "LATIN SMALL LETTER Y WITH CIRCUMFLEX"
28347\u0178 "LATIN CAPITAL LETTER Y WITH DIAERESIS"
28348\u0179 "LATIN CAPITAL LETTER Z WITH ACUTE"
28349\u017A "LATIN SMALL LETTER Z WITH ACUTE"
28350\u017B "LATIN CAPITAL LETTER Z WITH DOT ABOVE"
28351\u017C "LATIN SMALL LETTER Z WITH DOT ABOVE"
28352\u017D "LATIN CAPITAL LETTER Z WITH CARON"
28353\u017E "LATIN SMALL LETTER Z WITH CARON"
28354\u017F "LATIN SMALL LETTER LONG S"
28355\u0180 "LATIN SMALL LETTER B WITH STROKE"
28356\u0181 "LATIN CAPITAL LETTER B WITH HOOK"
28357\u0182 "LATIN CAPITAL LETTER B WITH TOPBAR"
28358\u0183 "LATIN SMALL LETTER B WITH TOPBAR"
28359\u0184 "LATIN CAPITAL LETTER TONE SIX"
28360\u0185 "LATIN SMALL LETTER TONE SIX"
28361\u0186 "LATIN CAPITAL LETTER OPEN O"
28362\u0187 "LATIN CAPITAL LETTER C WITH HOOK"
28363\u0188 "LATIN SMALL LETTER C WITH HOOK"
28364\u0189 "LATIN CAPITAL LETTER AFRICAN D"
28365\u018A "LATIN CAPITAL LETTER D WITH HOOK"
28366\u018B "LATIN CAPITAL LETTER D WITH TOPBAR"
28367\u018C "LATIN SMALL LETTER D WITH TOPBAR"
28368\u018D "LATIN SMALL LETTER TURNED DELTA"
28369\u018E "LATIN CAPITAL LETTER REVERSED E"
28370\u018F "LATIN CAPITAL LETTER SCHWA"
28371\u0190 "LATIN CAPITAL LETTER OPEN E"
28372\u0191 "LATIN CAPITAL LETTER F WITH HOOK"
28373\u0192 "LATIN SMALL LETTER F WITH HOOK"
28374\u0193 "LATIN CAPITAL LETTER G WITH HOOK"
28375\u0194 "LATIN CAPITAL LETTER GAMMA"
28376\u0195 "LATIN SMALL LETTER HV"
28377\u0196 "LATIN CAPITAL LETTER IOTA"
28378\u0197 "LATIN CAPITAL LETTER I WITH STROKE"
28379\u0198 "LATIN CAPITAL LETTER K WITH HOOK"
28380\u0199 "LATIN SMALL LETTER K WITH HOOK"
28381\u019A "LATIN SMALL LETTER L WITH BAR"
28382\u019B "LATIN SMALL LETTER LAMBDA WITH STROKE"
28383\u019C "LATIN CAPITAL LETTER TURNED M"
28384\u019D "LATIN CAPITAL LETTER N WITH LEFT HOOK"
28385\u019E "LATIN SMALL LETTER N WITH LONG RIGHT LEG"
28386\u019F "LATIN CAPITAL LETTER O WITH MIDDLE TILDE"
28387\u01A0 "LATIN CAPITAL LETTER O WITH HORN"
28388\u01A1 "LATIN SMALL LETTER O WITH HORN"
28389\u01A2 "LATIN CAPITAL LETTER OI"
28390\u01A3 "LATIN SMALL LETTER OI"
28391\u01A4 "LATIN CAPITAL LETTER P WITH HOOK"
28392\u01A5 "LATIN SMALL LETTER P WITH HOOK"
28393\u01A6 "LATIN LETTER YR"
28394\u01A7 "LATIN CAPITAL LETTER TONE TWO"
28395\u01A8 "LATIN SMALL LETTER TONE TWO"
28396\u01A9 "LATIN CAPITAL LETTER ESH"
28397\u01AA "LATIN LETTER REVERSED ESH LOOP"
28398\u01AB "LATIN SMALL LETTER T WITH PALATAL HOOK"
28399\u01AC "LATIN CAPITAL LETTER T WITH HOOK"
28400\u01AD "LATIN SMALL LETTER T WITH HOOK"
28401\u01AE "LATIN CAPITAL LETTER T WITH RETROFLEX HOOK"
28402\u01AF "LATIN CAPITAL LETTER U WITH HORN"
28403\u01B0 "LATIN SMALL LETTER U WITH HORN"
28404\u01B1 "LATIN CAPITAL LETTER UPSILON"
28405\u01B2 "LATIN CAPITAL LETTER V WITH HOOK"
28406\u01B3 "LATIN CAPITAL LETTER Y WITH HOOK"
28407\u01B4 "LATIN SMALL LETTER Y WITH HOOK"
28408\u01B5 "LATIN CAPITAL LETTER Z WITH STROKE"
28409\u01B6 "LATIN SMALL LETTER Z WITH STROKE"
28410\u01B7 "LATIN CAPITAL LETTER EZH"
28411\u01B8 "LATIN CAPITAL LETTER EZH REVERSED"
28412\u01B9 "LATIN SMALL LETTER EZH REVERSED"
28413\u01BA "LATIN SMALL LETTER EZH WITH TAIL"
28414\u01BB "LATIN LETTER TWO WITH STROKE"
28415\u01BC "LATIN CAPITAL LETTER TONE FIVE"
28416\u01BD "LATIN SMALL LETTER TONE FIVE"
28417\u01BE "LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE"
28418\u01BF "LATIN LETTER WYNN"
28419\u01C0 "LATIN LETTER DENTAL CLICK"
28420\u01C1 "LATIN LETTER LATERAL CLICK"
28421\u01C2 "LATIN LETTER ALVEOLAR CLICK"
28422\u01C3 "LATIN LETTER RETROFLEX CLICK"
28423\u01C4 "LATIN CAPITAL LETTER DZ WITH CARON"
28424\u01C5 "LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON"
28425\u01C6 "LATIN SMALL LETTER DZ WITH CARON"
28426\u01C7 "LATIN CAPITAL LETTER LJ"
28427\u01C8 "LATIN CAPITAL LETTER L WITH SMALL LETTER J"
28428\u01C9 "LATIN SMALL LETTER LJ"
28429\u01CA "LATIN CAPITAL LETTER NJ"
28430\u01CB "LATIN CAPITAL LETTER N WITH SMALL LETTER J"
28431\u01CC "LATIN SMALL LETTER NJ"
28432\u01CD "LATIN CAPITAL LETTER A WITH CARON"
28433\u01CE "LATIN SMALL LETTER A WITH CARON"
28434\u01CF "LATIN CAPITAL LETTER I WITH CARON"
28435\u01D0 "LATIN SMALL LETTER I WITH CARON"
28436\u01D1 "LATIN CAPITAL LETTER O WITH CARON"
28437\u01D2 "LATIN SMALL LETTER O WITH CARON"
28438\u01D3 "LATIN CAPITAL LETTER U WITH CARON"
28439\u01D4 "LATIN SMALL LETTER U WITH CARON"
28440\u01D5 "LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON"
28441\u01D6 "LATIN SMALL LETTER U WITH DIAERESIS AND MACRON"
28442\u01D7 "LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE"
28443\u01D8 "LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE"
28444\u01D9 "LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON"
28445\u01DA "LATIN SMALL LETTER U WITH DIAERESIS AND CARON"
28446\u01DB "LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE"
28447\u01DC "LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE"
28448\u01DD "LATIN SMALL LETTER TURNED E"
28449\u01DE "LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON"
28450\u01DF "LATIN SMALL LETTER A WITH DIAERESIS AND MACRON"
28451\u01E0 "LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON"
28452\u01E1 "LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON"
28453\u01E2 "LATIN CAPITAL LETTER AE WITH MACRON"
28454\u01E3 "LATIN SMALL LETTER AE WITH MACRON"
28455\u01E4 "LATIN CAPITAL LETTER G WITH STROKE"
28456\u01E5 "LATIN SMALL LETTER G WITH STROKE"
28457\u01E6 "LATIN CAPITAL LETTER G WITH CARON"
28458\u01E7 "LATIN SMALL LETTER G WITH CARON"
28459\u01E8 "LATIN CAPITAL LETTER K WITH CARON"
28460\u01E9 "LATIN SMALL LETTER K WITH CARON"
28461\u01EA "LATIN CAPITAL LETTER O WITH OGONEK"
28462\u01EB "LATIN SMALL LETTER O WITH OGONEK"
28463\u01EC "LATIN CAPITAL LETTER O WITH OGONEK AND MACRON"
28464\u01ED "LATIN SMALL LETTER O WITH OGONEK AND MACRON"
28465\u01EE "LATIN CAPITAL LETTER EZH WITH CARON"
28466\u01EF "LATIN SMALL LETTER EZH WITH CARON"
28467\u01F0 "LATIN SMALL LETTER J WITH CARON"
28468\u01F1 "LATIN CAPITAL LETTER DZ"
28469\u01F2 "LATIN CAPITAL LETTER D WITH SMALL LETTER Z"
28470\u01F3 "LATIN SMALL LETTER DZ"
28471\u01F4 "LATIN CAPITAL LETTER G WITH ACUTE"
28472\u01F5 "LATIN SMALL LETTER G WITH ACUTE"
28473\u01F6 "LATIN CAPITAL LETTER HWAIR"
28474\u01F7 "LATIN CAPITAL LETTER WYNN"
28475\u01F8 "LATIN CAPITAL LETTER N WITH GRAVE"
28476\u01F9 "LATIN SMALL LETTER N WITH GRAVE"
28477\u01FA "LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE"
28478\u01FB "LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE"
28479\u01FC "LATIN CAPITAL LETTER AE WITH ACUTE"
28480\u01FD "LATIN SMALL LETTER AE WITH ACUTE"
28481\u01FE "LATIN CAPITAL LETTER O WITH STROKE AND ACUTE"
28482\u01FF "LATIN SMALL LETTER O WITH STROKE AND ACUTE"
28483\u0200 "LATIN CAPITAL LETTER A WITH DOUBLE GRAVE"
28484\u0201 "LATIN SMALL LETTER A WITH DOUBLE GRAVE"
28485\u0202 "LATIN CAPITAL LETTER A WITH INVERTED BREVE"
28486\u0203 "LATIN SMALL LETTER A WITH INVERTED BREVE"
28487\u0204 "LATIN CAPITAL LETTER E WITH DOUBLE GRAVE"
28488\u0205 "LATIN SMALL LETTER E WITH DOUBLE GRAVE"
28489\u0206 "LATIN CAPITAL LETTER E WITH INVERTED BREVE"
28490\u0207 "LATIN SMALL LETTER E WITH INVERTED BREVE"
28491\u0208 "LATIN CAPITAL LETTER I WITH DOUBLE GRAVE"
28492\u0209 "LATIN SMALL LETTER I WITH DOUBLE GRAVE"
28493\u020A "LATIN CAPITAL LETTER I WITH INVERTED BREVE"
28494\u020B "LATIN SMALL LETTER I WITH INVERTED BREVE"
28495\u020C "LATIN CAPITAL LETTER O WITH DOUBLE GRAVE"
28496\u020D "LATIN SMALL LETTER O WITH DOUBLE GRAVE"
28497\u020E "LATIN CAPITAL LETTER O WITH INVERTED BREVE"
28498\u020F "LATIN SMALL LETTER O WITH INVERTED BREVE"
28499\u0210 "LATIN CAPITAL LETTER R WITH DOUBLE GRAVE"
28500\u0211 "LATIN SMALL LETTER R WITH DOUBLE GRAVE"
28501\u0212 "LATIN CAPITAL LETTER R WITH INVERTED BREVE"
28502\u0213 "LATIN SMALL LETTER R WITH INVERTED BREVE"
28503\u0214 "LATIN CAPITAL LETTER U WITH DOUBLE GRAVE"
28504\u0215 "LATIN SMALL LETTER U WITH DOUBLE GRAVE"
28505\u0216 "LATIN CAPITAL LETTER U WITH INVERTED BREVE"
28506\u0217 "LATIN SMALL LETTER U WITH INVERTED BREVE"
28507\u0218 "LATIN CAPITAL LETTER S WITH COMMA BELOW"
28508\u0219 "LATIN SMALL LETTER S WITH COMMA BELOW"
28509\u021A "LATIN CAPITAL LETTER T WITH COMMA BELOW"
28510\u021B "LATIN SMALL LETTER T WITH COMMA BELOW"
28511\u021C "LATIN CAPITAL LETTER YOGH"
28512\u021D "LATIN SMALL LETTER YOGH"
28513\u021E "LATIN CAPITAL LETTER H WITH CARON"
28514\u021F "LATIN SMALL LETTER H WITH CARON"
28515\u0220 "LATIN CAPITAL LETTER N WITH LONG RIGHT LEG"
28516\u0221 "LATIN SMALL LETTER D WITH CURL"
28517\u0222 "LATIN CAPITAL LETTER OU"
28518\u0223 "LATIN SMALL LETTER OU"
28519\u0224 "LATIN CAPITAL LETTER Z WITH HOOK"
28520\u0225 "LATIN SMALL LETTER Z WITH HOOK"
28521\u0226 "LATIN CAPITAL LETTER A WITH DOT ABOVE"
28522\u0227 "LATIN SMALL LETTER A WITH DOT ABOVE"
28523\u0228 "LATIN CAPITAL LETTER E WITH CEDILLA"
28524\u0229 "LATIN SMALL LETTER E WITH CEDILLA"
28525\u022A "LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON"
28526\u022B "LATIN SMALL LETTER O WITH DIAERESIS AND MACRON"
28527\u022C "LATIN CAPITAL LETTER O WITH TILDE AND MACRON"
28528\u022D "LATIN SMALL LETTER O WITH TILDE AND MACRON"
28529\u022E "LATIN CAPITAL LETTER O WITH DOT ABOVE"
28530\u022F "LATIN SMALL LETTER O WITH DOT ABOVE"
28531\u0230 "LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON"
28532\u0231 "LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON"
28533\u0232 "LATIN CAPITAL LETTER Y WITH MACRON"
28534\u0233 "LATIN SMALL LETTER Y WITH MACRON"
28535\u0234 "LATIN SMALL LETTER L WITH CURL"
28536\u0235 "LATIN SMALL LETTER N WITH CURL"
28537\u0236 "LATIN SMALL LETTER T WITH CURL"
28538\u0237 "LATIN SMALL LETTER DOTLESS J"
28539\u0238 "LATIN SMALL LETTER DB DIGRAPH"
28540\u0239 "LATIN SMALL LETTER QP DIGRAPH"
28541\u023A "LATIN CAPITAL LETTER A WITH STROKE"
28542\u023B "LATIN CAPITAL LETTER C WITH STROKE"
28543\u023C "LATIN SMALL LETTER C WITH STROKE"
28544\u023D "LATIN CAPITAL LETTER L WITH BAR"
28545\u023E "LATIN CAPITAL LETTER T WITH DIAGONAL STROKE"
28546\u023F "LATIN SMALL LETTER S WITH SWASH TAIL"
28547\u0240 "LATIN SMALL LETTER Z WITH SWASH TAIL"
28548\u0241 "LATIN CAPITAL LETTER GLOTTAL STOP"
28549\u0242 "LATIN SMALL LETTER GLOTTAL STOP"
28550\u0243 "LATIN CAPITAL LETTER B WITH STROKE"
28551\u0244 "LATIN CAPITAL LETTER U BAR"
28552\u0245 "LATIN CAPITAL LETTER TURNED V"
28553\u0246 "LATIN CAPITAL LETTER E WITH STROKE"
28554\u0247 "LATIN SMALL LETTER E WITH STROKE"
28555\u0248 "LATIN CAPITAL LETTER J WITH STROKE"
28556\u0249 "LATIN SMALL LETTER J WITH STROKE"
28557\u024A "LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL"
28558\u024B "LATIN SMALL LETTER Q WITH HOOK TAIL"
28559\u024C "LATIN CAPITAL LETTER R WITH STROKE"
28560\u024D "LATIN SMALL LETTER R WITH STROKE"
28561\u024E "LATIN CAPITAL LETTER Y WITH STROKE"
28562\u024F "LATIN SMALL LETTER Y WITH STROKE"
28563\u0250 "LATIN SMALL LETTER TURNED A"
28564\u0251 "LATIN SMALL LETTER ALPHA"
28565\u0252 "LATIN SMALL LETTER TURNED ALPHA"
28566\u0253 "LATIN SMALL LETTER B WITH HOOK"
28567\u0254 "LATIN SMALL LETTER OPEN O"
28568\u0255 "LATIN SMALL LETTER C WITH CURL"
28569\u0256 "LATIN SMALL LETTER D WITH TAIL"
28570\u0257 "LATIN SMALL LETTER D WITH HOOK"
28571\u0258 "LATIN SMALL LETTER REVERSED E"
28572\u0259 "LATIN SMALL LETTER SCHWA"
28573\u025A "LATIN SMALL LETTER SCHWA WITH HOOK"
28574\u025B "LATIN SMALL LETTER OPEN E"
28575\u025C "LATIN SMALL LETTER REVERSED OPEN E"
28576\u025D "LATIN SMALL LETTER REVERSED OPEN E WITH HOOK"
28577\u025E "LATIN SMALL LETTER CLOSED REVERSED OPEN E"
28578\u025F "LATIN SMALL LETTER DOTLESS J WITH STROKE"
28579\u0260 "LATIN SMALL LETTER G WITH HOOK"
28580\u0261 "LATIN SMALL LETTER SCRIPT G"
28581\u0262 "LATIN LETTER SMALL CAPITAL G"
28582\u0263 "LATIN SMALL LETTER GAMMA"
28583\u0264 "LATIN SMALL LETTER RAMS HORN"
28584\u0265 "LATIN SMALL LETTER TURNED H"
28585\u0266 "LATIN SMALL LETTER H WITH HOOK"
28586\u0267 "LATIN SMALL LETTER HENG WITH HOOK"
28587\u0268 "LATIN SMALL LETTER I WITH STROKE"
28588\u0269 "LATIN SMALL LETTER IOTA"
28589\u026A "LATIN LETTER SMALL CAPITAL I"
28590\u026B "LATIN SMALL LETTER L WITH MIDDLE TILDE"
28591\u026C "LATIN SMALL LETTER L WITH BELT"
28592\u026D "LATIN SMALL LETTER L WITH RETROFLEX HOOK"
28593\u026E "LATIN SMALL LETTER LEZH"
28594\u026F "LATIN SMALL LETTER TURNED M"
28595\u0270 "LATIN SMALL LETTER TURNED M WITH LONG LEG"
28596\u0271 "LATIN SMALL LETTER M WITH HOOK"
28597\u0272 "LATIN SMALL LETTER N WITH LEFT HOOK"
28598\u0273 "LATIN SMALL LETTER N WITH RETROFLEX HOOK"
28599\u0274 "LATIN LETTER SMALL CAPITAL N"
28600\u0275 "LATIN SMALL LETTER BARRED O"
28601\u0276 "LATIN LETTER SMALL CAPITAL OE"
28602\u0277 "LATIN SMALL LETTER CLOSED OMEGA"
28603\u0278 "LATIN SMALL LETTER PHI"
28604\u0279 "LATIN SMALL LETTER TURNED R"
28605\u027A "LATIN SMALL LETTER TURNED R WITH LONG LEG"
28606\u027B "LATIN SMALL LETTER TURNED R WITH HOOK"
28607\u027C "LATIN SMALL LETTER R WITH LONG LEG"
28608\u027D "LATIN SMALL LETTER R WITH TAIL"
28609\u027E "LATIN SMALL LETTER R WITH FISHHOOK"
28610\u027F "LATIN SMALL LETTER REVERSED R WITH FISHHOOK"
28611\u0280 "LATIN LETTER SMALL CAPITAL R"
28612\u0281 "LATIN LETTER SMALL CAPITAL INVERTED R"
28613\u0282 "LATIN SMALL LETTER S WITH HOOK"
28614\u0283 "LATIN SMALL LETTER ESH"
28615\u0284 "LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK"
28616\u0285 "LATIN SMALL LETTER SQUAT REVERSED ESH"
28617\u0286 "LATIN SMALL LETTER ESH WITH CURL"
28618\u0287 "LATIN SMALL LETTER TURNED T"
28619\u0288 "LATIN SMALL LETTER T WITH RETROFLEX HOOK"
28620\u0289 "LATIN SMALL LETTER U BAR"
28621\u028A "LATIN SMALL LETTER UPSILON"
28622\u028B "LATIN SMALL LETTER V WITH HOOK"
28623\u028C "LATIN SMALL LETTER TURNED V"
28624\u028D "LATIN SMALL LETTER TURNED W"
28625\u028E "LATIN SMALL LETTER TURNED Y"
28626\u028F "LATIN LETTER SMALL CAPITAL Y"
28627\u0290 "LATIN SMALL LETTER Z WITH RETROFLEX HOOK"
28628\u0291 "LATIN SMALL LETTER Z WITH CURL"
28629\u0292 "LATIN SMALL LETTER EZH"
28630\u0293 "LATIN SMALL LETTER EZH WITH CURL"
28631\u0294 "LATIN LETTER GLOTTAL STOP"
28632\u0295 "LATIN LETTER PHARYNGEAL VOICED FRICATIVE"
28633\u0296 "LATIN LETTER INVERTED GLOTTAL STOP"
28634\u0297 "LATIN LETTER STRETCHED C"
28635\u0298 "LATIN LETTER BILABIAL CLICK"
28636\u0299 "LATIN LETTER SMALL CAPITAL B"
28637\u029A "LATIN SMALL LETTER CLOSED OPEN E"
28638\u029B "LATIN LETTER SMALL CAPITAL G WITH HOOK"
28639\u029C "LATIN LETTER SMALL CAPITAL H"
28640\u029D "LATIN SMALL LETTER J WITH CROSSED-TAIL"
28641\u029E "LATIN SMALL LETTER TURNED K"
28642\u029F "LATIN LETTER SMALL CAPITAL L"
28643\u02A0 "LATIN SMALL LETTER Q WITH HOOK"
28644\u02A1 "LATIN LETTER GLOTTAL STOP WITH STROKE"
28645\u02A2 "LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE"
28646\u02A3 "LATIN SMALL LETTER DZ DIGRAPH"
28647\u02A4 "LATIN SMALL LETTER DEZH DIGRAPH"
28648\u02A5 "LATIN SMALL LETTER DZ DIGRAPH WITH CURL"
28649\u02A6 "LATIN SMALL LETTER TS DIGRAPH"
28650\u02A7 "LATIN SMALL LETTER TESH DIGRAPH"
28651\u02A8 "LATIN SMALL LETTER TC DIGRAPH WITH CURL"
28652\u02A9 "LATIN SMALL LETTER FENG DIGRAPH"
28653\u02AA "LATIN SMALL LETTER LS DIGRAPH"
28654\u02AB "LATIN SMALL LETTER LZ DIGRAPH"
28655\u02AC "LATIN LETTER BILABIAL PERCUSSIVE"
28656\u02AD "LATIN LETTER BIDENTAL PERCUSSIVE"
28657\u02AE "LATIN SMALL LETTER TURNED H WITH FISHHOOK"
28658\u02AF "LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL"
28659\u02B0 "MODIFIER LETTER SMALL H"
28660\u02B1 "MODIFIER LETTER SMALL H WITH HOOK"
28661\u02B2 "MODIFIER LETTER SMALL J"
28662\u02B3 "MODIFIER LETTER SMALL R"
28663\u02B4 "MODIFIER LETTER SMALL TURNED R"
28664\u02B5 "MODIFIER LETTER SMALL TURNED R WITH HOOK"
28665\u02B6 "MODIFIER LETTER SMALL CAPITAL INVERTED R"
28666\u02B7 "MODIFIER LETTER SMALL W"
28667\u02B8 "MODIFIER LETTER SMALL Y"
28668\u02B9 "MODIFIER LETTER PRIME"
28669\u02BA "MODIFIER LETTER DOUBLE PRIME"
28670\u02BB "MODIFIER LETTER TURNED COMMA"
28671\u02BC "MODIFIER LETTER APOSTROPHE"
28672\u02BD "MODIFIER LETTER REVERSED COMMA"
28673\u02BE "MODIFIER LETTER RIGHT HALF RING"
28674\u02BF "MODIFIER LETTER LEFT HALF RING"
28675\u02C0 "MODIFIER LETTER GLOTTAL STOP"
28676\u02C1 "MODIFIER LETTER REVERSED GLOTTAL STOP"
28677\u02C2 "MODIFIER LETTER LEFT ARROWHEAD"
28678\u02C3 "MODIFIER LETTER RIGHT ARROWHEAD"
28679\u02C4 "MODIFIER LETTER UP ARROWHEAD"
28680\u02C5 "MODIFIER LETTER DOWN ARROWHEAD"
28681\u02C6 "MODIFIER LETTER CIRCUMFLEX ACCENT"
28682\u02C7 "CARON"
28683\u02C8 "MODIFIER LETTER VERTICAL LINE"
28684\u02C9 "MODIFIER LETTER MACRON"
28685\u02CA "MODIFIER LETTER ACUTE ACCENT"
28686\u02CB "MODIFIER LETTER GRAVE ACCENT"
28687\u02CC "MODIFIER LETTER LOW VERTICAL LINE"
28688\u02CD "MODIFIER LETTER LOW MACRON"
28689\u02CE "MODIFIER LETTER LOW GRAVE ACCENT"
28690\u02CF "MODIFIER LETTER LOW ACUTE ACCENT"
28691\u02D0 "MODIFIER LETTER TRIANGULAR COLON"
28692\u02D1 "MODIFIER LETTER HALF TRIANGULAR COLON"
28693\u02D2 "MODIFIER LETTER CENTRED RIGHT HALF RING"
28694\u02D3 "MODIFIER LETTER CENTRED LEFT HALF RING"
28695\u02D4 "MODIFIER LETTER UP TACK"
28696\u02D5 "MODIFIER LETTER DOWN TACK"
28697\u02D6 "MODIFIER LETTER PLUS SIGN"
28698\u02D7 "MODIFIER LETTER MINUS SIGN"
28699\u02D8 "BREVE"
28700\u02D9 "DOT ABOVE"
28701\u02DA "RING ABOVE"
28702\u02DB "OGONEK"
28703\u02DC "SMALL TILDE"
28704\u02DD "DOUBLE ACUTE ACCENT"
28705\u02DE "MODIFIER LETTER RHOTIC HOOK"
28706\u02DF "MODIFIER LETTER CROSS ACCENT"
28707\u02E0 "MODIFIER LETTER SMALL GAMMA"
28708\u02E1 "MODIFIER LETTER SMALL L"
28709\u02E2 "MODIFIER LETTER SMALL S"
28710\u02E3 "MODIFIER LETTER SMALL X"
28711\u02E4 "MODIFIER LETTER SMALL REVERSED GLOTTAL STOP"
28712\u02E5 "MODIFIER LETTER EXTRA-HIGH TONE BAR"
28713\u02E6 "MODIFIER LETTER HIGH TONE BAR"
28714\u02E7 "MODIFIER LETTER MID TONE BAR"
28715\u02E8 "MODIFIER LETTER LOW TONE BAR"
28716\u02E9 "MODIFIER LETTER EXTRA-LOW TONE BAR"
28717\u02EA "MODIFIER LETTER YIN DEPARTING TONE MARK"
28718\u02EB "MODIFIER LETTER YANG DEPARTING TONE MARK"
28719\u02EC "MODIFIER LETTER VOICING"
28720\u02ED "MODIFIER LETTER UNASPIRATED"
28721\u02EE "MODIFIER LETTER DOUBLE APOSTROPHE"
28722\u02EF "MODIFIER LETTER LOW DOWN ARROWHEAD"
28723\u02F0 "MODIFIER LETTER LOW UP ARROWHEAD"
28724\u02F1 "MODIFIER LETTER LOW LEFT ARROWHEAD"
28725\u02F2 "MODIFIER LETTER LOW RIGHT ARROWHEAD"
28726\u02F3 "MODIFIER LETTER LOW RING"
28727\u02F4 "MODIFIER LETTER MIDDLE GRAVE ACCENT"
28728\u02F5 "MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT"
28729\u02F6 "MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT"
28730\u02F7 "MODIFIER LETTER LOW TILDE"
28731\u02F8 "MODIFIER LETTER RAISED COLON"
28732\u02F9 "MODIFIER LETTER BEGIN HIGH TONE"
28733\u02FA "MODIFIER LETTER END HIGH TONE"
28734\u02FB "MODIFIER LETTER BEGIN LOW TONE"
28735\u02FC "MODIFIER LETTER END LOW TONE"
28736\u02FD "MODIFIER LETTER SHELF"
28737\u02FE "MODIFIER LETTER OPEN SHELF"
28738\u02FF "MODIFIER LETTER LOW LEFT ARROW"
28739\u0300 "COMBINING GRAVE ACCENT"
28740\u0301 "COMBINING ACUTE ACCENT"
28741\u0302 "COMBINING CIRCUMFLEX ACCENT"
28742\u0303 "COMBINING TILDE"
28743\u0304 "COMBINING MACRON"
28744\u0305 "COMBINING OVERLINE"
28745\u0306 "COMBINING BREVE"
28746\u0307 "COMBINING DOT ABOVE"
28747\u0308 "COMBINING DIAERESIS"
28748\u0309 "COMBINING HOOK ABOVE"
28749\u030A "COMBINING RING ABOVE"
28750\u030B "COMBINING DOUBLE ACUTE ACCENT"
28751\u030C "COMBINING CARON"
28752\u030D "COMBINING VERTICAL LINE ABOVE"
28753\u030E "COMBINING DOUBLE VERTICAL LINE ABOVE"
28754\u030F "COMBINING DOUBLE GRAVE ACCENT"
28755\u0310 "COMBINING CANDRABINDU"
28756\u0311 "COMBINING INVERTED BREVE"
28757\u0312 "COMBINING TURNED COMMA ABOVE"
28758\u0313 "COMBINING COMMA ABOVE"
28759\u0314 "COMBINING REVERSED COMMA ABOVE"
28760\u0315 "COMBINING COMMA ABOVE RIGHT"
28761\u0316 "COMBINING GRAVE ACCENT BELOW"
28762\u0317 "COMBINING ACUTE ACCENT BELOW"
28763\u0318 "COMBINING LEFT TACK BELOW"
28764\u0319 "COMBINING RIGHT TACK BELOW"
28765\u031A "COMBINING LEFT ANGLE ABOVE"
28766\u031B "COMBINING HORN"
28767\u031C "COMBINING LEFT HALF RING BELOW"
28768\u031D "COMBINING UP TACK BELOW"
28769\u031E "COMBINING DOWN TACK BELOW"
28770\u031F "COMBINING PLUS SIGN BELOW"
28771\u0320 "COMBINING MINUS SIGN BELOW"
28772\u0321 "COMBINING PALATALIZED HOOK BELOW"
28773\u0322 "COMBINING RETROFLEX HOOK BELOW"
28774\u0323 "COMBINING DOT BELOW"
28775\u0324 "COMBINING DIAERESIS BELOW"
28776\u0325 "COMBINING RING BELOW"
28777\u0326 "COMBINING COMMA BELOW"
28778\u0327 "COMBINING CEDILLA"
28779\u0328 "COMBINING OGONEK"
28780\u0329 "COMBINING VERTICAL LINE BELOW"
28781\u032A "COMBINING BRIDGE BELOW"
28782\u032B "COMBINING INVERTED DOUBLE ARCH BELOW"
28783\u032C "COMBINING CARON BELOW"
28784\u032D "COMBINING CIRCUMFLEX ACCENT BELOW"
28785\u032E "COMBINING BREVE BELOW"
28786\u032F "COMBINING INVERTED BREVE BELOW"
28787\u0330 "COMBINING TILDE BELOW"
28788\u0331 "COMBINING MACRON BELOW"
28789\u0332 "COMBINING LOW LINE"
28790\u0333 "COMBINING DOUBLE LOW LINE"
28791\u0334 "COMBINING TILDE OVERLAY"
28792\u0335 "COMBINING SHORT STROKE OVERLAY"
28793\u0336 "COMBINING LONG STROKE OVERLAY"
28794\u0337 "COMBINING SHORT SOLIDUS OVERLAY"
28795\u0338 "COMBINING LONG SOLIDUS OVERLAY"
28796\u0339 "COMBINING RIGHT HALF RING BELOW"
28797\u033A "COMBINING INVERTED BRIDGE BELOW"
28798\u033B "COMBINING SQUARE BELOW"
28799\u033C "COMBINING SEAGULL BELOW"
28800\u033D "COMBINING X ABOVE"
28801\u033E "COMBINING VERTICAL TILDE"
28802\u033F "COMBINING DOUBLE OVERLINE"
28803\u0340 "COMBINING GRAVE TONE MARK"
28804\u0341 "COMBINING ACUTE TONE MARK"
28805\u0342 "COMBINING GREEK PERISPOMENI"
28806\u0343 "COMBINING GREEK KORONIS"
28807\u0344 "COMBINING GREEK DIALYTIKA TONOS"
28808\u0345 "COMBINING GREEK YPOGEGRAMMENI"
28809\u0346 "COMBINING BRIDGE ABOVE"
28810\u0347 "COMBINING EQUALS SIGN BELOW"
28811\u0348 "COMBINING DOUBLE VERTICAL LINE BELOW"
28812\u0349 "COMBINING LEFT ANGLE BELOW"
28813\u034A "COMBINING NOT TILDE ABOVE"
28814\u034B "COMBINING HOMOTHETIC ABOVE"
28815\u034C "COMBINING ALMOST EQUAL TO ABOVE"
28816\u034D "COMBINING LEFT RIGHT ARROW BELOW"
28817\u034E "COMBINING UPWARDS ARROW BELOW"
28818\u034F "COMBINING GRAPHEME JOINER"
28819\u0350 "COMBINING RIGHT ARROWHEAD ABOVE"
28820\u0351 "COMBINING LEFT HALF RING ABOVE"
28821\u0352 "COMBINING FERMATA"
28822\u0353 "COMBINING X BELOW"
28823\u0354 "COMBINING LEFT ARROWHEAD BELOW"
28824\u0355 "COMBINING RIGHT ARROWHEAD BELOW"
28825\u0356 "COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW"
28826\u0357 "COMBINING RIGHT HALF RING ABOVE"
28827\u0358 "COMBINING DOT ABOVE RIGHT"
28828\u0359 "COMBINING ASTERISK BELOW"
28829\u035A "COMBINING DOUBLE RING BELOW"
28830\u035B "COMBINING ZIGZAG ABOVE"
28831\u035C "COMBINING DOUBLE BREVE BELOW"
28832\u035D "COMBINING DOUBLE BREVE"
28833\u035E "COMBINING DOUBLE MACRON"
28834\u035F "COMBINING DOUBLE MACRON BELOW"
28835\u0360 "COMBINING DOUBLE TILDE"
28836\u0361 "COMBINING DOUBLE INVERTED BREVE"
28837\u0362 "COMBINING DOUBLE RIGHTWARDS ARROW BELOW"
28838\u0363 "COMBINING LATIN SMALL LETTER A"
28839\u0364 "COMBINING LATIN SMALL LETTER E"
28840\u0365 "COMBINING LATIN SMALL LETTER I"
28841\u0366 "COMBINING LATIN SMALL LETTER O"
28842\u0367 "COMBINING LATIN SMALL LETTER U"
28843\u0368 "COMBINING LATIN SMALL LETTER C"
28844\u0369 "COMBINING LATIN SMALL LETTER D"
28845\u036A "COMBINING LATIN SMALL LETTER H"
28846\u036B "COMBINING LATIN SMALL LETTER M"
28847\u036C "COMBINING LATIN SMALL LETTER R"
28848\u036D "COMBINING LATIN SMALL LETTER T"
28849\u036E "COMBINING LATIN SMALL LETTER V"
28850\u036F "COMBINING LATIN SMALL LETTER X"
28851\u0370 "GREEK CAPITAL LETTER HETA"
28852\u0371 "GREEK SMALL LETTER HETA"
28853\u0372 "GREEK CAPITAL LETTER ARCHAIC SAMPI"
28854\u0373 "GREEK SMALL LETTER ARCHAIC SAMPI"
28855\u0374 "GREEK NUMERAL SIGN"
28856\u0375 "GREEK LOWER NUMERAL SIGN"
28857\u0376 "GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA"
28858\u0377 "GREEK SMALL LETTER PAMPHYLIAN DIGAMMA"
28859\u037A "GREEK YPOGEGRAMMENI"
28860\u037B "GREEK SMALL REVERSED LUNATE SIGMA SYMBOL"
28861\u037C "GREEK SMALL DOTTED LUNATE SIGMA SYMBOL"
28862\u037D "GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL"
28863\u037E "GREEK QUESTION MARK"
28864\u0384 "GREEK TONOS"
28865\u0385 "GREEK DIALYTIKA TONOS"
28866\u0386 "GREEK CAPITAL LETTER ALPHA WITH TONOS"
28867\u0387 "GREEK ANO TELEIA"
28868\u0388 "GREEK CAPITAL LETTER EPSILON WITH TONOS"
28869\u0389 "GREEK CAPITAL LETTER ETA WITH TONOS"
28870\u038A "GREEK CAPITAL LETTER IOTA WITH TONOS"
28871\u038C "GREEK CAPITAL LETTER OMICRON WITH TONOS"
28872\u038E "GREEK CAPITAL LETTER UPSILON WITH TONOS"
28873\u038F "GREEK CAPITAL LETTER OMEGA WITH TONOS"
28874\u0390 "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS"
28875\u0391 "GREEK CAPITAL LETTER ALPHA"
28876\u0392 "GREEK CAPITAL LETTER BETA"
28877\u0393 "GREEK CAPITAL LETTER GAMMA"
28878\u0394 "GREEK CAPITAL LETTER DELTA"
28879\u0395 "GREEK CAPITAL LETTER EPSILON"
28880\u0396 "GREEK CAPITAL LETTER ZETA"
28881\u0397 "GREEK CAPITAL LETTER ETA"
28882\u0398 "GREEK CAPITAL LETTER THETA"
28883\u0399 "GREEK CAPITAL LETTER IOTA"
28884\u039A "GREEK CAPITAL LETTER KAPPA"
28885\u039B "GREEK CAPITAL LETTER LAMDA"
28886\u039C "GREEK CAPITAL LETTER MU"
28887\u039D "GREEK CAPITAL LETTER NU"
28888\u039E "GREEK CAPITAL LETTER XI"
28889\u039F "GREEK CAPITAL LETTER OMICRON"
28890\u03A0 "GREEK CAPITAL LETTER PI"
28891\u03A1 "GREEK CAPITAL LETTER RHO"
28892\u03A3 "GREEK CAPITAL LETTER SIGMA"
28893\u03A4 "GREEK CAPITAL LETTER TAU"
28894\u03A5 "GREEK CAPITAL LETTER UPSILON"
28895\u03A6 "GREEK CAPITAL LETTER PHI"
28896\u03A7 "GREEK CAPITAL LETTER CHI"
28897\u03A8 "GREEK CAPITAL LETTER PSI"
28898\u03A9 "GREEK CAPITAL LETTER OMEGA"
28899\u03AA "GREEK CAPITAL LETTER IOTA WITH DIALYTIKA"
28900\u03AB "GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA"
28901\u03AC "GREEK SMALL LETTER ALPHA WITH TONOS"
28902\u03AD "GREEK SMALL LETTER EPSILON WITH TONOS"
28903\u03AE "GREEK SMALL LETTER ETA WITH TONOS"
28904\u03AF "GREEK SMALL LETTER IOTA WITH TONOS"
28905\u03B0 "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS"
28906\u03B1 "GREEK SMALL LETTER ALPHA"
28907\u03B2 "GREEK SMALL LETTER BETA"
28908\u03B3 "GREEK SMALL LETTER GAMMA"
28909\u03B4 "GREEK SMALL LETTER DELTA"
28910\u03B5 "GREEK SMALL LETTER EPSILON"
28911\u03B6 "GREEK SMALL LETTER ZETA"
28912\u03B7 "GREEK SMALL LETTER ETA"
28913\u03B8 "GREEK SMALL LETTER THETA"
28914\u03B9 "GREEK SMALL LETTER IOTA"
28915\u03BA "GREEK SMALL LETTER KAPPA"
28916\u03BB "GREEK SMALL LETTER LAMDA"
28917\u03BC "GREEK SMALL LETTER MU"
28918\u03BD "GREEK SMALL LETTER NU"
28919\u03BE "GREEK SMALL LETTER XI"
28920\u03BF "GREEK SMALL LETTER OMICRON"
28921\u03C0 "GREEK SMALL LETTER PI"
28922\u03C1 "GREEK SMALL LETTER RHO"
28923\u03C2 "GREEK SMALL LETTER FINAL SIGMA"
28924\u03C3 "GREEK SMALL LETTER SIGMA"
28925\u03C4 "GREEK SMALL LETTER TAU"
28926\u03C5 "GREEK SMALL LETTER UPSILON"
28927\u03C6 "GREEK SMALL LETTER PHI"
28928\u03C7 "GREEK SMALL LETTER CHI"
28929\u03C8 "GREEK SMALL LETTER PSI"
28930\u03C9 "GREEK SMALL LETTER OMEGA"
28931\u03CA "GREEK SMALL LETTER IOTA WITH DIALYTIKA"
28932\u03CB "GREEK SMALL LETTER UPSILON WITH DIALYTIKA"
28933\u03CC "GREEK SMALL LETTER OMICRON WITH TONOS"
28934\u03CD "GREEK SMALL LETTER UPSILON WITH TONOS"
28935\u03CE "GREEK SMALL LETTER OMEGA WITH TONOS"
28936\u03CF "GREEK CAPITAL KAI SYMBOL"
28937\u03D0 "GREEK BETA SYMBOL"
28938\u03D1 "GREEK THETA SYMBOL"
28939\u03D2 "GREEK UPSILON WITH HOOK SYMBOL"
28940\u03D3 "GREEK UPSILON WITH ACUTE AND HOOK SYMBOL"
28941\u03D4 "GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL"
28942\u03D5 "GREEK PHI SYMBOL"
28943\u03D6 "GREEK PI SYMBOL"
28944\u03D7 "GREEK KAI SYMBOL"
28945\u03D8 "GREEK LETTER ARCHAIC KOPPA"
28946\u03D9 "GREEK SMALL LETTER ARCHAIC KOPPA"
28947\u03DA "GREEK LETTER STIGMA"
28948\u03DB "GREEK SMALL LETTER STIGMA"
28949\u03DC "GREEK LETTER DIGAMMA"
28950\u03DD "GREEK SMALL LETTER DIGAMMA"
28951\u03DE "GREEK LETTER KOPPA"
28952\u03DF "GREEK SMALL LETTER KOPPA"
28953\u03E0 "GREEK LETTER SAMPI"
28954\u03E1 "GREEK SMALL LETTER SAMPI"
28955\u03E2 "COPTIC CAPITAL LETTER SHEI"
28956\u03E3 "COPTIC SMALL LETTER SHEI"
28957\u03E4 "COPTIC CAPITAL LETTER FEI"
28958\u03E5 "COPTIC SMALL LETTER FEI"
28959\u03E6 "COPTIC CAPITAL LETTER KHEI"
28960\u03E7 "COPTIC SMALL LETTER KHEI"
28961\u03E8 "COPTIC CAPITAL LETTER HORI"
28962\u03E9 "COPTIC SMALL LETTER HORI"
28963\u03EA "COPTIC CAPITAL LETTER GANGIA"
28964\u03EB "COPTIC SMALL LETTER GANGIA"
28965\u03EC "COPTIC CAPITAL LETTER SHIMA"
28966\u03ED "COPTIC SMALL LETTER SHIMA"
28967\u03EE "COPTIC CAPITAL LETTER DEI"
28968\u03EF "COPTIC SMALL LETTER DEI"
28969\u03F0 "GREEK KAPPA SYMBOL"
28970\u03F1 "GREEK RHO SYMBOL"
28971\u03F2 "GREEK LUNATE SIGMA SYMBOL"
28972\u03F3 "GREEK LETTER YOT"
28973\u03F4 "GREEK CAPITAL THETA SYMBOL"
28974\u03F5 "GREEK LUNATE EPSILON SYMBOL"
28975\u03F6 "GREEK REVERSED LUNATE EPSILON SYMBOL"
28976\u03F7 "GREEK CAPITAL LETTER SHO"
28977\u03F8 "GREEK SMALL LETTER SHO"
28978\u03F9 "GREEK CAPITAL LUNATE SIGMA SYMBOL"
28979\u03FA "GREEK CAPITAL LETTER SAN"
28980\u03FB "GREEK SMALL LETTER SAN"
28981\u03FC "GREEK RHO WITH STROKE SYMBOL"
28982\u03FD "GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL"
28983\u03FE "GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL"
28984\u03FF "GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL"
28985\u0400 "CYRILLIC CAPITAL LETTER IE WITH GRAVE"
28986\u0401 "CYRILLIC CAPITAL LETTER IO"
28987\u0402 "CYRILLIC CAPITAL LETTER DJE"
28988\u0403 "CYRILLIC CAPITAL LETTER GJE"
28989\u0404 "CYRILLIC CAPITAL LETTER UKRAINIAN IE"
28990\u0405 "CYRILLIC CAPITAL LETTER DZE"
28991\u0406 "CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I"
28992\u0407 "CYRILLIC CAPITAL LETTER YI"
28993\u0408 "CYRILLIC CAPITAL LETTER JE"
28994\u0409 "CYRILLIC CAPITAL LETTER LJE"
28995\u040A "CYRILLIC CAPITAL LETTER NJE"
28996\u040B "CYRILLIC CAPITAL LETTER TSHE"
28997\u040C "CYRILLIC CAPITAL LETTER KJE"
28998\u040D "CYRILLIC CAPITAL LETTER I WITH GRAVE"
28999\u040E "CYRILLIC CAPITAL LETTER SHORT U"
29000\u040F "CYRILLIC CAPITAL LETTER DZHE"
29001\u0410 "CYRILLIC CAPITAL LETTER A"
29002\u0411 "CYRILLIC CAPITAL LETTER BE"
29003\u0412 "CYRILLIC CAPITAL LETTER VE"
29004\u0413 "CYRILLIC CAPITAL LETTER GHE"
29005\u0414 "CYRILLIC CAPITAL LETTER DE"
29006\u0415 "CYRILLIC CAPITAL LETTER IE"
29007\u0416 "CYRILLIC CAPITAL LETTER ZHE"
29008\u0417 "CYRILLIC CAPITAL LETTER ZE"
29009\u0418 "CYRILLIC CAPITAL LETTER I"
29010\u0419 "CYRILLIC CAPITAL LETTER SHORT I"
29011\u041A "CYRILLIC CAPITAL LETTER KA"
29012\u041B "CYRILLIC CAPITAL LETTER EL"
29013\u041C "CYRILLIC CAPITAL LETTER EM"
29014\u041D "CYRILLIC CAPITAL LETTER EN"
29015\u041E "CYRILLIC CAPITAL LETTER O"
29016\u041F "CYRILLIC CAPITAL LETTER PE"
29017\u0420 "CYRILLIC CAPITAL LETTER ER"
29018\u0421 "CYRILLIC CAPITAL LETTER ES"
29019\u0422 "CYRILLIC CAPITAL LETTER TE"
29020\u0423 "CYRILLIC CAPITAL LETTER U"
29021\u0424 "CYRILLIC CAPITAL LETTER EF"
29022\u0425 "CYRILLIC CAPITAL LETTER HA"
29023\u0426 "CYRILLIC CAPITAL LETTER TSE"
29024\u0427 "CYRILLIC CAPITAL LETTER CHE"
29025\u0428 "CYRILLIC CAPITAL LETTER SHA"
29026\u0429 "CYRILLIC CAPITAL LETTER SHCHA"
29027\u042A "CYRILLIC CAPITAL LETTER HARD SIGN"
29028\u042B "CYRILLIC CAPITAL LETTER YERU"
29029\u042C "CYRILLIC CAPITAL LETTER SOFT SIGN"
29030\u042D "CYRILLIC CAPITAL LETTER E"
29031\u042E "CYRILLIC CAPITAL LETTER YU"
29032\u042F "CYRILLIC CAPITAL LETTER YA"
29033\u0430 "CYRILLIC SMALL LETTER A"
29034\u0431 "CYRILLIC SMALL LETTER BE"
29035\u0432 "CYRILLIC SMALL LETTER VE"
29036\u0433 "CYRILLIC SMALL LETTER GHE"
29037\u0434 "CYRILLIC SMALL LETTER DE"
29038\u0435 "CYRILLIC SMALL LETTER IE"
29039\u0436 "CYRILLIC SMALL LETTER ZHE"
29040\u0437 "CYRILLIC SMALL LETTER ZE"
29041\u0438 "CYRILLIC SMALL LETTER I"
29042\u0439 "CYRILLIC SMALL LETTER SHORT I"
29043\u043A "CYRILLIC SMALL LETTER KA"
29044\u043B "CYRILLIC SMALL LETTER EL"
29045\u043C "CYRILLIC SMALL LETTER EM"
29046\u043D "CYRILLIC SMALL LETTER EN"
29047\u043E "CYRILLIC SMALL LETTER O"
29048\u043F "CYRILLIC SMALL LETTER PE"
29049\u0440 "CYRILLIC SMALL LETTER ER"
29050\u0441 "CYRILLIC SMALL LETTER ES"
29051\u0442 "CYRILLIC SMALL LETTER TE"
29052\u0443 "CYRILLIC SMALL LETTER U"
29053\u0444 "CYRILLIC SMALL LETTER EF"
29054\u0445 "CYRILLIC SMALL LETTER HA"
29055\u0446 "CYRILLIC SMALL LETTER TSE"
29056\u0447 "CYRILLIC SMALL LETTER CHE"
29057\u0448 "CYRILLIC SMALL LETTER SHA"
29058\u0449 "CYRILLIC SMALL LETTER SHCHA"
29059\u044A "CYRILLIC SMALL LETTER HARD SIGN"
29060\u044B "CYRILLIC SMALL LETTER YERU"
29061\u044C "CYRILLIC SMALL LETTER SOFT SIGN"
29062\u044D "CYRILLIC SMALL LETTER E"
29063\u044E "CYRILLIC SMALL LETTER YU"
29064\u044F "CYRILLIC SMALL LETTER YA"
29065\u0450 "CYRILLIC SMALL LETTER IE WITH GRAVE"
29066\u0451 "CYRILLIC SMALL LETTER IO"
29067\u0452 "CYRILLIC SMALL LETTER DJE"
29068\u0453 "CYRILLIC SMALL LETTER GJE"
29069\u0454 "CYRILLIC SMALL LETTER UKRAINIAN IE"
29070\u0455 "CYRILLIC SMALL LETTER DZE"
29071\u0456 "CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I"
29072\u0457 "CYRILLIC SMALL LETTER YI"
29073\u0458 "CYRILLIC SMALL LETTER JE"
29074\u0459 "CYRILLIC SMALL LETTER LJE"
29075\u045A "CYRILLIC SMALL LETTER NJE"
29076\u045B "CYRILLIC SMALL LETTER TSHE"
29077\u045C "CYRILLIC SMALL LETTER KJE"
29078\u045D "CYRILLIC SMALL LETTER I WITH GRAVE"
29079\u045E "CYRILLIC SMALL LETTER SHORT U"
29080\u045F "CYRILLIC SMALL LETTER DZHE"
29081\u0460 "CYRILLIC CAPITAL LETTER OMEGA"
29082\u0461 "CYRILLIC SMALL LETTER OMEGA"
29083\u0462 "CYRILLIC CAPITAL LETTER YAT"
29084\u0463 "CYRILLIC SMALL LETTER YAT"
29085\u0464 "CYRILLIC CAPITAL LETTER IOTIFIED E"
29086\u0465 "CYRILLIC SMALL LETTER IOTIFIED E"
29087\u0466 "CYRILLIC CAPITAL LETTER LITTLE YUS"
29088\u0467 "CYRILLIC SMALL LETTER LITTLE YUS"
29089\u0468 "CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS"
29090\u0469 "CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS"
29091\u046A "CYRILLIC CAPITAL LETTER BIG YUS"
29092\u046B "CYRILLIC SMALL LETTER BIG YUS"
29093\u046C "CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS"
29094\u046D "CYRILLIC SMALL LETTER IOTIFIED BIG YUS"
29095\u046E "CYRILLIC CAPITAL LETTER KSI"
29096\u046F "CYRILLIC SMALL LETTER KSI"
29097\u0470 "CYRILLIC CAPITAL LETTER PSI"
29098\u0471 "CYRILLIC SMALL LETTER PSI"
29099\u0472 "CYRILLIC CAPITAL LETTER FITA"
29100\u0473 "CYRILLIC SMALL LETTER FITA"
29101\u0474 "CYRILLIC CAPITAL LETTER IZHITSA"
29102\u0475 "CYRILLIC SMALL LETTER IZHITSA"
29103\u0476 "CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT"
29104\u0477 "CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT"
29105\u0478 "CYRILLIC CAPITAL LETTER UK"
29106\u0479 "CYRILLIC SMALL LETTER UK"
29107\u047A "CYRILLIC CAPITAL LETTER ROUND OMEGA"
29108\u047B "CYRILLIC SMALL LETTER ROUND OMEGA"
29109\u047C "CYRILLIC CAPITAL LETTER OMEGA WITH TITLO"
29110\u047D "CYRILLIC SMALL LETTER OMEGA WITH TITLO"
29111\u047E "CYRILLIC CAPITAL LETTER OT"
29112\u047F "CYRILLIC SMALL LETTER OT"
29113\u0480 "CYRILLIC CAPITAL LETTER KOPPA"
29114\u0481 "CYRILLIC SMALL LETTER KOPPA"
29115\u0482 "CYRILLIC THOUSANDS SIGN"
29116\u0483 "COMBINING CYRILLIC TITLO"
29117\u0484 "COMBINING CYRILLIC PALATALIZATION"
29118\u0485 "COMBINING CYRILLIC DASIA PNEUMATA"
29119\u0486 "COMBINING CYRILLIC PSILI PNEUMATA"
29120\u0487 "COMBINING CYRILLIC POKRYTIE"
29121\u0488 "COMBINING CYRILLIC HUNDRED THOUSANDS SIGN"
29122\u0489 "COMBINING CYRILLIC MILLIONS SIGN"
29123\u048A "CYRILLIC CAPITAL LETTER SHORT I WITH TAIL"
29124\u048B "CYRILLIC SMALL LETTER SHORT I WITH TAIL"
29125\u048C "CYRILLIC CAPITAL LETTER SEMISOFT SIGN"
29126\u048D "CYRILLIC SMALL LETTER SEMISOFT SIGN"
29127\u048E "CYRILLIC CAPITAL LETTER ER WITH TICK"
29128\u048F "CYRILLIC SMALL LETTER ER WITH TICK"
29129\u0490 "CYRILLIC CAPITAL LETTER GHE WITH UPTURN"
29130\u0491 "CYRILLIC SMALL LETTER GHE WITH UPTURN"
29131\u0492 "CYRILLIC CAPITAL LETTER GHE WITH STROKE"
29132\u0493 "CYRILLIC SMALL LETTER GHE WITH STROKE"
29133\u0494 "CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK"
29134\u0495 "CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK"
29135\u0496 "CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER"
29136\u0497 "CYRILLIC SMALL LETTER ZHE WITH DESCENDER"
29137\u0498 "CYRILLIC CAPITAL LETTER ZE WITH DESCENDER"
29138\u0499 "CYRILLIC SMALL LETTER ZE WITH DESCENDER"
29139\u049A "CYRILLIC CAPITAL LETTER KA WITH DESCENDER"
29140\u049B "CYRILLIC SMALL LETTER KA WITH DESCENDER"
29141\u049C "CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE"
29142\u049D "CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE"
29143\u049E "CYRILLIC CAPITAL LETTER KA WITH STROKE"
29144\u049F "CYRILLIC SMALL LETTER KA WITH STROKE"
29145\u04A0 "CYRILLIC CAPITAL LETTER BASHKIR KA"
29146\u04A1 "CYRILLIC SMALL LETTER BASHKIR KA"
29147\u04A2 "CYRILLIC CAPITAL LETTER EN WITH DESCENDER"
29148\u04A3 "CYRILLIC SMALL LETTER EN WITH DESCENDER"
29149\u04A4 "CYRILLIC CAPITAL LIGATURE EN GHE"
29150\u04A5 "CYRILLIC SMALL LIGATURE EN GHE"
29151\u04A6 "CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK"
29152\u04A7 "CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK"
29153\u04A8 "CYRILLIC CAPITAL LETTER ABKHASIAN HA"
29154\u04A9 "CYRILLIC SMALL LETTER ABKHASIAN HA"
29155\u04AA "CYRILLIC CAPITAL LETTER ES WITH DESCENDER"
29156\u04AB "CYRILLIC SMALL LETTER ES WITH DESCENDER"
29157\u04AC "CYRILLIC CAPITAL LETTER TE WITH DESCENDER"
29158\u04AD "CYRILLIC SMALL LETTER TE WITH DESCENDER"
29159\u04AE "CYRILLIC CAPITAL LETTER STRAIGHT U"
29160\u04AF "CYRILLIC SMALL LETTER STRAIGHT U"
29161\u04B0 "CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE"
29162\u04B1 "CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE"
29163\u04B2 "CYRILLIC CAPITAL LETTER HA WITH DESCENDER"
29164\u04B3 "CYRILLIC SMALL LETTER HA WITH DESCENDER"
29165\u04B4 "CYRILLIC CAPITAL LIGATURE TE TSE"
29166\u04B5 "CYRILLIC SMALL LIGATURE TE TSE"
29167\u04B6 "CYRILLIC CAPITAL LETTER CHE WITH DESCENDER"
29168\u04B7 "CYRILLIC SMALL LETTER CHE WITH DESCENDER"
29169\u04B8 "CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE"
29170\u04B9 "CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE"
29171\u04BA "CYRILLIC CAPITAL LETTER SHHA"
29172\u04BB "CYRILLIC SMALL LETTER SHHA"
29173\u04BC "CYRILLIC CAPITAL LETTER ABKHASIAN CHE"
29174\u04BD "CYRILLIC SMALL LETTER ABKHASIAN CHE"
29175\u04BE "CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER"
29176\u04BF "CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER"
29177\u04C0 "CYRILLIC LETTER PALOCHKA"
29178\u04C1 "CYRILLIC CAPITAL LETTER ZHE WITH BREVE"
29179\u04C2 "CYRILLIC SMALL LETTER ZHE WITH BREVE"
29180\u04C3 "CYRILLIC CAPITAL LETTER KA WITH HOOK"
29181\u04C4 "CYRILLIC SMALL LETTER KA WITH HOOK"
29182\u04C5 "CYRILLIC CAPITAL LETTER EL WITH TAIL"
29183\u04C6 "CYRILLIC SMALL LETTER EL WITH TAIL"
29184\u04C7 "CYRILLIC CAPITAL LETTER EN WITH HOOK"
29185\u04C8 "CYRILLIC SMALL LETTER EN WITH HOOK"
29186\u04C9 "CYRILLIC CAPITAL LETTER EN WITH TAIL"
29187\u04CA "CYRILLIC SMALL LETTER EN WITH TAIL"
29188\u04CB "CYRILLIC CAPITAL LETTER KHAKASSIAN CHE"
29189\u04CC "CYRILLIC SMALL LETTER KHAKASSIAN CHE"
29190\u04CD "CYRILLIC CAPITAL LETTER EM WITH TAIL"
29191\u04CE "CYRILLIC SMALL LETTER EM WITH TAIL"
29192\u04CF "CYRILLIC SMALL LETTER PALOCHKA"
29193\u04D0 "CYRILLIC CAPITAL LETTER A WITH BREVE"
29194\u04D1 "CYRILLIC SMALL LETTER A WITH BREVE"
29195\u04D2 "CYRILLIC CAPITAL LETTER A WITH DIAERESIS"
29196\u04D3 "CYRILLIC SMALL LETTER A WITH DIAERESIS"
29197\u04D4 "CYRILLIC CAPITAL LIGATURE A IE"
29198\u04D5 "CYRILLIC SMALL LIGATURE A IE"
29199\u04D6 "CYRILLIC CAPITAL LETTER IE WITH BREVE"
29200\u04D7 "CYRILLIC SMALL LETTER IE WITH BREVE"
29201\u04D8 "CYRILLIC CAPITAL LETTER SCHWA"
29202\u04D9 "CYRILLIC SMALL LETTER SCHWA"
29203\u04DA "CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS"
29204\u04DB "CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS"
29205\u04DC "CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS"
29206\u04DD "CYRILLIC SMALL LETTER ZHE WITH DIAERESIS"
29207\u04DE "CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS"
29208\u04DF "CYRILLIC SMALL LETTER ZE WITH DIAERESIS"
29209\u04E0 "CYRILLIC CAPITAL LETTER ABKHASIAN DZE"
29210\u04E1 "CYRILLIC SMALL LETTER ABKHASIAN DZE"
29211\u04E2 "CYRILLIC CAPITAL LETTER I WITH MACRON"
29212\u04E3 "CYRILLIC SMALL LETTER I WITH MACRON"
29213\u04E4 "CYRILLIC CAPITAL LETTER I WITH DIAERESIS"
29214\u04E5 "CYRILLIC SMALL LETTER I WITH DIAERESIS"
29215\u04E6 "CYRILLIC CAPITAL LETTER O WITH DIAERESIS"
29216\u04E7 "CYRILLIC SMALL LETTER O WITH DIAERESIS"
29217\u04E8 "CYRILLIC CAPITAL LETTER BARRED O"
29218\u04E9 "CYRILLIC SMALL LETTER BARRED O"
29219\u04EA "CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS"
29220\u04EB "CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS"
29221\u04EC "CYRILLIC CAPITAL LETTER E WITH DIAERESIS"
29222\u04ED "CYRILLIC SMALL LETTER E WITH DIAERESIS"
29223\u04EE "CYRILLIC CAPITAL LETTER U WITH MACRON"
29224\u04EF "CYRILLIC SMALL LETTER U WITH MACRON"
29225\u04F0 "CYRILLIC CAPITAL LETTER U WITH DIAERESIS"
29226\u04F1 "CYRILLIC SMALL LETTER U WITH DIAERESIS"
29227\u04F2 "CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE"
29228\u04F3 "CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE"
29229\u04F4 "CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS"
29230\u04F5 "CYRILLIC SMALL LETTER CHE WITH DIAERESIS"
29231\u04F6 "CYRILLIC CAPITAL LETTER GHE WITH DESCENDER"
29232\u04F7 "CYRILLIC SMALL LETTER GHE WITH DESCENDER"
29233\u04F8 "CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS"
29234\u04F9 "CYRILLIC SMALL LETTER YERU WITH DIAERESIS"
29235\u04FA "CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK"
29236\u04FB "CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK"
29237\u04FC "CYRILLIC CAPITAL LETTER HA WITH HOOK"
29238\u04FD "CYRILLIC SMALL LETTER HA WITH HOOK"
29239\u04FE "CYRILLIC CAPITAL LETTER HA WITH STROKE"
29240\u04FF "CYRILLIC SMALL LETTER HA WITH STROKE"
29241\u0500 "CYRILLIC CAPITAL LETTER KOMI DE"
29242\u0501 "CYRILLIC SMALL LETTER KOMI DE"
29243\u0502 "CYRILLIC CAPITAL LETTER KOMI DJE"
29244\u0503 "CYRILLIC SMALL LETTER KOMI DJE"
29245\u0504 "CYRILLIC CAPITAL LETTER KOMI ZJE"
29246\u0505 "CYRILLIC SMALL LETTER KOMI ZJE"
29247\u0506 "CYRILLIC CAPITAL LETTER KOMI DZJE"
29248\u0507 "CYRILLIC SMALL LETTER KOMI DZJE"
29249\u0508 "CYRILLIC CAPITAL LETTER KOMI LJE"
29250\u0509 "CYRILLIC SMALL LETTER KOMI LJE"
29251\u050A "CYRILLIC CAPITAL LETTER KOMI NJE"
29252\u050B "CYRILLIC SMALL LETTER KOMI NJE"
29253\u050C "CYRILLIC CAPITAL LETTER KOMI SJE"
29254\u050D "CYRILLIC SMALL LETTER KOMI SJE"
29255\u050E "CYRILLIC CAPITAL LETTER KOMI TJE"
29256\u050F "CYRILLIC SMALL LETTER KOMI TJE"
29257\u0510 "CYRILLIC CAPITAL LETTER REVERSED ZE"
29258\u0511 "CYRILLIC SMALL LETTER REVERSED ZE"
29259\u0512 "CYRILLIC CAPITAL LETTER EL WITH HOOK"
29260\u0513 "CYRILLIC SMALL LETTER EL WITH HOOK"
29261\u0514 "CYRILLIC CAPITAL LETTER LHA"
29262\u0515 "CYRILLIC SMALL LETTER LHA"
29263\u0516 "CYRILLIC CAPITAL LETTER RHA"
29264\u0517 "CYRILLIC SMALL LETTER RHA"
29265\u0518 "CYRILLIC CAPITAL LETTER YAE"
29266\u0519 "CYRILLIC SMALL LETTER YAE"
29267\u051A "CYRILLIC CAPITAL LETTER QA"
29268\u051B "CYRILLIC SMALL LETTER QA"
29269\u051C "CYRILLIC CAPITAL LETTER WE"
29270\u051D "CYRILLIC SMALL LETTER WE"
29271\u051E "CYRILLIC CAPITAL LETTER ALEUT KA"
29272\u051F "CYRILLIC SMALL LETTER ALEUT KA"
29273\u0520 "CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK"
29274\u0521 "CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK"
29275\u0522 "CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK"
29276\u0523 "CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK"
29277\u0531 "ARMENIAN CAPITAL LETTER AYB"
29278\u0532 "ARMENIAN CAPITAL LETTER BEN"
29279\u0533 "ARMENIAN CAPITAL LETTER GIM"
29280\u0534 "ARMENIAN CAPITAL LETTER DA"
29281\u0535 "ARMENIAN CAPITAL LETTER ECH"
29282\u0536 "ARMENIAN CAPITAL LETTER ZA"
29283\u0537 "ARMENIAN CAPITAL LETTER EH"
29284\u0538 "ARMENIAN CAPITAL LETTER ET"
29285\u0539 "ARMENIAN CAPITAL LETTER TO"
29286\u053A "ARMENIAN CAPITAL LETTER ZHE"
29287\u053B "ARMENIAN CAPITAL LETTER INI"
29288\u053C "ARMENIAN CAPITAL LETTER LIWN"
29289\u053D "ARMENIAN CAPITAL LETTER XEH"
29290\u053E "ARMENIAN CAPITAL LETTER CA"
29291\u053F "ARMENIAN CAPITAL LETTER KEN"
29292\u0540 "ARMENIAN CAPITAL LETTER HO"
29293\u0541 "ARMENIAN CAPITAL LETTER JA"
29294\u0542 "ARMENIAN CAPITAL LETTER GHAD"
29295\u0543 "ARMENIAN CAPITAL LETTER CHEH"
29296\u0544 "ARMENIAN CAPITAL LETTER MEN"
29297\u0545 "ARMENIAN CAPITAL LETTER YI"
29298\u0546 "ARMENIAN CAPITAL LETTER NOW"
29299\u0547 "ARMENIAN CAPITAL LETTER SHA"
29300\u0548 "ARMENIAN CAPITAL LETTER VO"
29301\u0549 "ARMENIAN CAPITAL LETTER CHA"
29302\u054A "ARMENIAN CAPITAL LETTER PEH"
29303\u054B "ARMENIAN CAPITAL LETTER JHEH"
29304\u054C "ARMENIAN CAPITAL LETTER RA"
29305\u054D "ARMENIAN CAPITAL LETTER SEH"
29306\u054E "ARMENIAN CAPITAL LETTER VEW"
29307\u054F "ARMENIAN CAPITAL LETTER TIWN"
29308\u0550 "ARMENIAN CAPITAL LETTER REH"
29309\u0551 "ARMENIAN CAPITAL LETTER CO"
29310\u0552 "ARMENIAN CAPITAL LETTER YIWN"
29311\u0553 "ARMENIAN CAPITAL LETTER PIWR"
29312\u0554 "ARMENIAN CAPITAL LETTER KEH"
29313\u0555 "ARMENIAN CAPITAL LETTER OH"
29314\u0556 "ARMENIAN CAPITAL LETTER FEH"
29315\u0559 "ARMENIAN MODIFIER LETTER LEFT HALF RING"
29316\u055A "ARMENIAN APOSTROPHE"
29317\u055B "ARMENIAN EMPHASIS MARK"
29318\u055C "ARMENIAN EXCLAMATION MARK"
29319\u055D "ARMENIAN COMMA"
29320\u055E "ARMENIAN QUESTION MARK"
29321\u055F "ARMENIAN ABBREVIATION MARK"
29322\u0561 "ARMENIAN SMALL LETTER AYB"
29323\u0562 "ARMENIAN SMALL LETTER BEN"
29324\u0563 "ARMENIAN SMALL LETTER GIM"
29325\u0564 "ARMENIAN SMALL LETTER DA"
29326\u0565 "ARMENIAN SMALL LETTER ECH"
29327\u0566 "ARMENIAN SMALL LETTER ZA"
29328\u0567 "ARMENIAN SMALL LETTER EH"
29329\u0568 "ARMENIAN SMALL LETTER ET"
29330\u0569 "ARMENIAN SMALL LETTER TO"
29331\u056A "ARMENIAN SMALL LETTER ZHE"
29332\u056B "ARMENIAN SMALL LETTER INI"
29333\u056C "ARMENIAN SMALL LETTER LIWN"
29334\u056D "ARMENIAN SMALL LETTER XEH"
29335\u056E "ARMENIAN SMALL LETTER CA"
29336\u056F "ARMENIAN SMALL LETTER KEN"
29337\u0570 "ARMENIAN SMALL LETTER HO"
29338\u0571 "ARMENIAN SMALL LETTER JA"
29339\u0572 "ARMENIAN SMALL LETTER GHAD"
29340\u0573 "ARMENIAN SMALL LETTER CHEH"
29341\u0574 "ARMENIAN SMALL LETTER MEN"
29342\u0575 "ARMENIAN SMALL LETTER YI"
29343\u0576 "ARMENIAN SMALL LETTER NOW"
29344\u0577 "ARMENIAN SMALL LETTER SHA"
29345\u0578 "ARMENIAN SMALL LETTER VO"
29346\u0579 "ARMENIAN SMALL LETTER CHA"
29347\u057A "ARMENIAN SMALL LETTER PEH"
29348\u057B "ARMENIAN SMALL LETTER JHEH"
29349\u057C "ARMENIAN SMALL LETTER RA"
29350\u057D "ARMENIAN SMALL LETTER SEH"
29351\u057E "ARMENIAN SMALL LETTER VEW"
29352\u057F "ARMENIAN SMALL LETTER TIWN"
29353\u0580 "ARMENIAN SMALL LETTER REH"
29354\u0581 "ARMENIAN SMALL LETTER CO"
29355\u0582 "ARMENIAN SMALL LETTER YIWN"
29356\u0583 "ARMENIAN SMALL LETTER PIWR"
29357\u0584 "ARMENIAN SMALL LETTER KEH"
29358\u0585 "ARMENIAN SMALL LETTER OH"
29359\u0586 "ARMENIAN SMALL LETTER FEH"
29360\u0587 "ARMENIAN SMALL LIGATURE ECH YIWN"
29361\u0589 "ARMENIAN FULL STOP"
29362\u058A "ARMENIAN HYPHEN"
29363\u0591 "HEBREW ACCENT ETNAHTA"
29364\u0592 "HEBREW ACCENT SEGOL"
29365\u0593 "HEBREW ACCENT SHALSHELET"
29366\u0594 "HEBREW ACCENT ZAQEF QATAN"
29367\u0595 "HEBREW ACCENT ZAQEF GADOL"
29368\u0596 "HEBREW ACCENT TIPEHA"
29369\u0597 "HEBREW ACCENT REVIA"
29370\u0598 "HEBREW ACCENT ZARQA"
29371\u0599 "HEBREW ACCENT PASHTA"
29372\u059A "HEBREW ACCENT YETIV"
29373\u059B "HEBREW ACCENT TEVIR"
29374\u059C "HEBREW ACCENT GERESH"
29375\u059D "HEBREW ACCENT GERESH MUQDAM"
29376\u059E "HEBREW ACCENT GERSHAYIM"
29377\u059F "HEBREW ACCENT QARNEY PARA"
29378\u05A0 "HEBREW ACCENT TELISHA GEDOLA"
29379\u05A1 "HEBREW ACCENT PAZER"
29380\u05A2 "HEBREW ACCENT ATNAH HAFUKH"
29381\u05A3 "HEBREW ACCENT MUNAH"
29382\u05A4 "HEBREW ACCENT MAHAPAKH"
29383\u05A5 "HEBREW ACCENT MERKHA"
29384\u05A6 "HEBREW ACCENT MERKHA KEFULA"
29385\u05A7 "HEBREW ACCENT DARGA"
29386\u05A8 "HEBREW ACCENT QADMA"
29387\u05A9 "HEBREW ACCENT TELISHA QETANA"
29388\u05AA "HEBREW ACCENT YERAH BEN YOMO"
29389\u05AB "HEBREW ACCENT OLE"
29390\u05AC "HEBREW ACCENT ILUY"
29391\u05AD "HEBREW ACCENT DEHI"
29392\u05AE "HEBREW ACCENT ZINOR"
29393\u05AF "HEBREW MARK MASORA CIRCLE"
29394\u05B0 "HEBREW POINT SHEVA"
29395\u05B1 "HEBREW POINT HATAF SEGOL"
29396\u05B2 "HEBREW POINT HATAF PATAH"
29397\u05B3 "HEBREW POINT HATAF QAMATS"
29398\u05B4 "HEBREW POINT HIRIQ"
29399\u05B5 "HEBREW POINT TSERE"
29400\u05B6 "HEBREW POINT SEGOL"
29401\u05B7 "HEBREW POINT PATAH"
29402\u05B8 "HEBREW POINT QAMATS"
29403\u05B9 "HEBREW POINT HOLAM"
29404\u05BA "HEBREW POINT HOLAM HASER FOR VAV"
29405\u05BB "HEBREW POINT QUBUTS"
29406\u05BC "HEBREW POINT DAGESH OR MAPIQ"
29407\u05BD "HEBREW POINT METEG"
29408\u05BE "HEBREW PUNCTUATION MAQAF"
29409\u05BF "HEBREW POINT RAFE"
29410\u05C0 "HEBREW PUNCTUATION PASEQ"
29411\u05C1 "HEBREW POINT SHIN DOT"
29412\u05C2 "HEBREW POINT SIN DOT"
29413\u05C3 "HEBREW PUNCTUATION SOF PASUQ"
29414\u05C4 "HEBREW MARK UPPER DOT"
29415\u05C5 "HEBREW MARK LOWER DOT"
29416\u05C6 "HEBREW PUNCTUATION NUN HAFUKHA"
29417\u05C7 "HEBREW POINT QAMATS QATAN"
29418\u05D0 "HEBREW LETTER ALEF"
29419\u05D1 "HEBREW LETTER BET"
29420\u05D2 "HEBREW LETTER GIMEL"
29421\u05D3 "HEBREW LETTER DALET"
29422\u05D4 "HEBREW LETTER HE"
29423\u05D5 "HEBREW LETTER VAV"
29424\u05D6 "HEBREW LETTER ZAYIN"
29425\u05D7 "HEBREW LETTER HET"
29426\u05D8 "HEBREW LETTER TET"
29427\u05D9 "HEBREW LETTER YOD"
29428\u05DA "HEBREW LETTER FINAL KAF"
29429\u05DB "HEBREW LETTER KAF"
29430\u05DC "HEBREW LETTER LAMED"
29431\u05DD "HEBREW LETTER FINAL MEM"
29432\u05DE "HEBREW LETTER MEM"
29433\u05DF "HEBREW LETTER FINAL NUN"
29434\u05E0 "HEBREW LETTER NUN"
29435\u05E1 "HEBREW LETTER SAMEKH"
29436\u05E2 "HEBREW LETTER AYIN"
29437\u05E3 "HEBREW LETTER FINAL PE"
29438\u05E4 "HEBREW LETTER PE"
29439\u05E5 "HEBREW LETTER FINAL TSADI"
29440\u05E6 "HEBREW LETTER TSADI"
29441\u05E7 "HEBREW LETTER QOF"
29442\u05E8 "HEBREW LETTER RESH"
29443\u05E9 "HEBREW LETTER SHIN"
29444\u05EA "HEBREW LETTER TAV"
29445\u05F0 "HEBREW LIGATURE YIDDISH DOUBLE VAV"
29446\u05F1 "HEBREW LIGATURE YIDDISH VAV YOD"
29447\u05F2 "HEBREW LIGATURE YIDDISH DOUBLE YOD"
29448\u05F3 "HEBREW PUNCTUATION GERESH"
29449\u05F4 "HEBREW PUNCTUATION GERSHAYIM"
29450\u0600 "ARABIC NUMBER SIGN"
29451\u0601 "ARABIC SIGN SANAH"
29452\u0602 "ARABIC FOOTNOTE MARKER"
29453\u0603 "ARABIC SIGN SAFHA"
29454\u0606 "ARABIC-INDIC CUBE ROOT"
29455\u0607 "ARABIC-INDIC FOURTH ROOT"
29456\u0608 "ARABIC RAY"
29457\u0609 "ARABIC-INDIC PER MILLE SIGN"
29458\u060A "ARABIC-INDIC PER TEN THOUSAND SIGN"
29459\u060B "AFGHANI SIGN"
29460\u060C "ARABIC COMMA"
29461\u060D "ARABIC DATE SEPARATOR"
29462\u060E "ARABIC POETIC VERSE SIGN"
29463\u060F "ARABIC SIGN MISRA"
29464\u0610 "ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM"
29465\u0611 "ARABIC SIGN ALAYHE ASSALLAM"
29466\u0612 "ARABIC SIGN RAHMATULLAH ALAYHE"
29467\u0613 "ARABIC SIGN RADI ALLAHOU ANHU"
29468\u0614 "ARABIC SIGN TAKHALLUS"
29469\u0615 "ARABIC SMALL HIGH TAH"
29470\u0616 "ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH"
29471\u0617 "ARABIC SMALL HIGH ZAIN"
29472\u0618 "ARABIC SMALL FATHA"
29473\u0619 "ARABIC SMALL DAMMA"
29474\u061A "ARABIC SMALL KASRA"
29475\u061B "ARABIC SEMICOLON"
29476\u061E "ARABIC TRIPLE DOT PUNCTUATION MARK"
29477\u061F "ARABIC QUESTION MARK"
29478\u0621 "ARABIC LETTER HAMZA"
29479\u0622 "ARABIC LETTER ALEF WITH MADDA ABOVE"
29480\u0623 "ARABIC LETTER ALEF WITH HAMZA ABOVE"
29481\u0624 "ARABIC LETTER WAW WITH HAMZA ABOVE"
29482\u0625 "ARABIC LETTER ALEF WITH HAMZA BELOW"
29483\u0626 "ARABIC LETTER YEH WITH HAMZA ABOVE"
29484\u0627 "ARABIC LETTER ALEF"
29485\u0628 "ARABIC LETTER BEH"
29486\u0629 "ARABIC LETTER TEH MARBUTA"
29487\u062A "ARABIC LETTER TEH"
29488\u062B "ARABIC LETTER THEH"
29489\u062C "ARABIC LETTER JEEM"
29490\u062D "ARABIC LETTER HAH"
29491\u062E "ARABIC LETTER KHAH"
29492\u062F "ARABIC LETTER DAL"
29493\u0630 "ARABIC LETTER THAL"
29494\u0631 "ARABIC LETTER REH"
29495\u0632 "ARABIC LETTER ZAIN"
29496\u0633 "ARABIC LETTER SEEN"
29497\u0634 "ARABIC LETTER SHEEN"
29498\u0635 "ARABIC LETTER SAD"
29499\u0636 "ARABIC LETTER DAD"
29500\u0637 "ARABIC LETTER TAH"
29501\u0638 "ARABIC LETTER ZAH"
29502\u0639 "ARABIC LETTER AIN"
29503\u063A "ARABIC LETTER GHAIN"
29504\u063B "ARABIC LETTER KEHEH WITH TWO DOTS ABOVE"
29505\u063C "ARABIC LETTER KEHEH WITH THREE DOTS BELOW"
29506\u063D "ARABIC LETTER FARSI YEH WITH INVERTED V"
29507\u063E "ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE"
29508\u063F "ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE"
29509\u0640 "ARABIC TATWEEL"
29510\u0641 "ARABIC LETTER FEH"
29511\u0642 "ARABIC LETTER QAF"
29512\u0643 "ARABIC LETTER KAF"
29513\u0644 "ARABIC LETTER LAM"
29514\u0645 "ARABIC LETTER MEEM"
29515\u0646 "ARABIC LETTER NOON"
29516\u0647 "ARABIC LETTER HEH"
29517\u0648 "ARABIC LETTER WAW"
29518\u0649 "ARABIC LETTER ALEF MAKSURA"
29519\u064A "ARABIC LETTER YEH"
29520\u064B "ARABIC FATHATAN"
29521\u064C "ARABIC DAMMATAN"
29522\u064D "ARABIC KASRATAN"
29523\u064E "ARABIC FATHA"
29524\u064F "ARABIC DAMMA"
29525\u0650 "ARABIC KASRA"
29526\u0651 "ARABIC SHADDA"
29527\u0652 "ARABIC SUKUN"
29528\u0653 "ARABIC MADDAH ABOVE"
29529\u0654 "ARABIC HAMZA ABOVE"
29530\u0655 "ARABIC HAMZA BELOW"
29531\u0656 "ARABIC SUBSCRIPT ALEF"
29532\u0657 "ARABIC INVERTED DAMMA"
29533\u0658 "ARABIC MARK NOON GHUNNA"
29534\u0659 "ARABIC ZWARAKAY"
29535\u065A "ARABIC VOWEL SIGN SMALL V ABOVE"
29536\u065B "ARABIC VOWEL SIGN INVERTED SMALL V ABOVE"
29537\u065C "ARABIC VOWEL SIGN DOT BELOW"
29538\u065D "ARABIC REVERSED DAMMA"
29539\u065E "ARABIC FATHA WITH TWO DOTS"
29540\u0660 "ARABIC-INDIC DIGIT ZERO"
29541\u0661 "ARABIC-INDIC DIGIT ONE"
29542\u0662 "ARABIC-INDIC DIGIT TWO"
29543\u0663 "ARABIC-INDIC DIGIT THREE"
29544\u0664 "ARABIC-INDIC DIGIT FOUR"
29545\u0665 "ARABIC-INDIC DIGIT FIVE"
29546\u0666 "ARABIC-INDIC DIGIT SIX"
29547\u0667 "ARABIC-INDIC DIGIT SEVEN"
29548\u0668 "ARABIC-INDIC DIGIT EIGHT"
29549\u0669 "ARABIC-INDIC DIGIT NINE"
29550\u066A "ARABIC PERCENT SIGN"
29551\u066B "ARABIC DECIMAL SEPARATOR"
29552\u066C "ARABIC THOUSANDS SEPARATOR"
29553\u066D "ARABIC FIVE POINTED STAR"
29554\u066E "ARABIC LETTER DOTLESS BEH"
29555\u066F "ARABIC LETTER DOTLESS QAF"
29556\u0670 "ARABIC LETTER SUPERSCRIPT ALEF"
29557\u0671 "ARABIC LETTER ALEF WASLA"
29558\u0672 "ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE"
29559\u0673 "ARABIC LETTER ALEF WITH WAVY HAMZA BELOW"
29560\u0674 "ARABIC LETTER HIGH HAMZA"
29561\u0675 "ARABIC LETTER HIGH HAMZA ALEF"
29562\u0676 "ARABIC LETTER HIGH HAMZA WAW"
29563\u0677 "ARABIC LETTER U WITH HAMZA ABOVE"
29564\u0678 "ARABIC LETTER HIGH HAMZA YEH"
29565\u0679 "ARABIC LETTER TTEH"
29566\u067A "ARABIC LETTER TTEHEH"
29567\u067B "ARABIC LETTER BEEH"
29568\u067C "ARABIC LETTER TEH WITH RING"
29569\u067D "ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS"
29570\u067E "ARABIC LETTER PEH"
29571\u067F "ARABIC LETTER TEHEH"
29572\u0680 "ARABIC LETTER BEHEH"
29573\u0681 "ARABIC LETTER HAH WITH HAMZA ABOVE"
29574\u0682 "ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE"
29575\u0683 "ARABIC LETTER NYEH"
29576\u0684 "ARABIC LETTER DYEH"
29577\u0685 "ARABIC LETTER HAH WITH THREE DOTS ABOVE"
29578\u0686 "ARABIC LETTER TCHEH"
29579\u0687 "ARABIC LETTER TCHEHEH"
29580\u0688 "ARABIC LETTER DDAL"
29581\u0689 "ARABIC LETTER DAL WITH RING"
29582\u068A "ARABIC LETTER DAL WITH DOT BELOW"
29583\u068B "ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH"
29584\u068C "ARABIC LETTER DAHAL"
29585\u068D "ARABIC LETTER DDAHAL"
29586\u068E "ARABIC LETTER DUL"
29587\u068F "ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS"
29588\u0690 "ARABIC LETTER DAL WITH FOUR DOTS ABOVE"
29589\u0691 "ARABIC LETTER RREH"
29590\u0692 "ARABIC LETTER REH WITH SMALL V"
29591\u0693 "ARABIC LETTER REH WITH RING"
29592\u0694 "ARABIC LETTER REH WITH DOT BELOW"
29593\u0695 "ARABIC LETTER REH WITH SMALL V BELOW"
29594\u0696 "ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE"
29595\u0697 "ARABIC LETTER REH WITH TWO DOTS ABOVE"
29596\u0698 "ARABIC LETTER JEH"
29597\u0699 "ARABIC LETTER REH WITH FOUR DOTS ABOVE"
29598\u069A "ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE"
29599\u069B "ARABIC LETTER SEEN WITH THREE DOTS BELOW"
29600\u069C "ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE"
29601\u069D "ARABIC LETTER SAD WITH TWO DOTS BELOW"
29602\u069E "ARABIC LETTER SAD WITH THREE DOTS ABOVE"
29603\u069F "ARABIC LETTER TAH WITH THREE DOTS ABOVE"
29604\u06A0 "ARABIC LETTER AIN WITH THREE DOTS ABOVE"
29605\u06A1 "ARABIC LETTER DOTLESS FEH"
29606\u06A2 "ARABIC LETTER FEH WITH DOT MOVED BELOW"
29607\u06A3 "ARABIC LETTER FEH WITH DOT BELOW"
29608\u06A4 "ARABIC LETTER VEH"
29609\u06A5 "ARABIC LETTER FEH WITH THREE DOTS BELOW"
29610\u06A6 "ARABIC LETTER PEHEH"
29611\u06A7 "ARABIC LETTER QAF WITH DOT ABOVE"
29612\u06A8 "ARABIC LETTER QAF WITH THREE DOTS ABOVE"
29613\u06A9 "ARABIC LETTER KEHEH"
29614\u06AA "ARABIC LETTER SWASH KAF"
29615\u06AB "ARABIC LETTER KAF WITH RING"
29616\u06AC "ARABIC LETTER KAF WITH DOT ABOVE"
29617\u06AD "ARABIC LETTER NG"
29618\u06AE "ARABIC LETTER KAF WITH THREE DOTS BELOW"
29619\u06AF "ARABIC LETTER GAF"
29620\u06B0 "ARABIC LETTER GAF WITH RING"
29621\u06B1 "ARABIC LETTER NGOEH"
29622\u06B2 "ARABIC LETTER GAF WITH TWO DOTS BELOW"
29623\u06B3 "ARABIC LETTER GUEH"
29624\u06B4 "ARABIC LETTER GAF WITH THREE DOTS ABOVE"
29625\u06B5 "ARABIC LETTER LAM WITH SMALL V"
29626\u06B6 "ARABIC LETTER LAM WITH DOT ABOVE"
29627\u06B7 "ARABIC LETTER LAM WITH THREE DOTS ABOVE"
29628\u06B8 "ARABIC LETTER LAM WITH THREE DOTS BELOW"
29629\u06B9 "ARABIC LETTER NOON WITH DOT BELOW"
29630\u06BA "ARABIC LETTER NOON GHUNNA"
29631\u06BB "ARABIC LETTER RNOON"
29632\u06BC "ARABIC LETTER NOON WITH RING"
29633\u06BD "ARABIC LETTER NOON WITH THREE DOTS ABOVE"
29634\u06BE "ARABIC LETTER HEH DOACHASHMEE"
29635\u06BF "ARABIC LETTER TCHEH WITH DOT ABOVE"
29636\u06C0 "ARABIC LETTER HEH WITH YEH ABOVE"
29637\u06C1 "ARABIC LETTER HEH GOAL"
29638\u06C2 "ARABIC LETTER HEH GOAL WITH HAMZA ABOVE"
29639\u06C3 "ARABIC LETTER TEH MARBUTA GOAL"
29640\u06C4 "ARABIC LETTER WAW WITH RING"
29641\u06C5 "ARABIC LETTER KIRGHIZ OE"
29642\u06C6 "ARABIC LETTER OE"
29643\u06C7 "ARABIC LETTER U"
29644\u06C8 "ARABIC LETTER YU"
29645\u06C9 "ARABIC LETTER KIRGHIZ YU"
29646\u06CA "ARABIC LETTER WAW WITH TWO DOTS ABOVE"
29647\u06CB "ARABIC LETTER VE"
29648\u06CC "ARABIC LETTER FARSI YEH"
29649\u06CD "ARABIC LETTER YEH WITH TAIL"
29650\u06CE "ARABIC LETTER YEH WITH SMALL V"
29651\u06CF "ARABIC LETTER WAW WITH DOT ABOVE"
29652\u06D0 "ARABIC LETTER E"
29653\u06D1 "ARABIC LETTER YEH WITH THREE DOTS BELOW"
29654\u06D2 "ARABIC LETTER YEH BARREE"
29655\u06D3 "ARABIC LETTER YEH BARREE WITH HAMZA ABOVE"
29656\u06D4 "ARABIC FULL STOP"
29657\u06D5 "ARABIC LETTER AE"
29658\u06D6 "ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA"
29659\u06D7 "ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA"
29660\u06D8 "ARABIC SMALL HIGH MEEM INITIAL FORM"
29661\u06D9 "ARABIC SMALL HIGH LAM ALEF"
29662\u06DA "ARABIC SMALL HIGH JEEM"
29663\u06DB "ARABIC SMALL HIGH THREE DOTS"
29664\u06DC "ARABIC SMALL HIGH SEEN"
29665\u06DD "ARABIC END OF AYAH"
29666\u06DE "ARABIC START OF RUB EL HIZB"
29667\u06DF "ARABIC SMALL HIGH ROUNDED ZERO"
29668\u06E0 "ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO"
29669\u06E1 "ARABIC SMALL HIGH DOTLESS HEAD OF KHAH"
29670\u06E2 "ARABIC SMALL HIGH MEEM ISOLATED FORM"
29671\u06E3 "ARABIC SMALL LOW SEEN"
29672\u06E4 "ARABIC SMALL HIGH MADDA"
29673\u06E5 "ARABIC SMALL WAW"
29674\u06E6 "ARABIC SMALL YEH"
29675\u06E7 "ARABIC SMALL HIGH YEH"
29676\u06E8 "ARABIC SMALL HIGH NOON"
29677\u06E9 "ARABIC PLACE OF SAJDAH"
29678\u06EA "ARABIC EMPTY CENTRE LOW STOP"
29679\u06EB "ARABIC EMPTY CENTRE HIGH STOP"
29680\u06EC "ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE"
29681\u06ED "ARABIC SMALL LOW MEEM"
29682\u06EE "ARABIC LETTER DAL WITH INVERTED V"
29683\u06EF "ARABIC LETTER REH WITH INVERTED V"
29684\u06F0 "EXTENDED ARABIC-INDIC DIGIT ZERO"
29685\u06F1 "EXTENDED ARABIC-INDIC DIGIT ONE"
29686\u06F2 "EXTENDED ARABIC-INDIC DIGIT TWO"
29687\u06F3 "EXTENDED ARABIC-INDIC DIGIT THREE"
29688\u06F4 "EXTENDED ARABIC-INDIC DIGIT FOUR"
29689\u06F5 "EXTENDED ARABIC-INDIC DIGIT FIVE"
29690\u06F6 "EXTENDED ARABIC-INDIC DIGIT SIX"
29691\u06F7 "EXTENDED ARABIC-INDIC DIGIT SEVEN"
29692\u06F8 "EXTENDED ARABIC-INDIC DIGIT EIGHT"
29693\u06F9 "EXTENDED ARABIC-INDIC DIGIT NINE"
29694\u06FA "ARABIC LETTER SHEEN WITH DOT BELOW"
29695\u06FB "ARABIC LETTER DAD WITH DOT BELOW"
29696\u06FC "ARABIC LETTER GHAIN WITH DOT BELOW"
29697\u06FD "ARABIC SIGN SINDHI AMPERSAND"
29698\u06FE "ARABIC SIGN SINDHI POSTPOSITION MEN"
29699\u06FF "ARABIC LETTER HEH WITH INVERTED V"
29700\u0700 "SYRIAC END OF PARAGRAPH"
29701\u0701 "SYRIAC SUPRALINEAR FULL STOP"
29702\u0702 "SYRIAC SUBLINEAR FULL STOP"
29703\u0703 "SYRIAC SUPRALINEAR COLON"
29704\u0704 "SYRIAC SUBLINEAR COLON"
29705\u0705 "SYRIAC HORIZONTAL COLON"
29706\u0706 "SYRIAC COLON SKEWED LEFT"
29707\u0707 "SYRIAC COLON SKEWED RIGHT"
29708\u0708 "SYRIAC SUPRALINEAR COLON SKEWED LEFT"
29709\u0709 "SYRIAC SUBLINEAR COLON SKEWED RIGHT"
29710\u070A "SYRIAC CONTRACTION"
29711\u070B "SYRIAC HARKLEAN OBELUS"
29712\u070C "SYRIAC HARKLEAN METOBELUS"
29713\u070D "SYRIAC HARKLEAN ASTERISCUS"
29714\u070F "SYRIAC ABBREVIATION MARK"
29715\u0710 "SYRIAC LETTER ALAPH"
29716\u0711 "SYRIAC LETTER SUPERSCRIPT ALAPH"
29717\u0712 "SYRIAC LETTER BETH"
29718\u0713 "SYRIAC LETTER GAMAL"
29719\u0714 "SYRIAC LETTER GAMAL GARSHUNI"
29720\u0715 "SYRIAC LETTER DALATH"
29721\u0716 "SYRIAC LETTER DOTLESS DALATH RISH"
29722\u0717 "SYRIAC LETTER HE"
29723\u0718 "SYRIAC LETTER WAW"
29724\u0719 "SYRIAC LETTER ZAIN"
29725\u071A "SYRIAC LETTER HETH"
29726\u071B "SYRIAC LETTER TETH"
29727\u071C "SYRIAC LETTER TETH GARSHUNI"
29728\u071D "SYRIAC LETTER YUDH"
29729\u071E "SYRIAC LETTER YUDH HE"
29730\u071F "SYRIAC LETTER KAPH"
29731\u0720 "SYRIAC LETTER LAMADH"
29732\u0721 "SYRIAC LETTER MIM"
29733\u0722 "SYRIAC LETTER NUN"
29734\u0723 "SYRIAC LETTER SEMKATH"
29735\u0724 "SYRIAC LETTER FINAL SEMKATH"
29736\u0725 "SYRIAC LETTER E"
29737\u0726 "SYRIAC LETTER PE"
29738\u0727 "SYRIAC LETTER REVERSED PE"
29739\u0728 "SYRIAC LETTER SADHE"
29740\u0729 "SYRIAC LETTER QAPH"
29741\u072A "SYRIAC LETTER RISH"
29742\u072B "SYRIAC LETTER SHIN"
29743\u072C "SYRIAC LETTER TAW"
29744\u072D "SYRIAC LETTER PERSIAN BHETH"
29745\u072E "SYRIAC LETTER PERSIAN GHAMAL"
29746\u072F "SYRIAC LETTER PERSIAN DHALATH"
29747\u0730 "SYRIAC PTHAHA ABOVE"
29748\u0731 "SYRIAC PTHAHA BELOW"
29749\u0732 "SYRIAC PTHAHA DOTTED"
29750\u0733 "SYRIAC ZQAPHA ABOVE"
29751\u0734 "SYRIAC ZQAPHA BELOW"
29752\u0735 "SYRIAC ZQAPHA DOTTED"
29753\u0736 "SYRIAC RBASA ABOVE"
29754\u0737 "SYRIAC RBASA BELOW"
29755\u0738 "SYRIAC DOTTED ZLAMA HORIZONTAL"
29756\u0739 "SYRIAC DOTTED ZLAMA ANGULAR"
29757\u073A "SYRIAC HBASA ABOVE"
29758\u073B "SYRIAC HBASA BELOW"
29759\u073C "SYRIAC HBASA-ESASA DOTTED"
29760\u073D "SYRIAC ESASA ABOVE"
29761\u073E "SYRIAC ESASA BELOW"
29762\u073F "SYRIAC RWAHA"
29763\u0740 "SYRIAC FEMININE DOT"
29764\u0741 "SYRIAC QUSHSHAYA"
29765\u0742 "SYRIAC RUKKAKHA"
29766\u0743 "SYRIAC TWO VERTICAL DOTS ABOVE"
29767\u0744 "SYRIAC TWO VERTICAL DOTS BELOW"
29768\u0745 "SYRIAC THREE DOTS ABOVE"
29769\u0746 "SYRIAC THREE DOTS BELOW"
29770\u0747 "SYRIAC OBLIQUE LINE ABOVE"
29771\u0748 "SYRIAC OBLIQUE LINE BELOW"
29772\u0749 "SYRIAC MUSIC"
29773\u074A "SYRIAC BARREKH"
29774\u074D "SYRIAC LETTER SOGDIAN ZHAIN"
29775\u074E "SYRIAC LETTER SOGDIAN KHAPH"
29776\u074F "SYRIAC LETTER SOGDIAN FE"
29777\u0750 "ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW"
29778\u0751 "ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE"
29779\u0752 "ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW"
29780\u0753 "ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE"
29781\u0754 "ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE"
29782\u0755 "ARABIC LETTER BEH WITH INVERTED SMALL V BELOW"
29783\u0756 "ARABIC LETTER BEH WITH SMALL V"
29784\u0757 "ARABIC LETTER HAH WITH TWO DOTS ABOVE"
29785\u0758 "ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW"
29786\u0759 "ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH"
29787\u075A "ARABIC LETTER DAL WITH INVERTED SMALL V BELOW"
29788\u075B "ARABIC LETTER REH WITH STROKE"
29789\u075C "ARABIC LETTER SEEN WITH FOUR DOTS ABOVE"
29790\u075D "ARABIC LETTER AIN WITH TWO DOTS ABOVE"
29791\u075E "ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE"
29792\u075F "ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE"
29793\u0760 "ARABIC LETTER FEH WITH TWO DOTS BELOW"
29794\u0761 "ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW"
29795\u0762 "ARABIC LETTER KEHEH WITH DOT ABOVE"
29796\u0763 "ARABIC LETTER KEHEH WITH THREE DOTS ABOVE"
29797\u0764 "ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW"
29798\u0765 "ARABIC LETTER MEEM WITH DOT ABOVE"
29799\u0766 "ARABIC LETTER MEEM WITH DOT BELOW"
29800\u0767 "ARABIC LETTER NOON WITH TWO DOTS BELOW"
29801\u0768 "ARABIC LETTER NOON WITH SMALL TAH"
29802\u0769 "ARABIC LETTER NOON WITH SMALL V"
29803\u076A "ARABIC LETTER LAM WITH BAR"
29804\u076B "ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE"
29805\u076C "ARABIC LETTER REH WITH HAMZA ABOVE"
29806\u076D "ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE"
29807\u076E "ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW"
29808\u076F "ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS"
29809\u0770 "ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS"
29810\u0771 "ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS"
29811\u0772 "ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE"
29812\u0773 "ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE"
29813\u0774 "ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE"
29814\u0775 "ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE"
29815\u0776 "ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE"
29816\u0777 "ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW"
29817\u0778 "ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE"
29818\u0779 "ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE"
29819\u077A "ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE"
29820\u077B "ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE"
29821\u077C "ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW"
29822\u077D "ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE"
29823\u077E "ARABIC LETTER SEEN WITH INVERTED V"
29824\u077F "ARABIC LETTER KAF WITH TWO DOTS ABOVE"
29825\u0780 "THAANA LETTER HAA"
29826\u0781 "THAANA LETTER SHAVIYANI"
29827\u0782 "THAANA LETTER NOONU"
29828\u0783 "THAANA LETTER RAA"
29829\u0784 "THAANA LETTER BAA"
29830\u0785 "THAANA LETTER LHAVIYANI"
29831\u0786 "THAANA LETTER KAAFU"
29832\u0787 "THAANA LETTER ALIFU"
29833\u0788 "THAANA LETTER VAAVU"
29834\u0789 "THAANA LETTER MEEMU"
29835\u078A "THAANA LETTER FAAFU"
29836\u078B "THAANA LETTER DHAALU"
29837\u078C "THAANA LETTER THAA"
29838\u078D "THAANA LETTER LAAMU"
29839\u078E "THAANA LETTER GAAFU"
29840\u078F "THAANA LETTER GNAVIYANI"
29841\u0790 "THAANA LETTER SEENU"
29842\u0791 "THAANA LETTER DAVIYANI"
29843\u0792 "THAANA LETTER ZAVIYANI"
29844\u0793 "THAANA LETTER TAVIYANI"
29845\u0794 "THAANA LETTER YAA"
29846\u0795 "THAANA LETTER PAVIYANI"
29847\u0796 "THAANA LETTER JAVIYANI"
29848\u0797 "THAANA LETTER CHAVIYANI"
29849\u0798 "THAANA LETTER TTAA"
29850\u0799 "THAANA LETTER HHAA"
29851\u079A "THAANA LETTER KHAA"
29852\u079B "THAANA LETTER THAALU"
29853\u079C "THAANA LETTER ZAA"
29854\u079D "THAANA LETTER SHEENU"
29855\u079E "THAANA LETTER SAADHU"
29856\u079F "THAANA LETTER DAADHU"
29857\u07A0 "THAANA LETTER TO"
29858\u07A1 "THAANA LETTER ZO"
29859\u07A2 "THAANA LETTER AINU"
29860\u07A3 "THAANA LETTER GHAINU"
29861\u07A4 "THAANA LETTER QAAFU"
29862\u07A5 "THAANA LETTER WAAVU"
29863\u07A6 "THAANA ABAFILI"
29864\u07A7 "THAANA AABAAFILI"
29865\u07A8 "THAANA IBIFILI"
29866\u07A9 "THAANA EEBEEFILI"
29867\u07AA "THAANA UBUFILI"
29868\u07AB "THAANA OOBOOFILI"
29869\u07AC "THAANA EBEFILI"
29870\u07AD "THAANA EYBEYFILI"
29871\u07AE "THAANA OBOFILI"
29872\u07AF "THAANA OABOAFILI"
29873\u07B0 "THAANA SUKUN"
29874\u07B1 "THAANA LETTER NAA"
29875\u07C0 "NKO DIGIT ZERO"
29876\u07C1 "NKO DIGIT ONE"
29877\u07C2 "NKO DIGIT TWO"
29878\u07C3 "NKO DIGIT THREE"
29879\u07C4 "NKO DIGIT FOUR"
29880\u07C5 "NKO DIGIT FIVE"
29881\u07C6 "NKO DIGIT SIX"
29882\u07C7 "NKO DIGIT SEVEN"
29883\u07C8 "NKO DIGIT EIGHT"
29884\u07C9 "NKO DIGIT NINE"
29885\u07CA "NKO LETTER A"
29886\u07CB "NKO LETTER EE"
29887\u07CC "NKO LETTER I"
29888\u07CD "NKO LETTER E"
29889\u07CE "NKO LETTER U"
29890\u07CF "NKO LETTER OO"
29891\u07D0 "NKO LETTER O"
29892\u07D1 "NKO LETTER DAGBASINNA"
29893\u07D2 "NKO LETTER N"
29894\u07D3 "NKO LETTER BA"
29895\u07D4 "NKO LETTER PA"
29896\u07D5 "NKO LETTER TA"
29897\u07D6 "NKO LETTER JA"
29898\u07D7 "NKO LETTER CHA"
29899\u07D8 "NKO LETTER DA"
29900\u07D9 "NKO LETTER RA"
29901\u07DA "NKO LETTER RRA"
29902\u07DB "NKO LETTER SA"
29903\u07DC "NKO LETTER GBA"
29904\u07DD "NKO LETTER FA"
29905\u07DE "NKO LETTER KA"
29906\u07DF "NKO LETTER LA"
29907\u07E0 "NKO LETTER NA WOLOSO"
29908\u07E1 "NKO LETTER MA"
29909\u07E2 "NKO LETTER NYA"
29910\u07E3 "NKO LETTER NA"
29911\u07E4 "NKO LETTER HA"
29912\u07E5 "NKO LETTER WA"
29913\u07E6 "NKO LETTER YA"
29914\u07E7 "NKO LETTER NYA WOLOSO"
29915\u07E8 "NKO LETTER JONA JA"
29916\u07E9 "NKO LETTER JONA CHA"
29917\u07EA "NKO LETTER JONA RA"
29918\u07EB "NKO COMBINING SHORT HIGH TONE"
29919\u07EC "NKO COMBINING SHORT LOW TONE"
29920\u07ED "NKO COMBINING SHORT RISING TONE"
29921\u07EE "NKO COMBINING LONG DESCENDING TONE"
29922\u07EF "NKO COMBINING LONG HIGH TONE"
29923\u07F0 "NKO COMBINING LONG LOW TONE"
29924\u07F1 "NKO COMBINING LONG RISING TONE"
29925\u07F2 "NKO COMBINING NASALIZATION MARK"
29926\u07F3 "NKO COMBINING DOUBLE DOT ABOVE"
29927\u07F4 "NKO HIGH TONE APOSTROPHE"
29928\u07F5 "NKO LOW TONE APOSTROPHE"
29929\u07F6 "NKO SYMBOL OO DENNEN"
29930\u07F7 "NKO SYMBOL GBAKURUNEN"
29931\u07F8 "NKO COMMA"
29932\u07F9 "NKO EXCLAMATION MARK"
29933\u07FA "NKO LAJANYALAN"
29934\u0901 "DEVANAGARI SIGN CANDRABINDU"
29935\u0902 "DEVANAGARI SIGN ANUSVARA"
29936\u0903 "DEVANAGARI SIGN VISARGA"
29937\u0904 "DEVANAGARI LETTER SHORT A"
29938\u0905 "DEVANAGARI LETTER A"
29939\u0906 "DEVANAGARI LETTER AA"
29940\u0907 "DEVANAGARI LETTER I"
29941\u0908 "DEVANAGARI LETTER II"
29942\u0909 "DEVANAGARI LETTER U"
29943\u090A "DEVANAGARI LETTER UU"
29944\u090B "DEVANAGARI LETTER VOCALIC R"
29945\u090C "DEVANAGARI LETTER VOCALIC L"
29946\u090D "DEVANAGARI LETTER CANDRA E"
29947\u090E "DEVANAGARI LETTER SHORT E"
29948\u090F "DEVANAGARI LETTER E"
29949\u0910 "DEVANAGARI LETTER AI"
29950\u0911 "DEVANAGARI LETTER CANDRA O"
29951\u0912 "DEVANAGARI LETTER SHORT O"
29952\u0913 "DEVANAGARI LETTER O"
29953\u0914 "DEVANAGARI LETTER AU"
29954\u0915 "DEVANAGARI LETTER KA"
29955\u0916 "DEVANAGARI LETTER KHA"
29956\u0917 "DEVANAGARI LETTER GA"
29957\u0918 "DEVANAGARI LETTER GHA"
29958\u0919 "DEVANAGARI LETTER NGA"
29959\u091A "DEVANAGARI LETTER CA"
29960\u091B "DEVANAGARI LETTER CHA"
29961\u091C "DEVANAGARI LETTER JA"
29962\u091D "DEVANAGARI LETTER JHA"
29963\u091E "DEVANAGARI LETTER NYA"
29964\u091F "DEVANAGARI LETTER TTA"
29965\u0920 "DEVANAGARI LETTER TTHA"
29966\u0921 "DEVANAGARI LETTER DDA"
29967\u0922 "DEVANAGARI LETTER DDHA"
29968\u0923 "DEVANAGARI LETTER NNA"
29969\u0924 "DEVANAGARI LETTER TA"
29970\u0925 "DEVANAGARI LETTER THA"
29971\u0926 "DEVANAGARI LETTER DA"
29972\u0927 "DEVANAGARI LETTER DHA"
29973\u0928 "DEVANAGARI LETTER NA"
29974\u0929 "DEVANAGARI LETTER NNNA"
29975\u092A "DEVANAGARI LETTER PA"
29976\u092B "DEVANAGARI LETTER PHA"
29977\u092C "DEVANAGARI LETTER BA"
29978\u092D "DEVANAGARI LETTER BHA"
29979\u092E "DEVANAGARI LETTER MA"
29980\u092F "DEVANAGARI LETTER YA"
29981\u0930 "DEVANAGARI LETTER RA"
29982\u0931 "DEVANAGARI LETTER RRA"
29983\u0932 "DEVANAGARI LETTER LA"
29984\u0933 "DEVANAGARI LETTER LLA"
29985\u0934 "DEVANAGARI LETTER LLLA"
29986\u0935 "DEVANAGARI LETTER VA"
29987\u0936 "DEVANAGARI LETTER SHA"
29988\u0937 "DEVANAGARI LETTER SSA"
29989\u0938 "DEVANAGARI LETTER SA"
29990\u0939 "DEVANAGARI LETTER HA"
29991\u093C "DEVANAGARI SIGN NUKTA"
29992\u093D "DEVANAGARI SIGN AVAGRAHA"
29993\u093E "DEVANAGARI VOWEL SIGN AA"
29994\u093F "DEVANAGARI VOWEL SIGN I"
29995\u0940 "DEVANAGARI VOWEL SIGN II"
29996\u0941 "DEVANAGARI VOWEL SIGN U"
29997\u0942 "DEVANAGARI VOWEL SIGN UU"
29998\u0943 "DEVANAGARI VOWEL SIGN VOCALIC R"
29999\u0944 "DEVANAGARI VOWEL SIGN VOCALIC RR"
30000\u0945 "DEVANAGARI VOWEL SIGN CANDRA E"
30001\u0946 "DEVANAGARI VOWEL SIGN SHORT E"
30002\u0947 "DEVANAGARI VOWEL SIGN E"
30003\u0948 "DEVANAGARI VOWEL SIGN AI"
30004\u0949 "DEVANAGARI VOWEL SIGN CANDRA O"
30005\u094A "DEVANAGARI VOWEL SIGN SHORT O"
30006\u094B "DEVANAGARI VOWEL SIGN O"
30007\u094C "DEVANAGARI VOWEL SIGN AU"
30008\u094D "DEVANAGARI SIGN VIRAMA"
30009\u0950 "DEVANAGARI OM"
30010\u0951 "DEVANAGARI STRESS SIGN UDATTA"
30011\u0952 "DEVANAGARI STRESS SIGN ANUDATTA"
30012\u0953 "DEVANAGARI GRAVE ACCENT"
30013\u0954 "DEVANAGARI ACUTE ACCENT"
30014\u0958 "DEVANAGARI LETTER QA"
30015\u0959 "DEVANAGARI LETTER KHHA"
30016\u095A "DEVANAGARI LETTER GHHA"
30017\u095B "DEVANAGARI LETTER ZA"
30018\u095C "DEVANAGARI LETTER DDDHA"
30019\u095D "DEVANAGARI LETTER RHA"
30020\u095E "DEVANAGARI LETTER FA"
30021\u095F "DEVANAGARI LETTER YYA"
30022\u0960 "DEVANAGARI LETTER VOCALIC RR"
30023\u0961 "DEVANAGARI LETTER VOCALIC LL"
30024\u0962 "DEVANAGARI VOWEL SIGN VOCALIC L"
30025\u0963 "DEVANAGARI VOWEL SIGN VOCALIC LL"
30026\u0964 "DEVANAGARI DANDA"
30027\u0965 "DEVANAGARI DOUBLE DANDA"
30028\u0966 "DEVANAGARI DIGIT ZERO"
30029\u0967 "DEVANAGARI DIGIT ONE"
30030\u0968 "DEVANAGARI DIGIT TWO"
30031\u0969 "DEVANAGARI DIGIT THREE"
30032\u096A "DEVANAGARI DIGIT FOUR"
30033\u096B "DEVANAGARI DIGIT FIVE"
30034\u096C "DEVANAGARI DIGIT SIX"
30035\u096D "DEVANAGARI DIGIT SEVEN"
30036\u096E "DEVANAGARI DIGIT EIGHT"
30037\u096F "DEVANAGARI DIGIT NINE"
30038\u0970 "DEVANAGARI ABBREVIATION SIGN"
30039\u0971 "DEVANAGARI SIGN HIGH SPACING DOT"
30040\u0972 "DEVANAGARI LETTER CANDRA A"
30041\u097B "DEVANAGARI LETTER GGA"
30042\u097C "DEVANAGARI LETTER JJA"
30043\u097D "DEVANAGARI LETTER GLOTTAL STOP"
30044\u097E "DEVANAGARI LETTER DDDA"
30045\u097F "DEVANAGARI LETTER BBA"
30046\u0981 "BENGALI SIGN CANDRABINDU"
30047\u0982 "BENGALI SIGN ANUSVARA"
30048\u0983 "BENGALI SIGN VISARGA"
30049\u0985 "BENGALI LETTER A"
30050\u0986 "BENGALI LETTER AA"
30051\u0987 "BENGALI LETTER I"
30052\u0988 "BENGALI LETTER II"
30053\u0989 "BENGALI LETTER U"
30054\u098A "BENGALI LETTER UU"
30055\u098B "BENGALI LETTER VOCALIC R"
30056\u098C "BENGALI LETTER VOCALIC L"
30057\u098F "BENGALI LETTER E"
30058\u0990 "BENGALI LETTER AI"
30059\u0993 "BENGALI LETTER O"
30060\u0994 "BENGALI LETTER AU"
30061\u0995 "BENGALI LETTER KA"
30062\u0996 "BENGALI LETTER KHA"
30063\u0997 "BENGALI LETTER GA"
30064\u0998 "BENGALI LETTER GHA"
30065\u0999 "BENGALI LETTER NGA"
30066\u099A "BENGALI LETTER CA"
30067\u099B "BENGALI LETTER CHA"
30068\u099C "BENGALI LETTER JA"
30069\u099D "BENGALI LETTER JHA"
30070\u099E "BENGALI LETTER NYA"
30071\u099F "BENGALI LETTER TTA"
30072\u09A0 "BENGALI LETTER TTHA"
30073\u09A1 "BENGALI LETTER DDA"
30074\u09A2 "BENGALI LETTER DDHA"
30075\u09A3 "BENGALI LETTER NNA"
30076\u09A4 "BENGALI LETTER TA"
30077\u09A5 "BENGALI LETTER THA"
30078\u09A6 "BENGALI LETTER DA"
30079\u09A7 "BENGALI LETTER DHA"
30080\u09A8 "BENGALI LETTER NA"
30081\u09AA "BENGALI LETTER PA"
30082\u09AB "BENGALI LETTER PHA"
30083\u09AC "BENGALI LETTER BA"
30084\u09AD "BENGALI LETTER BHA"
30085\u09AE "BENGALI LETTER MA"
30086\u09AF "BENGALI LETTER YA"
30087\u09B0 "BENGALI LETTER RA"
30088\u09B2 "BENGALI LETTER LA"
30089\u09B6 "BENGALI LETTER SHA"
30090\u09B7 "BENGALI LETTER SSA"
30091\u09B8 "BENGALI LETTER SA"
30092\u09B9 "BENGALI LETTER HA"
30093\u09BC "BENGALI SIGN NUKTA"
30094\u09BD "BENGALI SIGN AVAGRAHA"
30095\u09BE "BENGALI VOWEL SIGN AA"
30096\u09BF "BENGALI VOWEL SIGN I"
30097\u09C0 "BENGALI VOWEL SIGN II"
30098\u09C1 "BENGALI VOWEL SIGN U"
30099\u09C2 "BENGALI VOWEL SIGN UU"
30100\u09C3 "BENGALI VOWEL SIGN VOCALIC R"
30101\u09C4 "BENGALI VOWEL SIGN VOCALIC RR"
30102\u09C7 "BENGALI VOWEL SIGN E"
30103\u09C8 "BENGALI VOWEL SIGN AI"
30104\u09CB "BENGALI VOWEL SIGN O"
30105\u09CC "BENGALI VOWEL SIGN AU"
30106\u09CD "BENGALI SIGN VIRAMA"
30107\u09CE "BENGALI LETTER KHANDA TA"
30108\u09D7 "BENGALI AU LENGTH MARK"
30109\u09DC "BENGALI LETTER RRA"
30110\u09DD "BENGALI LETTER RHA"
30111\u09DF "BENGALI LETTER YYA"
30112\u09E0 "BENGALI LETTER VOCALIC RR"
30113\u09E1 "BENGALI LETTER VOCALIC LL"
30114\u09E2 "BENGALI VOWEL SIGN VOCALIC L"
30115\u09E3 "BENGALI VOWEL SIGN VOCALIC LL"
30116\u09E6 "BENGALI DIGIT ZERO"
30117\u09E7 "BENGALI DIGIT ONE"
30118\u09E8 "BENGALI DIGIT TWO"
30119\u09E9 "BENGALI DIGIT THREE"
30120\u09EA "BENGALI DIGIT FOUR"
30121\u09EB "BENGALI DIGIT FIVE"
30122\u09EC "BENGALI DIGIT SIX"
30123\u09ED "BENGALI DIGIT SEVEN"
30124\u09EE "BENGALI DIGIT EIGHT"
30125\u09EF "BENGALI DIGIT NINE"
30126\u09F0 "BENGALI LETTER RA WITH MIDDLE DIAGONAL"
30127\u09F1 "BENGALI LETTER RA WITH LOWER DIAGONAL"
30128\u09F2 "BENGALI RUPEE MARK"
30129\u09F3 "BENGALI RUPEE SIGN"
30130\u09F4 "BENGALI CURRENCY NUMERATOR ONE"
30131\u09F5 "BENGALI CURRENCY NUMERATOR TWO"
30132\u09F6 "BENGALI CURRENCY NUMERATOR THREE"
30133\u09F7 "BENGALI CURRENCY NUMERATOR FOUR"
30134\u09F8 "BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR"
30135\u09F9 "BENGALI CURRENCY DENOMINATOR SIXTEEN"
30136\u09FA "BENGALI ISSHAR"
30137\u0A01 "GURMUKHI SIGN ADAK BINDI"
30138\u0A02 "GURMUKHI SIGN BINDI"
30139\u0A03 "GURMUKHI SIGN VISARGA"
30140\u0A05 "GURMUKHI LETTER A"
30141\u0A06 "GURMUKHI LETTER AA"
30142\u0A07 "GURMUKHI LETTER I"
30143\u0A08 "GURMUKHI LETTER II"
30144\u0A09 "GURMUKHI LETTER U"
30145\u0A0A "GURMUKHI LETTER UU"
30146\u0A0F "GURMUKHI LETTER EE"
30147\u0A10 "GURMUKHI LETTER AI"
30148\u0A13 "GURMUKHI LETTER OO"
30149\u0A14 "GURMUKHI LETTER AU"
30150\u0A15 "GURMUKHI LETTER KA"
30151\u0A16 "GURMUKHI LETTER KHA"
30152\u0A17 "GURMUKHI LETTER GA"
30153\u0A18 "GURMUKHI LETTER GHA"
30154\u0A19 "GURMUKHI LETTER NGA"
30155\u0A1A "GURMUKHI LETTER CA"
30156\u0A1B "GURMUKHI LETTER CHA"
30157\u0A1C "GURMUKHI LETTER JA"
30158\u0A1D "GURMUKHI LETTER JHA"
30159\u0A1E "GURMUKHI LETTER NYA"
30160\u0A1F "GURMUKHI LETTER TTA"
30161\u0A20 "GURMUKHI LETTER TTHA"
30162\u0A21 "GURMUKHI LETTER DDA"
30163\u0A22 "GURMUKHI LETTER DDHA"
30164\u0A23 "GURMUKHI LETTER NNA"
30165\u0A24 "GURMUKHI LETTER TA"
30166\u0A25 "GURMUKHI LETTER THA"
30167\u0A26 "GURMUKHI LETTER DA"
30168\u0A27 "GURMUKHI LETTER DHA"
30169\u0A28 "GURMUKHI LETTER NA"
30170\u0A2A "GURMUKHI LETTER PA"
30171\u0A2B "GURMUKHI LETTER PHA"
30172\u0A2C "GURMUKHI LETTER BA"
30173\u0A2D "GURMUKHI LETTER BHA"
30174\u0A2E "GURMUKHI LETTER MA"
30175\u0A2F "GURMUKHI LETTER YA"
30176\u0A30 "GURMUKHI LETTER RA"
30177\u0A32 "GURMUKHI LETTER LA"
30178\u0A33 "GURMUKHI LETTER LLA"
30179\u0A35 "GURMUKHI LETTER VA"
30180\u0A36 "GURMUKHI LETTER SHA"
30181\u0A38 "GURMUKHI LETTER SA"
30182\u0A39 "GURMUKHI LETTER HA"
30183\u0A3C "GURMUKHI SIGN NUKTA"
30184\u0A3E "GURMUKHI VOWEL SIGN AA"
30185\u0A3F "GURMUKHI VOWEL SIGN I"
30186\u0A40 "GURMUKHI VOWEL SIGN II"
30187\u0A41 "GURMUKHI VOWEL SIGN U"
30188\u0A42 "GURMUKHI VOWEL SIGN UU"
30189\u0A47 "GURMUKHI VOWEL SIGN EE"
30190\u0A48 "GURMUKHI VOWEL SIGN AI"
30191\u0A4B "GURMUKHI VOWEL SIGN OO"
30192\u0A4C "GURMUKHI VOWEL SIGN AU"
30193\u0A4D "GURMUKHI SIGN VIRAMA"
30194\u0A51 "GURMUKHI SIGN UDAAT"
30195\u0A59 "GURMUKHI LETTER KHHA"
30196\u0A5A "GURMUKHI LETTER GHHA"
30197\u0A5B "GURMUKHI LETTER ZA"
30198\u0A5C "GURMUKHI LETTER RRA"
30199\u0A5E "GURMUKHI LETTER FA"
30200\u0A66 "GURMUKHI DIGIT ZERO"
30201\u0A67 "GURMUKHI DIGIT ONE"
30202\u0A68 "GURMUKHI DIGIT TWO"
30203\u0A69 "GURMUKHI DIGIT THREE"
30204\u0A6A "GURMUKHI DIGIT FOUR"
30205\u0A6B "GURMUKHI DIGIT FIVE"
30206\u0A6C "GURMUKHI DIGIT SIX"
30207\u0A6D "GURMUKHI DIGIT SEVEN"
30208\u0A6E "GURMUKHI DIGIT EIGHT"
30209\u0A6F "GURMUKHI DIGIT NINE"
30210\u0A70 "GURMUKHI TIPPI"
30211\u0A71 "GURMUKHI ADDAK"
30212\u0A72 "GURMUKHI IRI"
30213\u0A73 "GURMUKHI URA"
30214\u0A74 "GURMUKHI EK ONKAR"
30215\u0A75 "GURMUKHI SIGN YAKASH"
30216\u0A81 "GUJARATI SIGN CANDRABINDU"
30217\u0A82 "GUJARATI SIGN ANUSVARA"
30218\u0A83 "GUJARATI SIGN VISARGA"
30219\u0A85 "GUJARATI LETTER A"
30220\u0A86 "GUJARATI LETTER AA"
30221\u0A87 "GUJARATI LETTER I"
30222\u0A88 "GUJARATI LETTER II"
30223\u0A89 "GUJARATI LETTER U"
30224\u0A8A "GUJARATI LETTER UU"
30225\u0A8B "GUJARATI LETTER VOCALIC R"
30226\u0A8C "GUJARATI LETTER VOCALIC L"
30227\u0A8D "GUJARATI VOWEL CANDRA E"
30228\u0A8F "GUJARATI LETTER E"
30229\u0A90 "GUJARATI LETTER AI"
30230\u0A91 "GUJARATI VOWEL CANDRA O"
30231\u0A93 "GUJARATI LETTER O"
30232\u0A94 "GUJARATI LETTER AU"
30233\u0A95 "GUJARATI LETTER KA"
30234\u0A96 "GUJARATI LETTER KHA"
30235\u0A97 "GUJARATI LETTER GA"
30236\u0A98 "GUJARATI LETTER GHA"
30237\u0A99 "GUJARATI LETTER NGA"
30238\u0A9A "GUJARATI LETTER CA"
30239\u0A9B "GUJARATI LETTER CHA"
30240\u0A9C "GUJARATI LETTER JA"
30241\u0A9D "GUJARATI LETTER JHA"
30242\u0A9E "GUJARATI LETTER NYA"
30243\u0A9F "GUJARATI LETTER TTA"
30244\u0AA0 "GUJARATI LETTER TTHA"
30245\u0AA1 "GUJARATI LETTER DDA"
30246\u0AA2 "GUJARATI LETTER DDHA"
30247\u0AA3 "GUJARATI LETTER NNA"
30248\u0AA4 "GUJARATI LETTER TA"
30249\u0AA5 "GUJARATI LETTER THA"
30250\u0AA6 "GUJARATI LETTER DA"
30251\u0AA7 "GUJARATI LETTER DHA"
30252\u0AA8 "GUJARATI LETTER NA"
30253\u0AAA "GUJARATI LETTER PA"
30254\u0AAB "GUJARATI LETTER PHA"
30255\u0AAC "GUJARATI LETTER BA"
30256\u0AAD "GUJARATI LETTER BHA"
30257\u0AAE "GUJARATI LETTER MA"
30258\u0AAF "GUJARATI LETTER YA"
30259\u0AB0 "GUJARATI LETTER RA"
30260\u0AB2 "GUJARATI LETTER LA"
30261\u0AB3 "GUJARATI LETTER LLA"
30262\u0AB5 "GUJARATI LETTER VA"
30263\u0AB6 "GUJARATI LETTER SHA"
30264\u0AB7 "GUJARATI LETTER SSA"
30265\u0AB8 "GUJARATI LETTER SA"
30266\u0AB9 "GUJARATI LETTER HA"
30267\u0ABC "GUJARATI SIGN NUKTA"
30268\u0ABD "GUJARATI SIGN AVAGRAHA"
30269\u0ABE "GUJARATI VOWEL SIGN AA"
30270\u0ABF "GUJARATI VOWEL SIGN I"
30271\u0AC0 "GUJARATI VOWEL SIGN II"
30272\u0AC1 "GUJARATI VOWEL SIGN U"
30273\u0AC2 "GUJARATI VOWEL SIGN UU"
30274\u0AC3 "GUJARATI VOWEL SIGN VOCALIC R"
30275\u0AC4 "GUJARATI VOWEL SIGN VOCALIC RR"
30276\u0AC5 "GUJARATI VOWEL SIGN CANDRA E"
30277\u0AC7 "GUJARATI VOWEL SIGN E"
30278\u0AC8 "GUJARATI VOWEL SIGN AI"
30279\u0AC9 "GUJARATI VOWEL SIGN CANDRA O"
30280\u0ACB "GUJARATI VOWEL SIGN O"
30281\u0ACC "GUJARATI VOWEL SIGN AU"
30282\u0ACD "GUJARATI SIGN VIRAMA"
30283\u0AD0 "GUJARATI OM"
30284\u0AE0 "GUJARATI LETTER VOCALIC RR"
30285\u0AE1 "GUJARATI LETTER VOCALIC LL"
30286\u0AE2 "GUJARATI VOWEL SIGN VOCALIC L"
30287\u0AE3 "GUJARATI VOWEL SIGN VOCALIC LL"
30288\u0AE6 "GUJARATI DIGIT ZERO"
30289\u0AE7 "GUJARATI DIGIT ONE"
30290\u0AE8 "GUJARATI DIGIT TWO"
30291\u0AE9 "GUJARATI DIGIT THREE"
30292\u0AEA "GUJARATI DIGIT FOUR"
30293\u0AEB "GUJARATI DIGIT FIVE"
30294\u0AEC "GUJARATI DIGIT SIX"
30295\u0AED "GUJARATI DIGIT SEVEN"
30296\u0AEE "GUJARATI DIGIT EIGHT"
30297\u0AEF "GUJARATI DIGIT NINE"
30298\u0AF1 "GUJARATI RUPEE SIGN"
30299\u0B01 "ORIYA SIGN CANDRABINDU"
30300\u0B02 "ORIYA SIGN ANUSVARA"
30301\u0B03 "ORIYA SIGN VISARGA"
30302\u0B05 "ORIYA LETTER A"
30303\u0B06 "ORIYA LETTER AA"
30304\u0B07 "ORIYA LETTER I"
30305\u0B08 "ORIYA LETTER II"
30306\u0B09 "ORIYA LETTER U"
30307\u0B0A "ORIYA LETTER UU"
30308\u0B0B "ORIYA LETTER VOCALIC R"
30309\u0B0C "ORIYA LETTER VOCALIC L"
30310\u0B0F "ORIYA LETTER E"
30311\u0B10 "ORIYA LETTER AI"
30312\u0B13 "ORIYA LETTER O"
30313\u0B14 "ORIYA LETTER AU"
30314\u0B15 "ORIYA LETTER KA"
30315\u0B16 "ORIYA LETTER KHA"
30316\u0B17 "ORIYA LETTER GA"
30317\u0B18 "ORIYA LETTER GHA"
30318\u0B19 "ORIYA LETTER NGA"
30319\u0B1A "ORIYA LETTER CA"
30320\u0B1B "ORIYA LETTER CHA"
30321\u0B1C "ORIYA LETTER JA"
30322\u0B1D "ORIYA LETTER JHA"
30323\u0B1E "ORIYA LETTER NYA"
30324\u0B1F "ORIYA LETTER TTA"
30325\u0B20 "ORIYA LETTER TTHA"
30326\u0B21 "ORIYA LETTER DDA"
30327\u0B22 "ORIYA LETTER DDHA"
30328\u0B23 "ORIYA LETTER NNA"
30329\u0B24 "ORIYA LETTER TA"
30330\u0B25 "ORIYA LETTER THA"
30331\u0B26 "ORIYA LETTER DA"
30332\u0B27 "ORIYA LETTER DHA"
30333\u0B28 "ORIYA LETTER NA"
30334\u0B2A "ORIYA LETTER PA"
30335\u0B2B "ORIYA LETTER PHA"
30336\u0B2C "ORIYA LETTER BA"
30337\u0B2D "ORIYA LETTER BHA"
30338\u0B2E "ORIYA LETTER MA"
30339\u0B2F "ORIYA LETTER YA"
30340\u0B30 "ORIYA LETTER RA"
30341\u0B32 "ORIYA LETTER LA"
30342\u0B33 "ORIYA LETTER LLA"
30343\u0B35 "ORIYA LETTER VA"
30344\u0B36 "ORIYA LETTER SHA"
30345\u0B37 "ORIYA LETTER SSA"
30346\u0B38 "ORIYA LETTER SA"
30347\u0B39 "ORIYA LETTER HA"
30348\u0B3C "ORIYA SIGN NUKTA"
30349\u0B3D "ORIYA SIGN AVAGRAHA"
30350\u0B3E "ORIYA VOWEL SIGN AA"
30351\u0B3F "ORIYA VOWEL SIGN I"
30352\u0B40 "ORIYA VOWEL SIGN II"
30353\u0B41 "ORIYA VOWEL SIGN U"
30354\u0B42 "ORIYA VOWEL SIGN UU"
30355\u0B43 "ORIYA VOWEL SIGN VOCALIC R"
30356\u0B44 "ORIYA VOWEL SIGN VOCALIC RR"
30357\u0B47 "ORIYA VOWEL SIGN E"
30358\u0B48 "ORIYA VOWEL SIGN AI"
30359\u0B4B "ORIYA VOWEL SIGN O"
30360\u0B4C "ORIYA VOWEL SIGN AU"
30361\u0B4D "ORIYA SIGN VIRAMA"
30362\u0B56 "ORIYA AI LENGTH MARK"
30363\u0B57 "ORIYA AU LENGTH MARK"
30364\u0B5C "ORIYA LETTER RRA"
30365\u0B5D "ORIYA LETTER RHA"
30366\u0B5F "ORIYA LETTER YYA"
30367\u0B60 "ORIYA LETTER VOCALIC RR"
30368\u0B61 "ORIYA LETTER VOCALIC LL"
30369\u0B62 "ORIYA VOWEL SIGN VOCALIC L"
30370\u0B63 "ORIYA VOWEL SIGN VOCALIC LL"
30371\u0B66 "ORIYA DIGIT ZERO"
30372\u0B67 "ORIYA DIGIT ONE"
30373\u0B68 "ORIYA DIGIT TWO"
30374\u0B69 "ORIYA DIGIT THREE"
30375\u0B6A "ORIYA DIGIT FOUR"
30376\u0B6B "ORIYA DIGIT FIVE"
30377\u0B6C "ORIYA DIGIT SIX"
30378\u0B6D "ORIYA DIGIT SEVEN"
30379\u0B6E "ORIYA DIGIT EIGHT"
30380\u0B6F "ORIYA DIGIT NINE"
30381\u0B70 "ORIYA ISSHAR"
30382\u0B71 "ORIYA LETTER WA"
30383\u0B82 "TAMIL SIGN ANUSVARA"
30384\u0B83 "TAMIL SIGN VISARGA"
30385\u0B85 "TAMIL LETTER A"
30386\u0B86 "TAMIL LETTER AA"
30387\u0B87 "TAMIL LETTER I"
30388\u0B88 "TAMIL LETTER II"
30389\u0B89 "TAMIL LETTER U"
30390\u0B8A "TAMIL LETTER UU"
30391\u0B8E "TAMIL LETTER E"
30392\u0B8F "TAMIL LETTER EE"
30393\u0B90 "TAMIL LETTER AI"
30394\u0B92 "TAMIL LETTER O"
30395\u0B93 "TAMIL LETTER OO"
30396\u0B94 "TAMIL LETTER AU"
30397\u0B95 "TAMIL LETTER KA"
30398\u0B99 "TAMIL LETTER NGA"
30399\u0B9A "TAMIL LETTER CA"
30400\u0B9C "TAMIL LETTER JA"
30401\u0B9E "TAMIL LETTER NYA"
30402\u0B9F "TAMIL LETTER TTA"
30403\u0BA3 "TAMIL LETTER NNA"
30404\u0BA4 "TAMIL LETTER TA"
30405\u0BA8 "TAMIL LETTER NA"
30406\u0BA9 "TAMIL LETTER NNNA"
30407\u0BAA "TAMIL LETTER PA"
30408\u0BAE "TAMIL LETTER MA"
30409\u0BAF "TAMIL LETTER YA"
30410\u0BB0 "TAMIL LETTER RA"
30411\u0BB1 "TAMIL LETTER RRA"
30412\u0BB2 "TAMIL LETTER LA"
30413\u0BB3 "TAMIL LETTER LLA"
30414\u0BB4 "TAMIL LETTER LLLA"
30415\u0BB5 "TAMIL LETTER VA"
30416\u0BB6 "TAMIL LETTER SHA"
30417\u0BB7 "TAMIL LETTER SSA"
30418\u0BB8 "TAMIL LETTER SA"
30419\u0BB9 "TAMIL LETTER HA"
30420\u0BBE "TAMIL VOWEL SIGN AA"
30421\u0BBF "TAMIL VOWEL SIGN I"
30422\u0BC0 "TAMIL VOWEL SIGN II"
30423\u0BC1 "TAMIL VOWEL SIGN U"
30424\u0BC2 "TAMIL VOWEL SIGN UU"
30425\u0BC6 "TAMIL VOWEL SIGN E"
30426\u0BC7 "TAMIL VOWEL SIGN EE"
30427\u0BC8 "TAMIL VOWEL SIGN AI"
30428\u0BCA "TAMIL VOWEL SIGN O"
30429\u0BCB "TAMIL VOWEL SIGN OO"
30430\u0BCC "TAMIL VOWEL SIGN AU"
30431\u0BCD "TAMIL SIGN VIRAMA"
30432\u0BD0 "TAMIL OM"
30433\u0BD7 "TAMIL AU LENGTH MARK"
30434\u0BE6 "TAMIL DIGIT ZERO"
30435\u0BE7 "TAMIL DIGIT ONE"
30436\u0BE8 "TAMIL DIGIT TWO"
30437\u0BE9 "TAMIL DIGIT THREE"
30438\u0BEA "TAMIL DIGIT FOUR"
30439\u0BEB "TAMIL DIGIT FIVE"
30440\u0BEC "TAMIL DIGIT SIX"
30441\u0BED "TAMIL DIGIT SEVEN"
30442\u0BEE "TAMIL DIGIT EIGHT"
30443\u0BEF "TAMIL DIGIT NINE"
30444\u0BF0 "TAMIL NUMBER TEN"
30445\u0BF1 "TAMIL NUMBER ONE HUNDRED"
30446\u0BF2 "TAMIL NUMBER ONE THOUSAND"
30447\u0BF3 "TAMIL DAY SIGN"
30448\u0BF4 "TAMIL MONTH SIGN"
30449\u0BF5 "TAMIL YEAR SIGN"
30450\u0BF6 "TAMIL DEBIT SIGN"
30451\u0BF7 "TAMIL CREDIT SIGN"
30452\u0BF8 "TAMIL AS ABOVE SIGN"
30453\u0BF9 "TAMIL RUPEE SIGN"
30454\u0BFA "TAMIL NUMBER SIGN"
30455\u0C01 "TELUGU SIGN CANDRABINDU"
30456\u0C02 "TELUGU SIGN ANUSVARA"
30457\u0C03 "TELUGU SIGN VISARGA"
30458\u0C05 "TELUGU LETTER A"
30459\u0C06 "TELUGU LETTER AA"
30460\u0C07 "TELUGU LETTER I"
30461\u0C08 "TELUGU LETTER II"
30462\u0C09 "TELUGU LETTER U"
30463\u0C0A "TELUGU LETTER UU"
30464\u0C0B "TELUGU LETTER VOCALIC R"
30465\u0C0C "TELUGU LETTER VOCALIC L"
30466\u0C0E "TELUGU LETTER E"
30467\u0C0F "TELUGU LETTER EE"
30468\u0C10 "TELUGU LETTER AI"
30469\u0C12 "TELUGU LETTER O"
30470\u0C13 "TELUGU LETTER OO"
30471\u0C14 "TELUGU LETTER AU"
30472\u0C15 "TELUGU LETTER KA"
30473\u0C16 "TELUGU LETTER KHA"
30474\u0C17 "TELUGU LETTER GA"
30475\u0C18 "TELUGU LETTER GHA"
30476\u0C19 "TELUGU LETTER NGA"
30477\u0C1A "TELUGU LETTER CA"
30478\u0C1B "TELUGU LETTER CHA"
30479\u0C1C "TELUGU LETTER JA"
30480\u0C1D "TELUGU LETTER JHA"
30481\u0C1E "TELUGU LETTER NYA"
30482\u0C1F "TELUGU LETTER TTA"
30483\u0C20 "TELUGU LETTER TTHA"
30484\u0C21 "TELUGU LETTER DDA"
30485\u0C22 "TELUGU LETTER DDHA"
30486\u0C23 "TELUGU LETTER NNA"
30487\u0C24 "TELUGU LETTER TA"
30488\u0C25 "TELUGU LETTER THA"
30489\u0C26 "TELUGU LETTER DA"
30490\u0C27 "TELUGU LETTER DHA"
30491\u0C28 "TELUGU LETTER NA"
30492\u0C2A "TELUGU LETTER PA"
30493\u0C2B "TELUGU LETTER PHA"
30494\u0C2C "TELUGU LETTER BA"
30495\u0C2D "TELUGU LETTER BHA"
30496\u0C2E "TELUGU LETTER MA"
30497\u0C2F "TELUGU LETTER YA"
30498\u0C30 "TELUGU LETTER RA"
30499\u0C31 "TELUGU LETTER RRA"
30500\u0C32 "TELUGU LETTER LA"
30501\u0C33 "TELUGU LETTER LLA"
30502\u0C35 "TELUGU LETTER VA"
30503\u0C36 "TELUGU LETTER SHA"
30504\u0C37 "TELUGU LETTER SSA"
30505\u0C38 "TELUGU LETTER SA"
30506\u0C39 "TELUGU LETTER HA"
30507\u0C3D "TELUGU SIGN AVAGRAHA"
30508\u0C3E "TELUGU VOWEL SIGN AA"
30509\u0C3F "TELUGU VOWEL SIGN I"
30510\u0C40 "TELUGU VOWEL SIGN II"
30511\u0C41 "TELUGU VOWEL SIGN U"
30512\u0C42 "TELUGU VOWEL SIGN UU"
30513\u0C43 "TELUGU VOWEL SIGN VOCALIC R"
30514\u0C44 "TELUGU VOWEL SIGN VOCALIC RR"
30515\u0C46 "TELUGU VOWEL SIGN E"
30516\u0C47 "TELUGU VOWEL SIGN EE"
30517\u0C48 "TELUGU VOWEL SIGN AI"
30518\u0C4A "TELUGU VOWEL SIGN O"
30519\u0C4B "TELUGU VOWEL SIGN OO"
30520\u0C4C "TELUGU VOWEL SIGN AU"
30521\u0C4D "TELUGU SIGN VIRAMA"
30522\u0C55 "TELUGU LENGTH MARK"
30523\u0C56 "TELUGU AI LENGTH MARK"
30524\u0C58 "TELUGU LETTER TSA"
30525\u0C59 "TELUGU LETTER DZA"
30526\u0C60 "TELUGU LETTER VOCALIC RR"
30527\u0C61 "TELUGU LETTER VOCALIC LL"
30528\u0C62 "TELUGU VOWEL SIGN VOCALIC L"
30529\u0C63 "TELUGU VOWEL SIGN VOCALIC LL"
30530\u0C66 "TELUGU DIGIT ZERO"
30531\u0C67 "TELUGU DIGIT ONE"
30532\u0C68 "TELUGU DIGIT TWO"
30533\u0C69 "TELUGU DIGIT THREE"
30534\u0C6A "TELUGU DIGIT FOUR"
30535\u0C6B "TELUGU DIGIT FIVE"
30536\u0C6C "TELUGU DIGIT SIX"
30537\u0C6D "TELUGU DIGIT SEVEN"
30538\u0C6E "TELUGU DIGIT EIGHT"
30539\u0C6F "TELUGU DIGIT NINE"
30540\u0C78 "TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR"
30541\u0C79 "TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR"
30542\u0C7A "TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR"
30543\u0C7B "TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR"
30544\u0C7C "TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR"
30545\u0C7D "TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR"
30546\u0C7E "TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR"
30547\u0C7F "TELUGU SIGN TUUMU"
30548\u0C82 "KANNADA SIGN ANUSVARA"
30549\u0C83 "KANNADA SIGN VISARGA"
30550\u0C85 "KANNADA LETTER A"
30551\u0C86 "KANNADA LETTER AA"
30552\u0C87 "KANNADA LETTER I"
30553\u0C88 "KANNADA LETTER II"
30554\u0C89 "KANNADA LETTER U"
30555\u0C8A "KANNADA LETTER UU"
30556\u0C8B "KANNADA LETTER VOCALIC R"
30557\u0C8C "KANNADA LETTER VOCALIC L"
30558\u0C8E "KANNADA LETTER E"
30559\u0C8F "KANNADA LETTER EE"
30560\u0C90 "KANNADA LETTER AI"
30561\u0C92 "KANNADA LETTER O"
30562\u0C93 "KANNADA LETTER OO"
30563\u0C94 "KANNADA LETTER AU"
30564\u0C95 "KANNADA LETTER KA"
30565\u0C96 "KANNADA LETTER KHA"
30566\u0C97 "KANNADA LETTER GA"
30567\u0C98 "KANNADA LETTER GHA"
30568\u0C99 "KANNADA LETTER NGA"
30569\u0C9A "KANNADA LETTER CA"
30570\u0C9B "KANNADA LETTER CHA"
30571\u0C9C "KANNADA LETTER JA"
30572\u0C9D "KANNADA LETTER JHA"
30573\u0C9E "KANNADA LETTER NYA"
30574\u0C9F "KANNADA LETTER TTA"
30575\u0CA0 "KANNADA LETTER TTHA"
30576\u0CA1 "KANNADA LETTER DDA"
30577\u0CA2 "KANNADA LETTER DDHA"
30578\u0CA3 "KANNADA LETTER NNA"
30579\u0CA4 "KANNADA LETTER TA"
30580\u0CA5 "KANNADA LETTER THA"
30581\u0CA6 "KANNADA LETTER DA"
30582\u0CA7 "KANNADA LETTER DHA"
30583\u0CA8 "KANNADA LETTER NA"
30584\u0CAA "KANNADA LETTER PA"
30585\u0CAB "KANNADA LETTER PHA"
30586\u0CAC "KANNADA LETTER BA"
30587\u0CAD "KANNADA LETTER BHA"
30588\u0CAE "KANNADA LETTER MA"
30589\u0CAF "KANNADA LETTER YA"
30590\u0CB0 "KANNADA LETTER RA"
30591\u0CB1 "KANNADA LETTER RRA"
30592\u0CB2 "KANNADA LETTER LA"
30593\u0CB3 "KANNADA LETTER LLA"
30594\u0CB5 "KANNADA LETTER VA"
30595\u0CB6 "KANNADA LETTER SHA"
30596\u0CB7 "KANNADA LETTER SSA"
30597\u0CB8 "KANNADA LETTER SA"
30598\u0CB9 "KANNADA LETTER HA"
30599\u0CBC "KANNADA SIGN NUKTA"
30600\u0CBD "KANNADA SIGN AVAGRAHA"
30601\u0CBE "KANNADA VOWEL SIGN AA"
30602\u0CBF "KANNADA VOWEL SIGN I"
30603\u0CC0 "KANNADA VOWEL SIGN II"
30604\u0CC1 "KANNADA VOWEL SIGN U"
30605\u0CC2 "KANNADA VOWEL SIGN UU"
30606\u0CC3 "KANNADA VOWEL SIGN VOCALIC R"
30607\u0CC4 "KANNADA VOWEL SIGN VOCALIC RR"
30608\u0CC6 "KANNADA VOWEL SIGN E"
30609\u0CC7 "KANNADA VOWEL SIGN EE"
30610\u0CC8 "KANNADA VOWEL SIGN AI"
30611\u0CCA "KANNADA VOWEL SIGN O"
30612\u0CCB "KANNADA VOWEL SIGN OO"
30613\u0CCC "KANNADA VOWEL SIGN AU"
30614\u0CCD "KANNADA SIGN VIRAMA"
30615\u0CD5 "KANNADA LENGTH MARK"
30616\u0CD6 "KANNADA AI LENGTH MARK"
30617\u0CDE "KANNADA LETTER FA"
30618\u0CE0 "KANNADA LETTER VOCALIC RR"
30619\u0CE1 "KANNADA LETTER VOCALIC LL"
30620\u0CE2 "KANNADA VOWEL SIGN VOCALIC L"
30621\u0CE3 "KANNADA VOWEL SIGN VOCALIC LL"
30622\u0CE6 "KANNADA DIGIT ZERO"
30623\u0CE7 "KANNADA DIGIT ONE"
30624\u0CE8 "KANNADA DIGIT TWO"
30625\u0CE9 "KANNADA DIGIT THREE"
30626\u0CEA "KANNADA DIGIT FOUR"
30627\u0CEB "KANNADA DIGIT FIVE"
30628\u0CEC "KANNADA DIGIT SIX"
30629\u0CED "KANNADA DIGIT SEVEN"
30630\u0CEE "KANNADA DIGIT EIGHT"
30631\u0CEF "KANNADA DIGIT NINE"
30632\u0CF1 "KANNADA SIGN JIHVAMULIYA"
30633\u0CF2 "KANNADA SIGN UPADHMANIYA"
30634\u0D02 "MALAYALAM SIGN ANUSVARA"
30635\u0D03 "MALAYALAM SIGN VISARGA"
30636\u0D05 "MALAYALAM LETTER A"
30637\u0D06 "MALAYALAM LETTER AA"
30638\u0D07 "MALAYALAM LETTER I"
30639\u0D08 "MALAYALAM LETTER II"
30640\u0D09 "MALAYALAM LETTER U"
30641\u0D0A "MALAYALAM LETTER UU"
30642\u0D0B "MALAYALAM LETTER VOCALIC R"
30643\u0D0C "MALAYALAM LETTER VOCALIC L"
30644\u0D0E "MALAYALAM LETTER E"
30645\u0D0F "MALAYALAM LETTER EE"
30646\u0D10 "MALAYALAM LETTER AI"
30647\u0D12 "MALAYALAM LETTER O"
30648\u0D13 "MALAYALAM LETTER OO"
30649\u0D14 "MALAYALAM LETTER AU"
30650\u0D15 "MALAYALAM LETTER KA"
30651\u0D16 "MALAYALAM LETTER KHA"
30652\u0D17 "MALAYALAM LETTER GA"
30653\u0D18 "MALAYALAM LETTER GHA"
30654\u0D19 "MALAYALAM LETTER NGA"
30655\u0D1A "MALAYALAM LETTER CA"
30656\u0D1B "MALAYALAM LETTER CHA"
30657\u0D1C "MALAYALAM LETTER JA"
30658\u0D1D "MALAYALAM LETTER JHA"
30659\u0D1E "MALAYALAM LETTER NYA"
30660\u0D1F "MALAYALAM LETTER TTA"
30661\u0D20 "MALAYALAM LETTER TTHA"
30662\u0D21 "MALAYALAM LETTER DDA"
30663\u0D22 "MALAYALAM LETTER DDHA"
30664\u0D23 "MALAYALAM LETTER NNA"
30665\u0D24 "MALAYALAM LETTER TA"
30666\u0D25 "MALAYALAM LETTER THA"
30667\u0D26 "MALAYALAM LETTER DA"
30668\u0D27 "MALAYALAM LETTER DHA"
30669\u0D28 "MALAYALAM LETTER NA"
30670\u0D2A "MALAYALAM LETTER PA"
30671\u0D2B "MALAYALAM LETTER PHA"
30672\u0D2C "MALAYALAM LETTER BA"
30673\u0D2D "MALAYALAM LETTER BHA"
30674\u0D2E "MALAYALAM LETTER MA"
30675\u0D2F "MALAYALAM LETTER YA"
30676\u0D30 "MALAYALAM LETTER RA"
30677\u0D31 "MALAYALAM LETTER RRA"
30678\u0D32 "MALAYALAM LETTER LA"
30679\u0D33 "MALAYALAM LETTER LLA"
30680\u0D34 "MALAYALAM LETTER LLLA"
30681\u0D35 "MALAYALAM LETTER VA"
30682\u0D36 "MALAYALAM LETTER SHA"
30683\u0D37 "MALAYALAM LETTER SSA"
30684\u0D38 "MALAYALAM LETTER SA"
30685\u0D39 "MALAYALAM LETTER HA"
30686\u0D3D "MALAYALAM SIGN AVAGRAHA"
30687\u0D3E "MALAYALAM VOWEL SIGN AA"
30688\u0D3F "MALAYALAM VOWEL SIGN I"
30689\u0D40 "MALAYALAM VOWEL SIGN II"
30690\u0D41 "MALAYALAM VOWEL SIGN U"
30691\u0D42 "MALAYALAM VOWEL SIGN UU"
30692\u0D43 "MALAYALAM VOWEL SIGN VOCALIC R"
30693\u0D44 "MALAYALAM VOWEL SIGN VOCALIC RR"
30694\u0D46 "MALAYALAM VOWEL SIGN E"
30695\u0D47 "MALAYALAM VOWEL SIGN EE"
30696\u0D48 "MALAYALAM VOWEL SIGN AI"
30697\u0D4A "MALAYALAM VOWEL SIGN O"
30698\u0D4B "MALAYALAM VOWEL SIGN OO"
30699\u0D4C "MALAYALAM VOWEL SIGN AU"
30700\u0D4D "MALAYALAM SIGN VIRAMA"
30701\u0D57 "MALAYALAM AU LENGTH MARK"
30702\u0D60 "MALAYALAM LETTER VOCALIC RR"
30703\u0D61 "MALAYALAM LETTER VOCALIC LL"
30704\u0D62 "MALAYALAM VOWEL SIGN VOCALIC L"
30705\u0D63 "MALAYALAM VOWEL SIGN VOCALIC LL"
30706\u0D66 "MALAYALAM DIGIT ZERO"
30707\u0D67 "MALAYALAM DIGIT ONE"
30708\u0D68 "MALAYALAM DIGIT TWO"
30709\u0D69 "MALAYALAM DIGIT THREE"
30710\u0D6A "MALAYALAM DIGIT FOUR"
30711\u0D6B "MALAYALAM DIGIT FIVE"
30712\u0D6C "MALAYALAM DIGIT SIX"
30713\u0D6D "MALAYALAM DIGIT SEVEN"
30714\u0D6E "MALAYALAM DIGIT EIGHT"
30715\u0D6F "MALAYALAM DIGIT NINE"
30716\u0D70 "MALAYALAM NUMBER TEN"
30717\u0D71 "MALAYALAM NUMBER ONE HUNDRED"
30718\u0D72 "MALAYALAM NUMBER ONE THOUSAND"
30719\u0D73 "MALAYALAM FRACTION ONE QUARTER"
30720\u0D74 "MALAYALAM FRACTION ONE HALF"
30721\u0D75 "MALAYALAM FRACTION THREE QUARTERS"
30722\u0D79 "MALAYALAM DATE MARK"
30723\u0D7A "MALAYALAM LETTER CHILLU NN"
30724\u0D7B "MALAYALAM LETTER CHILLU N"
30725\u0D7C "MALAYALAM LETTER CHILLU RR"
30726\u0D7D "MALAYALAM LETTER CHILLU L"
30727\u0D7E "MALAYALAM LETTER CHILLU LL"
30728\u0D7F "MALAYALAM LETTER CHILLU K"
30729\u0D82 "SINHALA SIGN ANUSVARAYA"
30730\u0D83 "SINHALA SIGN VISARGAYA"
30731\u0D85 "SINHALA LETTER AYANNA"
30732\u0D86 "SINHALA LETTER AAYANNA"
30733\u0D87 "SINHALA LETTER AEYANNA"
30734\u0D88 "SINHALA LETTER AEEYANNA"
30735\u0D89 "SINHALA LETTER IYANNA"
30736\u0D8A "SINHALA LETTER IIYANNA"
30737\u0D8B "SINHALA LETTER UYANNA"
30738\u0D8C "SINHALA LETTER UUYANNA"
30739\u0D8D "SINHALA LETTER IRUYANNA"
30740\u0D8E "SINHALA LETTER IRUUYANNA"
30741\u0D8F "SINHALA LETTER ILUYANNA"
30742\u0D90 "SINHALA LETTER ILUUYANNA"
30743\u0D91 "SINHALA LETTER EYANNA"
30744\u0D92 "SINHALA LETTER EEYANNA"
30745\u0D93 "SINHALA LETTER AIYANNA"
30746\u0D94 "SINHALA LETTER OYANNA"
30747\u0D95 "SINHALA LETTER OOYANNA"
30748\u0D96 "SINHALA LETTER AUYANNA"
30749\u0D9A "SINHALA LETTER ALPAPRAANA KAYANNA"
30750\u0D9B "SINHALA LETTER MAHAAPRAANA KAYANNA"
30751\u0D9C "SINHALA LETTER ALPAPRAANA GAYANNA"
30752\u0D9D "SINHALA LETTER MAHAAPRAANA GAYANNA"
30753\u0D9E "SINHALA LETTER KANTAJA NAASIKYAYA"
30754\u0D9F "SINHALA LETTER SANYAKA GAYANNA"
30755\u0DA0 "SINHALA LETTER ALPAPRAANA CAYANNA"
30756\u0DA1 "SINHALA LETTER MAHAAPRAANA CAYANNA"
30757\u0DA2 "SINHALA LETTER ALPAPRAANA JAYANNA"
30758\u0DA3 "SINHALA LETTER MAHAAPRAANA JAYANNA"
30759\u0DA4 "SINHALA LETTER TAALUJA NAASIKYAYA"
30760\u0DA5 "SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA"
30761\u0DA6 "SINHALA LETTER SANYAKA JAYANNA"
30762\u0DA7 "SINHALA LETTER ALPAPRAANA TTAYANNA"
30763\u0DA8 "SINHALA LETTER MAHAAPRAANA TTAYANNA"
30764\u0DA9 "SINHALA LETTER ALPAPRAANA DDAYANNA"
30765\u0DAA "SINHALA LETTER MAHAAPRAANA DDAYANNA"
30766\u0DAB "SINHALA LETTER MUURDHAJA NAYANNA"
30767\u0DAC "SINHALA LETTER SANYAKA DDAYANNA"
30768\u0DAD "SINHALA LETTER ALPAPRAANA TAYANNA"
30769\u0DAE "SINHALA LETTER MAHAAPRAANA TAYANNA"
30770\u0DAF "SINHALA LETTER ALPAPRAANA DAYANNA"
30771\u0DB0 "SINHALA LETTER MAHAAPRAANA DAYANNA"
30772\u0DB1 "SINHALA LETTER DANTAJA NAYANNA"
30773\u0DB3 "SINHALA LETTER SANYAKA DAYANNA"
30774\u0DB4 "SINHALA LETTER ALPAPRAANA PAYANNA"
30775\u0DB5 "SINHALA LETTER MAHAAPRAANA PAYANNA"
30776\u0DB6 "SINHALA LETTER ALPAPRAANA BAYANNA"
30777\u0DB7 "SINHALA LETTER MAHAAPRAANA BAYANNA"
30778\u0DB8 "SINHALA LETTER MAYANNA"
30779\u0DB9 "SINHALA LETTER AMBA BAYANNA"
30780\u0DBA "SINHALA LETTER YAYANNA"
30781\u0DBB "SINHALA LETTER RAYANNA"
30782\u0DBD "SINHALA LETTER DANTAJA LAYANNA"
30783\u0DC0 "SINHALA LETTER VAYANNA"
30784\u0DC1 "SINHALA LETTER TAALUJA SAYANNA"
30785\u0DC2 "SINHALA LETTER MUURDHAJA SAYANNA"
30786\u0DC3 "SINHALA LETTER DANTAJA SAYANNA"
30787\u0DC4 "SINHALA LETTER HAYANNA"
30788\u0DC5 "SINHALA LETTER MUURDHAJA LAYANNA"
30789\u0DC6 "SINHALA LETTER FAYANNA"
30790\u0DCA "SINHALA SIGN AL-LAKUNA"
30791\u0DCF "SINHALA VOWEL SIGN AELA-PILLA"
30792\u0DD0 "SINHALA VOWEL SIGN KETTI AEDA-PILLA"
30793\u0DD1 "SINHALA VOWEL SIGN DIGA AEDA-PILLA"
30794\u0DD2 "SINHALA VOWEL SIGN KETTI IS-PILLA"
30795\u0DD3 "SINHALA VOWEL SIGN DIGA IS-PILLA"
30796\u0DD4 "SINHALA VOWEL SIGN KETTI PAA-PILLA"
30797\u0DD6 "SINHALA VOWEL SIGN DIGA PAA-PILLA"
30798\u0DD8 "SINHALA VOWEL SIGN GAETTA-PILLA"
30799\u0DD9 "SINHALA VOWEL SIGN KOMBUVA"
30800\u0DDA "SINHALA VOWEL SIGN DIGA KOMBUVA"
30801\u0DDB "SINHALA VOWEL SIGN KOMBU DEKA"
30802\u0DDC "SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA"
30803\u0DDD "SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA"
30804\u0DDE "SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA"
30805\u0DDF "SINHALA VOWEL SIGN GAYANUKITTA"
30806\u0DF2 "SINHALA VOWEL SIGN DIGA GAETTA-PILLA"
30807\u0DF3 "SINHALA VOWEL SIGN DIGA GAYANUKITTA"
30808\u0DF4 "SINHALA PUNCTUATION KUNDDALIYA"
30809\u0E01 "THAI CHARACTER KO KAI"
30810\u0E02 "THAI CHARACTER KHO KHAI"
30811\u0E03 "THAI CHARACTER KHO KHUAT"
30812\u0E04 "THAI CHARACTER KHO KHWAI"
30813\u0E05 "THAI CHARACTER KHO KHON"
30814\u0E06 "THAI CHARACTER KHO RAKHANG"
30815\u0E07 "THAI CHARACTER NGO NGU"
30816\u0E08 "THAI CHARACTER CHO CHAN"
30817\u0E09 "THAI CHARACTER CHO CHING"
30818\u0E0A "THAI CHARACTER CHO CHANG"
30819\u0E0B "THAI CHARACTER SO SO"
30820\u0E0C "THAI CHARACTER CHO CHOE"
30821\u0E0D "THAI CHARACTER YO YING"
30822\u0E0E "THAI CHARACTER DO CHADA"
30823\u0E0F "THAI CHARACTER TO PATAK"
30824\u0E10 "THAI CHARACTER THO THAN"
30825\u0E11 "THAI CHARACTER THO NANGMONTHO"
30826\u0E12 "THAI CHARACTER THO PHUTHAO"
30827\u0E13 "THAI CHARACTER NO NEN"
30828\u0E14 "THAI CHARACTER DO DEK"
30829\u0E15 "THAI CHARACTER TO TAO"
30830\u0E16 "THAI CHARACTER THO THUNG"
30831\u0E17 "THAI CHARACTER THO THAHAN"
30832\u0E18 "THAI CHARACTER THO THONG"
30833\u0E19 "THAI CHARACTER NO NU"
30834\u0E1A "THAI CHARACTER BO BAIMAI"
30835\u0E1B "THAI CHARACTER PO PLA"
30836\u0E1C "THAI CHARACTER PHO PHUNG"
30837\u0E1D "THAI CHARACTER FO FA"
30838\u0E1E "THAI CHARACTER PHO PHAN"
30839\u0E1F "THAI CHARACTER FO FAN"
30840\u0E20 "THAI CHARACTER PHO SAMPHAO"
30841\u0E21 "THAI CHARACTER MO MA"
30842\u0E22 "THAI CHARACTER YO YAK"
30843\u0E23 "THAI CHARACTER RO RUA"
30844\u0E24 "THAI CHARACTER RU"
30845\u0E25 "THAI CHARACTER LO LING"
30846\u0E26 "THAI CHARACTER LU"
30847\u0E27 "THAI CHARACTER WO WAEN"
30848\u0E28 "THAI CHARACTER SO SALA"
30849\u0E29 "THAI CHARACTER SO RUSI"
30850\u0E2A "THAI CHARACTER SO SUA"
30851\u0E2B "THAI CHARACTER HO HIP"
30852\u0E2C "THAI CHARACTER LO CHULA"
30853\u0E2D "THAI CHARACTER O ANG"
30854\u0E2E "THAI CHARACTER HO NOKHUK"
30855\u0E2F "THAI CHARACTER PAIYANNOI"
30856\u0E30 "THAI CHARACTER SARA A"
30857\u0E31 "THAI CHARACTER MAI HAN-AKAT"
30858\u0E32 "THAI CHARACTER SARA AA"
30859\u0E33 "THAI CHARACTER SARA AM"
30860\u0E34 "THAI CHARACTER SARA I"
30861\u0E35 "THAI CHARACTER SARA II"
30862\u0E36 "THAI CHARACTER SARA UE"
30863\u0E37 "THAI CHARACTER SARA UEE"
30864\u0E38 "THAI CHARACTER SARA U"
30865\u0E39 "THAI CHARACTER SARA UU"
30866\u0E3A "THAI CHARACTER PHINTHU"
30867\u0E3F "THAI CURRENCY SYMBOL BAHT"
30868\u0E40 "THAI CHARACTER SARA E"
30869\u0E41 "THAI CHARACTER SARA AE"
30870\u0E42 "THAI CHARACTER SARA O"
30871\u0E43 "THAI CHARACTER SARA AI MAIMUAN"
30872\u0E44 "THAI CHARACTER SARA AI MAIMALAI"
30873\u0E45 "THAI CHARACTER LAKKHANGYAO"
30874\u0E46 "THAI CHARACTER MAIYAMOK"
30875\u0E47 "THAI CHARACTER MAITAIKHU"
30876\u0E48 "THAI CHARACTER MAI EK"
30877\u0E49 "THAI CHARACTER MAI THO"
30878\u0E4A "THAI CHARACTER MAI TRI"
30879\u0E4B "THAI CHARACTER MAI CHATTAWA"
30880\u0E4C "THAI CHARACTER THANTHAKHAT"
30881\u0E4D "THAI CHARACTER NIKHAHIT"
30882\u0E4E "THAI CHARACTER YAMAKKAN"
30883\u0E4F "THAI CHARACTER FONGMAN"
30884\u0E50 "THAI DIGIT ZERO"
30885\u0E51 "THAI DIGIT ONE"
30886\u0E52 "THAI DIGIT TWO"
30887\u0E53 "THAI DIGIT THREE"
30888\u0E54 "THAI DIGIT FOUR"
30889\u0E55 "THAI DIGIT FIVE"
30890\u0E56 "THAI DIGIT SIX"
30891\u0E57 "THAI DIGIT SEVEN"
30892\u0E58 "THAI DIGIT EIGHT"
30893\u0E59 "THAI DIGIT NINE"
30894\u0E5A "THAI CHARACTER ANGKHANKHU"
30895\u0E5B "THAI CHARACTER KHOMUT"
30896\u0E81 "LAO LETTER KO"
30897\u0E82 "LAO LETTER KHO SUNG"
30898\u0E84 "LAO LETTER KHO TAM"
30899\u0E87 "LAO LETTER NGO"
30900\u0E88 "LAO LETTER CO"
30901\u0E8A "LAO LETTER SO TAM"
30902\u0E8D "LAO LETTER NYO"
30903\u0E94 "LAO LETTER DO"
30904\u0E95 "LAO LETTER TO"
30905\u0E96 "LAO LETTER THO SUNG"
30906\u0E97 "LAO LETTER THO TAM"
30907\u0E99 "LAO LETTER NO"
30908\u0E9A "LAO LETTER BO"
30909\u0E9B "LAO LETTER PO"
30910\u0E9C "LAO LETTER PHO SUNG"
30911\u0E9D "LAO LETTER FO TAM"
30912\u0E9E "LAO LETTER PHO TAM"
30913\u0E9F "LAO LETTER FO SUNG"
30914\u0EA1 "LAO LETTER MO"
30915\u0EA2 "LAO LETTER YO"
30916\u0EA3 "LAO LETTER LO LING"
30917\u0EA5 "LAO LETTER LO LOOT"
30918\u0EA7 "LAO LETTER WO"
30919\u0EAA "LAO LETTER SO SUNG"
30920\u0EAB "LAO LETTER HO SUNG"
30921\u0EAD "LAO LETTER O"
30922\u0EAE "LAO LETTER HO TAM"
30923\u0EAF "LAO ELLIPSIS"
30924\u0EB0 "LAO VOWEL SIGN A"
30925\u0EB1 "LAO VOWEL SIGN MAI KAN"
30926\u0EB2 "LAO VOWEL SIGN AA"
30927\u0EB3 "LAO VOWEL SIGN AM"
30928\u0EB4 "LAO VOWEL SIGN I"
30929\u0EB5 "LAO VOWEL SIGN II"
30930\u0EB6 "LAO VOWEL SIGN Y"
30931\u0EB7 "LAO VOWEL SIGN YY"
30932\u0EB8 "LAO VOWEL SIGN U"
30933\u0EB9 "LAO VOWEL SIGN UU"
30934\u0EBB "LAO VOWEL SIGN MAI KON"
30935\u0EBC "LAO SEMIVOWEL SIGN LO"
30936\u0EBD "LAO SEMIVOWEL SIGN NYO"
30937\u0EC0 "LAO VOWEL SIGN E"
30938\u0EC1 "LAO VOWEL SIGN EI"
30939\u0EC2 "LAO VOWEL SIGN O"
30940\u0EC3 "LAO VOWEL SIGN AY"
30941\u0EC4 "LAO VOWEL SIGN AI"
30942\u0EC6 "LAO KO LA"
30943\u0EC8 "LAO TONE MAI EK"
30944\u0EC9 "LAO TONE MAI THO"
30945\u0ECA "LAO TONE MAI TI"
30946\u0ECB "LAO TONE MAI CATAWA"
30947\u0ECC "LAO CANCELLATION MARK"
30948\u0ECD "LAO NIGGAHITA"
30949\u0ED0 "LAO DIGIT ZERO"
30950\u0ED1 "LAO DIGIT ONE"
30951\u0ED2 "LAO DIGIT TWO"
30952\u0ED3 "LAO DIGIT THREE"
30953\u0ED4 "LAO DIGIT FOUR"
30954\u0ED5 "LAO DIGIT FIVE"
30955\u0ED6 "LAO DIGIT SIX"
30956\u0ED7 "LAO DIGIT SEVEN"
30957\u0ED8 "LAO DIGIT EIGHT"
30958\u0ED9 "LAO DIGIT NINE"
30959\u0EDC "LAO HO NO"
30960\u0EDD "LAO HO MO"
30961\u0F00 "TIBETAN SYLLABLE OM"
30962\u0F01 "TIBETAN MARK GTER YIG MGO TRUNCATED A"
30963\u0F02 "TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA"
30964\u0F03 "TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA"
30965\u0F04 "TIBETAN MARK INITIAL YIG MGO MDUN MA"
30966\u0F05 "TIBETAN MARK CLOSING YIG MGO SGAB MA"
30967\u0F06 "TIBETAN MARK CARET YIG MGO PHUR SHAD MA"
30968\u0F07 "TIBETAN MARK YIG MGO TSHEG SHAD MA"
30969\u0F08 "TIBETAN MARK SBRUL SHAD"
30970\u0F09 "TIBETAN MARK BSKUR YIG MGO"
30971\u0F0A "TIBETAN MARK BKA- SHOG YIG MGO"
30972\u0F0B "TIBETAN MARK INTERSYLLABIC TSHEG"
30973\u0F0C "TIBETAN MARK DELIMITER TSHEG BSTAR"
30974\u0F0D "TIBETAN MARK SHAD"
30975\u0F0E "TIBETAN MARK NYIS SHAD"
30976\u0F0F "TIBETAN MARK TSHEG SHAD"
30977\u0F10 "TIBETAN MARK NYIS TSHEG SHAD"
30978\u0F11 "TIBETAN MARK RIN CHEN SPUNGS SHAD"
30979\u0F12 "TIBETAN MARK RGYA GRAM SHAD"
30980\u0F13 "TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN"
30981\u0F14 "TIBETAN MARK GTER TSHEG"
30982\u0F15 "TIBETAN LOGOTYPE SIGN CHAD RTAGS"
30983\u0F16 "TIBETAN LOGOTYPE SIGN LHAG RTAGS"
30984\u0F17 "TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS"
30985\u0F18 "TIBETAN ASTROLOGICAL SIGN -KHYUD PA"
30986\u0F19 "TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS"
30987\u0F1A "TIBETAN SIGN RDEL DKAR GCIG"
30988\u0F1B "TIBETAN SIGN RDEL DKAR GNYIS"
30989\u0F1C "TIBETAN SIGN RDEL DKAR GSUM"
30990\u0F1D "TIBETAN SIGN RDEL NAG GCIG"
30991\u0F1E "TIBETAN SIGN RDEL NAG GNYIS"
30992\u0F1F "TIBETAN SIGN RDEL DKAR RDEL NAG"
30993\u0F20 "TIBETAN DIGIT ZERO"
30994\u0F21 "TIBETAN DIGIT ONE"
30995\u0F22 "TIBETAN DIGIT TWO"
30996\u0F23 "TIBETAN DIGIT THREE"
30997\u0F24 "TIBETAN DIGIT FOUR"
30998\u0F25 "TIBETAN DIGIT FIVE"
30999\u0F26 "TIBETAN DIGIT SIX"
31000\u0F27 "TIBETAN DIGIT SEVEN"
31001\u0F28 "TIBETAN DIGIT EIGHT"
31002\u0F29 "TIBETAN DIGIT NINE"
31003\u0F2A "TIBETAN DIGIT HALF ONE"
31004\u0F2B "TIBETAN DIGIT HALF TWO"
31005\u0F2C "TIBETAN DIGIT HALF THREE"
31006\u0F2D "TIBETAN DIGIT HALF FOUR"
31007\u0F2E "TIBETAN DIGIT HALF FIVE"
31008\u0F2F "TIBETAN DIGIT HALF SIX"
31009\u0F30 "TIBETAN DIGIT HALF SEVEN"
31010\u0F31 "TIBETAN DIGIT HALF EIGHT"
31011\u0F32 "TIBETAN DIGIT HALF NINE"
31012\u0F33 "TIBETAN DIGIT HALF ZERO"
31013\u0F34 "TIBETAN MARK BSDUS RTAGS"
31014\u0F35 "TIBETAN MARK NGAS BZUNG NYI ZLA"
31015\u0F36 "TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN"
31016\u0F37 "TIBETAN MARK NGAS BZUNG SGOR RTAGS"
31017\u0F38 "TIBETAN MARK CHE MGO"
31018\u0F39 "TIBETAN MARK TSA -PHRU"
31019\u0F3A "TIBETAN MARK GUG RTAGS GYON"
31020\u0F3B "TIBETAN MARK GUG RTAGS GYAS"
31021\u0F3C "TIBETAN MARK ANG KHANG GYON"
31022\u0F3D "TIBETAN MARK ANG KHANG GYAS"
31023\u0F3E "TIBETAN SIGN YAR TSHES"
31024\u0F3F "TIBETAN SIGN MAR TSHES"
31025\u0F40 "TIBETAN LETTER KA"
31026\u0F41 "TIBETAN LETTER KHA"
31027\u0F42 "TIBETAN LETTER GA"
31028\u0F43 "TIBETAN LETTER GHA"
31029\u0F44 "TIBETAN LETTER NGA"
31030\u0F45 "TIBETAN LETTER CA"
31031\u0F46 "TIBETAN LETTER CHA"
31032\u0F47 "TIBETAN LETTER JA"
31033\u0F49 "TIBETAN LETTER NYA"
31034\u0F4A "TIBETAN LETTER TTA"
31035\u0F4B "TIBETAN LETTER TTHA"
31036\u0F4C "TIBETAN LETTER DDA"
31037\u0F4D "TIBETAN LETTER DDHA"
31038\u0F4E "TIBETAN LETTER NNA"
31039\u0F4F "TIBETAN LETTER TA"
31040\u0F50 "TIBETAN LETTER THA"
31041\u0F51 "TIBETAN LETTER DA"
31042\u0F52 "TIBETAN LETTER DHA"
31043\u0F53 "TIBETAN LETTER NA"
31044\u0F54 "TIBETAN LETTER PA"
31045\u0F55 "TIBETAN LETTER PHA"
31046\u0F56 "TIBETAN LETTER BA"
31047\u0F57 "TIBETAN LETTER BHA"
31048\u0F58 "TIBETAN LETTER MA"
31049\u0F59 "TIBETAN LETTER TSA"
31050\u0F5A "TIBETAN LETTER TSHA"
31051\u0F5B "TIBETAN LETTER DZA"
31052\u0F5C "TIBETAN LETTER DZHA"
31053\u0F5D "TIBETAN LETTER WA"
31054\u0F5E "TIBETAN LETTER ZHA"
31055\u0F5F "TIBETAN LETTER ZA"
31056\u0F60 "TIBETAN LETTER -A"
31057\u0F61 "TIBETAN LETTER YA"
31058\u0F62 "TIBETAN LETTER RA"
31059\u0F63 "TIBETAN LETTER LA"
31060\u0F64 "TIBETAN LETTER SHA"
31061\u0F65 "TIBETAN LETTER SSA"
31062\u0F66 "TIBETAN LETTER SA"
31063\u0F67 "TIBETAN LETTER HA"
31064\u0F68 "TIBETAN LETTER A"
31065\u0F69 "TIBETAN LETTER KSSA"
31066\u0F6A "TIBETAN LETTER FIXED-FORM RA"
31067\u0F6B "TIBETAN LETTER KKA"
31068\u0F6C "TIBETAN LETTER RRA"
31069\u0F71 "TIBETAN VOWEL SIGN AA"
31070\u0F72 "TIBETAN VOWEL SIGN I"
31071\u0F73 "TIBETAN VOWEL SIGN II"
31072\u0F74 "TIBETAN VOWEL SIGN U"
31073\u0F75 "TIBETAN VOWEL SIGN UU"
31074\u0F76 "TIBETAN VOWEL SIGN VOCALIC R"
31075\u0F77 "TIBETAN VOWEL SIGN VOCALIC RR"
31076\u0F78 "TIBETAN VOWEL SIGN VOCALIC L"
31077\u0F79 "TIBETAN VOWEL SIGN VOCALIC LL"
31078\u0F7A "TIBETAN VOWEL SIGN E"
31079\u0F7B "TIBETAN VOWEL SIGN EE"
31080\u0F7C "TIBETAN VOWEL SIGN O"
31081\u0F7D "TIBETAN VOWEL SIGN OO"
31082\u0F7E "TIBETAN SIGN RJES SU NGA RO"
31083\u0F7F "TIBETAN SIGN RNAM BCAD"
31084\u0F80 "TIBETAN VOWEL SIGN REVERSED I"
31085\u0F81 "TIBETAN VOWEL SIGN REVERSED II"
31086\u0F82 "TIBETAN SIGN NYI ZLA NAA DA"
31087\u0F83 "TIBETAN SIGN SNA LDAN"
31088\u0F84 "TIBETAN MARK HALANTA"
31089\u0F85 "TIBETAN MARK PALUTA"
31090\u0F86 "TIBETAN SIGN LCI RTAGS"
31091\u0F87 "TIBETAN SIGN YANG RTAGS"
31092\u0F88 "TIBETAN SIGN LCE TSA CAN"
31093\u0F89 "TIBETAN SIGN MCHU CAN"
31094\u0F8A "TIBETAN SIGN GRU CAN RGYINGS"
31095\u0F8B "TIBETAN SIGN GRU MED RGYINGS"
31096\u0F90 "TIBETAN SUBJOINED LETTER KA"
31097\u0F91 "TIBETAN SUBJOINED LETTER KHA"
31098\u0F92 "TIBETAN SUBJOINED LETTER GA"
31099\u0F93 "TIBETAN SUBJOINED LETTER GHA"
31100\u0F94 "TIBETAN SUBJOINED LETTER NGA"
31101\u0F95 "TIBETAN SUBJOINED LETTER CA"
31102\u0F96 "TIBETAN SUBJOINED LETTER CHA"
31103\u0F97 "TIBETAN SUBJOINED LETTER JA"
31104\u0F99 "TIBETAN SUBJOINED LETTER NYA"
31105\u0F9A "TIBETAN SUBJOINED LETTER TTA"
31106\u0F9B "TIBETAN SUBJOINED LETTER TTHA"
31107\u0F9C "TIBETAN SUBJOINED LETTER DDA"
31108\u0F9D "TIBETAN SUBJOINED LETTER DDHA"
31109\u0F9E "TIBETAN SUBJOINED LETTER NNA"
31110\u0F9F "TIBETAN SUBJOINED LETTER TA"
31111\u0FA0 "TIBETAN SUBJOINED LETTER THA"
31112\u0FA1 "TIBETAN SUBJOINED LETTER DA"
31113\u0FA2 "TIBETAN SUBJOINED LETTER DHA"
31114\u0FA3 "TIBETAN SUBJOINED LETTER NA"
31115\u0FA4 "TIBETAN SUBJOINED LETTER PA"
31116\u0FA5 "TIBETAN SUBJOINED LETTER PHA"
31117\u0FA6 "TIBETAN SUBJOINED LETTER BA"
31118\u0FA7 "TIBETAN SUBJOINED LETTER BHA"
31119\u0FA8 "TIBETAN SUBJOINED LETTER MA"
31120\u0FA9 "TIBETAN SUBJOINED LETTER TSA"
31121\u0FAA "TIBETAN SUBJOINED LETTER TSHA"
31122\u0FAB "TIBETAN SUBJOINED LETTER DZA"
31123\u0FAC "TIBETAN SUBJOINED LETTER DZHA"
31124\u0FAD "TIBETAN SUBJOINED LETTER WA"
31125\u0FAE "TIBETAN SUBJOINED LETTER ZHA"
31126\u0FAF "TIBETAN SUBJOINED LETTER ZA"
31127\u0FB0 "TIBETAN SUBJOINED LETTER -A"
31128\u0FB1 "TIBETAN SUBJOINED LETTER YA"
31129\u0FB2 "TIBETAN SUBJOINED LETTER RA"
31130\u0FB3 "TIBETAN SUBJOINED LETTER LA"
31131\u0FB4 "TIBETAN SUBJOINED LETTER SHA"
31132\u0FB5 "TIBETAN SUBJOINED LETTER SSA"
31133\u0FB6 "TIBETAN SUBJOINED LETTER SA"
31134\u0FB7 "TIBETAN SUBJOINED LETTER HA"
31135\u0FB8 "TIBETAN SUBJOINED LETTER A"
31136\u0FB9 "TIBETAN SUBJOINED LETTER KSSA"
31137\u0FBA "TIBETAN SUBJOINED LETTER FIXED-FORM WA"
31138\u0FBB "TIBETAN SUBJOINED LETTER FIXED-FORM YA"
31139\u0FBC "TIBETAN SUBJOINED LETTER FIXED-FORM RA"
31140\u0FBE "TIBETAN KU RU KHA"
31141\u0FBF "TIBETAN KU RU KHA BZHI MIG CAN"
31142\u0FC0 "TIBETAN CANTILLATION SIGN HEAVY BEAT"
31143\u0FC1 "TIBETAN CANTILLATION SIGN LIGHT BEAT"
31144\u0FC2 "TIBETAN CANTILLATION SIGN CANG TE-U"
31145\u0FC3 "TIBETAN CANTILLATION SIGN SBUB -CHAL"
31146\u0FC4 "TIBETAN SYMBOL DRIL BU"
31147\u0FC5 "TIBETAN SYMBOL RDO RJE"
31148\u0FC6 "TIBETAN SYMBOL PADMA GDAN"
31149\u0FC7 "TIBETAN SYMBOL RDO RJE RGYA GRAM"
31150\u0FC8 "TIBETAN SYMBOL PHUR PA"
31151\u0FC9 "TIBETAN SYMBOL NOR BU"
31152\u0FCA "TIBETAN SYMBOL NOR BU NYIS -KHYIL"
31153\u0FCB "TIBETAN SYMBOL NOR BU GSUM -KHYIL"
31154\u0FCC "TIBETAN SYMBOL NOR BU BZHI -KHYIL"
31155\u0FCE "TIBETAN SIGN RDEL NAG RDEL DKAR"
31156\u0FCF "TIBETAN SIGN RDEL NAG GSUM"
31157\u0FD0 "TIBETAN MARK BSKA- SHOG GI MGO RGYAN"
31158\u0FD1 "TIBETAN MARK MNYAM YIG GI MGO RGYAN"
31159\u0FD2 "TIBETAN MARK NYIS TSHEG"
31160\u0FD3 "TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA"
31161\u0FD4 "TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA"
31162\u1000 "MYANMAR LETTER KA"
31163\u1001 "MYANMAR LETTER KHA"
31164\u1002 "MYANMAR LETTER GA"
31165\u1003 "MYANMAR LETTER GHA"
31166\u1004 "MYANMAR LETTER NGA"
31167\u1005 "MYANMAR LETTER CA"
31168\u1006 "MYANMAR LETTER CHA"
31169\u1007 "MYANMAR LETTER JA"
31170\u1008 "MYANMAR LETTER JHA"
31171\u1009 "MYANMAR LETTER NYA"
31172\u100A "MYANMAR LETTER NNYA"
31173\u100B "MYANMAR LETTER TTA"
31174\u100C "MYANMAR LETTER TTHA"
31175\u100D "MYANMAR LETTER DDA"
31176\u100E "MYANMAR LETTER DDHA"
31177\u100F "MYANMAR LETTER NNA"
31178\u1010 "MYANMAR LETTER TA"
31179\u1011 "MYANMAR LETTER THA"
31180\u1012 "MYANMAR LETTER DA"
31181\u1013 "MYANMAR LETTER DHA"
31182\u1014 "MYANMAR LETTER NA"
31183\u1015 "MYANMAR LETTER PA"
31184\u1016 "MYANMAR LETTER PHA"
31185\u1017 "MYANMAR LETTER BA"
31186\u1018 "MYANMAR LETTER BHA"
31187\u1019 "MYANMAR LETTER MA"
31188\u101A "MYANMAR LETTER YA"
31189\u101B "MYANMAR LETTER RA"
31190\u101C "MYANMAR LETTER LA"
31191\u101D "MYANMAR LETTER WA"
31192\u101E "MYANMAR LETTER SA"
31193\u101F "MYANMAR LETTER HA"
31194\u1020 "MYANMAR LETTER LLA"
31195\u1021 "MYANMAR LETTER A"
31196\u1022 "MYANMAR LETTER SHAN A"
31197\u1023 "MYANMAR LETTER I"
31198\u1024 "MYANMAR LETTER II"
31199\u1025 "MYANMAR LETTER U"
31200\u1026 "MYANMAR LETTER UU"
31201\u1027 "MYANMAR LETTER E"
31202\u1028 "MYANMAR LETTER MON E"
31203\u1029 "MYANMAR LETTER O"
31204\u102A "MYANMAR LETTER AU"
31205\u102B "MYANMAR VOWEL SIGN TALL AA"
31206\u102C "MYANMAR VOWEL SIGN AA"
31207\u102D "MYANMAR VOWEL SIGN I"
31208\u102E "MYANMAR VOWEL SIGN II"
31209\u102F "MYANMAR VOWEL SIGN U"
31210\u1030 "MYANMAR VOWEL SIGN UU"
31211\u1031 "MYANMAR VOWEL SIGN E"
31212\u1032 "MYANMAR VOWEL SIGN AI"
31213\u1033 "MYANMAR VOWEL SIGN MON II"
31214\u1034 "MYANMAR VOWEL SIGN MON O"
31215\u1035 "MYANMAR VOWEL SIGN E ABOVE"
31216\u1036 "MYANMAR SIGN ANUSVARA"
31217\u1037 "MYANMAR SIGN DOT BELOW"
31218\u1038 "MYANMAR SIGN VISARGA"
31219\u1039 "MYANMAR SIGN VIRAMA"
31220\u103A "MYANMAR SIGN ASAT"
31221\u103B "MYANMAR CONSONANT SIGN MEDIAL YA"
31222\u103C "MYANMAR CONSONANT SIGN MEDIAL RA"
31223\u103D "MYANMAR CONSONANT SIGN MEDIAL WA"
31224\u103E "MYANMAR CONSONANT SIGN MEDIAL HA"
31225\u103F "MYANMAR LETTER GREAT SA"
31226\u1040 "MYANMAR DIGIT ZERO"
31227\u1041 "MYANMAR DIGIT ONE"
31228\u1042 "MYANMAR DIGIT TWO"
31229\u1043 "MYANMAR DIGIT THREE"
31230\u1044 "MYANMAR DIGIT FOUR"
31231\u1045 "MYANMAR DIGIT FIVE"
31232\u1046 "MYANMAR DIGIT SIX"
31233\u1047 "MYANMAR DIGIT SEVEN"
31234\u1048 "MYANMAR DIGIT EIGHT"
31235\u1049 "MYANMAR DIGIT NINE"
31236\u104A "MYANMAR SIGN LITTLE SECTION"
31237\u104B "MYANMAR SIGN SECTION"
31238\u104C "MYANMAR SYMBOL LOCATIVE"
31239\u104D "MYANMAR SYMBOL COMPLETED"
31240\u104E "MYANMAR SYMBOL AFOREMENTIONED"
31241\u104F "MYANMAR SYMBOL GENITIVE"
31242\u1050 "MYANMAR LETTER SHA"
31243\u1051 "MYANMAR LETTER SSA"
31244\u1052 "MYANMAR LETTER VOCALIC R"
31245\u1053 "MYANMAR LETTER VOCALIC RR"
31246\u1054 "MYANMAR LETTER VOCALIC L"
31247\u1055 "MYANMAR LETTER VOCALIC LL"
31248\u1056 "MYANMAR VOWEL SIGN VOCALIC R"
31249\u1057 "MYANMAR VOWEL SIGN VOCALIC RR"
31250\u1058 "MYANMAR VOWEL SIGN VOCALIC L"
31251\u1059 "MYANMAR VOWEL SIGN VOCALIC LL"
31252\u105A "MYANMAR LETTER MON NGA"
31253\u105B "MYANMAR LETTER MON JHA"
31254\u105C "MYANMAR LETTER MON BBA"
31255\u105D "MYANMAR LETTER MON BBE"
31256\u105E "MYANMAR CONSONANT SIGN MON MEDIAL NA"
31257\u105F "MYANMAR CONSONANT SIGN MON MEDIAL MA"
31258\u1060 "MYANMAR CONSONANT SIGN MON MEDIAL LA"
31259\u1061 "MYANMAR LETTER SGAW KAREN SHA"
31260\u1062 "MYANMAR VOWEL SIGN SGAW KAREN EU"
31261\u1063 "MYANMAR TONE MARK SGAW KAREN HATHI"
31262\u1064 "MYANMAR TONE MARK SGAW KAREN KE PHO"
31263\u1065 "MYANMAR LETTER WESTERN PWO KAREN THA"
31264\u1066 "MYANMAR LETTER WESTERN PWO KAREN PWA"
31265\u1067 "MYANMAR VOWEL SIGN WESTERN PWO KAREN EU"
31266\u1068 "MYANMAR VOWEL SIGN WESTERN PWO KAREN UE"
31267\u1069 "MYANMAR SIGN WESTERN PWO KAREN TONE-1"
31268\u106A "MYANMAR SIGN WESTERN PWO KAREN TONE-2"
31269\u106B "MYANMAR SIGN WESTERN PWO KAREN TONE-3"
31270\u106C "MYANMAR SIGN WESTERN PWO KAREN TONE-4"
31271\u106D "MYANMAR SIGN WESTERN PWO KAREN TONE-5"
31272\u106E "MYANMAR LETTER EASTERN PWO KAREN NNA"
31273\u106F "MYANMAR LETTER EASTERN PWO KAREN YWA"
31274\u1070 "MYANMAR LETTER EASTERN PWO KAREN GHWA"
31275\u1071 "MYANMAR VOWEL SIGN GEBA KAREN I"
31276\u1072 "MYANMAR VOWEL SIGN KAYAH OE"
31277\u1073 "MYANMAR VOWEL SIGN KAYAH U"
31278\u1074 "MYANMAR VOWEL SIGN KAYAH EE"
31279\u1075 "MYANMAR LETTER SHAN KA"
31280\u1076 "MYANMAR LETTER SHAN KHA"
31281\u1077 "MYANMAR LETTER SHAN GA"
31282\u1078 "MYANMAR LETTER SHAN CA"
31283\u1079 "MYANMAR LETTER SHAN ZA"
31284\u107A "MYANMAR LETTER SHAN NYA"
31285\u107B "MYANMAR LETTER SHAN DA"
31286\u107C "MYANMAR LETTER SHAN NA"
31287\u107D "MYANMAR LETTER SHAN PHA"
31288\u107E "MYANMAR LETTER SHAN FA"
31289\u107F "MYANMAR LETTER SHAN BA"
31290\u1080 "MYANMAR LETTER SHAN THA"
31291\u1081 "MYANMAR LETTER SHAN HA"
31292\u1082 "MYANMAR CONSONANT SIGN SHAN MEDIAL WA"
31293\u1083 "MYANMAR VOWEL SIGN SHAN AA"
31294\u1084 "MYANMAR VOWEL SIGN SHAN E"
31295\u1085 "MYANMAR VOWEL SIGN SHAN E ABOVE"
31296\u1086 "MYANMAR VOWEL SIGN SHAN FINAL Y"
31297\u1087 "MYANMAR SIGN SHAN TONE-2"
31298\u1088 "MYANMAR SIGN SHAN TONE-3"
31299\u1089 "MYANMAR SIGN SHAN TONE-5"
31300\u108A "MYANMAR SIGN SHAN TONE-6"
31301\u108B "MYANMAR SIGN SHAN COUNCIL TONE-2"
31302\u108C "MYANMAR SIGN SHAN COUNCIL TONE-3"
31303\u108D "MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE"
31304\u108E "MYANMAR LETTER RUMAI PALAUNG FA"
31305\u108F "MYANMAR SIGN RUMAI PALAUNG TONE-5"
31306\u1090 "MYANMAR SHAN DIGIT ZERO"
31307\u1091 "MYANMAR SHAN DIGIT ONE"
31308\u1092 "MYANMAR SHAN DIGIT TWO"
31309\u1093 "MYANMAR SHAN DIGIT THREE"
31310\u1094 "MYANMAR SHAN DIGIT FOUR"
31311\u1095 "MYANMAR SHAN DIGIT FIVE"
31312\u1096 "MYANMAR SHAN DIGIT SIX"
31313\u1097 "MYANMAR SHAN DIGIT SEVEN"
31314\u1098 "MYANMAR SHAN DIGIT EIGHT"
31315\u1099 "MYANMAR SHAN DIGIT NINE"
31316\u109E "MYANMAR SYMBOL SHAN ONE"
31317\u109F "MYANMAR SYMBOL SHAN EXCLAMATION"
31318\u10A0 "GEORGIAN CAPITAL LETTER AN"
31319\u10A1 "GEORGIAN CAPITAL LETTER BAN"
31320\u10A2 "GEORGIAN CAPITAL LETTER GAN"
31321\u10A3 "GEORGIAN CAPITAL LETTER DON"
31322\u10A4 "GEORGIAN CAPITAL LETTER EN"
31323\u10A5 "GEORGIAN CAPITAL LETTER VIN"
31324\u10A6 "GEORGIAN CAPITAL LETTER ZEN"
31325\u10A7 "GEORGIAN CAPITAL LETTER TAN"
31326\u10A8 "GEORGIAN CAPITAL LETTER IN"
31327\u10A9 "GEORGIAN CAPITAL LETTER KAN"
31328\u10AA "GEORGIAN CAPITAL LETTER LAS"
31329\u10AB "GEORGIAN CAPITAL LETTER MAN"
31330\u10AC "GEORGIAN CAPITAL LETTER NAR"
31331\u10AD "GEORGIAN CAPITAL LETTER ON"
31332\u10AE "GEORGIAN CAPITAL LETTER PAR"
31333\u10AF "GEORGIAN CAPITAL LETTER ZHAR"
31334\u10B0 "GEORGIAN CAPITAL LETTER RAE"
31335\u10B1 "GEORGIAN CAPITAL LETTER SAN"
31336\u10B2 "GEORGIAN CAPITAL LETTER TAR"
31337\u10B3 "GEORGIAN CAPITAL LETTER UN"
31338\u10B4 "GEORGIAN CAPITAL LETTER PHAR"
31339\u10B5 "GEORGIAN CAPITAL LETTER KHAR"
31340\u10B6 "GEORGIAN CAPITAL LETTER GHAN"
31341\u10B7 "GEORGIAN CAPITAL LETTER QAR"
31342\u10B8 "GEORGIAN CAPITAL LETTER SHIN"
31343\u10B9 "GEORGIAN CAPITAL LETTER CHIN"
31344\u10BA "GEORGIAN CAPITAL LETTER CAN"
31345\u10BB "GEORGIAN CAPITAL LETTER JIL"
31346\u10BC "GEORGIAN CAPITAL LETTER CIL"
31347\u10BD "GEORGIAN CAPITAL LETTER CHAR"
31348\u10BE "GEORGIAN CAPITAL LETTER XAN"
31349\u10BF "GEORGIAN CAPITAL LETTER JHAN"
31350\u10C0 "GEORGIAN CAPITAL LETTER HAE"
31351\u10C1 "GEORGIAN CAPITAL LETTER HE"
31352\u10C2 "GEORGIAN CAPITAL LETTER HIE"
31353\u10C3 "GEORGIAN CAPITAL LETTER WE"
31354\u10C4 "GEORGIAN CAPITAL LETTER HAR"
31355\u10C5 "GEORGIAN CAPITAL LETTER HOE"
31356\u10D0 "GEORGIAN LETTER AN"
31357\u10D1 "GEORGIAN LETTER BAN"
31358\u10D2 "GEORGIAN LETTER GAN"
31359\u10D3 "GEORGIAN LETTER DON"
31360\u10D4 "GEORGIAN LETTER EN"
31361\u10D5 "GEORGIAN LETTER VIN"
31362\u10D6 "GEORGIAN LETTER ZEN"
31363\u10D7 "GEORGIAN LETTER TAN"
31364\u10D8 "GEORGIAN LETTER IN"
31365\u10D9 "GEORGIAN LETTER KAN"
31366\u10DA "GEORGIAN LETTER LAS"
31367\u10DB "GEORGIAN LETTER MAN"
31368\u10DC "GEORGIAN LETTER NAR"
31369\u10DD "GEORGIAN LETTER ON"
31370\u10DE "GEORGIAN LETTER PAR"
31371\u10DF "GEORGIAN LETTER ZHAR"
31372\u10E0 "GEORGIAN LETTER RAE"
31373\u10E1 "GEORGIAN LETTER SAN"
31374\u10E2 "GEORGIAN LETTER TAR"
31375\u10E3 "GEORGIAN LETTER UN"
31376\u10E4 "GEORGIAN LETTER PHAR"
31377\u10E5 "GEORGIAN LETTER KHAR"
31378\u10E6 "GEORGIAN LETTER GHAN"
31379\u10E7 "GEORGIAN LETTER QAR"
31380\u10E8 "GEORGIAN LETTER SHIN"
31381\u10E9 "GEORGIAN LETTER CHIN"
31382\u10EA "GEORGIAN LETTER CAN"
31383\u10EB "GEORGIAN LETTER JIL"
31384\u10EC "GEORGIAN LETTER CIL"
31385\u10ED "GEORGIAN LETTER CHAR"
31386\u10EE "GEORGIAN LETTER XAN"
31387\u10EF "GEORGIAN LETTER JHAN"
31388\u10F0 "GEORGIAN LETTER HAE"
31389\u10F1 "GEORGIAN LETTER HE"
31390\u10F2 "GEORGIAN LETTER HIE"
31391\u10F3 "GEORGIAN LETTER WE"
31392\u10F4 "GEORGIAN LETTER HAR"
31393\u10F5 "GEORGIAN LETTER HOE"
31394\u10F6 "GEORGIAN LETTER FI"
31395\u10F7 "GEORGIAN LETTER YN"
31396\u10F8 "GEORGIAN LETTER ELIFI"
31397\u10F9 "GEORGIAN LETTER TURNED GAN"
31398\u10FA "GEORGIAN LETTER AIN"
31399\u10FB "GEORGIAN PARAGRAPH SEPARATOR"
31400\u10FC "MODIFIER LETTER GEORGIAN NAR"
31401\u1100 "HANGUL CHOSEONG KIYEOK"
31402\u1101 "HANGUL CHOSEONG SSANGKIYEOK"
31403\u1102 "HANGUL CHOSEONG NIEUN"
31404\u1103 "HANGUL CHOSEONG TIKEUT"
31405\u1104 "HANGUL CHOSEONG SSANGTIKEUT"
31406\u1105 "HANGUL CHOSEONG RIEUL"
31407\u1106 "HANGUL CHOSEONG MIEUM"
31408\u1107 "HANGUL CHOSEONG PIEUP"
31409\u1108 "HANGUL CHOSEONG SSANGPIEUP"
31410\u1109 "HANGUL CHOSEONG SIOS"
31411\u110A "HANGUL CHOSEONG SSANGSIOS"
31412\u110B "HANGUL CHOSEONG IEUNG"
31413\u110C "HANGUL CHOSEONG CIEUC"
31414\u110D "HANGUL CHOSEONG SSANGCIEUC"
31415\u110E "HANGUL CHOSEONG CHIEUCH"
31416\u110F "HANGUL CHOSEONG KHIEUKH"
31417\u1110 "HANGUL CHOSEONG THIEUTH"
31418\u1111 "HANGUL CHOSEONG PHIEUPH"
31419\u1112 "HANGUL CHOSEONG HIEUH"
31420\u1113 "HANGUL CHOSEONG NIEUN-KIYEOK"
31421\u1114 "HANGUL CHOSEONG SSANGNIEUN"
31422\u1115 "HANGUL CHOSEONG NIEUN-TIKEUT"
31423\u1116 "HANGUL CHOSEONG NIEUN-PIEUP"
31424\u1117 "HANGUL CHOSEONG TIKEUT-KIYEOK"
31425\u1118 "HANGUL CHOSEONG RIEUL-NIEUN"
31426\u1119 "HANGUL CHOSEONG SSANGRIEUL"
31427\u111A "HANGUL CHOSEONG RIEUL-HIEUH"
31428\u111B "HANGUL CHOSEONG KAPYEOUNRIEUL"
31429\u111C "HANGUL CHOSEONG MIEUM-PIEUP"
31430\u111D "HANGUL CHOSEONG KAPYEOUNMIEUM"
31431\u111E "HANGUL CHOSEONG PIEUP-KIYEOK"
31432\u111F "HANGUL CHOSEONG PIEUP-NIEUN"
31433\u1120 "HANGUL CHOSEONG PIEUP-TIKEUT"
31434\u1121 "HANGUL CHOSEONG PIEUP-SIOS"
31435\u1122 "HANGUL CHOSEONG PIEUP-SIOS-KIYEOK"
31436\u1123 "HANGUL CHOSEONG PIEUP-SIOS-TIKEUT"
31437\u1124 "HANGUL CHOSEONG PIEUP-SIOS-PIEUP"
31438\u1125 "HANGUL CHOSEONG PIEUP-SSANGSIOS"
31439\u1126 "HANGUL CHOSEONG PIEUP-SIOS-CIEUC"
31440\u1127 "HANGUL CHOSEONG PIEUP-CIEUC"
31441\u1128 "HANGUL CHOSEONG PIEUP-CHIEUCH"
31442\u1129 "HANGUL CHOSEONG PIEUP-THIEUTH"
31443\u112A "HANGUL CHOSEONG PIEUP-PHIEUPH"
31444\u112B "HANGUL CHOSEONG KAPYEOUNPIEUP"
31445\u112C "HANGUL CHOSEONG KAPYEOUNSSANGPIEUP"
31446\u112D "HANGUL CHOSEONG SIOS-KIYEOK"
31447\u112E "HANGUL CHOSEONG SIOS-NIEUN"
31448\u112F "HANGUL CHOSEONG SIOS-TIKEUT"
31449\u1130 "HANGUL CHOSEONG SIOS-RIEUL"
31450\u1131 "HANGUL CHOSEONG SIOS-MIEUM"
31451\u1132 "HANGUL CHOSEONG SIOS-PIEUP"
31452\u1133 "HANGUL CHOSEONG SIOS-PIEUP-KIYEOK"
31453\u1134 "HANGUL CHOSEONG SIOS-SSANGSIOS"
31454\u1135 "HANGUL CHOSEONG SIOS-IEUNG"
31455\u1136 "HANGUL CHOSEONG SIOS-CIEUC"
31456\u1137 "HANGUL CHOSEONG SIOS-CHIEUCH"
31457\u1138 "HANGUL CHOSEONG SIOS-KHIEUKH"
31458\u1139 "HANGUL CHOSEONG SIOS-THIEUTH"
31459\u113A "HANGUL CHOSEONG SIOS-PHIEUPH"
31460\u113B "HANGUL CHOSEONG SIOS-HIEUH"
31461\u113C "HANGUL CHOSEONG CHITUEUMSIOS"
31462\u113D "HANGUL CHOSEONG CHITUEUMSSANGSIOS"
31463\u113E "HANGUL CHOSEONG CEONGCHIEUMSIOS"
31464\u113F "HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS"
31465\u1140 "HANGUL CHOSEONG PANSIOS"
31466\u1141 "HANGUL CHOSEONG IEUNG-KIYEOK"
31467\u1142 "HANGUL CHOSEONG IEUNG-TIKEUT"
31468\u1143 "HANGUL CHOSEONG IEUNG-MIEUM"
31469\u1144 "HANGUL CHOSEONG IEUNG-PIEUP"
31470\u1145 "HANGUL CHOSEONG IEUNG-SIOS"
31471\u1146 "HANGUL CHOSEONG IEUNG-PANSIOS"
31472\u1147 "HANGUL CHOSEONG SSANGIEUNG"
31473\u1148 "HANGUL CHOSEONG IEUNG-CIEUC"
31474\u1149 "HANGUL CHOSEONG IEUNG-CHIEUCH"
31475\u114A "HANGUL CHOSEONG IEUNG-THIEUTH"
31476\u114B "HANGUL CHOSEONG IEUNG-PHIEUPH"
31477\u114C "HANGUL CHOSEONG YESIEUNG"
31478\u114D "HANGUL CHOSEONG CIEUC-IEUNG"
31479\u114E "HANGUL CHOSEONG CHITUEUMCIEUC"
31480\u114F "HANGUL CHOSEONG CHITUEUMSSANGCIEUC"
31481\u1150 "HANGUL CHOSEONG CEONGCHIEUMCIEUC"
31482\u1151 "HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC"
31483\u1152 "HANGUL CHOSEONG CHIEUCH-KHIEUKH"
31484\u1153 "HANGUL CHOSEONG CHIEUCH-HIEUH"
31485\u1154 "HANGUL CHOSEONG CHITUEUMCHIEUCH"
31486\u1155 "HANGUL CHOSEONG CEONGCHIEUMCHIEUCH"
31487\u1156 "HANGUL CHOSEONG PHIEUPH-PIEUP"
31488\u1157 "HANGUL CHOSEONG KAPYEOUNPHIEUPH"
31489\u1158 "HANGUL CHOSEONG SSANGHIEUH"
31490\u1159 "HANGUL CHOSEONG YEORINHIEUH"
31491\u115F "HANGUL CHOSEONG FILLER"
31492\u1160 "HANGUL JUNGSEONG FILLER"
31493\u1161 "HANGUL JUNGSEONG A"
31494\u1162 "HANGUL JUNGSEONG AE"
31495\u1163 "HANGUL JUNGSEONG YA"
31496\u1164 "HANGUL JUNGSEONG YAE"
31497\u1165 "HANGUL JUNGSEONG EO"
31498\u1166 "HANGUL JUNGSEONG E"
31499\u1167 "HANGUL JUNGSEONG YEO"
31500\u1168 "HANGUL JUNGSEONG YE"
31501\u1169 "HANGUL JUNGSEONG O"
31502\u116A "HANGUL JUNGSEONG WA"
31503\u116B "HANGUL JUNGSEONG WAE"
31504\u116C "HANGUL JUNGSEONG OE"
31505\u116D "HANGUL JUNGSEONG YO"
31506\u116E "HANGUL JUNGSEONG U"
31507\u116F "HANGUL JUNGSEONG WEO"
31508\u1170 "HANGUL JUNGSEONG WE"
31509\u1171 "HANGUL JUNGSEONG WI"
31510\u1172 "HANGUL JUNGSEONG YU"
31511\u1173 "HANGUL JUNGSEONG EU"
31512\u1174 "HANGUL JUNGSEONG YI"
31513\u1175 "HANGUL JUNGSEONG I"
31514\u1176 "HANGUL JUNGSEONG A-O"
31515\u1177 "HANGUL JUNGSEONG A-U"
31516\u1178 "HANGUL JUNGSEONG YA-O"
31517\u1179 "HANGUL JUNGSEONG YA-YO"
31518\u117A "HANGUL JUNGSEONG EO-O"
31519\u117B "HANGUL JUNGSEONG EO-U"
31520\u117C "HANGUL JUNGSEONG EO-EU"
31521\u117D "HANGUL JUNGSEONG YEO-O"
31522\u117E "HANGUL JUNGSEONG YEO-U"
31523\u117F "HANGUL JUNGSEONG O-EO"
31524\u1180 "HANGUL JUNGSEONG O-E"
31525\u1181 "HANGUL JUNGSEONG O-YE"
31526\u1182 "HANGUL JUNGSEONG O-O"
31527\u1183 "HANGUL JUNGSEONG O-U"
31528\u1184 "HANGUL JUNGSEONG YO-YA"
31529\u1185 "HANGUL JUNGSEONG YO-YAE"
31530\u1186 "HANGUL JUNGSEONG YO-YEO"
31531\u1187 "HANGUL JUNGSEONG YO-O"
31532\u1188 "HANGUL JUNGSEONG YO-I"
31533\u1189 "HANGUL JUNGSEONG U-A"
31534\u118A "HANGUL JUNGSEONG U-AE"
31535\u118B "HANGUL JUNGSEONG U-EO-EU"
31536\u118C "HANGUL JUNGSEONG U-YE"
31537\u118D "HANGUL JUNGSEONG U-U"
31538\u118E "HANGUL JUNGSEONG YU-A"
31539\u118F "HANGUL JUNGSEONG YU-EO"
31540\u1190 "HANGUL JUNGSEONG YU-E"
31541\u1191 "HANGUL JUNGSEONG YU-YEO"
31542\u1192 "HANGUL JUNGSEONG YU-YE"
31543\u1193 "HANGUL JUNGSEONG YU-U"
31544\u1194 "HANGUL JUNGSEONG YU-I"
31545\u1195 "HANGUL JUNGSEONG EU-U"
31546\u1196 "HANGUL JUNGSEONG EU-EU"
31547\u1197 "HANGUL JUNGSEONG YI-U"
31548\u1198 "HANGUL JUNGSEONG I-A"
31549\u1199 "HANGUL JUNGSEONG I-YA"
31550\u119A "HANGUL JUNGSEONG I-O"
31551\u119B "HANGUL JUNGSEONG I-U"
31552\u119C "HANGUL JUNGSEONG I-EU"
31553\u119D "HANGUL JUNGSEONG I-ARAEA"
31554\u119E "HANGUL JUNGSEONG ARAEA"
31555\u119F "HANGUL JUNGSEONG ARAEA-EO"
31556\u11A0 "HANGUL JUNGSEONG ARAEA-U"
31557\u11A1 "HANGUL JUNGSEONG ARAEA-I"
31558\u11A2 "HANGUL JUNGSEONG SSANGARAEA"
31559\u11A8 "HANGUL JONGSEONG KIYEOK"
31560\u11A9 "HANGUL JONGSEONG SSANGKIYEOK"
31561\u11AA "HANGUL JONGSEONG KIYEOK-SIOS"
31562\u11AB "HANGUL JONGSEONG NIEUN"
31563\u11AC "HANGUL JONGSEONG NIEUN-CIEUC"
31564\u11AD "HANGUL JONGSEONG NIEUN-HIEUH"
31565\u11AE "HANGUL JONGSEONG TIKEUT"
31566\u11AF "HANGUL JONGSEONG RIEUL"
31567\u11B0 "HANGUL JONGSEONG RIEUL-KIYEOK"
31568\u11B1 "HANGUL JONGSEONG RIEUL-MIEUM"
31569\u11B2 "HANGUL JONGSEONG RIEUL-PIEUP"
31570\u11B3 "HANGUL JONGSEONG RIEUL-SIOS"
31571\u11B4 "HANGUL JONGSEONG RIEUL-THIEUTH"
31572\u11B5 "HANGUL JONGSEONG RIEUL-PHIEUPH"
31573\u11B6 "HANGUL JONGSEONG RIEUL-HIEUH"
31574\u11B7 "HANGUL JONGSEONG MIEUM"
31575\u11B8 "HANGUL JONGSEONG PIEUP"
31576\u11B9 "HANGUL JONGSEONG PIEUP-SIOS"
31577\u11BA "HANGUL JONGSEONG SIOS"
31578\u11BB "HANGUL JONGSEONG SSANGSIOS"
31579\u11BC "HANGUL JONGSEONG IEUNG"
31580\u11BD "HANGUL JONGSEONG CIEUC"
31581\u11BE "HANGUL JONGSEONG CHIEUCH"
31582\u11BF "HANGUL JONGSEONG KHIEUKH"
31583\u11C0 "HANGUL JONGSEONG THIEUTH"
31584\u11C1 "HANGUL JONGSEONG PHIEUPH"
31585\u11C2 "HANGUL JONGSEONG HIEUH"
31586\u11C3 "HANGUL JONGSEONG KIYEOK-RIEUL"
31587\u11C4 "HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK"
31588\u11C5 "HANGUL JONGSEONG NIEUN-KIYEOK"
31589\u11C6 "HANGUL JONGSEONG NIEUN-TIKEUT"
31590\u11C7 "HANGUL JONGSEONG NIEUN-SIOS"
31591\u11C8 "HANGUL JONGSEONG NIEUN-PANSIOS"
31592\u11C9 "HANGUL JONGSEONG NIEUN-THIEUTH"
31593\u11CA "HANGUL JONGSEONG TIKEUT-KIYEOK"
31594\u11CB "HANGUL JONGSEONG TIKEUT-RIEUL"
31595\u11CC "HANGUL JONGSEONG RIEUL-KIYEOK-SIOS"
31596\u11CD "HANGUL JONGSEONG RIEUL-NIEUN"
31597\u11CE "HANGUL JONGSEONG RIEUL-TIKEUT"
31598\u11CF "HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH"
31599\u11D0 "HANGUL JONGSEONG SSANGRIEUL"
31600\u11D1 "HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK"
31601\u11D2 "HANGUL JONGSEONG RIEUL-MIEUM-SIOS"
31602\u11D3 "HANGUL JONGSEONG RIEUL-PIEUP-SIOS"
31603\u11D4 "HANGUL JONGSEONG RIEUL-PIEUP-HIEUH"
31604\u11D5 "HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP"
31605\u11D6 "HANGUL JONGSEONG RIEUL-SSANGSIOS"
31606\u11D7 "HANGUL JONGSEONG RIEUL-PANSIOS"
31607\u11D8 "HANGUL JONGSEONG RIEUL-KHIEUKH"
31608\u11D9 "HANGUL JONGSEONG RIEUL-YEORINHIEUH"
31609\u11DA "HANGUL JONGSEONG MIEUM-KIYEOK"
31610\u11DB "HANGUL JONGSEONG MIEUM-RIEUL"
31611\u11DC "HANGUL JONGSEONG MIEUM-PIEUP"
31612\u11DD "HANGUL JONGSEONG MIEUM-SIOS"
31613\u11DE "HANGUL JONGSEONG MIEUM-SSANGSIOS"
31614\u11DF "HANGUL JONGSEONG MIEUM-PANSIOS"
31615\u11E0 "HANGUL JONGSEONG MIEUM-CHIEUCH"
31616\u11E1 "HANGUL JONGSEONG MIEUM-HIEUH"
31617\u11E2 "HANGUL JONGSEONG KAPYEOUNMIEUM"
31618\u11E3 "HANGUL JONGSEONG PIEUP-RIEUL"
31619\u11E4 "HANGUL JONGSEONG PIEUP-PHIEUPH"
31620\u11E5 "HANGUL JONGSEONG PIEUP-HIEUH"
31621\u11E6 "HANGUL JONGSEONG KAPYEOUNPIEUP"
31622\u11E7 "HANGUL JONGSEONG SIOS-KIYEOK"
31623\u11E8 "HANGUL JONGSEONG SIOS-TIKEUT"
31624\u11E9 "HANGUL JONGSEONG SIOS-RIEUL"
31625\u11EA "HANGUL JONGSEONG SIOS-PIEUP"
31626\u11EB "HANGUL JONGSEONG PANSIOS"
31627\u11EC "HANGUL JONGSEONG IEUNG-KIYEOK"
31628\u11ED "HANGUL JONGSEONG IEUNG-SSANGKIYEOK"
31629\u11EE "HANGUL JONGSEONG SSANGIEUNG"
31630\u11EF "HANGUL JONGSEONG IEUNG-KHIEUKH"
31631\u11F0 "HANGUL JONGSEONG YESIEUNG"
31632\u11F1 "HANGUL JONGSEONG YESIEUNG-SIOS"
31633\u11F2 "HANGUL JONGSEONG YESIEUNG-PANSIOS"
31634\u11F3 "HANGUL JONGSEONG PHIEUPH-PIEUP"
31635\u11F4 "HANGUL JONGSEONG KAPYEOUNPHIEUPH"
31636\u11F5 "HANGUL JONGSEONG HIEUH-NIEUN"
31637\u11F6 "HANGUL JONGSEONG HIEUH-RIEUL"
31638\u11F7 "HANGUL JONGSEONG HIEUH-MIEUM"
31639\u11F8 "HANGUL JONGSEONG HIEUH-PIEUP"
31640\u11F9 "HANGUL JONGSEONG YEORINHIEUH"
31641\u1200 "ETHIOPIC SYLLABLE HA"
31642\u1201 "ETHIOPIC SYLLABLE HU"
31643\u1202 "ETHIOPIC SYLLABLE HI"
31644\u1203 "ETHIOPIC SYLLABLE HAA"
31645\u1204 "ETHIOPIC SYLLABLE HEE"
31646\u1205 "ETHIOPIC SYLLABLE HE"
31647\u1206 "ETHIOPIC SYLLABLE HO"
31648\u1207 "ETHIOPIC SYLLABLE HOA"
31649\u1208 "ETHIOPIC SYLLABLE LA"
31650\u1209 "ETHIOPIC SYLLABLE LU"
31651\u120A "ETHIOPIC SYLLABLE LI"
31652\u120B "ETHIOPIC SYLLABLE LAA"
31653\u120C "ETHIOPIC SYLLABLE LEE"
31654\u120D "ETHIOPIC SYLLABLE LE"
31655\u120E "ETHIOPIC SYLLABLE LO"
31656\u120F "ETHIOPIC SYLLABLE LWA"
31657\u1210 "ETHIOPIC SYLLABLE HHA"
31658\u1211 "ETHIOPIC SYLLABLE HHU"
31659\u1212 "ETHIOPIC SYLLABLE HHI"
31660\u1213 "ETHIOPIC SYLLABLE HHAA"
31661\u1214 "ETHIOPIC SYLLABLE HHEE"
31662\u1215 "ETHIOPIC SYLLABLE HHE"
31663\u1216 "ETHIOPIC SYLLABLE HHO"
31664\u1217 "ETHIOPIC SYLLABLE HHWA"
31665\u1218 "ETHIOPIC SYLLABLE MA"
31666\u1219 "ETHIOPIC SYLLABLE MU"
31667\u121A "ETHIOPIC SYLLABLE MI"
31668\u121B "ETHIOPIC SYLLABLE MAA"
31669\u121C "ETHIOPIC SYLLABLE MEE"
31670\u121D "ETHIOPIC SYLLABLE ME"
31671\u121E "ETHIOPIC SYLLABLE MO"
31672\u121F "ETHIOPIC SYLLABLE MWA"
31673\u1220 "ETHIOPIC SYLLABLE SZA"
31674\u1221 "ETHIOPIC SYLLABLE SZU"
31675\u1222 "ETHIOPIC SYLLABLE SZI"
31676\u1223 "ETHIOPIC SYLLABLE SZAA"
31677\u1224 "ETHIOPIC SYLLABLE SZEE"
31678\u1225 "ETHIOPIC SYLLABLE SZE"
31679\u1226 "ETHIOPIC SYLLABLE SZO"
31680\u1227 "ETHIOPIC SYLLABLE SZWA"
31681\u1228 "ETHIOPIC SYLLABLE RA"
31682\u1229 "ETHIOPIC SYLLABLE RU"
31683\u122A "ETHIOPIC SYLLABLE RI"
31684\u122B "ETHIOPIC SYLLABLE RAA"
31685\u122C "ETHIOPIC SYLLABLE REE"
31686\u122D "ETHIOPIC SYLLABLE RE"
31687\u122E "ETHIOPIC SYLLABLE RO"
31688\u122F "ETHIOPIC SYLLABLE RWA"
31689\u1230 "ETHIOPIC SYLLABLE SA"
31690\u1231 "ETHIOPIC SYLLABLE SU"
31691\u1232 "ETHIOPIC SYLLABLE SI"
31692\u1233 "ETHIOPIC SYLLABLE SAA"
31693\u1234 "ETHIOPIC SYLLABLE SEE"
31694\u1235 "ETHIOPIC SYLLABLE SE"
31695\u1236 "ETHIOPIC SYLLABLE SO"
31696\u1237 "ETHIOPIC SYLLABLE SWA"
31697\u1238 "ETHIOPIC SYLLABLE SHA"
31698\u1239 "ETHIOPIC SYLLABLE SHU"
31699\u123A "ETHIOPIC SYLLABLE SHI"
31700\u123B "ETHIOPIC SYLLABLE SHAA"
31701\u123C "ETHIOPIC SYLLABLE SHEE"
31702\u123D "ETHIOPIC SYLLABLE SHE"
31703\u123E "ETHIOPIC SYLLABLE SHO"
31704\u123F "ETHIOPIC SYLLABLE SHWA"
31705\u1240 "ETHIOPIC SYLLABLE QA"
31706\u1241 "ETHIOPIC SYLLABLE QU"
31707\u1242 "ETHIOPIC SYLLABLE QI"
31708\u1243 "ETHIOPIC SYLLABLE QAA"
31709\u1244 "ETHIOPIC SYLLABLE QEE"
31710\u1245 "ETHIOPIC SYLLABLE QE"
31711\u1246 "ETHIOPIC SYLLABLE QO"
31712\u1247 "ETHIOPIC SYLLABLE QOA"
31713\u1248 "ETHIOPIC SYLLABLE QWA"
31714\u124A "ETHIOPIC SYLLABLE QWI"
31715\u124B "ETHIOPIC SYLLABLE QWAA"
31716\u124C "ETHIOPIC SYLLABLE QWEE"
31717\u124D "ETHIOPIC SYLLABLE QWE"
31718\u1250 "ETHIOPIC SYLLABLE QHA"
31719\u1251 "ETHIOPIC SYLLABLE QHU"
31720\u1252 "ETHIOPIC SYLLABLE QHI"
31721\u1253 "ETHIOPIC SYLLABLE QHAA"
31722\u1254 "ETHIOPIC SYLLABLE QHEE"
31723\u1255 "ETHIOPIC SYLLABLE QHE"
31724\u1256 "ETHIOPIC SYLLABLE QHO"
31725\u1258 "ETHIOPIC SYLLABLE QHWA"
31726\u125A "ETHIOPIC SYLLABLE QHWI"
31727\u125B "ETHIOPIC SYLLABLE QHWAA"
31728\u125C "ETHIOPIC SYLLABLE QHWEE"
31729\u125D "ETHIOPIC SYLLABLE QHWE"
31730\u1260 "ETHIOPIC SYLLABLE BA"
31731\u1261 "ETHIOPIC SYLLABLE BU"
31732\u1262 "ETHIOPIC SYLLABLE BI"
31733\u1263 "ETHIOPIC SYLLABLE BAA"
31734\u1264 "ETHIOPIC SYLLABLE BEE"
31735\u1265 "ETHIOPIC SYLLABLE BE"
31736\u1266 "ETHIOPIC SYLLABLE BO"
31737\u1267 "ETHIOPIC SYLLABLE BWA"
31738\u1268 "ETHIOPIC SYLLABLE VA"
31739\u1269 "ETHIOPIC SYLLABLE VU"
31740\u126A "ETHIOPIC SYLLABLE VI"
31741\u126B "ETHIOPIC SYLLABLE VAA"
31742\u126C "ETHIOPIC SYLLABLE VEE"
31743\u126D "ETHIOPIC SYLLABLE VE"
31744\u126E "ETHIOPIC SYLLABLE VO"
31745\u126F "ETHIOPIC SYLLABLE VWA"
31746\u1270 "ETHIOPIC SYLLABLE TA"
31747\u1271 "ETHIOPIC SYLLABLE TU"
31748\u1272 "ETHIOPIC SYLLABLE TI"
31749\u1273 "ETHIOPIC SYLLABLE TAA"
31750\u1274 "ETHIOPIC SYLLABLE TEE"
31751\u1275 "ETHIOPIC SYLLABLE TE"
31752\u1276 "ETHIOPIC SYLLABLE TO"
31753\u1277 "ETHIOPIC SYLLABLE TWA"
31754\u1278 "ETHIOPIC SYLLABLE CA"
31755\u1279 "ETHIOPIC SYLLABLE CU"
31756\u127A "ETHIOPIC SYLLABLE CI"
31757\u127B "ETHIOPIC SYLLABLE CAA"
31758\u127C "ETHIOPIC SYLLABLE CEE"
31759\u127D "ETHIOPIC SYLLABLE CE"
31760\u127E "ETHIOPIC SYLLABLE CO"
31761\u127F "ETHIOPIC SYLLABLE CWA"
31762\u1280 "ETHIOPIC SYLLABLE XA"
31763\u1281 "ETHIOPIC SYLLABLE XU"
31764\u1282 "ETHIOPIC SYLLABLE XI"
31765\u1283 "ETHIOPIC SYLLABLE XAA"
31766\u1284 "ETHIOPIC SYLLABLE XEE"
31767\u1285 "ETHIOPIC SYLLABLE XE"
31768\u1286 "ETHIOPIC SYLLABLE XO"
31769\u1287 "ETHIOPIC SYLLABLE XOA"
31770\u1288 "ETHIOPIC SYLLABLE XWA"
31771\u128A "ETHIOPIC SYLLABLE XWI"
31772\u128B "ETHIOPIC SYLLABLE XWAA"
31773\u128C "ETHIOPIC SYLLABLE XWEE"
31774\u128D "ETHIOPIC SYLLABLE XWE"
31775\u1290 "ETHIOPIC SYLLABLE NA"
31776\u1291 "ETHIOPIC SYLLABLE NU"
31777\u1292 "ETHIOPIC SYLLABLE NI"
31778\u1293 "ETHIOPIC SYLLABLE NAA"
31779\u1294 "ETHIOPIC SYLLABLE NEE"
31780\u1295 "ETHIOPIC SYLLABLE NE"
31781\u1296 "ETHIOPIC SYLLABLE NO"
31782\u1297 "ETHIOPIC SYLLABLE NWA"
31783\u1298 "ETHIOPIC SYLLABLE NYA"
31784\u1299 "ETHIOPIC SYLLABLE NYU"
31785\u129A "ETHIOPIC SYLLABLE NYI"
31786\u129B "ETHIOPIC SYLLABLE NYAA"
31787\u129C "ETHIOPIC SYLLABLE NYEE"
31788\u129D "ETHIOPIC SYLLABLE NYE"
31789\u129E "ETHIOPIC SYLLABLE NYO"
31790\u129F "ETHIOPIC SYLLABLE NYWA"
31791\u12A0 "ETHIOPIC SYLLABLE GLOTTAL A"
31792\u12A1 "ETHIOPIC SYLLABLE GLOTTAL U"
31793\u12A2 "ETHIOPIC SYLLABLE GLOTTAL I"
31794\u12A3 "ETHIOPIC SYLLABLE GLOTTAL AA"
31795\u12A4 "ETHIOPIC SYLLABLE GLOTTAL EE"
31796\u12A5 "ETHIOPIC SYLLABLE GLOTTAL E"
31797\u12A6 "ETHIOPIC SYLLABLE GLOTTAL O"
31798\u12A7 "ETHIOPIC SYLLABLE GLOTTAL WA"
31799\u12A8 "ETHIOPIC SYLLABLE KA"
31800\u12A9 "ETHIOPIC SYLLABLE KU"
31801\u12AA "ETHIOPIC SYLLABLE KI"
31802\u12AB "ETHIOPIC SYLLABLE KAA"
31803\u12AC "ETHIOPIC SYLLABLE KEE"
31804\u12AD "ETHIOPIC SYLLABLE KE"
31805\u12AE "ETHIOPIC SYLLABLE KO"
31806\u12AF "ETHIOPIC SYLLABLE KOA"
31807\u12B0 "ETHIOPIC SYLLABLE KWA"
31808\u12B2 "ETHIOPIC SYLLABLE KWI"
31809\u12B3 "ETHIOPIC SYLLABLE KWAA"
31810\u12B4 "ETHIOPIC SYLLABLE KWEE"
31811\u12B5 "ETHIOPIC SYLLABLE KWE"
31812\u12B8 "ETHIOPIC SYLLABLE KXA"
31813\u12B9 "ETHIOPIC SYLLABLE KXU"
31814\u12BA "ETHIOPIC SYLLABLE KXI"
31815\u12BB "ETHIOPIC SYLLABLE KXAA"
31816\u12BC "ETHIOPIC SYLLABLE KXEE"
31817\u12BD "ETHIOPIC SYLLABLE KXE"
31818\u12BE "ETHIOPIC SYLLABLE KXO"
31819\u12C0 "ETHIOPIC SYLLABLE KXWA"
31820\u12C2 "ETHIOPIC SYLLABLE KXWI"
31821\u12C3 "ETHIOPIC SYLLABLE KXWAA"
31822\u12C4 "ETHIOPIC SYLLABLE KXWEE"
31823\u12C5 "ETHIOPIC SYLLABLE KXWE"
31824\u12C8 "ETHIOPIC SYLLABLE WA"
31825\u12C9 "ETHIOPIC SYLLABLE WU"
31826\u12CA "ETHIOPIC SYLLABLE WI"
31827\u12CB "ETHIOPIC SYLLABLE WAA"
31828\u12CC "ETHIOPIC SYLLABLE WEE"
31829\u12CD "ETHIOPIC SYLLABLE WE"
31830\u12CE "ETHIOPIC SYLLABLE WO"
31831\u12CF "ETHIOPIC SYLLABLE WOA"
31832\u12D0 "ETHIOPIC SYLLABLE PHARYNGEAL A"
31833\u12D1 "ETHIOPIC SYLLABLE PHARYNGEAL U"
31834\u12D2 "ETHIOPIC SYLLABLE PHARYNGEAL I"
31835\u12D3 "ETHIOPIC SYLLABLE PHARYNGEAL AA"
31836\u12D4 "ETHIOPIC SYLLABLE PHARYNGEAL EE"
31837\u12D5 "ETHIOPIC SYLLABLE PHARYNGEAL E"
31838\u12D6 "ETHIOPIC SYLLABLE PHARYNGEAL O"
31839\u12D8 "ETHIOPIC SYLLABLE ZA"
31840\u12D9 "ETHIOPIC SYLLABLE ZU"
31841\u12DA "ETHIOPIC SYLLABLE ZI"
31842\u12DB "ETHIOPIC SYLLABLE ZAA"
31843\u12DC "ETHIOPIC SYLLABLE ZEE"
31844\u12DD "ETHIOPIC SYLLABLE ZE"
31845\u12DE "ETHIOPIC SYLLABLE ZO"
31846\u12DF "ETHIOPIC SYLLABLE ZWA"
31847\u12E0 "ETHIOPIC SYLLABLE ZHA"
31848\u12E1 "ETHIOPIC SYLLABLE ZHU"
31849\u12E2 "ETHIOPIC SYLLABLE ZHI"
31850\u12E3 "ETHIOPIC SYLLABLE ZHAA"
31851\u12E4 "ETHIOPIC SYLLABLE ZHEE"
31852\u12E5 "ETHIOPIC SYLLABLE ZHE"
31853\u12E6 "ETHIOPIC SYLLABLE ZHO"
31854\u12E7 "ETHIOPIC SYLLABLE ZHWA"
31855\u12E8 "ETHIOPIC SYLLABLE YA"
31856\u12E9 "ETHIOPIC SYLLABLE YU"
31857\u12EA "ETHIOPIC SYLLABLE YI"
31858\u12EB "ETHIOPIC SYLLABLE YAA"
31859\u12EC "ETHIOPIC SYLLABLE YEE"
31860\u12ED "ETHIOPIC SYLLABLE YE"
31861\u12EE "ETHIOPIC SYLLABLE YO"
31862\u12EF "ETHIOPIC SYLLABLE YOA"
31863\u12F0 "ETHIOPIC SYLLABLE DA"
31864\u12F1 "ETHIOPIC SYLLABLE DU"
31865\u12F2 "ETHIOPIC SYLLABLE DI"
31866\u12F3 "ETHIOPIC SYLLABLE DAA"
31867\u12F4 "ETHIOPIC SYLLABLE DEE"
31868\u12F5 "ETHIOPIC SYLLABLE DE"
31869\u12F6 "ETHIOPIC SYLLABLE DO"
31870\u12F7 "ETHIOPIC SYLLABLE DWA"
31871\u12F8 "ETHIOPIC SYLLABLE DDA"
31872\u12F9 "ETHIOPIC SYLLABLE DDU"
31873\u12FA "ETHIOPIC SYLLABLE DDI"
31874\u12FB "ETHIOPIC SYLLABLE DDAA"
31875\u12FC "ETHIOPIC SYLLABLE DDEE"
31876\u12FD "ETHIOPIC SYLLABLE DDE"
31877\u12FE "ETHIOPIC SYLLABLE DDO"
31878\u12FF "ETHIOPIC SYLLABLE DDWA"
31879\u1300 "ETHIOPIC SYLLABLE JA"
31880\u1301 "ETHIOPIC SYLLABLE JU"
31881\u1302 "ETHIOPIC SYLLABLE JI"
31882\u1303 "ETHIOPIC SYLLABLE JAA"
31883\u1304 "ETHIOPIC SYLLABLE JEE"
31884\u1305 "ETHIOPIC SYLLABLE JE"
31885\u1306 "ETHIOPIC SYLLABLE JO"
31886\u1307 "ETHIOPIC SYLLABLE JWA"
31887\u1308 "ETHIOPIC SYLLABLE GA"
31888\u1309 "ETHIOPIC SYLLABLE GU"
31889\u130A "ETHIOPIC SYLLABLE GI"
31890\u130B "ETHIOPIC SYLLABLE GAA"
31891\u130C "ETHIOPIC SYLLABLE GEE"
31892\u130D "ETHIOPIC SYLLABLE GE"
31893\u130E "ETHIOPIC SYLLABLE GO"
31894\u130F "ETHIOPIC SYLLABLE GOA"
31895\u1310 "ETHIOPIC SYLLABLE GWA"
31896\u1312 "ETHIOPIC SYLLABLE GWI"
31897\u1313 "ETHIOPIC SYLLABLE GWAA"
31898\u1314 "ETHIOPIC SYLLABLE GWEE"
31899\u1315 "ETHIOPIC SYLLABLE GWE"
31900\u1318 "ETHIOPIC SYLLABLE GGA"
31901\u1319 "ETHIOPIC SYLLABLE GGU"
31902\u131A "ETHIOPIC SYLLABLE GGI"
31903\u131B "ETHIOPIC SYLLABLE GGAA"
31904\u131C "ETHIOPIC SYLLABLE GGEE"
31905\u131D "ETHIOPIC SYLLABLE GGE"
31906\u131E "ETHIOPIC SYLLABLE GGO"
31907\u131F "ETHIOPIC SYLLABLE GGWAA"
31908\u1320 "ETHIOPIC SYLLABLE THA"
31909\u1321 "ETHIOPIC SYLLABLE THU"
31910\u1322 "ETHIOPIC SYLLABLE THI"
31911\u1323 "ETHIOPIC SYLLABLE THAA"
31912\u1324 "ETHIOPIC SYLLABLE THEE"
31913\u1325 "ETHIOPIC SYLLABLE THE"
31914\u1326 "ETHIOPIC SYLLABLE THO"
31915\u1327 "ETHIOPIC SYLLABLE THWA"
31916\u1328 "ETHIOPIC SYLLABLE CHA"
31917\u1329 "ETHIOPIC SYLLABLE CHU"
31918\u132A "ETHIOPIC SYLLABLE CHI"
31919\u132B "ETHIOPIC SYLLABLE CHAA"
31920\u132C "ETHIOPIC SYLLABLE CHEE"
31921\u132D "ETHIOPIC SYLLABLE CHE"
31922\u132E "ETHIOPIC SYLLABLE CHO"
31923\u132F "ETHIOPIC SYLLABLE CHWA"
31924\u1330 "ETHIOPIC SYLLABLE PHA"
31925\u1331 "ETHIOPIC SYLLABLE PHU"
31926\u1332 "ETHIOPIC SYLLABLE PHI"
31927\u1333 "ETHIOPIC SYLLABLE PHAA"
31928\u1334 "ETHIOPIC SYLLABLE PHEE"
31929\u1335 "ETHIOPIC SYLLABLE PHE"
31930\u1336 "ETHIOPIC SYLLABLE PHO"
31931\u1337 "ETHIOPIC SYLLABLE PHWA"
31932\u1338 "ETHIOPIC SYLLABLE TSA"
31933\u1339 "ETHIOPIC SYLLABLE TSU"
31934\u133A "ETHIOPIC SYLLABLE TSI"
31935\u133B "ETHIOPIC SYLLABLE TSAA"
31936\u133C "ETHIOPIC SYLLABLE TSEE"
31937\u133D "ETHIOPIC SYLLABLE TSE"
31938\u133E "ETHIOPIC SYLLABLE TSO"
31939\u133F "ETHIOPIC SYLLABLE TSWA"
31940\u1340 "ETHIOPIC SYLLABLE TZA"
31941\u1341 "ETHIOPIC SYLLABLE TZU"
31942\u1342 "ETHIOPIC SYLLABLE TZI"
31943\u1343 "ETHIOPIC SYLLABLE TZAA"
31944\u1344 "ETHIOPIC SYLLABLE TZEE"
31945\u1345 "ETHIOPIC SYLLABLE TZE"
31946\u1346 "ETHIOPIC SYLLABLE TZO"
31947\u1347 "ETHIOPIC SYLLABLE TZOA"
31948\u1348 "ETHIOPIC SYLLABLE FA"
31949\u1349 "ETHIOPIC SYLLABLE FU"
31950\u134A "ETHIOPIC SYLLABLE FI"
31951\u134B "ETHIOPIC SYLLABLE FAA"
31952\u134C "ETHIOPIC SYLLABLE FEE"
31953\u134D "ETHIOPIC SYLLABLE FE"
31954\u134E "ETHIOPIC SYLLABLE FO"
31955\u134F "ETHIOPIC SYLLABLE FWA"
31956\u1350 "ETHIOPIC SYLLABLE PA"
31957\u1351 "ETHIOPIC SYLLABLE PU"
31958\u1352 "ETHIOPIC SYLLABLE PI"
31959\u1353 "ETHIOPIC SYLLABLE PAA"
31960\u1354 "ETHIOPIC SYLLABLE PEE"
31961\u1355 "ETHIOPIC SYLLABLE PE"
31962\u1356 "ETHIOPIC SYLLABLE PO"
31963\u1357 "ETHIOPIC SYLLABLE PWA"
31964\u1358 "ETHIOPIC SYLLABLE RYA"
31965\u1359 "ETHIOPIC SYLLABLE MYA"
31966\u135A "ETHIOPIC SYLLABLE FYA"
31967\u135F "ETHIOPIC COMBINING GEMINATION MARK"
31968\u1360 "ETHIOPIC SECTION MARK"
31969\u1361 "ETHIOPIC WORDSPACE"
31970\u1362 "ETHIOPIC FULL STOP"
31971\u1363 "ETHIOPIC COMMA"
31972\u1364 "ETHIOPIC SEMICOLON"
31973\u1365 "ETHIOPIC COLON"
31974\u1366 "ETHIOPIC PREFACE COLON"
31975\u1367 "ETHIOPIC QUESTION MARK"
31976\u1368 "ETHIOPIC PARAGRAPH SEPARATOR"
31977\u1369 "ETHIOPIC DIGIT ONE"
31978\u136A "ETHIOPIC DIGIT TWO"
31979\u136B "ETHIOPIC DIGIT THREE"
31980\u136C "ETHIOPIC DIGIT FOUR"
31981\u136D "ETHIOPIC DIGIT FIVE"
31982\u136E "ETHIOPIC DIGIT SIX"
31983\u136F "ETHIOPIC DIGIT SEVEN"
31984\u1370 "ETHIOPIC DIGIT EIGHT"
31985\u1371 "ETHIOPIC DIGIT NINE"
31986\u1372 "ETHIOPIC NUMBER TEN"
31987\u1373 "ETHIOPIC NUMBER TWENTY"
31988\u1374 "ETHIOPIC NUMBER THIRTY"
31989\u1375 "ETHIOPIC NUMBER FORTY"
31990\u1376 "ETHIOPIC NUMBER FIFTY"
31991\u1377 "ETHIOPIC NUMBER SIXTY"
31992\u1378 "ETHIOPIC NUMBER SEVENTY"
31993\u1379 "ETHIOPIC NUMBER EIGHTY"
31994\u137A "ETHIOPIC NUMBER NINETY"
31995\u137B "ETHIOPIC NUMBER HUNDRED"
31996\u137C "ETHIOPIC NUMBER TEN THOUSAND"
31997\u1380 "ETHIOPIC SYLLABLE SEBATBEIT MWA"
31998\u1381 "ETHIOPIC SYLLABLE MWI"
31999\u1382 "ETHIOPIC SYLLABLE MWEE"
32000\u1383 "ETHIOPIC SYLLABLE MWE"
32001\u1384 "ETHIOPIC SYLLABLE SEBATBEIT BWA"
32002\u1385 "ETHIOPIC SYLLABLE BWI"
32003\u1386 "ETHIOPIC SYLLABLE BWEE"
32004\u1387 "ETHIOPIC SYLLABLE BWE"
32005\u1388 "ETHIOPIC SYLLABLE SEBATBEIT FWA"
32006\u1389 "ETHIOPIC SYLLABLE FWI"
32007\u138A "ETHIOPIC SYLLABLE FWEE"
32008\u138B "ETHIOPIC SYLLABLE FWE"
32009\u138C "ETHIOPIC SYLLABLE SEBATBEIT PWA"
32010\u138D "ETHIOPIC SYLLABLE PWI"
32011\u138E "ETHIOPIC SYLLABLE PWEE"
32012\u138F "ETHIOPIC SYLLABLE PWE"
32013\u1390 "ETHIOPIC TONAL MARK YIZET"
32014\u1391 "ETHIOPIC TONAL MARK DERET"
32015\u1392 "ETHIOPIC TONAL MARK RIKRIK"
32016\u1393 "ETHIOPIC TONAL MARK SHORT RIKRIK"
32017\u1394 "ETHIOPIC TONAL MARK DIFAT"
32018\u1395 "ETHIOPIC TONAL MARK KENAT"
32019\u1396 "ETHIOPIC TONAL MARK CHIRET"
32020\u1397 "ETHIOPIC TONAL MARK HIDET"
32021\u1398 "ETHIOPIC TONAL MARK DERET-HIDET"
32022\u1399 "ETHIOPIC TONAL MARK KURT"
32023\u13A0 "CHEROKEE LETTER A"
32024\u13A1 "CHEROKEE LETTER E"
32025\u13A2 "CHEROKEE LETTER I"
32026\u13A3 "CHEROKEE LETTER O"
32027\u13A4 "CHEROKEE LETTER U"
32028\u13A5 "CHEROKEE LETTER V"
32029\u13A6 "CHEROKEE LETTER GA"
32030\u13A7 "CHEROKEE LETTER KA"
32031\u13A8 "CHEROKEE LETTER GE"
32032\u13A9 "CHEROKEE LETTER GI"
32033\u13AA "CHEROKEE LETTER GO"
32034\u13AB "CHEROKEE LETTER GU"
32035\u13AC "CHEROKEE LETTER GV"
32036\u13AD "CHEROKEE LETTER HA"
32037\u13AE "CHEROKEE LETTER HE"
32038\u13AF "CHEROKEE LETTER HI"
32039\u13B0 "CHEROKEE LETTER HO"
32040\u13B1 "CHEROKEE LETTER HU"
32041\u13B2 "CHEROKEE LETTER HV"
32042\u13B3 "CHEROKEE LETTER LA"
32043\u13B4 "CHEROKEE LETTER LE"
32044\u13B5 "CHEROKEE LETTER LI"
32045\u13B6 "CHEROKEE LETTER LO"
32046\u13B7 "CHEROKEE LETTER LU"
32047\u13B8 "CHEROKEE LETTER LV"
32048\u13B9 "CHEROKEE LETTER MA"
32049\u13BA "CHEROKEE LETTER ME"
32050\u13BB "CHEROKEE LETTER MI"
32051\u13BC "CHEROKEE LETTER MO"
32052\u13BD "CHEROKEE LETTER MU"
32053\u13BE "CHEROKEE LETTER NA"
32054\u13BF "CHEROKEE LETTER HNA"
32055\u13C0 "CHEROKEE LETTER NAH"
32056\u13C1 "CHEROKEE LETTER NE"
32057\u13C2 "CHEROKEE LETTER NI"
32058\u13C3 "CHEROKEE LETTER NO"
32059\u13C4 "CHEROKEE LETTER NU"
32060\u13C5 "CHEROKEE LETTER NV"
32061\u13C6 "CHEROKEE LETTER QUA"
32062\u13C7 "CHEROKEE LETTER QUE"
32063\u13C8 "CHEROKEE LETTER QUI"
32064\u13C9 "CHEROKEE LETTER QUO"
32065\u13CA "CHEROKEE LETTER QUU"
32066\u13CB "CHEROKEE LETTER QUV"
32067\u13CC "CHEROKEE LETTER SA"
32068\u13CD "CHEROKEE LETTER S"
32069\u13CE "CHEROKEE LETTER SE"
32070\u13CF "CHEROKEE LETTER SI"
32071\u13D0 "CHEROKEE LETTER SO"
32072\u13D1 "CHEROKEE LETTER SU"
32073\u13D2 "CHEROKEE LETTER SV"
32074\u13D3 "CHEROKEE LETTER DA"
32075\u13D4 "CHEROKEE LETTER TA"
32076\u13D5 "CHEROKEE LETTER DE"
32077\u13D6 "CHEROKEE LETTER TE"
32078\u13D7 "CHEROKEE LETTER DI"
32079\u13D8 "CHEROKEE LETTER TI"
32080\u13D9 "CHEROKEE LETTER DO"
32081\u13DA "CHEROKEE LETTER DU"
32082\u13DB "CHEROKEE LETTER DV"
32083\u13DC "CHEROKEE LETTER DLA"
32084\u13DD "CHEROKEE LETTER TLA"
32085\u13DE "CHEROKEE LETTER TLE"
32086\u13DF "CHEROKEE LETTER TLI"
32087\u13E0 "CHEROKEE LETTER TLO"
32088\u13E1 "CHEROKEE LETTER TLU"
32089\u13E2 "CHEROKEE LETTER TLV"
32090\u13E3 "CHEROKEE LETTER TSA"
32091\u13E4 "CHEROKEE LETTER TSE"
32092\u13E5 "CHEROKEE LETTER TSI"
32093\u13E6 "CHEROKEE LETTER TSO"
32094\u13E7 "CHEROKEE LETTER TSU"
32095\u13E8 "CHEROKEE LETTER TSV"
32096\u13E9 "CHEROKEE LETTER WA"
32097\u13EA "CHEROKEE LETTER WE"
32098\u13EB "CHEROKEE LETTER WI"
32099\u13EC "CHEROKEE LETTER WO"
32100\u13ED "CHEROKEE LETTER WU"
32101\u13EE "CHEROKEE LETTER WV"
32102\u13EF "CHEROKEE LETTER YA"
32103\u13F0 "CHEROKEE LETTER YE"
32104\u13F1 "CHEROKEE LETTER YI"
32105\u13F2 "CHEROKEE LETTER YO"
32106\u13F3 "CHEROKEE LETTER YU"
32107\u13F4 "CHEROKEE LETTER YV"
32108\u1401 "CANADIAN SYLLABICS E"
32109\u1402 "CANADIAN SYLLABICS AAI"
32110\u1403 "CANADIAN SYLLABICS I"
32111\u1404 "CANADIAN SYLLABICS II"
32112\u1405 "CANADIAN SYLLABICS O"
32113\u1406 "CANADIAN SYLLABICS OO"
32114\u1407 "CANADIAN SYLLABICS Y-CREE OO"
32115\u1408 "CANADIAN SYLLABICS CARRIER EE"
32116\u1409 "CANADIAN SYLLABICS CARRIER I"
32117\u140A "CANADIAN SYLLABICS A"
32118\u140B "CANADIAN SYLLABICS AA"
32119\u140C "CANADIAN SYLLABICS WE"
32120\u140D "CANADIAN SYLLABICS WEST-CREE WE"
32121\u140E "CANADIAN SYLLABICS WI"
32122\u140F "CANADIAN SYLLABICS WEST-CREE WI"
32123\u1410 "CANADIAN SYLLABICS WII"
32124\u1411 "CANADIAN SYLLABICS WEST-CREE WII"
32125\u1412 "CANADIAN SYLLABICS WO"
32126\u1413 "CANADIAN SYLLABICS WEST-CREE WO"
32127\u1414 "CANADIAN SYLLABICS WOO"
32128\u1415 "CANADIAN SYLLABICS WEST-CREE WOO"
32129\u1416 "CANADIAN SYLLABICS NASKAPI WOO"
32130\u1417 "CANADIAN SYLLABICS WA"
32131\u1418 "CANADIAN SYLLABICS WEST-CREE WA"
32132\u1419 "CANADIAN SYLLABICS WAA"
32133\u141A "CANADIAN SYLLABICS WEST-CREE WAA"
32134\u141B "CANADIAN SYLLABICS NASKAPI WAA"
32135\u141C "CANADIAN SYLLABICS AI"
32136\u141D "CANADIAN SYLLABICS Y-CREE W"
32137\u141E "CANADIAN SYLLABICS GLOTTAL STOP"
32138\u141F "CANADIAN SYLLABICS FINAL ACUTE"
32139\u1420 "CANADIAN SYLLABICS FINAL GRAVE"
32140\u1421 "CANADIAN SYLLABICS FINAL BOTTOM HALF RING"
32141\u1422 "CANADIAN SYLLABICS FINAL TOP HALF RING"
32142\u1423 "CANADIAN SYLLABICS FINAL RIGHT HALF RING"
32143\u1424 "CANADIAN SYLLABICS FINAL RING"
32144\u1425 "CANADIAN SYLLABICS FINAL DOUBLE ACUTE"
32145\u1426 "CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES"
32146\u1427 "CANADIAN SYLLABICS FINAL MIDDLE DOT"
32147\u1428 "CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE"
32148\u1429 "CANADIAN SYLLABICS FINAL PLUS"
32149\u142A "CANADIAN SYLLABICS FINAL DOWN TACK"
32150\u142B "CANADIAN SYLLABICS EN"
32151\u142C "CANADIAN SYLLABICS IN"
32152\u142D "CANADIAN SYLLABICS ON"
32153\u142E "CANADIAN SYLLABICS AN"
32154\u142F "CANADIAN SYLLABICS PE"
32155\u1430 "CANADIAN SYLLABICS PAAI"
32156\u1431 "CANADIAN SYLLABICS PI"
32157\u1432 "CANADIAN SYLLABICS PII"
32158\u1433 "CANADIAN SYLLABICS PO"
32159\u1434 "CANADIAN SYLLABICS POO"
32160\u1435 "CANADIAN SYLLABICS Y-CREE POO"
32161\u1436 "CANADIAN SYLLABICS CARRIER HEE"
32162\u1437 "CANADIAN SYLLABICS CARRIER HI"
32163\u1438 "CANADIAN SYLLABICS PA"
32164\u1439 "CANADIAN SYLLABICS PAA"
32165\u143A "CANADIAN SYLLABICS PWE"
32166\u143B "CANADIAN SYLLABICS WEST-CREE PWE"
32167\u143C "CANADIAN SYLLABICS PWI"
32168\u143D "CANADIAN SYLLABICS WEST-CREE PWI"
32169\u143E "CANADIAN SYLLABICS PWII"
32170\u143F "CANADIAN SYLLABICS WEST-CREE PWII"
32171\u1440 "CANADIAN SYLLABICS PWO"
32172\u1441 "CANADIAN SYLLABICS WEST-CREE PWO"
32173\u1442 "CANADIAN SYLLABICS PWOO"
32174\u1443 "CANADIAN SYLLABICS WEST-CREE PWOO"
32175\u1444 "CANADIAN SYLLABICS PWA"
32176\u1445 "CANADIAN SYLLABICS WEST-CREE PWA"
32177\u1446 "CANADIAN SYLLABICS PWAA"
32178\u1447 "CANADIAN SYLLABICS WEST-CREE PWAA"
32179\u1448 "CANADIAN SYLLABICS Y-CREE PWAA"
32180\u1449 "CANADIAN SYLLABICS P"
32181\u144A "CANADIAN SYLLABICS WEST-CREE P"
32182\u144B "CANADIAN SYLLABICS CARRIER H"
32183\u144C "CANADIAN SYLLABICS TE"
32184\u144D "CANADIAN SYLLABICS TAAI"
32185\u144E "CANADIAN SYLLABICS TI"
32186\u144F "CANADIAN SYLLABICS TII"
32187\u1450 "CANADIAN SYLLABICS TO"
32188\u1451 "CANADIAN SYLLABICS TOO"
32189\u1452 "CANADIAN SYLLABICS Y-CREE TOO"
32190\u1453 "CANADIAN SYLLABICS CARRIER DEE"
32191\u1454 "CANADIAN SYLLABICS CARRIER DI"
32192\u1455 "CANADIAN SYLLABICS TA"
32193\u1456 "CANADIAN SYLLABICS TAA"
32194\u1457 "CANADIAN SYLLABICS TWE"
32195\u1458 "CANADIAN SYLLABICS WEST-CREE TWE"
32196\u1459 "CANADIAN SYLLABICS TWI"
32197\u145A "CANADIAN SYLLABICS WEST-CREE TWI"
32198\u145B "CANADIAN SYLLABICS TWII"
32199\u145C "CANADIAN SYLLABICS WEST-CREE TWII"
32200\u145D "CANADIAN SYLLABICS TWO"
32201\u145E "CANADIAN SYLLABICS WEST-CREE TWO"
32202\u145F "CANADIAN SYLLABICS TWOO"
32203\u1460 "CANADIAN SYLLABICS WEST-CREE TWOO"
32204\u1461 "CANADIAN SYLLABICS TWA"
32205\u1462 "CANADIAN SYLLABICS WEST-CREE TWA"
32206\u1463 "CANADIAN SYLLABICS TWAA"
32207\u1464 "CANADIAN SYLLABICS WEST-CREE TWAA"
32208\u1465 "CANADIAN SYLLABICS NASKAPI TWAA"
32209\u1466 "CANADIAN SYLLABICS T"
32210\u1467 "CANADIAN SYLLABICS TTE"
32211\u1468 "CANADIAN SYLLABICS TTI"
32212\u1469 "CANADIAN SYLLABICS TTO"
32213\u146A "CANADIAN SYLLABICS TTA"
32214\u146B "CANADIAN SYLLABICS KE"
32215\u146C "CANADIAN SYLLABICS KAAI"
32216\u146D "CANADIAN SYLLABICS KI"
32217\u146E "CANADIAN SYLLABICS KII"
32218\u146F "CANADIAN SYLLABICS KO"
32219\u1470 "CANADIAN SYLLABICS KOO"
32220\u1471 "CANADIAN SYLLABICS Y-CREE KOO"
32221\u1472 "CANADIAN SYLLABICS KA"
32222\u1473 "CANADIAN SYLLABICS KAA"
32223\u1474 "CANADIAN SYLLABICS KWE"
32224\u1475 "CANADIAN SYLLABICS WEST-CREE KWE"
32225\u1476 "CANADIAN SYLLABICS KWI"
32226\u1477 "CANADIAN SYLLABICS WEST-CREE KWI"
32227\u1478 "CANADIAN SYLLABICS KWII"
32228\u1479 "CANADIAN SYLLABICS WEST-CREE KWII"
32229\u147A "CANADIAN SYLLABICS KWO"
32230\u147B "CANADIAN SYLLABICS WEST-CREE KWO"
32231\u147C "CANADIAN SYLLABICS KWOO"
32232\u147D "CANADIAN SYLLABICS WEST-CREE KWOO"
32233\u147E "CANADIAN SYLLABICS KWA"
32234\u147F "CANADIAN SYLLABICS WEST-CREE KWA"
32235\u1480 "CANADIAN SYLLABICS KWAA"
32236\u1481 "CANADIAN SYLLABICS WEST-CREE KWAA"
32237\u1482 "CANADIAN SYLLABICS NASKAPI KWAA"
32238\u1483 "CANADIAN SYLLABICS K"
32239\u1484 "CANADIAN SYLLABICS KW"
32240\u1485 "CANADIAN SYLLABICS SOUTH-SLAVEY KEH"
32241\u1486 "CANADIAN SYLLABICS SOUTH-SLAVEY KIH"
32242\u1487 "CANADIAN SYLLABICS SOUTH-SLAVEY KOH"
32243\u1488 "CANADIAN SYLLABICS SOUTH-SLAVEY KAH"
32244\u1489 "CANADIAN SYLLABICS CE"
32245\u148A "CANADIAN SYLLABICS CAAI"
32246\u148B "CANADIAN SYLLABICS CI"
32247\u148C "CANADIAN SYLLABICS CII"
32248\u148D "CANADIAN SYLLABICS CO"
32249\u148E "CANADIAN SYLLABICS COO"
32250\u148F "CANADIAN SYLLABICS Y-CREE COO"
32251\u1490 "CANADIAN SYLLABICS CA"
32252\u1491 "CANADIAN SYLLABICS CAA"
32253\u1492 "CANADIAN SYLLABICS CWE"
32254\u1493 "CANADIAN SYLLABICS WEST-CREE CWE"
32255\u1494 "CANADIAN SYLLABICS CWI"
32256\u1495 "CANADIAN SYLLABICS WEST-CREE CWI"
32257\u1496 "CANADIAN SYLLABICS CWII"
32258\u1497 "CANADIAN SYLLABICS WEST-CREE CWII"
32259\u1498 "CANADIAN SYLLABICS CWO"
32260\u1499 "CANADIAN SYLLABICS WEST-CREE CWO"
32261\u149A "CANADIAN SYLLABICS CWOO"
32262\u149B "CANADIAN SYLLABICS WEST-CREE CWOO"
32263\u149C "CANADIAN SYLLABICS CWA"
32264\u149D "CANADIAN SYLLABICS WEST-CREE CWA"
32265\u149E "CANADIAN SYLLABICS CWAA"
32266\u149F "CANADIAN SYLLABICS WEST-CREE CWAA"
32267\u14A0 "CANADIAN SYLLABICS NASKAPI CWAA"
32268\u14A1 "CANADIAN SYLLABICS C"
32269\u14A2 "CANADIAN SYLLABICS SAYISI TH"
32270\u14A3 "CANADIAN SYLLABICS ME"
32271\u14A4 "CANADIAN SYLLABICS MAAI"
32272\u14A5 "CANADIAN SYLLABICS MI"
32273\u14A6 "CANADIAN SYLLABICS MII"
32274\u14A7 "CANADIAN SYLLABICS MO"
32275\u14A8 "CANADIAN SYLLABICS MOO"
32276\u14A9 "CANADIAN SYLLABICS Y-CREE MOO"
32277\u14AA "CANADIAN SYLLABICS MA"
32278\u14AB "CANADIAN SYLLABICS MAA"
32279\u14AC "CANADIAN SYLLABICS MWE"
32280\u14AD "CANADIAN SYLLABICS WEST-CREE MWE"
32281\u14AE "CANADIAN SYLLABICS MWI"
32282\u14AF "CANADIAN SYLLABICS WEST-CREE MWI"
32283\u14B0 "CANADIAN SYLLABICS MWII"
32284\u14B1 "CANADIAN SYLLABICS WEST-CREE MWII"
32285\u14B2 "CANADIAN SYLLABICS MWO"
32286\u14B3 "CANADIAN SYLLABICS WEST-CREE MWO"
32287\u14B4 "CANADIAN SYLLABICS MWOO"
32288\u14B5 "CANADIAN SYLLABICS WEST-CREE MWOO"
32289\u14B6 "CANADIAN SYLLABICS MWA"
32290\u14B7 "CANADIAN SYLLABICS WEST-CREE MWA"
32291\u14B8 "CANADIAN SYLLABICS MWAA"
32292\u14B9 "CANADIAN SYLLABICS WEST-CREE MWAA"
32293\u14BA "CANADIAN SYLLABICS NASKAPI MWAA"
32294\u14BB "CANADIAN SYLLABICS M"
32295\u14BC "CANADIAN SYLLABICS WEST-CREE M"
32296\u14BD "CANADIAN SYLLABICS MH"
32297\u14BE "CANADIAN SYLLABICS ATHAPASCAN M"
32298\u14BF "CANADIAN SYLLABICS SAYISI M"
32299\u14C0 "CANADIAN SYLLABICS NE"
32300\u14C1 "CANADIAN SYLLABICS NAAI"
32301\u14C2 "CANADIAN SYLLABICS NI"
32302\u14C3 "CANADIAN SYLLABICS NII"
32303\u14C4 "CANADIAN SYLLABICS NO"
32304\u14C5 "CANADIAN SYLLABICS NOO"
32305\u14C6 "CANADIAN SYLLABICS Y-CREE NOO"
32306\u14C7 "CANADIAN SYLLABICS NA"
32307\u14C8 "CANADIAN SYLLABICS NAA"
32308\u14C9 "CANADIAN SYLLABICS NWE"
32309\u14CA "CANADIAN SYLLABICS WEST-CREE NWE"
32310\u14CB "CANADIAN SYLLABICS NWA"
32311\u14CC "CANADIAN SYLLABICS WEST-CREE NWA"
32312\u14CD "CANADIAN SYLLABICS NWAA"
32313\u14CE "CANADIAN SYLLABICS WEST-CREE NWAA"
32314\u14CF "CANADIAN SYLLABICS NASKAPI NWAA"
32315\u14D0 "CANADIAN SYLLABICS N"
32316\u14D1 "CANADIAN SYLLABICS CARRIER NG"
32317\u14D2 "CANADIAN SYLLABICS NH"
32318\u14D3 "CANADIAN SYLLABICS LE"
32319\u14D4 "CANADIAN SYLLABICS LAAI"
32320\u14D5 "CANADIAN SYLLABICS LI"
32321\u14D6 "CANADIAN SYLLABICS LII"
32322\u14D7 "CANADIAN SYLLABICS LO"
32323\u14D8 "CANADIAN SYLLABICS LOO"
32324\u14D9 "CANADIAN SYLLABICS Y-CREE LOO"
32325\u14DA "CANADIAN SYLLABICS LA"
32326\u14DB "CANADIAN SYLLABICS LAA"
32327\u14DC "CANADIAN SYLLABICS LWE"
32328\u14DD "CANADIAN SYLLABICS WEST-CREE LWE"
32329\u14DE "CANADIAN SYLLABICS LWI"
32330\u14DF "CANADIAN SYLLABICS WEST-CREE LWI"
32331\u14E0 "CANADIAN SYLLABICS LWII"
32332\u14E1 "CANADIAN SYLLABICS WEST-CREE LWII"
32333\u14E2 "CANADIAN SYLLABICS LWO"
32334\u14E3 "CANADIAN SYLLABICS WEST-CREE LWO"
32335\u14E4 "CANADIAN SYLLABICS LWOO"
32336\u14E5 "CANADIAN SYLLABICS WEST-CREE LWOO"
32337\u14E6 "CANADIAN SYLLABICS LWA"
32338\u14E7 "CANADIAN SYLLABICS WEST-CREE LWA"
32339\u14E8 "CANADIAN SYLLABICS LWAA"
32340\u14E9 "CANADIAN SYLLABICS WEST-CREE LWAA"
32341\u14EA "CANADIAN SYLLABICS L"
32342\u14EB "CANADIAN SYLLABICS WEST-CREE L"
32343\u14EC "CANADIAN SYLLABICS MEDIAL L"
32344\u14ED "CANADIAN SYLLABICS SE"
32345\u14EE "CANADIAN SYLLABICS SAAI"
32346\u14EF "CANADIAN SYLLABICS SI"
32347\u14F0 "CANADIAN SYLLABICS SII"
32348\u14F1 "CANADIAN SYLLABICS SO"
32349\u14F2 "CANADIAN SYLLABICS SOO"
32350\u14F3 "CANADIAN SYLLABICS Y-CREE SOO"
32351\u14F4 "CANADIAN SYLLABICS SA"
32352\u14F5 "CANADIAN SYLLABICS SAA"
32353\u14F6 "CANADIAN SYLLABICS SWE"
32354\u14F7 "CANADIAN SYLLABICS WEST-CREE SWE"
32355\u14F8 "CANADIAN SYLLABICS SWI"
32356\u14F9 "CANADIAN SYLLABICS WEST-CREE SWI"
32357\u14FA "CANADIAN SYLLABICS SWII"
32358\u14FB "CANADIAN SYLLABICS WEST-CREE SWII"
32359\u14FC "CANADIAN SYLLABICS SWO"
32360\u14FD "CANADIAN SYLLABICS WEST-CREE SWO"
32361\u14FE "CANADIAN SYLLABICS SWOO"
32362\u14FF "CANADIAN SYLLABICS WEST-CREE SWOO"
32363\u1500 "CANADIAN SYLLABICS SWA"
32364\u1501 "CANADIAN SYLLABICS WEST-CREE SWA"
32365\u1502 "CANADIAN SYLLABICS SWAA"
32366\u1503 "CANADIAN SYLLABICS WEST-CREE SWAA"
32367\u1504 "CANADIAN SYLLABICS NASKAPI SWAA"
32368\u1505 "CANADIAN SYLLABICS S"
32369\u1506 "CANADIAN SYLLABICS ATHAPASCAN S"
32370\u1507 "CANADIAN SYLLABICS SW"
32371\u1508 "CANADIAN SYLLABICS BLACKFOOT S"
32372\u1509 "CANADIAN SYLLABICS MOOSE-CREE SK"
32373\u150A "CANADIAN SYLLABICS NASKAPI SKW"
32374\u150B "CANADIAN SYLLABICS NASKAPI S-W"
32375\u150C "CANADIAN SYLLABICS NASKAPI SPWA"
32376\u150D "CANADIAN SYLLABICS NASKAPI STWA"
32377\u150E "CANADIAN SYLLABICS NASKAPI SKWA"
32378\u150F "CANADIAN SYLLABICS NASKAPI SCWA"
32379\u1510 "CANADIAN SYLLABICS SHE"
32380\u1511 "CANADIAN SYLLABICS SHI"
32381\u1512 "CANADIAN SYLLABICS SHII"
32382\u1513 "CANADIAN SYLLABICS SHO"
32383\u1514 "CANADIAN SYLLABICS SHOO"
32384\u1515 "CANADIAN SYLLABICS SHA"
32385\u1516 "CANADIAN SYLLABICS SHAA"
32386\u1517 "CANADIAN SYLLABICS SHWE"
32387\u1518 "CANADIAN SYLLABICS WEST-CREE SHWE"
32388\u1519 "CANADIAN SYLLABICS SHWI"
32389\u151A "CANADIAN SYLLABICS WEST-CREE SHWI"
32390\u151B "CANADIAN SYLLABICS SHWII"
32391\u151C "CANADIAN SYLLABICS WEST-CREE SHWII"
32392\u151D "CANADIAN SYLLABICS SHWO"
32393\u151E "CANADIAN SYLLABICS WEST-CREE SHWO"
32394\u151F "CANADIAN SYLLABICS SHWOO"
32395\u1520 "CANADIAN SYLLABICS WEST-CREE SHWOO"
32396\u1521 "CANADIAN SYLLABICS SHWA"
32397\u1522 "CANADIAN SYLLABICS WEST-CREE SHWA"
32398\u1523 "CANADIAN SYLLABICS SHWAA"
32399\u1524 "CANADIAN SYLLABICS WEST-CREE SHWAA"
32400\u1525 "CANADIAN SYLLABICS SH"
32401\u1526 "CANADIAN SYLLABICS YE"
32402\u1527 "CANADIAN SYLLABICS YAAI"
32403\u1528 "CANADIAN SYLLABICS YI"
32404\u1529 "CANADIAN SYLLABICS YII"
32405\u152A "CANADIAN SYLLABICS YO"
32406\u152B "CANADIAN SYLLABICS YOO"
32407\u152C "CANADIAN SYLLABICS Y-CREE YOO"
32408\u152D "CANADIAN SYLLABICS YA"
32409\u152E "CANADIAN SYLLABICS YAA"
32410\u152F "CANADIAN SYLLABICS YWE"
32411\u1530 "CANADIAN SYLLABICS WEST-CREE YWE"
32412\u1531 "CANADIAN SYLLABICS YWI"
32413\u1532 "CANADIAN SYLLABICS WEST-CREE YWI"
32414\u1533 "CANADIAN SYLLABICS YWII"
32415\u1534 "CANADIAN SYLLABICS WEST-CREE YWII"
32416\u1535 "CANADIAN SYLLABICS YWO"
32417\u1536 "CANADIAN SYLLABICS WEST-CREE YWO"
32418\u1537 "CANADIAN SYLLABICS YWOO"
32419\u1538 "CANADIAN SYLLABICS WEST-CREE YWOO"
32420\u1539 "CANADIAN SYLLABICS YWA"
32421\u153A "CANADIAN SYLLABICS WEST-CREE YWA"
32422\u153B "CANADIAN SYLLABICS YWAA"
32423\u153C "CANADIAN SYLLABICS WEST-CREE YWAA"
32424\u153D "CANADIAN SYLLABICS NASKAPI YWAA"
32425\u153E "CANADIAN SYLLABICS Y"
32426\u153F "CANADIAN SYLLABICS BIBLE-CREE Y"
32427\u1540 "CANADIAN SYLLABICS WEST-CREE Y"
32428\u1541 "CANADIAN SYLLABICS SAYISI YI"
32429\u1542 "CANADIAN SYLLABICS RE"
32430\u1543 "CANADIAN SYLLABICS R-CREE RE"
32431\u1544 "CANADIAN SYLLABICS WEST-CREE LE"
32432\u1545 "CANADIAN SYLLABICS RAAI"
32433\u1546 "CANADIAN SYLLABICS RI"
32434\u1547 "CANADIAN SYLLABICS RII"
32435\u1548 "CANADIAN SYLLABICS RO"
32436\u1549 "CANADIAN SYLLABICS ROO"
32437\u154A "CANADIAN SYLLABICS WEST-CREE LO"
32438\u154B "CANADIAN SYLLABICS RA"
32439\u154C "CANADIAN SYLLABICS RAA"
32440\u154D "CANADIAN SYLLABICS WEST-CREE LA"
32441\u154E "CANADIAN SYLLABICS RWAA"
32442\u154F "CANADIAN SYLLABICS WEST-CREE RWAA"
32443\u1550 "CANADIAN SYLLABICS R"
32444\u1551 "CANADIAN SYLLABICS WEST-CREE R"
32445\u1552 "CANADIAN SYLLABICS MEDIAL R"
32446\u1553 "CANADIAN SYLLABICS FE"
32447\u1554 "CANADIAN SYLLABICS FAAI"
32448\u1555 "CANADIAN SYLLABICS FI"
32449\u1556 "CANADIAN SYLLABICS FII"
32450\u1557 "CANADIAN SYLLABICS FO"
32451\u1558 "CANADIAN SYLLABICS FOO"
32452\u1559 "CANADIAN SYLLABICS FA"
32453\u155A "CANADIAN SYLLABICS FAA"
32454\u155B "CANADIAN SYLLABICS FWAA"
32455\u155C "CANADIAN SYLLABICS WEST-CREE FWAA"
32456\u155D "CANADIAN SYLLABICS F"
32457\u155E "CANADIAN SYLLABICS THE"
32458\u155F "CANADIAN SYLLABICS N-CREE THE"
32459\u1560 "CANADIAN SYLLABICS THI"
32460\u1561 "CANADIAN SYLLABICS N-CREE THI"
32461\u1562 "CANADIAN SYLLABICS THII"
32462\u1563 "CANADIAN SYLLABICS N-CREE THII"
32463\u1564 "CANADIAN SYLLABICS THO"
32464\u1565 "CANADIAN SYLLABICS THOO"
32465\u1566 "CANADIAN SYLLABICS THA"
32466\u1567 "CANADIAN SYLLABICS THAA"
32467\u1568 "CANADIAN SYLLABICS THWAA"
32468\u1569 "CANADIAN SYLLABICS WEST-CREE THWAA"
32469\u156A "CANADIAN SYLLABICS TH"
32470\u156B "CANADIAN SYLLABICS TTHE"
32471\u156C "CANADIAN SYLLABICS TTHI"
32472\u156D "CANADIAN SYLLABICS TTHO"
32473\u156E "CANADIAN SYLLABICS TTHA"
32474\u156F "CANADIAN SYLLABICS TTH"
32475\u1570 "CANADIAN SYLLABICS TYE"
32476\u1571 "CANADIAN SYLLABICS TYI"
32477\u1572 "CANADIAN SYLLABICS TYO"
32478\u1573 "CANADIAN SYLLABICS TYA"
32479\u1574 "CANADIAN SYLLABICS NUNAVIK HE"
32480\u1575 "CANADIAN SYLLABICS NUNAVIK HI"
32481\u1576 "CANADIAN SYLLABICS NUNAVIK HII"
32482\u1577 "CANADIAN SYLLABICS NUNAVIK HO"
32483\u1578 "CANADIAN SYLLABICS NUNAVIK HOO"
32484\u1579 "CANADIAN SYLLABICS NUNAVIK HA"
32485\u157A "CANADIAN SYLLABICS NUNAVIK HAA"
32486\u157B "CANADIAN SYLLABICS NUNAVIK H"
32487\u157C "CANADIAN SYLLABICS NUNAVUT H"
32488\u157D "CANADIAN SYLLABICS HK"
32489\u157E "CANADIAN SYLLABICS QAAI"
32490\u157F "CANADIAN SYLLABICS QI"
32491\u1580 "CANADIAN SYLLABICS QII"
32492\u1581 "CANADIAN SYLLABICS QO"
32493\u1582 "CANADIAN SYLLABICS QOO"
32494\u1583 "CANADIAN SYLLABICS QA"
32495\u1584 "CANADIAN SYLLABICS QAA"
32496\u1585 "CANADIAN SYLLABICS Q"
32497\u1586 "CANADIAN SYLLABICS TLHE"
32498\u1587 "CANADIAN SYLLABICS TLHI"
32499\u1588 "CANADIAN SYLLABICS TLHO"
32500\u1589 "CANADIAN SYLLABICS TLHA"
32501\u158A "CANADIAN SYLLABICS WEST-CREE RE"
32502\u158B "CANADIAN SYLLABICS WEST-CREE RI"
32503\u158C "CANADIAN SYLLABICS WEST-CREE RO"
32504\u158D "CANADIAN SYLLABICS WEST-CREE RA"
32505\u158E "CANADIAN SYLLABICS NGAAI"
32506\u158F "CANADIAN SYLLABICS NGI"
32507\u1590 "CANADIAN SYLLABICS NGII"
32508\u1591 "CANADIAN SYLLABICS NGO"
32509\u1592 "CANADIAN SYLLABICS NGOO"
32510\u1593 "CANADIAN SYLLABICS NGA"
32511\u1594 "CANADIAN SYLLABICS NGAA"
32512\u1595 "CANADIAN SYLLABICS NG"
32513\u1596 "CANADIAN SYLLABICS NNG"
32514\u1597 "CANADIAN SYLLABICS SAYISI SHE"
32515\u1598 "CANADIAN SYLLABICS SAYISI SHI"
32516\u1599 "CANADIAN SYLLABICS SAYISI SHO"
32517\u159A "CANADIAN SYLLABICS SAYISI SHA"
32518\u159B "CANADIAN SYLLABICS WOODS-CREE THE"
32519\u159C "CANADIAN SYLLABICS WOODS-CREE THI"
32520\u159D "CANADIAN SYLLABICS WOODS-CREE THO"
32521\u159E "CANADIAN SYLLABICS WOODS-CREE THA"
32522\u159F "CANADIAN SYLLABICS WOODS-CREE TH"
32523\u15A0 "CANADIAN SYLLABICS LHI"
32524\u15A1 "CANADIAN SYLLABICS LHII"
32525\u15A2 "CANADIAN SYLLABICS LHO"
32526\u15A3 "CANADIAN SYLLABICS LHOO"
32527\u15A4 "CANADIAN SYLLABICS LHA"
32528\u15A5 "CANADIAN SYLLABICS LHAA"
32529\u15A6 "CANADIAN SYLLABICS LH"
32530\u15A7 "CANADIAN SYLLABICS TH-CREE THE"
32531\u15A8 "CANADIAN SYLLABICS TH-CREE THI"
32532\u15A9 "CANADIAN SYLLABICS TH-CREE THII"
32533\u15AA "CANADIAN SYLLABICS TH-CREE THO"
32534\u15AB "CANADIAN SYLLABICS TH-CREE THOO"
32535\u15AC "CANADIAN SYLLABICS TH-CREE THA"
32536\u15AD "CANADIAN SYLLABICS TH-CREE THAA"
32537\u15AE "CANADIAN SYLLABICS TH-CREE TH"
32538\u15AF "CANADIAN SYLLABICS AIVILIK B"
32539\u15B0 "CANADIAN SYLLABICS BLACKFOOT E"
32540\u15B1 "CANADIAN SYLLABICS BLACKFOOT I"
32541\u15B2 "CANADIAN SYLLABICS BLACKFOOT O"
32542\u15B3 "CANADIAN SYLLABICS BLACKFOOT A"
32543\u15B4 "CANADIAN SYLLABICS BLACKFOOT WE"
32544\u15B5 "CANADIAN SYLLABICS BLACKFOOT WI"
32545\u15B6 "CANADIAN SYLLABICS BLACKFOOT WO"
32546\u15B7 "CANADIAN SYLLABICS BLACKFOOT WA"
32547\u15B8 "CANADIAN SYLLABICS BLACKFOOT NE"
32548\u15B9 "CANADIAN SYLLABICS BLACKFOOT NI"
32549\u15BA "CANADIAN SYLLABICS BLACKFOOT NO"
32550\u15BB "CANADIAN SYLLABICS BLACKFOOT NA"
32551\u15BC "CANADIAN SYLLABICS BLACKFOOT KE"
32552\u15BD "CANADIAN SYLLABICS BLACKFOOT KI"
32553\u15BE "CANADIAN SYLLABICS BLACKFOOT KO"
32554\u15BF "CANADIAN SYLLABICS BLACKFOOT KA"
32555\u15C0 "CANADIAN SYLLABICS SAYISI HE"
32556\u15C1 "CANADIAN SYLLABICS SAYISI HI"
32557\u15C2 "CANADIAN SYLLABICS SAYISI HO"
32558\u15C3 "CANADIAN SYLLABICS SAYISI HA"
32559\u15C4 "CANADIAN SYLLABICS CARRIER GHU"
32560\u15C5 "CANADIAN SYLLABICS CARRIER GHO"
32561\u15C6 "CANADIAN SYLLABICS CARRIER GHE"
32562\u15C7 "CANADIAN SYLLABICS CARRIER GHEE"
32563\u15C8 "CANADIAN SYLLABICS CARRIER GHI"
32564\u15C9 "CANADIAN SYLLABICS CARRIER GHA"
32565\u15CA "CANADIAN SYLLABICS CARRIER RU"
32566\u15CB "CANADIAN SYLLABICS CARRIER RO"
32567\u15CC "CANADIAN SYLLABICS CARRIER RE"
32568\u15CD "CANADIAN SYLLABICS CARRIER REE"
32569\u15CE "CANADIAN SYLLABICS CARRIER RI"
32570\u15CF "CANADIAN SYLLABICS CARRIER RA"
32571\u15D0 "CANADIAN SYLLABICS CARRIER WU"
32572\u15D1 "CANADIAN SYLLABICS CARRIER WO"
32573\u15D2 "CANADIAN SYLLABICS CARRIER WE"
32574\u15D3 "CANADIAN SYLLABICS CARRIER WEE"
32575\u15D4 "CANADIAN SYLLABICS CARRIER WI"
32576\u15D5 "CANADIAN SYLLABICS CARRIER WA"
32577\u15D6 "CANADIAN SYLLABICS CARRIER HWU"
32578\u15D7 "CANADIAN SYLLABICS CARRIER HWO"
32579\u15D8 "CANADIAN SYLLABICS CARRIER HWE"
32580\u15D9 "CANADIAN SYLLABICS CARRIER HWEE"
32581\u15DA "CANADIAN SYLLABICS CARRIER HWI"
32582\u15DB "CANADIAN SYLLABICS CARRIER HWA"
32583\u15DC "CANADIAN SYLLABICS CARRIER THU"
32584\u15DD "CANADIAN SYLLABICS CARRIER THO"
32585\u15DE "CANADIAN SYLLABICS CARRIER THE"
32586\u15DF "CANADIAN SYLLABICS CARRIER THEE"
32587\u15E0 "CANADIAN SYLLABICS CARRIER THI"
32588\u15E1 "CANADIAN SYLLABICS CARRIER THA"
32589\u15E2 "CANADIAN SYLLABICS CARRIER TTU"
32590\u15E3 "CANADIAN SYLLABICS CARRIER TTO"
32591\u15E4 "CANADIAN SYLLABICS CARRIER TTE"
32592\u15E5 "CANADIAN SYLLABICS CARRIER TTEE"
32593\u15E6 "CANADIAN SYLLABICS CARRIER TTI"
32594\u15E7 "CANADIAN SYLLABICS CARRIER TTA"
32595\u15E8 "CANADIAN SYLLABICS CARRIER PU"
32596\u15E9 "CANADIAN SYLLABICS CARRIER PO"
32597\u15EA "CANADIAN SYLLABICS CARRIER PE"
32598\u15EB "CANADIAN SYLLABICS CARRIER PEE"
32599\u15EC "CANADIAN SYLLABICS CARRIER PI"
32600\u15ED "CANADIAN SYLLABICS CARRIER PA"
32601\u15EE "CANADIAN SYLLABICS CARRIER P"
32602\u15EF "CANADIAN SYLLABICS CARRIER GU"
32603\u15F0 "CANADIAN SYLLABICS CARRIER GO"
32604\u15F1 "CANADIAN SYLLABICS CARRIER GE"
32605\u15F2 "CANADIAN SYLLABICS CARRIER GEE"
32606\u15F3 "CANADIAN SYLLABICS CARRIER GI"
32607\u15F4 "CANADIAN SYLLABICS CARRIER GA"
32608\u15F5 "CANADIAN SYLLABICS CARRIER KHU"
32609\u15F6 "CANADIAN SYLLABICS CARRIER KHO"
32610\u15F7 "CANADIAN SYLLABICS CARRIER KHE"
32611\u15F8 "CANADIAN SYLLABICS CARRIER KHEE"
32612\u15F9 "CANADIAN SYLLABICS CARRIER KHI"
32613\u15FA "CANADIAN SYLLABICS CARRIER KHA"
32614\u15FB "CANADIAN SYLLABICS CARRIER KKU"
32615\u15FC "CANADIAN SYLLABICS CARRIER KKO"
32616\u15FD "CANADIAN SYLLABICS CARRIER KKE"
32617\u15FE "CANADIAN SYLLABICS CARRIER KKEE"
32618\u15FF "CANADIAN SYLLABICS CARRIER KKI"
32619\u1600 "CANADIAN SYLLABICS CARRIER KKA"
32620\u1601 "CANADIAN SYLLABICS CARRIER KK"
32621\u1602 "CANADIAN SYLLABICS CARRIER NU"
32622\u1603 "CANADIAN SYLLABICS CARRIER NO"
32623\u1604 "CANADIAN SYLLABICS CARRIER NE"
32624\u1605 "CANADIAN SYLLABICS CARRIER NEE"
32625\u1606 "CANADIAN SYLLABICS CARRIER NI"
32626\u1607 "CANADIAN SYLLABICS CARRIER NA"
32627\u1608 "CANADIAN SYLLABICS CARRIER MU"
32628\u1609 "CANADIAN SYLLABICS CARRIER MO"
32629\u160A "CANADIAN SYLLABICS CARRIER ME"
32630\u160B "CANADIAN SYLLABICS CARRIER MEE"
32631\u160C "CANADIAN SYLLABICS CARRIER MI"
32632\u160D "CANADIAN SYLLABICS CARRIER MA"
32633\u160E "CANADIAN SYLLABICS CARRIER YU"
32634\u160F "CANADIAN SYLLABICS CARRIER YO"
32635\u1610 "CANADIAN SYLLABICS CARRIER YE"
32636\u1611 "CANADIAN SYLLABICS CARRIER YEE"
32637\u1612 "CANADIAN SYLLABICS CARRIER YI"
32638\u1613 "CANADIAN SYLLABICS CARRIER YA"
32639\u1614 "CANADIAN SYLLABICS CARRIER JU"
32640\u1615 "CANADIAN SYLLABICS SAYISI JU"
32641\u1616 "CANADIAN SYLLABICS CARRIER JO"
32642\u1617 "CANADIAN SYLLABICS CARRIER JE"
32643\u1618 "CANADIAN SYLLABICS CARRIER JEE"
32644\u1619 "CANADIAN SYLLABICS CARRIER JI"
32645\u161A "CANADIAN SYLLABICS SAYISI JI"
32646\u161B "CANADIAN SYLLABICS CARRIER JA"
32647\u161C "CANADIAN SYLLABICS CARRIER JJU"
32648\u161D "CANADIAN SYLLABICS CARRIER JJO"
32649\u161E "CANADIAN SYLLABICS CARRIER JJE"
32650\u161F "CANADIAN SYLLABICS CARRIER JJEE"
32651\u1620 "CANADIAN SYLLABICS CARRIER JJI"
32652\u1621 "CANADIAN SYLLABICS CARRIER JJA"
32653\u1622 "CANADIAN SYLLABICS CARRIER LU"
32654\u1623 "CANADIAN SYLLABICS CARRIER LO"
32655\u1624 "CANADIAN SYLLABICS CARRIER LE"
32656\u1625 "CANADIAN SYLLABICS CARRIER LEE"
32657\u1626 "CANADIAN SYLLABICS CARRIER LI"
32658\u1627 "CANADIAN SYLLABICS CARRIER LA"
32659\u1628 "CANADIAN SYLLABICS CARRIER DLU"
32660\u1629 "CANADIAN SYLLABICS CARRIER DLO"
32661\u162A "CANADIAN SYLLABICS CARRIER DLE"
32662\u162B "CANADIAN SYLLABICS CARRIER DLEE"
32663\u162C "CANADIAN SYLLABICS CARRIER DLI"
32664\u162D "CANADIAN SYLLABICS CARRIER DLA"
32665\u162E "CANADIAN SYLLABICS CARRIER LHU"
32666\u162F "CANADIAN SYLLABICS CARRIER LHO"
32667\u1630 "CANADIAN SYLLABICS CARRIER LHE"
32668\u1631 "CANADIAN SYLLABICS CARRIER LHEE"
32669\u1632 "CANADIAN SYLLABICS CARRIER LHI"
32670\u1633 "CANADIAN SYLLABICS CARRIER LHA"
32671\u1634 "CANADIAN SYLLABICS CARRIER TLHU"
32672\u1635 "CANADIAN SYLLABICS CARRIER TLHO"
32673\u1636 "CANADIAN SYLLABICS CARRIER TLHE"
32674\u1637 "CANADIAN SYLLABICS CARRIER TLHEE"
32675\u1638 "CANADIAN SYLLABICS CARRIER TLHI"
32676\u1639 "CANADIAN SYLLABICS CARRIER TLHA"
32677\u163A "CANADIAN SYLLABICS CARRIER TLU"
32678\u163B "CANADIAN SYLLABICS CARRIER TLO"
32679\u163C "CANADIAN SYLLABICS CARRIER TLE"
32680\u163D "CANADIAN SYLLABICS CARRIER TLEE"
32681\u163E "CANADIAN SYLLABICS CARRIER TLI"
32682\u163F "CANADIAN SYLLABICS CARRIER TLA"
32683\u1640 "CANADIAN SYLLABICS CARRIER ZU"
32684\u1641 "CANADIAN SYLLABICS CARRIER ZO"
32685\u1642 "CANADIAN SYLLABICS CARRIER ZE"
32686\u1643 "CANADIAN SYLLABICS CARRIER ZEE"
32687\u1644 "CANADIAN SYLLABICS CARRIER ZI"
32688\u1645 "CANADIAN SYLLABICS CARRIER ZA"
32689\u1646 "CANADIAN SYLLABICS CARRIER Z"
32690\u1647 "CANADIAN SYLLABICS CARRIER INITIAL Z"
32691\u1648 "CANADIAN SYLLABICS CARRIER DZU"
32692\u1649 "CANADIAN SYLLABICS CARRIER DZO"
32693\u164A "CANADIAN SYLLABICS CARRIER DZE"
32694\u164B "CANADIAN SYLLABICS CARRIER DZEE"
32695\u164C "CANADIAN SYLLABICS CARRIER DZI"
32696\u164D "CANADIAN SYLLABICS CARRIER DZA"
32697\u164E "CANADIAN SYLLABICS CARRIER SU"
32698\u164F "CANADIAN SYLLABICS CARRIER SO"
32699\u1650 "CANADIAN SYLLABICS CARRIER SE"
32700\u1651 "CANADIAN SYLLABICS CARRIER SEE"
32701\u1652 "CANADIAN SYLLABICS CARRIER SI"
32702\u1653 "CANADIAN SYLLABICS CARRIER SA"
32703\u1654 "CANADIAN SYLLABICS CARRIER SHU"
32704\u1655 "CANADIAN SYLLABICS CARRIER SHO"
32705\u1656 "CANADIAN SYLLABICS CARRIER SHE"
32706\u1657 "CANADIAN SYLLABICS CARRIER SHEE"
32707\u1658 "CANADIAN SYLLABICS CARRIER SHI"
32708\u1659 "CANADIAN SYLLABICS CARRIER SHA"
32709\u165A "CANADIAN SYLLABICS CARRIER SH"
32710\u165B "CANADIAN SYLLABICS CARRIER TSU"
32711\u165C "CANADIAN SYLLABICS CARRIER TSO"
32712\u165D "CANADIAN SYLLABICS CARRIER TSE"
32713\u165E "CANADIAN SYLLABICS CARRIER TSEE"
32714\u165F "CANADIAN SYLLABICS CARRIER TSI"
32715\u1660 "CANADIAN SYLLABICS CARRIER TSA"
32716\u1661 "CANADIAN SYLLABICS CARRIER CHU"
32717\u1662 "CANADIAN SYLLABICS CARRIER CHO"
32718\u1663 "CANADIAN SYLLABICS CARRIER CHE"
32719\u1664 "CANADIAN SYLLABICS CARRIER CHEE"
32720\u1665 "CANADIAN SYLLABICS CARRIER CHI"
32721\u1666 "CANADIAN SYLLABICS CARRIER CHA"
32722\u1667 "CANADIAN SYLLABICS CARRIER TTSU"
32723\u1668 "CANADIAN SYLLABICS CARRIER TTSO"
32724\u1669 "CANADIAN SYLLABICS CARRIER TTSE"
32725\u166A "CANADIAN SYLLABICS CARRIER TTSEE"
32726\u166B "CANADIAN SYLLABICS CARRIER TTSI"
32727\u166C "CANADIAN SYLLABICS CARRIER TTSA"
32728\u166D "CANADIAN SYLLABICS CHI SIGN"
32729\u166E "CANADIAN SYLLABICS FULL STOP"
32730\u166F "CANADIAN SYLLABICS QAI"
32731\u1670 "CANADIAN SYLLABICS NGAI"
32732\u1671 "CANADIAN SYLLABICS NNGI"
32733\u1672 "CANADIAN SYLLABICS NNGII"
32734\u1673 "CANADIAN SYLLABICS NNGO"
32735\u1674 "CANADIAN SYLLABICS NNGOO"
32736\u1675 "CANADIAN SYLLABICS NNGA"
32737\u1676 "CANADIAN SYLLABICS NNGAA"
32738\u1680 "OGHAM SPACE MARK"
32739\u1681 "OGHAM LETTER BEITH"
32740\u1682 "OGHAM LETTER LUIS"
32741\u1683 "OGHAM LETTER FEARN"
32742\u1684 "OGHAM LETTER SAIL"
32743\u1685 "OGHAM LETTER NION"
32744\u1686 "OGHAM LETTER UATH"
32745\u1687 "OGHAM LETTER DAIR"
32746\u1688 "OGHAM LETTER TINNE"
32747\u1689 "OGHAM LETTER COLL"
32748\u168A "OGHAM LETTER CEIRT"
32749\u168B "OGHAM LETTER MUIN"
32750\u168C "OGHAM LETTER GORT"
32751\u168D "OGHAM LETTER NGEADAL"
32752\u168E "OGHAM LETTER STRAIF"
32753\u168F "OGHAM LETTER RUIS"
32754\u1690 "OGHAM LETTER AILM"
32755\u1691 "OGHAM LETTER ONN"
32756\u1692 "OGHAM LETTER UR"
32757\u1693 "OGHAM LETTER EADHADH"
32758\u1694 "OGHAM LETTER IODHADH"
32759\u1695 "OGHAM LETTER EABHADH"
32760\u1696 "OGHAM LETTER OR"
32761\u1697 "OGHAM LETTER UILLEANN"
32762\u1698 "OGHAM LETTER IFIN"
32763\u1699 "OGHAM LETTER EAMHANCHOLL"
32764\u169A "OGHAM LETTER PEITH"
32765\u169B "OGHAM FEATHER MARK"
32766\u169C "OGHAM REVERSED FEATHER MARK"
32767\u16A0 "RUNIC LETTER FEHU FEOH FE F"
32768\u16A1 "RUNIC LETTER V"
32769\u16A2 "RUNIC LETTER URUZ UR U"
32770\u16A3 "RUNIC LETTER YR"
32771\u16A4 "RUNIC LETTER Y"
32772\u16A5 "RUNIC LETTER W"
32773\u16A6 "RUNIC LETTER THURISAZ THURS THORN"
32774\u16A7 "RUNIC LETTER ETH"
32775\u16A8 "RUNIC LETTER ANSUZ A"
32776\u16A9 "RUNIC LETTER OS O"
32777\u16AA "RUNIC LETTER AC A"
32778\u16AB "RUNIC LETTER AESC"
32779\u16AC "RUNIC LETTER LONG-BRANCH-OSS O"
32780\u16AD "RUNIC LETTER SHORT-TWIG-OSS O"
32781\u16AE "RUNIC LETTER O"
32782\u16AF "RUNIC LETTER OE"
32783\u16B0 "RUNIC LETTER ON"
32784\u16B1 "RUNIC LETTER RAIDO RAD REID R"
32785\u16B2 "RUNIC LETTER KAUNA"
32786\u16B3 "RUNIC LETTER CEN"
32787\u16B4 "RUNIC LETTER KAUN K"
32788\u16B5 "RUNIC LETTER G"
32789\u16B6 "RUNIC LETTER ENG"
32790\u16B7 "RUNIC LETTER GEBO GYFU G"
32791\u16B8 "RUNIC LETTER GAR"
32792\u16B9 "RUNIC LETTER WUNJO WYNN W"
32793\u16BA "RUNIC LETTER HAGLAZ H"
32794\u16BB "RUNIC LETTER HAEGL H"
32795\u16BC "RUNIC LETTER LONG-BRANCH-HAGALL H"
32796\u16BD "RUNIC LETTER SHORT-TWIG-HAGALL H"
32797\u16BE "RUNIC LETTER NAUDIZ NYD NAUD N"
32798\u16BF "RUNIC LETTER SHORT-TWIG-NAUD N"
32799\u16C0 "RUNIC LETTER DOTTED-N"
32800\u16C1 "RUNIC LETTER ISAZ IS ISS I"
32801\u16C2 "RUNIC LETTER E"
32802\u16C3 "RUNIC LETTER JERAN J"
32803\u16C4 "RUNIC LETTER GER"
32804\u16C5 "RUNIC LETTER LONG-BRANCH-AR AE"
32805\u16C6 "RUNIC LETTER SHORT-TWIG-AR A"
32806\u16C7 "RUNIC LETTER IWAZ EOH"
32807\u16C8 "RUNIC LETTER PERTHO PEORTH P"
32808\u16C9 "RUNIC LETTER ALGIZ EOLHX"
32809\u16CA "RUNIC LETTER SOWILO S"
32810\u16CB "RUNIC LETTER SIGEL LONG-BRANCH-SOL S"
32811\u16CC "RUNIC LETTER SHORT-TWIG-SOL S"
32812\u16CD "RUNIC LETTER C"
32813\u16CE "RUNIC LETTER Z"
32814\u16CF "RUNIC LETTER TIWAZ TIR TYR T"
32815\u16D0 "RUNIC LETTER SHORT-TWIG-TYR T"
32816\u16D1 "RUNIC LETTER D"
32817\u16D2 "RUNIC LETTER BERKANAN BEORC BJARKAN B"
32818\u16D3 "RUNIC LETTER SHORT-TWIG-BJARKAN B"
32819\u16D4 "RUNIC LETTER DOTTED-P"
32820\u16D5 "RUNIC LETTER OPEN-P"
32821\u16D6 "RUNIC LETTER EHWAZ EH E"
32822\u16D7 "RUNIC LETTER MANNAZ MAN M"
32823\u16D8 "RUNIC LETTER LONG-BRANCH-MADR M"
32824\u16D9 "RUNIC LETTER SHORT-TWIG-MADR M"
32825\u16DA "RUNIC LETTER LAUKAZ LAGU LOGR L"
32826\u16DB "RUNIC LETTER DOTTED-L"
32827\u16DC "RUNIC LETTER INGWAZ"
32828\u16DD "RUNIC LETTER ING"
32829\u16DE "RUNIC LETTER DAGAZ DAEG D"
32830\u16DF "RUNIC LETTER OTHALAN ETHEL O"
32831\u16E0 "RUNIC LETTER EAR"
32832\u16E1 "RUNIC LETTER IOR"
32833\u16E2 "RUNIC LETTER CWEORTH"
32834\u16E3 "RUNIC LETTER CALC"
32835\u16E4 "RUNIC LETTER CEALC"
32836\u16E5 "RUNIC LETTER STAN"
32837\u16E6 "RUNIC LETTER LONG-BRANCH-YR"
32838\u16E7 "RUNIC LETTER SHORT-TWIG-YR"
32839\u16E8 "RUNIC LETTER ICELANDIC-YR"
32840\u16E9 "RUNIC LETTER Q"
32841\u16EA "RUNIC LETTER X"
32842\u16EB "RUNIC SINGLE PUNCTUATION"
32843\u16EC "RUNIC MULTIPLE PUNCTUATION"
32844\u16ED "RUNIC CROSS PUNCTUATION"
32845\u16EE "RUNIC ARLAUG SYMBOL"
32846\u16EF "RUNIC TVIMADUR SYMBOL"
32847\u16F0 "RUNIC BELGTHOR SYMBOL"
32848\u1700 "TAGALOG LETTER A"
32849\u1701 "TAGALOG LETTER I"
32850\u1702 "TAGALOG LETTER U"
32851\u1703 "TAGALOG LETTER KA"
32852\u1704 "TAGALOG LETTER GA"
32853\u1705 "TAGALOG LETTER NGA"
32854\u1706 "TAGALOG LETTER TA"
32855\u1707 "TAGALOG LETTER DA"
32856\u1708 "TAGALOG LETTER NA"
32857\u1709 "TAGALOG LETTER PA"
32858\u170A "TAGALOG LETTER BA"
32859\u170B "TAGALOG LETTER MA"
32860\u170C "TAGALOG LETTER YA"
32861\u170E "TAGALOG LETTER LA"
32862\u170F "TAGALOG LETTER WA"
32863\u1710 "TAGALOG LETTER SA"
32864\u1711 "TAGALOG LETTER HA"
32865\u1712 "TAGALOG VOWEL SIGN I"
32866\u1713 "TAGALOG VOWEL SIGN U"
32867\u1714 "TAGALOG SIGN VIRAMA"
32868\u1720 "HANUNOO LETTER A"
32869\u1721 "HANUNOO LETTER I"
32870\u1722 "HANUNOO LETTER U"
32871\u1723 "HANUNOO LETTER KA"
32872\u1724 "HANUNOO LETTER GA"
32873\u1725 "HANUNOO LETTER NGA"
32874\u1726 "HANUNOO LETTER TA"
32875\u1727 "HANUNOO LETTER DA"
32876\u1728 "HANUNOO LETTER NA"
32877\u1729 "HANUNOO LETTER PA"
32878\u172A "HANUNOO LETTER BA"
32879\u172B "HANUNOO LETTER MA"
32880\u172C "HANUNOO LETTER YA"
32881\u172D "HANUNOO LETTER RA"
32882\u172E "HANUNOO LETTER LA"
32883\u172F "HANUNOO LETTER WA"
32884\u1730 "HANUNOO LETTER SA"
32885\u1731 "HANUNOO LETTER HA"
32886\u1732 "HANUNOO VOWEL SIGN I"
32887\u1733 "HANUNOO VOWEL SIGN U"
32888\u1734 "HANUNOO SIGN PAMUDPOD"
32889\u1735 "PHILIPPINE SINGLE PUNCTUATION"
32890\u1736 "PHILIPPINE DOUBLE PUNCTUATION"
32891\u1740 "BUHID LETTER A"
32892\u1741 "BUHID LETTER I"
32893\u1742 "BUHID LETTER U"
32894\u1743 "BUHID LETTER KA"
32895\u1744 "BUHID LETTER GA"
32896\u1745 "BUHID LETTER NGA"
32897\u1746 "BUHID LETTER TA"
32898\u1747 "BUHID LETTER DA"
32899\u1748 "BUHID LETTER NA"
32900\u1749 "BUHID LETTER PA"
32901\u174A "BUHID LETTER BA"
32902\u174B "BUHID LETTER MA"
32903\u174C "BUHID LETTER YA"
32904\u174D "BUHID LETTER RA"
32905\u174E "BUHID LETTER LA"
32906\u174F "BUHID LETTER WA"
32907\u1750 "BUHID LETTER SA"
32908\u1751 "BUHID LETTER HA"
32909\u1752 "BUHID VOWEL SIGN I"
32910\u1753 "BUHID VOWEL SIGN U"
32911\u1760 "TAGBANWA LETTER A"
32912\u1761 "TAGBANWA LETTER I"
32913\u1762 "TAGBANWA LETTER U"
32914\u1763 "TAGBANWA LETTER KA"
32915\u1764 "TAGBANWA LETTER GA"
32916\u1765 "TAGBANWA LETTER NGA"
32917\u1766 "TAGBANWA LETTER TA"
32918\u1767 "TAGBANWA LETTER DA"
32919\u1768 "TAGBANWA LETTER NA"
32920\u1769 "TAGBANWA LETTER PA"
32921\u176A "TAGBANWA LETTER BA"
32922\u176B "TAGBANWA LETTER MA"
32923\u176C "TAGBANWA LETTER YA"
32924\u176E "TAGBANWA LETTER LA"
32925\u176F "TAGBANWA LETTER WA"
32926\u1770 "TAGBANWA LETTER SA"
32927\u1772 "TAGBANWA VOWEL SIGN I"
32928\u1773 "TAGBANWA VOWEL SIGN U"
32929\u1780 "KHMER LETTER KA"
32930\u1781 "KHMER LETTER KHA"
32931\u1782 "KHMER LETTER KO"
32932\u1783 "KHMER LETTER KHO"
32933\u1784 "KHMER LETTER NGO"
32934\u1785 "KHMER LETTER CA"
32935\u1786 "KHMER LETTER CHA"
32936\u1787 "KHMER LETTER CO"
32937\u1788 "KHMER LETTER CHO"
32938\u1789 "KHMER LETTER NYO"
32939\u178A "KHMER LETTER DA"
32940\u178B "KHMER LETTER TTHA"
32941\u178C "KHMER LETTER DO"
32942\u178D "KHMER LETTER TTHO"
32943\u178E "KHMER LETTER NNO"
32944\u178F "KHMER LETTER TA"
32945\u1790 "KHMER LETTER THA"
32946\u1791 "KHMER LETTER TO"
32947\u1792 "KHMER LETTER THO"
32948\u1793 "KHMER LETTER NO"
32949\u1794 "KHMER LETTER BA"
32950\u1795 "KHMER LETTER PHA"
32951\u1796 "KHMER LETTER PO"
32952\u1797 "KHMER LETTER PHO"
32953\u1798 "KHMER LETTER MO"
32954\u1799 "KHMER LETTER YO"
32955\u179A "KHMER LETTER RO"
32956\u179B "KHMER LETTER LO"
32957\u179C "KHMER LETTER VO"
32958\u179D "KHMER LETTER SHA"
32959\u179E "KHMER LETTER SSO"
32960\u179F "KHMER LETTER SA"
32961\u17A0 "KHMER LETTER HA"
32962\u17A1 "KHMER LETTER LA"
32963\u17A2 "KHMER LETTER QA"
32964\u17A3 "KHMER INDEPENDENT VOWEL QAQ"
32965\u17A4 "KHMER INDEPENDENT VOWEL QAA"
32966\u17A5 "KHMER INDEPENDENT VOWEL QI"
32967\u17A6 "KHMER INDEPENDENT VOWEL QII"
32968\u17A7 "KHMER INDEPENDENT VOWEL QU"
32969\u17A8 "KHMER INDEPENDENT VOWEL QUK"
32970\u17A9 "KHMER INDEPENDENT VOWEL QUU"
32971\u17AA "KHMER INDEPENDENT VOWEL QUUV"
32972\u17AB "KHMER INDEPENDENT VOWEL RY"
32973\u17AC "KHMER INDEPENDENT VOWEL RYY"
32974\u17AD "KHMER INDEPENDENT VOWEL LY"
32975\u17AE "KHMER INDEPENDENT VOWEL LYY"
32976\u17AF "KHMER INDEPENDENT VOWEL QE"
32977\u17B0 "KHMER INDEPENDENT VOWEL QAI"
32978\u17B1 "KHMER INDEPENDENT VOWEL QOO TYPE ONE"
32979\u17B2 "KHMER INDEPENDENT VOWEL QOO TYPE TWO"
32980\u17B3 "KHMER INDEPENDENT VOWEL QAU"
32981\u17B4 "KHMER VOWEL INHERENT AQ"
32982\u17B5 "KHMER VOWEL INHERENT AA"
32983\u17B6 "KHMER VOWEL SIGN AA"
32984\u17B7 "KHMER VOWEL SIGN I"
32985\u17B8 "KHMER VOWEL SIGN II"
32986\u17B9 "KHMER VOWEL SIGN Y"
32987\u17BA "KHMER VOWEL SIGN YY"
32988\u17BB "KHMER VOWEL SIGN U"
32989\u17BC "KHMER VOWEL SIGN UU"
32990\u17BD "KHMER VOWEL SIGN UA"
32991\u17BE "KHMER VOWEL SIGN OE"
32992\u17BF "KHMER VOWEL SIGN YA"
32993\u17C0 "KHMER VOWEL SIGN IE"
32994\u17C1 "KHMER VOWEL SIGN E"
32995\u17C2 "KHMER VOWEL SIGN AE"
32996\u17C3 "KHMER VOWEL SIGN AI"
32997\u17C4 "KHMER VOWEL SIGN OO"
32998\u17C5 "KHMER VOWEL SIGN AU"
32999\u17C6 "KHMER SIGN NIKAHIT"
33000\u17C7 "KHMER SIGN REAHMUK"
33001\u17C8 "KHMER SIGN YUUKALEAPINTU"
33002\u17C9 "KHMER SIGN MUUSIKATOAN"
33003\u17CA "KHMER SIGN TRIISAP"
33004\u17CB "KHMER SIGN BANTOC"
33005\u17CC "KHMER SIGN ROBAT"
33006\u17CD "KHMER SIGN TOANDAKHIAT"
33007\u17CE "KHMER SIGN KAKABAT"
33008\u17CF "KHMER SIGN AHSDA"
33009\u17D0 "KHMER SIGN SAMYOK SANNYA"
33010\u17D1 "KHMER SIGN VIRIAM"
33011\u17D2 "KHMER SIGN COENG"
33012\u17D3 "KHMER SIGN BATHAMASAT"
33013\u17D4 "KHMER SIGN KHAN"
33014\u17D5 "KHMER SIGN BARIYOOSAN"
33015\u17D6 "KHMER SIGN CAMNUC PII KUUH"
33016\u17D7 "KHMER SIGN LEK TOO"
33017\u17D8 "KHMER SIGN BEYYAL"
33018\u17D9 "KHMER SIGN PHNAEK MUAN"
33019\u17DA "KHMER SIGN KOOMUUT"
33020\u17DB "KHMER CURRENCY SYMBOL RIEL"
33021\u17DC "KHMER SIGN AVAKRAHASANYA"
33022\u17DD "KHMER SIGN ATTHACAN"
33023\u17E0 "KHMER DIGIT ZERO"
33024\u17E1 "KHMER DIGIT ONE"
33025\u17E2 "KHMER DIGIT TWO"
33026\u17E3 "KHMER DIGIT THREE"
33027\u17E4 "KHMER DIGIT FOUR"
33028\u17E5 "KHMER DIGIT FIVE"
33029\u17E6 "KHMER DIGIT SIX"
33030\u17E7 "KHMER DIGIT SEVEN"
33031\u17E8 "KHMER DIGIT EIGHT"
33032\u17E9 "KHMER DIGIT NINE"
33033\u17F0 "KHMER SYMBOL LEK ATTAK SON"
33034\u17F1 "KHMER SYMBOL LEK ATTAK MUOY"
33035\u17F2 "KHMER SYMBOL LEK ATTAK PII"
33036\u17F3 "KHMER SYMBOL LEK ATTAK BEI"
33037\u17F4 "KHMER SYMBOL LEK ATTAK BUON"
33038\u17F5 "KHMER SYMBOL LEK ATTAK PRAM"
33039\u17F6 "KHMER SYMBOL LEK ATTAK PRAM-MUOY"
33040\u17F7 "KHMER SYMBOL LEK ATTAK PRAM-PII"
33041\u17F8 "KHMER SYMBOL LEK ATTAK PRAM-BEI"
33042\u17F9 "KHMER SYMBOL LEK ATTAK PRAM-BUON"
33043\u1800 "MONGOLIAN BIRGA"
33044\u1801 "MONGOLIAN ELLIPSIS"
33045\u1802 "MONGOLIAN COMMA"
33046\u1803 "MONGOLIAN FULL STOP"
33047\u1804 "MONGOLIAN COLON"
33048\u1805 "MONGOLIAN FOUR DOTS"
33049\u1806 "MONGOLIAN TODO SOFT HYPHEN"
33050\u1807 "MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER"
33051\u1808 "MONGOLIAN MANCHU COMMA"
33052\u1809 "MONGOLIAN MANCHU FULL STOP"
33053\u180A "MONGOLIAN NIRUGU"
33054\u180B "MONGOLIAN FREE VARIATION SELECTOR ONE"
33055\u180C "MONGOLIAN FREE VARIATION SELECTOR TWO"
33056\u180D "MONGOLIAN FREE VARIATION SELECTOR THREE"
33057\u180E "MONGOLIAN VOWEL SEPARATOR"
33058\u1810 "MONGOLIAN DIGIT ZERO"
33059\u1811 "MONGOLIAN DIGIT ONE"
33060\u1812 "MONGOLIAN DIGIT TWO"
33061\u1813 "MONGOLIAN DIGIT THREE"
33062\u1814 "MONGOLIAN DIGIT FOUR"
33063\u1815 "MONGOLIAN DIGIT FIVE"
33064\u1816 "MONGOLIAN DIGIT SIX"
33065\u1817 "MONGOLIAN DIGIT SEVEN"
33066\u1818 "MONGOLIAN DIGIT EIGHT"
33067\u1819 "MONGOLIAN DIGIT NINE"
33068\u1820 "MONGOLIAN LETTER A"
33069\u1821 "MONGOLIAN LETTER E"
33070\u1822 "MONGOLIAN LETTER I"
33071\u1823 "MONGOLIAN LETTER O"
33072\u1824 "MONGOLIAN LETTER U"
33073\u1825 "MONGOLIAN LETTER OE"
33074\u1826 "MONGOLIAN LETTER UE"
33075\u1827 "MONGOLIAN LETTER EE"
33076\u1828 "MONGOLIAN LETTER NA"
33077\u1829 "MONGOLIAN LETTER ANG"
33078\u182A "MONGOLIAN LETTER BA"
33079\u182B "MONGOLIAN LETTER PA"
33080\u182C "MONGOLIAN LETTER QA"
33081\u182D "MONGOLIAN LETTER GA"
33082\u182E "MONGOLIAN LETTER MA"
33083\u182F "MONGOLIAN LETTER LA"
33084\u1830 "MONGOLIAN LETTER SA"
33085\u1831 "MONGOLIAN LETTER SHA"
33086\u1832 "MONGOLIAN LETTER TA"
33087\u1833 "MONGOLIAN LETTER DA"
33088\u1834 "MONGOLIAN LETTER CHA"
33089\u1835 "MONGOLIAN LETTER JA"
33090\u1836 "MONGOLIAN LETTER YA"
33091\u1837 "MONGOLIAN LETTER RA"
33092\u1838 "MONGOLIAN LETTER WA"
33093\u1839 "MONGOLIAN LETTER FA"
33094\u183A "MONGOLIAN LETTER KA"
33095\u183B "MONGOLIAN LETTER KHA"
33096\u183C "MONGOLIAN LETTER TSA"
33097\u183D "MONGOLIAN LETTER ZA"
33098\u183E "MONGOLIAN LETTER HAA"
33099\u183F "MONGOLIAN LETTER ZRA"
33100\u1840 "MONGOLIAN LETTER LHA"
33101\u1841 "MONGOLIAN LETTER ZHI"
33102\u1842 "MONGOLIAN LETTER CHI"
33103\u1843 "MONGOLIAN LETTER TODO LONG VOWEL SIGN"
33104\u1844 "MONGOLIAN LETTER TODO E"
33105\u1845 "MONGOLIAN LETTER TODO I"
33106\u1846 "MONGOLIAN LETTER TODO O"
33107\u1847 "MONGOLIAN LETTER TODO U"
33108\u1848 "MONGOLIAN LETTER TODO OE"
33109\u1849 "MONGOLIAN LETTER TODO UE"
33110\u184A "MONGOLIAN LETTER TODO ANG"
33111\u184B "MONGOLIAN LETTER TODO BA"
33112\u184C "MONGOLIAN LETTER TODO PA"
33113\u184D "MONGOLIAN LETTER TODO QA"
33114\u184E "MONGOLIAN LETTER TODO GA"
33115\u184F "MONGOLIAN LETTER TODO MA"
33116\u1850 "MONGOLIAN LETTER TODO TA"
33117\u1851 "MONGOLIAN LETTER TODO DA"
33118\u1852 "MONGOLIAN LETTER TODO CHA"
33119\u1853 "MONGOLIAN LETTER TODO JA"
33120\u1854 "MONGOLIAN LETTER TODO TSA"
33121\u1855 "MONGOLIAN LETTER TODO YA"
33122\u1856 "MONGOLIAN LETTER TODO WA"
33123\u1857 "MONGOLIAN LETTER TODO KA"
33124\u1858 "MONGOLIAN LETTER TODO GAA"
33125\u1859 "MONGOLIAN LETTER TODO HAA"
33126\u185A "MONGOLIAN LETTER TODO JIA"
33127\u185B "MONGOLIAN LETTER TODO NIA"
33128\u185C "MONGOLIAN LETTER TODO DZA"
33129\u185D "MONGOLIAN LETTER SIBE E"
33130\u185E "MONGOLIAN LETTER SIBE I"
33131\u185F "MONGOLIAN LETTER SIBE IY"
33132\u1860 "MONGOLIAN LETTER SIBE UE"
33133\u1861 "MONGOLIAN LETTER SIBE U"
33134\u1862 "MONGOLIAN LETTER SIBE ANG"
33135\u1863 "MONGOLIAN LETTER SIBE KA"
33136\u1864 "MONGOLIAN LETTER SIBE GA"
33137\u1865 "MONGOLIAN LETTER SIBE HA"
33138\u1866 "MONGOLIAN LETTER SIBE PA"
33139\u1867 "MONGOLIAN LETTER SIBE SHA"
33140\u1868 "MONGOLIAN LETTER SIBE TA"
33141\u1869 "MONGOLIAN LETTER SIBE DA"
33142\u186A "MONGOLIAN LETTER SIBE JA"
33143\u186B "MONGOLIAN LETTER SIBE FA"
33144\u186C "MONGOLIAN LETTER SIBE GAA"
33145\u186D "MONGOLIAN LETTER SIBE HAA"
33146\u186E "MONGOLIAN LETTER SIBE TSA"
33147\u186F "MONGOLIAN LETTER SIBE ZA"
33148\u1870 "MONGOLIAN LETTER SIBE RAA"
33149\u1871 "MONGOLIAN LETTER SIBE CHA"
33150\u1872 "MONGOLIAN LETTER SIBE ZHA"
33151\u1873 "MONGOLIAN LETTER MANCHU I"
33152\u1874 "MONGOLIAN LETTER MANCHU KA"
33153\u1875 "MONGOLIAN LETTER MANCHU RA"
33154\u1876 "MONGOLIAN LETTER MANCHU FA"
33155\u1877 "MONGOLIAN LETTER MANCHU ZHA"
33156\u1880 "MONGOLIAN LETTER ALI GALI ANUSVARA ONE"
33157\u1881 "MONGOLIAN LETTER ALI GALI VISARGA ONE"
33158\u1882 "MONGOLIAN LETTER ALI GALI DAMARU"
33159\u1883 "MONGOLIAN LETTER ALI GALI UBADAMA"
33160\u1884 "MONGOLIAN LETTER ALI GALI INVERTED UBADAMA"
33161\u1885 "MONGOLIAN LETTER ALI GALI BALUDA"
33162\u1886 "MONGOLIAN LETTER ALI GALI THREE BALUDA"
33163\u1887 "MONGOLIAN LETTER ALI GALI A"
33164\u1888 "MONGOLIAN LETTER ALI GALI I"
33165\u1889 "MONGOLIAN LETTER ALI GALI KA"
33166\u188A "MONGOLIAN LETTER ALI GALI NGA"
33167\u188B "MONGOLIAN LETTER ALI GALI CA"
33168\u188C "MONGOLIAN LETTER ALI GALI TTA"
33169\u188D "MONGOLIAN LETTER ALI GALI TTHA"
33170\u188E "MONGOLIAN LETTER ALI GALI DDA"
33171\u188F "MONGOLIAN LETTER ALI GALI NNA"
33172\u1890 "MONGOLIAN LETTER ALI GALI TA"
33173\u1891 "MONGOLIAN LETTER ALI GALI DA"
33174\u1892 "MONGOLIAN LETTER ALI GALI PA"
33175\u1893 "MONGOLIAN LETTER ALI GALI PHA"
33176\u1894 "MONGOLIAN LETTER ALI GALI SSA"
33177\u1895 "MONGOLIAN LETTER ALI GALI ZHA"
33178\u1896 "MONGOLIAN LETTER ALI GALI ZA"
33179\u1897 "MONGOLIAN LETTER ALI GALI AH"
33180\u1898 "MONGOLIAN LETTER TODO ALI GALI TA"
33181\u1899 "MONGOLIAN LETTER TODO ALI GALI ZHA"
33182\u189A "MONGOLIAN LETTER MANCHU ALI GALI GHA"
33183\u189B "MONGOLIAN LETTER MANCHU ALI GALI NGA"
33184\u189C "MONGOLIAN LETTER MANCHU ALI GALI CA"
33185\u189D "MONGOLIAN LETTER MANCHU ALI GALI JHA"
33186\u189E "MONGOLIAN LETTER MANCHU ALI GALI TTA"
33187\u189F "MONGOLIAN LETTER MANCHU ALI GALI DDHA"
33188\u18A0 "MONGOLIAN LETTER MANCHU ALI GALI TA"
33189\u18A1 "MONGOLIAN LETTER MANCHU ALI GALI DHA"
33190\u18A2 "MONGOLIAN LETTER MANCHU ALI GALI SSA"
33191\u18A3 "MONGOLIAN LETTER MANCHU ALI GALI CYA"
33192\u18A4 "MONGOLIAN LETTER MANCHU ALI GALI ZHA"
33193\u18A5 "MONGOLIAN LETTER MANCHU ALI GALI ZA"
33194\u18A6 "MONGOLIAN LETTER ALI GALI HALF U"
33195\u18A7 "MONGOLIAN LETTER ALI GALI HALF YA"
33196\u18A8 "MONGOLIAN LETTER MANCHU ALI GALI BHA"
33197\u18A9 "MONGOLIAN LETTER ALI GALI DAGALGA"
33198\u18AA "MONGOLIAN LETTER MANCHU ALI GALI LHA"
33199\u1900 "LIMBU VOWEL-CARRIER LETTER"
33200\u1901 "LIMBU LETTER KA"
33201\u1902 "LIMBU LETTER KHA"
33202\u1903 "LIMBU LETTER GA"
33203\u1904 "LIMBU LETTER GHA"
33204\u1905 "LIMBU LETTER NGA"
33205\u1906 "LIMBU LETTER CA"
33206\u1907 "LIMBU LETTER CHA"
33207\u1908 "LIMBU LETTER JA"
33208\u1909 "LIMBU LETTER JHA"
33209\u190A "LIMBU LETTER YAN"
33210\u190B "LIMBU LETTER TA"
33211\u190C "LIMBU LETTER THA"
33212\u190D "LIMBU LETTER DA"
33213\u190E "LIMBU LETTER DHA"
33214\u190F "LIMBU LETTER NA"
33215\u1910 "LIMBU LETTER PA"
33216\u1911 "LIMBU LETTER PHA"
33217\u1912 "LIMBU LETTER BA"
33218\u1913 "LIMBU LETTER BHA"
33219\u1914 "LIMBU LETTER MA"
33220\u1915 "LIMBU LETTER YA"
33221\u1916 "LIMBU LETTER RA"
33222\u1917 "LIMBU LETTER LA"
33223\u1918 "LIMBU LETTER WA"
33224\u1919 "LIMBU LETTER SHA"
33225\u191A "LIMBU LETTER SSA"
33226\u191B "LIMBU LETTER SA"
33227\u191C "LIMBU LETTER HA"
33228\u1920 "LIMBU VOWEL SIGN A"
33229\u1921 "LIMBU VOWEL SIGN I"
33230\u1922 "LIMBU VOWEL SIGN U"
33231\u1923 "LIMBU VOWEL SIGN EE"
33232\u1924 "LIMBU VOWEL SIGN AI"
33233\u1925 "LIMBU VOWEL SIGN OO"
33234\u1926 "LIMBU VOWEL SIGN AU"
33235\u1927 "LIMBU VOWEL SIGN E"
33236\u1928 "LIMBU VOWEL SIGN O"
33237\u1929 "LIMBU SUBJOINED LETTER YA"
33238\u192A "LIMBU SUBJOINED LETTER RA"
33239\u192B "LIMBU SUBJOINED LETTER WA"
33240\u1930 "LIMBU SMALL LETTER KA"
33241\u1931 "LIMBU SMALL LETTER NGA"
33242\u1932 "LIMBU SMALL LETTER ANUSVARA"
33243\u1933 "LIMBU SMALL LETTER TA"
33244\u1934 "LIMBU SMALL LETTER NA"
33245\u1935 "LIMBU SMALL LETTER PA"
33246\u1936 "LIMBU SMALL LETTER MA"
33247\u1937 "LIMBU SMALL LETTER RA"
33248\u1938 "LIMBU SMALL LETTER LA"
33249\u1939 "LIMBU SIGN MUKPHRENG"
33250\u193A "LIMBU SIGN KEMPHRENG"
33251\u193B "LIMBU SIGN SA-I"
33252\u1940 "LIMBU SIGN LOO"
33253\u1944 "LIMBU EXCLAMATION MARK"
33254\u1945 "LIMBU QUESTION MARK"
33255\u1946 "LIMBU DIGIT ZERO"
33256\u1947 "LIMBU DIGIT ONE"
33257\u1948 "LIMBU DIGIT TWO"
33258\u1949 "LIMBU DIGIT THREE"
33259\u194A "LIMBU DIGIT FOUR"
33260\u194B "LIMBU DIGIT FIVE"
33261\u194C "LIMBU DIGIT SIX"
33262\u194D "LIMBU DIGIT SEVEN"
33263\u194E "LIMBU DIGIT EIGHT"
33264\u194F "LIMBU DIGIT NINE"
33265\u1950 "TAI LE LETTER KA"
33266\u1951 "TAI LE LETTER XA"
33267\u1952 "TAI LE LETTER NGA"
33268\u1953 "TAI LE LETTER TSA"
33269\u1954 "TAI LE LETTER SA"
33270\u1955 "TAI LE LETTER YA"
33271\u1956 "TAI LE LETTER TA"
33272\u1957 "TAI LE LETTER THA"
33273\u1958 "TAI LE LETTER LA"
33274\u1959 "TAI LE LETTER PA"
33275\u195A "TAI LE LETTER PHA"
33276\u195B "TAI LE LETTER MA"
33277\u195C "TAI LE LETTER FA"
33278\u195D "TAI LE LETTER VA"
33279\u195E "TAI LE LETTER HA"
33280\u195F "TAI LE LETTER QA"
33281\u1960 "TAI LE LETTER KHA"
33282\u1961 "TAI LE LETTER TSHA"
33283\u1962 "TAI LE LETTER NA"
33284\u1963 "TAI LE LETTER A"
33285\u1964 "TAI LE LETTER I"
33286\u1965 "TAI LE LETTER EE"
33287\u1966 "TAI LE LETTER EH"
33288\u1967 "TAI LE LETTER U"
33289\u1968 "TAI LE LETTER OO"
33290\u1969 "TAI LE LETTER O"
33291\u196A "TAI LE LETTER UE"
33292\u196B "TAI LE LETTER E"
33293\u196C "TAI LE LETTER AUE"
33294\u196D "TAI LE LETTER AI"
33295\u1970 "TAI LE LETTER TONE-2"
33296\u1971 "TAI LE LETTER TONE-3"
33297\u1972 "TAI LE LETTER TONE-4"
33298\u1973 "TAI LE LETTER TONE-5"
33299\u1974 "TAI LE LETTER TONE-6"
33300\u1980 "NEW TAI LUE LETTER HIGH QA"
33301\u1981 "NEW TAI LUE LETTER LOW QA"
33302\u1982 "NEW TAI LUE LETTER HIGH KA"
33303\u1983 "NEW TAI LUE LETTER HIGH XA"
33304\u1984 "NEW TAI LUE LETTER HIGH NGA"
33305\u1985 "NEW TAI LUE LETTER LOW KA"
33306\u1986 "NEW TAI LUE LETTER LOW XA"
33307\u1987 "NEW TAI LUE LETTER LOW NGA"
33308\u1988 "NEW TAI LUE LETTER HIGH TSA"
33309\u1989 "NEW TAI LUE LETTER HIGH SA"
33310\u198A "NEW TAI LUE LETTER HIGH YA"
33311\u198B "NEW TAI LUE LETTER LOW TSA"
33312\u198C "NEW TAI LUE LETTER LOW SA"
33313\u198D "NEW TAI LUE LETTER LOW YA"
33314\u198E "NEW TAI LUE LETTER HIGH TA"
33315\u198F "NEW TAI LUE LETTER HIGH THA"
33316\u1990 "NEW TAI LUE LETTER HIGH NA"
33317\u1991 "NEW TAI LUE LETTER LOW TA"
33318\u1992 "NEW TAI LUE LETTER LOW THA"
33319\u1993 "NEW TAI LUE LETTER LOW NA"
33320\u1994 "NEW TAI LUE LETTER HIGH PA"
33321\u1995 "NEW TAI LUE LETTER HIGH PHA"
33322\u1996 "NEW TAI LUE LETTER HIGH MA"
33323\u1997 "NEW TAI LUE LETTER LOW PA"
33324\u1998 "NEW TAI LUE LETTER LOW PHA"
33325\u1999 "NEW TAI LUE LETTER LOW MA"
33326\u199A "NEW TAI LUE LETTER HIGH FA"
33327\u199B "NEW TAI LUE LETTER HIGH VA"
33328\u199C "NEW TAI LUE LETTER HIGH LA"
33329\u199D "NEW TAI LUE LETTER LOW FA"
33330\u199E "NEW TAI LUE LETTER LOW VA"
33331\u199F "NEW TAI LUE LETTER LOW LA"
33332\u19A0 "NEW TAI LUE LETTER HIGH HA"
33333\u19A1 "NEW TAI LUE LETTER HIGH DA"
33334\u19A2 "NEW TAI LUE LETTER HIGH BA"
33335\u19A3 "NEW TAI LUE LETTER LOW HA"
33336\u19A4 "NEW TAI LUE LETTER LOW DA"
33337\u19A5 "NEW TAI LUE LETTER LOW BA"
33338\u19A6 "NEW TAI LUE LETTER HIGH KVA"
33339\u19A7 "NEW TAI LUE LETTER HIGH XVA"
33340\u19A8 "NEW TAI LUE LETTER LOW KVA"
33341\u19A9 "NEW TAI LUE LETTER LOW XVA"
33342\u19B0 "NEW TAI LUE VOWEL SIGN VOWEL SHORTENER"
33343\u19B1 "NEW TAI LUE VOWEL SIGN AA"
33344\u19B2 "NEW TAI LUE VOWEL SIGN II"
33345\u19B3 "NEW TAI LUE VOWEL SIGN U"
33346\u19B4 "NEW TAI LUE VOWEL SIGN UU"
33347\u19B5 "NEW TAI LUE VOWEL SIGN E"
33348\u19B6 "NEW TAI LUE VOWEL SIGN AE"
33349\u19B7 "NEW TAI LUE VOWEL SIGN O"
33350\u19B8 "NEW TAI LUE VOWEL SIGN OA"
33351\u19B9 "NEW TAI LUE VOWEL SIGN UE"
33352\u19BA "NEW TAI LUE VOWEL SIGN AY"
33353\u19BB "NEW TAI LUE VOWEL SIGN AAY"
33354\u19BC "NEW TAI LUE VOWEL SIGN UY"
33355\u19BD "NEW TAI LUE VOWEL SIGN OY"
33356\u19BE "NEW TAI LUE VOWEL SIGN OAY"
33357\u19BF "NEW TAI LUE VOWEL SIGN UEY"
33358\u19C0 "NEW TAI LUE VOWEL SIGN IY"
33359\u19C1 "NEW TAI LUE LETTER FINAL V"
33360\u19C2 "NEW TAI LUE LETTER FINAL NG"
33361\u19C3 "NEW TAI LUE LETTER FINAL N"
33362\u19C4 "NEW TAI LUE LETTER FINAL M"
33363\u19C5 "NEW TAI LUE LETTER FINAL K"
33364\u19C6 "NEW TAI LUE LETTER FINAL D"
33365\u19C7 "NEW TAI LUE LETTER FINAL B"
33366\u19C8 "NEW TAI LUE TONE MARK-1"
33367\u19C9 "NEW TAI LUE TONE MARK-2"
33368\u19D0 "NEW TAI LUE DIGIT ZERO"
33369\u19D1 "NEW TAI LUE DIGIT ONE"
33370\u19D2 "NEW TAI LUE DIGIT TWO"
33371\u19D3 "NEW TAI LUE DIGIT THREE"
33372\u19D4 "NEW TAI LUE DIGIT FOUR"
33373\u19D5 "NEW TAI LUE DIGIT FIVE"
33374\u19D6 "NEW TAI LUE DIGIT SIX"
33375\u19D7 "NEW TAI LUE DIGIT SEVEN"
33376\u19D8 "NEW TAI LUE DIGIT EIGHT"
33377\u19D9 "NEW TAI LUE DIGIT NINE"
33378\u19DE "NEW TAI LUE SIGN LAE"
33379\u19DF "NEW TAI LUE SIGN LAEV"
33380\u19E0 "KHMER SYMBOL PATHAMASAT"
33381\u19E1 "KHMER SYMBOL MUOY KOET"
33382\u19E2 "KHMER SYMBOL PII KOET"
33383\u19E3 "KHMER SYMBOL BEI KOET"
33384\u19E4 "KHMER SYMBOL BUON KOET"
33385\u19E5 "KHMER SYMBOL PRAM KOET"
33386\u19E6 "KHMER SYMBOL PRAM-MUOY KOET"
33387\u19E7 "KHMER SYMBOL PRAM-PII KOET"
33388\u19E8 "KHMER SYMBOL PRAM-BEI KOET"
33389\u19E9 "KHMER SYMBOL PRAM-BUON KOET"
33390\u19EA "KHMER SYMBOL DAP KOET"
33391\u19EB "KHMER SYMBOL DAP-MUOY KOET"
33392\u19EC "KHMER SYMBOL DAP-PII KOET"
33393\u19ED "KHMER SYMBOL DAP-BEI KOET"
33394\u19EE "KHMER SYMBOL DAP-BUON KOET"
33395\u19EF "KHMER SYMBOL DAP-PRAM KOET"
33396\u19F0 "KHMER SYMBOL TUTEYASAT"
33397\u19F1 "KHMER SYMBOL MUOY ROC"
33398\u19F2 "KHMER SYMBOL PII ROC"
33399\u19F3 "KHMER SYMBOL BEI ROC"
33400\u19F4 "KHMER SYMBOL BUON ROC"
33401\u19F5 "KHMER SYMBOL PRAM ROC"
33402\u19F6 "KHMER SYMBOL PRAM-MUOY ROC"
33403\u19F7 "KHMER SYMBOL PRAM-PII ROC"
33404\u19F8 "KHMER SYMBOL PRAM-BEI ROC"
33405\u19F9 "KHMER SYMBOL PRAM-BUON ROC"
33406\u19FA "KHMER SYMBOL DAP ROC"
33407\u19FB "KHMER SYMBOL DAP-MUOY ROC"
33408\u19FC "KHMER SYMBOL DAP-PII ROC"
33409\u19FD "KHMER SYMBOL DAP-BEI ROC"
33410\u19FE "KHMER SYMBOL DAP-BUON ROC"
33411\u19FF "KHMER SYMBOL DAP-PRAM ROC"
33412\u1A00 "BUGINESE LETTER KA"
33413\u1A01 "BUGINESE LETTER GA"
33414\u1A02 "BUGINESE LETTER NGA"
33415\u1A03 "BUGINESE LETTER NGKA"
33416\u1A04 "BUGINESE LETTER PA"
33417\u1A05 "BUGINESE LETTER BA"
33418\u1A06 "BUGINESE LETTER MA"
33419\u1A07 "BUGINESE LETTER MPA"
33420\u1A08 "BUGINESE LETTER TA"
33421\u1A09 "BUGINESE LETTER DA"
33422\u1A0A "BUGINESE LETTER NA"
33423\u1A0B "BUGINESE LETTER NRA"
33424\u1A0C "BUGINESE LETTER CA"
33425\u1A0D "BUGINESE LETTER JA"
33426\u1A0E "BUGINESE LETTER NYA"
33427\u1A0F "BUGINESE LETTER NYCA"
33428\u1A10 "BUGINESE LETTER YA"
33429\u1A11 "BUGINESE LETTER RA"
33430\u1A12 "BUGINESE LETTER LA"
33431\u1A13 "BUGINESE LETTER VA"
33432\u1A14 "BUGINESE LETTER SA"
33433\u1A15 "BUGINESE LETTER A"
33434\u1A16 "BUGINESE LETTER HA"
33435\u1A17 "BUGINESE VOWEL SIGN I"
33436\u1A18 "BUGINESE VOWEL SIGN U"
33437\u1A19 "BUGINESE VOWEL SIGN E"
33438\u1A1A "BUGINESE VOWEL SIGN O"
33439\u1A1B "BUGINESE VOWEL SIGN AE"
33440\u1A1E "BUGINESE PALLAWA"
33441\u1A1F "BUGINESE END OF SECTION"
33442\u1B00 "BALINESE SIGN ULU RICEM"
33443\u1B01 "BALINESE SIGN ULU CANDRA"
33444\u1B02 "BALINESE SIGN CECEK"
33445\u1B03 "BALINESE SIGN SURANG"
33446\u1B04 "BALINESE SIGN BISAH"
33447\u1B05 "BALINESE LETTER AKARA"
33448\u1B06 "BALINESE LETTER AKARA TEDUNG"
33449\u1B07 "BALINESE LETTER IKARA"
33450\u1B08 "BALINESE LETTER IKARA TEDUNG"
33451\u1B09 "BALINESE LETTER UKARA"
33452\u1B0A "BALINESE LETTER UKARA TEDUNG"
33453\u1B0B "BALINESE LETTER RA REPA"
33454\u1B0C "BALINESE LETTER RA REPA TEDUNG"
33455\u1B0D "BALINESE LETTER LA LENGA"
33456\u1B0E "BALINESE LETTER LA LENGA TEDUNG"
33457\u1B0F "BALINESE LETTER EKARA"
33458\u1B10 "BALINESE LETTER AIKARA"
33459\u1B11 "BALINESE LETTER OKARA"
33460\u1B12 "BALINESE LETTER OKARA TEDUNG"
33461\u1B13 "BALINESE LETTER KA"
33462\u1B14 "BALINESE LETTER KA MAHAPRANA"
33463\u1B15 "BALINESE LETTER GA"
33464\u1B16 "BALINESE LETTER GA GORA"
33465\u1B17 "BALINESE LETTER NGA"
33466\u1B18 "BALINESE LETTER CA"
33467\u1B19 "BALINESE LETTER CA LACA"
33468\u1B1A "BALINESE LETTER JA"
33469\u1B1B "BALINESE LETTER JA JERA"
33470\u1B1C "BALINESE LETTER NYA"
33471\u1B1D "BALINESE LETTER TA LATIK"
33472\u1B1E "BALINESE LETTER TA MURDA MAHAPRANA"
33473\u1B1F "BALINESE LETTER DA MURDA ALPAPRANA"
33474\u1B20 "BALINESE LETTER DA MURDA MAHAPRANA"
33475\u1B21 "BALINESE LETTER NA RAMBAT"
33476\u1B22 "BALINESE LETTER TA"
33477\u1B23 "BALINESE LETTER TA TAWA"
33478\u1B24 "BALINESE LETTER DA"
33479\u1B25 "BALINESE LETTER DA MADU"
33480\u1B26 "BALINESE LETTER NA"
33481\u1B27 "BALINESE LETTER PA"
33482\u1B28 "BALINESE LETTER PA KAPAL"
33483\u1B29 "BALINESE LETTER BA"
33484\u1B2A "BALINESE LETTER BA KEMBANG"
33485\u1B2B "BALINESE LETTER MA"
33486\u1B2C "BALINESE LETTER YA"
33487\u1B2D "BALINESE LETTER RA"
33488\u1B2E "BALINESE LETTER LA"
33489\u1B2F "BALINESE LETTER WA"
33490\u1B30 "BALINESE LETTER SA SAGA"
33491\u1B31 "BALINESE LETTER SA SAPA"
33492\u1B32 "BALINESE LETTER SA"
33493\u1B33 "BALINESE LETTER HA"
33494\u1B34 "BALINESE SIGN REREKAN"
33495\u1B35 "BALINESE VOWEL SIGN TEDUNG"
33496\u1B36 "BALINESE VOWEL SIGN ULU"
33497\u1B37 "BALINESE VOWEL SIGN ULU SARI"
33498\u1B38 "BALINESE VOWEL SIGN SUKU"
33499\u1B39 "BALINESE VOWEL SIGN SUKU ILUT"
33500\u1B3A "BALINESE VOWEL SIGN RA REPA"
33501\u1B3B "BALINESE VOWEL SIGN RA REPA TEDUNG"
33502\u1B3C "BALINESE VOWEL SIGN LA LENGA"
33503\u1B3D "BALINESE VOWEL SIGN LA LENGA TEDUNG"
33504\u1B3E "BALINESE VOWEL SIGN TALING"
33505\u1B3F "BALINESE VOWEL SIGN TALING REPA"
33506\u1B40 "BALINESE VOWEL SIGN TALING TEDUNG"
33507\u1B41 "BALINESE VOWEL SIGN TALING REPA TEDUNG"
33508\u1B42 "BALINESE VOWEL SIGN PEPET"
33509\u1B43 "BALINESE VOWEL SIGN PEPET TEDUNG"
33510\u1B44 "BALINESE ADEG ADEG"
33511\u1B45 "BALINESE LETTER KAF SASAK"
33512\u1B46 "BALINESE LETTER KHOT SASAK"
33513\u1B47 "BALINESE LETTER TZIR SASAK"
33514\u1B48 "BALINESE LETTER EF SASAK"
33515\u1B49 "BALINESE LETTER VE SASAK"
33516\u1B4A "BALINESE LETTER ZAL SASAK"
33517\u1B4B "BALINESE LETTER ASYURA SASAK"
33518\u1B50 "BALINESE DIGIT ZERO"
33519\u1B51 "BALINESE DIGIT ONE"
33520\u1B52 "BALINESE DIGIT TWO"
33521\u1B53 "BALINESE DIGIT THREE"
33522\u1B54 "BALINESE DIGIT FOUR"
33523\u1B55 "BALINESE DIGIT FIVE"
33524\u1B56 "BALINESE DIGIT SIX"
33525\u1B57 "BALINESE DIGIT SEVEN"
33526\u1B58 "BALINESE DIGIT EIGHT"
33527\u1B59 "BALINESE DIGIT NINE"
33528\u1B5A "BALINESE PANTI"
33529\u1B5B "BALINESE PAMADA"
33530\u1B5C "BALINESE WINDU"
33531\u1B5D "BALINESE CARIK PAMUNGKAH"
33532\u1B5E "BALINESE CARIK SIKI"
33533\u1B5F "BALINESE CARIK PAREREN"
33534\u1B60 "BALINESE PAMENENG"
33535\u1B61 "BALINESE MUSICAL SYMBOL DONG"
33536\u1B62 "BALINESE MUSICAL SYMBOL DENG"
33537\u1B63 "BALINESE MUSICAL SYMBOL DUNG"
33538\u1B64 "BALINESE MUSICAL SYMBOL DANG"
33539\u1B65 "BALINESE MUSICAL SYMBOL DANG SURANG"
33540\u1B66 "BALINESE MUSICAL SYMBOL DING"
33541\u1B67 "BALINESE MUSICAL SYMBOL DAENG"
33542\u1B68 "BALINESE MUSICAL SYMBOL DEUNG"
33543\u1B69 "BALINESE MUSICAL SYMBOL DAING"
33544\u1B6A "BALINESE MUSICAL SYMBOL DANG GEDE"
33545\u1B6B "BALINESE MUSICAL SYMBOL COMBINING TEGEH"
33546\u1B6C "BALINESE MUSICAL SYMBOL COMBINING ENDEP"
33547\u1B6D "BALINESE MUSICAL SYMBOL COMBINING KEMPUL"
33548\u1B6E "BALINESE MUSICAL SYMBOL COMBINING KEMPLI"
33549\u1B6F "BALINESE MUSICAL SYMBOL COMBINING JEGOGAN"
33550\u1B70 "BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN"
33551\u1B71 "BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN"
33552\u1B72 "BALINESE MUSICAL SYMBOL COMBINING BENDE"
33553\u1B73 "BALINESE MUSICAL SYMBOL COMBINING GONG"
33554\u1B74 "BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG"
33555\u1B75 "BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG"
33556\u1B76 "BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK"
33557\u1B77 "BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK"
33558\u1B78 "BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG"
33559\u1B79 "BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG"
33560\u1B7A "BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK"
33561\u1B7B "BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK"
33562\u1B7C "BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING"
33563\u1B80 "SUNDANESE SIGN PANYECEK"
33564\u1B81 "SUNDANESE SIGN PANGLAYAR"
33565\u1B82 "SUNDANESE SIGN PANGWISAD"
33566\u1B83 "SUNDANESE LETTER A"
33567\u1B84 "SUNDANESE LETTER I"
33568\u1B85 "SUNDANESE LETTER U"
33569\u1B86 "SUNDANESE LETTER AE"
33570\u1B87 "SUNDANESE LETTER O"
33571\u1B88 "SUNDANESE LETTER E"
33572\u1B89 "SUNDANESE LETTER EU"
33573\u1B8A "SUNDANESE LETTER KA"
33574\u1B8B "SUNDANESE LETTER QA"
33575\u1B8C "SUNDANESE LETTER GA"
33576\u1B8D "SUNDANESE LETTER NGA"
33577\u1B8E "SUNDANESE LETTER CA"
33578\u1B8F "SUNDANESE LETTER JA"
33579\u1B90 "SUNDANESE LETTER ZA"
33580\u1B91 "SUNDANESE LETTER NYA"
33581\u1B92 "SUNDANESE LETTER TA"
33582\u1B93 "SUNDANESE LETTER DA"
33583\u1B94 "SUNDANESE LETTER NA"
33584\u1B95 "SUNDANESE LETTER PA"
33585\u1B96 "SUNDANESE LETTER FA"
33586\u1B97 "SUNDANESE LETTER VA"
33587\u1B98 "SUNDANESE LETTER BA"
33588\u1B99 "SUNDANESE LETTER MA"
33589\u1B9A "SUNDANESE LETTER YA"
33590\u1B9B "SUNDANESE LETTER RA"
33591\u1B9C "SUNDANESE LETTER LA"
33592\u1B9D "SUNDANESE LETTER WA"
33593\u1B9E "SUNDANESE LETTER SA"
33594\u1B9F "SUNDANESE LETTER XA"
33595\u1BA0 "SUNDANESE LETTER HA"
33596\u1BA1 "SUNDANESE CONSONANT SIGN PAMINGKAL"
33597\u1BA2 "SUNDANESE CONSONANT SIGN PANYAKRA"
33598\u1BA3 "SUNDANESE CONSONANT SIGN PANYIKU"
33599\u1BA4 "SUNDANESE VOWEL SIGN PANGHULU"
33600\u1BA5 "SUNDANESE VOWEL SIGN PANYUKU"
33601\u1BA6 "SUNDANESE VOWEL SIGN PANAELAENG"
33602\u1BA7 "SUNDANESE VOWEL SIGN PANOLONG"
33603\u1BA8 "SUNDANESE VOWEL SIGN PAMEPET"
33604\u1BA9 "SUNDANESE VOWEL SIGN PANEULEUNG"
33605\u1BAA "SUNDANESE SIGN PAMAAEH"
33606\u1BAE "SUNDANESE LETTER KHA"
33607\u1BAF "SUNDANESE LETTER SYA"
33608\u1BB0 "SUNDANESE DIGIT ZERO"
33609\u1BB1 "SUNDANESE DIGIT ONE"
33610\u1BB2 "SUNDANESE DIGIT TWO"
33611\u1BB3 "SUNDANESE DIGIT THREE"
33612\u1BB4 "SUNDANESE DIGIT FOUR"
33613\u1BB5 "SUNDANESE DIGIT FIVE"
33614\u1BB6 "SUNDANESE DIGIT SIX"
33615\u1BB7 "SUNDANESE DIGIT SEVEN"
33616\u1BB8 "SUNDANESE DIGIT EIGHT"
33617\u1BB9 "SUNDANESE DIGIT NINE"
33618\u1C00 "LEPCHA LETTER KA"
33619\u1C01 "LEPCHA LETTER KLA"
33620\u1C02 "LEPCHA LETTER KHA"
33621\u1C03 "LEPCHA LETTER GA"
33622\u1C04 "LEPCHA LETTER GLA"
33623\u1C05 "LEPCHA LETTER NGA"
33624\u1C06 "LEPCHA LETTER CA"
33625\u1C07 "LEPCHA LETTER CHA"
33626\u1C08 "LEPCHA LETTER JA"
33627\u1C09 "LEPCHA LETTER NYA"
33628\u1C0A "LEPCHA LETTER TA"
33629\u1C0B "LEPCHA LETTER THA"
33630\u1C0C "LEPCHA LETTER DA"
33631\u1C0D "LEPCHA LETTER NA"
33632\u1C0E "LEPCHA LETTER PA"
33633\u1C0F "LEPCHA LETTER PLA"
33634\u1C10 "LEPCHA LETTER PHA"
33635\u1C11 "LEPCHA LETTER FA"
33636\u1C12 "LEPCHA LETTER FLA"
33637\u1C13 "LEPCHA LETTER BA"
33638\u1C14 "LEPCHA LETTER BLA"
33639\u1C15 "LEPCHA LETTER MA"
33640\u1C16 "LEPCHA LETTER MLA"
33641\u1C17 "LEPCHA LETTER TSA"
33642\u1C18 "LEPCHA LETTER TSHA"
33643\u1C19 "LEPCHA LETTER DZA"
33644\u1C1A "LEPCHA LETTER YA"
33645\u1C1B "LEPCHA LETTER RA"
33646\u1C1C "LEPCHA LETTER LA"
33647\u1C1D "LEPCHA LETTER HA"
33648\u1C1E "LEPCHA LETTER HLA"
33649\u1C1F "LEPCHA LETTER VA"
33650\u1C20 "LEPCHA LETTER SA"
33651\u1C21 "LEPCHA LETTER SHA"
33652\u1C22 "LEPCHA LETTER WA"
33653\u1C23 "LEPCHA LETTER A"
33654\u1C24 "LEPCHA SUBJOINED LETTER YA"
33655\u1C25 "LEPCHA SUBJOINED LETTER RA"
33656\u1C26 "LEPCHA VOWEL SIGN AA"
33657\u1C27 "LEPCHA VOWEL SIGN I"
33658\u1C28 "LEPCHA VOWEL SIGN O"
33659\u1C29 "LEPCHA VOWEL SIGN OO"
33660\u1C2A "LEPCHA VOWEL SIGN U"
33661\u1C2B "LEPCHA VOWEL SIGN UU"
33662\u1C2C "LEPCHA VOWEL SIGN E"
33663\u1C2D "LEPCHA CONSONANT SIGN K"
33664\u1C2E "LEPCHA CONSONANT SIGN M"
33665\u1C2F "LEPCHA CONSONANT SIGN L"
33666\u1C30 "LEPCHA CONSONANT SIGN N"
33667\u1C31 "LEPCHA CONSONANT SIGN P"
33668\u1C32 "LEPCHA CONSONANT SIGN R"
33669\u1C33 "LEPCHA CONSONANT SIGN T"
33670\u1C34 "LEPCHA CONSONANT SIGN NYIN-DO"
33671\u1C35 "LEPCHA CONSONANT SIGN KANG"
33672\u1C36 "LEPCHA SIGN RAN"
33673\u1C37 "LEPCHA SIGN NUKTA"
33674\u1C3B "LEPCHA PUNCTUATION TA-ROL"
33675\u1C3C "LEPCHA PUNCTUATION NYET THYOOM TA-ROL"
33676\u1C3D "LEPCHA PUNCTUATION CER-WA"
33677\u1C3E "LEPCHA PUNCTUATION TSHOOK CER-WA"
33678\u1C3F "LEPCHA PUNCTUATION TSHOOK"
33679\u1C40 "LEPCHA DIGIT ZERO"
33680\u1C41 "LEPCHA DIGIT ONE"
33681\u1C42 "LEPCHA DIGIT TWO"
33682\u1C43 "LEPCHA DIGIT THREE"
33683\u1C44 "LEPCHA DIGIT FOUR"
33684\u1C45 "LEPCHA DIGIT FIVE"
33685\u1C46 "LEPCHA DIGIT SIX"
33686\u1C47 "LEPCHA DIGIT SEVEN"
33687\u1C48 "LEPCHA DIGIT EIGHT"
33688\u1C49 "LEPCHA DIGIT NINE"
33689\u1C4D "LEPCHA LETTER TTA"
33690\u1C4E "LEPCHA LETTER TTHA"
33691\u1C4F "LEPCHA LETTER DDA"
33692\u1C50 "OL CHIKI DIGIT ZERO"
33693\u1C51 "OL CHIKI DIGIT ONE"
33694\u1C52 "OL CHIKI DIGIT TWO"
33695\u1C53 "OL CHIKI DIGIT THREE"
33696\u1C54 "OL CHIKI DIGIT FOUR"
33697\u1C55 "OL CHIKI DIGIT FIVE"
33698\u1C56 "OL CHIKI DIGIT SIX"
33699\u1C57 "OL CHIKI DIGIT SEVEN"
33700\u1C58 "OL CHIKI DIGIT EIGHT"
33701\u1C59 "OL CHIKI DIGIT NINE"
33702\u1C5A "OL CHIKI LETTER LA"
33703\u1C5B "OL CHIKI LETTER AT"
33704\u1C5C "OL CHIKI LETTER AG"
33705\u1C5D "OL CHIKI LETTER ANG"
33706\u1C5E "OL CHIKI LETTER AL"
33707\u1C5F "OL CHIKI LETTER LAA"
33708\u1C60 "OL CHIKI LETTER AAK"
33709\u1C61 "OL CHIKI LETTER AAJ"
33710\u1C62 "OL CHIKI LETTER AAM"
33711\u1C63 "OL CHIKI LETTER AAW"
33712\u1C64 "OL CHIKI LETTER LI"
33713\u1C65 "OL CHIKI LETTER IS"
33714\u1C66 "OL CHIKI LETTER IH"
33715\u1C67 "OL CHIKI LETTER INY"
33716\u1C68 "OL CHIKI LETTER IR"
33717\u1C69 "OL CHIKI LETTER LU"
33718\u1C6A "OL CHIKI LETTER UC"
33719\u1C6B "OL CHIKI LETTER UD"
33720\u1C6C "OL CHIKI LETTER UNN"
33721\u1C6D "OL CHIKI LETTER UY"
33722\u1C6E "OL CHIKI LETTER LE"
33723\u1C6F "OL CHIKI LETTER EP"
33724\u1C70 "OL CHIKI LETTER EDD"
33725\u1C71 "OL CHIKI LETTER EN"
33726\u1C72 "OL CHIKI LETTER ERR"
33727\u1C73 "OL CHIKI LETTER LO"
33728\u1C74 "OL CHIKI LETTER OTT"
33729\u1C75 "OL CHIKI LETTER OB"
33730\u1C76 "OL CHIKI LETTER OV"
33731\u1C77 "OL CHIKI LETTER OH"
33732\u1C78 "OL CHIKI MU TTUDDAG"
33733\u1C79 "OL CHIKI GAAHLAA TTUDDAAG"
33734\u1C7A "OL CHIKI MU-GAAHLAA TTUDDAAG"
33735\u1C7B "OL CHIKI RELAA"
33736\u1C7C "OL CHIKI PHAARKAA"
33737\u1C7D "OL CHIKI AHAD"
33738\u1C7E "OL CHIKI PUNCTUATION MUCAAD"
33739\u1C7F "OL CHIKI PUNCTUATION DOUBLE MUCAAD"
33740\u1D00 "LATIN LETTER SMALL CAPITAL A"
33741\u1D01 "LATIN LETTER SMALL CAPITAL AE"
33742\u1D02 "LATIN SMALL LETTER TURNED AE"
33743\u1D03 "LATIN LETTER SMALL CAPITAL BARRED B"
33744\u1D04 "LATIN LETTER SMALL CAPITAL C"
33745\u1D05 "LATIN LETTER SMALL CAPITAL D"
33746\u1D06 "LATIN LETTER SMALL CAPITAL ETH"
33747\u1D07 "LATIN LETTER SMALL CAPITAL E"
33748\u1D08 "LATIN SMALL LETTER TURNED OPEN E"
33749\u1D09 "LATIN SMALL LETTER TURNED I"
33750\u1D0A "LATIN LETTER SMALL CAPITAL J"
33751\u1D0B "LATIN LETTER SMALL CAPITAL K"
33752\u1D0C "LATIN LETTER SMALL CAPITAL L WITH STROKE"
33753\u1D0D "LATIN LETTER SMALL CAPITAL M"
33754\u1D0E "LATIN LETTER SMALL CAPITAL REVERSED N"
33755\u1D0F "LATIN LETTER SMALL CAPITAL O"
33756\u1D10 "LATIN LETTER SMALL CAPITAL OPEN O"
33757\u1D11 "LATIN SMALL LETTER SIDEWAYS O"
33758\u1D12 "LATIN SMALL LETTER SIDEWAYS OPEN O"
33759\u1D13 "LATIN SMALL LETTER SIDEWAYS O WITH STROKE"
33760\u1D14 "LATIN SMALL LETTER TURNED OE"
33761\u1D15 "LATIN LETTER SMALL CAPITAL OU"
33762\u1D16 "LATIN SMALL LETTER TOP HALF O"
33763\u1D17 "LATIN SMALL LETTER BOTTOM HALF O"
33764\u1D18 "LATIN LETTER SMALL CAPITAL P"
33765\u1D19 "LATIN LETTER SMALL CAPITAL REVERSED R"
33766\u1D1A "LATIN LETTER SMALL CAPITAL TURNED R"
33767\u1D1B "LATIN LETTER SMALL CAPITAL T"
33768\u1D1C "LATIN LETTER SMALL CAPITAL U"
33769\u1D1D "LATIN SMALL LETTER SIDEWAYS U"
33770\u1D1E "LATIN SMALL LETTER SIDEWAYS DIAERESIZED U"
33771\u1D1F "LATIN SMALL LETTER SIDEWAYS TURNED M"
33772\u1D20 "LATIN LETTER SMALL CAPITAL V"
33773\u1D21 "LATIN LETTER SMALL CAPITAL W"
33774\u1D22 "LATIN LETTER SMALL CAPITAL Z"
33775\u1D23 "LATIN LETTER SMALL CAPITAL EZH"
33776\u1D24 "LATIN LETTER VOICED LARYNGEAL SPIRANT"
33777\u1D25 "LATIN LETTER AIN"
33778\u1D26 "GREEK LETTER SMALL CAPITAL GAMMA"
33779\u1D27 "GREEK LETTER SMALL CAPITAL LAMDA"
33780\u1D28 "GREEK LETTER SMALL CAPITAL PI"
33781\u1D29 "GREEK LETTER SMALL CAPITAL RHO"
33782\u1D2A "GREEK LETTER SMALL CAPITAL PSI"
33783\u1D2B "CYRILLIC LETTER SMALL CAPITAL EL"
33784\u1D2C "MODIFIER LETTER CAPITAL A"
33785\u1D2D "MODIFIER LETTER CAPITAL AE"
33786\u1D2E "MODIFIER LETTER CAPITAL B"
33787\u1D2F "MODIFIER LETTER CAPITAL BARRED B"
33788\u1D30 "MODIFIER LETTER CAPITAL D"
33789\u1D31 "MODIFIER LETTER CAPITAL E"
33790\u1D32 "MODIFIER LETTER CAPITAL REVERSED E"
33791\u1D33 "MODIFIER LETTER CAPITAL G"
33792\u1D34 "MODIFIER LETTER CAPITAL H"
33793\u1D35 "MODIFIER LETTER CAPITAL I"
33794\u1D36 "MODIFIER LETTER CAPITAL J"
33795\u1D37 "MODIFIER LETTER CAPITAL K"
33796\u1D38 "MODIFIER LETTER CAPITAL L"
33797\u1D39 "MODIFIER LETTER CAPITAL M"
33798\u1D3A "MODIFIER LETTER CAPITAL N"
33799\u1D3B "MODIFIER LETTER CAPITAL REVERSED N"
33800\u1D3C "MODIFIER LETTER CAPITAL O"
33801\u1D3D "MODIFIER LETTER CAPITAL OU"
33802\u1D3E "MODIFIER LETTER CAPITAL P"
33803\u1D3F "MODIFIER LETTER CAPITAL R"
33804\u1D40 "MODIFIER LETTER CAPITAL T"
33805\u1D41 "MODIFIER LETTER CAPITAL U"
33806\u1D42 "MODIFIER LETTER CAPITAL W"
33807\u1D43 "MODIFIER LETTER SMALL A"
33808\u1D44 "MODIFIER LETTER SMALL TURNED A"
33809\u1D45 "MODIFIER LETTER SMALL ALPHA"
33810\u1D46 "MODIFIER LETTER SMALL TURNED AE"
33811\u1D47 "MODIFIER LETTER SMALL B"
33812\u1D48 "MODIFIER LETTER SMALL D"
33813\u1D49 "MODIFIER LETTER SMALL E"
33814\u1D4A "MODIFIER LETTER SMALL SCHWA"
33815\u1D4B "MODIFIER LETTER SMALL OPEN E"
33816\u1D4C "MODIFIER LETTER SMALL TURNED OPEN E"
33817\u1D4D "MODIFIER LETTER SMALL G"
33818\u1D4E "MODIFIER LETTER SMALL TURNED I"
33819\u1D4F "MODIFIER LETTER SMALL K"
33820\u1D50 "MODIFIER LETTER SMALL M"
33821\u1D51 "MODIFIER LETTER SMALL ENG"
33822\u1D52 "MODIFIER LETTER SMALL O"
33823\u1D53 "MODIFIER LETTER SMALL OPEN O"
33824\u1D54 "MODIFIER LETTER SMALL TOP HALF O"
33825\u1D55 "MODIFIER LETTER SMALL BOTTOM HALF O"
33826\u1D56 "MODIFIER LETTER SMALL P"
33827\u1D57 "MODIFIER LETTER SMALL T"
33828\u1D58 "MODIFIER LETTER SMALL U"
33829\u1D59 "MODIFIER LETTER SMALL SIDEWAYS U"
33830\u1D5A "MODIFIER LETTER SMALL TURNED M"
33831\u1D5B "MODIFIER LETTER SMALL V"
33832\u1D5C "MODIFIER LETTER SMALL AIN"
33833\u1D5D "MODIFIER LETTER SMALL BETA"
33834\u1D5E "MODIFIER LETTER SMALL GREEK GAMMA"
33835\u1D5F "MODIFIER LETTER SMALL DELTA"
33836\u1D60 "MODIFIER LETTER SMALL GREEK PHI"
33837\u1D61 "MODIFIER LETTER SMALL CHI"
33838\u1D62 "LATIN SUBSCRIPT SMALL LETTER I"
33839\u1D63 "LATIN SUBSCRIPT SMALL LETTER R"
33840\u1D64 "LATIN SUBSCRIPT SMALL LETTER U"
33841\u1D65 "LATIN SUBSCRIPT SMALL LETTER V"
33842\u1D66 "GREEK SUBSCRIPT SMALL LETTER BETA"
33843\u1D67 "GREEK SUBSCRIPT SMALL LETTER GAMMA"
33844\u1D68 "GREEK SUBSCRIPT SMALL LETTER RHO"
33845\u1D69 "GREEK SUBSCRIPT SMALL LETTER PHI"
33846\u1D6A "GREEK SUBSCRIPT SMALL LETTER CHI"
33847\u1D6B "LATIN SMALL LETTER UE"
33848\u1D6C "LATIN SMALL LETTER B WITH MIDDLE TILDE"
33849\u1D6D "LATIN SMALL LETTER D WITH MIDDLE TILDE"
33850\u1D6E "LATIN SMALL LETTER F WITH MIDDLE TILDE"
33851\u1D6F "LATIN SMALL LETTER M WITH MIDDLE TILDE"
33852\u1D70 "LATIN SMALL LETTER N WITH MIDDLE TILDE"
33853\u1D71 "LATIN SMALL LETTER P WITH MIDDLE TILDE"
33854\u1D72 "LATIN SMALL LETTER R WITH MIDDLE TILDE"
33855\u1D73 "LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE"
33856\u1D74 "LATIN SMALL LETTER S WITH MIDDLE TILDE"
33857\u1D75 "LATIN SMALL LETTER T WITH MIDDLE TILDE"
33858\u1D76 "LATIN SMALL LETTER Z WITH MIDDLE TILDE"
33859\u1D77 "LATIN SMALL LETTER TURNED G"
33860\u1D78 "MODIFIER LETTER CYRILLIC EN"
33861\u1D79 "LATIN SMALL LETTER INSULAR G"
33862\u1D7A "LATIN SMALL LETTER TH WITH STRIKETHROUGH"
33863\u1D7B "LATIN SMALL CAPITAL LETTER I WITH STROKE"
33864\u1D7C "LATIN SMALL LETTER IOTA WITH STROKE"
33865\u1D7D "LATIN SMALL LETTER P WITH STROKE"
33866\u1D7E "LATIN SMALL CAPITAL LETTER U WITH STROKE"
33867\u1D7F "LATIN SMALL LETTER UPSILON WITH STROKE"
33868\u1D80 "LATIN SMALL LETTER B WITH PALATAL HOOK"
33869\u1D81 "LATIN SMALL LETTER D WITH PALATAL HOOK"
33870\u1D82 "LATIN SMALL LETTER F WITH PALATAL HOOK"
33871\u1D83 "LATIN SMALL LETTER G WITH PALATAL HOOK"
33872\u1D84 "LATIN SMALL LETTER K WITH PALATAL HOOK"
33873\u1D85 "LATIN SMALL LETTER L WITH PALATAL HOOK"
33874\u1D86 "LATIN SMALL LETTER M WITH PALATAL HOOK"
33875\u1D87 "LATIN SMALL LETTER N WITH PALATAL HOOK"
33876\u1D88 "LATIN SMALL LETTER P WITH PALATAL HOOK"
33877\u1D89 "LATIN SMALL LETTER R WITH PALATAL HOOK"
33878\u1D8A "LATIN SMALL LETTER S WITH PALATAL HOOK"
33879\u1D8B "LATIN SMALL LETTER ESH WITH PALATAL HOOK"
33880\u1D8C "LATIN SMALL LETTER V WITH PALATAL HOOK"
33881\u1D8D "LATIN SMALL LETTER X WITH PALATAL HOOK"
33882\u1D8E "LATIN SMALL LETTER Z WITH PALATAL HOOK"
33883\u1D8F "LATIN SMALL LETTER A WITH RETROFLEX HOOK"
33884\u1D90 "LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK"
33885\u1D91 "LATIN SMALL LETTER D WITH HOOK AND TAIL"
33886\u1D92 "LATIN SMALL LETTER E WITH RETROFLEX HOOK"
33887\u1D93 "LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK"
33888\u1D94 "LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK"
33889\u1D95 "LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK"
33890\u1D96 "LATIN SMALL LETTER I WITH RETROFLEX HOOK"
33891\u1D97 "LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK"
33892\u1D98 "LATIN SMALL LETTER ESH WITH RETROFLEX HOOK"
33893\u1D99 "LATIN SMALL LETTER U WITH RETROFLEX HOOK"
33894\u1D9A "LATIN SMALL LETTER EZH WITH RETROFLEX HOOK"
33895\u1D9B "MODIFIER LETTER SMALL TURNED ALPHA"
33896\u1D9C "MODIFIER LETTER SMALL C"
33897\u1D9D "MODIFIER LETTER SMALL C WITH CURL"
33898\u1D9E "MODIFIER LETTER SMALL ETH"
33899\u1D9F "MODIFIER LETTER SMALL REVERSED OPEN E"
33900\u1DA0 "MODIFIER LETTER SMALL F"
33901\u1DA1 "MODIFIER LETTER SMALL DOTLESS J WITH STROKE"
33902\u1DA2 "MODIFIER LETTER SMALL SCRIPT G"
33903\u1DA3 "MODIFIER LETTER SMALL TURNED H"
33904\u1DA4 "MODIFIER LETTER SMALL I WITH STROKE"
33905\u1DA5 "MODIFIER LETTER SMALL IOTA"
33906\u1DA6 "MODIFIER LETTER SMALL CAPITAL I"
33907\u1DA7 "MODIFIER LETTER SMALL CAPITAL I WITH STROKE"
33908\u1DA8 "MODIFIER LETTER SMALL J WITH CROSSED-TAIL"
33909\u1DA9 "MODIFIER LETTER SMALL L WITH RETROFLEX HOOK"
33910\u1DAA "MODIFIER LETTER SMALL L WITH PALATAL HOOK"
33911\u1DAB "MODIFIER LETTER SMALL CAPITAL L"
33912\u1DAC "MODIFIER LETTER SMALL M WITH HOOK"
33913\u1DAD "MODIFIER LETTER SMALL TURNED M WITH LONG LEG"
33914\u1DAE "MODIFIER LETTER SMALL N WITH LEFT HOOK"
33915\u1DAF "MODIFIER LETTER SMALL N WITH RETROFLEX HOOK"
33916\u1DB0 "MODIFIER LETTER SMALL CAPITAL N"
33917\u1DB1 "MODIFIER LETTER SMALL BARRED O"
33918\u1DB2 "MODIFIER LETTER SMALL PHI"
33919\u1DB3 "MODIFIER LETTER SMALL S WITH HOOK"
33920\u1DB4 "MODIFIER LETTER SMALL ESH"
33921\u1DB5 "MODIFIER LETTER SMALL T WITH PALATAL HOOK"
33922\u1DB6 "MODIFIER LETTER SMALL U BAR"
33923\u1DB7 "MODIFIER LETTER SMALL UPSILON"
33924\u1DB8 "MODIFIER LETTER SMALL CAPITAL U"
33925\u1DB9 "MODIFIER LETTER SMALL V WITH HOOK"
33926\u1DBA "MODIFIER LETTER SMALL TURNED V"
33927\u1DBB "MODIFIER LETTER SMALL Z"
33928\u1DBC "MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK"
33929\u1DBD "MODIFIER LETTER SMALL Z WITH CURL"
33930\u1DBE "MODIFIER LETTER SMALL EZH"
33931\u1DBF "MODIFIER LETTER SMALL THETA"
33932\u1DC0 "COMBINING DOTTED GRAVE ACCENT"
33933\u1DC1 "COMBINING DOTTED ACUTE ACCENT"
33934\u1DC2 "COMBINING SNAKE BELOW"
33935\u1DC3 "COMBINING SUSPENSION MARK"
33936\u1DC4 "COMBINING MACRON-ACUTE"
33937\u1DC5 "COMBINING GRAVE-MACRON"
33938\u1DC6 "COMBINING MACRON-GRAVE"
33939\u1DC7 "COMBINING ACUTE-MACRON"
33940\u1DC8 "COMBINING GRAVE-ACUTE-GRAVE"
33941\u1DC9 "COMBINING ACUTE-GRAVE-ACUTE"
33942\u1DCA "COMBINING LATIN SMALL LETTER R BELOW"
33943\u1DCB "COMBINING BREVE-MACRON"
33944\u1DCC "COMBINING MACRON-BREVE"
33945\u1DCD "COMBINING DOUBLE CIRCUMFLEX ABOVE"
33946\u1DCE "COMBINING OGONEK ABOVE"
33947\u1DCF "COMBINING ZIGZAG BELOW"
33948\u1DD0 "COMBINING IS BELOW"
33949\u1DD1 "COMBINING UR ABOVE"
33950\u1DD2 "COMBINING US ABOVE"
33951\u1DD3 "COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE"
33952\u1DD4 "COMBINING LATIN SMALL LETTER AE"
33953\u1DD5 "COMBINING LATIN SMALL LETTER AO"
33954\u1DD6 "COMBINING LATIN SMALL LETTER AV"
33955\u1DD7 "COMBINING LATIN SMALL LETTER C CEDILLA"
33956\u1DD8 "COMBINING LATIN SMALL LETTER INSULAR D"
33957\u1DD9 "COMBINING LATIN SMALL LETTER ETH"
33958\u1DDA "COMBINING LATIN SMALL LETTER G"
33959\u1DDB "COMBINING LATIN LETTER SMALL CAPITAL G"
33960\u1DDC "COMBINING LATIN SMALL LETTER K"
33961\u1DDD "COMBINING LATIN SMALL LETTER L"
33962\u1DDE "COMBINING LATIN LETTER SMALL CAPITAL L"
33963\u1DDF "COMBINING LATIN LETTER SMALL CAPITAL M"
33964\u1DE0 "COMBINING LATIN SMALL LETTER N"
33965\u1DE1 "COMBINING LATIN LETTER SMALL CAPITAL N"
33966\u1DE2 "COMBINING LATIN LETTER SMALL CAPITAL R"
33967\u1DE3 "COMBINING LATIN SMALL LETTER R ROTUNDA"
33968\u1DE4 "COMBINING LATIN SMALL LETTER S"
33969\u1DE5 "COMBINING LATIN SMALL LETTER LONG S"
33970\u1DE6 "COMBINING LATIN SMALL LETTER Z"
33971\u1DFE "COMBINING LEFT ARROWHEAD ABOVE"
33972\u1DFF "COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW"
33973\u1E00 "LATIN CAPITAL LETTER A WITH RING BELOW"
33974\u1E01 "LATIN SMALL LETTER A WITH RING BELOW"
33975\u1E02 "LATIN CAPITAL LETTER B WITH DOT ABOVE"
33976\u1E03 "LATIN SMALL LETTER B WITH DOT ABOVE"
33977\u1E04 "LATIN CAPITAL LETTER B WITH DOT BELOW"
33978\u1E05 "LATIN SMALL LETTER B WITH DOT BELOW"
33979\u1E06 "LATIN CAPITAL LETTER B WITH LINE BELOW"
33980\u1E07 "LATIN SMALL LETTER B WITH LINE BELOW"
33981\u1E08 "LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE"
33982\u1E09 "LATIN SMALL LETTER C WITH CEDILLA AND ACUTE"
33983\u1E0A "LATIN CAPITAL LETTER D WITH DOT ABOVE"
33984\u1E0B "LATIN SMALL LETTER D WITH DOT ABOVE"
33985\u1E0C "LATIN CAPITAL LETTER D WITH DOT BELOW"
33986\u1E0D "LATIN SMALL LETTER D WITH DOT BELOW"
33987\u1E0E "LATIN CAPITAL LETTER D WITH LINE BELOW"
33988\u1E0F "LATIN SMALL LETTER D WITH LINE BELOW"
33989\u1E10 "LATIN CAPITAL LETTER D WITH CEDILLA"
33990\u1E11 "LATIN SMALL LETTER D WITH CEDILLA"
33991\u1E12 "LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW"
33992\u1E13 "LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW"
33993\u1E14 "LATIN CAPITAL LETTER E WITH MACRON AND GRAVE"
33994\u1E15 "LATIN SMALL LETTER E WITH MACRON AND GRAVE"
33995\u1E16 "LATIN CAPITAL LETTER E WITH MACRON AND ACUTE"
33996\u1E17 "LATIN SMALL LETTER E WITH MACRON AND ACUTE"
33997\u1E18 "LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW"
33998\u1E19 "LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW"
33999\u1E1A "LATIN CAPITAL LETTER E WITH TILDE BELOW"
34000\u1E1B "LATIN SMALL LETTER E WITH TILDE BELOW"
34001\u1E1C "LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE"
34002\u1E1D "LATIN SMALL LETTER E WITH CEDILLA AND BREVE"
34003\u1E1E "LATIN CAPITAL LETTER F WITH DOT ABOVE"
34004\u1E1F "LATIN SMALL LETTER F WITH DOT ABOVE"
34005\u1E20 "LATIN CAPITAL LETTER G WITH MACRON"
34006\u1E21 "LATIN SMALL LETTER G WITH MACRON"
34007\u1E22 "LATIN CAPITAL LETTER H WITH DOT ABOVE"
34008\u1E23 "LATIN SMALL LETTER H WITH DOT ABOVE"
34009\u1E24 "LATIN CAPITAL LETTER H WITH DOT BELOW"
34010\u1E25 "LATIN SMALL LETTER H WITH DOT BELOW"
34011\u1E26 "LATIN CAPITAL LETTER H WITH DIAERESIS"
34012\u1E27 "LATIN SMALL LETTER H WITH DIAERESIS"
34013\u1E28 "LATIN CAPITAL LETTER H WITH CEDILLA"
34014\u1E29 "LATIN SMALL LETTER H WITH CEDILLA"
34015\u1E2A "LATIN CAPITAL LETTER H WITH BREVE BELOW"
34016\u1E2B "LATIN SMALL LETTER H WITH BREVE BELOW"
34017\u1E2C "LATIN CAPITAL LETTER I WITH TILDE BELOW"
34018\u1E2D "LATIN SMALL LETTER I WITH TILDE BELOW"
34019\u1E2E "LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE"
34020\u1E2F "LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE"
34021\u1E30 "LATIN CAPITAL LETTER K WITH ACUTE"
34022\u1E31 "LATIN SMALL LETTER K WITH ACUTE"
34023\u1E32 "LATIN CAPITAL LETTER K WITH DOT BELOW"
34024\u1E33 "LATIN SMALL LETTER K WITH DOT BELOW"
34025\u1E34 "LATIN CAPITAL LETTER K WITH LINE BELOW"
34026\u1E35 "LATIN SMALL LETTER K WITH LINE BELOW"
34027\u1E36 "LATIN CAPITAL LETTER L WITH DOT BELOW"
34028\u1E37 "LATIN SMALL LETTER L WITH DOT BELOW"
34029\u1E38 "LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON"
34030\u1E39 "LATIN SMALL LETTER L WITH DOT BELOW AND MACRON"
34031\u1E3A "LATIN CAPITAL LETTER L WITH LINE BELOW"
34032\u1E3B "LATIN SMALL LETTER L WITH LINE BELOW"
34033\u1E3C "LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW"
34034\u1E3D "LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW"
34035\u1E3E "LATIN CAPITAL LETTER M WITH ACUTE"
34036\u1E3F "LATIN SMALL LETTER M WITH ACUTE"
34037\u1E40 "LATIN CAPITAL LETTER M WITH DOT ABOVE"
34038\u1E41 "LATIN SMALL LETTER M WITH DOT ABOVE"
34039\u1E42 "LATIN CAPITAL LETTER M WITH DOT BELOW"
34040\u1E43 "LATIN SMALL LETTER M WITH DOT BELOW"
34041\u1E44 "LATIN CAPITAL LETTER N WITH DOT ABOVE"
34042\u1E45 "LATIN SMALL LETTER N WITH DOT ABOVE"
34043\u1E46 "LATIN CAPITAL LETTER N WITH DOT BELOW"
34044\u1E47 "LATIN SMALL LETTER N WITH DOT BELOW"
34045\u1E48 "LATIN CAPITAL LETTER N WITH LINE BELOW"
34046\u1E49 "LATIN SMALL LETTER N WITH LINE BELOW"
34047\u1E4A "LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW"
34048\u1E4B "LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW"
34049\u1E4C "LATIN CAPITAL LETTER O WITH TILDE AND ACUTE"
34050\u1E4D "LATIN SMALL LETTER O WITH TILDE AND ACUTE"
34051\u1E4E "LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS"
34052\u1E4F "LATIN SMALL LETTER O WITH TILDE AND DIAERESIS"
34053\u1E50 "LATIN CAPITAL LETTER O WITH MACRON AND GRAVE"
34054\u1E51 "LATIN SMALL LETTER O WITH MACRON AND GRAVE"
34055\u1E52 "LATIN CAPITAL LETTER O WITH MACRON AND ACUTE"
34056\u1E53 "LATIN SMALL LETTER O WITH MACRON AND ACUTE"
34057\u1E54 "LATIN CAPITAL LETTER P WITH ACUTE"
34058\u1E55 "LATIN SMALL LETTER P WITH ACUTE"
34059\u1E56 "LATIN CAPITAL LETTER P WITH DOT ABOVE"
34060\u1E57 "LATIN SMALL LETTER P WITH DOT ABOVE"
34061\u1E58 "LATIN CAPITAL LETTER R WITH DOT ABOVE"
34062\u1E59 "LATIN SMALL LETTER R WITH DOT ABOVE"
34063\u1E5A "LATIN CAPITAL LETTER R WITH DOT BELOW"
34064\u1E5B "LATIN SMALL LETTER R WITH DOT BELOW"
34065\u1E5C "LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON"
34066\u1E5D "LATIN SMALL LETTER R WITH DOT BELOW AND MACRON"
34067\u1E5E "LATIN CAPITAL LETTER R WITH LINE BELOW"
34068\u1E5F "LATIN SMALL LETTER R WITH LINE BELOW"
34069\u1E60 "LATIN CAPITAL LETTER S WITH DOT ABOVE"
34070\u1E61 "LATIN SMALL LETTER S WITH DOT ABOVE"
34071\u1E62 "LATIN CAPITAL LETTER S WITH DOT BELOW"
34072\u1E63 "LATIN SMALL LETTER S WITH DOT BELOW"
34073\u1E64 "LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE"
34074\u1E65 "LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE"
34075\u1E66 "LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE"
34076\u1E67 "LATIN SMALL LETTER S WITH CARON AND DOT ABOVE"
34077\u1E68 "LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE"
34078\u1E69 "LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE"
34079\u1E6A "LATIN CAPITAL LETTER T WITH DOT ABOVE"
34080\u1E6B "LATIN SMALL LETTER T WITH DOT ABOVE"
34081\u1E6C "LATIN CAPITAL LETTER T WITH DOT BELOW"
34082\u1E6D "LATIN SMALL LETTER T WITH DOT BELOW"
34083\u1E6E "LATIN CAPITAL LETTER T WITH LINE BELOW"
34084\u1E6F "LATIN SMALL LETTER T WITH LINE BELOW"
34085\u1E70 "LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW"
34086\u1E71 "LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW"
34087\u1E72 "LATIN CAPITAL LETTER U WITH DIAERESIS BELOW"
34088\u1E73 "LATIN SMALL LETTER U WITH DIAERESIS BELOW"
34089\u1E74 "LATIN CAPITAL LETTER U WITH TILDE BELOW"
34090\u1E75 "LATIN SMALL LETTER U WITH TILDE BELOW"
34091\u1E76 "LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW"
34092\u1E77 "LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW"
34093\u1E78 "LATIN CAPITAL LETTER U WITH TILDE AND ACUTE"
34094\u1E79 "LATIN SMALL LETTER U WITH TILDE AND ACUTE"
34095\u1E7A "LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS"
34096\u1E7B "LATIN SMALL LETTER U WITH MACRON AND DIAERESIS"
34097\u1E7C "LATIN CAPITAL LETTER V WITH TILDE"
34098\u1E7D "LATIN SMALL LETTER V WITH TILDE"
34099\u1E7E "LATIN CAPITAL LETTER V WITH DOT BELOW"
34100\u1E7F "LATIN SMALL LETTER V WITH DOT BELOW"
34101\u1E80 "LATIN CAPITAL LETTER W WITH GRAVE"
34102\u1E81 "LATIN SMALL LETTER W WITH GRAVE"
34103\u1E82 "LATIN CAPITAL LETTER W WITH ACUTE"
34104\u1E83 "LATIN SMALL LETTER W WITH ACUTE"
34105\u1E84 "LATIN CAPITAL LETTER W WITH DIAERESIS"
34106\u1E85 "LATIN SMALL LETTER W WITH DIAERESIS"
34107\u1E86 "LATIN CAPITAL LETTER W WITH DOT ABOVE"
34108\u1E87 "LATIN SMALL LETTER W WITH DOT ABOVE"
34109\u1E88 "LATIN CAPITAL LETTER W WITH DOT BELOW"
34110\u1E89 "LATIN SMALL LETTER W WITH DOT BELOW"
34111\u1E8A "LATIN CAPITAL LETTER X WITH DOT ABOVE"
34112\u1E8B "LATIN SMALL LETTER X WITH DOT ABOVE"
34113\u1E8C "LATIN CAPITAL LETTER X WITH DIAERESIS"
34114\u1E8D "LATIN SMALL LETTER X WITH DIAERESIS"
34115\u1E8E "LATIN CAPITAL LETTER Y WITH DOT ABOVE"
34116\u1E8F "LATIN SMALL LETTER Y WITH DOT ABOVE"
34117\u1E90 "LATIN CAPITAL LETTER Z WITH CIRCUMFLEX"
34118\u1E91 "LATIN SMALL LETTER Z WITH CIRCUMFLEX"
34119\u1E92 "LATIN CAPITAL LETTER Z WITH DOT BELOW"
34120\u1E93 "LATIN SMALL LETTER Z WITH DOT BELOW"
34121\u1E94 "LATIN CAPITAL LETTER Z WITH LINE BELOW"
34122\u1E95 "LATIN SMALL LETTER Z WITH LINE BELOW"
34123\u1E96 "LATIN SMALL LETTER H WITH LINE BELOW"
34124\u1E97 "LATIN SMALL LETTER T WITH DIAERESIS"
34125\u1E98 "LATIN SMALL LETTER W WITH RING ABOVE"
34126\u1E99 "LATIN SMALL LETTER Y WITH RING ABOVE"
34127\u1E9A "LATIN SMALL LETTER A WITH RIGHT HALF RING"
34128\u1E9B "LATIN SMALL LETTER LONG S WITH DOT ABOVE"
34129\u1E9C "LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE"
34130\u1E9D "LATIN SMALL LETTER LONG S WITH HIGH STROKE"
34131\u1E9E "LATIN CAPITAL LETTER SHARP S"
34132\u1E9F "LATIN SMALL LETTER DELTA"
34133\u1EA0 "LATIN CAPITAL LETTER A WITH DOT BELOW"
34134\u1EA1 "LATIN SMALL LETTER A WITH DOT BELOW"
34135\u1EA2 "LATIN CAPITAL LETTER A WITH HOOK ABOVE"
34136\u1EA3 "LATIN SMALL LETTER A WITH HOOK ABOVE"
34137\u1EA4 "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE"
34138\u1EA5 "LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE"
34139\u1EA6 "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE"
34140\u1EA7 "LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE"
34141\u1EA8 "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE"
34142\u1EA9 "LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE"
34143\u1EAA "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE"
34144\u1EAB "LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE"
34145\u1EAC "LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW"
34146\u1EAD "LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW"
34147\u1EAE "LATIN CAPITAL LETTER A WITH BREVE AND ACUTE"
34148\u1EAF "LATIN SMALL LETTER A WITH BREVE AND ACUTE"
34149\u1EB0 "LATIN CAPITAL LETTER A WITH BREVE AND GRAVE"
34150\u1EB1 "LATIN SMALL LETTER A WITH BREVE AND GRAVE"
34151\u1EB2 "LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE"
34152\u1EB3 "LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE"
34153\u1EB4 "LATIN CAPITAL LETTER A WITH BREVE AND TILDE"
34154\u1EB5 "LATIN SMALL LETTER A WITH BREVE AND TILDE"
34155\u1EB6 "LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW"
34156\u1EB7 "LATIN SMALL LETTER A WITH BREVE AND DOT BELOW"
34157\u1EB8 "LATIN CAPITAL LETTER E WITH DOT BELOW"
34158\u1EB9 "LATIN SMALL LETTER E WITH DOT BELOW"
34159\u1EBA "LATIN CAPITAL LETTER E WITH HOOK ABOVE"
34160\u1EBB "LATIN SMALL LETTER E WITH HOOK ABOVE"
34161\u1EBC "LATIN CAPITAL LETTER E WITH TILDE"
34162\u1EBD "LATIN SMALL LETTER E WITH TILDE"
34163\u1EBE "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE"
34164\u1EBF "LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE"
34165\u1EC0 "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE"
34166\u1EC1 "LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE"
34167\u1EC2 "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE"
34168\u1EC3 "LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE"
34169\u1EC4 "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE"
34170\u1EC5 "LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE"
34171\u1EC6 "LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW"
34172\u1EC7 "LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW"
34173\u1EC8 "LATIN CAPITAL LETTER I WITH HOOK ABOVE"
34174\u1EC9 "LATIN SMALL LETTER I WITH HOOK ABOVE"
34175\u1ECA "LATIN CAPITAL LETTER I WITH DOT BELOW"
34176\u1ECB "LATIN SMALL LETTER I WITH DOT BELOW"
34177\u1ECC "LATIN CAPITAL LETTER O WITH DOT BELOW"
34178\u1ECD "LATIN SMALL LETTER O WITH DOT BELOW"
34179\u1ECE "LATIN CAPITAL LETTER O WITH HOOK ABOVE"
34180\u1ECF "LATIN SMALL LETTER O WITH HOOK ABOVE"
34181\u1ED0 "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE"
34182\u1ED1 "LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE"
34183\u1ED2 "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE"
34184\u1ED3 "LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE"
34185\u1ED4 "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE"
34186\u1ED5 "LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE"
34187\u1ED6 "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE"
34188\u1ED7 "LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE"
34189\u1ED8 "LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW"
34190\u1ED9 "LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW"
34191\u1EDA "LATIN CAPITAL LETTER O WITH HORN AND ACUTE"
34192\u1EDB "LATIN SMALL LETTER O WITH HORN AND ACUTE"
34193\u1EDC "LATIN CAPITAL LETTER O WITH HORN AND GRAVE"
34194\u1EDD "LATIN SMALL LETTER O WITH HORN AND GRAVE"
34195\u1EDE "LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE"
34196\u1EDF "LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE"
34197\u1EE0 "LATIN CAPITAL LETTER O WITH HORN AND TILDE"
34198\u1EE1 "LATIN SMALL LETTER O WITH HORN AND TILDE"
34199\u1EE2 "LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW"
34200\u1EE3 "LATIN SMALL LETTER O WITH HORN AND DOT BELOW"
34201\u1EE4 "LATIN CAPITAL LETTER U WITH DOT BELOW"
34202\u1EE5 "LATIN SMALL LETTER U WITH DOT BELOW"
34203\u1EE6 "LATIN CAPITAL LETTER U WITH HOOK ABOVE"
34204\u1EE7 "LATIN SMALL LETTER U WITH HOOK ABOVE"
34205\u1EE8 "LATIN CAPITAL LETTER U WITH HORN AND ACUTE"
34206\u1EE9 "LATIN SMALL LETTER U WITH HORN AND ACUTE"
34207\u1EEA "LATIN CAPITAL LETTER U WITH HORN AND GRAVE"
34208\u1EEB "LATIN SMALL LETTER U WITH HORN AND GRAVE"
34209\u1EEC "LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE"
34210\u1EED "LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE"
34211\u1EEE "LATIN CAPITAL LETTER U WITH HORN AND TILDE"
34212\u1EEF "LATIN SMALL LETTER U WITH HORN AND TILDE"
34213\u1EF0 "LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW"
34214\u1EF1 "LATIN SMALL LETTER U WITH HORN AND DOT BELOW"
34215\u1EF2 "LATIN CAPITAL LETTER Y WITH GRAVE"
34216\u1EF3 "LATIN SMALL LETTER Y WITH GRAVE"
34217\u1EF4 "LATIN CAPITAL LETTER Y WITH DOT BELOW"
34218\u1EF5 "LATIN SMALL LETTER Y WITH DOT BELOW"
34219\u1EF6 "LATIN CAPITAL LETTER Y WITH HOOK ABOVE"
34220\u1EF7 "LATIN SMALL LETTER Y WITH HOOK ABOVE"
34221\u1EF8 "LATIN CAPITAL LETTER Y WITH TILDE"
34222\u1EF9 "LATIN SMALL LETTER Y WITH TILDE"
34223\u1EFA "LATIN CAPITAL LETTER MIDDLE-WELSH LL"
34224\u1EFB "LATIN SMALL LETTER MIDDLE-WELSH LL"
34225\u1EFC "LATIN CAPITAL LETTER MIDDLE-WELSH V"
34226\u1EFD "LATIN SMALL LETTER MIDDLE-WELSH V"
34227\u1EFE "LATIN CAPITAL LETTER Y WITH LOOP"
34228\u1EFF "LATIN SMALL LETTER Y WITH LOOP"
34229\u1F00 "GREEK SMALL LETTER ALPHA WITH PSILI"
34230\u1F01 "GREEK SMALL LETTER ALPHA WITH DASIA"
34231\u1F02 "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA"
34232\u1F03 "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA"
34233\u1F04 "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA"
34234\u1F05 "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA"
34235\u1F06 "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI"
34236\u1F07 "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI"
34237\u1F08 "GREEK CAPITAL LETTER ALPHA WITH PSILI"
34238\u1F09 "GREEK CAPITAL LETTER ALPHA WITH DASIA"
34239\u1F0A "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA"
34240\u1F0B "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA"
34241\u1F0C "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA"
34242\u1F0D "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA"
34243\u1F0E "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI"
34244\u1F0F "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI"
34245\u1F10 "GREEK SMALL LETTER EPSILON WITH PSILI"
34246\u1F11 "GREEK SMALL LETTER EPSILON WITH DASIA"
34247\u1F12 "GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA"
34248\u1F13 "GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA"
34249\u1F14 "GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA"
34250\u1F15 "GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA"
34251\u1F18 "GREEK CAPITAL LETTER EPSILON WITH PSILI"
34252\u1F19 "GREEK CAPITAL LETTER EPSILON WITH DASIA"
34253\u1F1A "GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA"
34254\u1F1B "GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA"
34255\u1F1C "GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA"
34256\u1F1D "GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA"
34257\u1F20 "GREEK SMALL LETTER ETA WITH PSILI"
34258\u1F21 "GREEK SMALL LETTER ETA WITH DASIA"
34259\u1F22 "GREEK SMALL LETTER ETA WITH PSILI AND VARIA"
34260\u1F23 "GREEK SMALL LETTER ETA WITH DASIA AND VARIA"
34261\u1F24 "GREEK SMALL LETTER ETA WITH PSILI AND OXIA"
34262\u1F25 "GREEK SMALL LETTER ETA WITH DASIA AND OXIA"
34263\u1F26 "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI"
34264\u1F27 "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI"
34265\u1F28 "GREEK CAPITAL LETTER ETA WITH PSILI"
34266\u1F29 "GREEK CAPITAL LETTER ETA WITH DASIA"
34267\u1F2A "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA"
34268\u1F2B "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA"
34269\u1F2C "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA"
34270\u1F2D "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA"
34271\u1F2E "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI"
34272\u1F2F "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI"
34273\u1F30 "GREEK SMALL LETTER IOTA WITH PSILI"
34274\u1F31 "GREEK SMALL LETTER IOTA WITH DASIA"
34275\u1F32 "GREEK SMALL LETTER IOTA WITH PSILI AND VARIA"
34276\u1F33 "GREEK SMALL LETTER IOTA WITH DASIA AND VARIA"
34277\u1F34 "GREEK SMALL LETTER IOTA WITH PSILI AND OXIA"
34278\u1F35 "GREEK SMALL LETTER IOTA WITH DASIA AND OXIA"
34279\u1F36 "GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI"
34280\u1F37 "GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI"
34281\u1F38 "GREEK CAPITAL LETTER IOTA WITH PSILI"
34282\u1F39 "GREEK CAPITAL LETTER IOTA WITH DASIA"
34283\u1F3A "GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA"
34284\u1F3B "GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA"
34285\u1F3C "GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA"
34286\u1F3D "GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA"
34287\u1F3E "GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI"
34288\u1F3F "GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI"
34289\u1F40 "GREEK SMALL LETTER OMICRON WITH PSILI"
34290\u1F41 "GREEK SMALL LETTER OMICRON WITH DASIA"
34291\u1F42 "GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA"
34292\u1F43 "GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA"
34293\u1F44 "GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA"
34294\u1F45 "GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA"
34295\u1F48 "GREEK CAPITAL LETTER OMICRON WITH PSILI"
34296\u1F49 "GREEK CAPITAL LETTER OMICRON WITH DASIA"
34297\u1F4A "GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA"
34298\u1F4B "GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA"
34299\u1F4C "GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA"
34300\u1F4D "GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA"
34301\u1F50 "GREEK SMALL LETTER UPSILON WITH PSILI"
34302\u1F51 "GREEK SMALL LETTER UPSILON WITH DASIA"
34303\u1F52 "GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA"
34304\u1F53 "GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA"
34305\u1F54 "GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA"
34306\u1F55 "GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA"
34307\u1F56 "GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI"
34308\u1F57 "GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI"
34309\u1F59 "GREEK CAPITAL LETTER UPSILON WITH DASIA"
34310\u1F5B "GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA"
34311\u1F5D "GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA"
34312\u1F5F "GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI"
34313\u1F60 "GREEK SMALL LETTER OMEGA WITH PSILI"
34314\u1F61 "GREEK SMALL LETTER OMEGA WITH DASIA"
34315\u1F62 "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA"
34316\u1F63 "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA"
34317\u1F64 "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA"
34318\u1F65 "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA"
34319\u1F66 "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI"
34320\u1F67 "GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI"
34321\u1F68 "GREEK CAPITAL LETTER OMEGA WITH PSILI"
34322\u1F69 "GREEK CAPITAL LETTER OMEGA WITH DASIA"
34323\u1F6A "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA"
34324\u1F6B "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA"
34325\u1F6C "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA"
34326\u1F6D "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA"
34327\u1F6E "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI"
34328\u1F6F "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI"
34329\u1F70 "GREEK SMALL LETTER ALPHA WITH VARIA"
34330\u1F71 "GREEK SMALL LETTER ALPHA WITH OXIA"
34331\u1F72 "GREEK SMALL LETTER EPSILON WITH VARIA"
34332\u1F73 "GREEK SMALL LETTER EPSILON WITH OXIA"
34333\u1F74 "GREEK SMALL LETTER ETA WITH VARIA"
34334\u1F75 "GREEK SMALL LETTER ETA WITH OXIA"
34335\u1F76 "GREEK SMALL LETTER IOTA WITH VARIA"
34336\u1F77 "GREEK SMALL LETTER IOTA WITH OXIA"
34337\u1F78 "GREEK SMALL LETTER OMICRON WITH VARIA"
34338\u1F79 "GREEK SMALL LETTER OMICRON WITH OXIA"
34339\u1F7A "GREEK SMALL LETTER UPSILON WITH VARIA"
34340\u1F7B "GREEK SMALL LETTER UPSILON WITH OXIA"
34341\u1F7C "GREEK SMALL LETTER OMEGA WITH VARIA"
34342\u1F7D "GREEK SMALL LETTER OMEGA WITH OXIA"
34343\u1F80 "GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI"
34344\u1F81 "GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI"
34345\u1F82 "GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI"
34346\u1F83 "GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI"
34347\u1F84 "GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI"
34348\u1F85 "GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI"
34349\u1F86 "GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI"
34350\u1F87 "GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI"
34351\u1F88 "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI"
34352\u1F89 "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI"
34353\u1F8A "GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI"
34354\u1F8B "GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI"
34355\u1F8C "GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI"
34356\u1F8D "GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI"
34357\u1F8E "GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI"
34358\u1F8F "GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI"
34359\u1F90 "GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI"
34360\u1F91 "GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI"
34361\u1F92 "GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI"
34362\u1F93 "GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI"
34363\u1F94 "GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI"
34364\u1F95 "GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI"
34365\u1F96 "GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI"
34366\u1F97 "GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI"
34367\u1F98 "GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI"
34368\u1F99 "GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI"
34369\u1F9A "GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI"
34370\u1F9B "GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI"
34371\u1F9C "GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI"
34372\u1F9D "GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI"
34373\u1F9E "GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI"
34374\u1F9F "GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI"
34375\u1FA0 "GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI"
34376\u1FA1 "GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI"
34377\u1FA2 "GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI"
34378\u1FA3 "GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI"
34379\u1FA4 "GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI"
34380\u1FA5 "GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI"
34381\u1FA6 "GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI"
34382\u1FA7 "GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI"
34383\u1FA8 "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI"
34384\u1FA9 "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI"
34385\u1FAA "GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI"
34386\u1FAB "GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI"
34387\u1FAC "GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI"
34388\u1FAD "GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI"
34389\u1FAE "GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI"
34390\u1FAF "GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI"
34391\u1FB0 "GREEK SMALL LETTER ALPHA WITH VRACHY"
34392\u1FB1 "GREEK SMALL LETTER ALPHA WITH MACRON"
34393\u1FB2 "GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI"
34394\u1FB3 "GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI"
34395\u1FB4 "GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI"
34396\u1FB6 "GREEK SMALL LETTER ALPHA WITH PERISPOMENI"
34397\u1FB7 "GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI"
34398\u1FB8 "GREEK CAPITAL LETTER ALPHA WITH VRACHY"
34399\u1FB9 "GREEK CAPITAL LETTER ALPHA WITH MACRON"
34400\u1FBA "GREEK CAPITAL LETTER ALPHA WITH VARIA"
34401\u1FBB "GREEK CAPITAL LETTER ALPHA WITH OXIA"
34402\u1FBC "GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI"
34403\u1FBD "GREEK KORONIS"
34404\u1FBE "GREEK PROSGEGRAMMENI"
34405\u1FBF "GREEK PSILI"
34406\u1FC0 "GREEK PERISPOMENI"
34407\u1FC1 "GREEK DIALYTIKA AND PERISPOMENI"
34408\u1FC2 "GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI"
34409\u1FC3 "GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI"
34410\u1FC4 "GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI"
34411\u1FC6 "GREEK SMALL LETTER ETA WITH PERISPOMENI"
34412\u1FC7 "GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI"
34413\u1FC8 "GREEK CAPITAL LETTER EPSILON WITH VARIA"
34414\u1FC9 "GREEK CAPITAL LETTER EPSILON WITH OXIA"
34415\u1FCA "GREEK CAPITAL LETTER ETA WITH VARIA"
34416\u1FCB "GREEK CAPITAL LETTER ETA WITH OXIA"
34417\u1FCC "GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI"
34418\u1FCD "GREEK PSILI AND VARIA"
34419\u1FCE "GREEK PSILI AND OXIA"
34420\u1FCF "GREEK PSILI AND PERISPOMENI"
34421\u1FD0 "GREEK SMALL LETTER IOTA WITH VRACHY"
34422\u1FD1 "GREEK SMALL LETTER IOTA WITH MACRON"
34423\u1FD2 "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA"
34424\u1FD3 "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA"
34425\u1FD6 "GREEK SMALL LETTER IOTA WITH PERISPOMENI"
34426\u1FD7 "GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI"
34427\u1FD8 "GREEK CAPITAL LETTER IOTA WITH VRACHY"
34428\u1FD9 "GREEK CAPITAL LETTER IOTA WITH MACRON"
34429\u1FDA "GREEK CAPITAL LETTER IOTA WITH VARIA"
34430\u1FDB "GREEK CAPITAL LETTER IOTA WITH OXIA"
34431\u1FDD "GREEK DASIA AND VARIA"
34432\u1FDE "GREEK DASIA AND OXIA"
34433\u1FDF "GREEK DASIA AND PERISPOMENI"
34434\u1FE0 "GREEK SMALL LETTER UPSILON WITH VRACHY"
34435\u1FE1 "GREEK SMALL LETTER UPSILON WITH MACRON"
34436\u1FE2 "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA"
34437\u1FE3 "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA"
34438\u1FE4 "GREEK SMALL LETTER RHO WITH PSILI"
34439\u1FE5 "GREEK SMALL LETTER RHO WITH DASIA"
34440\u1FE6 "GREEK SMALL LETTER UPSILON WITH PERISPOMENI"
34441\u1FE7 "GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI"
34442\u1FE8 "GREEK CAPITAL LETTER UPSILON WITH VRACHY"
34443\u1FE9 "GREEK CAPITAL LETTER UPSILON WITH MACRON"
34444\u1FEA "GREEK CAPITAL LETTER UPSILON WITH VARIA"
34445\u1FEB "GREEK CAPITAL LETTER UPSILON WITH OXIA"
34446\u1FEC "GREEK CAPITAL LETTER RHO WITH DASIA"
34447\u1FED "GREEK DIALYTIKA AND VARIA"
34448\u1FEE "GREEK DIALYTIKA AND OXIA"
34449\u1FEF "GREEK VARIA"
34450\u1FF2 "GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI"
34451\u1FF3 "GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI"
34452\u1FF4 "GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI"
34453\u1FF6 "GREEK SMALL LETTER OMEGA WITH PERISPOMENI"
34454\u1FF7 "GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI"
34455\u1FF8 "GREEK CAPITAL LETTER OMICRON WITH VARIA"
34456\u1FF9 "GREEK CAPITAL LETTER OMICRON WITH OXIA"
34457\u1FFA "GREEK CAPITAL LETTER OMEGA WITH VARIA"
34458\u1FFB "GREEK CAPITAL LETTER OMEGA WITH OXIA"
34459\u1FFC "GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI"
34460\u1FFD "GREEK OXIA"
34461\u1FFE "GREEK DASIA"
34462\u2000 "EN QUAD"
34463\u2001 "EM QUAD"
34464\u2002 "EN SPACE"
34465\u2003 "EM SPACE"
34466\u2004 "THREE-PER-EM SPACE"
34467\u2005 "FOUR-PER-EM SPACE"
34468\u2006 "SIX-PER-EM SPACE"
34469\u2007 "FIGURE SPACE"
34470\u2008 "PUNCTUATION SPACE"
34471\u2009 "THIN SPACE"
34472\u200A "HAIR SPACE"
34473\u200B "ZERO WIDTH SPACE"
34474\u200C "ZERO WIDTH NON-JOINER"
34475\u200D "ZERO WIDTH JOINER"
34476\u200E "LEFT-TO-RIGHT MARK"
34477\u200F "RIGHT-TO-LEFT MARK"
34478\u2010 "HYPHEN"
34479\u2011 "NON-BREAKING HYPHEN"
34480\u2012 "FIGURE DASH"
34481\u2013 "EN DASH"
34482\u2014 "EM DASH"
34483\u2015 "HORIZONTAL BAR"
34484\u2016 "DOUBLE VERTICAL LINE"
34485\u2017 "DOUBLE LOW LINE"
34486\u2018 "LEFT SINGLE QUOTATION MARK"
34487\u2019 "RIGHT SINGLE QUOTATION MARK"
34488\u201A "SINGLE LOW-9 QUOTATION MARK"
34489\u201B "SINGLE HIGH-REVERSED-9 QUOTATION MARK"
34490\u201C "LEFT DOUBLE QUOTATION MARK"
34491\u201D "RIGHT DOUBLE QUOTATION MARK"
34492\u201E "DOUBLE LOW-9 QUOTATION MARK"
34493\u201F "DOUBLE HIGH-REVERSED-9 QUOTATION MARK"
34494\u2020 "DAGGER"
34495\u2021 "DOUBLE DAGGER"
34496\u2022 "BULLET"
34497\u2023 "TRIANGULAR BULLET"
34498\u2024 "ONE DOT LEADER"
34499\u2025 "TWO DOT LEADER"
34500\u2026 "HORIZONTAL ELLIPSIS"
34501\u2027 "HYPHENATION POINT"
34502\u2028 "LINE SEPARATOR"
34503\u2029 "PARAGRAPH SEPARATOR"
34504\u202A "LEFT-TO-RIGHT EMBEDDING"
34505\u202B "RIGHT-TO-LEFT EMBEDDING"
34506\u202C "POP DIRECTIONAL FORMATTING"
34507\u202D "LEFT-TO-RIGHT OVERRIDE"
34508\u202E "RIGHT-TO-LEFT OVERRIDE"
34509\u202F "NARROW NO-BREAK SPACE"
34510\u2030 "PER MILLE SIGN"
34511\u2031 "PER TEN THOUSAND SIGN"
34512\u2032 "PRIME"
34513\u2033 "DOUBLE PRIME"
34514\u2034 "TRIPLE PRIME"
34515\u2035 "REVERSED PRIME"
34516\u2036 "REVERSED DOUBLE PRIME"
34517\u2037 "REVERSED TRIPLE PRIME"
34518\u2038 "CARET"
34519\u2039 "SINGLE LEFT-POINTING ANGLE QUOTATION MARK"
34520\u203A "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK"
34521\u203B "REFERENCE MARK"
34522\u203C "DOUBLE EXCLAMATION MARK"
34523\u203D "INTERROBANG"
34524\u203E "OVERLINE"
34525\u203F "UNDERTIE"
34526\u2040 "CHARACTER TIE"
34527\u2041 "CARET INSERTION POINT"
34528\u2042 "ASTERISM"
34529\u2043 "HYPHEN BULLET"
34530\u2044 "FRACTION SLASH"
34531\u2045 "LEFT SQUARE BRACKET WITH QUILL"
34532\u2046 "RIGHT SQUARE BRACKET WITH QUILL"
34533\u2047 "DOUBLE QUESTION MARK"
34534\u2048 "QUESTION EXCLAMATION MARK"
34535\u2049 "EXCLAMATION QUESTION MARK"
34536\u204A "TIRONIAN SIGN ET"
34537\u204B "REVERSED PILCROW SIGN"
34538\u204C "BLACK LEFTWARDS BULLET"
34539\u204D "BLACK RIGHTWARDS BULLET"
34540\u204E "LOW ASTERISK"
34541\u204F "REVERSED SEMICOLON"
34542\u2050 "CLOSE UP"
34543\u2051 "TWO ASTERISKS ALIGNED VERTICALLY"
34544\u2052 "COMMERCIAL MINUS SIGN"
34545\u2053 "SWUNG DASH"
34546\u2054 "INVERTED UNDERTIE"
34547\u2055 "FLOWER PUNCTUATION MARK"
34548\u2056 "THREE DOT PUNCTUATION"
34549\u2057 "QUADRUPLE PRIME"
34550\u2058 "FOUR DOT PUNCTUATION"
34551\u2059 "FIVE DOT PUNCTUATION"
34552\u205A "TWO DOT PUNCTUATION"
34553\u205B "FOUR DOT MARK"
34554\u205C "DOTTED CROSS"
34555\u205D "TRICOLON"
34556\u205E "VERTICAL FOUR DOTS"
34557\u205F "MEDIUM MATHEMATICAL SPACE"
34558\u2060 "WORD JOINER"
34559\u2061 "FUNCTION APPLICATION"
34560\u2062 "INVISIBLE TIMES"
34561\u2063 "INVISIBLE SEPARATOR"
34562\u2064 "INVISIBLE PLUS"
34563\u206A "INHIBIT SYMMETRIC SWAPPING"
34564\u206B "ACTIVATE SYMMETRIC SWAPPING"
34565\u206C "INHIBIT ARABIC FORM SHAPING"
34566\u206D "ACTIVATE ARABIC FORM SHAPING"
34567\u206E "NATIONAL DIGIT SHAPES"
34568\u206F "NOMINAL DIGIT SHAPES"
34569\u2070 "SUPERSCRIPT ZERO"
34570\u2071 "SUPERSCRIPT LATIN SMALL LETTER I"
34571\u2074 "SUPERSCRIPT FOUR"
34572\u2075 "SUPERSCRIPT FIVE"
34573\u2076 "SUPERSCRIPT SIX"
34574\u2077 "SUPERSCRIPT SEVEN"
34575\u2078 "SUPERSCRIPT EIGHT"
34576\u2079 "SUPERSCRIPT NINE"
34577\u207A "SUPERSCRIPT PLUS SIGN"
34578\u207B "SUPERSCRIPT MINUS"
34579\u207C "SUPERSCRIPT EQUALS SIGN"
34580\u207D "SUPERSCRIPT LEFT PARENTHESIS"
34581\u207E "SUPERSCRIPT RIGHT PARENTHESIS"
34582\u207F "SUPERSCRIPT LATIN SMALL LETTER N"
34583\u2080 "SUBSCRIPT ZERO"
34584\u2081 "SUBSCRIPT ONE"
34585\u2082 "SUBSCRIPT TWO"
34586\u2083 "SUBSCRIPT THREE"
34587\u2084 "SUBSCRIPT FOUR"
34588\u2085 "SUBSCRIPT FIVE"
34589\u2086 "SUBSCRIPT SIX"
34590\u2087 "SUBSCRIPT SEVEN"
34591\u2088 "SUBSCRIPT EIGHT"
34592\u2089 "SUBSCRIPT NINE"
34593\u208A "SUBSCRIPT PLUS SIGN"
34594\u208B "SUBSCRIPT MINUS"
34595\u208C "SUBSCRIPT EQUALS SIGN"
34596\u208D "SUBSCRIPT LEFT PARENTHESIS"
34597\u208E "SUBSCRIPT RIGHT PARENTHESIS"
34598\u2090 "LATIN SUBSCRIPT SMALL LETTER A"
34599\u2091 "LATIN SUBSCRIPT SMALL LETTER E"
34600\u2092 "LATIN SUBSCRIPT SMALL LETTER O"
34601\u2093 "LATIN SUBSCRIPT SMALL LETTER X"
34602\u2094 "LATIN SUBSCRIPT SMALL LETTER SCHWA"
34603\u20A0 "EURO-CURRENCY SIGN"
34604\u20A1 "COLON SIGN"
34605\u20A2 "CRUZEIRO SIGN"
34606\u20A3 "FRENCH FRANC SIGN"
34607\u20A4 "LIRA SIGN"
34608\u20A5 "MILL SIGN"
34609\u20A6 "NAIRA SIGN"
34610\u20A7 "PESETA SIGN"
34611\u20A8 "RUPEE SIGN"
34612\u20A9 "WON SIGN"
34613\u20AA "NEW SHEQEL SIGN"
34614\u20AB "DONG SIGN"
34615\u20AC "EURO SIGN"
34616\u20AD "KIP SIGN"
34617\u20AE "TUGRIK SIGN"
34618\u20AF "DRACHMA SIGN"
34619\u20B0 "GERMAN PENNY SIGN"
34620\u20B1 "PESO SIGN"
34621\u20B2 "GUARANI SIGN"
34622\u20B3 "AUSTRAL SIGN"
34623\u20B4 "HRYVNIA SIGN"
34624\u20B5 "CEDI SIGN"
34625\u20D0 "COMBINING LEFT HARPOON ABOVE"
34626\u20D1 "COMBINING RIGHT HARPOON ABOVE"
34627\u20D2 "COMBINING LONG VERTICAL LINE OVERLAY"
34628\u20D3 "COMBINING SHORT VERTICAL LINE OVERLAY"
34629\u20D4 "COMBINING ANTICLOCKWISE ARROW ABOVE"
34630\u20D5 "COMBINING CLOCKWISE ARROW ABOVE"
34631\u20D6 "COMBINING LEFT ARROW ABOVE"
34632\u20D7 "COMBINING RIGHT ARROW ABOVE"
34633\u20D8 "COMBINING RING OVERLAY"
34634\u20D9 "COMBINING CLOCKWISE RING OVERLAY"
34635\u20DA "COMBINING ANTICLOCKWISE RING OVERLAY"
34636\u20DB "COMBINING THREE DOTS ABOVE"
34637\u20DC "COMBINING FOUR DOTS ABOVE"
34638\u20DD "COMBINING ENCLOSING CIRCLE"
34639\u20DE "COMBINING ENCLOSING SQUARE"
34640\u20DF "COMBINING ENCLOSING DIAMOND"
34641\u20E0 "COMBINING ENCLOSING CIRCLE BACKSLASH"
34642\u20E1 "COMBINING LEFT RIGHT ARROW ABOVE"
34643\u20E2 "COMBINING ENCLOSING SCREEN"
34644\u20E3 "COMBINING ENCLOSING KEYCAP"
34645\u20E4 "COMBINING ENCLOSING UPWARD POINTING TRIANGLE"
34646\u20E5 "COMBINING REVERSE SOLIDUS OVERLAY"
34647\u20E6 "COMBINING DOUBLE VERTICAL STROKE OVERLAY"
34648\u20E7 "COMBINING ANNUITY SYMBOL"
34649\u20E8 "COMBINING TRIPLE UNDERDOT"
34650\u20E9 "COMBINING WIDE BRIDGE ABOVE"
34651\u20EA "COMBINING LEFTWARDS ARROW OVERLAY"
34652\u20EB "COMBINING LONG DOUBLE SOLIDUS OVERLAY"
34653\u20EC "COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS"
34654\u20ED "COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS"
34655\u20EE "COMBINING LEFT ARROW BELOW"
34656\u20EF "COMBINING RIGHT ARROW BELOW"
34657\u20F0 "COMBINING ASTERISK ABOVE"
34658\u2100 "ACCOUNT OF"
34659\u2101 "ADDRESSED TO THE SUBJECT"
34660\u2102 "DOUBLE-STRUCK CAPITAL C"
34661\u2103 "DEGREE CELSIUS"
34662\u2104 "CENTRE LINE SYMBOL"
34663\u2105 "CARE OF"
34664\u2106 "CADA UNA"
34665\u2107 "EULER CONSTANT"
34666\u2108 "SCRUPLE"
34667\u2109 "DEGREE FAHRENHEIT"
34668\u210A "SCRIPT SMALL G"
34669\u210B "SCRIPT CAPITAL H"
34670\u210C "BLACK-LETTER CAPITAL H"
34671\u210D "DOUBLE-STRUCK CAPITAL H"
34672\u210E "PLANCK CONSTANT"
34673\u210F "PLANCK CONSTANT OVER TWO PI"
34674\u2110 "SCRIPT CAPITAL I"
34675\u2111 "BLACK-LETTER CAPITAL I"
34676\u2112 "SCRIPT CAPITAL L"
34677\u2113 "SCRIPT SMALL L"
34678\u2114 "L B BAR SYMBOL"
34679\u2115 "DOUBLE-STRUCK CAPITAL N"
34680\u2116 "NUMERO SIGN"
34681\u2117 "SOUND RECORDING COPYRIGHT"
34682\u2118 "SCRIPT CAPITAL P"
34683\u2119 "DOUBLE-STRUCK CAPITAL P"
34684\u211A "DOUBLE-STRUCK CAPITAL Q"
34685\u211B "SCRIPT CAPITAL R"
34686\u211C "BLACK-LETTER CAPITAL R"
34687\u211D "DOUBLE-STRUCK CAPITAL R"
34688\u211E "PRESCRIPTION TAKE"
34689\u211F "RESPONSE"
34690\u2120 "SERVICE MARK"
34691\u2121 "TELEPHONE SIGN"
34692\u2122 "TRADE MARK SIGN"
34693\u2123 "VERSICLE"
34694\u2124 "DOUBLE-STRUCK CAPITAL Z"
34695\u2125 "OUNCE SIGN"
34696\u2126 "OHM SIGN"
34697\u2127 "INVERTED OHM SIGN"
34698\u2128 "BLACK-LETTER CAPITAL Z"
34699\u2129 "TURNED GREEK SMALL LETTER IOTA"
34700\u212A "KELVIN SIGN"
34701\u212B "ANGSTROM SIGN"
34702\u212C "SCRIPT CAPITAL B"
34703\u212D "BLACK-LETTER CAPITAL C"
34704\u212E "ESTIMATED SYMBOL"
34705\u212F "SCRIPT SMALL E"
34706\u2130 "SCRIPT CAPITAL E"
34707\u2131 "SCRIPT CAPITAL F"
34708\u2132 "TURNED CAPITAL F"
34709\u2133 "SCRIPT CAPITAL M"
34710\u2134 "SCRIPT SMALL O"
34711\u2135 "ALEF SYMBOL"
34712\u2136 "BET SYMBOL"
34713\u2137 "GIMEL SYMBOL"
34714\u2138 "DALET SYMBOL"
34715\u2139 "INFORMATION SOURCE"
34716\u213A "ROTATED CAPITAL Q"
34717\u213B "FACSIMILE SIGN"
34718\u213C "DOUBLE-STRUCK SMALL PI"
34719\u213D "DOUBLE-STRUCK SMALL GAMMA"
34720\u213E "DOUBLE-STRUCK CAPITAL GAMMA"
34721\u213F "DOUBLE-STRUCK CAPITAL PI"
34722\u2140 "DOUBLE-STRUCK N-ARY SUMMATION"
34723\u2141 "TURNED SANS-SERIF CAPITAL G"
34724\u2142 "TURNED SANS-SERIF CAPITAL L"
34725\u2143 "REVERSED SANS-SERIF CAPITAL L"
34726\u2144 "TURNED SANS-SERIF CAPITAL Y"
34727\u2145 "DOUBLE-STRUCK ITALIC CAPITAL D"
34728\u2146 "DOUBLE-STRUCK ITALIC SMALL D"
34729\u2147 "DOUBLE-STRUCK ITALIC SMALL E"
34730\u2148 "DOUBLE-STRUCK ITALIC SMALL I"
34731\u2149 "DOUBLE-STRUCK ITALIC SMALL J"
34732\u214A "PROPERTY LINE"
34733\u214B "TURNED AMPERSAND"
34734\u214C "PER SIGN"
34735\u214D "AKTIESELSKAB"
34736\u214E "TURNED SMALL F"
34737\u214F "SYMBOL FOR SAMARITAN SOURCE"
34738\u2153 "VULGAR FRACTION ONE THIRD"
34739\u2154 "VULGAR FRACTION TWO THIRDS"
34740\u2155 "VULGAR FRACTION ONE FIFTH"
34741\u2156 "VULGAR FRACTION TWO FIFTHS"
34742\u2157 "VULGAR FRACTION THREE FIFTHS"
34743\u2158 "VULGAR FRACTION FOUR FIFTHS"
34744\u2159 "VULGAR FRACTION ONE SIXTH"
34745\u215A "VULGAR FRACTION FIVE SIXTHS"
34746\u215B "VULGAR FRACTION ONE EIGHTH"
34747\u215C "VULGAR FRACTION THREE EIGHTHS"
34748\u215D "VULGAR FRACTION FIVE EIGHTHS"
34749\u215E "VULGAR FRACTION SEVEN EIGHTHS"
34750\u215F "FRACTION NUMERATOR ONE"
34751\u2160 "ROMAN NUMERAL ONE"
34752\u2161 "ROMAN NUMERAL TWO"
34753\u2162 "ROMAN NUMERAL THREE"
34754\u2163 "ROMAN NUMERAL FOUR"
34755\u2164 "ROMAN NUMERAL FIVE"
34756\u2165 "ROMAN NUMERAL SIX"
34757\u2166 "ROMAN NUMERAL SEVEN"
34758\u2167 "ROMAN NUMERAL EIGHT"
34759\u2168 "ROMAN NUMERAL NINE"
34760\u2169 "ROMAN NUMERAL TEN"
34761\u216A "ROMAN NUMERAL ELEVEN"
34762\u216B "ROMAN NUMERAL TWELVE"
34763\u216C "ROMAN NUMERAL FIFTY"
34764\u216D "ROMAN NUMERAL ONE HUNDRED"
34765\u216E "ROMAN NUMERAL FIVE HUNDRED"
34766\u216F "ROMAN NUMERAL ONE THOUSAND"
34767\u2170 "SMALL ROMAN NUMERAL ONE"
34768\u2171 "SMALL ROMAN NUMERAL TWO"
34769\u2172 "SMALL ROMAN NUMERAL THREE"
34770\u2173 "SMALL ROMAN NUMERAL FOUR"
34771\u2174 "SMALL ROMAN NUMERAL FIVE"
34772\u2175 "SMALL ROMAN NUMERAL SIX"
34773\u2176 "SMALL ROMAN NUMERAL SEVEN"
34774\u2177 "SMALL ROMAN NUMERAL EIGHT"
34775\u2178 "SMALL ROMAN NUMERAL NINE"
34776\u2179 "SMALL ROMAN NUMERAL TEN"
34777\u217A "SMALL ROMAN NUMERAL ELEVEN"
34778\u217B "SMALL ROMAN NUMERAL TWELVE"
34779\u217C "SMALL ROMAN NUMERAL FIFTY"
34780\u217D "SMALL ROMAN NUMERAL ONE HUNDRED"
34781\u217E "SMALL ROMAN NUMERAL FIVE HUNDRED"
34782\u217F "SMALL ROMAN NUMERAL ONE THOUSAND"
34783\u2180 "ROMAN NUMERAL ONE THOUSAND C D"
34784\u2181 "ROMAN NUMERAL FIVE THOUSAND"
34785\u2182 "ROMAN NUMERAL TEN THOUSAND"
34786\u2183 "ROMAN NUMERAL REVERSED ONE HUNDRED"
34787\u2184 "LATIN SMALL LETTER REVERSED C"
34788\u2185 "ROMAN NUMERAL SIX LATE FORM"
34789\u2186 "ROMAN NUMERAL FIFTY EARLY FORM"
34790\u2187 "ROMAN NUMERAL FIFTY THOUSAND"
34791\u2188 "ROMAN NUMERAL ONE HUNDRED THOUSAND"
34792\u2190 "LEFTWARDS ARROW"
34793\u2191 "UPWARDS ARROW"
34794\u2192 "RIGHTWARDS ARROW"
34795\u2193 "DOWNWARDS ARROW"
34796\u2194 "LEFT RIGHT ARROW"
34797\u2195 "UP DOWN ARROW"
34798\u2196 "NORTH WEST ARROW"
34799\u2197 "NORTH EAST ARROW"
34800\u2198 "SOUTH EAST ARROW"
34801\u2199 "SOUTH WEST ARROW"
34802\u219A "LEFTWARDS ARROW WITH STROKE"
34803\u219B "RIGHTWARDS ARROW WITH STROKE"
34804\u219C "LEFTWARDS WAVE ARROW"
34805\u219D "RIGHTWARDS WAVE ARROW"
34806\u219E "LEFTWARDS TWO HEADED ARROW"
34807\u219F "UPWARDS TWO HEADED ARROW"
34808\u21A0 "RIGHTWARDS TWO HEADED ARROW"
34809\u21A1 "DOWNWARDS TWO HEADED ARROW"
34810\u21A2 "LEFTWARDS ARROW WITH TAIL"
34811\u21A3 "RIGHTWARDS ARROW WITH TAIL"
34812\u21A4 "LEFTWARDS ARROW FROM BAR"
34813\u21A5 "UPWARDS ARROW FROM BAR"
34814\u21A6 "RIGHTWARDS ARROW FROM BAR"
34815\u21A7 "DOWNWARDS ARROW FROM BAR"
34816\u21A8 "UP DOWN ARROW WITH BASE"
34817\u21A9 "LEFTWARDS ARROW WITH HOOK"
34818\u21AA "RIGHTWARDS ARROW WITH HOOK"
34819\u21AB "LEFTWARDS ARROW WITH LOOP"
34820\u21AC "RIGHTWARDS ARROW WITH LOOP"
34821\u21AD "LEFT RIGHT WAVE ARROW"
34822\u21AE "LEFT RIGHT ARROW WITH STROKE"
34823\u21AF "DOWNWARDS ZIGZAG ARROW"
34824\u21B0 "UPWARDS ARROW WITH TIP LEFTWARDS"
34825\u21B1 "UPWARDS ARROW WITH TIP RIGHTWARDS"
34826\u21B2 "DOWNWARDS ARROW WITH TIP LEFTWARDS"
34827\u21B3 "DOWNWARDS ARROW WITH TIP RIGHTWARDS"
34828\u21B4 "RIGHTWARDS ARROW WITH CORNER DOWNWARDS"
34829\u21B5 "DOWNWARDS ARROW WITH CORNER LEFTWARDS"
34830\u21B6 "ANTICLOCKWISE TOP SEMICIRCLE ARROW"
34831\u21B7 "CLOCKWISE TOP SEMICIRCLE ARROW"
34832\u21B8 "NORTH WEST ARROW TO LONG BAR"
34833\u21B9 "LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR"
34834\u21BA "ANTICLOCKWISE OPEN CIRCLE ARROW"
34835\u21BB "CLOCKWISE OPEN CIRCLE ARROW"
34836\u21BC "LEFTWARDS HARPOON WITH BARB UPWARDS"
34837\u21BD "LEFTWARDS HARPOON WITH BARB DOWNWARDS"
34838\u21BE "UPWARDS HARPOON WITH BARB RIGHTWARDS"
34839\u21BF "UPWARDS HARPOON WITH BARB LEFTWARDS"
34840\u21C0 "RIGHTWARDS HARPOON WITH BARB UPWARDS"
34841\u21C1 "RIGHTWARDS HARPOON WITH BARB DOWNWARDS"
34842\u21C2 "DOWNWARDS HARPOON WITH BARB RIGHTWARDS"
34843\u21C3 "DOWNWARDS HARPOON WITH BARB LEFTWARDS"
34844\u21C4 "RIGHTWARDS ARROW OVER LEFTWARDS ARROW"
34845\u21C5 "UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW"
34846\u21C6 "LEFTWARDS ARROW OVER RIGHTWARDS ARROW"
34847\u21C7 "LEFTWARDS PAIRED ARROWS"
34848\u21C8 "UPWARDS PAIRED ARROWS"
34849\u21C9 "RIGHTWARDS PAIRED ARROWS"
34850\u21CA "DOWNWARDS PAIRED ARROWS"
34851\u21CB "LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON"
34852\u21CC "RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON"
34853\u21CD "LEFTWARDS DOUBLE ARROW WITH STROKE"
34854\u21CE "LEFT RIGHT DOUBLE ARROW WITH STROKE"
34855\u21CF "RIGHTWARDS DOUBLE ARROW WITH STROKE"
34856\u21D0 "LEFTWARDS DOUBLE ARROW"
34857\u21D1 "UPWARDS DOUBLE ARROW"
34858\u21D2 "RIGHTWARDS DOUBLE ARROW"
34859\u21D3 "DOWNWARDS DOUBLE ARROW"
34860\u21D4 "LEFT RIGHT DOUBLE ARROW"
34861\u21D5 "UP DOWN DOUBLE ARROW"
34862\u21D6 "NORTH WEST DOUBLE ARROW"
34863\u21D7 "NORTH EAST DOUBLE ARROW"
34864\u21D8 "SOUTH EAST DOUBLE ARROW"
34865\u21D9 "SOUTH WEST DOUBLE ARROW"
34866\u21DA "LEFTWARDS TRIPLE ARROW"
34867\u21DB "RIGHTWARDS TRIPLE ARROW"
34868\u21DC "LEFTWARDS SQUIGGLE ARROW"
34869\u21DD "RIGHTWARDS SQUIGGLE ARROW"
34870\u21DE "UPWARDS ARROW WITH DOUBLE STROKE"
34871\u21DF "DOWNWARDS ARROW WITH DOUBLE STROKE"
34872\u21E0 "LEFTWARDS DASHED ARROW"
34873\u21E1 "UPWARDS DASHED ARROW"
34874\u21E2 "RIGHTWARDS DASHED ARROW"
34875\u21E3 "DOWNWARDS DASHED ARROW"
34876\u21E4 "LEFTWARDS ARROW TO BAR"
34877\u21E5 "RIGHTWARDS ARROW TO BAR"
34878\u21E6 "LEFTWARDS WHITE ARROW"
34879\u21E7 "UPWARDS WHITE ARROW"
34880\u21E8 "RIGHTWARDS WHITE ARROW"
34881\u21E9 "DOWNWARDS WHITE ARROW"
34882\u21EA "UPWARDS WHITE ARROW FROM BAR"
34883\u21EB "UPWARDS WHITE ARROW ON PEDESTAL"
34884\u21EC "UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR"
34885\u21ED "UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR"
34886\u21EE "UPWARDS WHITE DOUBLE ARROW"
34887\u21EF "UPWARDS WHITE DOUBLE ARROW ON PEDESTAL"
34888\u21F0 "RIGHTWARDS WHITE ARROW FROM WALL"
34889\u21F1 "NORTH WEST ARROW TO CORNER"
34890\u21F2 "SOUTH EAST ARROW TO CORNER"
34891\u21F3 "UP DOWN WHITE ARROW"
34892\u21F4 "RIGHT ARROW WITH SMALL CIRCLE"
34893\u21F5 "DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW"
34894\u21F6 "THREE RIGHTWARDS ARROWS"
34895\u21F7 "LEFTWARDS ARROW WITH VERTICAL STROKE"
34896\u21F8 "RIGHTWARDS ARROW WITH VERTICAL STROKE"
34897\u21F9 "LEFT RIGHT ARROW WITH VERTICAL STROKE"
34898\u21FA "LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE"
34899\u21FB "RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE"
34900\u21FC "LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE"
34901\u21FD "LEFTWARDS OPEN-HEADED ARROW"
34902\u21FE "RIGHTWARDS OPEN-HEADED ARROW"
34903\u21FF "LEFT RIGHT OPEN-HEADED ARROW"
34904\u2200 "FOR ALL"
34905\u2201 "COMPLEMENT"
34906\u2202 "PARTIAL DIFFERENTIAL"
34907\u2203 "THERE EXISTS"
34908\u2204 "THERE DOES NOT EXIST"
34909\u2205 "EMPTY SET"
34910\u2206 "INCREMENT"
34911\u2207 "NABLA"
34912\u2208 "ELEMENT OF"
34913\u2209 "NOT AN ELEMENT OF"
34914\u220A "SMALL ELEMENT OF"
34915\u220B "CONTAINS AS MEMBER"
34916\u220C "DOES NOT CONTAIN AS MEMBER"
34917\u220D "SMALL CONTAINS AS MEMBER"
34918\u220E "END OF PROOF"
34919\u220F "N-ARY PRODUCT"
34920\u2210 "N-ARY COPRODUCT"
34921\u2211 "N-ARY SUMMATION"
34922\u2212 "MINUS SIGN"
34923\u2213 "MINUS-OR-PLUS SIGN"
34924\u2214 "DOT PLUS"
34925\u2215 "DIVISION SLASH"
34926\u2216 "SET MINUS"
34927\u2217 "ASTERISK OPERATOR"
34928\u2218 "RING OPERATOR"
34929\u2219 "BULLET OPERATOR"
34930\u221A "SQUARE ROOT"
34931\u221B "CUBE ROOT"
34932\u221C "FOURTH ROOT"
34933\u221D "PROPORTIONAL TO"
34934\u221E "INFINITY"
34935\u221F "RIGHT ANGLE"
34936\u2220 "ANGLE"
34937\u2221 "MEASURED ANGLE"
34938\u2222 "SPHERICAL ANGLE"
34939\u2223 "DIVIDES"
34940\u2224 "DOES NOT DIVIDE"
34941\u2225 "PARALLEL TO"
34942\u2226 "NOT PARALLEL TO"
34943\u2227 "LOGICAL AND"
34944\u2228 "LOGICAL OR"
34945\u2229 "INTERSECTION"
34946\u222A "UNION"
34947\u222B "INTEGRAL"
34948\u222C "DOUBLE INTEGRAL"
34949\u222D "TRIPLE INTEGRAL"
34950\u222E "CONTOUR INTEGRAL"
34951\u222F "SURFACE INTEGRAL"
34952\u2230 "VOLUME INTEGRAL"
34953\u2231 "CLOCKWISE INTEGRAL"
34954\u2232 "CLOCKWISE CONTOUR INTEGRAL"
34955\u2233 "ANTICLOCKWISE CONTOUR INTEGRAL"
34956\u2234 "THEREFORE"
34957\u2235 "BECAUSE"
34958\u2236 "RATIO"
34959\u2237 "PROPORTION"
34960\u2238 "DOT MINUS"
34961\u2239 "EXCESS"
34962\u223A "GEOMETRIC PROPORTION"
34963\u223B "HOMOTHETIC"
34964\u223C "TILDE OPERATOR"
34965\u223D "REVERSED TILDE"
34966\u223E "INVERTED LAZY S"
34967\u223F "SINE WAVE"
34968\u2240 "WREATH PRODUCT"
34969\u2241 "NOT TILDE"
34970\u2242 "MINUS TILDE"
34971\u2243 "ASYMPTOTICALLY EQUAL TO"
34972\u2244 "NOT ASYMPTOTICALLY EQUAL TO"
34973\u2245 "APPROXIMATELY EQUAL TO"
34974\u2246 "APPROXIMATELY BUT NOT ACTUALLY EQUAL TO"
34975\u2247 "NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO"
34976\u2248 "ALMOST EQUAL TO"
34977\u2249 "NOT ALMOST EQUAL TO"
34978\u224A "ALMOST EQUAL OR EQUAL TO"
34979\u224B "TRIPLE TILDE"
34980\u224C "ALL EQUAL TO"
34981\u224D "EQUIVALENT TO"
34982\u224E "GEOMETRICALLY EQUIVALENT TO"
34983\u224F "DIFFERENCE BETWEEN"
34984\u2250 "APPROACHES THE LIMIT"
34985\u2251 "GEOMETRICALLY EQUAL TO"
34986\u2252 "APPROXIMATELY EQUAL TO OR THE IMAGE OF"
34987\u2253 "IMAGE OF OR APPROXIMATELY EQUAL TO"
34988\u2254 "COLON EQUALS"
34989\u2255 "EQUALS COLON"
34990\u2256 "RING IN EQUAL TO"
34991\u2257 "RING EQUAL TO"
34992\u2258 "CORRESPONDS TO"
34993\u2259 "ESTIMATES"
34994\u225A "EQUIANGULAR TO"
34995\u225B "STAR EQUALS"
34996\u225C "DELTA EQUAL TO"
34997\u225D "EQUAL TO BY DEFINITION"
34998\u225E "MEASURED BY"
34999\u225F "QUESTIONED EQUAL TO"
35000\u2260 "NOT EQUAL TO"
35001\u2261 "IDENTICAL TO"
35002\u2262 "NOT IDENTICAL TO"
35003\u2263 "STRICTLY EQUIVALENT TO"
35004\u2264 "LESS-THAN OR EQUAL TO"
35005\u2265 "GREATER-THAN OR EQUAL TO"
35006\u2266 "LESS-THAN OVER EQUAL TO"
35007\u2267 "GREATER-THAN OVER EQUAL TO"
35008\u2268 "LESS-THAN BUT NOT EQUAL TO"
35009\u2269 "GREATER-THAN BUT NOT EQUAL TO"
35010\u226A "MUCH LESS-THAN"
35011\u226B "MUCH GREATER-THAN"
35012\u226C "BETWEEN"
35013\u226D "NOT EQUIVALENT TO"
35014\u226E "NOT LESS-THAN"
35015\u226F "NOT GREATER-THAN"
35016\u2270 "NEITHER LESS-THAN NOR EQUAL TO"
35017\u2271 "NEITHER GREATER-THAN NOR EQUAL TO"
35018\u2272 "LESS-THAN OR EQUIVALENT TO"
35019\u2273 "GREATER-THAN OR EQUIVALENT TO"
35020\u2274 "NEITHER LESS-THAN NOR EQUIVALENT TO"
35021\u2275 "NEITHER GREATER-THAN NOR EQUIVALENT TO"
35022\u2276 "LESS-THAN OR GREATER-THAN"
35023\u2277 "GREATER-THAN OR LESS-THAN"
35024\u2278 "NEITHER LESS-THAN NOR GREATER-THAN"
35025\u2279 "NEITHER GREATER-THAN NOR LESS-THAN"
35026\u227A "PRECEDES"
35027\u227B "SUCCEEDS"
35028\u227C "PRECEDES OR EQUAL TO"
35029\u227D "SUCCEEDS OR EQUAL TO"
35030\u227E "PRECEDES OR EQUIVALENT TO"
35031\u227F "SUCCEEDS OR EQUIVALENT TO"
35032\u2280 "DOES NOT PRECEDE"
35033\u2281 "DOES NOT SUCCEED"
35034\u2282 "SUBSET OF"
35035\u2283 "SUPERSET OF"
35036\u2284 "NOT A SUBSET OF"
35037\u2285 "NOT A SUPERSET OF"
35038\u2286 "SUBSET OF OR EQUAL TO"
35039\u2287 "SUPERSET OF OR EQUAL TO"
35040\u2288 "NEITHER A SUBSET OF NOR EQUAL TO"
35041\u2289 "NEITHER A SUPERSET OF NOR EQUAL TO"
35042\u228A "SUBSET OF WITH NOT EQUAL TO"
35043\u228B "SUPERSET OF WITH NOT EQUAL TO"
35044\u228C "MULTISET"
35045\u228D "MULTISET MULTIPLICATION"
35046\u228E "MULTISET UNION"
35047\u228F "SQUARE IMAGE OF"
35048\u2290 "SQUARE ORIGINAL OF"
35049\u2291 "SQUARE IMAGE OF OR EQUAL TO"
35050\u2292 "SQUARE ORIGINAL OF OR EQUAL TO"
35051\u2293 "SQUARE CAP"
35052\u2294 "SQUARE CUP"
35053\u2295 "CIRCLED PLUS"
35054\u2296 "CIRCLED MINUS"
35055\u2297 "CIRCLED TIMES"
35056\u2298 "CIRCLED DIVISION SLASH"
35057\u2299 "CIRCLED DOT OPERATOR"
35058\u229A "CIRCLED RING OPERATOR"
35059\u229B "CIRCLED ASTERISK OPERATOR"
35060\u229C "CIRCLED EQUALS"
35061\u229D "CIRCLED DASH"
35062\u229E "SQUARED PLUS"
35063\u229F "SQUARED MINUS"
35064\u22A0 "SQUARED TIMES"
35065\u22A1 "SQUARED DOT OPERATOR"
35066\u22A2 "RIGHT TACK"
35067\u22A3 "LEFT TACK"
35068\u22A4 "DOWN TACK"
35069\u22A5 "UP TACK"
35070\u22A6 "ASSERTION"
35071\u22A7 "MODELS"
35072\u22A8 "TRUE"
35073\u22A9 "FORCES"
35074\u22AA "TRIPLE VERTICAL BAR RIGHT TURNSTILE"
35075\u22AB "DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE"
35076\u22AC "DOES NOT PROVE"
35077\u22AD "NOT TRUE"
35078\u22AE "DOES NOT FORCE"
35079\u22AF "NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE"
35080\u22B0 "PRECEDES UNDER RELATION"
35081\u22B1 "SUCCEEDS UNDER RELATION"
35082\u22B2 "NORMAL SUBGROUP OF"
35083\u22B3 "CONTAINS AS NORMAL SUBGROUP"
35084\u22B4 "NORMAL SUBGROUP OF OR EQUAL TO"
35085\u22B5 "CONTAINS AS NORMAL SUBGROUP OR EQUAL TO"
35086\u22B6 "ORIGINAL OF"
35087\u22B7 "IMAGE OF"
35088\u22B8 "MULTIMAP"
35089\u22B9 "HERMITIAN CONJUGATE MATRIX"
35090\u22BA "INTERCALATE"
35091\u22BB "XOR"
35092\u22BC "NAND"
35093\u22BD "NOR"
35094\u22BE "RIGHT ANGLE WITH ARC"
35095\u22BF "RIGHT TRIANGLE"
35096\u22C0 "N-ARY LOGICAL AND"
35097\u22C1 "N-ARY LOGICAL OR"
35098\u22C2 "N-ARY INTERSECTION"
35099\u22C3 "N-ARY UNION"
35100\u22C4 "DIAMOND OPERATOR"
35101\u22C5 "DOT OPERATOR"
35102\u22C6 "STAR OPERATOR"
35103\u22C7 "DIVISION TIMES"
35104\u22C8 "BOWTIE"
35105\u22C9 "LEFT NORMAL FACTOR SEMIDIRECT PRODUCT"
35106\u22CA "RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT"
35107\u22CB "LEFT SEMIDIRECT PRODUCT"
35108\u22CC "RIGHT SEMIDIRECT PRODUCT"
35109\u22CD "REVERSED TILDE EQUALS"
35110\u22CE "CURLY LOGICAL OR"
35111\u22CF "CURLY LOGICAL AND"
35112\u22D0 "DOUBLE SUBSET"
35113\u22D1 "DOUBLE SUPERSET"
35114\u22D2 "DOUBLE INTERSECTION"
35115\u22D3 "DOUBLE UNION"
35116\u22D4 "PITCHFORK"
35117\u22D5 "EQUAL AND PARALLEL TO"
35118\u22D6 "LESS-THAN WITH DOT"
35119\u22D7 "GREATER-THAN WITH DOT"
35120\u22D8 "VERY MUCH LESS-THAN"
35121\u22D9 "VERY MUCH GREATER-THAN"
35122\u22DA "LESS-THAN EQUAL TO OR GREATER-THAN"
35123\u22DB "GREATER-THAN EQUAL TO OR LESS-THAN"
35124\u22DC "EQUAL TO OR LESS-THAN"
35125\u22DD "EQUAL TO OR GREATER-THAN"
35126\u22DE "EQUAL TO OR PRECEDES"
35127\u22DF "EQUAL TO OR SUCCEEDS"
35128\u22E0 "DOES NOT PRECEDE OR EQUAL"
35129\u22E1 "DOES NOT SUCCEED OR EQUAL"
35130\u22E2 "NOT SQUARE IMAGE OF OR EQUAL TO"
35131\u22E3 "NOT SQUARE ORIGINAL OF OR EQUAL TO"
35132\u22E4 "SQUARE IMAGE OF OR NOT EQUAL TO"
35133\u22E5 "SQUARE ORIGINAL OF OR NOT EQUAL TO"
35134\u22E6 "LESS-THAN BUT NOT EQUIVALENT TO"
35135\u22E7 "GREATER-THAN BUT NOT EQUIVALENT TO"
35136\u22E8 "PRECEDES BUT NOT EQUIVALENT TO"
35137\u22E9 "SUCCEEDS BUT NOT EQUIVALENT TO"
35138\u22EA "NOT NORMAL SUBGROUP OF"
35139\u22EB "DOES NOT CONTAIN AS NORMAL SUBGROUP"
35140\u22EC "NOT NORMAL SUBGROUP OF OR EQUAL TO"
35141\u22ED "DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL"
35142\u22EE "VERTICAL ELLIPSIS"
35143\u22EF "MIDLINE HORIZONTAL ELLIPSIS"
35144\u22F0 "UP RIGHT DIAGONAL ELLIPSIS"
35145\u22F1 "DOWN RIGHT DIAGONAL ELLIPSIS"
35146\u22F2 "ELEMENT OF WITH LONG HORIZONTAL STROKE"
35147\u22F3 "ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE"
35148\u22F4 "SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE"
35149\u22F5 "ELEMENT OF WITH DOT ABOVE"
35150\u22F6 "ELEMENT OF WITH OVERBAR"
35151\u22F7 "SMALL ELEMENT OF WITH OVERBAR"
35152\u22F8 "ELEMENT OF WITH UNDERBAR"
35153\u22F9 "ELEMENT OF WITH TWO HORIZONTAL STROKES"
35154\u22FA "CONTAINS WITH LONG HORIZONTAL STROKE"
35155\u22FB "CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE"
35156\u22FC "SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE"
35157\u22FD "CONTAINS WITH OVERBAR"
35158\u22FE "SMALL CONTAINS WITH OVERBAR"
35159\u22FF "Z NOTATION BAG MEMBERSHIP"
35160\u2300 "DIAMETER SIGN"
35161\u2301 "ELECTRIC ARROW"
35162\u2302 "HOUSE"
35163\u2303 "UP ARROWHEAD"
35164\u2304 "DOWN ARROWHEAD"
35165\u2305 "PROJECTIVE"
35166\u2306 "PERSPECTIVE"
35167\u2307 "WAVY LINE"
35168\u2308 "LEFT CEILING"
35169\u2309 "RIGHT CEILING"
35170\u230A "LEFT FLOOR"
35171\u230B "RIGHT FLOOR"
35172\u230C "BOTTOM RIGHT CROP"
35173\u230D "BOTTOM LEFT CROP"
35174\u230E "TOP RIGHT CROP"
35175\u230F "TOP LEFT CROP"
35176\u2310 "REVERSED NOT SIGN"
35177\u2311 "SQUARE LOZENGE"
35178\u2312 "ARC"
35179\u2313 "SEGMENT"
35180\u2314 "SECTOR"
35181\u2315 "TELEPHONE RECORDER"
35182\u2316 "POSITION INDICATOR"
35183\u2317 "VIEWDATA SQUARE"
35184\u2318 "PLACE OF INTEREST SIGN"
35185\u2319 "TURNED NOT SIGN"
35186\u231A "WATCH"
35187\u231B "HOURGLASS"
35188\u231C "TOP LEFT CORNER"
35189\u231D "TOP RIGHT CORNER"
35190\u231E "BOTTOM LEFT CORNER"
35191\u231F "BOTTOM RIGHT CORNER"
35192\u2320 "TOP HALF INTEGRAL"
35193\u2321 "BOTTOM HALF INTEGRAL"
35194\u2322 "FROWN"
35195\u2323 "SMILE"
35196\u2324 "UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS"
35197\u2325 "OPTION KEY"
35198\u2326 "ERASE TO THE RIGHT"
35199\u2327 "X IN A RECTANGLE BOX"
35200\u2328 "KEYBOARD"
35201\u2329 "LEFT-POINTING ANGLE BRACKET"
35202\u232A "RIGHT-POINTING ANGLE BRACKET"
35203\u232B "ERASE TO THE LEFT"
35204\u232C "BENZENE RING"
35205\u232D "CYLINDRICITY"
35206\u232E "ALL AROUND-PROFILE"
35207\u232F "SYMMETRY"
35208\u2330 "TOTAL RUNOUT"
35209\u2331 "DIMENSION ORIGIN"
35210\u2332 "CONICAL TAPER"
35211\u2333 "SLOPE"
35212\u2334 "COUNTERBORE"
35213\u2335 "COUNTERSINK"
35214\u2336 "APL FUNCTIONAL SYMBOL I-BEAM"
35215\u2337 "APL FUNCTIONAL SYMBOL SQUISH QUAD"
35216\u2338 "APL FUNCTIONAL SYMBOL QUAD EQUAL"
35217\u2339 "APL FUNCTIONAL SYMBOL QUAD DIVIDE"
35218\u233A "APL FUNCTIONAL SYMBOL QUAD DIAMOND"
35219\u233B "APL FUNCTIONAL SYMBOL QUAD JOT"
35220\u233C "APL FUNCTIONAL SYMBOL QUAD CIRCLE"
35221\u233D "APL FUNCTIONAL SYMBOL CIRCLE STILE"
35222\u233E "APL FUNCTIONAL SYMBOL CIRCLE JOT"
35223\u233F "APL FUNCTIONAL SYMBOL SLASH BAR"
35224\u2340 "APL FUNCTIONAL SYMBOL BACKSLASH BAR"
35225\u2341 "APL FUNCTIONAL SYMBOL QUAD SLASH"
35226\u2342 "APL FUNCTIONAL SYMBOL QUAD BACKSLASH"
35227\u2343 "APL FUNCTIONAL SYMBOL QUAD LESS-THAN"
35228\u2344 "APL FUNCTIONAL SYMBOL QUAD GREATER-THAN"
35229\u2345 "APL FUNCTIONAL SYMBOL LEFTWARDS VANE"
35230\u2346 "APL FUNCTIONAL SYMBOL RIGHTWARDS VANE"
35231\u2347 "APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW"
35232\u2348 "APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW"
35233\u2349 "APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH"
35234\u234A "APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR"
35235\u234B "APL FUNCTIONAL SYMBOL DELTA STILE"
35236\u234C "APL FUNCTIONAL SYMBOL QUAD DOWN CARET"
35237\u234D "APL FUNCTIONAL SYMBOL QUAD DELTA"
35238\u234E "APL FUNCTIONAL SYMBOL DOWN TACK JOT"
35239\u234F "APL FUNCTIONAL SYMBOL UPWARDS VANE"
35240\u2350 "APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW"
35241\u2351 "APL FUNCTIONAL SYMBOL UP TACK OVERBAR"
35242\u2352 "APL FUNCTIONAL SYMBOL DEL STILE"
35243\u2353 "APL FUNCTIONAL SYMBOL QUAD UP CARET"
35244\u2354 "APL FUNCTIONAL SYMBOL QUAD DEL"
35245\u2355 "APL FUNCTIONAL SYMBOL UP TACK JOT"
35246\u2356 "APL FUNCTIONAL SYMBOL DOWNWARDS VANE"
35247\u2357 "APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW"
35248\u2358 "APL FUNCTIONAL SYMBOL QUOTE UNDERBAR"
35249\u2359 "APL FUNCTIONAL SYMBOL DELTA UNDERBAR"
35250\u235A "APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR"
35251\u235B "APL FUNCTIONAL SYMBOL JOT UNDERBAR"
35252\u235C "APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR"
35253\u235D "APL FUNCTIONAL SYMBOL UP SHOE JOT"
35254\u235E "APL FUNCTIONAL SYMBOL QUOTE QUAD"
35255\u235F "APL FUNCTIONAL SYMBOL CIRCLE STAR"
35256\u2360 "APL FUNCTIONAL SYMBOL QUAD COLON"
35257\u2361 "APL FUNCTIONAL SYMBOL UP TACK DIAERESIS"
35258\u2362 "APL FUNCTIONAL SYMBOL DEL DIAERESIS"
35259\u2363 "APL FUNCTIONAL SYMBOL STAR DIAERESIS"
35260\u2364 "APL FUNCTIONAL SYMBOL JOT DIAERESIS"
35261\u2365 "APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS"
35262\u2366 "APL FUNCTIONAL SYMBOL DOWN SHOE STILE"
35263\u2367 "APL FUNCTIONAL SYMBOL LEFT SHOE STILE"
35264\u2368 "APL FUNCTIONAL SYMBOL TILDE DIAERESIS"
35265\u2369 "APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS"
35266\u236A "APL FUNCTIONAL SYMBOL COMMA BAR"
35267\u236B "APL FUNCTIONAL SYMBOL DEL TILDE"
35268\u236C "APL FUNCTIONAL SYMBOL ZILDE"
35269\u236D "APL FUNCTIONAL SYMBOL STILE TILDE"
35270\u236E "APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR"
35271\u236F "APL FUNCTIONAL SYMBOL QUAD NOT EQUAL"
35272\u2370 "APL FUNCTIONAL SYMBOL QUAD QUESTION"
35273\u2371 "APL FUNCTIONAL SYMBOL DOWN CARET TILDE"
35274\u2372 "APL FUNCTIONAL SYMBOL UP CARET TILDE"
35275\u2373 "APL FUNCTIONAL SYMBOL IOTA"
35276\u2374 "APL FUNCTIONAL SYMBOL RHO"
35277\u2375 "APL FUNCTIONAL SYMBOL OMEGA"
35278\u2376 "APL FUNCTIONAL SYMBOL ALPHA UNDERBAR"
35279\u2377 "APL FUNCTIONAL SYMBOL EPSILON UNDERBAR"
35280\u2378 "APL FUNCTIONAL SYMBOL IOTA UNDERBAR"
35281\u2379 "APL FUNCTIONAL SYMBOL OMEGA UNDERBAR"
35282\u237A "APL FUNCTIONAL SYMBOL ALPHA"
35283\u237B "NOT CHECK MARK"
35284\u237C "RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW"
35285\u237D "SHOULDERED OPEN BOX"
35286\u237E "BELL SYMBOL"
35287\u237F "VERTICAL LINE WITH MIDDLE DOT"
35288\u2380 "INSERTION SYMBOL"
35289\u2381 "CONTINUOUS UNDERLINE SYMBOL"
35290\u2382 "DISCONTINUOUS UNDERLINE SYMBOL"
35291\u2383 "EMPHASIS SYMBOL"
35292\u2384 "COMPOSITION SYMBOL"
35293\u2385 "WHITE SQUARE WITH CENTRE VERTICAL LINE"
35294\u2386 "ENTER SYMBOL"
35295\u2387 "ALTERNATIVE KEY SYMBOL"
35296\u2388 "HELM SYMBOL"
35297\u2389 "CIRCLED HORIZONTAL BAR WITH NOTCH"
35298\u238A "CIRCLED TRIANGLE DOWN"
35299\u238B "BROKEN CIRCLE WITH NORTHWEST ARROW"
35300\u238C "UNDO SYMBOL"
35301\u238D "MONOSTABLE SYMBOL"
35302\u238E "HYSTERESIS SYMBOL"
35303\u238F "OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL"
35304\u2390 "OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL"
35305\u2391 "PASSIVE-PULL-DOWN-OUTPUT SYMBOL"
35306\u2392 "PASSIVE-PULL-UP-OUTPUT SYMBOL"
35307\u2393 "DIRECT CURRENT SYMBOL FORM TWO"
35308\u2394 "SOFTWARE-FUNCTION SYMBOL"
35309\u2395 "APL FUNCTIONAL SYMBOL QUAD"
35310\u2396 "DECIMAL SEPARATOR KEY SYMBOL"
35311\u2397 "PREVIOUS PAGE"
35312\u2398 "NEXT PAGE"
35313\u2399 "PRINT SCREEN SYMBOL"
35314\u239A "CLEAR SCREEN SYMBOL"
35315\u239B "LEFT PARENTHESIS UPPER HOOK"
35316\u239C "LEFT PARENTHESIS EXTENSION"
35317\u239D "LEFT PARENTHESIS LOWER HOOK"
35318\u239E "RIGHT PARENTHESIS UPPER HOOK"
35319\u239F "RIGHT PARENTHESIS EXTENSION"
35320\u23A0 "RIGHT PARENTHESIS LOWER HOOK"
35321\u23A1 "LEFT SQUARE BRACKET UPPER CORNER"
35322\u23A2 "LEFT SQUARE BRACKET EXTENSION"
35323\u23A3 "LEFT SQUARE BRACKET LOWER CORNER"
35324\u23A4 "RIGHT SQUARE BRACKET UPPER CORNER"
35325\u23A5 "RIGHT SQUARE BRACKET EXTENSION"
35326\u23A6 "RIGHT SQUARE BRACKET LOWER CORNER"
35327\u23A7 "LEFT CURLY BRACKET UPPER HOOK"
35328\u23A8 "LEFT CURLY BRACKET MIDDLE PIECE"
35329\u23A9 "LEFT CURLY BRACKET LOWER HOOK"
35330\u23AA "CURLY BRACKET EXTENSION"
35331\u23AB "RIGHT CURLY BRACKET UPPER HOOK"
35332\u23AC "RIGHT CURLY BRACKET MIDDLE PIECE"
35333\u23AD "RIGHT CURLY BRACKET LOWER HOOK"
35334\u23AE "INTEGRAL EXTENSION"
35335\u23AF "HORIZONTAL LINE EXTENSION"
35336\u23B0 "UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION"
35337\u23B1 "UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION"
35338\u23B2 "SUMMATION TOP"
35339\u23B3 "SUMMATION BOTTOM"
35340\u23B4 "TOP SQUARE BRACKET"
35341\u23B5 "BOTTOM SQUARE BRACKET"
35342\u23B6 "BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET"
35343\u23B7 "RADICAL SYMBOL BOTTOM"
35344\u23B8 "LEFT VERTICAL BOX LINE"
35345\u23B9 "RIGHT VERTICAL BOX LINE"
35346\u23BA "HORIZONTAL SCAN LINE-1"
35347\u23BB "HORIZONTAL SCAN LINE-3"
35348\u23BC "HORIZONTAL SCAN LINE-7"
35349\u23BD "HORIZONTAL SCAN LINE-9"
35350\u23BE "DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT"
35351\u23BF "DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT"
35352\u23C0 "DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE"
35353\u23C1 "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE"
35354\u23C2 "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE"
35355\u23C3 "DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE"
35356\u23C4 "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE"
35357\u23C5 "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE"
35358\u23C6 "DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE"
35359\u23C7 "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE"
35360\u23C8 "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE"
35361\u23C9 "DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL"
35362\u23CA "DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL"
35363\u23CB "DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT"
35364\u23CC "DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT"
35365\u23CD "SQUARE FOOT"
35366\u23CE "RETURN SYMBOL"
35367\u23CF "EJECT SYMBOL"
35368\u23D0 "VERTICAL LINE EXTENSION"
35369\u23D1 "METRICAL BREVE"
35370\u23D2 "METRICAL LONG OVER SHORT"
35371\u23D3 "METRICAL SHORT OVER LONG"
35372\u23D4 "METRICAL LONG OVER TWO SHORTS"
35373\u23D5 "METRICAL TWO SHORTS OVER LONG"
35374\u23D6 "METRICAL TWO SHORTS JOINED"
35375\u23D7 "METRICAL TRISEME"
35376\u23D8 "METRICAL TETRASEME"
35377\u23D9 "METRICAL PENTASEME"
35378\u23DA "EARTH GROUND"
35379\u23DB "FUSE"
35380\u23DC "TOP PARENTHESIS"
35381\u23DD "BOTTOM PARENTHESIS"
35382\u23DE "TOP CURLY BRACKET"
35383\u23DF "BOTTOM CURLY BRACKET"
35384\u23E0 "TOP TORTOISE SHELL BRACKET"
35385\u23E1 "BOTTOM TORTOISE SHELL BRACKET"
35386\u23E2 "WHITE TRAPEZIUM"
35387\u23E3 "BENZENE RING WITH CIRCLE"
35388\u23E4 "STRAIGHTNESS"
35389\u23E5 "FLATNESS"
35390\u23E6 "AC CURRENT"
35391\u23E7 "ELECTRICAL INTERSECTION"
35392\u2400 "SYMBOL FOR NULL"
35393\u2401 "SYMBOL FOR START OF HEADING"
35394\u2402 "SYMBOL FOR START OF TEXT"
35395\u2403 "SYMBOL FOR END OF TEXT"
35396\u2404 "SYMBOL FOR END OF TRANSMISSION"
35397\u2405 "SYMBOL FOR ENQUIRY"
35398\u2406 "SYMBOL FOR ACKNOWLEDGE"
35399\u2407 "SYMBOL FOR BELL"
35400\u2408 "SYMBOL FOR BACKSPACE"
35401\u2409 "SYMBOL FOR HORIZONTAL TABULATION"
35402\u240A "SYMBOL FOR LINE FEED"
35403\u240B "SYMBOL FOR VERTICAL TABULATION"
35404\u240C "SYMBOL FOR FORM FEED"
35405\u240D "SYMBOL FOR CARRIAGE RETURN"
35406\u240E "SYMBOL FOR SHIFT OUT"
35407\u240F "SYMBOL FOR SHIFT IN"
35408\u2410 "SYMBOL FOR DATA LINK ESCAPE"
35409\u2411 "SYMBOL FOR DEVICE CONTROL ONE"
35410\u2412 "SYMBOL FOR DEVICE CONTROL TWO"
35411\u2413 "SYMBOL FOR DEVICE CONTROL THREE"
35412\u2414 "SYMBOL FOR DEVICE CONTROL FOUR"
35413\u2415 "SYMBOL FOR NEGATIVE ACKNOWLEDGE"
35414\u2416 "SYMBOL FOR SYNCHRONOUS IDLE"
35415\u2417 "SYMBOL FOR END OF TRANSMISSION BLOCK"
35416\u2418 "SYMBOL FOR CANCEL"
35417\u2419 "SYMBOL FOR END OF MEDIUM"
35418\u241A "SYMBOL FOR SUBSTITUTE"
35419\u241B "SYMBOL FOR ESCAPE"
35420\u241C "SYMBOL FOR FILE SEPARATOR"
35421\u241D "SYMBOL FOR GROUP SEPARATOR"
35422\u241E "SYMBOL FOR RECORD SEPARATOR"
35423\u241F "SYMBOL FOR UNIT SEPARATOR"
35424\u2420 "SYMBOL FOR SPACE"
35425\u2421 "SYMBOL FOR DELETE"
35426\u2422 "BLANK SYMBOL"
35427\u2423 "OPEN BOX"
35428\u2424 "SYMBOL FOR NEWLINE"
35429\u2425 "SYMBOL FOR DELETE FORM TWO"
35430\u2426 "SYMBOL FOR SUBSTITUTE FORM TWO"
35431\u2440 "OCR HOOK"
35432\u2441 "OCR CHAIR"
35433\u2442 "OCR FORK"
35434\u2443 "OCR INVERTED FORK"
35435\u2444 "OCR BELT BUCKLE"
35436\u2445 "OCR BOW TIE"
35437\u2446 "OCR BRANCH BANK IDENTIFICATION"
35438\u2447 "OCR AMOUNT OF CHECK"
35439\u2448 "OCR DASH"
35440\u2449 "OCR CUSTOMER ACCOUNT NUMBER"
35441\u244A "OCR DOUBLE BACKSLASH"
35442\u2460 "CIRCLED DIGIT ONE"
35443\u2461 "CIRCLED DIGIT TWO"
35444\u2462 "CIRCLED DIGIT THREE"
35445\u2463 "CIRCLED DIGIT FOUR"
35446\u2464 "CIRCLED DIGIT FIVE"
35447\u2465 "CIRCLED DIGIT SIX"
35448\u2466 "CIRCLED DIGIT SEVEN"
35449\u2467 "CIRCLED DIGIT EIGHT"
35450\u2468 "CIRCLED DIGIT NINE"
35451\u2469 "CIRCLED NUMBER TEN"
35452\u246A "CIRCLED NUMBER ELEVEN"
35453\u246B "CIRCLED NUMBER TWELVE"
35454\u246C "CIRCLED NUMBER THIRTEEN"
35455\u246D "CIRCLED NUMBER FOURTEEN"
35456\u246E "CIRCLED NUMBER FIFTEEN"
35457\u246F "CIRCLED NUMBER SIXTEEN"
35458\u2470 "CIRCLED NUMBER SEVENTEEN"
35459\u2471 "CIRCLED NUMBER EIGHTEEN"
35460\u2472 "CIRCLED NUMBER NINETEEN"
35461\u2473 "CIRCLED NUMBER TWENTY"
35462\u2474 "PARENTHESIZED DIGIT ONE"
35463\u2475 "PARENTHESIZED DIGIT TWO"
35464\u2476 "PARENTHESIZED DIGIT THREE"
35465\u2477 "PARENTHESIZED DIGIT FOUR"
35466\u2478 "PARENTHESIZED DIGIT FIVE"
35467\u2479 "PARENTHESIZED DIGIT SIX"
35468\u247A "PARENTHESIZED DIGIT SEVEN"
35469\u247B "PARENTHESIZED DIGIT EIGHT"
35470\u247C "PARENTHESIZED DIGIT NINE"
35471\u247D "PARENTHESIZED NUMBER TEN"
35472\u247E "PARENTHESIZED NUMBER ELEVEN"
35473\u247F "PARENTHESIZED NUMBER TWELVE"
35474\u2480 "PARENTHESIZED NUMBER THIRTEEN"
35475\u2481 "PARENTHESIZED NUMBER FOURTEEN"
35476\u2482 "PARENTHESIZED NUMBER FIFTEEN"
35477\u2483 "PARENTHESIZED NUMBER SIXTEEN"
35478\u2484 "PARENTHESIZED NUMBER SEVENTEEN"
35479\u2485 "PARENTHESIZED NUMBER EIGHTEEN"
35480\u2486 "PARENTHESIZED NUMBER NINETEEN"
35481\u2487 "PARENTHESIZED NUMBER TWENTY"
35482\u2488 "DIGIT ONE FULL STOP"
35483\u2489 "DIGIT TWO FULL STOP"
35484\u248A "DIGIT THREE FULL STOP"
35485\u248B "DIGIT FOUR FULL STOP"
35486\u248C "DIGIT FIVE FULL STOP"
35487\u248D "DIGIT SIX FULL STOP"
35488\u248E "DIGIT SEVEN FULL STOP"
35489\u248F "DIGIT EIGHT FULL STOP"
35490\u2490 "DIGIT NINE FULL STOP"
35491\u2491 "NUMBER TEN FULL STOP"
35492\u2492 "NUMBER ELEVEN FULL STOP"
35493\u2493 "NUMBER TWELVE FULL STOP"
35494\u2494 "NUMBER THIRTEEN FULL STOP"
35495\u2495 "NUMBER FOURTEEN FULL STOP"
35496\u2496 "NUMBER FIFTEEN FULL STOP"
35497\u2497 "NUMBER SIXTEEN FULL STOP"
35498\u2498 "NUMBER SEVENTEEN FULL STOP"
35499\u2499 "NUMBER EIGHTEEN FULL STOP"
35500\u249A "NUMBER NINETEEN FULL STOP"
35501\u249B "NUMBER TWENTY FULL STOP"
35502\u249C "PARENTHESIZED LATIN SMALL LETTER A"
35503\u249D "PARENTHESIZED LATIN SMALL LETTER B"
35504\u249E "PARENTHESIZED LATIN SMALL LETTER C"
35505\u249F "PARENTHESIZED LATIN SMALL LETTER D"
35506\u24A0 "PARENTHESIZED LATIN SMALL LETTER E"
35507\u24A1 "PARENTHESIZED LATIN SMALL LETTER F"
35508\u24A2 "PARENTHESIZED LATIN SMALL LETTER G"
35509\u24A3 "PARENTHESIZED LATIN SMALL LETTER H"
35510\u24A4 "PARENTHESIZED LATIN SMALL LETTER I"
35511\u24A5 "PARENTHESIZED LATIN SMALL LETTER J"
35512\u24A6 "PARENTHESIZED LATIN SMALL LETTER K"
35513\u24A7 "PARENTHESIZED LATIN SMALL LETTER L"
35514\u24A8 "PARENTHESIZED LATIN SMALL LETTER M"
35515\u24A9 "PARENTHESIZED LATIN SMALL LETTER N"
35516\u24AA "PARENTHESIZED LATIN SMALL LETTER O"
35517\u24AB "PARENTHESIZED LATIN SMALL LETTER P"
35518\u24AC "PARENTHESIZED LATIN SMALL LETTER Q"
35519\u24AD "PARENTHESIZED LATIN SMALL LETTER R"
35520\u24AE "PARENTHESIZED LATIN SMALL LETTER S"
35521\u24AF "PARENTHESIZED LATIN SMALL LETTER T"
35522\u24B0 "PARENTHESIZED LATIN SMALL LETTER U"
35523\u24B1 "PARENTHESIZED LATIN SMALL LETTER V"
35524\u24B2 "PARENTHESIZED LATIN SMALL LETTER W"
35525\u24B3 "PARENTHESIZED LATIN SMALL LETTER X"
35526\u24B4 "PARENTHESIZED LATIN SMALL LETTER Y"
35527\u24B5 "PARENTHESIZED LATIN SMALL LETTER Z"
35528\u24B6 "CIRCLED LATIN CAPITAL LETTER A"
35529\u24B7 "CIRCLED LATIN CAPITAL LETTER B"
35530\u24B8 "CIRCLED LATIN CAPITAL LETTER C"
35531\u24B9 "CIRCLED LATIN CAPITAL LETTER D"
35532\u24BA "CIRCLED LATIN CAPITAL LETTER E"
35533\u24BB "CIRCLED LATIN CAPITAL LETTER F"
35534\u24BC "CIRCLED LATIN CAPITAL LETTER G"
35535\u24BD "CIRCLED LATIN CAPITAL LETTER H"
35536\u24BE "CIRCLED LATIN CAPITAL LETTER I"
35537\u24BF "CIRCLED LATIN CAPITAL LETTER J"
35538\u24C0 "CIRCLED LATIN CAPITAL LETTER K"
35539\u24C1 "CIRCLED LATIN CAPITAL LETTER L"
35540\u24C2 "CIRCLED LATIN CAPITAL LETTER M"
35541\u24C3 "CIRCLED LATIN CAPITAL LETTER N"
35542\u24C4 "CIRCLED LATIN CAPITAL LETTER O"
35543\u24C5 "CIRCLED LATIN CAPITAL LETTER P"
35544\u24C6 "CIRCLED LATIN CAPITAL LETTER Q"
35545\u24C7 "CIRCLED LATIN CAPITAL LETTER R"
35546\u24C8 "CIRCLED LATIN CAPITAL LETTER S"
35547\u24C9 "CIRCLED LATIN CAPITAL LETTER T"
35548\u24CA "CIRCLED LATIN CAPITAL LETTER U"
35549\u24CB "CIRCLED LATIN CAPITAL LETTER V"
35550\u24CC "CIRCLED LATIN CAPITAL LETTER W"
35551\u24CD "CIRCLED LATIN CAPITAL LETTER X"
35552\u24CE "CIRCLED LATIN CAPITAL LETTER Y"
35553\u24CF "CIRCLED LATIN CAPITAL LETTER Z"
35554\u24D0 "CIRCLED LATIN SMALL LETTER A"
35555\u24D1 "CIRCLED LATIN SMALL LETTER B"
35556\u24D2 "CIRCLED LATIN SMALL LETTER C"
35557\u24D3 "CIRCLED LATIN SMALL LETTER D"
35558\u24D4 "CIRCLED LATIN SMALL LETTER E"
35559\u24D5 "CIRCLED LATIN SMALL LETTER F"
35560\u24D6 "CIRCLED LATIN SMALL LETTER G"
35561\u24D7 "CIRCLED LATIN SMALL LETTER H"
35562\u24D8 "CIRCLED LATIN SMALL LETTER I"
35563\u24D9 "CIRCLED LATIN SMALL LETTER J"
35564\u24DA "CIRCLED LATIN SMALL LETTER K"
35565\u24DB "CIRCLED LATIN SMALL LETTER L"
35566\u24DC "CIRCLED LATIN SMALL LETTER M"
35567\u24DD "CIRCLED LATIN SMALL LETTER N"
35568\u24DE "CIRCLED LATIN SMALL LETTER O"
35569\u24DF "CIRCLED LATIN SMALL LETTER P"
35570\u24E0 "CIRCLED LATIN SMALL LETTER Q"
35571\u24E1 "CIRCLED LATIN SMALL LETTER R"
35572\u24E2 "CIRCLED LATIN SMALL LETTER S"
35573\u24E3 "CIRCLED LATIN SMALL LETTER T"
35574\u24E4 "CIRCLED LATIN SMALL LETTER U"
35575\u24E5 "CIRCLED LATIN SMALL LETTER V"
35576\u24E6 "CIRCLED LATIN SMALL LETTER W"
35577\u24E7 "CIRCLED LATIN SMALL LETTER X"
35578\u24E8 "CIRCLED LATIN SMALL LETTER Y"
35579\u24E9 "CIRCLED LATIN SMALL LETTER Z"
35580\u24EA "CIRCLED DIGIT ZERO"
35581\u24EB "NEGATIVE CIRCLED NUMBER ELEVEN"
35582\u24EC "NEGATIVE CIRCLED NUMBER TWELVE"
35583\u24ED "NEGATIVE CIRCLED NUMBER THIRTEEN"
35584\u24EE "NEGATIVE CIRCLED NUMBER FOURTEEN"
35585\u24EF "NEGATIVE CIRCLED NUMBER FIFTEEN"
35586\u24F0 "NEGATIVE CIRCLED NUMBER SIXTEEN"
35587\u24F1 "NEGATIVE CIRCLED NUMBER SEVENTEEN"
35588\u24F2 "NEGATIVE CIRCLED NUMBER EIGHTEEN"
35589\u24F3 "NEGATIVE CIRCLED NUMBER NINETEEN"
35590\u24F4 "NEGATIVE CIRCLED NUMBER TWENTY"
35591\u24F5 "DOUBLE CIRCLED DIGIT ONE"
35592\u24F6 "DOUBLE CIRCLED DIGIT TWO"
35593\u24F7 "DOUBLE CIRCLED DIGIT THREE"
35594\u24F8 "DOUBLE CIRCLED DIGIT FOUR"
35595\u24F9 "DOUBLE CIRCLED DIGIT FIVE"
35596\u24FA "DOUBLE CIRCLED DIGIT SIX"
35597\u24FB "DOUBLE CIRCLED DIGIT SEVEN"
35598\u24FC "DOUBLE CIRCLED DIGIT EIGHT"
35599\u24FD "DOUBLE CIRCLED DIGIT NINE"
35600\u24FE "DOUBLE CIRCLED NUMBER TEN"
35601\u24FF "NEGATIVE CIRCLED DIGIT ZERO"
35602\u2500 "BOX DRAWINGS LIGHT HORIZONTAL"
35603\u2501 "BOX DRAWINGS HEAVY HORIZONTAL"
35604\u2502 "BOX DRAWINGS LIGHT VERTICAL"
35605\u2503 "BOX DRAWINGS HEAVY VERTICAL"
35606\u2504 "BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL"
35607\u2505 "BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL"
35608\u2506 "BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL"
35609\u2507 "BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL"
35610\u2508 "BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL"
35611\u2509 "BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL"
35612\u250A "BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL"
35613\u250B "BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL"
35614\u250C "BOX DRAWINGS LIGHT DOWN AND RIGHT"
35615\u250D "BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY"
35616\u250E "BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT"
35617\u250F "BOX DRAWINGS HEAVY DOWN AND RIGHT"
35618\u2510 "BOX DRAWINGS LIGHT DOWN AND LEFT"
35619\u2511 "BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY"
35620\u2512 "BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT"
35621\u2513 "BOX DRAWINGS HEAVY DOWN AND LEFT"
35622\u2514 "BOX DRAWINGS LIGHT UP AND RIGHT"
35623\u2515 "BOX DRAWINGS UP LIGHT AND RIGHT HEAVY"
35624\u2516 "BOX DRAWINGS UP HEAVY AND RIGHT LIGHT"
35625\u2517 "BOX DRAWINGS HEAVY UP AND RIGHT"
35626\u2518 "BOX DRAWINGS LIGHT UP AND LEFT"
35627\u2519 "BOX DRAWINGS UP LIGHT AND LEFT HEAVY"
35628\u251A "BOX DRAWINGS UP HEAVY AND LEFT LIGHT"
35629\u251B "BOX DRAWINGS HEAVY UP AND LEFT"
35630\u251C "BOX DRAWINGS LIGHT VERTICAL AND RIGHT"
35631\u251D "BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY"
35632\u251E "BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT"
35633\u251F "BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT"
35634\u2520 "BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT"
35635\u2521 "BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY"
35636\u2522 "BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY"
35637\u2523 "BOX DRAWINGS HEAVY VERTICAL AND RIGHT"
35638\u2524 "BOX DRAWINGS LIGHT VERTICAL AND LEFT"
35639\u2525 "BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY"
35640\u2526 "BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT"
35641\u2527 "BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT"
35642\u2528 "BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT"
35643\u2529 "BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY"
35644\u252A "BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY"
35645\u252B "BOX DRAWINGS HEAVY VERTICAL AND LEFT"
35646\u252C "BOX DRAWINGS LIGHT DOWN AND HORIZONTAL"
35647\u252D "BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT"
35648\u252E "BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT"
35649\u252F "BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY"
35650\u2530 "BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT"
35651\u2531 "BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY"
35652\u2532 "BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY"
35653\u2533 "BOX DRAWINGS HEAVY DOWN AND HORIZONTAL"
35654\u2534 "BOX DRAWINGS LIGHT UP AND HORIZONTAL"
35655\u2535 "BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT"
35656\u2536 "BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT"
35657\u2537 "BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY"
35658\u2538 "BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT"
35659\u2539 "BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY"
35660\u253A "BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY"
35661\u253B "BOX DRAWINGS HEAVY UP AND HORIZONTAL"
35662\u253C "BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL"
35663\u253D "BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT"
35664\u253E "BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT"
35665\u253F "BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY"
35666\u2540 "BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT"
35667\u2541 "BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT"
35668\u2542 "BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT"
35669\u2543 "BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT"
35670\u2544 "BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT"
35671\u2545 "BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT"
35672\u2546 "BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT"
35673\u2547 "BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY"
35674\u2548 "BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY"
35675\u2549 "BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY"
35676\u254A "BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY"
35677\u254B "BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL"
35678\u254C "BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL"
35679\u254D "BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL"
35680\u254E "BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL"
35681\u254F "BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL"
35682\u2550 "BOX DRAWINGS DOUBLE HORIZONTAL"
35683\u2551 "BOX DRAWINGS DOUBLE VERTICAL"
35684\u2552 "BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE"
35685\u2553 "BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE"
35686\u2554 "BOX DRAWINGS DOUBLE DOWN AND RIGHT"
35687\u2555 "BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE"
35688\u2556 "BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE"
35689\u2557 "BOX DRAWINGS DOUBLE DOWN AND LEFT"
35690\u2558 "BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE"
35691\u2559 "BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE"
35692\u255A "BOX DRAWINGS DOUBLE UP AND RIGHT"
35693\u255B "BOX DRAWINGS UP SINGLE AND LEFT DOUBLE"
35694\u255C "BOX DRAWINGS UP DOUBLE AND LEFT SINGLE"
35695\u255D "BOX DRAWINGS DOUBLE UP AND LEFT"
35696\u255E "BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE"
35697\u255F "BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE"
35698\u2560 "BOX DRAWINGS DOUBLE VERTICAL AND RIGHT"
35699\u2561 "BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE"
35700\u2562 "BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE"
35701\u2563 "BOX DRAWINGS DOUBLE VERTICAL AND LEFT"
35702\u2564 "BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE"
35703\u2565 "BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE"
35704\u2566 "BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL"
35705\u2567 "BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE"
35706\u2568 "BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE"
35707\u2569 "BOX DRAWINGS DOUBLE UP AND HORIZONTAL"
35708\u256A "BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE"
35709\u256B "BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE"
35710\u256C "BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL"
35711\u256D "BOX DRAWINGS LIGHT ARC DOWN AND RIGHT"
35712\u256E "BOX DRAWINGS LIGHT ARC DOWN AND LEFT"
35713\u256F "BOX DRAWINGS LIGHT ARC UP AND LEFT"
35714\u2570 "BOX DRAWINGS LIGHT ARC UP AND RIGHT"
35715\u2571 "BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT"
35716\u2572 "BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT"
35717\u2573 "BOX DRAWINGS LIGHT DIAGONAL CROSS"
35718\u2574 "BOX DRAWINGS LIGHT LEFT"
35719\u2575 "BOX DRAWINGS LIGHT UP"
35720\u2576 "BOX DRAWINGS LIGHT RIGHT"
35721\u2577 "BOX DRAWINGS LIGHT DOWN"
35722\u2578 "BOX DRAWINGS HEAVY LEFT"
35723\u2579 "BOX DRAWINGS HEAVY UP"
35724\u257A "BOX DRAWINGS HEAVY RIGHT"
35725\u257B "BOX DRAWINGS HEAVY DOWN"
35726\u257C "BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT"
35727\u257D "BOX DRAWINGS LIGHT UP AND HEAVY DOWN"
35728\u257E "BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT"
35729\u257F "BOX DRAWINGS HEAVY UP AND LIGHT DOWN"
35730\u2580 "UPPER HALF BLOCK"
35731\u2581 "LOWER ONE EIGHTH BLOCK"
35732\u2582 "LOWER ONE QUARTER BLOCK"
35733\u2583 "LOWER THREE EIGHTHS BLOCK"
35734\u2584 "LOWER HALF BLOCK"
35735\u2585 "LOWER FIVE EIGHTHS BLOCK"
35736\u2586 "LOWER THREE QUARTERS BLOCK"
35737\u2587 "LOWER SEVEN EIGHTHS BLOCK"
35738\u2588 "FULL BLOCK"
35739\u2589 "LEFT SEVEN EIGHTHS BLOCK"
35740\u258A "LEFT THREE QUARTERS BLOCK"
35741\u258B "LEFT FIVE EIGHTHS BLOCK"
35742\u258C "LEFT HALF BLOCK"
35743\u258D "LEFT THREE EIGHTHS BLOCK"
35744\u258E "LEFT ONE QUARTER BLOCK"
35745\u258F "LEFT ONE EIGHTH BLOCK"
35746\u2590 "RIGHT HALF BLOCK"
35747\u2591 "LIGHT SHADE"
35748\u2592 "MEDIUM SHADE"
35749\u2593 "DARK SHADE"
35750\u2594 "UPPER ONE EIGHTH BLOCK"
35751\u2595 "RIGHT ONE EIGHTH BLOCK"
35752\u2596 "QUADRANT LOWER LEFT"
35753\u2597 "QUADRANT LOWER RIGHT"
35754\u2598 "QUADRANT UPPER LEFT"
35755\u2599 "QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT"
35756\u259A "QUADRANT UPPER LEFT AND LOWER RIGHT"
35757\u259B "QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT"
35758\u259C "QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT"
35759\u259D "QUADRANT UPPER RIGHT"
35760\u259E "QUADRANT UPPER RIGHT AND LOWER LEFT"
35761\u259F "QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT"
35762\u25A0 "BLACK SQUARE"
35763\u25A1 "WHITE SQUARE"
35764\u25A2 "WHITE SQUARE WITH ROUNDED CORNERS"
35765\u25A3 "WHITE SQUARE CONTAINING BLACK SMALL SQUARE"
35766\u25A4 "SQUARE WITH HORIZONTAL FILL"
35767\u25A5 "SQUARE WITH VERTICAL FILL"
35768\u25A6 "SQUARE WITH ORTHOGONAL CROSSHATCH FILL"
35769\u25A7 "SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL"
35770\u25A8 "SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL"
35771\u25A9 "SQUARE WITH DIAGONAL CROSSHATCH FILL"
35772\u25AA "BLACK SMALL SQUARE"
35773\u25AB "WHITE SMALL SQUARE"
35774\u25AC "BLACK RECTANGLE"
35775\u25AD "WHITE RECTANGLE"
35776\u25AE "BLACK VERTICAL RECTANGLE"
35777\u25AF "WHITE VERTICAL RECTANGLE"
35778\u25B0 "BLACK PARALLELOGRAM"
35779\u25B1 "WHITE PARALLELOGRAM"
35780\u25B2 "BLACK UP-POINTING TRIANGLE"
35781\u25B3 "WHITE UP-POINTING TRIANGLE"
35782\u25B4 "BLACK UP-POINTING SMALL TRIANGLE"
35783\u25B5 "WHITE UP-POINTING SMALL TRIANGLE"
35784\u25B6 "BLACK RIGHT-POINTING TRIANGLE"
35785\u25B7 "WHITE RIGHT-POINTING TRIANGLE"
35786\u25B8 "BLACK RIGHT-POINTING SMALL TRIANGLE"
35787\u25B9 "WHITE RIGHT-POINTING SMALL TRIANGLE"
35788\u25BA "BLACK RIGHT-POINTING POINTER"
35789\u25BB "WHITE RIGHT-POINTING POINTER"
35790\u25BC "BLACK DOWN-POINTING TRIANGLE"
35791\u25BD "WHITE DOWN-POINTING TRIANGLE"
35792\u25BE "BLACK DOWN-POINTING SMALL TRIANGLE"
35793\u25BF "WHITE DOWN-POINTING SMALL TRIANGLE"
35794\u25C0 "BLACK LEFT-POINTING TRIANGLE"
35795\u25C1 "WHITE LEFT-POINTING TRIANGLE"
35796\u25C2 "BLACK LEFT-POINTING SMALL TRIANGLE"
35797\u25C3 "WHITE LEFT-POINTING SMALL TRIANGLE"
35798\u25C4 "BLACK LEFT-POINTING POINTER"
35799\u25C5 "WHITE LEFT-POINTING POINTER"
35800\u25C6 "BLACK DIAMOND"
35801\u25C7 "WHITE DIAMOND"
35802\u25C8 "WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND"
35803\u25C9 "FISHEYE"
35804\u25CA "LOZENGE"
35805\u25CB "WHITE CIRCLE"
35806\u25CC "DOTTED CIRCLE"
35807\u25CD "CIRCLE WITH VERTICAL FILL"
35808\u25CE "BULLSEYE"
35809\u25CF "BLACK CIRCLE"
35810\u25D0 "CIRCLE WITH LEFT HALF BLACK"
35811\u25D1 "CIRCLE WITH RIGHT HALF BLACK"
35812\u25D2 "CIRCLE WITH LOWER HALF BLACK"
35813\u25D3 "CIRCLE WITH UPPER HALF BLACK"
35814\u25D4 "CIRCLE WITH UPPER RIGHT QUADRANT BLACK"
35815\u25D5 "CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK"
35816\u25D6 "LEFT HALF BLACK CIRCLE"
35817\u25D7 "RIGHT HALF BLACK CIRCLE"
35818\u25D8 "INVERSE BULLET"
35819\u25D9 "INVERSE WHITE CIRCLE"
35820\u25DA "UPPER HALF INVERSE WHITE CIRCLE"
35821\u25DB "LOWER HALF INVERSE WHITE CIRCLE"
35822\u25DC "UPPER LEFT QUADRANT CIRCULAR ARC"
35823\u25DD "UPPER RIGHT QUADRANT CIRCULAR ARC"
35824\u25DE "LOWER RIGHT QUADRANT CIRCULAR ARC"
35825\u25DF "LOWER LEFT QUADRANT CIRCULAR ARC"
35826\u25E0 "UPPER HALF CIRCLE"
35827\u25E1 "LOWER HALF CIRCLE"
35828\u25E2 "BLACK LOWER RIGHT TRIANGLE"
35829\u25E3 "BLACK LOWER LEFT TRIANGLE"
35830\u25E4 "BLACK UPPER LEFT TRIANGLE"
35831\u25E5 "BLACK UPPER RIGHT TRIANGLE"
35832\u25E6 "WHITE BULLET"
35833\u25E7 "SQUARE WITH LEFT HALF BLACK"
35834\u25E8 "SQUARE WITH RIGHT HALF BLACK"
35835\u25E9 "SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK"
35836\u25EA "SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK"
35837\u25EB "WHITE SQUARE WITH VERTICAL BISECTING LINE"
35838\u25EC "WHITE UP-POINTING TRIANGLE WITH DOT"
35839\u25ED "UP-POINTING TRIANGLE WITH LEFT HALF BLACK"
35840\u25EE "UP-POINTING TRIANGLE WITH RIGHT HALF BLACK"
35841\u25EF "LARGE CIRCLE"
35842\u25F0 "WHITE SQUARE WITH UPPER LEFT QUADRANT"
35843\u25F1 "WHITE SQUARE WITH LOWER LEFT QUADRANT"
35844\u25F2 "WHITE SQUARE WITH LOWER RIGHT QUADRANT"
35845\u25F3 "WHITE SQUARE WITH UPPER RIGHT QUADRANT"
35846\u25F4 "WHITE CIRCLE WITH UPPER LEFT QUADRANT"
35847\u25F5 "WHITE CIRCLE WITH LOWER LEFT QUADRANT"
35848\u25F6 "WHITE CIRCLE WITH LOWER RIGHT QUADRANT"
35849\u25F7 "WHITE CIRCLE WITH UPPER RIGHT QUADRANT"
35850\u25F8 "UPPER LEFT TRIANGLE"
35851\u25F9 "UPPER RIGHT TRIANGLE"
35852\u25FA "LOWER LEFT TRIANGLE"
35853\u25FB "WHITE MEDIUM SQUARE"
35854\u25FC "BLACK MEDIUM SQUARE"
35855\u25FD "WHITE MEDIUM SMALL SQUARE"
35856\u25FE "BLACK MEDIUM SMALL SQUARE"
35857\u25FF "LOWER RIGHT TRIANGLE"
35858\u2600 "BLACK SUN WITH RAYS"
35859\u2601 "CLOUD"
35860\u2602 "UMBRELLA"
35861\u2603 "SNOWMAN"
35862\u2604 "COMET"
35863\u2605 "BLACK STAR"
35864\u2606 "WHITE STAR"
35865\u2607 "LIGHTNING"
35866\u2608 "THUNDERSTORM"
35867\u2609 "SUN"
35868\u260A "ASCENDING NODE"
35869\u260B "DESCENDING NODE"
35870\u260C "CONJUNCTION"
35871\u260D "OPPOSITION"
35872\u260E "BLACK TELEPHONE"
35873\u260F "WHITE TELEPHONE"
35874\u2610 "BALLOT BOX"
35875\u2611 "BALLOT BOX WITH CHECK"
35876\u2612 "BALLOT BOX WITH X"
35877\u2613 "SALTIRE"
35878\u2614 "UMBRELLA WITH RAIN DROPS"
35879\u2615 "HOT BEVERAGE"
35880\u2616 "WHITE SHOGI PIECE"
35881\u2617 "BLACK SHOGI PIECE"
35882\u2618 "SHAMROCK"
35883\u2619 "REVERSED ROTATED FLORAL HEART BULLET"
35884\u261A "BLACK LEFT POINTING INDEX"
35885\u261B "BLACK RIGHT POINTING INDEX"
35886\u261C "WHITE LEFT POINTING INDEX"
35887\u261D "WHITE UP POINTING INDEX"
35888\u261E "WHITE RIGHT POINTING INDEX"
35889\u261F "WHITE DOWN POINTING INDEX"
35890\u2620 "SKULL AND CROSSBONES"
35891\u2621 "CAUTION SIGN"
35892\u2622 "RADIOACTIVE SIGN"
35893\u2623 "BIOHAZARD SIGN"
35894\u2624 "CADUCEUS"
35895\u2625 "ANKH"
35896\u2626 "ORTHODOX CROSS"
35897\u2627 "CHI RHO"
35898\u2628 "CROSS OF LORRAINE"
35899\u2629 "CROSS OF JERUSALEM"
35900\u262A "STAR AND CRESCENT"
35901\u262B "FARSI SYMBOL"
35902\u262C "ADI SHAKTI"
35903\u262D "HAMMER AND SICKLE"
35904\u262E "PEACE SYMBOL"
35905\u262F "YIN YANG"
35906\u2630 "TRIGRAM FOR HEAVEN"
35907\u2631 "TRIGRAM FOR LAKE"
35908\u2632 "TRIGRAM FOR FIRE"
35909\u2633 "TRIGRAM FOR THUNDER"
35910\u2634 "TRIGRAM FOR WIND"
35911\u2635 "TRIGRAM FOR WATER"
35912\u2636 "TRIGRAM FOR MOUNTAIN"
35913\u2637 "TRIGRAM FOR EARTH"
35914\u2638 "WHEEL OF DHARMA"
35915\u2639 "WHITE FROWNING FACE"
35916\u263A "WHITE SMILING FACE"
35917\u263B "BLACK SMILING FACE"
35918\u263C "WHITE SUN WITH RAYS"
35919\u263D "FIRST QUARTER MOON"
35920\u263E "LAST QUARTER MOON"
35921\u263F "MERCURY"
35922\u2640 "FEMALE SIGN"
35923\u2641 "EARTH"
35924\u2642 "MALE SIGN"
35925\u2643 "JUPITER"
35926\u2644 "SATURN"
35927\u2645 "URANUS"
35928\u2646 "NEPTUNE"
35929\u2647 "PLUTO"
35930\u2648 "ARIES"
35931\u2649 "TAURUS"
35932\u264A "GEMINI"
35933\u264B "CANCER"
35934\u264C "LEO"
35935\u264D "VIRGO"
35936\u264E "LIBRA"
35937\u264F "SCORPIUS"
35938\u2650 "SAGITTARIUS"
35939\u2651 "CAPRICORN"
35940\u2652 "AQUARIUS"
35941\u2653 "PISCES"
35942\u2654 "WHITE CHESS KING"
35943\u2655 "WHITE CHESS QUEEN"
35944\u2656 "WHITE CHESS ROOK"
35945\u2657 "WHITE CHESS BISHOP"
35946\u2658 "WHITE CHESS KNIGHT"
35947\u2659 "WHITE CHESS PAWN"
35948\u265A "BLACK CHESS KING"
35949\u265B "BLACK CHESS QUEEN"
35950\u265C "BLACK CHESS ROOK"
35951\u265D "BLACK CHESS BISHOP"
35952\u265E "BLACK CHESS KNIGHT"
35953\u265F "BLACK CHESS PAWN"
35954\u2660 "BLACK SPADE SUIT"
35955\u2661 "WHITE HEART SUIT"
35956\u2662 "WHITE DIAMOND SUIT"
35957\u2663 "BLACK CLUB SUIT"
35958\u2664 "WHITE SPADE SUIT"
35959\u2665 "BLACK HEART SUIT"
35960\u2666 "BLACK DIAMOND SUIT"
35961\u2667 "WHITE CLUB SUIT"
35962\u2668 "HOT SPRINGS"
35963\u2669 "QUARTER NOTE"
35964\u266A "EIGHTH NOTE"
35965\u266B "BEAMED EIGHTH NOTES"
35966\u266C "BEAMED SIXTEENTH NOTES"
35967\u266D "MUSIC FLAT SIGN"
35968\u266E "MUSIC NATURAL SIGN"
35969\u266F "MUSIC SHARP SIGN"
35970\u2670 "WEST SYRIAC CROSS"
35971\u2671 "EAST SYRIAC CROSS"
35972\u2672 "UNIVERSAL RECYCLING SYMBOL"
35973\u2673 "RECYCLING SYMBOL FOR TYPE-1 PLASTICS"
35974\u2674 "RECYCLING SYMBOL FOR TYPE-2 PLASTICS"
35975\u2675 "RECYCLING SYMBOL FOR TYPE-3 PLASTICS"
35976\u2676 "RECYCLING SYMBOL FOR TYPE-4 PLASTICS"
35977\u2677 "RECYCLING SYMBOL FOR TYPE-5 PLASTICS"
35978\u2678 "RECYCLING SYMBOL FOR TYPE-6 PLASTICS"
35979\u2679 "RECYCLING SYMBOL FOR TYPE-7 PLASTICS"
35980\u267A "RECYCLING SYMBOL FOR GENERIC MATERIALS"
35981\u267B "BLACK UNIVERSAL RECYCLING SYMBOL"
35982\u267C "RECYCLED PAPER SYMBOL"
35983\u267D "PARTIALLY-RECYCLED PAPER SYMBOL"
35984\u267E "PERMANENT PAPER SIGN"
35985\u267F "WHEELCHAIR SYMBOL"
35986\u2680 "DIE FACE-1"
35987\u2681 "DIE FACE-2"
35988\u2682 "DIE FACE-3"
35989\u2683 "DIE FACE-4"
35990\u2684 "DIE FACE-5"
35991\u2685 "DIE FACE-6"
35992\u2686 "WHITE CIRCLE WITH DOT RIGHT"
35993\u2687 "WHITE CIRCLE WITH TWO DOTS"
35994\u2688 "BLACK CIRCLE WITH WHITE DOT RIGHT"
35995\u2689 "BLACK CIRCLE WITH TWO WHITE DOTS"
35996\u268A "MONOGRAM FOR YANG"
35997\u268B "MONOGRAM FOR YIN"
35998\u268C "DIGRAM FOR GREATER YANG"
35999\u268D "DIGRAM FOR LESSER YIN"
36000\u268E "DIGRAM FOR LESSER YANG"
36001\u268F "DIGRAM FOR GREATER YIN"
36002\u2690 "WHITE FLAG"
36003\u2691 "BLACK FLAG"
36004\u2692 "HAMMER AND PICK"
36005\u2693 "ANCHOR"
36006\u2694 "CROSSED SWORDS"
36007\u2695 "STAFF OF AESCULAPIUS"
36008\u2696 "SCALES"
36009\u2697 "ALEMBIC"
36010\u2698 "FLOWER"
36011\u2699 "GEAR"
36012\u269A "STAFF OF HERMES"
36013\u269B "ATOM SYMBOL"
36014\u269C "FLEUR-DE-LIS"
36015\u269D "OUTLINED WHITE STAR"
36016\u26A0 "WARNING SIGN"
36017\u26A1 "HIGH VOLTAGE SIGN"
36018\u26A2 "DOUBLED FEMALE SIGN"
36019\u26A3 "DOUBLED MALE SIGN"
36020\u26A4 "INTERLOCKED FEMALE AND MALE SIGN"
36021\u26A5 "MALE AND FEMALE SIGN"
36022\u26A6 "MALE WITH STROKE SIGN"
36023\u26A7 "MALE WITH STROKE AND MALE AND FEMALE SIGN"
36024\u26A8 "VERTICAL MALE WITH STROKE SIGN"
36025\u26A9 "HORIZONTAL MALE WITH STROKE SIGN"
36026\u26AA "MEDIUM WHITE CIRCLE"
36027\u26AB "MEDIUM BLACK CIRCLE"
36028\u26AC "MEDIUM SMALL WHITE CIRCLE"
36029\u26AD "MARRIAGE SYMBOL"
36030\u26AE "DIVORCE SYMBOL"
36031\u26AF "UNMARRIED PARTNERSHIP SYMBOL"
36032\u26B0 "COFFIN"
36033\u26B1 "FUNERAL URN"
36034\u26B2 "NEUTER"
36035\u26B3 "CERES"
36036\u26B4 "PALLAS"
36037\u26B5 "JUNO"
36038\u26B6 "VESTA"
36039\u26B7 "CHIRON"
36040\u26B8 "BLACK MOON LILITH"
36041\u26B9 "SEXTILE"
36042\u26BA "SEMISEXTILE"
36043\u26BB "QUINCUNX"
36044\u26BC "SESQUIQUADRATE"
36045\u26C0 "WHITE DRAUGHTS MAN"
36046\u26C1 "WHITE DRAUGHTS KING"
36047\u26C2 "BLACK DRAUGHTS MAN"
36048\u26C3 "BLACK DRAUGHTS KING"
36049\u2701 "UPPER BLADE SCISSORS"
36050\u2702 "BLACK SCISSORS"
36051\u2703 "LOWER BLADE SCISSORS"
36052\u2704 "WHITE SCISSORS"
36053\u2706 "TELEPHONE LOCATION SIGN"
36054\u2707 "TAPE DRIVE"
36055\u2708 "AIRPLANE"
36056\u2709 "ENVELOPE"
36057\u270C "VICTORY HAND"
36058\u270D "WRITING HAND"
36059\u270E "LOWER RIGHT PENCIL"
36060\u270F "PENCIL"
36061\u2710 "UPPER RIGHT PENCIL"
36062\u2711 "WHITE NIB"
36063\u2712 "BLACK NIB"
36064\u2713 "CHECK MARK"
36065\u2714 "HEAVY CHECK MARK"
36066\u2715 "MULTIPLICATION X"
36067\u2716 "HEAVY MULTIPLICATION X"
36068\u2717 "BALLOT X"
36069\u2718 "HEAVY BALLOT X"
36070\u2719 "OUTLINED GREEK CROSS"
36071\u271A "HEAVY GREEK CROSS"
36072\u271B "OPEN CENTRE CROSS"
36073\u271C "HEAVY OPEN CENTRE CROSS"
36074\u271D "LATIN CROSS"
36075\u271E "SHADOWED WHITE LATIN CROSS"
36076\u271F "OUTLINED LATIN CROSS"
36077\u2720 "MALTESE CROSS"
36078\u2721 "STAR OF DAVID"
36079\u2722 "FOUR TEARDROP-SPOKED ASTERISK"
36080\u2723 "FOUR BALLOON-SPOKED ASTERISK"
36081\u2724 "HEAVY FOUR BALLOON-SPOKED ASTERISK"
36082\u2725 "FOUR CLUB-SPOKED ASTERISK"
36083\u2726 "BLACK FOUR POINTED STAR"
36084\u2727 "WHITE FOUR POINTED STAR"
36085\u2729 "STRESS OUTLINED WHITE STAR"
36086\u272A "CIRCLED WHITE STAR"
36087\u272B "OPEN CENTRE BLACK STAR"
36088\u272C "BLACK CENTRE WHITE STAR"
36089\u272D "OUTLINED BLACK STAR"
36090\u272E "HEAVY OUTLINED BLACK STAR"
36091\u272F "PINWHEEL STAR"
36092\u2730 "SHADOWED WHITE STAR"
36093\u2731 "HEAVY ASTERISK"
36094\u2732 "OPEN CENTRE ASTERISK"
36095\u2733 "EIGHT SPOKED ASTERISK"
36096\u2734 "EIGHT POINTED BLACK STAR"
36097\u2735 "EIGHT POINTED PINWHEEL STAR"
36098\u2736 "SIX POINTED BLACK STAR"
36099\u2737 "EIGHT POINTED RECTILINEAR BLACK STAR"
36100\u2738 "HEAVY EIGHT POINTED RECTILINEAR BLACK STAR"
36101\u2739 "TWELVE POINTED BLACK STAR"
36102\u273A "SIXTEEN POINTED ASTERISK"
36103\u273B "TEARDROP-SPOKED ASTERISK"
36104\u273C "OPEN CENTRE TEARDROP-SPOKED ASTERISK"
36105\u273D "HEAVY TEARDROP-SPOKED ASTERISK"
36106\u273E "SIX PETALLED BLACK AND WHITE FLORETTE"
36107\u273F "BLACK FLORETTE"
36108\u2740 "WHITE FLORETTE"
36109\u2741 "EIGHT PETALLED OUTLINED BLACK FLORETTE"
36110\u2742 "CIRCLED OPEN CENTRE EIGHT POINTED STAR"
36111\u2743 "HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK"
36112\u2744 "SNOWFLAKE"
36113\u2745 "TIGHT TRIFOLIATE SNOWFLAKE"
36114\u2746 "HEAVY CHEVRON SNOWFLAKE"
36115\u2747 "SPARKLE"
36116\u2748 "HEAVY SPARKLE"
36117\u2749 "BALLOON-SPOKED ASTERISK"
36118\u274A "EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
36119\u274B "HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK"
36120\u274D "SHADOWED WHITE CIRCLE"
36121\u274F "LOWER RIGHT DROP-SHADOWED WHITE SQUARE"
36122\u2750 "UPPER RIGHT DROP-SHADOWED WHITE SQUARE"
36123\u2751 "LOWER RIGHT SHADOWED WHITE SQUARE"
36124\u2752 "UPPER RIGHT SHADOWED WHITE SQUARE"
36125\u2756 "BLACK DIAMOND MINUS WHITE X"
36126\u2758 "LIGHT VERTICAL BAR"
36127\u2759 "MEDIUM VERTICAL BAR"
36128\u275A "HEAVY VERTICAL BAR"
36129\u275B "HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT"
36130\u275C "HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT"
36131\u275D "HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT"
36132\u275E "HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT"
36133\u2761 "CURVED STEM PARAGRAPH SIGN ORNAMENT"
36134\u2762 "HEAVY EXCLAMATION MARK ORNAMENT"
36135\u2763 "HEAVY HEART EXCLAMATION MARK ORNAMENT"
36136\u2764 "HEAVY BLACK HEART"
36137\u2765 "ROTATED HEAVY BLACK HEART BULLET"
36138\u2766 "FLORAL HEART"
36139\u2767 "ROTATED FLORAL HEART BULLET"
36140\u2768 "MEDIUM LEFT PARENTHESIS ORNAMENT"
36141\u2769 "MEDIUM RIGHT PARENTHESIS ORNAMENT"
36142\u276A "MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT"
36143\u276B "MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT"
36144\u276C "MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT"
36145\u276D "MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT"
36146\u276E "HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT"
36147\u276F "HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT"
36148\u2770 "HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT"
36149\u2771 "HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT"
36150\u2772 "LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT"
36151\u2773 "LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT"
36152\u2774 "MEDIUM LEFT CURLY BRACKET ORNAMENT"
36153\u2775 "MEDIUM RIGHT CURLY BRACKET ORNAMENT"
36154\u2776 "DINGBAT NEGATIVE CIRCLED DIGIT ONE"
36155\u2777 "DINGBAT NEGATIVE CIRCLED DIGIT TWO"
36156\u2778 "DINGBAT NEGATIVE CIRCLED DIGIT THREE"
36157\u2779 "DINGBAT NEGATIVE CIRCLED DIGIT FOUR"
36158\u277A "DINGBAT NEGATIVE CIRCLED DIGIT FIVE"
36159\u277B "DINGBAT NEGATIVE CIRCLED DIGIT SIX"
36160\u277C "DINGBAT NEGATIVE CIRCLED DIGIT SEVEN"
36161\u277D "DINGBAT NEGATIVE CIRCLED DIGIT EIGHT"
36162\u277E "DINGBAT NEGATIVE CIRCLED DIGIT NINE"
36163\u277F "DINGBAT NEGATIVE CIRCLED NUMBER TEN"
36164\u2780 "DINGBAT CIRCLED SANS-SERIF DIGIT ONE"
36165\u2781 "DINGBAT CIRCLED SANS-SERIF DIGIT TWO"
36166\u2782 "DINGBAT CIRCLED SANS-SERIF DIGIT THREE"
36167\u2783 "DINGBAT CIRCLED SANS-SERIF DIGIT FOUR"
36168\u2784 "DINGBAT CIRCLED SANS-SERIF DIGIT FIVE"
36169\u2785 "DINGBAT CIRCLED SANS-SERIF DIGIT SIX"
36170\u2786 "DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN"
36171\u2787 "DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT"
36172\u2788 "DINGBAT CIRCLED SANS-SERIF DIGIT NINE"
36173\u2789 "DINGBAT CIRCLED SANS-SERIF NUMBER TEN"
36174\u278A "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE"
36175\u278B "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO"
36176\u278C "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE"
36177\u278D "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR"
36178\u278E "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE"
36179\u278F "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX"
36180\u2790 "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN"
36181\u2791 "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT"
36182\u2792 "DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE"
36183\u2793 "DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN"
36184\u2794 "HEAVY WIDE-HEADED RIGHTWARDS ARROW"
36185\u2798 "HEAVY SOUTH EAST ARROW"
36186\u2799 "HEAVY RIGHTWARDS ARROW"
36187\u279A "HEAVY NORTH EAST ARROW"
36188\u279B "DRAFTING POINT RIGHTWARDS ARROW"
36189\u279C "HEAVY ROUND-TIPPED RIGHTWARDS ARROW"
36190\u279D "TRIANGLE-HEADED RIGHTWARDS ARROW"
36191\u279E "HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW"
36192\u279F "DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
36193\u27A0 "HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW"
36194\u27A1 "BLACK RIGHTWARDS ARROW"
36195\u27A2 "THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD"
36196\u27A3 "THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD"
36197\u27A4 "BLACK RIGHTWARDS ARROWHEAD"
36198\u27A5 "HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW"
36199\u27A6 "HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW"
36200\u27A7 "SQUAT BLACK RIGHTWARDS ARROW"
36201\u27A8 "HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW"
36202\u27A9 "RIGHT-SHADED WHITE RIGHTWARDS ARROW"
36203\u27AA "LEFT-SHADED WHITE RIGHTWARDS ARROW"
36204\u27AB "BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
36205\u27AC "FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW"
36206\u27AD "HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
36207\u27AE "HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
36208\u27AF "NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
36209\u27B1 "NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW"
36210\u27B2 "CIRCLED HEAVY WHITE RIGHTWARDS ARROW"
36211\u27B3 "WHITE-FEATHERED RIGHTWARDS ARROW"
36212\u27B4 "BLACK-FEATHERED SOUTH EAST ARROW"
36213\u27B5 "BLACK-FEATHERED RIGHTWARDS ARROW"
36214\u27B6 "BLACK-FEATHERED NORTH EAST ARROW"
36215\u27B7 "HEAVY BLACK-FEATHERED SOUTH EAST ARROW"
36216\u27B8 "HEAVY BLACK-FEATHERED RIGHTWARDS ARROW"
36217\u27B9 "HEAVY BLACK-FEATHERED NORTH EAST ARROW"
36218\u27BA "TEARDROP-BARBED RIGHTWARDS ARROW"
36219\u27BB "HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW"
36220\u27BC "WEDGE-TAILED RIGHTWARDS ARROW"
36221\u27BD "HEAVY WEDGE-TAILED RIGHTWARDS ARROW"
36222\u27BE "OPEN-OUTLINED RIGHTWARDS ARROW"
36223\u27C0 "THREE DIMENSIONAL ANGLE"
36224\u27C1 "WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE"
36225\u27C2 "PERPENDICULAR"
36226\u27C3 "OPEN SUBSET"
36227\u27C4 "OPEN SUPERSET"
36228\u27C5 "LEFT S-SHAPED BAG DELIMITER"
36229\u27C6 "RIGHT S-SHAPED BAG DELIMITER"
36230\u27C7 "OR WITH DOT INSIDE"
36231\u27C8 "REVERSE SOLIDUS PRECEDING SUBSET"
36232\u27C9 "SUPERSET PRECEDING SOLIDUS"
36233\u27CA "VERTICAL BAR WITH HORIZONTAL STROKE"
36234\u27CC "LONG DIVISION"
36235\u27D0 "WHITE DIAMOND WITH CENTRED DOT"
36236\u27D1 "AND WITH DOT"
36237\u27D2 "ELEMENT OF OPENING UPWARDS"
36238\u27D3 "LOWER RIGHT CORNER WITH DOT"
36239\u27D4 "UPPER LEFT CORNER WITH DOT"
36240\u27D5 "LEFT OUTER JOIN"
36241\u27D6 "RIGHT OUTER JOIN"
36242\u27D7 "FULL OUTER JOIN"
36243\u27D8 "LARGE UP TACK"
36244\u27D9 "LARGE DOWN TACK"
36245\u27DA "LEFT AND RIGHT DOUBLE TURNSTILE"
36246\u27DB "LEFT AND RIGHT TACK"
36247\u27DC "LEFT MULTIMAP"
36248\u27DD "LONG RIGHT TACK"
36249\u27DE "LONG LEFT TACK"
36250\u27DF "UP TACK WITH CIRCLE ABOVE"
36251\u27E0 "LOZENGE DIVIDED BY HORIZONTAL RULE"
36252\u27E1 "WHITE CONCAVE-SIDED DIAMOND"
36253\u27E2 "WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK"
36254\u27E3 "WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK"
36255\u27E4 "WHITE SQUARE WITH LEFTWARDS TICK"
36256\u27E5 "WHITE SQUARE WITH RIGHTWARDS TICK"
36257\u27E6 "MATHEMATICAL LEFT WHITE SQUARE BRACKET"
36258\u27E7 "MATHEMATICAL RIGHT WHITE SQUARE BRACKET"
36259\u27E8 "MATHEMATICAL LEFT ANGLE BRACKET"
36260\u27E9 "MATHEMATICAL RIGHT ANGLE BRACKET"
36261\u27EA "MATHEMATICAL LEFT DOUBLE ANGLE BRACKET"
36262\u27EB "MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET"
36263\u27EC "MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET"
36264\u27ED "MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET"
36265\u27EE "MATHEMATICAL LEFT FLATTENED PARENTHESIS"
36266\u27EF "MATHEMATICAL RIGHT FLATTENED PARENTHESIS"
36267\u27F0 "UPWARDS QUADRUPLE ARROW"
36268\u27F1 "DOWNWARDS QUADRUPLE ARROW"
36269\u27F2 "ANTICLOCKWISE GAPPED CIRCLE ARROW"
36270\u27F3 "CLOCKWISE GAPPED CIRCLE ARROW"
36271\u27F4 "RIGHT ARROW WITH CIRCLED PLUS"
36272\u27F5 "LONG LEFTWARDS ARROW"
36273\u27F6 "LONG RIGHTWARDS ARROW"
36274\u27F7 "LONG LEFT RIGHT ARROW"
36275\u27F8 "LONG LEFTWARDS DOUBLE ARROW"
36276\u27F9 "LONG RIGHTWARDS DOUBLE ARROW"
36277\u27FA "LONG LEFT RIGHT DOUBLE ARROW"
36278\u27FB "LONG LEFTWARDS ARROW FROM BAR"
36279\u27FC "LONG RIGHTWARDS ARROW FROM BAR"
36280\u27FD "LONG LEFTWARDS DOUBLE ARROW FROM BAR"
36281\u27FE "LONG RIGHTWARDS DOUBLE ARROW FROM BAR"
36282\u27FF "LONG RIGHTWARDS SQUIGGLE ARROW"
36283\u2800 "BRAILLE PATTERN BLANK"
36284\u2801 "BRAILLE PATTERN DOTS-1"
36285\u2802 "BRAILLE PATTERN DOTS-2"
36286\u2803 "BRAILLE PATTERN DOTS-12"
36287\u2804 "BRAILLE PATTERN DOTS-3"
36288\u2805 "BRAILLE PATTERN DOTS-13"
36289\u2806 "BRAILLE PATTERN DOTS-23"
36290\u2807 "BRAILLE PATTERN DOTS-123"
36291\u2808 "BRAILLE PATTERN DOTS-4"
36292\u2809 "BRAILLE PATTERN DOTS-14"
36293\u280A "BRAILLE PATTERN DOTS-24"
36294\u280B "BRAILLE PATTERN DOTS-124"
36295\u280C "BRAILLE PATTERN DOTS-34"
36296\u280D "BRAILLE PATTERN DOTS-134"
36297\u280E "BRAILLE PATTERN DOTS-234"
36298\u280F "BRAILLE PATTERN DOTS-1234"
36299\u2810 "BRAILLE PATTERN DOTS-5"
36300\u2811 "BRAILLE PATTERN DOTS-15"
36301\u2812 "BRAILLE PATTERN DOTS-25"
36302\u2813 "BRAILLE PATTERN DOTS-125"
36303\u2814 "BRAILLE PATTERN DOTS-35"
36304\u2815 "BRAILLE PATTERN DOTS-135"
36305\u2816 "BRAILLE PATTERN DOTS-235"
36306\u2817 "BRAILLE PATTERN DOTS-1235"
36307\u2818 "BRAILLE PATTERN DOTS-45"
36308\u2819 "BRAILLE PATTERN DOTS-145"
36309\u281A "BRAILLE PATTERN DOTS-245"
36310\u281B "BRAILLE PATTERN DOTS-1245"
36311\u281C "BRAILLE PATTERN DOTS-345"
36312\u281D "BRAILLE PATTERN DOTS-1345"
36313\u281E "BRAILLE PATTERN DOTS-2345"
36314\u281F "BRAILLE PATTERN DOTS-12345"
36315\u2820 "BRAILLE PATTERN DOTS-6"
36316\u2821 "BRAILLE PATTERN DOTS-16"
36317\u2822 "BRAILLE PATTERN DOTS-26"
36318\u2823 "BRAILLE PATTERN DOTS-126"
36319\u2824 "BRAILLE PATTERN DOTS-36"
36320\u2825 "BRAILLE PATTERN DOTS-136"
36321\u2826 "BRAILLE PATTERN DOTS-236"
36322\u2827 "BRAILLE PATTERN DOTS-1236"
36323\u2828 "BRAILLE PATTERN DOTS-46"
36324\u2829 "BRAILLE PATTERN DOTS-146"
36325\u282A "BRAILLE PATTERN DOTS-246"
36326\u282B "BRAILLE PATTERN DOTS-1246"
36327\u282C "BRAILLE PATTERN DOTS-346"
36328\u282D "BRAILLE PATTERN DOTS-1346"
36329\u282E "BRAILLE PATTERN DOTS-2346"
36330\u282F "BRAILLE PATTERN DOTS-12346"
36331\u2830 "BRAILLE PATTERN DOTS-56"
36332\u2831 "BRAILLE PATTERN DOTS-156"
36333\u2832 "BRAILLE PATTERN DOTS-256"
36334\u2833 "BRAILLE PATTERN DOTS-1256"
36335\u2834 "BRAILLE PATTERN DOTS-356"
36336\u2835 "BRAILLE PATTERN DOTS-1356"
36337\u2836 "BRAILLE PATTERN DOTS-2356"
36338\u2837 "BRAILLE PATTERN DOTS-12356"
36339\u2838 "BRAILLE PATTERN DOTS-456"
36340\u2839 "BRAILLE PATTERN DOTS-1456"
36341\u283A "BRAILLE PATTERN DOTS-2456"
36342\u283B "BRAILLE PATTERN DOTS-12456"
36343\u283C "BRAILLE PATTERN DOTS-3456"
36344\u283D "BRAILLE PATTERN DOTS-13456"
36345\u283E "BRAILLE PATTERN DOTS-23456"
36346\u283F "BRAILLE PATTERN DOTS-123456"
36347\u2840 "BRAILLE PATTERN DOTS-7"
36348\u2841 "BRAILLE PATTERN DOTS-17"
36349\u2842 "BRAILLE PATTERN DOTS-27"
36350\u2843 "BRAILLE PATTERN DOTS-127"
36351\u2844 "BRAILLE PATTERN DOTS-37"
36352\u2845 "BRAILLE PATTERN DOTS-137"
36353\u2846 "BRAILLE PATTERN DOTS-237"
36354\u2847 "BRAILLE PATTERN DOTS-1237"
36355\u2848 "BRAILLE PATTERN DOTS-47"
36356\u2849 "BRAILLE PATTERN DOTS-147"
36357\u284A "BRAILLE PATTERN DOTS-247"
36358\u284B "BRAILLE PATTERN DOTS-1247"
36359\u284C "BRAILLE PATTERN DOTS-347"
36360\u284D "BRAILLE PATTERN DOTS-1347"
36361\u284E "BRAILLE PATTERN DOTS-2347"
36362\u284F "BRAILLE PATTERN DOTS-12347"
36363\u2850 "BRAILLE PATTERN DOTS-57"
36364\u2851 "BRAILLE PATTERN DOTS-157"
36365\u2852 "BRAILLE PATTERN DOTS-257"
36366\u2853 "BRAILLE PATTERN DOTS-1257"
36367\u2854 "BRAILLE PATTERN DOTS-357"
36368\u2855 "BRAILLE PATTERN DOTS-1357"
36369\u2856 "BRAILLE PATTERN DOTS-2357"
36370\u2857 "BRAILLE PATTERN DOTS-12357"
36371\u2858 "BRAILLE PATTERN DOTS-457"
36372\u2859 "BRAILLE PATTERN DOTS-1457"
36373\u285A "BRAILLE PATTERN DOTS-2457"
36374\u285B "BRAILLE PATTERN DOTS-12457"
36375\u285C "BRAILLE PATTERN DOTS-3457"
36376\u285D "BRAILLE PATTERN DOTS-13457"
36377\u285E "BRAILLE PATTERN DOTS-23457"
36378\u285F "BRAILLE PATTERN DOTS-123457"
36379\u2860 "BRAILLE PATTERN DOTS-67"
36380\u2861 "BRAILLE PATTERN DOTS-167"
36381\u2862 "BRAILLE PATTERN DOTS-267"
36382\u2863 "BRAILLE PATTERN DOTS-1267"
36383\u2864 "BRAILLE PATTERN DOTS-367"
36384\u2865 "BRAILLE PATTERN DOTS-1367"
36385\u2866 "BRAILLE PATTERN DOTS-2367"
36386\u2867 "BRAILLE PATTERN DOTS-12367"
36387\u2868 "BRAILLE PATTERN DOTS-467"
36388\u2869 "BRAILLE PATTERN DOTS-1467"
36389\u286A "BRAILLE PATTERN DOTS-2467"
36390\u286B "BRAILLE PATTERN DOTS-12467"
36391\u286C "BRAILLE PATTERN DOTS-3467"
36392\u286D "BRAILLE PATTERN DOTS-13467"
36393\u286E "BRAILLE PATTERN DOTS-23467"
36394\u286F "BRAILLE PATTERN DOTS-123467"
36395\u2870 "BRAILLE PATTERN DOTS-567"
36396\u2871 "BRAILLE PATTERN DOTS-1567"
36397\u2872 "BRAILLE PATTERN DOTS-2567"
36398\u2873 "BRAILLE PATTERN DOTS-12567"
36399\u2874 "BRAILLE PATTERN DOTS-3567"
36400\u2875 "BRAILLE PATTERN DOTS-13567"
36401\u2876 "BRAILLE PATTERN DOTS-23567"
36402\u2877 "BRAILLE PATTERN DOTS-123567"
36403\u2878 "BRAILLE PATTERN DOTS-4567"
36404\u2879 "BRAILLE PATTERN DOTS-14567"
36405\u287A "BRAILLE PATTERN DOTS-24567"
36406\u287B "BRAILLE PATTERN DOTS-124567"
36407\u287C "BRAILLE PATTERN DOTS-34567"
36408\u287D "BRAILLE PATTERN DOTS-134567"
36409\u287E "BRAILLE PATTERN DOTS-234567"
36410\u287F "BRAILLE PATTERN DOTS-1234567"
36411\u2880 "BRAILLE PATTERN DOTS-8"
36412\u2881 "BRAILLE PATTERN DOTS-18"
36413\u2882 "BRAILLE PATTERN DOTS-28"
36414\u2883 "BRAILLE PATTERN DOTS-128"
36415\u2884 "BRAILLE PATTERN DOTS-38"
36416\u2885 "BRAILLE PATTERN DOTS-138"
36417\u2886 "BRAILLE PATTERN DOTS-238"
36418\u2887 "BRAILLE PATTERN DOTS-1238"
36419\u2888 "BRAILLE PATTERN DOTS-48"
36420\u2889 "BRAILLE PATTERN DOTS-148"
36421\u288A "BRAILLE PATTERN DOTS-248"
36422\u288B "BRAILLE PATTERN DOTS-1248"
36423\u288C "BRAILLE PATTERN DOTS-348"
36424\u288D "BRAILLE PATTERN DOTS-1348"
36425\u288E "BRAILLE PATTERN DOTS-2348"
36426\u288F "BRAILLE PATTERN DOTS-12348"
36427\u2890 "BRAILLE PATTERN DOTS-58"
36428\u2891 "BRAILLE PATTERN DOTS-158"
36429\u2892 "BRAILLE PATTERN DOTS-258"
36430\u2893 "BRAILLE PATTERN DOTS-1258"
36431\u2894 "BRAILLE PATTERN DOTS-358"
36432\u2895 "BRAILLE PATTERN DOTS-1358"
36433\u2896 "BRAILLE PATTERN DOTS-2358"
36434\u2897 "BRAILLE PATTERN DOTS-12358"
36435\u2898 "BRAILLE PATTERN DOTS-458"
36436\u2899 "BRAILLE PATTERN DOTS-1458"
36437\u289A "BRAILLE PATTERN DOTS-2458"
36438\u289B "BRAILLE PATTERN DOTS-12458"
36439\u289C "BRAILLE PATTERN DOTS-3458"
36440\u289D "BRAILLE PATTERN DOTS-13458"
36441\u289E "BRAILLE PATTERN DOTS-23458"
36442\u289F "BRAILLE PATTERN DOTS-123458"
36443\u28A0 "BRAILLE PATTERN DOTS-68"
36444\u28A1 "BRAILLE PATTERN DOTS-168"
36445\u28A2 "BRAILLE PATTERN DOTS-268"
36446\u28A3 "BRAILLE PATTERN DOTS-1268"
36447\u28A4 "BRAILLE PATTERN DOTS-368"
36448\u28A5 "BRAILLE PATTERN DOTS-1368"
36449\u28A6 "BRAILLE PATTERN DOTS-2368"
36450\u28A7 "BRAILLE PATTERN DOTS-12368"
36451\u28A8 "BRAILLE PATTERN DOTS-468"
36452\u28A9 "BRAILLE PATTERN DOTS-1468"
36453\u28AA "BRAILLE PATTERN DOTS-2468"
36454\u28AB "BRAILLE PATTERN DOTS-12468"
36455\u28AC "BRAILLE PATTERN DOTS-3468"
36456\u28AD "BRAILLE PATTERN DOTS-13468"
36457\u28AE "BRAILLE PATTERN DOTS-23468"
36458\u28AF "BRAILLE PATTERN DOTS-123468"
36459\u28B0 "BRAILLE PATTERN DOTS-568"
36460\u28B1 "BRAILLE PATTERN DOTS-1568"
36461\u28B2 "BRAILLE PATTERN DOTS-2568"
36462\u28B3 "BRAILLE PATTERN DOTS-12568"
36463\u28B4 "BRAILLE PATTERN DOTS-3568"
36464\u28B5 "BRAILLE PATTERN DOTS-13568"
36465\u28B6 "BRAILLE PATTERN DOTS-23568"
36466\u28B7 "BRAILLE PATTERN DOTS-123568"
36467\u28B8 "BRAILLE PATTERN DOTS-4568"
36468\u28B9 "BRAILLE PATTERN DOTS-14568"
36469\u28BA "BRAILLE PATTERN DOTS-24568"
36470\u28BB "BRAILLE PATTERN DOTS-124568"
36471\u28BC "BRAILLE PATTERN DOTS-34568"
36472\u28BD "BRAILLE PATTERN DOTS-134568"
36473\u28BE "BRAILLE PATTERN DOTS-234568"
36474\u28BF "BRAILLE PATTERN DOTS-1234568"
36475\u28C0 "BRAILLE PATTERN DOTS-78"
36476\u28C1 "BRAILLE PATTERN DOTS-178"
36477\u28C2 "BRAILLE PATTERN DOTS-278"
36478\u28C3 "BRAILLE PATTERN DOTS-1278"
36479\u28C4 "BRAILLE PATTERN DOTS-378"
36480\u28C5 "BRAILLE PATTERN DOTS-1378"
36481\u28C6 "BRAILLE PATTERN DOTS-2378"
36482\u28C7 "BRAILLE PATTERN DOTS-12378"
36483\u28C8 "BRAILLE PATTERN DOTS-478"
36484\u28C9 "BRAILLE PATTERN DOTS-1478"
36485\u28CA "BRAILLE PATTERN DOTS-2478"
36486\u28CB "BRAILLE PATTERN DOTS-12478"
36487\u28CC "BRAILLE PATTERN DOTS-3478"
36488\u28CD "BRAILLE PATTERN DOTS-13478"
36489\u28CE "BRAILLE PATTERN DOTS-23478"
36490\u28CF "BRAILLE PATTERN DOTS-123478"
36491\u28D0 "BRAILLE PATTERN DOTS-578"
36492\u28D1 "BRAILLE PATTERN DOTS-1578"
36493\u28D2 "BRAILLE PATTERN DOTS-2578"
36494\u28D3 "BRAILLE PATTERN DOTS-12578"
36495\u28D4 "BRAILLE PATTERN DOTS-3578"
36496\u28D5 "BRAILLE PATTERN DOTS-13578"
36497\u28D6 "BRAILLE PATTERN DOTS-23578"
36498\u28D7 "BRAILLE PATTERN DOTS-123578"
36499\u28D8 "BRAILLE PATTERN DOTS-4578"
36500\u28D9 "BRAILLE PATTERN DOTS-14578"
36501\u28DA "BRAILLE PATTERN DOTS-24578"
36502\u28DB "BRAILLE PATTERN DOTS-124578"
36503\u28DC "BRAILLE PATTERN DOTS-34578"
36504\u28DD "BRAILLE PATTERN DOTS-134578"
36505\u28DE "BRAILLE PATTERN DOTS-234578"
36506\u28DF "BRAILLE PATTERN DOTS-1234578"
36507\u28E0 "BRAILLE PATTERN DOTS-678"
36508\u28E1 "BRAILLE PATTERN DOTS-1678"
36509\u28E2 "BRAILLE PATTERN DOTS-2678"
36510\u28E3 "BRAILLE PATTERN DOTS-12678"
36511\u28E4 "BRAILLE PATTERN DOTS-3678"
36512\u28E5 "BRAILLE PATTERN DOTS-13678"
36513\u28E6 "BRAILLE PATTERN DOTS-23678"
36514\u28E7 "BRAILLE PATTERN DOTS-123678"
36515\u28E8 "BRAILLE PATTERN DOTS-4678"
36516\u28E9 "BRAILLE PATTERN DOTS-14678"
36517\u28EA "BRAILLE PATTERN DOTS-24678"
36518\u28EB "BRAILLE PATTERN DOTS-124678"
36519\u28EC "BRAILLE PATTERN DOTS-34678"
36520\u28ED "BRAILLE PATTERN DOTS-134678"
36521\u28EE "BRAILLE PATTERN DOTS-234678"
36522\u28EF "BRAILLE PATTERN DOTS-1234678"
36523\u28F0 "BRAILLE PATTERN DOTS-5678"
36524\u28F1 "BRAILLE PATTERN DOTS-15678"
36525\u28F2 "BRAILLE PATTERN DOTS-25678"
36526\u28F3 "BRAILLE PATTERN DOTS-125678"
36527\u28F4 "BRAILLE PATTERN DOTS-35678"
36528\u28F5 "BRAILLE PATTERN DOTS-135678"
36529\u28F6 "BRAILLE PATTERN DOTS-235678"
36530\u28F7 "BRAILLE PATTERN DOTS-1235678"
36531\u28F8 "BRAILLE PATTERN DOTS-45678"
36532\u28F9 "BRAILLE PATTERN DOTS-145678"
36533\u28FA "BRAILLE PATTERN DOTS-245678"
36534\u28FB "BRAILLE PATTERN DOTS-1245678"
36535\u28FC "BRAILLE PATTERN DOTS-345678"
36536\u28FD "BRAILLE PATTERN DOTS-1345678"
36537\u28FE "BRAILLE PATTERN DOTS-2345678"
36538\u28FF "BRAILLE PATTERN DOTS-12345678"
36539\u2900 "RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE"
36540\u2901 "RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE"
36541\u2902 "LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE"
36542\u2903 "RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE"
36543\u2904 "LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE"
36544\u2905 "RIGHTWARDS TWO-HEADED ARROW FROM BAR"
36545\u2906 "LEFTWARDS DOUBLE ARROW FROM BAR"
36546\u2907 "RIGHTWARDS DOUBLE ARROW FROM BAR"
36547\u2908 "DOWNWARDS ARROW WITH HORIZONTAL STROKE"
36548\u2909 "UPWARDS ARROW WITH HORIZONTAL STROKE"
36549\u290A "UPWARDS TRIPLE ARROW"
36550\u290B "DOWNWARDS TRIPLE ARROW"
36551\u290C "LEFTWARDS DOUBLE DASH ARROW"
36552\u290D "RIGHTWARDS DOUBLE DASH ARROW"
36553\u290E "LEFTWARDS TRIPLE DASH ARROW"
36554\u290F "RIGHTWARDS TRIPLE DASH ARROW"
36555\u2910 "RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW"
36556\u2911 "RIGHTWARDS ARROW WITH DOTTED STEM"
36557\u2912 "UPWARDS ARROW TO BAR"
36558\u2913 "DOWNWARDS ARROW TO BAR"
36559\u2914 "RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE"
36560\u2915 "RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE"
36561\u2916 "RIGHTWARDS TWO-HEADED ARROW WITH TAIL"
36562\u2917 "RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE"
36563\u2918 "RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE"
36564\u2919 "LEFTWARDS ARROW-TAIL"
36565\u291A "RIGHTWARDS ARROW-TAIL"
36566\u291B "LEFTWARDS DOUBLE ARROW-TAIL"
36567\u291C "RIGHTWARDS DOUBLE ARROW-TAIL"
36568\u291D "LEFTWARDS ARROW TO BLACK DIAMOND"
36569\u291E "RIGHTWARDS ARROW TO BLACK DIAMOND"
36570\u291F "LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND"
36571\u2920 "RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND"
36572\u2921 "NORTH WEST AND SOUTH EAST ARROW"
36573\u2922 "NORTH EAST AND SOUTH WEST ARROW"
36574\u2923 "NORTH WEST ARROW WITH HOOK"
36575\u2924 "NORTH EAST ARROW WITH HOOK"
36576\u2925 "SOUTH EAST ARROW WITH HOOK"
36577\u2926 "SOUTH WEST ARROW WITH HOOK"
36578\u2927 "NORTH WEST ARROW AND NORTH EAST ARROW"
36579\u2928 "NORTH EAST ARROW AND SOUTH EAST ARROW"
36580\u2929 "SOUTH EAST ARROW AND SOUTH WEST ARROW"
36581\u292A "SOUTH WEST ARROW AND NORTH WEST ARROW"
36582\u292B "RISING DIAGONAL CROSSING FALLING DIAGONAL"
36583\u292C "FALLING DIAGONAL CROSSING RISING DIAGONAL"
36584\u292D "SOUTH EAST ARROW CROSSING NORTH EAST ARROW"
36585\u292E "NORTH EAST ARROW CROSSING SOUTH EAST ARROW"
36586\u292F "FALLING DIAGONAL CROSSING NORTH EAST ARROW"
36587\u2930 "RISING DIAGONAL CROSSING SOUTH EAST ARROW"
36588\u2931 "NORTH EAST ARROW CROSSING NORTH WEST ARROW"
36589\u2932 "NORTH WEST ARROW CROSSING NORTH EAST ARROW"
36590\u2933 "WAVE ARROW POINTING DIRECTLY RIGHT"
36591\u2934 "ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS"
36592\u2935 "ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS"
36593\u2936 "ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS"
36594\u2937 "ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS"
36595\u2938 "RIGHT-SIDE ARC CLOCKWISE ARROW"
36596\u2939 "LEFT-SIDE ARC ANTICLOCKWISE ARROW"
36597\u293A "TOP ARC ANTICLOCKWISE ARROW"
36598\u293B "BOTTOM ARC ANTICLOCKWISE ARROW"
36599\u293C "TOP ARC CLOCKWISE ARROW WITH MINUS"
36600\u293D "TOP ARC ANTICLOCKWISE ARROW WITH PLUS"
36601\u293E "LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW"
36602\u293F "LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW"
36603\u2940 "ANTICLOCKWISE CLOSED CIRCLE ARROW"
36604\u2941 "CLOCKWISE CLOSED CIRCLE ARROW"
36605\u2942 "RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW"
36606\u2943 "LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW"
36607\u2944 "SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW"
36608\u2945 "RIGHTWARDS ARROW WITH PLUS BELOW"
36609\u2946 "LEFTWARDS ARROW WITH PLUS BELOW"
36610\u2947 "RIGHTWARDS ARROW THROUGH X"
36611\u2948 "LEFT RIGHT ARROW THROUGH SMALL CIRCLE"
36612\u2949 "UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE"
36613\u294A "LEFT BARB UP RIGHT BARB DOWN HARPOON"
36614\u294B "LEFT BARB DOWN RIGHT BARB UP HARPOON"
36615\u294C "UP BARB RIGHT DOWN BARB LEFT HARPOON"
36616\u294D "UP BARB LEFT DOWN BARB RIGHT HARPOON"
36617\u294E "LEFT BARB UP RIGHT BARB UP HARPOON"
36618\u294F "UP BARB RIGHT DOWN BARB RIGHT HARPOON"
36619\u2950 "LEFT BARB DOWN RIGHT BARB DOWN HARPOON"
36620\u2951 "UP BARB LEFT DOWN BARB LEFT HARPOON"
36621\u2952 "LEFTWARDS HARPOON WITH BARB UP TO BAR"
36622\u2953 "RIGHTWARDS HARPOON WITH BARB UP TO BAR"
36623\u2954 "UPWARDS HARPOON WITH BARB RIGHT TO BAR"
36624\u2955 "DOWNWARDS HARPOON WITH BARB RIGHT TO BAR"
36625\u2956 "LEFTWARDS HARPOON WITH BARB DOWN TO BAR"
36626\u2957 "RIGHTWARDS HARPOON WITH BARB DOWN TO BAR"
36627\u2958 "UPWARDS HARPOON WITH BARB LEFT TO BAR"
36628\u2959 "DOWNWARDS HARPOON WITH BARB LEFT TO BAR"
36629\u295A "LEFTWARDS HARPOON WITH BARB UP FROM BAR"
36630\u295B "RIGHTWARDS HARPOON WITH BARB UP FROM BAR"
36631\u295C "UPWARDS HARPOON WITH BARB RIGHT FROM BAR"
36632\u295D "DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR"
36633\u295E "LEFTWARDS HARPOON WITH BARB DOWN FROM BAR"
36634\u295F "RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR"
36635\u2960 "UPWARDS HARPOON WITH BARB LEFT FROM BAR"
36636\u2961 "DOWNWARDS HARPOON WITH BARB LEFT FROM BAR"
36637\u2962 "LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN"
36638\u2963 "UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT"
36639\u2964 "RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN"
36640\u2965 "DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT"
36641\u2966 "LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP"
36642\u2967 "LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN"
36643\u2968 "RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP"
36644\u2969 "RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN"
36645\u296A "LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH"
36646\u296B "LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH"
36647\u296C "RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH"
36648\u296D "RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH"
36649\u296E "UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT"
36650\u296F "DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT"
36651\u2970 "RIGHT DOUBLE ARROW WITH ROUNDED HEAD"
36652\u2971 "EQUALS SIGN ABOVE RIGHTWARDS ARROW"
36653\u2972 "TILDE OPERATOR ABOVE RIGHTWARDS ARROW"
36654\u2973 "LEFTWARDS ARROW ABOVE TILDE OPERATOR"
36655\u2974 "RIGHTWARDS ARROW ABOVE TILDE OPERATOR"
36656\u2975 "RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO"
36657\u2976 "LESS-THAN ABOVE LEFTWARDS ARROW"
36658\u2977 "LEFTWARDS ARROW THROUGH LESS-THAN"
36659\u2978 "GREATER-THAN ABOVE RIGHTWARDS ARROW"
36660\u2979 "SUBSET ABOVE RIGHTWARDS ARROW"
36661\u297A "LEFTWARDS ARROW THROUGH SUBSET"
36662\u297B "SUPERSET ABOVE LEFTWARDS ARROW"
36663\u297C "LEFT FISH TAIL"
36664\u297D "RIGHT FISH TAIL"
36665\u297E "UP FISH TAIL"
36666\u297F "DOWN FISH TAIL"
36667\u2980 "TRIPLE VERTICAL BAR DELIMITER"
36668\u2981 "Z NOTATION SPOT"
36669\u2982 "Z NOTATION TYPE COLON"
36670\u2983 "LEFT WHITE CURLY BRACKET"
36671\u2984 "RIGHT WHITE CURLY BRACKET"
36672\u2985 "LEFT WHITE PARENTHESIS"
36673\u2986 "RIGHT WHITE PARENTHESIS"
36674\u2987 "Z NOTATION LEFT IMAGE BRACKET"
36675\u2988 "Z NOTATION RIGHT IMAGE BRACKET"
36676\u2989 "Z NOTATION LEFT BINDING BRACKET"
36677\u298A "Z NOTATION RIGHT BINDING BRACKET"
36678\u298B "LEFT SQUARE BRACKET WITH UNDERBAR"
36679\u298C "RIGHT SQUARE BRACKET WITH UNDERBAR"
36680\u298D "LEFT SQUARE BRACKET WITH TICK IN TOP CORNER"
36681\u298E "RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER"
36682\u298F "LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER"
36683\u2990 "RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER"
36684\u2991 "LEFT ANGLE BRACKET WITH DOT"
36685\u2992 "RIGHT ANGLE BRACKET WITH DOT"
36686\u2993 "LEFT ARC LESS-THAN BRACKET"
36687\u2994 "RIGHT ARC GREATER-THAN BRACKET"
36688\u2995 "DOUBLE LEFT ARC GREATER-THAN BRACKET"
36689\u2996 "DOUBLE RIGHT ARC LESS-THAN BRACKET"
36690\u2997 "LEFT BLACK TORTOISE SHELL BRACKET"
36691\u2998 "RIGHT BLACK TORTOISE SHELL BRACKET"
36692\u2999 "DOTTED FENCE"
36693\u299A "VERTICAL ZIGZAG LINE"
36694\u299B "MEASURED ANGLE OPENING LEFT"
36695\u299C "RIGHT ANGLE VARIANT WITH SQUARE"
36696\u299D "MEASURED RIGHT ANGLE WITH DOT"
36697\u299E "ANGLE WITH S INSIDE"
36698\u299F "ACUTE ANGLE"
36699\u29A0 "SPHERICAL ANGLE OPENING LEFT"
36700\u29A1 "SPHERICAL ANGLE OPENING UP"
36701\u29A2 "TURNED ANGLE"
36702\u29A3 "REVERSED ANGLE"
36703\u29A4 "ANGLE WITH UNDERBAR"
36704\u29A5 "REVERSED ANGLE WITH UNDERBAR"
36705\u29A6 "OBLIQUE ANGLE OPENING UP"
36706\u29A7 "OBLIQUE ANGLE OPENING DOWN"
36707\u29A8 "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT"
36708\u29A9 "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT"
36709\u29AA "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT"
36710\u29AB "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT"
36711\u29AC "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP"
36712\u29AD "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP"
36713\u29AE "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN"
36714\u29AF "MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN"
36715\u29B0 "REVERSED EMPTY SET"
36716\u29B1 "EMPTY SET WITH OVERBAR"
36717\u29B2 "EMPTY SET WITH SMALL CIRCLE ABOVE"
36718\u29B3 "EMPTY SET WITH RIGHT ARROW ABOVE"
36719\u29B4 "EMPTY SET WITH LEFT ARROW ABOVE"
36720\u29B5 "CIRCLE WITH HORIZONTAL BAR"
36721\u29B6 "CIRCLED VERTICAL BAR"
36722\u29B7 "CIRCLED PARALLEL"
36723\u29B8 "CIRCLED REVERSE SOLIDUS"
36724\u29B9 "CIRCLED PERPENDICULAR"
36725\u29BA "CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR"
36726\u29BB "CIRCLE WITH SUPERIMPOSED X"
36727\u29BC "CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN"
36728\u29BD "UP ARROW THROUGH CIRCLE"
36729\u29BE "CIRCLED WHITE BULLET"
36730\u29BF "CIRCLED BULLET"
36731\u29C0 "CIRCLED LESS-THAN"
36732\u29C1 "CIRCLED GREATER-THAN"
36733\u29C2 "CIRCLE WITH SMALL CIRCLE TO THE RIGHT"
36734\u29C3 "CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT"
36735\u29C4 "SQUARED RISING DIAGONAL SLASH"
36736\u29C5 "SQUARED FALLING DIAGONAL SLASH"
36737\u29C6 "SQUARED ASTERISK"
36738\u29C7 "SQUARED SMALL CIRCLE"
36739\u29C8 "SQUARED SQUARE"
36740\u29C9 "TWO JOINED SQUARES"
36741\u29CA "TRIANGLE WITH DOT ABOVE"
36742\u29CB "TRIANGLE WITH UNDERBAR"
36743\u29CC "S IN TRIANGLE"
36744\u29CD "TRIANGLE WITH SERIFS AT BOTTOM"
36745\u29CE "RIGHT TRIANGLE ABOVE LEFT TRIANGLE"
36746\u29CF "LEFT TRIANGLE BESIDE VERTICAL BAR"
36747\u29D0 "VERTICAL BAR BESIDE RIGHT TRIANGLE"
36748\u29D1 "BOWTIE WITH LEFT HALF BLACK"
36749\u29D2 "BOWTIE WITH RIGHT HALF BLACK"
36750\u29D3 "BLACK BOWTIE"
36751\u29D4 "TIMES WITH LEFT HALF BLACK"
36752\u29D5 "TIMES WITH RIGHT HALF BLACK"
36753\u29D6 "WHITE HOURGLASS"
36754\u29D7 "BLACK HOURGLASS"
36755\u29D8 "LEFT WIGGLY FENCE"
36756\u29D9 "RIGHT WIGGLY FENCE"
36757\u29DA "LEFT DOUBLE WIGGLY FENCE"
36758\u29DB "RIGHT DOUBLE WIGGLY FENCE"
36759\u29DC "INCOMPLETE INFINITY"
36760\u29DD "TIE OVER INFINITY"
36761\u29DE "INFINITY NEGATED WITH VERTICAL BAR"
36762\u29DF "DOUBLE-ENDED MULTIMAP"
36763\u29E0 "SQUARE WITH CONTOURED OUTLINE"
36764\u29E1 "INCREASES AS"
36765\u29E2 "SHUFFLE PRODUCT"
36766\u29E3 "EQUALS SIGN AND SLANTED PARALLEL"
36767\u29E4 "EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE"
36768\u29E5 "IDENTICAL TO AND SLANTED PARALLEL"
36769\u29E6 "GLEICH STARK"
36770\u29E7 "THERMODYNAMIC"
36771\u29E8 "DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK"
36772\u29E9 "DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK"
36773\u29EA "BLACK DIAMOND WITH DOWN ARROW"
36774\u29EB "BLACK LOZENGE"
36775\u29EC "WHITE CIRCLE WITH DOWN ARROW"
36776\u29ED "BLACK CIRCLE WITH DOWN ARROW"
36777\u29EE "ERROR-BARRED WHITE SQUARE"
36778\u29EF "ERROR-BARRED BLACK SQUARE"
36779\u29F0 "ERROR-BARRED WHITE DIAMOND"
36780\u29F1 "ERROR-BARRED BLACK DIAMOND"
36781\u29F2 "ERROR-BARRED WHITE CIRCLE"
36782\u29F3 "ERROR-BARRED BLACK CIRCLE"
36783\u29F4 "RULE-DELAYED"
36784\u29F5 "REVERSE SOLIDUS OPERATOR"
36785\u29F6 "SOLIDUS WITH OVERBAR"
36786\u29F7 "REVERSE SOLIDUS WITH HORIZONTAL STROKE"
36787\u29F8 "BIG SOLIDUS"
36788\u29F9 "BIG REVERSE SOLIDUS"
36789\u29FA "DOUBLE PLUS"
36790\u29FB "TRIPLE PLUS"
36791\u29FC "LEFT-POINTING CURVED ANGLE BRACKET"
36792\u29FD "RIGHT-POINTING CURVED ANGLE BRACKET"
36793\u29FE "TINY"
36794\u29FF "MINY"
36795\u2A00 "N-ARY CIRCLED DOT OPERATOR"
36796\u2A01 "N-ARY CIRCLED PLUS OPERATOR"
36797\u2A02 "N-ARY CIRCLED TIMES OPERATOR"
36798\u2A03 "N-ARY UNION OPERATOR WITH DOT"
36799\u2A04 "N-ARY UNION OPERATOR WITH PLUS"
36800\u2A05 "N-ARY SQUARE INTERSECTION OPERATOR"
36801\u2A06 "N-ARY SQUARE UNION OPERATOR"
36802\u2A07 "TWO LOGICAL AND OPERATOR"
36803\u2A08 "TWO LOGICAL OR OPERATOR"
36804\u2A09 "N-ARY TIMES OPERATOR"
36805\u2A0A "MODULO TWO SUM"
36806\u2A0B "SUMMATION WITH INTEGRAL"
36807\u2A0C "QUADRUPLE INTEGRAL OPERATOR"
36808\u2A0D "FINITE PART INTEGRAL"
36809\u2A0E "INTEGRAL WITH DOUBLE STROKE"
36810\u2A0F "INTEGRAL AVERAGE WITH SLASH"
36811\u2A10 "CIRCULATION FUNCTION"
36812\u2A11 "ANTICLOCKWISE INTEGRATION"
36813\u2A12 "LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE"
36814\u2A13 "LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE"
36815\u2A14 "LINE INTEGRATION NOT INCLUDING THE POLE"
36816\u2A15 "INTEGRAL AROUND A POINT OPERATOR"
36817\u2A16 "QUATERNION INTEGRAL OPERATOR"
36818\u2A17 "INTEGRAL WITH LEFTWARDS ARROW WITH HOOK"
36819\u2A18 "INTEGRAL WITH TIMES SIGN"
36820\u2A19 "INTEGRAL WITH INTERSECTION"
36821\u2A1A "INTEGRAL WITH UNION"
36822\u2A1B "INTEGRAL WITH OVERBAR"
36823\u2A1C "INTEGRAL WITH UNDERBAR"
36824\u2A1D "JOIN"
36825\u2A1E "LARGE LEFT TRIANGLE OPERATOR"
36826\u2A1F "Z NOTATION SCHEMA COMPOSITION"
36827\u2A20 "Z NOTATION SCHEMA PIPING"
36828\u2A21 "Z NOTATION SCHEMA PROJECTION"
36829\u2A22 "PLUS SIGN WITH SMALL CIRCLE ABOVE"
36830\u2A23 "PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE"
36831\u2A24 "PLUS SIGN WITH TILDE ABOVE"
36832\u2A25 "PLUS SIGN WITH DOT BELOW"
36833\u2A26 "PLUS SIGN WITH TILDE BELOW"
36834\u2A27 "PLUS SIGN WITH SUBSCRIPT TWO"
36835\u2A28 "PLUS SIGN WITH BLACK TRIANGLE"
36836\u2A29 "MINUS SIGN WITH COMMA ABOVE"
36837\u2A2A "MINUS SIGN WITH DOT BELOW"
36838\u2A2B "MINUS SIGN WITH FALLING DOTS"
36839\u2A2C "MINUS SIGN WITH RISING DOTS"
36840\u2A2D "PLUS SIGN IN LEFT HALF CIRCLE"
36841\u2A2E "PLUS SIGN IN RIGHT HALF CIRCLE"
36842\u2A2F "VECTOR OR CROSS PRODUCT"
36843\u2A30 "MULTIPLICATION SIGN WITH DOT ABOVE"
36844\u2A31 "MULTIPLICATION SIGN WITH UNDERBAR"
36845\u2A32 "SEMIDIRECT PRODUCT WITH BOTTOM CLOSED"
36846\u2A33 "SMASH PRODUCT"
36847\u2A34 "MULTIPLICATION SIGN IN LEFT HALF CIRCLE"
36848\u2A35 "MULTIPLICATION SIGN IN RIGHT HALF CIRCLE"
36849\u2A36 "CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT"
36850\u2A37 "MULTIPLICATION SIGN IN DOUBLE CIRCLE"
36851\u2A38 "CIRCLED DIVISION SIGN"
36852\u2A39 "PLUS SIGN IN TRIANGLE"
36853\u2A3A "MINUS SIGN IN TRIANGLE"
36854\u2A3B "MULTIPLICATION SIGN IN TRIANGLE"
36855\u2A3C "INTERIOR PRODUCT"
36856\u2A3D "RIGHTHAND INTERIOR PRODUCT"
36857\u2A3E "Z NOTATION RELATIONAL COMPOSITION"
36858\u2A3F "AMALGAMATION OR COPRODUCT"
36859\u2A40 "INTERSECTION WITH DOT"
36860\u2A41 "UNION WITH MINUS SIGN"
36861\u2A42 "UNION WITH OVERBAR"
36862\u2A43 "INTERSECTION WITH OVERBAR"
36863\u2A44 "INTERSECTION WITH LOGICAL AND"
36864\u2A45 "UNION WITH LOGICAL OR"
36865\u2A46 "UNION ABOVE INTERSECTION"
36866\u2A47 "INTERSECTION ABOVE UNION"
36867\u2A48 "UNION ABOVE BAR ABOVE INTERSECTION"
36868\u2A49 "INTERSECTION ABOVE BAR ABOVE UNION"
36869\u2A4A "UNION BESIDE AND JOINED WITH UNION"
36870\u2A4B "INTERSECTION BESIDE AND JOINED WITH INTERSECTION"
36871\u2A4C "CLOSED UNION WITH SERIFS"
36872\u2A4D "CLOSED INTERSECTION WITH SERIFS"
36873\u2A4E "DOUBLE SQUARE INTERSECTION"
36874\u2A4F "DOUBLE SQUARE UNION"
36875\u2A50 "CLOSED UNION WITH SERIFS AND SMASH PRODUCT"
36876\u2A51 "LOGICAL AND WITH DOT ABOVE"
36877\u2A52 "LOGICAL OR WITH DOT ABOVE"
36878\u2A53 "DOUBLE LOGICAL AND"
36879\u2A54 "DOUBLE LOGICAL OR"
36880\u2A55 "TWO INTERSECTING LOGICAL AND"
36881\u2A56 "TWO INTERSECTING LOGICAL OR"
36882\u2A57 "SLOPING LARGE OR"
36883\u2A58 "SLOPING LARGE AND"
36884\u2A59 "LOGICAL OR OVERLAPPING LOGICAL AND"
36885\u2A5A "LOGICAL AND WITH MIDDLE STEM"
36886\u2A5B "LOGICAL OR WITH MIDDLE STEM"
36887\u2A5C "LOGICAL AND WITH HORIZONTAL DASH"
36888\u2A5D "LOGICAL OR WITH HORIZONTAL DASH"
36889\u2A5E "LOGICAL AND WITH DOUBLE OVERBAR"
36890\u2A5F "LOGICAL AND WITH UNDERBAR"
36891\u2A60 "LOGICAL AND WITH DOUBLE UNDERBAR"
36892\u2A61 "SMALL VEE WITH UNDERBAR"
36893\u2A62 "LOGICAL OR WITH DOUBLE OVERBAR"
36894\u2A63 "LOGICAL OR WITH DOUBLE UNDERBAR"
36895\u2A64 "Z NOTATION DOMAIN ANTIRESTRICTION"
36896\u2A65 "Z NOTATION RANGE ANTIRESTRICTION"
36897\u2A66 "EQUALS SIGN WITH DOT BELOW"
36898\u2A67 "IDENTICAL WITH DOT ABOVE"
36899\u2A68 "TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE"
36900\u2A69 "TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE"
36901\u2A6A "TILDE OPERATOR WITH DOT ABOVE"
36902\u2A6B "TILDE OPERATOR WITH RISING DOTS"
36903\u2A6C "SIMILAR MINUS SIMILAR"
36904\u2A6D "CONGRUENT WITH DOT ABOVE"
36905\u2A6E "EQUALS WITH ASTERISK"
36906\u2A6F "ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT"
36907\u2A70 "APPROXIMATELY EQUAL OR EQUAL TO"
36908\u2A71 "EQUALS SIGN ABOVE PLUS SIGN"
36909\u2A72 "PLUS SIGN ABOVE EQUALS SIGN"
36910\u2A73 "EQUALS SIGN ABOVE TILDE OPERATOR"
36911\u2A74 "DOUBLE COLON EQUAL"
36912\u2A75 "TWO CONSECUTIVE EQUALS SIGNS"
36913\u2A76 "THREE CONSECUTIVE EQUALS SIGNS"
36914\u2A77 "EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW"
36915\u2A78 "EQUIVALENT WITH FOUR DOTS ABOVE"
36916\u2A79 "LESS-THAN WITH CIRCLE INSIDE"
36917\u2A7A "GREATER-THAN WITH CIRCLE INSIDE"
36918\u2A7B "LESS-THAN WITH QUESTION MARK ABOVE"
36919\u2A7C "GREATER-THAN WITH QUESTION MARK ABOVE"
36920\u2A7D "LESS-THAN OR SLANTED EQUAL TO"
36921\u2A7E "GREATER-THAN OR SLANTED EQUAL TO"
36922\u2A7F "LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE"
36923\u2A80 "GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE"
36924\u2A81 "LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE"
36925\u2A82 "GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE"
36926\u2A83 "LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT"
36927\u2A84 "GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT"
36928\u2A85 "LESS-THAN OR APPROXIMATE"
36929\u2A86 "GREATER-THAN OR APPROXIMATE"
36930\u2A87 "LESS-THAN AND SINGLE-LINE NOT EQUAL TO"
36931\u2A88 "GREATER-THAN AND SINGLE-LINE NOT EQUAL TO"
36932\u2A89 "LESS-THAN AND NOT APPROXIMATE"
36933\u2A8A "GREATER-THAN AND NOT APPROXIMATE"
36934\u2A8B "LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN"
36935\u2A8C "GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN"
36936\u2A8D "LESS-THAN ABOVE SIMILAR OR EQUAL"
36937\u2A8E "GREATER-THAN ABOVE SIMILAR OR EQUAL"
36938\u2A8F "LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN"
36939\u2A90 "GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN"
36940\u2A91 "LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL"
36941\u2A92 "GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL"
36942\u2A93 "LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL"
36943\u2A94 "GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL"
36944\u2A95 "SLANTED EQUAL TO OR LESS-THAN"
36945\u2A96 "SLANTED EQUAL TO OR GREATER-THAN"
36946\u2A97 "SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE"
36947\u2A98 "SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE"
36948\u2A99 "DOUBLE-LINE EQUAL TO OR LESS-THAN"
36949\u2A9A "DOUBLE-LINE EQUAL TO OR GREATER-THAN"
36950\u2A9B "DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN"
36951\u2A9C "DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN"
36952\u2A9D "SIMILAR OR LESS-THAN"
36953\u2A9E "SIMILAR OR GREATER-THAN"
36954\u2A9F "SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN"
36955\u2AA0 "SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN"
36956\u2AA1 "DOUBLE NESTED LESS-THAN"
36957\u2AA2 "DOUBLE NESTED GREATER-THAN"
36958\u2AA3 "DOUBLE NESTED LESS-THAN WITH UNDERBAR"
36959\u2AA4 "GREATER-THAN OVERLAPPING LESS-THAN"
36960\u2AA5 "GREATER-THAN BESIDE LESS-THAN"
36961\u2AA6 "LESS-THAN CLOSED BY CURVE"
36962\u2AA7 "GREATER-THAN CLOSED BY CURVE"
36963\u2AA8 "LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL"
36964\u2AA9 "GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL"
36965\u2AAA "SMALLER THAN"
36966\u2AAB "LARGER THAN"
36967\u2AAC "SMALLER THAN OR EQUAL TO"
36968\u2AAD "LARGER THAN OR EQUAL TO"
36969\u2AAE "EQUALS SIGN WITH BUMPY ABOVE"
36970\u2AAF "PRECEDES ABOVE SINGLE-LINE EQUALS SIGN"
36971\u2AB0 "SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN"
36972\u2AB1 "PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO"
36973\u2AB2 "SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO"
36974\u2AB3 "PRECEDES ABOVE EQUALS SIGN"
36975\u2AB4 "SUCCEEDS ABOVE EQUALS SIGN"
36976\u2AB5 "PRECEDES ABOVE NOT EQUAL TO"
36977\u2AB6 "SUCCEEDS ABOVE NOT EQUAL TO"
36978\u2AB7 "PRECEDES ABOVE ALMOST EQUAL TO"
36979\u2AB8 "SUCCEEDS ABOVE ALMOST EQUAL TO"
36980\u2AB9 "PRECEDES ABOVE NOT ALMOST EQUAL TO"
36981\u2ABA "SUCCEEDS ABOVE NOT ALMOST EQUAL TO"
36982\u2ABB "DOUBLE PRECEDES"
36983\u2ABC "DOUBLE SUCCEEDS"
36984\u2ABD "SUBSET WITH DOT"
36985\u2ABE "SUPERSET WITH DOT"
36986\u2ABF "SUBSET WITH PLUS SIGN BELOW"
36987\u2AC0 "SUPERSET WITH PLUS SIGN BELOW"
36988\u2AC1 "SUBSET WITH MULTIPLICATION SIGN BELOW"
36989\u2AC2 "SUPERSET WITH MULTIPLICATION SIGN BELOW"
36990\u2AC3 "SUBSET OF OR EQUAL TO WITH DOT ABOVE"
36991\u2AC4 "SUPERSET OF OR EQUAL TO WITH DOT ABOVE"
36992\u2AC5 "SUBSET OF ABOVE EQUALS SIGN"
36993\u2AC6 "SUPERSET OF ABOVE EQUALS SIGN"
36994\u2AC7 "SUBSET OF ABOVE TILDE OPERATOR"
36995\u2AC8 "SUPERSET OF ABOVE TILDE OPERATOR"
36996\u2AC9 "SUBSET OF ABOVE ALMOST EQUAL TO"
36997\u2ACA "SUPERSET OF ABOVE ALMOST EQUAL TO"
36998\u2ACB "SUBSET OF ABOVE NOT EQUAL TO"
36999\u2ACC "SUPERSET OF ABOVE NOT EQUAL TO"
37000\u2ACD "SQUARE LEFT OPEN BOX OPERATOR"
37001\u2ACE "SQUARE RIGHT OPEN BOX OPERATOR"
37002\u2ACF "CLOSED SUBSET"
37003\u2AD0 "CLOSED SUPERSET"
37004\u2AD1 "CLOSED SUBSET OR EQUAL TO"
37005\u2AD2 "CLOSED SUPERSET OR EQUAL TO"
37006\u2AD3 "SUBSET ABOVE SUPERSET"
37007\u2AD4 "SUPERSET ABOVE SUBSET"
37008\u2AD5 "SUBSET ABOVE SUBSET"
37009\u2AD6 "SUPERSET ABOVE SUPERSET"
37010\u2AD7 "SUPERSET BESIDE SUBSET"
37011\u2AD8 "SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET"
37012\u2AD9 "ELEMENT OF OPENING DOWNWARDS"
37013\u2ADA "PITCHFORK WITH TEE TOP"
37014\u2ADB "TRANSVERSAL INTERSECTION"
37015\u2ADC "FORKING"
37016\u2ADD "NONFORKING"
37017\u2ADE "SHORT LEFT TACK"
37018\u2ADF "SHORT DOWN TACK"
37019\u2AE0 "SHORT UP TACK"
37020\u2AE1 "PERPENDICULAR WITH S"
37021\u2AE2 "VERTICAL BAR TRIPLE RIGHT TURNSTILE"
37022\u2AE3 "DOUBLE VERTICAL BAR LEFT TURNSTILE"
37023\u2AE4 "VERTICAL BAR DOUBLE LEFT TURNSTILE"
37024\u2AE5 "DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE"
37025\u2AE6 "LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL"
37026\u2AE7 "SHORT DOWN TACK WITH OVERBAR"
37027\u2AE8 "SHORT UP TACK WITH UNDERBAR"
37028\u2AE9 "SHORT UP TACK ABOVE SHORT DOWN TACK"
37029\u2AEA "DOUBLE DOWN TACK"
37030\u2AEB "DOUBLE UP TACK"
37031\u2AEC "DOUBLE STROKE NOT SIGN"
37032\u2AED "REVERSED DOUBLE STROKE NOT SIGN"
37033\u2AEE "DOES NOT DIVIDE WITH REVERSED NEGATION SLASH"
37034\u2AEF "VERTICAL LINE WITH CIRCLE ABOVE"
37035\u2AF0 "VERTICAL LINE WITH CIRCLE BELOW"
37036\u2AF1 "DOWN TACK WITH CIRCLE BELOW"
37037\u2AF2 "PARALLEL WITH HORIZONTAL STROKE"
37038\u2AF3 "PARALLEL WITH TILDE OPERATOR"
37039\u2AF4 "TRIPLE VERTICAL BAR BINARY RELATION"
37040\u2AF5 "TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE"
37041\u2AF6 "TRIPLE COLON OPERATOR"
37042\u2AF7 "TRIPLE NESTED LESS-THAN"
37043\u2AF8 "TRIPLE NESTED GREATER-THAN"
37044\u2AF9 "DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO"
37045\u2AFA "DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO"
37046\u2AFB "TRIPLE SOLIDUS BINARY RELATION"
37047\u2AFC "LARGE TRIPLE VERTICAL BAR OPERATOR"
37048\u2AFD "DOUBLE SOLIDUS OPERATOR"
37049\u2AFE "WHITE VERTICAL BAR"
37050\u2AFF "N-ARY WHITE VERTICAL BAR"
37051\u2B00 "NORTH EAST WHITE ARROW"
37052\u2B01 "NORTH WEST WHITE ARROW"
37053\u2B02 "SOUTH EAST WHITE ARROW"
37054\u2B03 "SOUTH WEST WHITE ARROW"
37055\u2B04 "LEFT RIGHT WHITE ARROW"
37056\u2B05 "LEFTWARDS BLACK ARROW"
37057\u2B06 "UPWARDS BLACK ARROW"
37058\u2B07 "DOWNWARDS BLACK ARROW"
37059\u2B08 "NORTH EAST BLACK ARROW"
37060\u2B09 "NORTH WEST BLACK ARROW"
37061\u2B0A "SOUTH EAST BLACK ARROW"
37062\u2B0B "SOUTH WEST BLACK ARROW"
37063\u2B0C "LEFT RIGHT BLACK ARROW"
37064\u2B0D "UP DOWN BLACK ARROW"
37065\u2B0E "RIGHTWARDS ARROW WITH TIP DOWNWARDS"
37066\u2B0F "RIGHTWARDS ARROW WITH TIP UPWARDS"
37067\u2B10 "LEFTWARDS ARROW WITH TIP DOWNWARDS"
37068\u2B11 "LEFTWARDS ARROW WITH TIP UPWARDS"
37069\u2B12 "SQUARE WITH TOP HALF BLACK"
37070\u2B13 "SQUARE WITH BOTTOM HALF BLACK"
37071\u2B14 "SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK"
37072\u2B15 "SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK"
37073\u2B16 "DIAMOND WITH LEFT HALF BLACK"
37074\u2B17 "DIAMOND WITH RIGHT HALF BLACK"
37075\u2B18 "DIAMOND WITH TOP HALF BLACK"
37076\u2B19 "DIAMOND WITH BOTTOM HALF BLACK"
37077\u2B1A "DOTTED SQUARE"
37078\u2B1B "BLACK LARGE SQUARE"
37079\u2B1C "WHITE LARGE SQUARE"
37080\u2B1D "BLACK VERY SMALL SQUARE"
37081\u2B1E "WHITE VERY SMALL SQUARE"
37082\u2B1F "BLACK PENTAGON"
37083\u2B20 "WHITE PENTAGON"
37084\u2B21 "WHITE HEXAGON"
37085\u2B22 "BLACK HEXAGON"
37086\u2B23 "HORIZONTAL BLACK HEXAGON"
37087\u2B24 "BLACK LARGE CIRCLE"
37088\u2B25 "BLACK MEDIUM DIAMOND"
37089\u2B26 "WHITE MEDIUM DIAMOND"
37090\u2B27 "BLACK MEDIUM LOZENGE"
37091\u2B28 "WHITE MEDIUM LOZENGE"
37092\u2B29 "BLACK SMALL DIAMOND"
37093\u2B2A "BLACK SMALL LOZENGE"
37094\u2B2B "WHITE SMALL LOZENGE"
37095\u2B2C "BLACK HORIZONTAL ELLIPSE"
37096\u2B2D "WHITE HORIZONTAL ELLIPSE"
37097\u2B2E "BLACK VERTICAL ELLIPSE"
37098\u2B2F "WHITE VERTICAL ELLIPSE"
37099\u2B30 "LEFT ARROW WITH SMALL CIRCLE"
37100\u2B31 "THREE LEFTWARDS ARROWS"
37101\u2B32 "LEFT ARROW WITH CIRCLED PLUS"
37102\u2B33 "LONG LEFTWARDS SQUIGGLE ARROW"
37103\u2B34 "LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE"
37104\u2B35 "LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE"
37105\u2B36 "LEFTWARDS TWO-HEADED ARROW FROM BAR"
37106\u2B37 "LEFTWARDS TWO-HEADED TRIPLE DASH ARROW"
37107\u2B38 "LEFTWARDS ARROW WITH DOTTED STEM"
37108\u2B39 "LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE"
37109\u2B3A "LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE"
37110\u2B3B "LEFTWARDS TWO-HEADED ARROW WITH TAIL"
37111\u2B3C "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE"
37112\u2B3D "LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE"
37113\u2B3E "LEFTWARDS ARROW THROUGH X"
37114\u2B3F "WAVE ARROW POINTING DIRECTLY LEFT"
37115\u2B40 "EQUALS SIGN ABOVE LEFTWARDS ARROW"
37116\u2B41 "REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW"
37117\u2B42 "LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO"
37118\u2B43 "RIGHTWARDS ARROW THROUGH GREATER-THAN"
37119\u2B44 "RIGHTWARDS ARROW THROUGH SUPERSET"
37120\u2B45 "LEFTWARDS QUADRUPLE ARROW"
37121\u2B46 "RIGHTWARDS QUADRUPLE ARROW"
37122\u2B47 "REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW"
37123\u2B48 "RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO"
37124\u2B49 "TILDE OPERATOR ABOVE LEFTWARDS ARROW"
37125\u2B4A "LEFTWARDS ARROW ABOVE ALMOST EQUAL TO"
37126\u2B4B "LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR"
37127\u2B4C "RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR"
37128\u2B50 "WHITE MEDIUM STAR"
37129\u2B51 "BLACK SMALL STAR"
37130\u2B52 "WHITE SMALL STAR"
37131\u2B53 "BLACK RIGHT-POINTING PENTAGON"
37132\u2B54 "WHITE RIGHT-POINTING PENTAGON"
37133\u2C00 "GLAGOLITIC CAPITAL LETTER AZU"
37134\u2C01 "GLAGOLITIC CAPITAL LETTER BUKY"
37135\u2C02 "GLAGOLITIC CAPITAL LETTER VEDE"
37136\u2C03 "GLAGOLITIC CAPITAL LETTER GLAGOLI"
37137\u2C04 "GLAGOLITIC CAPITAL LETTER DOBRO"
37138\u2C05 "GLAGOLITIC CAPITAL LETTER YESTU"
37139\u2C06 "GLAGOLITIC CAPITAL LETTER ZHIVETE"
37140\u2C07 "GLAGOLITIC CAPITAL LETTER DZELO"
37141\u2C08 "GLAGOLITIC CAPITAL LETTER ZEMLJA"
37142\u2C09 "GLAGOLITIC CAPITAL LETTER IZHE"
37143\u2C0A "GLAGOLITIC CAPITAL LETTER INITIAL IZHE"
37144\u2C0B "GLAGOLITIC CAPITAL LETTER I"
37145\u2C0C "GLAGOLITIC CAPITAL LETTER DJERVI"
37146\u2C0D "GLAGOLITIC CAPITAL LETTER KAKO"
37147\u2C0E "GLAGOLITIC CAPITAL LETTER LJUDIJE"
37148\u2C0F "GLAGOLITIC CAPITAL LETTER MYSLITE"
37149\u2C10 "GLAGOLITIC CAPITAL LETTER NASHI"
37150\u2C11 "GLAGOLITIC CAPITAL LETTER ONU"
37151\u2C12 "GLAGOLITIC CAPITAL LETTER POKOJI"
37152\u2C13 "GLAGOLITIC CAPITAL LETTER RITSI"
37153\u2C14 "GLAGOLITIC CAPITAL LETTER SLOVO"
37154\u2C15 "GLAGOLITIC CAPITAL LETTER TVRIDO"
37155\u2C16 "GLAGOLITIC CAPITAL LETTER UKU"
37156\u2C17 "GLAGOLITIC CAPITAL LETTER FRITU"
37157\u2C18 "GLAGOLITIC CAPITAL LETTER HERU"
37158\u2C19 "GLAGOLITIC CAPITAL LETTER OTU"
37159\u2C1A "GLAGOLITIC CAPITAL LETTER PE"
37160\u2C1B "GLAGOLITIC CAPITAL LETTER SHTA"
37161\u2C1C "GLAGOLITIC CAPITAL LETTER TSI"
37162\u2C1D "GLAGOLITIC CAPITAL LETTER CHRIVI"
37163\u2C1E "GLAGOLITIC CAPITAL LETTER SHA"
37164\u2C1F "GLAGOLITIC CAPITAL LETTER YERU"
37165\u2C20 "GLAGOLITIC CAPITAL LETTER YERI"
37166\u2C21 "GLAGOLITIC CAPITAL LETTER YATI"
37167\u2C22 "GLAGOLITIC CAPITAL LETTER SPIDERY HA"
37168\u2C23 "GLAGOLITIC CAPITAL LETTER YU"
37169\u2C24 "GLAGOLITIC CAPITAL LETTER SMALL YUS"
37170\u2C25 "GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL"
37171\u2C26 "GLAGOLITIC CAPITAL LETTER YO"
37172\u2C27 "GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS"
37173\u2C28 "GLAGOLITIC CAPITAL LETTER BIG YUS"
37174\u2C29 "GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS"
37175\u2C2A "GLAGOLITIC CAPITAL LETTER FITA"
37176\u2C2B "GLAGOLITIC CAPITAL LETTER IZHITSA"
37177\u2C2C "GLAGOLITIC CAPITAL LETTER SHTAPIC"
37178\u2C2D "GLAGOLITIC CAPITAL LETTER TROKUTASTI A"
37179\u2C2E "GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE"
37180\u2C30 "GLAGOLITIC SMALL LETTER AZU"
37181\u2C31 "GLAGOLITIC SMALL LETTER BUKY"
37182\u2C32 "GLAGOLITIC SMALL LETTER VEDE"
37183\u2C33 "GLAGOLITIC SMALL LETTER GLAGOLI"
37184\u2C34 "GLAGOLITIC SMALL LETTER DOBRO"
37185\u2C35 "GLAGOLITIC SMALL LETTER YESTU"
37186\u2C36 "GLAGOLITIC SMALL LETTER ZHIVETE"
37187\u2C37 "GLAGOLITIC SMALL LETTER DZELO"
37188\u2C38 "GLAGOLITIC SMALL LETTER ZEMLJA"
37189\u2C39 "GLAGOLITIC SMALL LETTER IZHE"
37190\u2C3A "GLAGOLITIC SMALL LETTER INITIAL IZHE"
37191\u2C3B "GLAGOLITIC SMALL LETTER I"
37192\u2C3C "GLAGOLITIC SMALL LETTER DJERVI"
37193\u2C3D "GLAGOLITIC SMALL LETTER KAKO"
37194\u2C3E "GLAGOLITIC SMALL LETTER LJUDIJE"
37195\u2C3F "GLAGOLITIC SMALL LETTER MYSLITE"
37196\u2C40 "GLAGOLITIC SMALL LETTER NASHI"
37197\u2C41 "GLAGOLITIC SMALL LETTER ONU"
37198\u2C42 "GLAGOLITIC SMALL LETTER POKOJI"
37199\u2C43 "GLAGOLITIC SMALL LETTER RITSI"
37200\u2C44 "GLAGOLITIC SMALL LETTER SLOVO"
37201\u2C45 "GLAGOLITIC SMALL LETTER TVRIDO"
37202\u2C46 "GLAGOLITIC SMALL LETTER UKU"
37203\u2C47 "GLAGOLITIC SMALL LETTER FRITU"
37204\u2C48 "GLAGOLITIC SMALL LETTER HERU"
37205\u2C49 "GLAGOLITIC SMALL LETTER OTU"
37206\u2C4A "GLAGOLITIC SMALL LETTER PE"
37207\u2C4B "GLAGOLITIC SMALL LETTER SHTA"
37208\u2C4C "GLAGOLITIC SMALL LETTER TSI"
37209\u2C4D "GLAGOLITIC SMALL LETTER CHRIVI"
37210\u2C4E "GLAGOLITIC SMALL LETTER SHA"
37211\u2C4F "GLAGOLITIC SMALL LETTER YERU"
37212\u2C50 "GLAGOLITIC SMALL LETTER YERI"
37213\u2C51 "GLAGOLITIC SMALL LETTER YATI"
37214\u2C52 "GLAGOLITIC SMALL LETTER SPIDERY HA"
37215\u2C53 "GLAGOLITIC SMALL LETTER YU"
37216\u2C54 "GLAGOLITIC SMALL LETTER SMALL YUS"
37217\u2C55 "GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL"
37218\u2C56 "GLAGOLITIC SMALL LETTER YO"
37219\u2C57 "GLAGOLITIC SMALL LETTER IOTATED SMALL YUS"
37220\u2C58 "GLAGOLITIC SMALL LETTER BIG YUS"
37221\u2C59 "GLAGOLITIC SMALL LETTER IOTATED BIG YUS"
37222\u2C5A "GLAGOLITIC SMALL LETTER FITA"
37223\u2C5B "GLAGOLITIC SMALL LETTER IZHITSA"
37224\u2C5C "GLAGOLITIC SMALL LETTER SHTAPIC"
37225\u2C5D "GLAGOLITIC SMALL LETTER TROKUTASTI A"
37226\u2C5E "GLAGOLITIC SMALL LETTER LATINATE MYSLITE"
37227\u2C60 "LATIN CAPITAL LETTER L WITH DOUBLE BAR"
37228\u2C61 "LATIN SMALL LETTER L WITH DOUBLE BAR"
37229\u2C62 "LATIN CAPITAL LETTER L WITH MIDDLE TILDE"
37230\u2C63 "LATIN CAPITAL LETTER P WITH STROKE"
37231\u2C64 "LATIN CAPITAL LETTER R WITH TAIL"
37232\u2C65 "LATIN SMALL LETTER A WITH STROKE"
37233\u2C66 "LATIN SMALL LETTER T WITH DIAGONAL STROKE"
37234\u2C67 "LATIN CAPITAL LETTER H WITH DESCENDER"
37235\u2C68 "LATIN SMALL LETTER H WITH DESCENDER"
37236\u2C69 "LATIN CAPITAL LETTER K WITH DESCENDER"
37237\u2C6A "LATIN SMALL LETTER K WITH DESCENDER"
37238\u2C6B "LATIN CAPITAL LETTER Z WITH DESCENDER"
37239\u2C6C "LATIN SMALL LETTER Z WITH DESCENDER"
37240\u2C6D "LATIN CAPITAL LETTER ALPHA"
37241\u2C6E "LATIN CAPITAL LETTER M WITH HOOK"
37242\u2C6F "LATIN CAPITAL LETTER TURNED A"
37243\u2C71 "LATIN SMALL LETTER V WITH RIGHT HOOK"
37244\u2C72 "LATIN CAPITAL LETTER W WITH HOOK"
37245\u2C73 "LATIN SMALL LETTER W WITH HOOK"
37246\u2C74 "LATIN SMALL LETTER V WITH CURL"
37247\u2C75 "LATIN CAPITAL LETTER HALF H"
37248\u2C76 "LATIN SMALL LETTER HALF H"
37249\u2C77 "LATIN SMALL LETTER TAILLESS PHI"
37250\u2C78 "LATIN SMALL LETTER E WITH NOTCH"
37251\u2C79 "LATIN SMALL LETTER TURNED R WITH TAIL"
37252\u2C7A "LATIN SMALL LETTER O WITH LOW RING INSIDE"
37253\u2C7B "LATIN LETTER SMALL CAPITAL TURNED E"
37254\u2C7C "LATIN SUBSCRIPT SMALL LETTER J"
37255\u2C7D "MODIFIER LETTER CAPITAL V"
37256\u2C80 "COPTIC CAPITAL LETTER ALFA"
37257\u2C81 "COPTIC SMALL LETTER ALFA"
37258\u2C82 "COPTIC CAPITAL LETTER VIDA"
37259\u2C83 "COPTIC SMALL LETTER VIDA"
37260\u2C84 "COPTIC CAPITAL LETTER GAMMA"
37261\u2C85 "COPTIC SMALL LETTER GAMMA"
37262\u2C86 "COPTIC CAPITAL LETTER DALDA"
37263\u2C87 "COPTIC SMALL LETTER DALDA"
37264\u2C88 "COPTIC CAPITAL LETTER EIE"
37265\u2C89 "COPTIC SMALL LETTER EIE"
37266\u2C8A "COPTIC CAPITAL LETTER SOU"
37267\u2C8B "COPTIC SMALL LETTER SOU"
37268\u2C8C "COPTIC CAPITAL LETTER ZATA"
37269\u2C8D "COPTIC SMALL LETTER ZATA"
37270\u2C8E "COPTIC CAPITAL LETTER HATE"
37271\u2C8F "COPTIC SMALL LETTER HATE"
37272\u2C90 "COPTIC CAPITAL LETTER THETHE"
37273\u2C91 "COPTIC SMALL LETTER THETHE"
37274\u2C92 "COPTIC CAPITAL LETTER IAUDA"
37275\u2C93 "COPTIC SMALL LETTER IAUDA"
37276\u2C94 "COPTIC CAPITAL LETTER KAPA"
37277\u2C95 "COPTIC SMALL LETTER KAPA"
37278\u2C96 "COPTIC CAPITAL LETTER LAULA"
37279\u2C97 "COPTIC SMALL LETTER LAULA"
37280\u2C98 "COPTIC CAPITAL LETTER MI"
37281\u2C99 "COPTIC SMALL LETTER MI"
37282\u2C9A "COPTIC CAPITAL LETTER NI"
37283\u2C9B "COPTIC SMALL LETTER NI"
37284\u2C9C "COPTIC CAPITAL LETTER KSI"
37285\u2C9D "COPTIC SMALL LETTER KSI"
37286\u2C9E "COPTIC CAPITAL LETTER O"
37287\u2C9F "COPTIC SMALL LETTER O"
37288\u2CA0 "COPTIC CAPITAL LETTER PI"
37289\u2CA1 "COPTIC SMALL LETTER PI"
37290\u2CA2 "COPTIC CAPITAL LETTER RO"
37291\u2CA3 "COPTIC SMALL LETTER RO"
37292\u2CA4 "COPTIC CAPITAL LETTER SIMA"
37293\u2CA5 "COPTIC SMALL LETTER SIMA"
37294\u2CA6 "COPTIC CAPITAL LETTER TAU"
37295\u2CA7 "COPTIC SMALL LETTER TAU"
37296\u2CA8 "COPTIC CAPITAL LETTER UA"
37297\u2CA9 "COPTIC SMALL LETTER UA"
37298\u2CAA "COPTIC CAPITAL LETTER FI"
37299\u2CAB "COPTIC SMALL LETTER FI"
37300\u2CAC "COPTIC CAPITAL LETTER KHI"
37301\u2CAD "COPTIC SMALL LETTER KHI"
37302\u2CAE "COPTIC CAPITAL LETTER PSI"
37303\u2CAF "COPTIC SMALL LETTER PSI"
37304\u2CB0 "COPTIC CAPITAL LETTER OOU"
37305\u2CB1 "COPTIC SMALL LETTER OOU"
37306\u2CB2 "COPTIC CAPITAL LETTER DIALECT-P ALEF"
37307\u2CB3 "COPTIC SMALL LETTER DIALECT-P ALEF"
37308\u2CB4 "COPTIC CAPITAL LETTER OLD COPTIC AIN"
37309\u2CB5 "COPTIC SMALL LETTER OLD COPTIC AIN"
37310\u2CB6 "COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE"
37311\u2CB7 "COPTIC SMALL LETTER CRYPTOGRAMMIC EIE"
37312\u2CB8 "COPTIC CAPITAL LETTER DIALECT-P KAPA"
37313\u2CB9 "COPTIC SMALL LETTER DIALECT-P KAPA"
37314\u2CBA "COPTIC CAPITAL LETTER DIALECT-P NI"
37315\u2CBB "COPTIC SMALL LETTER DIALECT-P NI"
37316\u2CBC "COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI"
37317\u2CBD "COPTIC SMALL LETTER CRYPTOGRAMMIC NI"
37318\u2CBE "COPTIC CAPITAL LETTER OLD COPTIC OOU"
37319\u2CBF "COPTIC SMALL LETTER OLD COPTIC OOU"
37320\u2CC0 "COPTIC CAPITAL LETTER SAMPI"
37321\u2CC1 "COPTIC SMALL LETTER SAMPI"
37322\u2CC2 "COPTIC CAPITAL LETTER CROSSED SHEI"
37323\u2CC3 "COPTIC SMALL LETTER CROSSED SHEI"
37324\u2CC4 "COPTIC CAPITAL LETTER OLD COPTIC SHEI"
37325\u2CC5 "COPTIC SMALL LETTER OLD COPTIC SHEI"
37326\u2CC6 "COPTIC CAPITAL LETTER OLD COPTIC ESH"
37327\u2CC7 "COPTIC SMALL LETTER OLD COPTIC ESH"
37328\u2CC8 "COPTIC CAPITAL LETTER AKHMIMIC KHEI"
37329\u2CC9 "COPTIC SMALL LETTER AKHMIMIC KHEI"
37330\u2CCA "COPTIC CAPITAL LETTER DIALECT-P HORI"
37331\u2CCB "COPTIC SMALL LETTER DIALECT-P HORI"
37332\u2CCC "COPTIC CAPITAL LETTER OLD COPTIC HORI"
37333\u2CCD "COPTIC SMALL LETTER OLD COPTIC HORI"
37334\u2CCE "COPTIC CAPITAL LETTER OLD COPTIC HA"
37335\u2CCF "COPTIC SMALL LETTER OLD COPTIC HA"
37336\u2CD0 "COPTIC CAPITAL LETTER L-SHAPED HA"
37337\u2CD1 "COPTIC SMALL LETTER L-SHAPED HA"
37338\u2CD2 "COPTIC CAPITAL LETTER OLD COPTIC HEI"
37339\u2CD3 "COPTIC SMALL LETTER OLD COPTIC HEI"
37340\u2CD4 "COPTIC CAPITAL LETTER OLD COPTIC HAT"
37341\u2CD5 "COPTIC SMALL LETTER OLD COPTIC HAT"
37342\u2CD6 "COPTIC CAPITAL LETTER OLD COPTIC GANGIA"
37343\u2CD7 "COPTIC SMALL LETTER OLD COPTIC GANGIA"
37344\u2CD8 "COPTIC CAPITAL LETTER OLD COPTIC DJA"
37345\u2CD9 "COPTIC SMALL LETTER OLD COPTIC DJA"
37346\u2CDA "COPTIC CAPITAL LETTER OLD COPTIC SHIMA"
37347\u2CDB "COPTIC SMALL LETTER OLD COPTIC SHIMA"
37348\u2CDC "COPTIC CAPITAL LETTER OLD NUBIAN SHIMA"
37349\u2CDD "COPTIC SMALL LETTER OLD NUBIAN SHIMA"
37350\u2CDE "COPTIC CAPITAL LETTER OLD NUBIAN NGI"
37351\u2CDF "COPTIC SMALL LETTER OLD NUBIAN NGI"
37352\u2CE0 "COPTIC CAPITAL LETTER OLD NUBIAN NYI"
37353\u2CE1 "COPTIC SMALL LETTER OLD NUBIAN NYI"
37354\u2CE2 "COPTIC CAPITAL LETTER OLD NUBIAN WAU"
37355\u2CE3 "COPTIC SMALL LETTER OLD NUBIAN WAU"
37356\u2CE4 "COPTIC SYMBOL KAI"
37357\u2CE5 "COPTIC SYMBOL MI RO"
37358\u2CE6 "COPTIC SYMBOL PI RO"
37359\u2CE7 "COPTIC SYMBOL STAUROS"
37360\u2CE8 "COPTIC SYMBOL TAU RO"
37361\u2CE9 "COPTIC SYMBOL KHI RO"
37362\u2CEA "COPTIC SYMBOL SHIMA SIMA"
37363\u2CF9 "COPTIC OLD NUBIAN FULL STOP"
37364\u2CFA "COPTIC OLD NUBIAN DIRECT QUESTION MARK"
37365\u2CFB "COPTIC OLD NUBIAN INDIRECT QUESTION MARK"
37366\u2CFC "COPTIC OLD NUBIAN VERSE DIVIDER"
37367\u2CFD "COPTIC FRACTION ONE HALF"
37368\u2CFE "COPTIC FULL STOP"
37369\u2CFF "COPTIC MORPHOLOGICAL DIVIDER"
37370\u2D00 "GEORGIAN SMALL LETTER AN"
37371\u2D01 "GEORGIAN SMALL LETTER BAN"
37372\u2D02 "GEORGIAN SMALL LETTER GAN"
37373\u2D03 "GEORGIAN SMALL LETTER DON"
37374\u2D04 "GEORGIAN SMALL LETTER EN"
37375\u2D05 "GEORGIAN SMALL LETTER VIN"
37376\u2D06 "GEORGIAN SMALL LETTER ZEN"
37377\u2D07 "GEORGIAN SMALL LETTER TAN"
37378\u2D08 "GEORGIAN SMALL LETTER IN"
37379\u2D09 "GEORGIAN SMALL LETTER KAN"
37380\u2D0A "GEORGIAN SMALL LETTER LAS"
37381\u2D0B "GEORGIAN SMALL LETTER MAN"
37382\u2D0C "GEORGIAN SMALL LETTER NAR"
37383\u2D0D "GEORGIAN SMALL LETTER ON"
37384\u2D0E "GEORGIAN SMALL LETTER PAR"
37385\u2D0F "GEORGIAN SMALL LETTER ZHAR"
37386\u2D10 "GEORGIAN SMALL LETTER RAE"
37387\u2D11 "GEORGIAN SMALL LETTER SAN"
37388\u2D12 "GEORGIAN SMALL LETTER TAR"
37389\u2D13 "GEORGIAN SMALL LETTER UN"
37390\u2D14 "GEORGIAN SMALL LETTER PHAR"
37391\u2D15 "GEORGIAN SMALL LETTER KHAR"
37392\u2D16 "GEORGIAN SMALL LETTER GHAN"
37393\u2D17 "GEORGIAN SMALL LETTER QAR"
37394\u2D18 "GEORGIAN SMALL LETTER SHIN"
37395\u2D19 "GEORGIAN SMALL LETTER CHIN"
37396\u2D1A "GEORGIAN SMALL LETTER CAN"
37397\u2D1B "GEORGIAN SMALL LETTER JIL"
37398\u2D1C "GEORGIAN SMALL LETTER CIL"
37399\u2D1D "GEORGIAN SMALL LETTER CHAR"
37400\u2D1E "GEORGIAN SMALL LETTER XAN"
37401\u2D1F "GEORGIAN SMALL LETTER JHAN"
37402\u2D20 "GEORGIAN SMALL LETTER HAE"
37403\u2D21 "GEORGIAN SMALL LETTER HE"
37404\u2D22 "GEORGIAN SMALL LETTER HIE"
37405\u2D23 "GEORGIAN SMALL LETTER WE"
37406\u2D24 "GEORGIAN SMALL LETTER HAR"
37407\u2D25 "GEORGIAN SMALL LETTER HOE"
37408\u2D30 "TIFINAGH LETTER YA"
37409\u2D31 "TIFINAGH LETTER YAB"
37410\u2D32 "TIFINAGH LETTER YABH"
37411\u2D33 "TIFINAGH LETTER YAG"
37412\u2D34 "TIFINAGH LETTER YAGHH"
37413\u2D35 "TIFINAGH LETTER BERBER ACADEMY YAJ"
37414\u2D36 "TIFINAGH LETTER YAJ"
37415\u2D37 "TIFINAGH LETTER YAD"
37416\u2D38 "TIFINAGH LETTER YADH"
37417\u2D39 "TIFINAGH LETTER YADD"
37418\u2D3A "TIFINAGH LETTER YADDH"
37419\u2D3B "TIFINAGH LETTER YEY"
37420\u2D3C "TIFINAGH LETTER YAF"
37421\u2D3D "TIFINAGH LETTER YAK"
37422\u2D3E "TIFINAGH LETTER TUAREG YAK"
37423\u2D3F "TIFINAGH LETTER YAKHH"
37424\u2D40 "TIFINAGH LETTER YAH"
37425\u2D41 "TIFINAGH LETTER BERBER ACADEMY YAH"
37426\u2D42 "TIFINAGH LETTER TUAREG YAH"
37427\u2D43 "TIFINAGH LETTER YAHH"
37428\u2D44 "TIFINAGH LETTER YAA"
37429\u2D45 "TIFINAGH LETTER YAKH"
37430\u2D46 "TIFINAGH LETTER TUAREG YAKH"
37431\u2D47 "TIFINAGH LETTER YAQ"
37432\u2D48 "TIFINAGH LETTER TUAREG YAQ"
37433\u2D49 "TIFINAGH LETTER YI"
37434\u2D4A "TIFINAGH LETTER YAZH"
37435\u2D4B "TIFINAGH LETTER AHAGGAR YAZH"
37436\u2D4C "TIFINAGH LETTER TUAREG YAZH"
37437\u2D4D "TIFINAGH LETTER YAL"
37438\u2D4E "TIFINAGH LETTER YAM"
37439\u2D4F "TIFINAGH LETTER YAN"
37440\u2D50 "TIFINAGH LETTER TUAREG YAGN"
37441\u2D51 "TIFINAGH LETTER TUAREG YANG"
37442\u2D52 "TIFINAGH LETTER YAP"
37443\u2D53 "TIFINAGH LETTER YU"
37444\u2D54 "TIFINAGH LETTER YAR"
37445\u2D55 "TIFINAGH LETTER YARR"
37446\u2D56 "TIFINAGH LETTER YAGH"
37447\u2D57 "TIFINAGH LETTER TUAREG YAGH"
37448\u2D58 "TIFINAGH LETTER AYER YAGH"
37449\u2D59 "TIFINAGH LETTER YAS"
37450\u2D5A "TIFINAGH LETTER YASS"
37451\u2D5B "TIFINAGH LETTER YASH"
37452\u2D5C "TIFINAGH LETTER YAT"
37453\u2D5D "TIFINAGH LETTER YATH"
37454\u2D5E "TIFINAGH LETTER YACH"
37455\u2D5F "TIFINAGH LETTER YATT"
37456\u2D60 "TIFINAGH LETTER YAV"
37457\u2D61 "TIFINAGH LETTER YAW"
37458\u2D62 "TIFINAGH LETTER YAY"
37459\u2D63 "TIFINAGH LETTER YAZ"
37460\u2D64 "TIFINAGH LETTER TAWELLEMET YAZ"
37461\u2D65 "TIFINAGH LETTER YAZZ"
37462\u2D6F "TIFINAGH MODIFIER LETTER LABIALIZATION MARK"
37463\u2D80 "ETHIOPIC SYLLABLE LOA"
37464\u2D81 "ETHIOPIC SYLLABLE MOA"
37465\u2D82 "ETHIOPIC SYLLABLE ROA"
37466\u2D83 "ETHIOPIC SYLLABLE SOA"
37467\u2D84 "ETHIOPIC SYLLABLE SHOA"
37468\u2D85 "ETHIOPIC SYLLABLE BOA"
37469\u2D86 "ETHIOPIC SYLLABLE TOA"
37470\u2D87 "ETHIOPIC SYLLABLE COA"
37471\u2D88 "ETHIOPIC SYLLABLE NOA"
37472\u2D89 "ETHIOPIC SYLLABLE NYOA"
37473\u2D8A "ETHIOPIC SYLLABLE GLOTTAL OA"
37474\u2D8B "ETHIOPIC SYLLABLE ZOA"
37475\u2D8C "ETHIOPIC SYLLABLE DOA"
37476\u2D8D "ETHIOPIC SYLLABLE DDOA"
37477\u2D8E "ETHIOPIC SYLLABLE JOA"
37478\u2D8F "ETHIOPIC SYLLABLE THOA"
37479\u2D90 "ETHIOPIC SYLLABLE CHOA"
37480\u2D91 "ETHIOPIC SYLLABLE PHOA"
37481\u2D92 "ETHIOPIC SYLLABLE POA"
37482\u2D93 "ETHIOPIC SYLLABLE GGWA"
37483\u2D94 "ETHIOPIC SYLLABLE GGWI"
37484\u2D95 "ETHIOPIC SYLLABLE GGWEE"
37485\u2D96 "ETHIOPIC SYLLABLE GGWE"
37486\u2DA0 "ETHIOPIC SYLLABLE SSA"
37487\u2DA1 "ETHIOPIC SYLLABLE SSU"
37488\u2DA2 "ETHIOPIC SYLLABLE SSI"
37489\u2DA3 "ETHIOPIC SYLLABLE SSAA"
37490\u2DA4 "ETHIOPIC SYLLABLE SSEE"
37491\u2DA5 "ETHIOPIC SYLLABLE SSE"
37492\u2DA6 "ETHIOPIC SYLLABLE SSO"
37493\u2DA8 "ETHIOPIC SYLLABLE CCA"
37494\u2DA9 "ETHIOPIC SYLLABLE CCU"
37495\u2DAA "ETHIOPIC SYLLABLE CCI"
37496\u2DAB "ETHIOPIC SYLLABLE CCAA"
37497\u2DAC "ETHIOPIC SYLLABLE CCEE"
37498\u2DAD "ETHIOPIC SYLLABLE CCE"
37499\u2DAE "ETHIOPIC SYLLABLE CCO"
37500\u2DB0 "ETHIOPIC SYLLABLE ZZA"
37501\u2DB1 "ETHIOPIC SYLLABLE ZZU"
37502\u2DB2 "ETHIOPIC SYLLABLE ZZI"
37503\u2DB3 "ETHIOPIC SYLLABLE ZZAA"
37504\u2DB4 "ETHIOPIC SYLLABLE ZZEE"
37505\u2DB5 "ETHIOPIC SYLLABLE ZZE"
37506\u2DB6 "ETHIOPIC SYLLABLE ZZO"
37507\u2DB8 "ETHIOPIC SYLLABLE CCHA"
37508\u2DB9 "ETHIOPIC SYLLABLE CCHU"
37509\u2DBA "ETHIOPIC SYLLABLE CCHI"
37510\u2DBB "ETHIOPIC SYLLABLE CCHAA"
37511\u2DBC "ETHIOPIC SYLLABLE CCHEE"
37512\u2DBD "ETHIOPIC SYLLABLE CCHE"
37513\u2DBE "ETHIOPIC SYLLABLE CCHO"
37514\u2DC0 "ETHIOPIC SYLLABLE QYA"
37515\u2DC1 "ETHIOPIC SYLLABLE QYU"
37516\u2DC2 "ETHIOPIC SYLLABLE QYI"
37517\u2DC3 "ETHIOPIC SYLLABLE QYAA"
37518\u2DC4 "ETHIOPIC SYLLABLE QYEE"
37519\u2DC5 "ETHIOPIC SYLLABLE QYE"
37520\u2DC6 "ETHIOPIC SYLLABLE QYO"
37521\u2DC8 "ETHIOPIC SYLLABLE KYA"
37522\u2DC9 "ETHIOPIC SYLLABLE KYU"
37523\u2DCA "ETHIOPIC SYLLABLE KYI"
37524\u2DCB "ETHIOPIC SYLLABLE KYAA"
37525\u2DCC "ETHIOPIC SYLLABLE KYEE"
37526\u2DCD "ETHIOPIC SYLLABLE KYE"
37527\u2DCE "ETHIOPIC SYLLABLE KYO"
37528\u2DD0 "ETHIOPIC SYLLABLE XYA"
37529\u2DD1 "ETHIOPIC SYLLABLE XYU"
37530\u2DD2 "ETHIOPIC SYLLABLE XYI"
37531\u2DD3 "ETHIOPIC SYLLABLE XYAA"
37532\u2DD4 "ETHIOPIC SYLLABLE XYEE"
37533\u2DD5 "ETHIOPIC SYLLABLE XYE"
37534\u2DD6 "ETHIOPIC SYLLABLE XYO"
37535\u2DD8 "ETHIOPIC SYLLABLE GYA"
37536\u2DD9 "ETHIOPIC SYLLABLE GYU"
37537\u2DDA "ETHIOPIC SYLLABLE GYI"
37538\u2DDB "ETHIOPIC SYLLABLE GYAA"
37539\u2DDC "ETHIOPIC SYLLABLE GYEE"
37540\u2DDD "ETHIOPIC SYLLABLE GYE"
37541\u2DDE "ETHIOPIC SYLLABLE GYO"
37542\u2DE0 "COMBINING CYRILLIC LETTER BE"
37543\u2DE1 "COMBINING CYRILLIC LETTER VE"
37544\u2DE2 "COMBINING CYRILLIC LETTER GHE"
37545\u2DE3 "COMBINING CYRILLIC LETTER DE"
37546\u2DE4 "COMBINING CYRILLIC LETTER ZHE"
37547\u2DE5 "COMBINING CYRILLIC LETTER ZE"
37548\u2DE6 "COMBINING CYRILLIC LETTER KA"
37549\u2DE7 "COMBINING CYRILLIC LETTER EL"
37550\u2DE8 "COMBINING CYRILLIC LETTER EM"
37551\u2DE9 "COMBINING CYRILLIC LETTER EN"
37552\u2DEA "COMBINING CYRILLIC LETTER O"
37553\u2DEB "COMBINING CYRILLIC LETTER PE"
37554\u2DEC "COMBINING CYRILLIC LETTER ER"
37555\u2DED "COMBINING CYRILLIC LETTER ES"
37556\u2DEE "COMBINING CYRILLIC LETTER TE"
37557\u2DEF "COMBINING CYRILLIC LETTER HA"
37558\u2DF0 "COMBINING CYRILLIC LETTER TSE"
37559\u2DF1 "COMBINING CYRILLIC LETTER CHE"
37560\u2DF2 "COMBINING CYRILLIC LETTER SHA"
37561\u2DF3 "COMBINING CYRILLIC LETTER SHCHA"
37562\u2DF4 "COMBINING CYRILLIC LETTER FITA"
37563\u2DF5 "COMBINING CYRILLIC LETTER ES-TE"
37564\u2DF6 "COMBINING CYRILLIC LETTER A"
37565\u2DF7 "COMBINING CYRILLIC LETTER IE"
37566\u2DF8 "COMBINING CYRILLIC LETTER DJERV"
37567\u2DF9 "COMBINING CYRILLIC LETTER MONOGRAPH UK"
37568\u2DFA "COMBINING CYRILLIC LETTER YAT"
37569\u2DFB "COMBINING CYRILLIC LETTER YU"
37570\u2DFC "COMBINING CYRILLIC LETTER IOTIFIED A"
37571\u2DFD "COMBINING CYRILLIC LETTER LITTLE YUS"
37572\u2DFE "COMBINING CYRILLIC LETTER BIG YUS"
37573\u2DFF "COMBINING CYRILLIC LETTER IOTIFIED BIG YUS"
37574\u2E00 "RIGHT ANGLE SUBSTITUTION MARKER"
37575\u2E01 "RIGHT ANGLE DOTTED SUBSTITUTION MARKER"
37576\u2E02 "LEFT SUBSTITUTION BRACKET"
37577\u2E03 "RIGHT SUBSTITUTION BRACKET"
37578\u2E04 "LEFT DOTTED SUBSTITUTION BRACKET"
37579\u2E05 "RIGHT DOTTED SUBSTITUTION BRACKET"
37580\u2E06 "RAISED INTERPOLATION MARKER"
37581\u2E07 "RAISED DOTTED INTERPOLATION MARKER"
37582\u2E08 "DOTTED TRANSPOSITION MARKER"
37583\u2E09 "LEFT TRANSPOSITION BRACKET"
37584\u2E0A "RIGHT TRANSPOSITION BRACKET"
37585\u2E0B "RAISED SQUARE"
37586\u2E0C "LEFT RAISED OMISSION BRACKET"
37587\u2E0D "RIGHT RAISED OMISSION BRACKET"
37588\u2E0E "EDITORIAL CORONIS"
37589\u2E0F "PARAGRAPHOS"
37590\u2E10 "FORKED PARAGRAPHOS"
37591\u2E11 "REVERSED FORKED PARAGRAPHOS"
37592\u2E12 "HYPODIASTOLE"
37593\u2E13 "DOTTED OBELOS"
37594\u2E14 "DOWNWARDS ANCORA"
37595\u2E15 "UPWARDS ANCORA"
37596\u2E16 "DOTTED RIGHT-POINTING ANGLE"
37597\u2E17 "DOUBLE OBLIQUE HYPHEN"
37598\u2E18 "INVERTED INTERROBANG"
37599\u2E19 "PALM BRANCH"
37600\u2E1A "HYPHEN WITH DIAERESIS"
37601\u2E1B "TILDE WITH RING ABOVE"
37602\u2E1C "LEFT LOW PARAPHRASE BRACKET"
37603\u2E1D "RIGHT LOW PARAPHRASE BRACKET"
37604\u2E1E "TILDE WITH DOT ABOVE"
37605\u2E1F "TILDE WITH DOT BELOW"
37606\u2E20 "LEFT VERTICAL BAR WITH QUILL"
37607\u2E21 "RIGHT VERTICAL BAR WITH QUILL"
37608\u2E22 "TOP LEFT HALF BRACKET"
37609\u2E23 "TOP RIGHT HALF BRACKET"
37610\u2E24 "BOTTOM LEFT HALF BRACKET"
37611\u2E25 "BOTTOM RIGHT HALF BRACKET"
37612\u2E26 "LEFT SIDEWAYS U BRACKET"
37613\u2E27 "RIGHT SIDEWAYS U BRACKET"
37614\u2E28 "LEFT DOUBLE PARENTHESIS"
37615\u2E29 "RIGHT DOUBLE PARENTHESIS"
37616\u2E2A "TWO DOTS OVER ONE DOT PUNCTUATION"
37617\u2E2B "ONE DOT OVER TWO DOTS PUNCTUATION"
37618\u2E2C "SQUARED FOUR DOT PUNCTUATION"
37619\u2E2D "FIVE DOT MARK"
37620\u2E2E "REVERSED QUESTION MARK"
37621\u2E2F "VERTICAL TILDE"
37622\u2E30 "RING POINT"
37623\u2E80 "CJK RADICAL REPEAT"
37624\u2E81 "CJK RADICAL CLIFF"
37625\u2E82 "CJK RADICAL SECOND ONE"
37626\u2E83 "CJK RADICAL SECOND TWO"
37627\u2E84 "CJK RADICAL SECOND THREE"
37628\u2E85 "CJK RADICAL PERSON"
37629\u2E86 "CJK RADICAL BOX"
37630\u2E87 "CJK RADICAL TABLE"
37631\u2E88 "CJK RADICAL KNIFE ONE"
37632\u2E89 "CJK RADICAL KNIFE TWO"
37633\u2E8A "CJK RADICAL DIVINATION"
37634\u2E8B "CJK RADICAL SEAL"
37635\u2E8C "CJK RADICAL SMALL ONE"
37636\u2E8D "CJK RADICAL SMALL TWO"
37637\u2E8E "CJK RADICAL LAME ONE"
37638\u2E8F "CJK RADICAL LAME TWO"
37639\u2E90 "CJK RADICAL LAME THREE"
37640\u2E91 "CJK RADICAL LAME FOUR"
37641\u2E92 "CJK RADICAL SNAKE"
37642\u2E93 "CJK RADICAL THREAD"
37643\u2E94 "CJK RADICAL SNOUT ONE"
37644\u2E95 "CJK RADICAL SNOUT TWO"
37645\u2E96 "CJK RADICAL HEART ONE"
37646\u2E97 "CJK RADICAL HEART TWO"
37647\u2E98 "CJK RADICAL HAND"
37648\u2E99 "CJK RADICAL RAP"
37649\u2E9B "CJK RADICAL CHOKE"
37650\u2E9C "CJK RADICAL SUN"
37651\u2E9D "CJK RADICAL MOON"
37652\u2E9E "CJK RADICAL DEATH"
37653\u2E9F "CJK RADICAL MOTHER"
37654\u2EA0 "CJK RADICAL CIVILIAN"
37655\u2EA1 "CJK RADICAL WATER ONE"
37656\u2EA2 "CJK RADICAL WATER TWO"
37657\u2EA3 "CJK RADICAL FIRE"
37658\u2EA4 "CJK RADICAL PAW ONE"
37659\u2EA5 "CJK RADICAL PAW TWO"
37660\u2EA6 "CJK RADICAL SIMPLIFIED HALF TREE TRUNK"
37661\u2EA7 "CJK RADICAL COW"
37662\u2EA8 "CJK RADICAL DOG"
37663\u2EA9 "CJK RADICAL JADE"
37664\u2EAA "CJK RADICAL BOLT OF CLOTH"
37665\u2EAB "CJK RADICAL EYE"
37666\u2EAC "CJK RADICAL SPIRIT ONE"
37667\u2EAD "CJK RADICAL SPIRIT TWO"
37668\u2EAE "CJK RADICAL BAMBOO"
37669\u2EAF "CJK RADICAL SILK"
37670\u2EB0 "CJK RADICAL C-SIMPLIFIED SILK"
37671\u2EB1 "CJK RADICAL NET ONE"
37672\u2EB2 "CJK RADICAL NET TWO"
37673\u2EB3 "CJK RADICAL NET THREE"
37674\u2EB4 "CJK RADICAL NET FOUR"
37675\u2EB5 "CJK RADICAL MESH"
37676\u2EB6 "CJK RADICAL SHEEP"
37677\u2EB7 "CJK RADICAL RAM"
37678\u2EB8 "CJK RADICAL EWE"
37679\u2EB9 "CJK RADICAL OLD"
37680\u2EBA "CJK RADICAL BRUSH ONE"
37681\u2EBB "CJK RADICAL BRUSH TWO"
37682\u2EBC "CJK RADICAL MEAT"
37683\u2EBD "CJK RADICAL MORTAR"
37684\u2EBE "CJK RADICAL GRASS ONE"
37685\u2EBF "CJK RADICAL GRASS TWO"
37686\u2EC0 "CJK RADICAL GRASS THREE"
37687\u2EC1 "CJK RADICAL TIGER"
37688\u2EC2 "CJK RADICAL CLOTHES"
37689\u2EC3 "CJK RADICAL WEST ONE"
37690\u2EC4 "CJK RADICAL WEST TWO"
37691\u2EC5 "CJK RADICAL C-SIMPLIFIED SEE"
37692\u2EC6 "CJK RADICAL SIMPLIFIED HORN"
37693\u2EC7 "CJK RADICAL HORN"
37694\u2EC8 "CJK RADICAL C-SIMPLIFIED SPEECH"
37695\u2EC9 "CJK RADICAL C-SIMPLIFIED SHELL"
37696\u2ECA "CJK RADICAL FOOT"
37697\u2ECB "CJK RADICAL C-SIMPLIFIED CART"
37698\u2ECC "CJK RADICAL SIMPLIFIED WALK"
37699\u2ECD "CJK RADICAL WALK ONE"
37700\u2ECE "CJK RADICAL WALK TWO"
37701\u2ECF "CJK RADICAL CITY"
37702\u2ED0 "CJK RADICAL C-SIMPLIFIED GOLD"
37703\u2ED1 "CJK RADICAL LONG ONE"
37704\u2ED2 "CJK RADICAL LONG TWO"
37705\u2ED3 "CJK RADICAL C-SIMPLIFIED LONG"
37706\u2ED4 "CJK RADICAL C-SIMPLIFIED GATE"
37707\u2ED5 "CJK RADICAL MOUND ONE"
37708\u2ED6 "CJK RADICAL MOUND TWO"
37709\u2ED7 "CJK RADICAL RAIN"
37710\u2ED8 "CJK RADICAL BLUE"
37711\u2ED9 "CJK RADICAL C-SIMPLIFIED TANNED LEATHER"
37712\u2EDA "CJK RADICAL C-SIMPLIFIED LEAF"
37713\u2EDB "CJK RADICAL C-SIMPLIFIED WIND"
37714\u2EDC "CJK RADICAL C-SIMPLIFIED FLY"
37715\u2EDD "CJK RADICAL EAT ONE"
37716\u2EDE "CJK RADICAL EAT TWO"
37717\u2EDF "CJK RADICAL EAT THREE"
37718\u2EE0 "CJK RADICAL C-SIMPLIFIED EAT"
37719\u2EE1 "CJK RADICAL HEAD"
37720\u2EE2 "CJK RADICAL C-SIMPLIFIED HORSE"
37721\u2EE3 "CJK RADICAL BONE"
37722\u2EE4 "CJK RADICAL GHOST"
37723\u2EE5 "CJK RADICAL C-SIMPLIFIED FISH"
37724\u2EE6 "CJK RADICAL C-SIMPLIFIED BIRD"
37725\u2EE7 "CJK RADICAL C-SIMPLIFIED SALT"
37726\u2EE8 "CJK RADICAL SIMPLIFIED WHEAT"
37727\u2EE9 "CJK RADICAL SIMPLIFIED YELLOW"
37728\u2EEA "CJK RADICAL C-SIMPLIFIED FROG"
37729\u2EEB "CJK RADICAL J-SIMPLIFIED EVEN"
37730\u2EEC "CJK RADICAL C-SIMPLIFIED EVEN"
37731\u2EED "CJK RADICAL J-SIMPLIFIED TOOTH"
37732\u2EEE "CJK RADICAL C-SIMPLIFIED TOOTH"
37733\u2EEF "CJK RADICAL J-SIMPLIFIED DRAGON"
37734\u2EF0 "CJK RADICAL C-SIMPLIFIED DRAGON"
37735\u2EF1 "CJK RADICAL TURTLE"
37736\u2EF2 "CJK RADICAL J-SIMPLIFIED TURTLE"
37737\u2EF3 "CJK RADICAL C-SIMPLIFIED TURTLE"
37738\u2F00 "KANGXI RADICAL ONE"
37739\u2F01 "KANGXI RADICAL LINE"
37740\u2F02 "KANGXI RADICAL DOT"
37741\u2F03 "KANGXI RADICAL SLASH"
37742\u2F04 "KANGXI RADICAL SECOND"
37743\u2F05 "KANGXI RADICAL HOOK"
37744\u2F06 "KANGXI RADICAL TWO"
37745\u2F07 "KANGXI RADICAL LID"
37746\u2F08 "KANGXI RADICAL MAN"
37747\u2F09 "KANGXI RADICAL LEGS"
37748\u2F0A "KANGXI RADICAL ENTER"
37749\u2F0B "KANGXI RADICAL EIGHT"
37750\u2F0C "KANGXI RADICAL DOWN BOX"
37751\u2F0D "KANGXI RADICAL COVER"
37752\u2F0E "KANGXI RADICAL ICE"
37753\u2F0F "KANGXI RADICAL TABLE"
37754\u2F10 "KANGXI RADICAL OPEN BOX"
37755\u2F11 "KANGXI RADICAL KNIFE"
37756\u2F12 "KANGXI RADICAL POWER"
37757\u2F13 "KANGXI RADICAL WRAP"
37758\u2F14 "KANGXI RADICAL SPOON"
37759\u2F15 "KANGXI RADICAL RIGHT OPEN BOX"
37760\u2F16 "KANGXI RADICAL HIDING ENCLOSURE"
37761\u2F17 "KANGXI RADICAL TEN"
37762\u2F18 "KANGXI RADICAL DIVINATION"
37763\u2F19 "KANGXI RADICAL SEAL"
37764\u2F1A "KANGXI RADICAL CLIFF"
37765\u2F1B "KANGXI RADICAL PRIVATE"
37766\u2F1C "KANGXI RADICAL AGAIN"
37767\u2F1D "KANGXI RADICAL MOUTH"
37768\u2F1E "KANGXI RADICAL ENCLOSURE"
37769\u2F1F "KANGXI RADICAL EARTH"
37770\u2F20 "KANGXI RADICAL SCHOLAR"
37771\u2F21 "KANGXI RADICAL GO"
37772\u2F22 "KANGXI RADICAL GO SLOWLY"
37773\u2F23 "KANGXI RADICAL EVENING"
37774\u2F24 "KANGXI RADICAL BIG"
37775\u2F25 "KANGXI RADICAL WOMAN"
37776\u2F26 "KANGXI RADICAL CHILD"
37777\u2F27 "KANGXI RADICAL ROOF"
37778\u2F28 "KANGXI RADICAL INCH"
37779\u2F29 "KANGXI RADICAL SMALL"
37780\u2F2A "KANGXI RADICAL LAME"
37781\u2F2B "KANGXI RADICAL CORPSE"
37782\u2F2C "KANGXI RADICAL SPROUT"
37783\u2F2D "KANGXI RADICAL MOUNTAIN"
37784\u2F2E "KANGXI RADICAL RIVER"
37785\u2F2F "KANGXI RADICAL WORK"
37786\u2F30 "KANGXI RADICAL ONESELF"
37787\u2F31 "KANGXI RADICAL TURBAN"
37788\u2F32 "KANGXI RADICAL DRY"
37789\u2F33 "KANGXI RADICAL SHORT THREAD"
37790\u2F34 "KANGXI RADICAL DOTTED CLIFF"
37791\u2F35 "KANGXI RADICAL LONG STRIDE"
37792\u2F36 "KANGXI RADICAL TWO HANDS"
37793\u2F37 "KANGXI RADICAL SHOOT"
37794\u2F38 "KANGXI RADICAL BOW"
37795\u2F39 "KANGXI RADICAL SNOUT"
37796\u2F3A "KANGXI RADICAL BRISTLE"
37797\u2F3B "KANGXI RADICAL STEP"
37798\u2F3C "KANGXI RADICAL HEART"
37799\u2F3D "KANGXI RADICAL HALBERD"
37800\u2F3E "KANGXI RADICAL DOOR"
37801\u2F3F "KANGXI RADICAL HAND"
37802\u2F40 "KANGXI RADICAL BRANCH"
37803\u2F41 "KANGXI RADICAL RAP"
37804\u2F42 "KANGXI RADICAL SCRIPT"
37805\u2F43 "KANGXI RADICAL DIPPER"
37806\u2F44 "KANGXI RADICAL AXE"
37807\u2F45 "KANGXI RADICAL SQUARE"
37808\u2F46 "KANGXI RADICAL NOT"
37809\u2F47 "KANGXI RADICAL SUN"
37810\u2F48 "KANGXI RADICAL SAY"
37811\u2F49 "KANGXI RADICAL MOON"
37812\u2F4A "KANGXI RADICAL TREE"
37813\u2F4B "KANGXI RADICAL LACK"
37814\u2F4C "KANGXI RADICAL STOP"
37815\u2F4D "KANGXI RADICAL DEATH"
37816\u2F4E "KANGXI RADICAL WEAPON"
37817\u2F4F "KANGXI RADICAL DO NOT"
37818\u2F50 "KANGXI RADICAL COMPARE"
37819\u2F51 "KANGXI RADICAL FUR"
37820\u2F52 "KANGXI RADICAL CLAN"
37821\u2F53 "KANGXI RADICAL STEAM"
37822\u2F54 "KANGXI RADICAL WATER"
37823\u2F55 "KANGXI RADICAL FIRE"
37824\u2F56 "KANGXI RADICAL CLAW"
37825\u2F57 "KANGXI RADICAL FATHER"
37826\u2F58 "KANGXI RADICAL DOUBLE X"
37827\u2F59 "KANGXI RADICAL HALF TREE TRUNK"
37828\u2F5A "KANGXI RADICAL SLICE"
37829\u2F5B "KANGXI RADICAL FANG"
37830\u2F5C "KANGXI RADICAL COW"
37831\u2F5D "KANGXI RADICAL DOG"
37832\u2F5E "KANGXI RADICAL PROFOUND"
37833\u2F5F "KANGXI RADICAL JADE"
37834\u2F60 "KANGXI RADICAL MELON"
37835\u2F61 "KANGXI RADICAL TILE"
37836\u2F62 "KANGXI RADICAL SWEET"
37837\u2F63 "KANGXI RADICAL LIFE"
37838\u2F64 "KANGXI RADICAL USE"
37839\u2F65 "KANGXI RADICAL FIELD"
37840\u2F66 "KANGXI RADICAL BOLT OF CLOTH"
37841\u2F67 "KANGXI RADICAL SICKNESS"
37842\u2F68 "KANGXI RADICAL DOTTED TENT"
37843\u2F69 "KANGXI RADICAL WHITE"
37844\u2F6A "KANGXI RADICAL SKIN"
37845\u2F6B "KANGXI RADICAL DISH"
37846\u2F6C "KANGXI RADICAL EYE"
37847\u2F6D "KANGXI RADICAL SPEAR"
37848\u2F6E "KANGXI RADICAL ARROW"
37849\u2F6F "KANGXI RADICAL STONE"
37850\u2F70 "KANGXI RADICAL SPIRIT"
37851\u2F71 "KANGXI RADICAL TRACK"
37852\u2F72 "KANGXI RADICAL GRAIN"
37853\u2F73 "KANGXI RADICAL CAVE"
37854\u2F74 "KANGXI RADICAL STAND"
37855\u2F75 "KANGXI RADICAL BAMBOO"
37856\u2F76 "KANGXI RADICAL RICE"
37857\u2F77 "KANGXI RADICAL SILK"
37858\u2F78 "KANGXI RADICAL JAR"
37859\u2F79 "KANGXI RADICAL NET"
37860\u2F7A "KANGXI RADICAL SHEEP"
37861\u2F7B "KANGXI RADICAL FEATHER"
37862\u2F7C "KANGXI RADICAL OLD"
37863\u2F7D "KANGXI RADICAL AND"
37864\u2F7E "KANGXI RADICAL PLOW"
37865\u2F7F "KANGXI RADICAL EAR"
37866\u2F80 "KANGXI RADICAL BRUSH"
37867\u2F81 "KANGXI RADICAL MEAT"
37868\u2F82 "KANGXI RADICAL MINISTER"
37869\u2F83 "KANGXI RADICAL SELF"
37870\u2F84 "KANGXI RADICAL ARRIVE"
37871\u2F85 "KANGXI RADICAL MORTAR"
37872\u2F86 "KANGXI RADICAL TONGUE"
37873\u2F87 "KANGXI RADICAL OPPOSE"
37874\u2F88 "KANGXI RADICAL BOAT"
37875\u2F89 "KANGXI RADICAL STOPPING"
37876\u2F8A "KANGXI RADICAL COLOR"
37877\u2F8B "KANGXI RADICAL GRASS"
37878\u2F8C "KANGXI RADICAL TIGER"
37879\u2F8D "KANGXI RADICAL INSECT"
37880\u2F8E "KANGXI RADICAL BLOOD"
37881\u2F8F "KANGXI RADICAL WALK ENCLOSURE"
37882\u2F90 "KANGXI RADICAL CLOTHES"
37883\u2F91 "KANGXI RADICAL WEST"
37884\u2F92 "KANGXI RADICAL SEE"
37885\u2F93 "KANGXI RADICAL HORN"
37886\u2F94 "KANGXI RADICAL SPEECH"
37887\u2F95 "KANGXI RADICAL VALLEY"
37888\u2F96 "KANGXI RADICAL BEAN"
37889\u2F97 "KANGXI RADICAL PIG"
37890\u2F98 "KANGXI RADICAL BADGER"
37891\u2F99 "KANGXI RADICAL SHELL"
37892\u2F9A "KANGXI RADICAL RED"
37893\u2F9B "KANGXI RADICAL RUN"
37894\u2F9C "KANGXI RADICAL FOOT"
37895\u2F9D "KANGXI RADICAL BODY"
37896\u2F9E "KANGXI RADICAL CART"
37897\u2F9F "KANGXI RADICAL BITTER"
37898\u2FA0 "KANGXI RADICAL MORNING"
37899\u2FA1 "KANGXI RADICAL WALK"
37900\u2FA2 "KANGXI RADICAL CITY"
37901\u2FA3 "KANGXI RADICAL WINE"
37902\u2FA4 "KANGXI RADICAL DISTINGUISH"
37903\u2FA5 "KANGXI RADICAL VILLAGE"
37904\u2FA6 "KANGXI RADICAL GOLD"
37905\u2FA7 "KANGXI RADICAL LONG"
37906\u2FA8 "KANGXI RADICAL GATE"
37907\u2FA9 "KANGXI RADICAL MOUND"
37908\u2FAA "KANGXI RADICAL SLAVE"
37909\u2FAB "KANGXI RADICAL SHORT TAILED BIRD"
37910\u2FAC "KANGXI RADICAL RAIN"
37911\u2FAD "KANGXI RADICAL BLUE"
37912\u2FAE "KANGXI RADICAL WRONG"
37913\u2FAF "KANGXI RADICAL FACE"
37914\u2FB0 "KANGXI RADICAL LEATHER"
37915\u2FB1 "KANGXI RADICAL TANNED LEATHER"
37916\u2FB2 "KANGXI RADICAL LEEK"
37917\u2FB3 "KANGXI RADICAL SOUND"
37918\u2FB4 "KANGXI RADICAL LEAF"
37919\u2FB5 "KANGXI RADICAL WIND"
37920\u2FB6 "KANGXI RADICAL FLY"
37921\u2FB7 "KANGXI RADICAL EAT"
37922\u2FB8 "KANGXI RADICAL HEAD"
37923\u2FB9 "KANGXI RADICAL FRAGRANT"
37924\u2FBA "KANGXI RADICAL HORSE"
37925\u2FBB "KANGXI RADICAL BONE"
37926\u2FBC "KANGXI RADICAL TALL"
37927\u2FBD "KANGXI RADICAL HAIR"
37928\u2FBE "KANGXI RADICAL FIGHT"
37929\u2FBF "KANGXI RADICAL SACRIFICIAL WINE"
37930\u2FC0 "KANGXI RADICAL CAULDRON"
37931\u2FC1 "KANGXI RADICAL GHOST"
37932\u2FC2 "KANGXI RADICAL FISH"
37933\u2FC3 "KANGXI RADICAL BIRD"
37934\u2FC4 "KANGXI RADICAL SALT"
37935\u2FC5 "KANGXI RADICAL DEER"
37936\u2FC6 "KANGXI RADICAL WHEAT"
37937\u2FC7 "KANGXI RADICAL HEMP"
37938\u2FC8 "KANGXI RADICAL YELLOW"
37939\u2FC9 "KANGXI RADICAL MILLET"
37940\u2FCA "KANGXI RADICAL BLACK"
37941\u2FCB "KANGXI RADICAL EMBROIDERY"
37942\u2FCC "KANGXI RADICAL FROG"
37943\u2FCD "KANGXI RADICAL TRIPOD"
37944\u2FCE "KANGXI RADICAL DRUM"
37945\u2FCF "KANGXI RADICAL RAT"
37946\u2FD0 "KANGXI RADICAL NOSE"
37947\u2FD1 "KANGXI RADICAL EVEN"
37948\u2FD2 "KANGXI RADICAL TOOTH"
37949\u2FD3 "KANGXI RADICAL DRAGON"
37950\u2FD4 "KANGXI RADICAL TURTLE"
37951\u2FD5 "KANGXI RADICAL FLUTE"
37952\u2FF0 "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT"
37953\u2FF1 "IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW"
37954\u2FF2 "IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT"
37955\u2FF3 "IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW"
37956\u2FF4 "IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND"
37957\u2FF5 "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE"
37958\u2FF6 "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW"
37959\u2FF7 "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT"
37960\u2FF8 "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT"
37961\u2FF9 "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT"
37962\u2FFA "IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT"
37963\u2FFB "IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID"
37964\u3000 "IDEOGRAPHIC SPACE"
37965\u3001 "IDEOGRAPHIC COMMA"
37966\u3002 "IDEOGRAPHIC FULL STOP"
37967\u3003 "DITTO MARK"
37968\u3004 "JAPANESE INDUSTRIAL STANDARD SYMBOL"
37969\u3005 "IDEOGRAPHIC ITERATION MARK"
37970\u3006 "IDEOGRAPHIC CLOSING MARK"
37971\u3007 "IDEOGRAPHIC NUMBER ZERO"
37972\u3008 "LEFT ANGLE BRACKET"
37973\u3009 "RIGHT ANGLE BRACKET"
37974\u300A "LEFT DOUBLE ANGLE BRACKET"
37975\u300B "RIGHT DOUBLE ANGLE BRACKET"
37976\u300C "LEFT CORNER BRACKET"
37977\u300D "RIGHT CORNER BRACKET"
37978\u300E "LEFT WHITE CORNER BRACKET"
37979\u300F "RIGHT WHITE CORNER BRACKET"
37980\u3010 "LEFT BLACK LENTICULAR BRACKET"
37981\u3011 "RIGHT BLACK LENTICULAR BRACKET"
37982\u3012 "POSTAL MARK"
37983\u3013 "GETA MARK"
37984\u3014 "LEFT TORTOISE SHELL BRACKET"
37985\u3015 "RIGHT TORTOISE SHELL BRACKET"
37986\u3016 "LEFT WHITE LENTICULAR BRACKET"
37987\u3017 "RIGHT WHITE LENTICULAR BRACKET"
37988\u3018 "LEFT WHITE TORTOISE SHELL BRACKET"
37989\u3019 "RIGHT WHITE TORTOISE SHELL BRACKET"
37990\u301A "LEFT WHITE SQUARE BRACKET"
37991\u301B "RIGHT WHITE SQUARE BRACKET"
37992\u301C "WAVE DASH"
37993\u301D "REVERSED DOUBLE PRIME QUOTATION MARK"
37994\u301E "DOUBLE PRIME QUOTATION MARK"
37995\u301F "LOW DOUBLE PRIME QUOTATION MARK"
37996\u3020 "POSTAL MARK FACE"
37997\u3021 "HANGZHOU NUMERAL ONE"
37998\u3022 "HANGZHOU NUMERAL TWO"
37999\u3023 "HANGZHOU NUMERAL THREE"
38000\u3024 "HANGZHOU NUMERAL FOUR"
38001\u3025 "HANGZHOU NUMERAL FIVE"
38002\u3026 "HANGZHOU NUMERAL SIX"
38003\u3027 "HANGZHOU NUMERAL SEVEN"
38004\u3028 "HANGZHOU NUMERAL EIGHT"
38005\u3029 "HANGZHOU NUMERAL NINE"
38006\u302A "IDEOGRAPHIC LEVEL TONE MARK"
38007\u302B "IDEOGRAPHIC RISING TONE MARK"
38008\u302C "IDEOGRAPHIC DEPARTING TONE MARK"
38009\u302D "IDEOGRAPHIC ENTERING TONE MARK"
38010\u302E "HANGUL SINGLE DOT TONE MARK"
38011\u302F "HANGUL DOUBLE DOT TONE MARK"
38012\u3030 "WAVY DASH"
38013\u3031 "VERTICAL KANA REPEAT MARK"
38014\u3032 "VERTICAL KANA REPEAT WITH VOICED SOUND MARK"
38015\u3033 "VERTICAL KANA REPEAT MARK UPPER HALF"
38016\u3034 "VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF"
38017\u3035 "VERTICAL KANA REPEAT MARK LOWER HALF"
38018\u3036 "CIRCLED POSTAL MARK"
38019\u3037 "IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL"
38020\u3038 "HANGZHOU NUMERAL TEN"
38021\u3039 "HANGZHOU NUMERAL TWENTY"
38022\u303A "HANGZHOU NUMERAL THIRTY"
38023\u303B "VERTICAL IDEOGRAPHIC ITERATION MARK"
38024\u303C "MASU MARK"
38025\u303D "PART ALTERNATION MARK"
38026\u303E "IDEOGRAPHIC VARIATION INDICATOR"
38027\u303F "IDEOGRAPHIC HALF FILL SPACE"
38028\u3041 "HIRAGANA LETTER SMALL A"
38029\u3042 "HIRAGANA LETTER A"
38030\u3043 "HIRAGANA LETTER SMALL I"
38031\u3044 "HIRAGANA LETTER I"
38032\u3045 "HIRAGANA LETTER SMALL U"
38033\u3046 "HIRAGANA LETTER U"
38034\u3047 "HIRAGANA LETTER SMALL E"
38035\u3048 "HIRAGANA LETTER E"
38036\u3049 "HIRAGANA LETTER SMALL O"
38037\u304A "HIRAGANA LETTER O"
38038\u304B "HIRAGANA LETTER KA"
38039\u304C "HIRAGANA LETTER GA"
38040\u304D "HIRAGANA LETTER KI"
38041\u304E "HIRAGANA LETTER GI"
38042\u304F "HIRAGANA LETTER KU"
38043\u3050 "HIRAGANA LETTER GU"
38044\u3051 "HIRAGANA LETTER KE"
38045\u3052 "HIRAGANA LETTER GE"
38046\u3053 "HIRAGANA LETTER KO"
38047\u3054 "HIRAGANA LETTER GO"
38048\u3055 "HIRAGANA LETTER SA"
38049\u3056 "HIRAGANA LETTER ZA"
38050\u3057 "HIRAGANA LETTER SI"
38051\u3058 "HIRAGANA LETTER ZI"
38052\u3059 "HIRAGANA LETTER SU"
38053\u305A "HIRAGANA LETTER ZU"
38054\u305B "HIRAGANA LETTER SE"
38055\u305C "HIRAGANA LETTER ZE"
38056\u305D "HIRAGANA LETTER SO"
38057\u305E "HIRAGANA LETTER ZO"
38058\u305F "HIRAGANA LETTER TA"
38059\u3060 "HIRAGANA LETTER DA"
38060\u3061 "HIRAGANA LETTER TI"
38061\u3062 "HIRAGANA LETTER DI"
38062\u3063 "HIRAGANA LETTER SMALL TU"
38063\u3064 "HIRAGANA LETTER TU"
38064\u3065 "HIRAGANA LETTER DU"
38065\u3066 "HIRAGANA LETTER TE"
38066\u3067 "HIRAGANA LETTER DE"
38067\u3068 "HIRAGANA LETTER TO"
38068\u3069 "HIRAGANA LETTER DO"
38069\u306A "HIRAGANA LETTER NA"
38070\u306B "HIRAGANA LETTER NI"
38071\u306C "HIRAGANA LETTER NU"
38072\u306D "HIRAGANA LETTER NE"
38073\u306E "HIRAGANA LETTER NO"
38074\u306F "HIRAGANA LETTER HA"
38075\u3070 "HIRAGANA LETTER BA"
38076\u3071 "HIRAGANA LETTER PA"
38077\u3072 "HIRAGANA LETTER HI"
38078\u3073 "HIRAGANA LETTER BI"
38079\u3074 "HIRAGANA LETTER PI"
38080\u3075 "HIRAGANA LETTER HU"
38081\u3076 "HIRAGANA LETTER BU"
38082\u3077 "HIRAGANA LETTER PU"
38083\u3078 "HIRAGANA LETTER HE"
38084\u3079 "HIRAGANA LETTER BE"
38085\u307A "HIRAGANA LETTER PE"
38086\u307B "HIRAGANA LETTER HO"
38087\u307C "HIRAGANA LETTER BO"
38088\u307D "HIRAGANA LETTER PO"
38089\u307E "HIRAGANA LETTER MA"
38090\u307F "HIRAGANA LETTER MI"
38091\u3080 "HIRAGANA LETTER MU"
38092\u3081 "HIRAGANA LETTER ME"
38093\u3082 "HIRAGANA LETTER MO"
38094\u3083 "HIRAGANA LETTER SMALL YA"
38095\u3084 "HIRAGANA LETTER YA"
38096\u3085 "HIRAGANA LETTER SMALL YU"
38097\u3086 "HIRAGANA LETTER YU"
38098\u3087 "HIRAGANA LETTER SMALL YO"
38099\u3088 "HIRAGANA LETTER YO"
38100\u3089 "HIRAGANA LETTER RA"
38101\u308A "HIRAGANA LETTER RI"
38102\u308B "HIRAGANA LETTER RU"
38103\u308C "HIRAGANA LETTER RE"
38104\u308D "HIRAGANA LETTER RO"
38105\u308E "HIRAGANA LETTER SMALL WA"
38106\u308F "HIRAGANA LETTER WA"
38107\u3090 "HIRAGANA LETTER WI"
38108\u3091 "HIRAGANA LETTER WE"
38109\u3092 "HIRAGANA LETTER WO"
38110\u3093 "HIRAGANA LETTER N"
38111\u3094 "HIRAGANA LETTER VU"
38112\u3095 "HIRAGANA LETTER SMALL KA"
38113\u3096 "HIRAGANA LETTER SMALL KE"
38114\u3099 "COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK"
38115\u309A "COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK"
38116\u309B "KATAKANA-HIRAGANA VOICED SOUND MARK"
38117\u309C "KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK"
38118\u309D "HIRAGANA ITERATION MARK"
38119\u309E "HIRAGANA VOICED ITERATION MARK"
38120\u309F "HIRAGANA DIGRAPH YORI"
38121\u30A0 "KATAKANA-HIRAGANA DOUBLE HYPHEN"
38122\u30A1 "KATAKANA LETTER SMALL A"
38123\u30A2 "KATAKANA LETTER A"
38124\u30A3 "KATAKANA LETTER SMALL I"
38125\u30A4 "KATAKANA LETTER I"
38126\u30A5 "KATAKANA LETTER SMALL U"
38127\u30A6 "KATAKANA LETTER U"
38128\u30A7 "KATAKANA LETTER SMALL E"
38129\u30A8 "KATAKANA LETTER E"
38130\u30A9 "KATAKANA LETTER SMALL O"
38131\u30AA "KATAKANA LETTER O"
38132\u30AB "KATAKANA LETTER KA"
38133\u30AC "KATAKANA LETTER GA"
38134\u30AD "KATAKANA LETTER KI"
38135\u30AE "KATAKANA LETTER GI"
38136\u30AF "KATAKANA LETTER KU"
38137\u30B0 "KATAKANA LETTER GU"
38138\u30B1 "KATAKANA LETTER KE"
38139\u30B2 "KATAKANA LETTER GE"
38140\u30B3 "KATAKANA LETTER KO"
38141\u30B4 "KATAKANA LETTER GO"
38142\u30B5 "KATAKANA LETTER SA"
38143\u30B6 "KATAKANA LETTER ZA"
38144\u30B7 "KATAKANA LETTER SI"
38145\u30B8 "KATAKANA LETTER ZI"
38146\u30B9 "KATAKANA LETTER SU"
38147\u30BA "KATAKANA LETTER ZU"
38148\u30BB "KATAKANA LETTER SE"
38149\u30BC "KATAKANA LETTER ZE"
38150\u30BD "KATAKANA LETTER SO"
38151\u30BE "KATAKANA LETTER ZO"
38152\u30BF "KATAKANA LETTER TA"
38153\u30C0 "KATAKANA LETTER DA"
38154\u30C1 "KATAKANA LETTER TI"
38155\u30C2 "KATAKANA LETTER DI"
38156\u30C3 "KATAKANA LETTER SMALL TU"
38157\u30C4 "KATAKANA LETTER TU"
38158\u30C5 "KATAKANA LETTER DU"
38159\u30C6 "KATAKANA LETTER TE"
38160\u30C7 "KATAKANA LETTER DE"
38161\u30C8 "KATAKANA LETTER TO"
38162\u30C9 "KATAKANA LETTER DO"
38163\u30CA "KATAKANA LETTER NA"
38164\u30CB "KATAKANA LETTER NI"
38165\u30CC "KATAKANA LETTER NU"
38166\u30CD "KATAKANA LETTER NE"
38167\u30CE "KATAKANA LETTER NO"
38168\u30CF "KATAKANA LETTER HA"
38169\u30D0 "KATAKANA LETTER BA"
38170\u30D1 "KATAKANA LETTER PA"
38171\u30D2 "KATAKANA LETTER HI"
38172\u30D3 "KATAKANA LETTER BI"
38173\u30D4 "KATAKANA LETTER PI"
38174\u30D5 "KATAKANA LETTER HU"
38175\u30D6 "KATAKANA LETTER BU"
38176\u30D7 "KATAKANA LETTER PU"
38177\u30D8 "KATAKANA LETTER HE"
38178\u30D9 "KATAKANA LETTER BE"
38179\u30DA "KATAKANA LETTER PE"
38180\u30DB "KATAKANA LETTER HO"
38181\u30DC "KATAKANA LETTER BO"
38182\u30DD "KATAKANA LETTER PO"
38183\u30DE "KATAKANA LETTER MA"
38184\u30DF "KATAKANA LETTER MI"
38185\u30E0 "KATAKANA LETTER MU"
38186\u30E1 "KATAKANA LETTER ME"
38187\u30E2 "KATAKANA LETTER MO"
38188\u30E3 "KATAKANA LETTER SMALL YA"
38189\u30E4 "KATAKANA LETTER YA"
38190\u30E5 "KATAKANA LETTER SMALL YU"
38191\u30E6 "KATAKANA LETTER YU"
38192\u30E7 "KATAKANA LETTER SMALL YO"
38193\u30E8 "KATAKANA LETTER YO"
38194\u30E9 "KATAKANA LETTER RA"
38195\u30EA "KATAKANA LETTER RI"
38196\u30EB "KATAKANA LETTER RU"
38197\u30EC "KATAKANA LETTER RE"
38198\u30ED "KATAKANA LETTER RO"
38199\u30EE "KATAKANA LETTER SMALL WA"
38200\u30EF "KATAKANA LETTER WA"
38201\u30F0 "KATAKANA LETTER WI"
38202\u30F1 "KATAKANA LETTER WE"
38203\u30F2 "KATAKANA LETTER WO"
38204\u30F3 "KATAKANA LETTER N"
38205\u30F4 "KATAKANA LETTER VU"
38206\u30F5 "KATAKANA LETTER SMALL KA"
38207\u30F6 "KATAKANA LETTER SMALL KE"
38208\u30F7 "KATAKANA LETTER VA"
38209\u30F8 "KATAKANA LETTER VI"
38210\u30F9 "KATAKANA LETTER VE"
38211\u30FA "KATAKANA LETTER VO"
38212\u30FB "KATAKANA MIDDLE DOT"
38213\u30FC "KATAKANA-HIRAGANA PROLONGED SOUND MARK"
38214\u30FD "KATAKANA ITERATION MARK"
38215\u30FE "KATAKANA VOICED ITERATION MARK"
38216\u30FF "KATAKANA DIGRAPH KOTO"
38217\u3105 "BOPOMOFO LETTER B"
38218\u3106 "BOPOMOFO LETTER P"
38219\u3107 "BOPOMOFO LETTER M"
38220\u3108 "BOPOMOFO LETTER F"
38221\u3109 "BOPOMOFO LETTER D"
38222\u310A "BOPOMOFO LETTER T"
38223\u310B "BOPOMOFO LETTER N"
38224\u310C "BOPOMOFO LETTER L"
38225\u310D "BOPOMOFO LETTER G"
38226\u310E "BOPOMOFO LETTER K"
38227\u310F "BOPOMOFO LETTER H"
38228\u3110 "BOPOMOFO LETTER J"
38229\u3111 "BOPOMOFO LETTER Q"
38230\u3112 "BOPOMOFO LETTER X"
38231\u3113 "BOPOMOFO LETTER ZH"
38232\u3114 "BOPOMOFO LETTER CH"
38233\u3115 "BOPOMOFO LETTER SH"
38234\u3116 "BOPOMOFO LETTER R"
38235\u3117 "BOPOMOFO LETTER Z"
38236\u3118 "BOPOMOFO LETTER C"
38237\u3119 "BOPOMOFO LETTER S"
38238\u311A "BOPOMOFO LETTER A"
38239\u311B "BOPOMOFO LETTER O"
38240\u311C "BOPOMOFO LETTER E"
38241\u311D "BOPOMOFO LETTER EH"
38242\u311E "BOPOMOFO LETTER AI"
38243\u311F "BOPOMOFO LETTER EI"
38244\u3120 "BOPOMOFO LETTER AU"
38245\u3121 "BOPOMOFO LETTER OU"
38246\u3122 "BOPOMOFO LETTER AN"
38247\u3123 "BOPOMOFO LETTER EN"
38248\u3124 "BOPOMOFO LETTER ANG"
38249\u3125 "BOPOMOFO LETTER ENG"
38250\u3126 "BOPOMOFO LETTER ER"
38251\u3127 "BOPOMOFO LETTER I"
38252\u3128 "BOPOMOFO LETTER U"
38253\u3129 "BOPOMOFO LETTER IU"
38254\u312A "BOPOMOFO LETTER V"
38255\u312B "BOPOMOFO LETTER NG"
38256\u312C "BOPOMOFO LETTER GN"
38257\u312D "BOPOMOFO LETTER IH"
38258\u3131 "HANGUL LETTER KIYEOK"
38259\u3132 "HANGUL LETTER SSANGKIYEOK"
38260\u3133 "HANGUL LETTER KIYEOK-SIOS"
38261\u3134 "HANGUL LETTER NIEUN"
38262\u3135 "HANGUL LETTER NIEUN-CIEUC"
38263\u3136 "HANGUL LETTER NIEUN-HIEUH"
38264\u3137 "HANGUL LETTER TIKEUT"
38265\u3138 "HANGUL LETTER SSANGTIKEUT"
38266\u3139 "HANGUL LETTER RIEUL"
38267\u313A "HANGUL LETTER RIEUL-KIYEOK"
38268\u313B "HANGUL LETTER RIEUL-MIEUM"
38269\u313C "HANGUL LETTER RIEUL-PIEUP"
38270\u313D "HANGUL LETTER RIEUL-SIOS"
38271\u313E "HANGUL LETTER RIEUL-THIEUTH"
38272\u313F "HANGUL LETTER RIEUL-PHIEUPH"
38273\u3140 "HANGUL LETTER RIEUL-HIEUH"
38274\u3141 "HANGUL LETTER MIEUM"
38275\u3142 "HANGUL LETTER PIEUP"
38276\u3143 "HANGUL LETTER SSANGPIEUP"
38277\u3144 "HANGUL LETTER PIEUP-SIOS"
38278\u3145 "HANGUL LETTER SIOS"
38279\u3146 "HANGUL LETTER SSANGSIOS"
38280\u3147 "HANGUL LETTER IEUNG"
38281\u3148 "HANGUL LETTER CIEUC"
38282\u3149 "HANGUL LETTER SSANGCIEUC"
38283\u314A "HANGUL LETTER CHIEUCH"
38284\u314B "HANGUL LETTER KHIEUKH"
38285\u314C "HANGUL LETTER THIEUTH"
38286\u314D "HANGUL LETTER PHIEUPH"
38287\u314E "HANGUL LETTER HIEUH"
38288\u314F "HANGUL LETTER A"
38289\u3150 "HANGUL LETTER AE"
38290\u3151 "HANGUL LETTER YA"
38291\u3152 "HANGUL LETTER YAE"
38292\u3153 "HANGUL LETTER EO"
38293\u3154 "HANGUL LETTER E"
38294\u3155 "HANGUL LETTER YEO"
38295\u3156 "HANGUL LETTER YE"
38296\u3157 "HANGUL LETTER O"
38297\u3158 "HANGUL LETTER WA"
38298\u3159 "HANGUL LETTER WAE"
38299\u315A "HANGUL LETTER OE"
38300\u315B "HANGUL LETTER YO"
38301\u315C "HANGUL LETTER U"
38302\u315D "HANGUL LETTER WEO"
38303\u315E "HANGUL LETTER WE"
38304\u315F "HANGUL LETTER WI"
38305\u3160 "HANGUL LETTER YU"
38306\u3161 "HANGUL LETTER EU"
38307\u3162 "HANGUL LETTER YI"
38308\u3163 "HANGUL LETTER I"
38309\u3164 "HANGUL FILLER"
38310\u3165 "HANGUL LETTER SSANGNIEUN"
38311\u3166 "HANGUL LETTER NIEUN-TIKEUT"
38312\u3167 "HANGUL LETTER NIEUN-SIOS"
38313\u3168 "HANGUL LETTER NIEUN-PANSIOS"
38314\u3169 "HANGUL LETTER RIEUL-KIYEOK-SIOS"
38315\u316A "HANGUL LETTER RIEUL-TIKEUT"
38316\u316B "HANGUL LETTER RIEUL-PIEUP-SIOS"
38317\u316C "HANGUL LETTER RIEUL-PANSIOS"
38318\u316D "HANGUL LETTER RIEUL-YEORINHIEUH"
38319\u316E "HANGUL LETTER MIEUM-PIEUP"
38320\u316F "HANGUL LETTER MIEUM-SIOS"
38321\u3170 "HANGUL LETTER MIEUM-PANSIOS"
38322\u3171 "HANGUL LETTER KAPYEOUNMIEUM"
38323\u3172 "HANGUL LETTER PIEUP-KIYEOK"
38324\u3173 "HANGUL LETTER PIEUP-TIKEUT"
38325\u3174 "HANGUL LETTER PIEUP-SIOS-KIYEOK"
38326\u3175 "HANGUL LETTER PIEUP-SIOS-TIKEUT"
38327\u3176 "HANGUL LETTER PIEUP-CIEUC"
38328\u3177 "HANGUL LETTER PIEUP-THIEUTH"
38329\u3178 "HANGUL LETTER KAPYEOUNPIEUP"
38330\u3179 "HANGUL LETTER KAPYEOUNSSANGPIEUP"
38331\u317A "HANGUL LETTER SIOS-KIYEOK"
38332\u317B "HANGUL LETTER SIOS-NIEUN"
38333\u317C "HANGUL LETTER SIOS-TIKEUT"
38334\u317D "HANGUL LETTER SIOS-PIEUP"
38335\u317E "HANGUL LETTER SIOS-CIEUC"
38336\u317F "HANGUL LETTER PANSIOS"
38337\u3180 "HANGUL LETTER SSANGIEUNG"
38338\u3181 "HANGUL LETTER YESIEUNG"
38339\u3182 "HANGUL LETTER YESIEUNG-SIOS"
38340\u3183 "HANGUL LETTER YESIEUNG-PANSIOS"
38341\u3184 "HANGUL LETTER KAPYEOUNPHIEUPH"
38342\u3185 "HANGUL LETTER SSANGHIEUH"
38343\u3186 "HANGUL LETTER YEORINHIEUH"
38344\u3187 "HANGUL LETTER YO-YA"
38345\u3188 "HANGUL LETTER YO-YAE"
38346\u3189 "HANGUL LETTER YO-I"
38347\u318A "HANGUL LETTER YU-YEO"
38348\u318B "HANGUL LETTER YU-YE"
38349\u318C "HANGUL LETTER YU-I"
38350\u318D "HANGUL LETTER ARAEA"
38351\u318E "HANGUL LETTER ARAEAE"
38352\u3190 "IDEOGRAPHIC ANNOTATION LINKING MARK"
38353\u3191 "IDEOGRAPHIC ANNOTATION REVERSE MARK"
38354\u3192 "IDEOGRAPHIC ANNOTATION ONE MARK"
38355\u3193 "IDEOGRAPHIC ANNOTATION TWO MARK"
38356\u3194 "IDEOGRAPHIC ANNOTATION THREE MARK"
38357\u3195 "IDEOGRAPHIC ANNOTATION FOUR MARK"
38358\u3196 "IDEOGRAPHIC ANNOTATION TOP MARK"
38359\u3197 "IDEOGRAPHIC ANNOTATION MIDDLE MARK"
38360\u3198 "IDEOGRAPHIC ANNOTATION BOTTOM MARK"
38361\u3199 "IDEOGRAPHIC ANNOTATION FIRST MARK"
38362\u319A "IDEOGRAPHIC ANNOTATION SECOND MARK"
38363\u319B "IDEOGRAPHIC ANNOTATION THIRD MARK"
38364\u319C "IDEOGRAPHIC ANNOTATION FOURTH MARK"
38365\u319D "IDEOGRAPHIC ANNOTATION HEAVEN MARK"
38366\u319E "IDEOGRAPHIC ANNOTATION EARTH MARK"
38367\u319F "IDEOGRAPHIC ANNOTATION MAN MARK"
38368\u31A0 "BOPOMOFO LETTER BU"
38369\u31A1 "BOPOMOFO LETTER ZI"
38370\u31A2 "BOPOMOFO LETTER JI"
38371\u31A3 "BOPOMOFO LETTER GU"
38372\u31A4 "BOPOMOFO LETTER EE"
38373\u31A5 "BOPOMOFO LETTER ENN"
38374\u31A6 "BOPOMOFO LETTER OO"
38375\u31A7 "BOPOMOFO LETTER ONN"
38376\u31A8 "BOPOMOFO LETTER IR"
38377\u31A9 "BOPOMOFO LETTER ANN"
38378\u31AA "BOPOMOFO LETTER INN"
38379\u31AB "BOPOMOFO LETTER UNN"
38380\u31AC "BOPOMOFO LETTER IM"
38381\u31AD "BOPOMOFO LETTER NGG"
38382\u31AE "BOPOMOFO LETTER AINN"
38383\u31AF "BOPOMOFO LETTER AUNN"
38384\u31B0 "BOPOMOFO LETTER AM"
38385\u31B1 "BOPOMOFO LETTER OM"
38386\u31B2 "BOPOMOFO LETTER ONG"
38387\u31B3 "BOPOMOFO LETTER INNN"
38388\u31B4 "BOPOMOFO FINAL LETTER P"
38389\u31B5 "BOPOMOFO FINAL LETTER T"
38390\u31B6 "BOPOMOFO FINAL LETTER K"
38391\u31B7 "BOPOMOFO FINAL LETTER H"
38392\u31C0 "CJK STROKE T"
38393\u31C1 "CJK STROKE WG"
38394\u31C2 "CJK STROKE XG"
38395\u31C3 "CJK STROKE BXG"
38396\u31C4 "CJK STROKE SW"
38397\u31C5 "CJK STROKE HZZ"
38398\u31C6 "CJK STROKE HZG"
38399\u31C7 "CJK STROKE HP"
38400\u31C8 "CJK STROKE HZWG"
38401\u31C9 "CJK STROKE SZWG"
38402\u31CA "CJK STROKE HZT"
38403\u31CB "CJK STROKE HZZP"
38404\u31CC "CJK STROKE HPWG"
38405\u31CD "CJK STROKE HZW"
38406\u31CE "CJK STROKE HZZZ"
38407\u31CF "CJK STROKE N"
38408\u31D0 "CJK STROKE H"
38409\u31D1 "CJK STROKE S"
38410\u31D2 "CJK STROKE P"
38411\u31D3 "CJK STROKE SP"
38412\u31D4 "CJK STROKE D"
38413\u31D5 "CJK STROKE HZ"
38414\u31D6 "CJK STROKE HG"
38415\u31D7 "CJK STROKE SZ"
38416\u31D8 "CJK STROKE SWZ"
38417\u31D9 "CJK STROKE ST"
38418\u31DA "CJK STROKE SG"
38419\u31DB "CJK STROKE PD"
38420\u31DC "CJK STROKE PZ"
38421\u31DD "CJK STROKE TN"
38422\u31DE "CJK STROKE SZZ"
38423\u31DF "CJK STROKE SWG"
38424\u31E0 "CJK STROKE HXWG"
38425\u31E1 "CJK STROKE HZZZG"
38426\u31E2 "CJK STROKE PG"
38427\u31E3 "CJK STROKE Q"
38428\u31F0 "KATAKANA LETTER SMALL KU"
38429\u31F1 "KATAKANA LETTER SMALL SI"
38430\u31F2 "KATAKANA LETTER SMALL SU"
38431\u31F3 "KATAKANA LETTER SMALL TO"
38432\u31F4 "KATAKANA LETTER SMALL NU"
38433\u31F5 "KATAKANA LETTER SMALL HA"
38434\u31F6 "KATAKANA LETTER SMALL HI"
38435\u31F7 "KATAKANA LETTER SMALL HU"
38436\u31F8 "KATAKANA LETTER SMALL HE"
38437\u31F9 "KATAKANA LETTER SMALL HO"
38438\u31FA "KATAKANA LETTER SMALL MU"
38439\u31FB "KATAKANA LETTER SMALL RA"
38440\u31FC "KATAKANA LETTER SMALL RI"
38441\u31FD "KATAKANA LETTER SMALL RU"
38442\u31FE "KATAKANA LETTER SMALL RE"
38443\u31FF "KATAKANA LETTER SMALL RO"
38444\u3200 "PARENTHESIZED HANGUL KIYEOK"
38445\u3201 "PARENTHESIZED HANGUL NIEUN"
38446\u3202 "PARENTHESIZED HANGUL TIKEUT"
38447\u3203 "PARENTHESIZED HANGUL RIEUL"
38448\u3204 "PARENTHESIZED HANGUL MIEUM"
38449\u3205 "PARENTHESIZED HANGUL PIEUP"
38450\u3206 "PARENTHESIZED HANGUL SIOS"
38451\u3207 "PARENTHESIZED HANGUL IEUNG"
38452\u3208 "PARENTHESIZED HANGUL CIEUC"
38453\u3209 "PARENTHESIZED HANGUL CHIEUCH"
38454\u320A "PARENTHESIZED HANGUL KHIEUKH"
38455\u320B "PARENTHESIZED HANGUL THIEUTH"
38456\u320C "PARENTHESIZED HANGUL PHIEUPH"
38457\u320D "PARENTHESIZED HANGUL HIEUH"
38458\u320E "PARENTHESIZED HANGUL KIYEOK A"
38459\u320F "PARENTHESIZED HANGUL NIEUN A"
38460\u3210 "PARENTHESIZED HANGUL TIKEUT A"
38461\u3211 "PARENTHESIZED HANGUL RIEUL A"
38462\u3212 "PARENTHESIZED HANGUL MIEUM A"
38463\u3213 "PARENTHESIZED HANGUL PIEUP A"
38464\u3214 "PARENTHESIZED HANGUL SIOS A"
38465\u3215 "PARENTHESIZED HANGUL IEUNG A"
38466\u3216 "PARENTHESIZED HANGUL CIEUC A"
38467\u3217 "PARENTHESIZED HANGUL CHIEUCH A"
38468\u3218 "PARENTHESIZED HANGUL KHIEUKH A"
38469\u3219 "PARENTHESIZED HANGUL THIEUTH A"
38470\u321A "PARENTHESIZED HANGUL PHIEUPH A"
38471\u321B "PARENTHESIZED HANGUL HIEUH A"
38472\u321C "PARENTHESIZED HANGUL CIEUC U"
38473\u321D "PARENTHESIZED KOREAN CHARACTER OJEON"
38474\u321E "PARENTHESIZED KOREAN CHARACTER O HU"
38475\u3220 "PARENTHESIZED IDEOGRAPH ONE"
38476\u3221 "PARENTHESIZED IDEOGRAPH TWO"
38477\u3222 "PARENTHESIZED IDEOGRAPH THREE"
38478\u3223 "PARENTHESIZED IDEOGRAPH FOUR"
38479\u3224 "PARENTHESIZED IDEOGRAPH FIVE"
38480\u3225 "PARENTHESIZED IDEOGRAPH SIX"
38481\u3226 "PARENTHESIZED IDEOGRAPH SEVEN"
38482\u3227 "PARENTHESIZED IDEOGRAPH EIGHT"
38483\u3228 "PARENTHESIZED IDEOGRAPH NINE"
38484\u3229 "PARENTHESIZED IDEOGRAPH TEN"
38485\u322A "PARENTHESIZED IDEOGRAPH MOON"
38486\u322B "PARENTHESIZED IDEOGRAPH FIRE"
38487\u322C "PARENTHESIZED IDEOGRAPH WATER"
38488\u322D "PARENTHESIZED IDEOGRAPH WOOD"
38489\u322E "PARENTHESIZED IDEOGRAPH METAL"
38490\u322F "PARENTHESIZED IDEOGRAPH EARTH"
38491\u3230 "PARENTHESIZED IDEOGRAPH SUN"
38492\u3231 "PARENTHESIZED IDEOGRAPH STOCK"
38493\u3232 "PARENTHESIZED IDEOGRAPH HAVE"
38494\u3233 "PARENTHESIZED IDEOGRAPH SOCIETY"
38495\u3234 "PARENTHESIZED IDEOGRAPH NAME"
38496\u3235 "PARENTHESIZED IDEOGRAPH SPECIAL"
38497\u3236 "PARENTHESIZED IDEOGRAPH FINANCIAL"
38498\u3237 "PARENTHESIZED IDEOGRAPH CONGRATULATION"
38499\u3238 "PARENTHESIZED IDEOGRAPH LABOR"
38500\u3239 "PARENTHESIZED IDEOGRAPH REPRESENT"
38501\u323A "PARENTHESIZED IDEOGRAPH CALL"
38502\u323B "PARENTHESIZED IDEOGRAPH STUDY"
38503\u323C "PARENTHESIZED IDEOGRAPH SUPERVISE"
38504\u323D "PARENTHESIZED IDEOGRAPH ENTERPRISE"
38505\u323E "PARENTHESIZED IDEOGRAPH RESOURCE"
38506\u323F "PARENTHESIZED IDEOGRAPH ALLIANCE"
38507\u3240 "PARENTHESIZED IDEOGRAPH FESTIVAL"
38508\u3241 "PARENTHESIZED IDEOGRAPH REST"
38509\u3242 "PARENTHESIZED IDEOGRAPH SELF"
38510\u3243 "PARENTHESIZED IDEOGRAPH REACH"
38511\u3250 "PARTNERSHIP SIGN"
38512\u3251 "CIRCLED NUMBER TWENTY ONE"
38513\u3252 "CIRCLED NUMBER TWENTY TWO"
38514\u3253 "CIRCLED NUMBER TWENTY THREE"
38515\u3254 "CIRCLED NUMBER TWENTY FOUR"
38516\u3255 "CIRCLED NUMBER TWENTY FIVE"
38517\u3256 "CIRCLED NUMBER TWENTY SIX"
38518\u3257 "CIRCLED NUMBER TWENTY SEVEN"
38519\u3258 "CIRCLED NUMBER TWENTY EIGHT"
38520\u3259 "CIRCLED NUMBER TWENTY NINE"
38521\u325A "CIRCLED NUMBER THIRTY"
38522\u325B "CIRCLED NUMBER THIRTY ONE"
38523\u325C "CIRCLED NUMBER THIRTY TWO"
38524\u325D "CIRCLED NUMBER THIRTY THREE"
38525\u325E "CIRCLED NUMBER THIRTY FOUR"
38526\u325F "CIRCLED NUMBER THIRTY FIVE"
38527\u3260 "CIRCLED HANGUL KIYEOK"
38528\u3261 "CIRCLED HANGUL NIEUN"
38529\u3262 "CIRCLED HANGUL TIKEUT"
38530\u3263 "CIRCLED HANGUL RIEUL"
38531\u3264 "CIRCLED HANGUL MIEUM"
38532\u3265 "CIRCLED HANGUL PIEUP"
38533\u3266 "CIRCLED HANGUL SIOS"
38534\u3267 "CIRCLED HANGUL IEUNG"
38535\u3268 "CIRCLED HANGUL CIEUC"
38536\u3269 "CIRCLED HANGUL CHIEUCH"
38537\u326A "CIRCLED HANGUL KHIEUKH"
38538\u326B "CIRCLED HANGUL THIEUTH"
38539\u326C "CIRCLED HANGUL PHIEUPH"
38540\u326D "CIRCLED HANGUL HIEUH"
38541\u326E "CIRCLED HANGUL KIYEOK A"
38542\u326F "CIRCLED HANGUL NIEUN A"
38543\u3270 "CIRCLED HANGUL TIKEUT A"
38544\u3271 "CIRCLED HANGUL RIEUL A"
38545\u3272 "CIRCLED HANGUL MIEUM A"
38546\u3273 "CIRCLED HANGUL PIEUP A"
38547\u3274 "CIRCLED HANGUL SIOS A"
38548\u3275 "CIRCLED HANGUL IEUNG A"
38549\u3276 "CIRCLED HANGUL CIEUC A"
38550\u3277 "CIRCLED HANGUL CHIEUCH A"
38551\u3278 "CIRCLED HANGUL KHIEUKH A"
38552\u3279 "CIRCLED HANGUL THIEUTH A"
38553\u327A "CIRCLED HANGUL PHIEUPH A"
38554\u327B "CIRCLED HANGUL HIEUH A"
38555\u327C "CIRCLED KOREAN CHARACTER CHAMKO"
38556\u327D "CIRCLED KOREAN CHARACTER JUEUI"
38557\u327E "CIRCLED HANGUL IEUNG U"
38558\u327F "KOREAN STANDARD SYMBOL"
38559\u3280 "CIRCLED IDEOGRAPH ONE"
38560\u3281 "CIRCLED IDEOGRAPH TWO"
38561\u3282 "CIRCLED IDEOGRAPH THREE"
38562\u3283 "CIRCLED IDEOGRAPH FOUR"
38563\u3284 "CIRCLED IDEOGRAPH FIVE"
38564\u3285 "CIRCLED IDEOGRAPH SIX"
38565\u3286 "CIRCLED IDEOGRAPH SEVEN"
38566\u3287 "CIRCLED IDEOGRAPH EIGHT"
38567\u3288 "CIRCLED IDEOGRAPH NINE"
38568\u3289 "CIRCLED IDEOGRAPH TEN"
38569\u328A "CIRCLED IDEOGRAPH MOON"
38570\u328B "CIRCLED IDEOGRAPH FIRE"
38571\u328C "CIRCLED IDEOGRAPH WATER"
38572\u328D "CIRCLED IDEOGRAPH WOOD"
38573\u328E "CIRCLED IDEOGRAPH METAL"
38574\u328F "CIRCLED IDEOGRAPH EARTH"
38575\u3290 "CIRCLED IDEOGRAPH SUN"
38576\u3291 "CIRCLED IDEOGRAPH STOCK"
38577\u3292 "CIRCLED IDEOGRAPH HAVE"
38578\u3293 "CIRCLED IDEOGRAPH SOCIETY"
38579\u3294 "CIRCLED IDEOGRAPH NAME"
38580\u3295 "CIRCLED IDEOGRAPH SPECIAL"
38581\u3296 "CIRCLED IDEOGRAPH FINANCIAL"
38582\u3297 "CIRCLED IDEOGRAPH CONGRATULATION"
38583\u3298 "CIRCLED IDEOGRAPH LABOR"
38584\u3299 "CIRCLED IDEOGRAPH SECRET"
38585\u329A "CIRCLED IDEOGRAPH MALE"
38586\u329B "CIRCLED IDEOGRAPH FEMALE"
38587\u329C "CIRCLED IDEOGRAPH SUITABLE"
38588\u329D "CIRCLED IDEOGRAPH EXCELLENT"
38589\u329E "CIRCLED IDEOGRAPH PRINT"
38590\u329F "CIRCLED IDEOGRAPH ATTENTION"
38591\u32A0 "CIRCLED IDEOGRAPH ITEM"
38592\u32A1 "CIRCLED IDEOGRAPH REST"
38593\u32A2 "CIRCLED IDEOGRAPH COPY"
38594\u32A3 "CIRCLED IDEOGRAPH CORRECT"
38595\u32A4 "CIRCLED IDEOGRAPH HIGH"
38596\u32A5 "CIRCLED IDEOGRAPH CENTRE"
38597\u32A6 "CIRCLED IDEOGRAPH LOW"
38598\u32A7 "CIRCLED IDEOGRAPH LEFT"
38599\u32A8 "CIRCLED IDEOGRAPH RIGHT"
38600\u32A9 "CIRCLED IDEOGRAPH MEDICINE"
38601\u32AA "CIRCLED IDEOGRAPH RELIGION"
38602\u32AB "CIRCLED IDEOGRAPH STUDY"
38603\u32AC "CIRCLED IDEOGRAPH SUPERVISE"
38604\u32AD "CIRCLED IDEOGRAPH ENTERPRISE"
38605\u32AE "CIRCLED IDEOGRAPH RESOURCE"
38606\u32AF "CIRCLED IDEOGRAPH ALLIANCE"
38607\u32B0 "CIRCLED IDEOGRAPH NIGHT"
38608\u32B1 "CIRCLED NUMBER THIRTY SIX"
38609\u32B2 "CIRCLED NUMBER THIRTY SEVEN"
38610\u32B3 "CIRCLED NUMBER THIRTY EIGHT"
38611\u32B4 "CIRCLED NUMBER THIRTY NINE"
38612\u32B5 "CIRCLED NUMBER FORTY"
38613\u32B6 "CIRCLED NUMBER FORTY ONE"
38614\u32B7 "CIRCLED NUMBER FORTY TWO"
38615\u32B8 "CIRCLED NUMBER FORTY THREE"
38616\u32B9 "CIRCLED NUMBER FORTY FOUR"
38617\u32BA "CIRCLED NUMBER FORTY FIVE"
38618\u32BB "CIRCLED NUMBER FORTY SIX"
38619\u32BC "CIRCLED NUMBER FORTY SEVEN"
38620\u32BD "CIRCLED NUMBER FORTY EIGHT"
38621\u32BE "CIRCLED NUMBER FORTY NINE"
38622\u32BF "CIRCLED NUMBER FIFTY"
38623\u32C0 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY"
38624\u32C1 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY"
38625\u32C2 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH"
38626\u32C3 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL"
38627\u32C4 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY"
38628\u32C5 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE"
38629\u32C6 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY"
38630\u32C7 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST"
38631\u32C8 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER"
38632\u32C9 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER"
38633\u32CA "IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER"
38634\u32CB "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER"
38635\u32CC "SQUARE HG"
38636\u32CD "SQUARE ERG"
38637\u32CE "SQUARE EV"
38638\u32CF "LIMITED LIABILITY SIGN"
38639\u32D0 "CIRCLED KATAKANA A"
38640\u32D1 "CIRCLED KATAKANA I"
38641\u32D2 "CIRCLED KATAKANA U"
38642\u32D3 "CIRCLED KATAKANA E"
38643\u32D4 "CIRCLED KATAKANA O"
38644\u32D5 "CIRCLED KATAKANA KA"
38645\u32D6 "CIRCLED KATAKANA KI"
38646\u32D7 "CIRCLED KATAKANA KU"
38647\u32D8 "CIRCLED KATAKANA KE"
38648\u32D9 "CIRCLED KATAKANA KO"
38649\u32DA "CIRCLED KATAKANA SA"
38650\u32DB "CIRCLED KATAKANA SI"
38651\u32DC "CIRCLED KATAKANA SU"
38652\u32DD "CIRCLED KATAKANA SE"
38653\u32DE "CIRCLED KATAKANA SO"
38654\u32DF "CIRCLED KATAKANA TA"
38655\u32E0 "CIRCLED KATAKANA TI"
38656\u32E1 "CIRCLED KATAKANA TU"
38657\u32E2 "CIRCLED KATAKANA TE"
38658\u32E3 "CIRCLED KATAKANA TO"
38659\u32E4 "CIRCLED KATAKANA NA"
38660\u32E5 "CIRCLED KATAKANA NI"
38661\u32E6 "CIRCLED KATAKANA NU"
38662\u32E7 "CIRCLED KATAKANA NE"
38663\u32E8 "CIRCLED KATAKANA NO"
38664\u32E9 "CIRCLED KATAKANA HA"
38665\u32EA "CIRCLED KATAKANA HI"
38666\u32EB "CIRCLED KATAKANA HU"
38667\u32EC "CIRCLED KATAKANA HE"
38668\u32ED "CIRCLED KATAKANA HO"
38669\u32EE "CIRCLED KATAKANA MA"
38670\u32EF "CIRCLED KATAKANA MI"
38671\u32F0 "CIRCLED KATAKANA MU"
38672\u32F1 "CIRCLED KATAKANA ME"
38673\u32F2 "CIRCLED KATAKANA MO"
38674\u32F3 "CIRCLED KATAKANA YA"
38675\u32F4 "CIRCLED KATAKANA YU"
38676\u32F5 "CIRCLED KATAKANA YO"
38677\u32F6 "CIRCLED KATAKANA RA"
38678\u32F7 "CIRCLED KATAKANA RI"
38679\u32F8 "CIRCLED KATAKANA RU"
38680\u32F9 "CIRCLED KATAKANA RE"
38681\u32FA "CIRCLED KATAKANA RO"
38682\u32FB "CIRCLED KATAKANA WA"
38683\u32FC "CIRCLED KATAKANA WI"
38684\u32FD "CIRCLED KATAKANA WE"
38685\u32FE "CIRCLED KATAKANA WO"
38686\u3300 "SQUARE APAATO"
38687\u3301 "SQUARE ARUHUA"
38688\u3302 "SQUARE ANPEA"
38689\u3303 "SQUARE AARU"
38690\u3304 "SQUARE ININGU"
38691\u3305 "SQUARE INTI"
38692\u3306 "SQUARE UON"
38693\u3307 "SQUARE ESUKUUDO"
38694\u3308 "SQUARE EEKAA"
38695\u3309 "SQUARE ONSU"
38696\u330A "SQUARE OOMU"
38697\u330B "SQUARE KAIRI"
38698\u330C "SQUARE KARATTO"
38699\u330D "SQUARE KARORII"
38700\u330E "SQUARE GARON"
38701\u330F "SQUARE GANMA"
38702\u3310 "SQUARE GIGA"
38703\u3311 "SQUARE GINII"
38704\u3312 "SQUARE KYURII"
38705\u3313 "SQUARE GIRUDAA"
38706\u3314 "SQUARE KIRO"
38707\u3315 "SQUARE KIROGURAMU"
38708\u3316 "SQUARE KIROMEETORU"
38709\u3317 "SQUARE KIROWATTO"
38710\u3318 "SQUARE GURAMU"
38711\u3319 "SQUARE GURAMUTON"
38712\u331A "SQUARE KURUZEIRO"
38713\u331B "SQUARE KUROONE"
38714\u331C "SQUARE KEESU"
38715\u331D "SQUARE KORUNA"
38716\u331E "SQUARE KOOPO"
38717\u331F "SQUARE SAIKURU"
38718\u3320 "SQUARE SANTIIMU"
38719\u3321 "SQUARE SIRINGU"
38720\u3322 "SQUARE SENTI"
38721\u3323 "SQUARE SENTO"
38722\u3324 "SQUARE DAASU"
38723\u3325 "SQUARE DESI"
38724\u3326 "SQUARE DORU"
38725\u3327 "SQUARE TON"
38726\u3328 "SQUARE NANO"
38727\u3329 "SQUARE NOTTO"
38728\u332A "SQUARE HAITU"
38729\u332B "SQUARE PAASENTO"
38730\u332C "SQUARE PAATU"
38731\u332D "SQUARE BAARERU"
38732\u332E "SQUARE PIASUTORU"
38733\u332F "SQUARE PIKURU"
38734\u3330 "SQUARE PIKO"
38735\u3331 "SQUARE BIRU"
38736\u3332 "SQUARE HUARADDO"
38737\u3333 "SQUARE HUIITO"
38738\u3334 "SQUARE BUSSYERU"
38739\u3335 "SQUARE HURAN"
38740\u3336 "SQUARE HEKUTAARU"
38741\u3337 "SQUARE PESO"
38742\u3338 "SQUARE PENIHI"
38743\u3339 "SQUARE HERUTU"
38744\u333A "SQUARE PENSU"
38745\u333B "SQUARE PEEZI"
38746\u333C "SQUARE BEETA"
38747\u333D "SQUARE POINTO"
38748\u333E "SQUARE BORUTO"
38749\u333F "SQUARE HON"
38750\u3340 "SQUARE PONDO"
38751\u3341 "SQUARE HOORU"
38752\u3342 "SQUARE HOON"
38753\u3343 "SQUARE MAIKURO"
38754\u3344 "SQUARE MAIRU"
38755\u3345 "SQUARE MAHHA"
38756\u3346 "SQUARE MARUKU"
38757\u3347 "SQUARE MANSYON"
38758\u3348 "SQUARE MIKURON"
38759\u3349 "SQUARE MIRI"
38760\u334A "SQUARE MIRIBAARU"
38761\u334B "SQUARE MEGA"
38762\u334C "SQUARE MEGATON"
38763\u334D "SQUARE MEETORU"
38764\u334E "SQUARE YAADO"
38765\u334F "SQUARE YAARU"
38766\u3350 "SQUARE YUAN"
38767\u3351 "SQUARE RITTORU"
38768\u3352 "SQUARE RIRA"
38769\u3353 "SQUARE RUPII"
38770\u3354 "SQUARE RUUBURU"
38771\u3355 "SQUARE REMU"
38772\u3356 "SQUARE RENTOGEN"
38773\u3357 "SQUARE WATTO"
38774\u3358 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO"
38775\u3359 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE"
38776\u335A "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO"
38777\u335B "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE"
38778\u335C "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR"
38779\u335D "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE"
38780\u335E "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX"
38781\u335F "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN"
38782\u3360 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT"
38783\u3361 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE"
38784\u3362 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN"
38785\u3363 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN"
38786\u3364 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE"
38787\u3365 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN"
38788\u3366 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN"
38789\u3367 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN"
38790\u3368 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN"
38791\u3369 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN"
38792\u336A "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN"
38793\u336B "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN"
38794\u336C "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY"
38795\u336D "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE"
38796\u336E "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO"
38797\u336F "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE"
38798\u3370 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR"
38799\u3371 "SQUARE HPA"
38800\u3372 "SQUARE DA"
38801\u3373 "SQUARE AU"
38802\u3374 "SQUARE BAR"
38803\u3375 "SQUARE OV"
38804\u3376 "SQUARE PC"
38805\u3377 "SQUARE DM"
38806\u3378 "SQUARE DM SQUARED"
38807\u3379 "SQUARE DM CUBED"
38808\u337A "SQUARE IU"
38809\u337B "SQUARE ERA NAME HEISEI"
38810\u337C "SQUARE ERA NAME SYOUWA"
38811\u337D "SQUARE ERA NAME TAISYOU"
38812\u337E "SQUARE ERA NAME MEIZI"
38813\u337F "SQUARE CORPORATION"
38814\u3380 "SQUARE PA AMPS"
38815\u3381 "SQUARE NA"
38816\u3382 "SQUARE MU A"
38817\u3383 "SQUARE MA"
38818\u3384 "SQUARE KA"
38819\u3385 "SQUARE KB"
38820\u3386 "SQUARE MB"
38821\u3387 "SQUARE GB"
38822\u3388 "SQUARE CAL"
38823\u3389 "SQUARE KCAL"
38824\u338A "SQUARE PF"
38825\u338B "SQUARE NF"
38826\u338C "SQUARE MU F"
38827\u338D "SQUARE MU G"
38828\u338E "SQUARE MG"
38829\u338F "SQUARE KG"
38830\u3390 "SQUARE HZ"
38831\u3391 "SQUARE KHZ"
38832\u3392 "SQUARE MHZ"
38833\u3393 "SQUARE GHZ"
38834\u3394 "SQUARE THZ"
38835\u3395 "SQUARE MU L"
38836\u3396 "SQUARE ML"
38837\u3397 "SQUARE DL"
38838\u3398 "SQUARE KL"
38839\u3399 "SQUARE FM"
38840\u339A "SQUARE NM"
38841\u339B "SQUARE MU M"
38842\u339C "SQUARE MM"
38843\u339D "SQUARE CM"
38844\u339E "SQUARE KM"
38845\u339F "SQUARE MM SQUARED"
38846\u33A0 "SQUARE CM SQUARED"
38847\u33A1 "SQUARE M SQUARED"
38848\u33A2 "SQUARE KM SQUARED"
38849\u33A3 "SQUARE MM CUBED"
38850\u33A4 "SQUARE CM CUBED"
38851\u33A5 "SQUARE M CUBED"
38852\u33A6 "SQUARE KM CUBED"
38853\u33A7 "SQUARE M OVER S"
38854\u33A8 "SQUARE M OVER S SQUARED"
38855\u33A9 "SQUARE PA"
38856\u33AA "SQUARE KPA"
38857\u33AB "SQUARE MPA"
38858\u33AC "SQUARE GPA"
38859\u33AD "SQUARE RAD"
38860\u33AE "SQUARE RAD OVER S"
38861\u33AF "SQUARE RAD OVER S SQUARED"
38862\u33B0 "SQUARE PS"
38863\u33B1 "SQUARE NS"
38864\u33B2 "SQUARE MU S"
38865\u33B3 "SQUARE MS"
38866\u33B4 "SQUARE PV"
38867\u33B5 "SQUARE NV"
38868\u33B6 "SQUARE MU V"
38869\u33B7 "SQUARE MV"
38870\u33B8 "SQUARE KV"
38871\u33B9 "SQUARE MV MEGA"
38872\u33BA "SQUARE PW"
38873\u33BB "SQUARE NW"
38874\u33BC "SQUARE MU W"
38875\u33BD "SQUARE MW"
38876\u33BE "SQUARE KW"
38877\u33BF "SQUARE MW MEGA"
38878\u33C0 "SQUARE K OHM"
38879\u33C1 "SQUARE M OHM"
38880\u33C2 "SQUARE AM"
38881\u33C3 "SQUARE BQ"
38882\u33C4 "SQUARE CC"
38883\u33C5 "SQUARE CD"
38884\u33C6 "SQUARE C OVER KG"
38885\u33C7 "SQUARE CO"
38886\u33C8 "SQUARE DB"
38887\u33C9 "SQUARE GY"
38888\u33CA "SQUARE HA"
38889\u33CB "SQUARE HP"
38890\u33CC "SQUARE IN"
38891\u33CD "SQUARE KK"
38892\u33CE "SQUARE KM CAPITAL"
38893\u33CF "SQUARE KT"
38894\u33D0 "SQUARE LM"
38895\u33D1 "SQUARE LN"
38896\u33D2 "SQUARE LOG"
38897\u33D3 "SQUARE LX"
38898\u33D4 "SQUARE MB SMALL"
38899\u33D5 "SQUARE MIL"
38900\u33D6 "SQUARE MOL"
38901\u33D7 "SQUARE PH"
38902\u33D8 "SQUARE PM"
38903\u33D9 "SQUARE PPM"
38904\u33DA "SQUARE PR"
38905\u33DB "SQUARE SR"
38906\u33DC "SQUARE SV"
38907\u33DD "SQUARE WB"
38908\u33DE "SQUARE V OVER M"
38909\u33DF "SQUARE A OVER M"
38910\u33E0 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE"
38911\u33E1 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO"
38912\u33E2 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE"
38913\u33E3 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR"
38914\u33E4 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE"
38915\u33E5 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX"
38916\u33E6 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN"
38917\u33E7 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT"
38918\u33E8 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE"
38919\u33E9 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN"
38920\u33EA "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN"
38921\u33EB "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE"
38922\u33EC "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN"
38923\u33ED "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN"
38924\u33EE "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN"
38925\u33EF "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN"
38926\u33F0 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN"
38927\u33F1 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN"
38928\u33F2 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN"
38929\u33F3 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY"
38930\u33F4 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE"
38931\u33F5 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO"
38932\u33F6 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE"
38933\u33F7 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR"
38934\u33F8 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE"
38935\u33F9 "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX"
38936\u33FA "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN"
38937\u33FB "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT"
38938\u33FC "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE"
38939\u33FD "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY"
38940\u33FE "IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE"
38941\u33FF "SQUARE GAL"
38942\u4DC0 "HEXAGRAM FOR THE CREATIVE HEAVEN"
38943\u4DC1 "HEXAGRAM FOR THE RECEPTIVE EARTH"
38944\u4DC2 "HEXAGRAM FOR DIFFICULTY AT THE BEGINNING"
38945\u4DC3 "HEXAGRAM FOR YOUTHFUL FOLLY"
38946\u4DC4 "HEXAGRAM FOR WAITING"
38947\u4DC5 "HEXAGRAM FOR CONFLICT"
38948\u4DC6 "HEXAGRAM FOR THE ARMY"
38949\u4DC7 "HEXAGRAM FOR HOLDING TOGETHER"
38950\u4DC8 "HEXAGRAM FOR SMALL TAMING"
38951\u4DC9 "HEXAGRAM FOR TREADING"
38952\u4DCA "HEXAGRAM FOR PEACE"
38953\u4DCB "HEXAGRAM FOR STANDSTILL"
38954\u4DCC "HEXAGRAM FOR FELLOWSHIP"
38955\u4DCD "HEXAGRAM FOR GREAT POSSESSION"
38956\u4DCE "HEXAGRAM FOR MODESTY"
38957\u4DCF "HEXAGRAM FOR ENTHUSIASM"
38958\u4DD0 "HEXAGRAM FOR FOLLOWING"
38959\u4DD1 "HEXAGRAM FOR WORK ON THE DECAYED"
38960\u4DD2 "HEXAGRAM FOR APPROACH"
38961\u4DD3 "HEXAGRAM FOR CONTEMPLATION"
38962\u4DD4 "HEXAGRAM FOR BITING THROUGH"
38963\u4DD5 "HEXAGRAM FOR GRACE"
38964\u4DD6 "HEXAGRAM FOR SPLITTING APART"
38965\u4DD7 "HEXAGRAM FOR RETURN"
38966\u4DD8 "HEXAGRAM FOR INNOCENCE"
38967\u4DD9 "HEXAGRAM FOR GREAT TAMING"
38968\u4DDA "HEXAGRAM FOR MOUTH CORNERS"
38969\u4DDB "HEXAGRAM FOR GREAT PREPONDERANCE"
38970\u4DDC "HEXAGRAM FOR THE ABYSMAL WATER"
38971\u4DDD "HEXAGRAM FOR THE CLINGING FIRE"
38972\u4DDE "HEXAGRAM FOR INFLUENCE"
38973\u4DDF "HEXAGRAM FOR DURATION"
38974\u4DE0 "HEXAGRAM FOR RETREAT"
38975\u4DE1 "HEXAGRAM FOR GREAT POWER"
38976\u4DE2 "HEXAGRAM FOR PROGRESS"
38977\u4DE3 "HEXAGRAM FOR DARKENING OF THE LIGHT"
38978\u4DE4 "HEXAGRAM FOR THE FAMILY"
38979\u4DE5 "HEXAGRAM FOR OPPOSITION"
38980\u4DE6 "HEXAGRAM FOR OBSTRUCTION"
38981\u4DE7 "HEXAGRAM FOR DELIVERANCE"
38982\u4DE8 "HEXAGRAM FOR DECREASE"
38983\u4DE9 "HEXAGRAM FOR INCREASE"
38984\u4DEA "HEXAGRAM FOR BREAKTHROUGH"
38985\u4DEB "HEXAGRAM FOR COMING TO MEET"
38986\u4DEC "HEXAGRAM FOR GATHERING TOGETHER"
38987\u4DED "HEXAGRAM FOR PUSHING UPWARD"
38988\u4DEE "HEXAGRAM FOR OPPRESSION"
38989\u4DEF "HEXAGRAM FOR THE WELL"
38990\u4DF0 "HEXAGRAM FOR REVOLUTION"
38991\u4DF1 "HEXAGRAM FOR THE CAULDRON"
38992\u4DF2 "HEXAGRAM FOR THE AROUSING THUNDER"
38993\u4DF3 "HEXAGRAM FOR THE KEEPING STILL MOUNTAIN"
38994\u4DF4 "HEXAGRAM FOR DEVELOPMENT"
38995\u4DF5 "HEXAGRAM FOR THE MARRYING MAIDEN"
38996\u4DF6 "HEXAGRAM FOR ABUNDANCE"
38997\u4DF7 "HEXAGRAM FOR THE WANDERER"
38998\u4DF8 "HEXAGRAM FOR THE GENTLE WIND"
38999\u4DF9 "HEXAGRAM FOR THE JOYOUS LAKE"
39000\u4DFA "HEXAGRAM FOR DISPERSION"
39001\u4DFB "HEXAGRAM FOR LIMITATION"
39002\u4DFC "HEXAGRAM FOR INNER TRUTH"
39003\u4DFD "HEXAGRAM FOR SMALL PREPONDERANCE"
39004\u4DFE "HEXAGRAM FOR AFTER COMPLETION"
39005\u4DFF "HEXAGRAM FOR BEFORE COMPLETION"
39006\uA000 "YI SYLLABLE IT"
39007\uA001 "YI SYLLABLE IX"
39008\uA002 "YI SYLLABLE I"
39009\uA003 "YI SYLLABLE IP"
39010\uA004 "YI SYLLABLE IET"
39011\uA005 "YI SYLLABLE IEX"
39012\uA006 "YI SYLLABLE IE"
39013\uA007 "YI SYLLABLE IEP"
39014\uA008 "YI SYLLABLE AT"
39015\uA009 "YI SYLLABLE AX"
39016\uA00A "YI SYLLABLE A"
39017\uA00B "YI SYLLABLE AP"
39018\uA00C "YI SYLLABLE UOX"
39019\uA00D "YI SYLLABLE UO"
39020\uA00E "YI SYLLABLE UOP"
39021\uA00F "YI SYLLABLE OT"
39022\uA010 "YI SYLLABLE OX"
39023\uA011 "YI SYLLABLE O"
39024\uA012 "YI SYLLABLE OP"
39025\uA013 "YI SYLLABLE EX"
39026\uA014 "YI SYLLABLE E"
39027\uA015 "YI SYLLABLE WU"
39028\uA016 "YI SYLLABLE BIT"
39029\uA017 "YI SYLLABLE BIX"
39030\uA018 "YI SYLLABLE BI"
39031\uA019 "YI SYLLABLE BIP"
39032\uA01A "YI SYLLABLE BIET"
39033\uA01B "YI SYLLABLE BIEX"
39034\uA01C "YI SYLLABLE BIE"
39035\uA01D "YI SYLLABLE BIEP"
39036\uA01E "YI SYLLABLE BAT"
39037\uA01F "YI SYLLABLE BAX"
39038\uA020 "YI SYLLABLE BA"
39039\uA021 "YI SYLLABLE BAP"
39040\uA022 "YI SYLLABLE BUOX"
39041\uA023 "YI SYLLABLE BUO"
39042\uA024 "YI SYLLABLE BUOP"
39043\uA025 "YI SYLLABLE BOT"
39044\uA026 "YI SYLLABLE BOX"
39045\uA027 "YI SYLLABLE BO"
39046\uA028 "YI SYLLABLE BOP"
39047\uA029 "YI SYLLABLE BEX"
39048\uA02A "YI SYLLABLE BE"
39049\uA02B "YI SYLLABLE BEP"
39050\uA02C "YI SYLLABLE BUT"
39051\uA02D "YI SYLLABLE BUX"
39052\uA02E "YI SYLLABLE BU"
39053\uA02F "YI SYLLABLE BUP"
39054\uA030 "YI SYLLABLE BURX"
39055\uA031 "YI SYLLABLE BUR"
39056\uA032 "YI SYLLABLE BYT"
39057\uA033 "YI SYLLABLE BYX"
39058\uA034 "YI SYLLABLE BY"
39059\uA035 "YI SYLLABLE BYP"
39060\uA036 "YI SYLLABLE BYRX"
39061\uA037 "YI SYLLABLE BYR"
39062\uA038 "YI SYLLABLE PIT"
39063\uA039 "YI SYLLABLE PIX"
39064\uA03A "YI SYLLABLE PI"
39065\uA03B "YI SYLLABLE PIP"
39066\uA03C "YI SYLLABLE PIEX"
39067\uA03D "YI SYLLABLE PIE"
39068\uA03E "YI SYLLABLE PIEP"
39069\uA03F "YI SYLLABLE PAT"
39070\uA040 "YI SYLLABLE PAX"
39071\uA041 "YI SYLLABLE PA"
39072\uA042 "YI SYLLABLE PAP"
39073\uA043 "YI SYLLABLE PUOX"
39074\uA044 "YI SYLLABLE PUO"
39075\uA045 "YI SYLLABLE PUOP"
39076\uA046 "YI SYLLABLE POT"
39077\uA047 "YI SYLLABLE POX"
39078\uA048 "YI SYLLABLE PO"
39079\uA049 "YI SYLLABLE POP"
39080\uA04A "YI SYLLABLE PUT"
39081\uA04B "YI SYLLABLE PUX"
39082\uA04C "YI SYLLABLE PU"
39083\uA04D "YI SYLLABLE PUP"
39084\uA04E "YI SYLLABLE PURX"
39085\uA04F "YI SYLLABLE PUR"
39086\uA050 "YI SYLLABLE PYT"
39087\uA051 "YI SYLLABLE PYX"
39088\uA052 "YI SYLLABLE PY"
39089\uA053 "YI SYLLABLE PYP"
39090\uA054 "YI SYLLABLE PYRX"
39091\uA055 "YI SYLLABLE PYR"
39092\uA056 "YI SYLLABLE BBIT"
39093\uA057 "YI SYLLABLE BBIX"
39094\uA058 "YI SYLLABLE BBI"
39095\uA059 "YI SYLLABLE BBIP"
39096\uA05A "YI SYLLABLE BBIET"
39097\uA05B "YI SYLLABLE BBIEX"
39098\uA05C "YI SYLLABLE BBIE"
39099\uA05D "YI SYLLABLE BBIEP"
39100\uA05E "YI SYLLABLE BBAT"
39101\uA05F "YI SYLLABLE BBAX"
39102\uA060 "YI SYLLABLE BBA"
39103\uA061 "YI SYLLABLE BBAP"
39104\uA062 "YI SYLLABLE BBUOX"
39105\uA063 "YI SYLLABLE BBUO"
39106\uA064 "YI SYLLABLE BBUOP"
39107\uA065 "YI SYLLABLE BBOT"
39108\uA066 "YI SYLLABLE BBOX"
39109\uA067 "YI SYLLABLE BBO"
39110\uA068 "YI SYLLABLE BBOP"
39111\uA069 "YI SYLLABLE BBEX"
39112\uA06A "YI SYLLABLE BBE"
39113\uA06B "YI SYLLABLE BBEP"
39114\uA06C "YI SYLLABLE BBUT"
39115\uA06D "YI SYLLABLE BBUX"
39116\uA06E "YI SYLLABLE BBU"
39117\uA06F "YI SYLLABLE BBUP"
39118\uA070 "YI SYLLABLE BBURX"
39119\uA071 "YI SYLLABLE BBUR"
39120\uA072 "YI SYLLABLE BBYT"
39121\uA073 "YI SYLLABLE BBYX"
39122\uA074 "YI SYLLABLE BBY"
39123\uA075 "YI SYLLABLE BBYP"
39124\uA076 "YI SYLLABLE NBIT"
39125\uA077 "YI SYLLABLE NBIX"
39126\uA078 "YI SYLLABLE NBI"
39127\uA079 "YI SYLLABLE NBIP"
39128\uA07A "YI SYLLABLE NBIEX"
39129\uA07B "YI SYLLABLE NBIE"
39130\uA07C "YI SYLLABLE NBIEP"
39131\uA07D "YI SYLLABLE NBAT"
39132\uA07E "YI SYLLABLE NBAX"
39133\uA07F "YI SYLLABLE NBA"
39134\uA080 "YI SYLLABLE NBAP"
39135\uA081 "YI SYLLABLE NBOT"
39136\uA082 "YI SYLLABLE NBOX"
39137\uA083 "YI SYLLABLE NBO"
39138\uA084 "YI SYLLABLE NBOP"
39139\uA085 "YI SYLLABLE NBUT"
39140\uA086 "YI SYLLABLE NBUX"
39141\uA087 "YI SYLLABLE NBU"
39142\uA088 "YI SYLLABLE NBUP"
39143\uA089 "YI SYLLABLE NBURX"
39144\uA08A "YI SYLLABLE NBUR"
39145\uA08B "YI SYLLABLE NBYT"
39146\uA08C "YI SYLLABLE NBYX"
39147\uA08D "YI SYLLABLE NBY"
39148\uA08E "YI SYLLABLE NBYP"
39149\uA08F "YI SYLLABLE NBYRX"
39150\uA090 "YI SYLLABLE NBYR"
39151\uA091 "YI SYLLABLE HMIT"
39152\uA092 "YI SYLLABLE HMIX"
39153\uA093 "YI SYLLABLE HMI"
39154\uA094 "YI SYLLABLE HMIP"
39155\uA095 "YI SYLLABLE HMIEX"
39156\uA096 "YI SYLLABLE HMIE"
39157\uA097 "YI SYLLABLE HMIEP"
39158\uA098 "YI SYLLABLE HMAT"
39159\uA099 "YI SYLLABLE HMAX"
39160\uA09A "YI SYLLABLE HMA"
39161\uA09B "YI SYLLABLE HMAP"
39162\uA09C "YI SYLLABLE HMUOX"
39163\uA09D "YI SYLLABLE HMUO"
39164\uA09E "YI SYLLABLE HMUOP"
39165\uA09F "YI SYLLABLE HMOT"
39166\uA0A0 "YI SYLLABLE HMOX"
39167\uA0A1 "YI SYLLABLE HMO"
39168\uA0A2 "YI SYLLABLE HMOP"
39169\uA0A3 "YI SYLLABLE HMUT"
39170\uA0A4 "YI SYLLABLE HMUX"
39171\uA0A5 "YI SYLLABLE HMU"
39172\uA0A6 "YI SYLLABLE HMUP"
39173\uA0A7 "YI SYLLABLE HMURX"
39174\uA0A8 "YI SYLLABLE HMUR"
39175\uA0A9 "YI SYLLABLE HMYX"
39176\uA0AA "YI SYLLABLE HMY"
39177\uA0AB "YI SYLLABLE HMYP"
39178\uA0AC "YI SYLLABLE HMYRX"
39179\uA0AD "YI SYLLABLE HMYR"
39180\uA0AE "YI SYLLABLE MIT"
39181\uA0AF "YI SYLLABLE MIX"
39182\uA0B0 "YI SYLLABLE MI"
39183\uA0B1 "YI SYLLABLE MIP"
39184\uA0B2 "YI SYLLABLE MIEX"
39185\uA0B3 "YI SYLLABLE MIE"
39186\uA0B4 "YI SYLLABLE MIEP"
39187\uA0B5 "YI SYLLABLE MAT"
39188\uA0B6 "YI SYLLABLE MAX"
39189\uA0B7 "YI SYLLABLE MA"
39190\uA0B8 "YI SYLLABLE MAP"
39191\uA0B9 "YI SYLLABLE MUOT"
39192\uA0BA "YI SYLLABLE MUOX"
39193\uA0BB "YI SYLLABLE MUO"
39194\uA0BC "YI SYLLABLE MUOP"
39195\uA0BD "YI SYLLABLE MOT"
39196\uA0BE "YI SYLLABLE MOX"
39197\uA0BF "YI SYLLABLE MO"
39198\uA0C0 "YI SYLLABLE MOP"
39199\uA0C1 "YI SYLLABLE MEX"
39200\uA0C2 "YI SYLLABLE ME"
39201\uA0C3 "YI SYLLABLE MUT"
39202\uA0C4 "YI SYLLABLE MUX"
39203\uA0C5 "YI SYLLABLE MU"
39204\uA0C6 "YI SYLLABLE MUP"
39205\uA0C7 "YI SYLLABLE MURX"
39206\uA0C8 "YI SYLLABLE MUR"
39207\uA0C9 "YI SYLLABLE MYT"
39208\uA0CA "YI SYLLABLE MYX"
39209\uA0CB "YI SYLLABLE MY"
39210\uA0CC "YI SYLLABLE MYP"
39211\uA0CD "YI SYLLABLE FIT"
39212\uA0CE "YI SYLLABLE FIX"
39213\uA0CF "YI SYLLABLE FI"
39214\uA0D0 "YI SYLLABLE FIP"
39215\uA0D1 "YI SYLLABLE FAT"
39216\uA0D2 "YI SYLLABLE FAX"
39217\uA0D3 "YI SYLLABLE FA"
39218\uA0D4 "YI SYLLABLE FAP"
39219\uA0D5 "YI SYLLABLE FOX"
39220\uA0D6 "YI SYLLABLE FO"
39221\uA0D7 "YI SYLLABLE FOP"
39222\uA0D8 "YI SYLLABLE FUT"
39223\uA0D9 "YI SYLLABLE FUX"
39224\uA0DA "YI SYLLABLE FU"
39225\uA0DB "YI SYLLABLE FUP"
39226\uA0DC "YI SYLLABLE FURX"
39227\uA0DD "YI SYLLABLE FUR"
39228\uA0DE "YI SYLLABLE FYT"
39229\uA0DF "YI SYLLABLE FYX"
39230\uA0E0 "YI SYLLABLE FY"
39231\uA0E1 "YI SYLLABLE FYP"
39232\uA0E2 "YI SYLLABLE VIT"
39233\uA0E3 "YI SYLLABLE VIX"
39234\uA0E4 "YI SYLLABLE VI"
39235\uA0E5 "YI SYLLABLE VIP"
39236\uA0E6 "YI SYLLABLE VIET"
39237\uA0E7 "YI SYLLABLE VIEX"
39238\uA0E8 "YI SYLLABLE VIE"
39239\uA0E9 "YI SYLLABLE VIEP"
39240\uA0EA "YI SYLLABLE VAT"
39241\uA0EB "YI SYLLABLE VAX"
39242\uA0EC "YI SYLLABLE VA"
39243\uA0ED "YI SYLLABLE VAP"
39244\uA0EE "YI SYLLABLE VOT"
39245\uA0EF "YI SYLLABLE VOX"
39246\uA0F0 "YI SYLLABLE VO"
39247\uA0F1 "YI SYLLABLE VOP"
39248\uA0F2 "YI SYLLABLE VEX"
39249\uA0F3 "YI SYLLABLE VEP"
39250\uA0F4 "YI SYLLABLE VUT"
39251\uA0F5 "YI SYLLABLE VUX"
39252\uA0F6 "YI SYLLABLE VU"
39253\uA0F7 "YI SYLLABLE VUP"
39254\uA0F8 "YI SYLLABLE VURX"
39255\uA0F9 "YI SYLLABLE VUR"
39256\uA0FA "YI SYLLABLE VYT"
39257\uA0FB "YI SYLLABLE VYX"
39258\uA0FC "YI SYLLABLE VY"
39259\uA0FD "YI SYLLABLE VYP"
39260\uA0FE "YI SYLLABLE VYRX"
39261\uA0FF "YI SYLLABLE VYR"
39262\uA100 "YI SYLLABLE DIT"
39263\uA101 "YI SYLLABLE DIX"
39264\uA102 "YI SYLLABLE DI"
39265\uA103 "YI SYLLABLE DIP"
39266\uA104 "YI SYLLABLE DIEX"
39267\uA105 "YI SYLLABLE DIE"
39268\uA106 "YI SYLLABLE DIEP"
39269\uA107 "YI SYLLABLE DAT"
39270\uA108 "YI SYLLABLE DAX"
39271\uA109 "YI SYLLABLE DA"
39272\uA10A "YI SYLLABLE DAP"
39273\uA10B "YI SYLLABLE DUOX"
39274\uA10C "YI SYLLABLE DUO"
39275\uA10D "YI SYLLABLE DOT"
39276\uA10E "YI SYLLABLE DOX"
39277\uA10F "YI SYLLABLE DO"
39278\uA110 "YI SYLLABLE DOP"
39279\uA111 "YI SYLLABLE DEX"
39280\uA112 "YI SYLLABLE DE"
39281\uA113 "YI SYLLABLE DEP"
39282\uA114 "YI SYLLABLE DUT"
39283\uA115 "YI SYLLABLE DUX"
39284\uA116 "YI SYLLABLE DU"
39285\uA117 "YI SYLLABLE DUP"
39286\uA118 "YI SYLLABLE DURX"
39287\uA119 "YI SYLLABLE DUR"
39288\uA11A "YI SYLLABLE TIT"
39289\uA11B "YI SYLLABLE TIX"
39290\uA11C "YI SYLLABLE TI"
39291\uA11D "YI SYLLABLE TIP"
39292\uA11E "YI SYLLABLE TIEX"
39293\uA11F "YI SYLLABLE TIE"
39294\uA120 "YI SYLLABLE TIEP"
39295\uA121 "YI SYLLABLE TAT"
39296\uA122 "YI SYLLABLE TAX"
39297\uA123 "YI SYLLABLE TA"
39298\uA124 "YI SYLLABLE TAP"
39299\uA125 "YI SYLLABLE TUOT"
39300\uA126 "YI SYLLABLE TUOX"
39301\uA127 "YI SYLLABLE TUO"
39302\uA128 "YI SYLLABLE TUOP"
39303\uA129 "YI SYLLABLE TOT"
39304\uA12A "YI SYLLABLE TOX"
39305\uA12B "YI SYLLABLE TO"
39306\uA12C "YI SYLLABLE TOP"
39307\uA12D "YI SYLLABLE TEX"
39308\uA12E "YI SYLLABLE TE"
39309\uA12F "YI SYLLABLE TEP"
39310\uA130 "YI SYLLABLE TUT"
39311\uA131 "YI SYLLABLE TUX"
39312\uA132 "YI SYLLABLE TU"
39313\uA133 "YI SYLLABLE TUP"
39314\uA134 "YI SYLLABLE TURX"
39315\uA135 "YI SYLLABLE TUR"
39316\uA136 "YI SYLLABLE DDIT"
39317\uA137 "YI SYLLABLE DDIX"
39318\uA138 "YI SYLLABLE DDI"
39319\uA139 "YI SYLLABLE DDIP"
39320\uA13A "YI SYLLABLE DDIEX"
39321\uA13B "YI SYLLABLE DDIE"
39322\uA13C "YI SYLLABLE DDIEP"
39323\uA13D "YI SYLLABLE DDAT"
39324\uA13E "YI SYLLABLE DDAX"
39325\uA13F "YI SYLLABLE DDA"
39326\uA140 "YI SYLLABLE DDAP"
39327\uA141 "YI SYLLABLE DDUOX"
39328\uA142 "YI SYLLABLE DDUO"
39329\uA143 "YI SYLLABLE DDUOP"
39330\uA144 "YI SYLLABLE DDOT"
39331\uA145 "YI SYLLABLE DDOX"
39332\uA146 "YI SYLLABLE DDO"
39333\uA147 "YI SYLLABLE DDOP"
39334\uA148 "YI SYLLABLE DDEX"
39335\uA149 "YI SYLLABLE DDE"
39336\uA14A "YI SYLLABLE DDEP"
39337\uA14B "YI SYLLABLE DDUT"
39338\uA14C "YI SYLLABLE DDUX"
39339\uA14D "YI SYLLABLE DDU"
39340\uA14E "YI SYLLABLE DDUP"
39341\uA14F "YI SYLLABLE DDURX"
39342\uA150 "YI SYLLABLE DDUR"
39343\uA151 "YI SYLLABLE NDIT"
39344\uA152 "YI SYLLABLE NDIX"
39345\uA153 "YI SYLLABLE NDI"
39346\uA154 "YI SYLLABLE NDIP"
39347\uA155 "YI SYLLABLE NDIEX"
39348\uA156 "YI SYLLABLE NDIE"
39349\uA157 "YI SYLLABLE NDAT"
39350\uA158 "YI SYLLABLE NDAX"
39351\uA159 "YI SYLLABLE NDA"
39352\uA15A "YI SYLLABLE NDAP"
39353\uA15B "YI SYLLABLE NDOT"
39354\uA15C "YI SYLLABLE NDOX"
39355\uA15D "YI SYLLABLE NDO"
39356\uA15E "YI SYLLABLE NDOP"
39357\uA15F "YI SYLLABLE NDEX"
39358\uA160 "YI SYLLABLE NDE"
39359\uA161 "YI SYLLABLE NDEP"
39360\uA162 "YI SYLLABLE NDUT"
39361\uA163 "YI SYLLABLE NDUX"
39362\uA164 "YI SYLLABLE NDU"
39363\uA165 "YI SYLLABLE NDUP"
39364\uA166 "YI SYLLABLE NDURX"
39365\uA167 "YI SYLLABLE NDUR"
39366\uA168 "YI SYLLABLE HNIT"
39367\uA169 "YI SYLLABLE HNIX"
39368\uA16A "YI SYLLABLE HNI"
39369\uA16B "YI SYLLABLE HNIP"
39370\uA16C "YI SYLLABLE HNIET"
39371\uA16D "YI SYLLABLE HNIEX"
39372\uA16E "YI SYLLABLE HNIE"
39373\uA16F "YI SYLLABLE HNIEP"
39374\uA170 "YI SYLLABLE HNAT"
39375\uA171 "YI SYLLABLE HNAX"
39376\uA172 "YI SYLLABLE HNA"
39377\uA173 "YI SYLLABLE HNAP"
39378\uA174 "YI SYLLABLE HNUOX"
39379\uA175 "YI SYLLABLE HNUO"
39380\uA176 "YI SYLLABLE HNOT"
39381\uA177 "YI SYLLABLE HNOX"
39382\uA178 "YI SYLLABLE HNOP"
39383\uA179 "YI SYLLABLE HNEX"
39384\uA17A "YI SYLLABLE HNE"
39385\uA17B "YI SYLLABLE HNEP"
39386\uA17C "YI SYLLABLE HNUT"
39387\uA17D "YI SYLLABLE NIT"
39388\uA17E "YI SYLLABLE NIX"
39389\uA17F "YI SYLLABLE NI"
39390\uA180 "YI SYLLABLE NIP"
39391\uA181 "YI SYLLABLE NIEX"
39392\uA182 "YI SYLLABLE NIE"
39393\uA183 "YI SYLLABLE NIEP"
39394\uA184 "YI SYLLABLE NAX"
39395\uA185 "YI SYLLABLE NA"
39396\uA186 "YI SYLLABLE NAP"
39397\uA187 "YI SYLLABLE NUOX"
39398\uA188 "YI SYLLABLE NUO"
39399\uA189 "YI SYLLABLE NUOP"
39400\uA18A "YI SYLLABLE NOT"
39401\uA18B "YI SYLLABLE NOX"
39402\uA18C "YI SYLLABLE NO"
39403\uA18D "YI SYLLABLE NOP"
39404\uA18E "YI SYLLABLE NEX"
39405\uA18F "YI SYLLABLE NE"
39406\uA190 "YI SYLLABLE NEP"
39407\uA191 "YI SYLLABLE NUT"
39408\uA192 "YI SYLLABLE NUX"
39409\uA193 "YI SYLLABLE NU"
39410\uA194 "YI SYLLABLE NUP"
39411\uA195 "YI SYLLABLE NURX"
39412\uA196 "YI SYLLABLE NUR"
39413\uA197 "YI SYLLABLE HLIT"
39414\uA198 "YI SYLLABLE HLIX"
39415\uA199 "YI SYLLABLE HLI"
39416\uA19A "YI SYLLABLE HLIP"
39417\uA19B "YI SYLLABLE HLIEX"
39418\uA19C "YI SYLLABLE HLIE"
39419\uA19D "YI SYLLABLE HLIEP"
39420\uA19E "YI SYLLABLE HLAT"
39421\uA19F "YI SYLLABLE HLAX"
39422\uA1A0 "YI SYLLABLE HLA"
39423\uA1A1 "YI SYLLABLE HLAP"
39424\uA1A2 "YI SYLLABLE HLUOX"
39425\uA1A3 "YI SYLLABLE HLUO"
39426\uA1A4 "YI SYLLABLE HLUOP"
39427\uA1A5 "YI SYLLABLE HLOX"
39428\uA1A6 "YI SYLLABLE HLO"
39429\uA1A7 "YI SYLLABLE HLOP"
39430\uA1A8 "YI SYLLABLE HLEX"
39431\uA1A9 "YI SYLLABLE HLE"
39432\uA1AA "YI SYLLABLE HLEP"
39433\uA1AB "YI SYLLABLE HLUT"
39434\uA1AC "YI SYLLABLE HLUX"
39435\uA1AD "YI SYLLABLE HLU"
39436\uA1AE "YI SYLLABLE HLUP"
39437\uA1AF "YI SYLLABLE HLURX"
39438\uA1B0 "YI SYLLABLE HLUR"
39439\uA1B1 "YI SYLLABLE HLYT"
39440\uA1B2 "YI SYLLABLE HLYX"
39441\uA1B3 "YI SYLLABLE HLY"
39442\uA1B4 "YI SYLLABLE HLYP"
39443\uA1B5 "YI SYLLABLE HLYRX"
39444\uA1B6 "YI SYLLABLE HLYR"
39445\uA1B7 "YI SYLLABLE LIT"
39446\uA1B8 "YI SYLLABLE LIX"
39447\uA1B9 "YI SYLLABLE LI"
39448\uA1BA "YI SYLLABLE LIP"
39449\uA1BB "YI SYLLABLE LIET"
39450\uA1BC "YI SYLLABLE LIEX"
39451\uA1BD "YI SYLLABLE LIE"
39452\uA1BE "YI SYLLABLE LIEP"
39453\uA1BF "YI SYLLABLE LAT"
39454\uA1C0 "YI SYLLABLE LAX"
39455\uA1C1 "YI SYLLABLE LA"
39456\uA1C2 "YI SYLLABLE LAP"
39457\uA1C3 "YI SYLLABLE LUOT"
39458\uA1C4 "YI SYLLABLE LUOX"
39459\uA1C5 "YI SYLLABLE LUO"
39460\uA1C6 "YI SYLLABLE LUOP"
39461\uA1C7 "YI SYLLABLE LOT"
39462\uA1C8 "YI SYLLABLE LOX"
39463\uA1C9 "YI SYLLABLE LO"
39464\uA1CA "YI SYLLABLE LOP"
39465\uA1CB "YI SYLLABLE LEX"
39466\uA1CC "YI SYLLABLE LE"
39467\uA1CD "YI SYLLABLE LEP"
39468\uA1CE "YI SYLLABLE LUT"
39469\uA1CF "YI SYLLABLE LUX"
39470\uA1D0 "YI SYLLABLE LU"
39471\uA1D1 "YI SYLLABLE LUP"
39472\uA1D2 "YI SYLLABLE LURX"
39473\uA1D3 "YI SYLLABLE LUR"
39474\uA1D4 "YI SYLLABLE LYT"
39475\uA1D5 "YI SYLLABLE LYX"
39476\uA1D6 "YI SYLLABLE LY"
39477\uA1D7 "YI SYLLABLE LYP"
39478\uA1D8 "YI SYLLABLE LYRX"
39479\uA1D9 "YI SYLLABLE LYR"
39480\uA1DA "YI SYLLABLE GIT"
39481\uA1DB "YI SYLLABLE GIX"
39482\uA1DC "YI SYLLABLE GI"
39483\uA1DD "YI SYLLABLE GIP"
39484\uA1DE "YI SYLLABLE GIET"
39485\uA1DF "YI SYLLABLE GIEX"
39486\uA1E0 "YI SYLLABLE GIE"
39487\uA1E1 "YI SYLLABLE GIEP"
39488\uA1E2 "YI SYLLABLE GAT"
39489\uA1E3 "YI SYLLABLE GAX"
39490\uA1E4 "YI SYLLABLE GA"
39491\uA1E5 "YI SYLLABLE GAP"
39492\uA1E6 "YI SYLLABLE GUOT"
39493\uA1E7 "YI SYLLABLE GUOX"
39494\uA1E8 "YI SYLLABLE GUO"
39495\uA1E9 "YI SYLLABLE GUOP"
39496\uA1EA "YI SYLLABLE GOT"
39497\uA1EB "YI SYLLABLE GOX"
39498\uA1EC "YI SYLLABLE GO"
39499\uA1ED "YI SYLLABLE GOP"
39500\uA1EE "YI SYLLABLE GET"
39501\uA1EF "YI SYLLABLE GEX"
39502\uA1F0 "YI SYLLABLE GE"
39503\uA1F1 "YI SYLLABLE GEP"
39504\uA1F2 "YI SYLLABLE GUT"
39505\uA1F3 "YI SYLLABLE GUX"
39506\uA1F4 "YI SYLLABLE GU"
39507\uA1F5 "YI SYLLABLE GUP"
39508\uA1F6 "YI SYLLABLE GURX"
39509\uA1F7 "YI SYLLABLE GUR"
39510\uA1F8 "YI SYLLABLE KIT"
39511\uA1F9 "YI SYLLABLE KIX"
39512\uA1FA "YI SYLLABLE KI"
39513\uA1FB "YI SYLLABLE KIP"
39514\uA1FC "YI SYLLABLE KIEX"
39515\uA1FD "YI SYLLABLE KIE"
39516\uA1FE "YI SYLLABLE KIEP"
39517\uA1FF "YI SYLLABLE KAT"
39518\uA200 "YI SYLLABLE KAX"
39519\uA201 "YI SYLLABLE KA"
39520\uA202 "YI SYLLABLE KAP"
39521\uA203 "YI SYLLABLE KUOX"
39522\uA204 "YI SYLLABLE KUO"
39523\uA205 "YI SYLLABLE KUOP"
39524\uA206 "YI SYLLABLE KOT"
39525\uA207 "YI SYLLABLE KOX"
39526\uA208 "YI SYLLABLE KO"
39527\uA209 "YI SYLLABLE KOP"
39528\uA20A "YI SYLLABLE KET"
39529\uA20B "YI SYLLABLE KEX"
39530\uA20C "YI SYLLABLE KE"
39531\uA20D "YI SYLLABLE KEP"
39532\uA20E "YI SYLLABLE KUT"
39533\uA20F "YI SYLLABLE KUX"
39534\uA210 "YI SYLLABLE KU"
39535\uA211 "YI SYLLABLE KUP"
39536\uA212 "YI SYLLABLE KURX"
39537\uA213 "YI SYLLABLE KUR"
39538\uA214 "YI SYLLABLE GGIT"
39539\uA215 "YI SYLLABLE GGIX"
39540\uA216 "YI SYLLABLE GGI"
39541\uA217 "YI SYLLABLE GGIEX"
39542\uA218 "YI SYLLABLE GGIE"
39543\uA219 "YI SYLLABLE GGIEP"
39544\uA21A "YI SYLLABLE GGAT"
39545\uA21B "YI SYLLABLE GGAX"
39546\uA21C "YI SYLLABLE GGA"
39547\uA21D "YI SYLLABLE GGAP"
39548\uA21E "YI SYLLABLE GGUOT"
39549\uA21F "YI SYLLABLE GGUOX"
39550\uA220 "YI SYLLABLE GGUO"
39551\uA221 "YI SYLLABLE GGUOP"
39552\uA222 "YI SYLLABLE GGOT"
39553\uA223 "YI SYLLABLE GGOX"
39554\uA224 "YI SYLLABLE GGO"
39555\uA225 "YI SYLLABLE GGOP"
39556\uA226 "YI SYLLABLE GGET"
39557\uA227 "YI SYLLABLE GGEX"
39558\uA228 "YI SYLLABLE GGE"
39559\uA229 "YI SYLLABLE GGEP"
39560\uA22A "YI SYLLABLE GGUT"
39561\uA22B "YI SYLLABLE GGUX"
39562\uA22C "YI SYLLABLE GGU"
39563\uA22D "YI SYLLABLE GGUP"
39564\uA22E "YI SYLLABLE GGURX"
39565\uA22F "YI SYLLABLE GGUR"
39566\uA230 "YI SYLLABLE MGIEX"
39567\uA231 "YI SYLLABLE MGIE"
39568\uA232 "YI SYLLABLE MGAT"
39569\uA233 "YI SYLLABLE MGAX"
39570\uA234 "YI SYLLABLE MGA"
39571\uA235 "YI SYLLABLE MGAP"
39572\uA236 "YI SYLLABLE MGUOX"
39573\uA237 "YI SYLLABLE MGUO"
39574\uA238 "YI SYLLABLE MGUOP"
39575\uA239 "YI SYLLABLE MGOT"
39576\uA23A "YI SYLLABLE MGOX"
39577\uA23B "YI SYLLABLE MGO"
39578\uA23C "YI SYLLABLE MGOP"
39579\uA23D "YI SYLLABLE MGEX"
39580\uA23E "YI SYLLABLE MGE"
39581\uA23F "YI SYLLABLE MGEP"
39582\uA240 "YI SYLLABLE MGUT"
39583\uA241 "YI SYLLABLE MGUX"
39584\uA242 "YI SYLLABLE MGU"
39585\uA243 "YI SYLLABLE MGUP"
39586\uA244 "YI SYLLABLE MGURX"
39587\uA245 "YI SYLLABLE MGUR"
39588\uA246 "YI SYLLABLE HXIT"
39589\uA247 "YI SYLLABLE HXIX"
39590\uA248 "YI SYLLABLE HXI"
39591\uA249 "YI SYLLABLE HXIP"
39592\uA24A "YI SYLLABLE HXIET"
39593\uA24B "YI SYLLABLE HXIEX"
39594\uA24C "YI SYLLABLE HXIE"
39595\uA24D "YI SYLLABLE HXIEP"
39596\uA24E "YI SYLLABLE HXAT"
39597\uA24F "YI SYLLABLE HXAX"
39598\uA250 "YI SYLLABLE HXA"
39599\uA251 "YI SYLLABLE HXAP"
39600\uA252 "YI SYLLABLE HXUOT"
39601\uA253 "YI SYLLABLE HXUOX"
39602\uA254 "YI SYLLABLE HXUO"
39603\uA255 "YI SYLLABLE HXUOP"
39604\uA256 "YI SYLLABLE HXOT"
39605\uA257 "YI SYLLABLE HXOX"
39606\uA258 "YI SYLLABLE HXO"
39607\uA259 "YI SYLLABLE HXOP"
39608\uA25A "YI SYLLABLE HXEX"
39609\uA25B "YI SYLLABLE HXE"
39610\uA25C "YI SYLLABLE HXEP"
39611\uA25D "YI SYLLABLE NGIEX"
39612\uA25E "YI SYLLABLE NGIE"
39613\uA25F "YI SYLLABLE NGIEP"
39614\uA260 "YI SYLLABLE NGAT"
39615\uA261 "YI SYLLABLE NGAX"
39616\uA262 "YI SYLLABLE NGA"
39617\uA263 "YI SYLLABLE NGAP"
39618\uA264 "YI SYLLABLE NGUOT"
39619\uA265 "YI SYLLABLE NGUOX"
39620\uA266 "YI SYLLABLE NGUO"
39621\uA267 "YI SYLLABLE NGOT"
39622\uA268 "YI SYLLABLE NGOX"
39623\uA269 "YI SYLLABLE NGO"
39624\uA26A "YI SYLLABLE NGOP"
39625\uA26B "YI SYLLABLE NGEX"
39626\uA26C "YI SYLLABLE NGE"
39627\uA26D "YI SYLLABLE NGEP"
39628\uA26E "YI SYLLABLE HIT"
39629\uA26F "YI SYLLABLE HIEX"
39630\uA270 "YI SYLLABLE HIE"
39631\uA271 "YI SYLLABLE HAT"
39632\uA272 "YI SYLLABLE HAX"
39633\uA273 "YI SYLLABLE HA"
39634\uA274 "YI SYLLABLE HAP"
39635\uA275 "YI SYLLABLE HUOT"
39636\uA276 "YI SYLLABLE HUOX"
39637\uA277 "YI SYLLABLE HUO"
39638\uA278 "YI SYLLABLE HUOP"
39639\uA279 "YI SYLLABLE HOT"
39640\uA27A "YI SYLLABLE HOX"
39641\uA27B "YI SYLLABLE HO"
39642\uA27C "YI SYLLABLE HOP"
39643\uA27D "YI SYLLABLE HEX"
39644\uA27E "YI SYLLABLE HE"
39645\uA27F "YI SYLLABLE HEP"
39646\uA280 "YI SYLLABLE WAT"
39647\uA281 "YI SYLLABLE WAX"
39648\uA282 "YI SYLLABLE WA"
39649\uA283 "YI SYLLABLE WAP"
39650\uA284 "YI SYLLABLE WUOX"
39651\uA285 "YI SYLLABLE WUO"
39652\uA286 "YI SYLLABLE WUOP"
39653\uA287 "YI SYLLABLE WOX"
39654\uA288 "YI SYLLABLE WO"
39655\uA289 "YI SYLLABLE WOP"
39656\uA28A "YI SYLLABLE WEX"
39657\uA28B "YI SYLLABLE WE"
39658\uA28C "YI SYLLABLE WEP"
39659\uA28D "YI SYLLABLE ZIT"
39660\uA28E "YI SYLLABLE ZIX"
39661\uA28F "YI SYLLABLE ZI"
39662\uA290 "YI SYLLABLE ZIP"
39663\uA291 "YI SYLLABLE ZIEX"
39664\uA292 "YI SYLLABLE ZIE"
39665\uA293 "YI SYLLABLE ZIEP"
39666\uA294 "YI SYLLABLE ZAT"
39667\uA295 "YI SYLLABLE ZAX"
39668\uA296 "YI SYLLABLE ZA"
39669\uA297 "YI SYLLABLE ZAP"
39670\uA298 "YI SYLLABLE ZUOX"
39671\uA299 "YI SYLLABLE ZUO"
39672\uA29A "YI SYLLABLE ZUOP"
39673\uA29B "YI SYLLABLE ZOT"
39674\uA29C "YI SYLLABLE ZOX"
39675\uA29D "YI SYLLABLE ZO"
39676\uA29E "YI SYLLABLE ZOP"
39677\uA29F "YI SYLLABLE ZEX"
39678\uA2A0 "YI SYLLABLE ZE"
39679\uA2A1 "YI SYLLABLE ZEP"
39680\uA2A2 "YI SYLLABLE ZUT"
39681\uA2A3 "YI SYLLABLE ZUX"
39682\uA2A4 "YI SYLLABLE ZU"
39683\uA2A5 "YI SYLLABLE ZUP"
39684\uA2A6 "YI SYLLABLE ZURX"
39685\uA2A7 "YI SYLLABLE ZUR"
39686\uA2A8 "YI SYLLABLE ZYT"
39687\uA2A9 "YI SYLLABLE ZYX"
39688\uA2AA "YI SYLLABLE ZY"
39689\uA2AB "YI SYLLABLE ZYP"
39690\uA2AC "YI SYLLABLE ZYRX"
39691\uA2AD "YI SYLLABLE ZYR"
39692\uA2AE "YI SYLLABLE CIT"
39693\uA2AF "YI SYLLABLE CIX"
39694\uA2B0 "YI SYLLABLE CI"
39695\uA2B1 "YI SYLLABLE CIP"
39696\uA2B2 "YI SYLLABLE CIET"
39697\uA2B3 "YI SYLLABLE CIEX"
39698\uA2B4 "YI SYLLABLE CIE"
39699\uA2B5 "YI SYLLABLE CIEP"
39700\uA2B6 "YI SYLLABLE CAT"
39701\uA2B7 "YI SYLLABLE CAX"
39702\uA2B8 "YI SYLLABLE CA"
39703\uA2B9 "YI SYLLABLE CAP"
39704\uA2BA "YI SYLLABLE CUOX"
39705\uA2BB "YI SYLLABLE CUO"
39706\uA2BC "YI SYLLABLE CUOP"
39707\uA2BD "YI SYLLABLE COT"
39708\uA2BE "YI SYLLABLE COX"
39709\uA2BF "YI SYLLABLE CO"
39710\uA2C0 "YI SYLLABLE COP"
39711\uA2C1 "YI SYLLABLE CEX"
39712\uA2C2 "YI SYLLABLE CE"
39713\uA2C3 "YI SYLLABLE CEP"
39714\uA2C4 "YI SYLLABLE CUT"
39715\uA2C5 "YI SYLLABLE CUX"
39716\uA2C6 "YI SYLLABLE CU"
39717\uA2C7 "YI SYLLABLE CUP"
39718\uA2C8 "YI SYLLABLE CURX"
39719\uA2C9 "YI SYLLABLE CUR"
39720\uA2CA "YI SYLLABLE CYT"
39721\uA2CB "YI SYLLABLE CYX"
39722\uA2CC "YI SYLLABLE CY"
39723\uA2CD "YI SYLLABLE CYP"
39724\uA2CE "YI SYLLABLE CYRX"
39725\uA2CF "YI SYLLABLE CYR"
39726\uA2D0 "YI SYLLABLE ZZIT"
39727\uA2D1 "YI SYLLABLE ZZIX"
39728\uA2D2 "YI SYLLABLE ZZI"
39729\uA2D3 "YI SYLLABLE ZZIP"
39730\uA2D4 "YI SYLLABLE ZZIET"
39731\uA2D5 "YI SYLLABLE ZZIEX"
39732\uA2D6 "YI SYLLABLE ZZIE"
39733\uA2D7 "YI SYLLABLE ZZIEP"
39734\uA2D8 "YI SYLLABLE ZZAT"
39735\uA2D9 "YI SYLLABLE ZZAX"
39736\uA2DA "YI SYLLABLE ZZA"
39737\uA2DB "YI SYLLABLE ZZAP"
39738\uA2DC "YI SYLLABLE ZZOX"
39739\uA2DD "YI SYLLABLE ZZO"
39740\uA2DE "YI SYLLABLE ZZOP"
39741\uA2DF "YI SYLLABLE ZZEX"
39742\uA2E0 "YI SYLLABLE ZZE"
39743\uA2E1 "YI SYLLABLE ZZEP"
39744\uA2E2 "YI SYLLABLE ZZUX"
39745\uA2E3 "YI SYLLABLE ZZU"
39746\uA2E4 "YI SYLLABLE ZZUP"
39747\uA2E5 "YI SYLLABLE ZZURX"
39748\uA2E6 "YI SYLLABLE ZZUR"
39749\uA2E7 "YI SYLLABLE ZZYT"
39750\uA2E8 "YI SYLLABLE ZZYX"
39751\uA2E9 "YI SYLLABLE ZZY"
39752\uA2EA "YI SYLLABLE ZZYP"
39753\uA2EB "YI SYLLABLE ZZYRX"
39754\uA2EC "YI SYLLABLE ZZYR"
39755\uA2ED "YI SYLLABLE NZIT"
39756\uA2EE "YI SYLLABLE NZIX"
39757\uA2EF "YI SYLLABLE NZI"
39758\uA2F0 "YI SYLLABLE NZIP"
39759\uA2F1 "YI SYLLABLE NZIEX"
39760\uA2F2 "YI SYLLABLE NZIE"
39761\uA2F3 "YI SYLLABLE NZIEP"
39762\uA2F4 "YI SYLLABLE NZAT"
39763\uA2F5 "YI SYLLABLE NZAX"
39764\uA2F6 "YI SYLLABLE NZA"
39765\uA2F7 "YI SYLLABLE NZAP"
39766\uA2F8 "YI SYLLABLE NZUOX"
39767\uA2F9 "YI SYLLABLE NZUO"
39768\uA2FA "YI SYLLABLE NZOX"
39769\uA2FB "YI SYLLABLE NZOP"
39770\uA2FC "YI SYLLABLE NZEX"
39771\uA2FD "YI SYLLABLE NZE"
39772\uA2FE "YI SYLLABLE NZUX"
39773\uA2FF "YI SYLLABLE NZU"
39774\uA300 "YI SYLLABLE NZUP"
39775\uA301 "YI SYLLABLE NZURX"
39776\uA302 "YI SYLLABLE NZUR"
39777\uA303 "YI SYLLABLE NZYT"
39778\uA304 "YI SYLLABLE NZYX"
39779\uA305 "YI SYLLABLE NZY"
39780\uA306 "YI SYLLABLE NZYP"
39781\uA307 "YI SYLLABLE NZYRX"
39782\uA308 "YI SYLLABLE NZYR"
39783\uA309 "YI SYLLABLE SIT"
39784\uA30A "YI SYLLABLE SIX"
39785\uA30B "YI SYLLABLE SI"
39786\uA30C "YI SYLLABLE SIP"
39787\uA30D "YI SYLLABLE SIEX"
39788\uA30E "YI SYLLABLE SIE"
39789\uA30F "YI SYLLABLE SIEP"
39790\uA310 "YI SYLLABLE SAT"
39791\uA311 "YI SYLLABLE SAX"
39792\uA312 "YI SYLLABLE SA"
39793\uA313 "YI SYLLABLE SAP"
39794\uA314 "YI SYLLABLE SUOX"
39795\uA315 "YI SYLLABLE SUO"
39796\uA316 "YI SYLLABLE SUOP"
39797\uA317 "YI SYLLABLE SOT"
39798\uA318 "YI SYLLABLE SOX"
39799\uA319 "YI SYLLABLE SO"
39800\uA31A "YI SYLLABLE SOP"
39801\uA31B "YI SYLLABLE SEX"
39802\uA31C "YI SYLLABLE SE"
39803\uA31D "YI SYLLABLE SEP"
39804\uA31E "YI SYLLABLE SUT"
39805\uA31F "YI SYLLABLE SUX"
39806\uA320 "YI SYLLABLE SU"
39807\uA321 "YI SYLLABLE SUP"
39808\uA322 "YI SYLLABLE SURX"
39809\uA323 "YI SYLLABLE SUR"
39810\uA324 "YI SYLLABLE SYT"
39811\uA325 "YI SYLLABLE SYX"
39812\uA326 "YI SYLLABLE SY"
39813\uA327 "YI SYLLABLE SYP"
39814\uA328 "YI SYLLABLE SYRX"
39815\uA329 "YI SYLLABLE SYR"
39816\uA32A "YI SYLLABLE SSIT"
39817\uA32B "YI SYLLABLE SSIX"
39818\uA32C "YI SYLLABLE SSI"
39819\uA32D "YI SYLLABLE SSIP"
39820\uA32E "YI SYLLABLE SSIEX"
39821\uA32F "YI SYLLABLE SSIE"
39822\uA330 "YI SYLLABLE SSIEP"
39823\uA331 "YI SYLLABLE SSAT"
39824\uA332 "YI SYLLABLE SSAX"
39825\uA333 "YI SYLLABLE SSA"
39826\uA334 "YI SYLLABLE SSAP"
39827\uA335 "YI SYLLABLE SSOT"
39828\uA336 "YI SYLLABLE SSOX"
39829\uA337 "YI SYLLABLE SSO"
39830\uA338 "YI SYLLABLE SSOP"
39831\uA339 "YI SYLLABLE SSEX"
39832\uA33A "YI SYLLABLE SSE"
39833\uA33B "YI SYLLABLE SSEP"
39834\uA33C "YI SYLLABLE SSUT"
39835\uA33D "YI SYLLABLE SSUX"
39836\uA33E "YI SYLLABLE SSU"
39837\uA33F "YI SYLLABLE SSUP"
39838\uA340 "YI SYLLABLE SSYT"
39839\uA341 "YI SYLLABLE SSYX"
39840\uA342 "YI SYLLABLE SSY"
39841\uA343 "YI SYLLABLE SSYP"
39842\uA344 "YI SYLLABLE SSYRX"
39843\uA345 "YI SYLLABLE SSYR"
39844\uA346 "YI SYLLABLE ZHAT"
39845\uA347 "YI SYLLABLE ZHAX"
39846\uA348 "YI SYLLABLE ZHA"
39847\uA349 "YI SYLLABLE ZHAP"
39848\uA34A "YI SYLLABLE ZHUOX"
39849\uA34B "YI SYLLABLE ZHUO"
39850\uA34C "YI SYLLABLE ZHUOP"
39851\uA34D "YI SYLLABLE ZHOT"
39852\uA34E "YI SYLLABLE ZHOX"
39853\uA34F "YI SYLLABLE ZHO"
39854\uA350 "YI SYLLABLE ZHOP"
39855\uA351 "YI SYLLABLE ZHET"
39856\uA352 "YI SYLLABLE ZHEX"
39857\uA353 "YI SYLLABLE ZHE"
39858\uA354 "YI SYLLABLE ZHEP"
39859\uA355 "YI SYLLABLE ZHUT"
39860\uA356 "YI SYLLABLE ZHUX"
39861\uA357 "YI SYLLABLE ZHU"
39862\uA358 "YI SYLLABLE ZHUP"
39863\uA359 "YI SYLLABLE ZHURX"
39864\uA35A "YI SYLLABLE ZHUR"
39865\uA35B "YI SYLLABLE ZHYT"
39866\uA35C "YI SYLLABLE ZHYX"
39867\uA35D "YI SYLLABLE ZHY"
39868\uA35E "YI SYLLABLE ZHYP"
39869\uA35F "YI SYLLABLE ZHYRX"
39870\uA360 "YI SYLLABLE ZHYR"
39871\uA361 "YI SYLLABLE CHAT"
39872\uA362 "YI SYLLABLE CHAX"
39873\uA363 "YI SYLLABLE CHA"
39874\uA364 "YI SYLLABLE CHAP"
39875\uA365 "YI SYLLABLE CHUOT"
39876\uA366 "YI SYLLABLE CHUOX"
39877\uA367 "YI SYLLABLE CHUO"
39878\uA368 "YI SYLLABLE CHUOP"
39879\uA369 "YI SYLLABLE CHOT"
39880\uA36A "YI SYLLABLE CHOX"
39881\uA36B "YI SYLLABLE CHO"
39882\uA36C "YI SYLLABLE CHOP"
39883\uA36D "YI SYLLABLE CHET"
39884\uA36E "YI SYLLABLE CHEX"
39885\uA36F "YI SYLLABLE CHE"
39886\uA370 "YI SYLLABLE CHEP"
39887\uA371 "YI SYLLABLE CHUX"
39888\uA372 "YI SYLLABLE CHU"
39889\uA373 "YI SYLLABLE CHUP"
39890\uA374 "YI SYLLABLE CHURX"
39891\uA375 "YI SYLLABLE CHUR"
39892\uA376 "YI SYLLABLE CHYT"
39893\uA377 "YI SYLLABLE CHYX"
39894\uA378 "YI SYLLABLE CHY"
39895\uA379 "YI SYLLABLE CHYP"
39896\uA37A "YI SYLLABLE CHYRX"
39897\uA37B "YI SYLLABLE CHYR"
39898\uA37C "YI SYLLABLE RRAX"
39899\uA37D "YI SYLLABLE RRA"
39900\uA37E "YI SYLLABLE RRUOX"
39901\uA37F "YI SYLLABLE RRUO"
39902\uA380 "YI SYLLABLE RROT"
39903\uA381 "YI SYLLABLE RROX"
39904\uA382 "YI SYLLABLE RRO"
39905\uA383 "YI SYLLABLE RROP"
39906\uA384 "YI SYLLABLE RRET"
39907\uA385 "YI SYLLABLE RREX"
39908\uA386 "YI SYLLABLE RRE"
39909\uA387 "YI SYLLABLE RREP"
39910\uA388 "YI SYLLABLE RRUT"
39911\uA389 "YI SYLLABLE RRUX"
39912\uA38A "YI SYLLABLE RRU"
39913\uA38B "YI SYLLABLE RRUP"
39914\uA38C "YI SYLLABLE RRURX"
39915\uA38D "YI SYLLABLE RRUR"
39916\uA38E "YI SYLLABLE RRYT"
39917\uA38F "YI SYLLABLE RRYX"
39918\uA390 "YI SYLLABLE RRY"
39919\uA391 "YI SYLLABLE RRYP"
39920\uA392 "YI SYLLABLE RRYRX"
39921\uA393 "YI SYLLABLE RRYR"
39922\uA394 "YI SYLLABLE NRAT"
39923\uA395 "YI SYLLABLE NRAX"
39924\uA396 "YI SYLLABLE NRA"
39925\uA397 "YI SYLLABLE NRAP"
39926\uA398 "YI SYLLABLE NROX"
39927\uA399 "YI SYLLABLE NRO"
39928\uA39A "YI SYLLABLE NROP"
39929\uA39B "YI SYLLABLE NRET"
39930\uA39C "YI SYLLABLE NREX"
39931\uA39D "YI SYLLABLE NRE"
39932\uA39E "YI SYLLABLE NREP"
39933\uA39F "YI SYLLABLE NRUT"
39934\uA3A0 "YI SYLLABLE NRUX"
39935\uA3A1 "YI SYLLABLE NRU"
39936\uA3A2 "YI SYLLABLE NRUP"
39937\uA3A3 "YI SYLLABLE NRURX"
39938\uA3A4 "YI SYLLABLE NRUR"
39939\uA3A5 "YI SYLLABLE NRYT"
39940\uA3A6 "YI SYLLABLE NRYX"
39941\uA3A7 "YI SYLLABLE NRY"
39942\uA3A8 "YI SYLLABLE NRYP"
39943\uA3A9 "YI SYLLABLE NRYRX"
39944\uA3AA "YI SYLLABLE NRYR"
39945\uA3AB "YI SYLLABLE SHAT"
39946\uA3AC "YI SYLLABLE SHAX"
39947\uA3AD "YI SYLLABLE SHA"
39948\uA3AE "YI SYLLABLE SHAP"
39949\uA3AF "YI SYLLABLE SHUOX"
39950\uA3B0 "YI SYLLABLE SHUO"
39951\uA3B1 "YI SYLLABLE SHUOP"
39952\uA3B2 "YI SYLLABLE SHOT"
39953\uA3B3 "YI SYLLABLE SHOX"
39954\uA3B4 "YI SYLLABLE SHO"
39955\uA3B5 "YI SYLLABLE SHOP"
39956\uA3B6 "YI SYLLABLE SHET"
39957\uA3B7 "YI SYLLABLE SHEX"
39958\uA3B8 "YI SYLLABLE SHE"
39959\uA3B9 "YI SYLLABLE SHEP"
39960\uA3BA "YI SYLLABLE SHUT"
39961\uA3BB "YI SYLLABLE SHUX"
39962\uA3BC "YI SYLLABLE SHU"
39963\uA3BD "YI SYLLABLE SHUP"
39964\uA3BE "YI SYLLABLE SHURX"
39965\uA3BF "YI SYLLABLE SHUR"
39966\uA3C0 "YI SYLLABLE SHYT"
39967\uA3C1 "YI SYLLABLE SHYX"
39968\uA3C2 "YI SYLLABLE SHY"
39969\uA3C3 "YI SYLLABLE SHYP"
39970\uA3C4 "YI SYLLABLE SHYRX"
39971\uA3C5 "YI SYLLABLE SHYR"
39972\uA3C6 "YI SYLLABLE RAT"
39973\uA3C7 "YI SYLLABLE RAX"
39974\uA3C8 "YI SYLLABLE RA"
39975\uA3C9 "YI SYLLABLE RAP"
39976\uA3CA "YI SYLLABLE RUOX"
39977\uA3CB "YI SYLLABLE RUO"
39978\uA3CC "YI SYLLABLE RUOP"
39979\uA3CD "YI SYLLABLE ROT"
39980\uA3CE "YI SYLLABLE ROX"
39981\uA3CF "YI SYLLABLE RO"
39982\uA3D0 "YI SYLLABLE ROP"
39983\uA3D1 "YI SYLLABLE REX"
39984\uA3D2 "YI SYLLABLE RE"
39985\uA3D3 "YI SYLLABLE REP"
39986\uA3D4 "YI SYLLABLE RUT"
39987\uA3D5 "YI SYLLABLE RUX"
39988\uA3D6 "YI SYLLABLE RU"
39989\uA3D7 "YI SYLLABLE RUP"
39990\uA3D8 "YI SYLLABLE RURX"
39991\uA3D9 "YI SYLLABLE RUR"
39992\uA3DA "YI SYLLABLE RYT"
39993\uA3DB "YI SYLLABLE RYX"
39994\uA3DC "YI SYLLABLE RY"
39995\uA3DD "YI SYLLABLE RYP"
39996\uA3DE "YI SYLLABLE RYRX"
39997\uA3DF "YI SYLLABLE RYR"
39998\uA3E0 "YI SYLLABLE JIT"
39999\uA3E1 "YI SYLLABLE JIX"
40000\uA3E2 "YI SYLLABLE JI"
40001\uA3E3 "YI SYLLABLE JIP"
40002\uA3E4 "YI SYLLABLE JIET"
40003\uA3E5 "YI SYLLABLE JIEX"
40004\uA3E6 "YI SYLLABLE JIE"
40005\uA3E7 "YI SYLLABLE JIEP"
40006\uA3E8 "YI SYLLABLE JUOT"
40007\uA3E9 "YI SYLLABLE JUOX"
40008\uA3EA "YI SYLLABLE JUO"
40009\uA3EB "YI SYLLABLE JUOP"
40010\uA3EC "YI SYLLABLE JOT"
40011\uA3ED "YI SYLLABLE JOX"
40012\uA3EE "YI SYLLABLE JO"
40013\uA3EF "YI SYLLABLE JOP"
40014\uA3F0 "YI SYLLABLE JUT"
40015\uA3F1 "YI SYLLABLE JUX"
40016\uA3F2 "YI SYLLABLE JU"
40017\uA3F3 "YI SYLLABLE JUP"
40018\uA3F4 "YI SYLLABLE JURX"
40019\uA3F5 "YI SYLLABLE JUR"
40020\uA3F6 "YI SYLLABLE JYT"
40021\uA3F7 "YI SYLLABLE JYX"
40022\uA3F8 "YI SYLLABLE JY"
40023\uA3F9 "YI SYLLABLE JYP"
40024\uA3FA "YI SYLLABLE JYRX"
40025\uA3FB "YI SYLLABLE JYR"
40026\uA3FC "YI SYLLABLE QIT"
40027\uA3FD "YI SYLLABLE QIX"
40028\uA3FE "YI SYLLABLE QI"
40029\uA3FF "YI SYLLABLE QIP"
40030\uA400 "YI SYLLABLE QIET"
40031\uA401 "YI SYLLABLE QIEX"
40032\uA402 "YI SYLLABLE QIE"
40033\uA403 "YI SYLLABLE QIEP"
40034\uA404 "YI SYLLABLE QUOT"
40035\uA405 "YI SYLLABLE QUOX"
40036\uA406 "YI SYLLABLE QUO"
40037\uA407 "YI SYLLABLE QUOP"
40038\uA408 "YI SYLLABLE QOT"
40039\uA409 "YI SYLLABLE QOX"
40040\uA40A "YI SYLLABLE QO"
40041\uA40B "YI SYLLABLE QOP"
40042\uA40C "YI SYLLABLE QUT"
40043\uA40D "YI SYLLABLE QUX"
40044\uA40E "YI SYLLABLE QU"
40045\uA40F "YI SYLLABLE QUP"
40046\uA410 "YI SYLLABLE QURX"
40047\uA411 "YI SYLLABLE QUR"
40048\uA412 "YI SYLLABLE QYT"
40049\uA413 "YI SYLLABLE QYX"
40050\uA414 "YI SYLLABLE QY"
40051\uA415 "YI SYLLABLE QYP"
40052\uA416 "YI SYLLABLE QYRX"
40053\uA417 "YI SYLLABLE QYR"
40054\uA418 "YI SYLLABLE JJIT"
40055\uA419 "YI SYLLABLE JJIX"
40056\uA41A "YI SYLLABLE JJI"
40057\uA41B "YI SYLLABLE JJIP"
40058\uA41C "YI SYLLABLE JJIET"
40059\uA41D "YI SYLLABLE JJIEX"
40060\uA41E "YI SYLLABLE JJIE"
40061\uA41F "YI SYLLABLE JJIEP"
40062\uA420 "YI SYLLABLE JJUOX"
40063\uA421 "YI SYLLABLE JJUO"
40064\uA422 "YI SYLLABLE JJUOP"
40065\uA423 "YI SYLLABLE JJOT"
40066\uA424 "YI SYLLABLE JJOX"
40067\uA425 "YI SYLLABLE JJO"
40068\uA426 "YI SYLLABLE JJOP"
40069\uA427 "YI SYLLABLE JJUT"
40070\uA428 "YI SYLLABLE JJUX"
40071\uA429 "YI SYLLABLE JJU"
40072\uA42A "YI SYLLABLE JJUP"
40073\uA42B "YI SYLLABLE JJURX"
40074\uA42C "YI SYLLABLE JJUR"
40075\uA42D "YI SYLLABLE JJYT"
40076\uA42E "YI SYLLABLE JJYX"
40077\uA42F "YI SYLLABLE JJY"
40078\uA430 "YI SYLLABLE JJYP"
40079\uA431 "YI SYLLABLE NJIT"
40080\uA432 "YI SYLLABLE NJIX"
40081\uA433 "YI SYLLABLE NJI"
40082\uA434 "YI SYLLABLE NJIP"
40083\uA435 "YI SYLLABLE NJIET"
40084\uA436 "YI SYLLABLE NJIEX"
40085\uA437 "YI SYLLABLE NJIE"
40086\uA438 "YI SYLLABLE NJIEP"
40087\uA439 "YI SYLLABLE NJUOX"
40088\uA43A "YI SYLLABLE NJUO"
40089\uA43B "YI SYLLABLE NJOT"
40090\uA43C "YI SYLLABLE NJOX"
40091\uA43D "YI SYLLABLE NJO"
40092\uA43E "YI SYLLABLE NJOP"
40093\uA43F "YI SYLLABLE NJUX"
40094\uA440 "YI SYLLABLE NJU"
40095\uA441 "YI SYLLABLE NJUP"
40096\uA442 "YI SYLLABLE NJURX"
40097\uA443 "YI SYLLABLE NJUR"
40098\uA444 "YI SYLLABLE NJYT"
40099\uA445 "YI SYLLABLE NJYX"
40100\uA446 "YI SYLLABLE NJY"
40101\uA447 "YI SYLLABLE NJYP"
40102\uA448 "YI SYLLABLE NJYRX"
40103\uA449 "YI SYLLABLE NJYR"
40104\uA44A "YI SYLLABLE NYIT"
40105\uA44B "YI SYLLABLE NYIX"
40106\uA44C "YI SYLLABLE NYI"
40107\uA44D "YI SYLLABLE NYIP"
40108\uA44E "YI SYLLABLE NYIET"
40109\uA44F "YI SYLLABLE NYIEX"
40110\uA450 "YI SYLLABLE NYIE"
40111\uA451 "YI SYLLABLE NYIEP"
40112\uA452 "YI SYLLABLE NYUOX"
40113\uA453 "YI SYLLABLE NYUO"
40114\uA454 "YI SYLLABLE NYUOP"
40115\uA455 "YI SYLLABLE NYOT"
40116\uA456 "YI SYLLABLE NYOX"
40117\uA457 "YI SYLLABLE NYO"
40118\uA458 "YI SYLLABLE NYOP"
40119\uA459 "YI SYLLABLE NYUT"
40120\uA45A "YI SYLLABLE NYUX"
40121\uA45B "YI SYLLABLE NYU"
40122\uA45C "YI SYLLABLE NYUP"
40123\uA45D "YI SYLLABLE XIT"
40124\uA45E "YI SYLLABLE XIX"
40125\uA45F "YI SYLLABLE XI"
40126\uA460 "YI SYLLABLE XIP"
40127\uA461 "YI SYLLABLE XIET"
40128\uA462 "YI SYLLABLE XIEX"
40129\uA463 "YI SYLLABLE XIE"
40130\uA464 "YI SYLLABLE XIEP"
40131\uA465 "YI SYLLABLE XUOX"
40132\uA466 "YI SYLLABLE XUO"
40133\uA467 "YI SYLLABLE XOT"
40134\uA468 "YI SYLLABLE XOX"
40135\uA469 "YI SYLLABLE XO"
40136\uA46A "YI SYLLABLE XOP"
40137\uA46B "YI SYLLABLE XYT"
40138\uA46C "YI SYLLABLE XYX"
40139\uA46D "YI SYLLABLE XY"
40140\uA46E "YI SYLLABLE XYP"
40141\uA46F "YI SYLLABLE XYRX"
40142\uA470 "YI SYLLABLE XYR"
40143\uA471 "YI SYLLABLE YIT"
40144\uA472 "YI SYLLABLE YIX"
40145\uA473 "YI SYLLABLE YI"
40146\uA474 "YI SYLLABLE YIP"
40147\uA475 "YI SYLLABLE YIET"
40148\uA476 "YI SYLLABLE YIEX"
40149\uA477 "YI SYLLABLE YIE"
40150\uA478 "YI SYLLABLE YIEP"
40151\uA479 "YI SYLLABLE YUOT"
40152\uA47A "YI SYLLABLE YUOX"
40153\uA47B "YI SYLLABLE YUO"
40154\uA47C "YI SYLLABLE YUOP"
40155\uA47D "YI SYLLABLE YOT"
40156\uA47E "YI SYLLABLE YOX"
40157\uA47F "YI SYLLABLE YO"
40158\uA480 "YI SYLLABLE YOP"
40159\uA481 "YI SYLLABLE YUT"
40160\uA482 "YI SYLLABLE YUX"
40161\uA483 "YI SYLLABLE YU"
40162\uA484 "YI SYLLABLE YUP"
40163\uA485 "YI SYLLABLE YURX"
40164\uA486 "YI SYLLABLE YUR"
40165\uA487 "YI SYLLABLE YYT"
40166\uA488 "YI SYLLABLE YYX"
40167\uA489 "YI SYLLABLE YY"
40168\uA48A "YI SYLLABLE YYP"
40169\uA48B "YI SYLLABLE YYRX"
40170\uA48C "YI SYLLABLE YYR"
40171\uA490 "YI RADICAL QOT"
40172\uA491 "YI RADICAL LI"
40173\uA492 "YI RADICAL KIT"
40174\uA493 "YI RADICAL NYIP"
40175\uA494 "YI RADICAL CYP"
40176\uA495 "YI RADICAL SSI"
40177\uA496 "YI RADICAL GGOP"
40178\uA497 "YI RADICAL GEP"
40179\uA498 "YI RADICAL MI"
40180\uA499 "YI RADICAL HXIT"
40181\uA49A "YI RADICAL LYR"
40182\uA49B "YI RADICAL BBUT"
40183\uA49C "YI RADICAL MOP"
40184\uA49D "YI RADICAL YO"
40185\uA49E "YI RADICAL PUT"
40186\uA49F "YI RADICAL HXUO"
40187\uA4A0 "YI RADICAL TAT"
40188\uA4A1 "YI RADICAL GA"
40189\uA4A2 "YI RADICAL ZUP"
40190\uA4A3 "YI RADICAL CYT"
40191\uA4A4 "YI RADICAL DDUR"
40192\uA4A5 "YI RADICAL BUR"
40193\uA4A6 "YI RADICAL GGUO"
40194\uA4A7 "YI RADICAL NYOP"
40195\uA4A8 "YI RADICAL TU"
40196\uA4A9 "YI RADICAL OP"
40197\uA4AA "YI RADICAL JJUT"
40198\uA4AB "YI RADICAL ZOT"
40199\uA4AC "YI RADICAL PYT"
40200\uA4AD "YI RADICAL HMO"
40201\uA4AE "YI RADICAL YIT"
40202\uA4AF "YI RADICAL VUR"
40203\uA4B0 "YI RADICAL SHY"
40204\uA4B1 "YI RADICAL VEP"
40205\uA4B2 "YI RADICAL ZA"
40206\uA4B3 "YI RADICAL JO"
40207\uA4B4 "YI RADICAL NZUP"
40208\uA4B5 "YI RADICAL JJY"
40209\uA4B6 "YI RADICAL GOT"
40210\uA4B7 "YI RADICAL JJIE"
40211\uA4B8 "YI RADICAL WO"
40212\uA4B9 "YI RADICAL DU"
40213\uA4BA "YI RADICAL SHUR"
40214\uA4BB "YI RADICAL LIE"
40215\uA4BC "YI RADICAL CY"
40216\uA4BD "YI RADICAL CUOP"
40217\uA4BE "YI RADICAL CIP"
40218\uA4BF "YI RADICAL HXOP"
40219\uA4C0 "YI RADICAL SHAT"
40220\uA4C1 "YI RADICAL ZUR"
40221\uA4C2 "YI RADICAL SHOP"
40222\uA4C3 "YI RADICAL CHE"
40223\uA4C4 "YI RADICAL ZZIET"
40224\uA4C5 "YI RADICAL NBIE"
40225\uA4C6 "YI RADICAL KE"
40226\uA500 "VAI SYLLABLE EE"
40227\uA501 "VAI SYLLABLE EEN"
40228\uA502 "VAI SYLLABLE HEE"
40229\uA503 "VAI SYLLABLE WEE"
40230\uA504 "VAI SYLLABLE WEEN"
40231\uA505 "VAI SYLLABLE PEE"
40232\uA506 "VAI SYLLABLE BHEE"
40233\uA507 "VAI SYLLABLE BEE"
40234\uA508 "VAI SYLLABLE MBEE"
40235\uA509 "VAI SYLLABLE KPEE"
40236\uA50A "VAI SYLLABLE MGBEE"
40237\uA50B "VAI SYLLABLE GBEE"
40238\uA50C "VAI SYLLABLE FEE"
40239\uA50D "VAI SYLLABLE VEE"
40240\uA50E "VAI SYLLABLE TEE"
40241\uA50F "VAI SYLLABLE THEE"
40242\uA510 "VAI SYLLABLE DHEE"
40243\uA511 "VAI SYLLABLE DHHEE"
40244\uA512 "VAI SYLLABLE LEE"
40245\uA513 "VAI SYLLABLE REE"
40246\uA514 "VAI SYLLABLE DEE"
40247\uA515 "VAI SYLLABLE NDEE"
40248\uA516 "VAI SYLLABLE SEE"
40249\uA517 "VAI SYLLABLE SHEE"
40250\uA518 "VAI SYLLABLE ZEE"
40251\uA519 "VAI SYLLABLE ZHEE"
40252\uA51A "VAI SYLLABLE CEE"
40253\uA51B "VAI SYLLABLE JEE"
40254\uA51C "VAI SYLLABLE NJEE"
40255\uA51D "VAI SYLLABLE YEE"
40256\uA51E "VAI SYLLABLE KEE"
40257\uA51F "VAI SYLLABLE NGGEE"
40258\uA520 "VAI SYLLABLE GEE"
40259\uA521 "VAI SYLLABLE MEE"
40260\uA522 "VAI SYLLABLE NEE"
40261\uA523 "VAI SYLLABLE NYEE"
40262\uA524 "VAI SYLLABLE I"
40263\uA525 "VAI SYLLABLE IN"
40264\uA526 "VAI SYLLABLE HI"
40265\uA527 "VAI SYLLABLE HIN"
40266\uA528 "VAI SYLLABLE WI"
40267\uA529 "VAI SYLLABLE WIN"
40268\uA52A "VAI SYLLABLE PI"
40269\uA52B "VAI SYLLABLE BHI"
40270\uA52C "VAI SYLLABLE BI"
40271\uA52D "VAI SYLLABLE MBI"
40272\uA52E "VAI SYLLABLE KPI"
40273\uA52F "VAI SYLLABLE MGBI"
40274\uA530 "VAI SYLLABLE GBI"
40275\uA531 "VAI SYLLABLE FI"
40276\uA532 "VAI SYLLABLE VI"
40277\uA533 "VAI SYLLABLE TI"
40278\uA534 "VAI SYLLABLE THI"
40279\uA535 "VAI SYLLABLE DHI"
40280\uA536 "VAI SYLLABLE DHHI"
40281\uA537 "VAI SYLLABLE LI"
40282\uA538 "VAI SYLLABLE RI"
40283\uA539 "VAI SYLLABLE DI"
40284\uA53A "VAI SYLLABLE NDI"
40285\uA53B "VAI SYLLABLE SI"
40286\uA53C "VAI SYLLABLE SHI"
40287\uA53D "VAI SYLLABLE ZI"
40288\uA53E "VAI SYLLABLE ZHI"
40289\uA53F "VAI SYLLABLE CI"
40290\uA540 "VAI SYLLABLE JI"
40291\uA541 "VAI SYLLABLE NJI"
40292\uA542 "VAI SYLLABLE YI"
40293\uA543 "VAI SYLLABLE KI"
40294\uA544 "VAI SYLLABLE NGGI"
40295\uA545 "VAI SYLLABLE GI"
40296\uA546 "VAI SYLLABLE MI"
40297\uA547 "VAI SYLLABLE NI"
40298\uA548 "VAI SYLLABLE NYI"
40299\uA549 "VAI SYLLABLE A"
40300\uA54A "VAI SYLLABLE AN"
40301\uA54B "VAI SYLLABLE NGAN"
40302\uA54C "VAI SYLLABLE HA"
40303\uA54D "VAI SYLLABLE HAN"
40304\uA54E "VAI SYLLABLE WA"
40305\uA54F "VAI SYLLABLE WAN"
40306\uA550 "VAI SYLLABLE PA"
40307\uA551 "VAI SYLLABLE BHA"
40308\uA552 "VAI SYLLABLE BA"
40309\uA553 "VAI SYLLABLE MBA"
40310\uA554 "VAI SYLLABLE KPA"
40311\uA555 "VAI SYLLABLE KPAN"
40312\uA556 "VAI SYLLABLE MGBA"
40313\uA557 "VAI SYLLABLE GBA"
40314\uA558 "VAI SYLLABLE FA"
40315\uA559 "VAI SYLLABLE VA"
40316\uA55A "VAI SYLLABLE TA"
40317\uA55B "VAI SYLLABLE THA"
40318\uA55C "VAI SYLLABLE DHA"
40319\uA55D "VAI SYLLABLE DHHA"
40320\uA55E "VAI SYLLABLE LA"
40321\uA55F "VAI SYLLABLE RA"
40322\uA560 "VAI SYLLABLE DA"
40323\uA561 "VAI SYLLABLE NDA"
40324\uA562 "VAI SYLLABLE SA"
40325\uA563 "VAI SYLLABLE SHA"
40326\uA564 "VAI SYLLABLE ZA"
40327\uA565 "VAI SYLLABLE ZHA"
40328\uA566 "VAI SYLLABLE CA"
40329\uA567 "VAI SYLLABLE JA"
40330\uA568 "VAI SYLLABLE NJA"
40331\uA569 "VAI SYLLABLE YA"
40332\uA56A "VAI SYLLABLE KA"
40333\uA56B "VAI SYLLABLE KAN"
40334\uA56C "VAI SYLLABLE NGGA"
40335\uA56D "VAI SYLLABLE GA"
40336\uA56E "VAI SYLLABLE MA"
40337\uA56F "VAI SYLLABLE NA"
40338\uA570 "VAI SYLLABLE NYA"
40339\uA571 "VAI SYLLABLE OO"
40340\uA572 "VAI SYLLABLE OON"
40341\uA573 "VAI SYLLABLE HOO"
40342\uA574 "VAI SYLLABLE WOO"
40343\uA575 "VAI SYLLABLE WOON"
40344\uA576 "VAI SYLLABLE POO"
40345\uA577 "VAI SYLLABLE BHOO"
40346\uA578 "VAI SYLLABLE BOO"
40347\uA579 "VAI SYLLABLE MBOO"
40348\uA57A "VAI SYLLABLE KPOO"
40349\uA57B "VAI SYLLABLE MGBOO"
40350\uA57C "VAI SYLLABLE GBOO"
40351\uA57D "VAI SYLLABLE FOO"
40352\uA57E "VAI SYLLABLE VOO"
40353\uA57F "VAI SYLLABLE TOO"
40354\uA580 "VAI SYLLABLE THOO"
40355\uA581 "VAI SYLLABLE DHOO"
40356\uA582 "VAI SYLLABLE DHHOO"
40357\uA583 "VAI SYLLABLE LOO"
40358\uA584 "VAI SYLLABLE ROO"
40359\uA585 "VAI SYLLABLE DOO"
40360\uA586 "VAI SYLLABLE NDOO"
40361\uA587 "VAI SYLLABLE SOO"
40362\uA588 "VAI SYLLABLE SHOO"
40363\uA589 "VAI SYLLABLE ZOO"
40364\uA58A "VAI SYLLABLE ZHOO"
40365\uA58B "VAI SYLLABLE COO"
40366\uA58C "VAI SYLLABLE JOO"
40367\uA58D "VAI SYLLABLE NJOO"
40368\uA58E "VAI SYLLABLE YOO"
40369\uA58F "VAI SYLLABLE KOO"
40370\uA590 "VAI SYLLABLE NGGOO"
40371\uA591 "VAI SYLLABLE GOO"
40372\uA592 "VAI SYLLABLE MOO"
40373\uA593 "VAI SYLLABLE NOO"
40374\uA594 "VAI SYLLABLE NYOO"
40375\uA595 "VAI SYLLABLE U"
40376\uA596 "VAI SYLLABLE UN"
40377\uA597 "VAI SYLLABLE HU"
40378\uA598 "VAI SYLLABLE HUN"
40379\uA599 "VAI SYLLABLE WU"
40380\uA59A "VAI SYLLABLE WUN"
40381\uA59B "VAI SYLLABLE PU"
40382\uA59C "VAI SYLLABLE BHU"
40383\uA59D "VAI SYLLABLE BU"
40384\uA59E "VAI SYLLABLE MBU"
40385\uA59F "VAI SYLLABLE KPU"
40386\uA5A0 "VAI SYLLABLE MGBU"
40387\uA5A1 "VAI SYLLABLE GBU"
40388\uA5A2 "VAI SYLLABLE FU"
40389\uA5A3 "VAI SYLLABLE VU"
40390\uA5A4 "VAI SYLLABLE TU"
40391\uA5A5 "VAI SYLLABLE THU"
40392\uA5A6 "VAI SYLLABLE DHU"
40393\uA5A7 "VAI SYLLABLE DHHU"
40394\uA5A8 "VAI SYLLABLE LU"
40395\uA5A9 "VAI SYLLABLE RU"
40396\uA5AA "VAI SYLLABLE DU"
40397\uA5AB "VAI SYLLABLE NDU"
40398\uA5AC "VAI SYLLABLE SU"
40399\uA5AD "VAI SYLLABLE SHU"
40400\uA5AE "VAI SYLLABLE ZU"
40401\uA5AF "VAI SYLLABLE ZHU"
40402\uA5B0 "VAI SYLLABLE CU"
40403\uA5B1 "VAI SYLLABLE JU"
40404\uA5B2 "VAI SYLLABLE NJU"
40405\uA5B3 "VAI SYLLABLE YU"
40406\uA5B4 "VAI SYLLABLE KU"
40407\uA5B5 "VAI SYLLABLE NGGU"
40408\uA5B6 "VAI SYLLABLE GU"
40409\uA5B7 "VAI SYLLABLE MU"
40410\uA5B8 "VAI SYLLABLE NU"
40411\uA5B9 "VAI SYLLABLE NYU"
40412\uA5BA "VAI SYLLABLE O"
40413\uA5BB "VAI SYLLABLE ON"
40414\uA5BC "VAI SYLLABLE NGON"
40415\uA5BD "VAI SYLLABLE HO"
40416\uA5BE "VAI SYLLABLE HON"
40417\uA5BF "VAI SYLLABLE WO"
40418\uA5C0 "VAI SYLLABLE WON"
40419\uA5C1 "VAI SYLLABLE PO"
40420\uA5C2 "VAI SYLLABLE BHO"
40421\uA5C3 "VAI SYLLABLE BO"
40422\uA5C4 "VAI SYLLABLE MBO"
40423\uA5C5 "VAI SYLLABLE KPO"
40424\uA5C6 "VAI SYLLABLE MGBO"
40425\uA5C7 "VAI SYLLABLE GBO"
40426\uA5C8 "VAI SYLLABLE GBON"
40427\uA5C9 "VAI SYLLABLE FO"
40428\uA5CA "VAI SYLLABLE VO"
40429\uA5CB "VAI SYLLABLE TO"
40430\uA5CC "VAI SYLLABLE THO"
40431\uA5CD "VAI SYLLABLE DHO"
40432\uA5CE "VAI SYLLABLE DHHO"
40433\uA5CF "VAI SYLLABLE LO"
40434\uA5D0 "VAI SYLLABLE RO"
40435\uA5D1 "VAI SYLLABLE DO"
40436\uA5D2 "VAI SYLLABLE NDO"
40437\uA5D3 "VAI SYLLABLE SO"
40438\uA5D4 "VAI SYLLABLE SHO"
40439\uA5D5 "VAI SYLLABLE ZO"
40440\uA5D6 "VAI SYLLABLE ZHO"
40441\uA5D7 "VAI SYLLABLE CO"
40442\uA5D8 "VAI SYLLABLE JO"
40443\uA5D9 "VAI SYLLABLE NJO"
40444\uA5DA "VAI SYLLABLE YO"
40445\uA5DB "VAI SYLLABLE KO"
40446\uA5DC "VAI SYLLABLE NGGO"
40447\uA5DD "VAI SYLLABLE GO"
40448\uA5DE "VAI SYLLABLE MO"
40449\uA5DF "VAI SYLLABLE NO"
40450\uA5E0 "VAI SYLLABLE NYO"
40451\uA5E1 "VAI SYLLABLE E"
40452\uA5E2 "VAI SYLLABLE EN"
40453\uA5E3 "VAI SYLLABLE NGEN"
40454\uA5E4 "VAI SYLLABLE HE"
40455\uA5E5 "VAI SYLLABLE HEN"
40456\uA5E6 "VAI SYLLABLE WE"
40457\uA5E7 "VAI SYLLABLE WEN"
40458\uA5E8 "VAI SYLLABLE PE"
40459\uA5E9 "VAI SYLLABLE BHE"
40460\uA5EA "VAI SYLLABLE BE"
40461\uA5EB "VAI SYLLABLE MBE"
40462\uA5EC "VAI SYLLABLE KPE"
40463\uA5ED "VAI SYLLABLE KPEN"
40464\uA5EE "VAI SYLLABLE MGBE"
40465\uA5EF "VAI SYLLABLE GBE"
40466\uA5F0 "VAI SYLLABLE GBEN"
40467\uA5F1 "VAI SYLLABLE FE"
40468\uA5F2 "VAI SYLLABLE VE"
40469\uA5F3 "VAI SYLLABLE TE"
40470\uA5F4 "VAI SYLLABLE THE"
40471\uA5F5 "VAI SYLLABLE DHE"
40472\uA5F6 "VAI SYLLABLE DHHE"
40473\uA5F7 "VAI SYLLABLE LE"
40474\uA5F8 "VAI SYLLABLE RE"
40475\uA5F9 "VAI SYLLABLE DE"
40476\uA5FA "VAI SYLLABLE NDE"
40477\uA5FB "VAI SYLLABLE SE"
40478\uA5FC "VAI SYLLABLE SHE"
40479\uA5FD "VAI SYLLABLE ZE"
40480\uA5FE "VAI SYLLABLE ZHE"
40481\uA5FF "VAI SYLLABLE CE"
40482\uA600 "VAI SYLLABLE JE"
40483\uA601 "VAI SYLLABLE NJE"
40484\uA602 "VAI SYLLABLE YE"
40485\uA603 "VAI SYLLABLE KE"
40486\uA604 "VAI SYLLABLE NGGE"
40487\uA605 "VAI SYLLABLE NGGEN"
40488\uA606 "VAI SYLLABLE GE"
40489\uA607 "VAI SYLLABLE GEN"
40490\uA608 "VAI SYLLABLE ME"
40491\uA609 "VAI SYLLABLE NE"
40492\uA60A "VAI SYLLABLE NYE"
40493\uA60B "VAI SYLLABLE NG"
40494\uA60C "VAI SYLLABLE LENGTHENER"
40495\uA60D "VAI COMMA"
40496\uA60E "VAI FULL STOP"
40497\uA60F "VAI QUESTION MARK"
40498\uA610 "VAI SYLLABLE NDOLE FA"
40499\uA611 "VAI SYLLABLE NDOLE KA"
40500\uA612 "VAI SYLLABLE NDOLE SOO"
40501\uA613 "VAI SYMBOL FEENG"
40502\uA614 "VAI SYMBOL KEENG"
40503\uA615 "VAI SYMBOL TING"
40504\uA616 "VAI SYMBOL NII"
40505\uA617 "VAI SYMBOL BANG"
40506\uA618 "VAI SYMBOL FAA"
40507\uA619 "VAI SYMBOL TAA"
40508\uA61A "VAI SYMBOL DANG"
40509\uA61B "VAI SYMBOL DOONG"
40510\uA61C "VAI SYMBOL KUNG"
40511\uA61D "VAI SYMBOL TONG"
40512\uA61E "VAI SYMBOL DO-O"
40513\uA61F "VAI SYMBOL JONG"
40514\uA620 "VAI DIGIT ZERO"
40515\uA621 "VAI DIGIT ONE"
40516\uA622 "VAI DIGIT TWO"
40517\uA623 "VAI DIGIT THREE"
40518\uA624 "VAI DIGIT FOUR"
40519\uA625 "VAI DIGIT FIVE"
40520\uA626 "VAI DIGIT SIX"
40521\uA627 "VAI DIGIT SEVEN"
40522\uA628 "VAI DIGIT EIGHT"
40523\uA629 "VAI DIGIT NINE"
40524\uA62A "VAI SYLLABLE NDOLE MA"
40525\uA62B "VAI SYLLABLE NDOLE DO"
40526\uA640 "CYRILLIC CAPITAL LETTER ZEMLYA"
40527\uA641 "CYRILLIC SMALL LETTER ZEMLYA"
40528\uA642 "CYRILLIC CAPITAL LETTER DZELO"
40529\uA643 "CYRILLIC SMALL LETTER DZELO"
40530\uA644 "CYRILLIC CAPITAL LETTER REVERSED DZE"
40531\uA645 "CYRILLIC SMALL LETTER REVERSED DZE"
40532\uA646 "CYRILLIC CAPITAL LETTER IOTA"
40533\uA647 "CYRILLIC SMALL LETTER IOTA"
40534\uA648 "CYRILLIC CAPITAL LETTER DJERV"
40535\uA649 "CYRILLIC SMALL LETTER DJERV"
40536\uA64A "CYRILLIC CAPITAL LETTER MONOGRAPH UK"
40537\uA64B "CYRILLIC SMALL LETTER MONOGRAPH UK"
40538\uA64C "CYRILLIC CAPITAL LETTER BROAD OMEGA"
40539\uA64D "CYRILLIC SMALL LETTER BROAD OMEGA"
40540\uA64E "CYRILLIC CAPITAL LETTER NEUTRAL YER"
40541\uA64F "CYRILLIC SMALL LETTER NEUTRAL YER"
40542\uA650 "CYRILLIC CAPITAL LETTER YERU WITH BACK YER"
40543\uA651 "CYRILLIC SMALL LETTER YERU WITH BACK YER"
40544\uA652 "CYRILLIC CAPITAL LETTER IOTIFIED YAT"
40545\uA653 "CYRILLIC SMALL LETTER IOTIFIED YAT"
40546\uA654 "CYRILLIC CAPITAL LETTER REVERSED YU"
40547\uA655 "CYRILLIC SMALL LETTER REVERSED YU"
40548\uA656 "CYRILLIC CAPITAL LETTER IOTIFIED A"
40549\uA657 "CYRILLIC SMALL LETTER IOTIFIED A"
40550\uA658 "CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS"
40551\uA659 "CYRILLIC SMALL LETTER CLOSED LITTLE YUS"
40552\uA65A "CYRILLIC CAPITAL LETTER BLENDED YUS"
40553\uA65B "CYRILLIC SMALL LETTER BLENDED YUS"
40554\uA65C "CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS"
40555\uA65D "CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS"
40556\uA65E "CYRILLIC CAPITAL LETTER YN"
40557\uA65F "CYRILLIC SMALL LETTER YN"
40558\uA662 "CYRILLIC CAPITAL LETTER SOFT DE"
40559\uA663 "CYRILLIC SMALL LETTER SOFT DE"
40560\uA664 "CYRILLIC CAPITAL LETTER SOFT EL"
40561\uA665 "CYRILLIC SMALL LETTER SOFT EL"
40562\uA666 "CYRILLIC CAPITAL LETTER SOFT EM"
40563\uA667 "CYRILLIC SMALL LETTER SOFT EM"
40564\uA668 "CYRILLIC CAPITAL LETTER MONOCULAR O"
40565\uA669 "CYRILLIC SMALL LETTER MONOCULAR O"
40566\uA66A "CYRILLIC CAPITAL LETTER BINOCULAR O"
40567\uA66B "CYRILLIC SMALL LETTER BINOCULAR O"
40568\uA66C "CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O"
40569\uA66D "CYRILLIC SMALL LETTER DOUBLE MONOCULAR O"
40570\uA66E "CYRILLIC LETTER MULTIOCULAR O"
40571\uA66F "COMBINING CYRILLIC VZMET"
40572\uA670 "COMBINING CYRILLIC TEN MILLIONS SIGN"
40573\uA671 "COMBINING CYRILLIC HUNDRED MILLIONS SIGN"
40574\uA672 "COMBINING CYRILLIC THOUSAND MILLIONS SIGN"
40575\uA673 "SLAVONIC ASTERISK"
40576\uA67C "COMBINING CYRILLIC KAVYKA"
40577\uA67D "COMBINING CYRILLIC PAYEROK"
40578\uA67E "CYRILLIC KAVYKA"
40579\uA67F "CYRILLIC PAYEROK"
40580\uA680 "CYRILLIC CAPITAL LETTER DWE"
40581\uA681 "CYRILLIC SMALL LETTER DWE"
40582\uA682 "CYRILLIC CAPITAL LETTER DZWE"
40583\uA683 "CYRILLIC SMALL LETTER DZWE"
40584\uA684 "CYRILLIC CAPITAL LETTER ZHWE"
40585\uA685 "CYRILLIC SMALL LETTER ZHWE"
40586\uA686 "CYRILLIC CAPITAL LETTER CCHE"
40587\uA687 "CYRILLIC SMALL LETTER CCHE"
40588\uA688 "CYRILLIC CAPITAL LETTER DZZE"
40589\uA689 "CYRILLIC SMALL LETTER DZZE"
40590\uA68A "CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK"
40591\uA68B "CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK"
40592\uA68C "CYRILLIC CAPITAL LETTER TWE"
40593\uA68D "CYRILLIC SMALL LETTER TWE"
40594\uA68E "CYRILLIC CAPITAL LETTER TSWE"
40595\uA68F "CYRILLIC SMALL LETTER TSWE"
40596\uA690 "CYRILLIC CAPITAL LETTER TSSE"
40597\uA691 "CYRILLIC SMALL LETTER TSSE"
40598\uA692 "CYRILLIC CAPITAL LETTER TCHE"
40599\uA693 "CYRILLIC SMALL LETTER TCHE"
40600\uA694 "CYRILLIC CAPITAL LETTER HWE"
40601\uA695 "CYRILLIC SMALL LETTER HWE"
40602\uA696 "CYRILLIC CAPITAL LETTER SHWE"
40603\uA697 "CYRILLIC SMALL LETTER SHWE"
40604\uA700 "MODIFIER LETTER CHINESE TONE YIN PING"
40605\uA701 "MODIFIER LETTER CHINESE TONE YANG PING"
40606\uA702 "MODIFIER LETTER CHINESE TONE YIN SHANG"
40607\uA703 "MODIFIER LETTER CHINESE TONE YANG SHANG"
40608\uA704 "MODIFIER LETTER CHINESE TONE YIN QU"
40609\uA705 "MODIFIER LETTER CHINESE TONE YANG QU"
40610\uA706 "MODIFIER LETTER CHINESE TONE YIN RU"
40611\uA707 "MODIFIER LETTER CHINESE TONE YANG RU"
40612\uA708 "MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR"
40613\uA709 "MODIFIER LETTER HIGH DOTTED TONE BAR"
40614\uA70A "MODIFIER LETTER MID DOTTED TONE BAR"
40615\uA70B "MODIFIER LETTER LOW DOTTED TONE BAR"
40616\uA70C "MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR"
40617\uA70D "MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR"
40618\uA70E "MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR"
40619\uA70F "MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR"
40620\uA710 "MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR"
40621\uA711 "MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR"
40622\uA712 "MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR"
40623\uA713 "MODIFIER LETTER HIGH LEFT-STEM TONE BAR"
40624\uA714 "MODIFIER LETTER MID LEFT-STEM TONE BAR"
40625\uA715 "MODIFIER LETTER LOW LEFT-STEM TONE BAR"
40626\uA716 "MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR"
40627\uA717 "MODIFIER LETTER DOT VERTICAL BAR"
40628\uA718 "MODIFIER LETTER DOT SLASH"
40629\uA719 "MODIFIER LETTER DOT HORIZONTAL BAR"
40630\uA71A "MODIFIER LETTER LOWER RIGHT CORNER ANGLE"
40631\uA71B "MODIFIER LETTER RAISED UP ARROW"
40632\uA71C "MODIFIER LETTER RAISED DOWN ARROW"
40633\uA71D "MODIFIER LETTER RAISED EXCLAMATION MARK"
40634\uA71E "MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK"
40635\uA71F "MODIFIER LETTER LOW INVERTED EXCLAMATION MARK"
40636\uA720 "MODIFIER LETTER STRESS AND HIGH TONE"
40637\uA721 "MODIFIER LETTER STRESS AND LOW TONE"
40638\uA722 "LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF"
40639\uA723 "LATIN SMALL LETTER EGYPTOLOGICAL ALEF"
40640\uA724 "LATIN CAPITAL LETTER EGYPTOLOGICAL AIN"
40641\uA725 "LATIN SMALL LETTER EGYPTOLOGICAL AIN"
40642\uA726 "LATIN CAPITAL LETTER HENG"
40643\uA727 "LATIN SMALL LETTER HENG"
40644\uA728 "LATIN CAPITAL LETTER TZ"
40645\uA729 "LATIN SMALL LETTER TZ"
40646\uA72A "LATIN CAPITAL LETTER TRESILLO"
40647\uA72B "LATIN SMALL LETTER TRESILLO"
40648\uA72C "LATIN CAPITAL LETTER CUATRILLO"
40649\uA72D "LATIN SMALL LETTER CUATRILLO"
40650\uA72E "LATIN CAPITAL LETTER CUATRILLO WITH COMMA"
40651\uA72F "LATIN SMALL LETTER CUATRILLO WITH COMMA"
40652\uA730 "LATIN LETTER SMALL CAPITAL F"
40653\uA731 "LATIN LETTER SMALL CAPITAL S"
40654\uA732 "LATIN CAPITAL LETTER AA"
40655\uA733 "LATIN SMALL LETTER AA"
40656\uA734 "LATIN CAPITAL LETTER AO"
40657\uA735 "LATIN SMALL LETTER AO"
40658\uA736 "LATIN CAPITAL LETTER AU"
40659\uA737 "LATIN SMALL LETTER AU"
40660\uA738 "LATIN CAPITAL LETTER AV"
40661\uA739 "LATIN SMALL LETTER AV"
40662\uA73A "LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR"
40663\uA73B "LATIN SMALL LETTER AV WITH HORIZONTAL BAR"
40664\uA73C "LATIN CAPITAL LETTER AY"
40665\uA73D "LATIN SMALL LETTER AY"
40666\uA73E "LATIN CAPITAL LETTER REVERSED C WITH DOT"
40667\uA73F "LATIN SMALL LETTER REVERSED C WITH DOT"
40668\uA740 "LATIN CAPITAL LETTER K WITH STROKE"
40669\uA741 "LATIN SMALL LETTER K WITH STROKE"
40670\uA742 "LATIN CAPITAL LETTER K WITH DIAGONAL STROKE"
40671\uA743 "LATIN SMALL LETTER K WITH DIAGONAL STROKE"
40672\uA744 "LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE"
40673\uA745 "LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE"
40674\uA746 "LATIN CAPITAL LETTER BROKEN L"
40675\uA747 "LATIN SMALL LETTER BROKEN L"
40676\uA748 "LATIN CAPITAL LETTER L WITH HIGH STROKE"
40677\uA749 "LATIN SMALL LETTER L WITH HIGH STROKE"
40678\uA74A "LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY"
40679\uA74B "LATIN SMALL LETTER O WITH LONG STROKE OVERLAY"
40680\uA74C "LATIN CAPITAL LETTER O WITH LOOP"
40681\uA74D "LATIN SMALL LETTER O WITH LOOP"
40682\uA74E "LATIN CAPITAL LETTER OO"
40683\uA74F "LATIN SMALL LETTER OO"
40684\uA750 "LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER"
40685\uA751 "LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER"
40686\uA752 "LATIN CAPITAL LETTER P WITH FLOURISH"
40687\uA753 "LATIN SMALL LETTER P WITH FLOURISH"
40688\uA754 "LATIN CAPITAL LETTER P WITH SQUIRREL TAIL"
40689\uA755 "LATIN SMALL LETTER P WITH SQUIRREL TAIL"
40690\uA756 "LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER"
40691\uA757 "LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER"
40692\uA758 "LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE"
40693\uA759 "LATIN SMALL LETTER Q WITH DIAGONAL STROKE"
40694\uA75A "LATIN CAPITAL LETTER R ROTUNDA"
40695\uA75B "LATIN SMALL LETTER R ROTUNDA"
40696\uA75C "LATIN CAPITAL LETTER RUM ROTUNDA"
40697\uA75D "LATIN SMALL LETTER RUM ROTUNDA"
40698\uA75E "LATIN CAPITAL LETTER V WITH DIAGONAL STROKE"
40699\uA75F "LATIN SMALL LETTER V WITH DIAGONAL STROKE"
40700\uA760 "LATIN CAPITAL LETTER VY"
40701\uA761 "LATIN SMALL LETTER VY"
40702\uA762 "LATIN CAPITAL LETTER VISIGOTHIC Z"
40703\uA763 "LATIN SMALL LETTER VISIGOTHIC Z"
40704\uA764 "LATIN CAPITAL LETTER THORN WITH STROKE"
40705\uA765 "LATIN SMALL LETTER THORN WITH STROKE"
40706\uA766 "LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER"
40707\uA767 "LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER"
40708\uA768 "LATIN CAPITAL LETTER VEND"
40709\uA769 "LATIN SMALL LETTER VEND"
40710\uA76A "LATIN CAPITAL LETTER ET"
40711\uA76B "LATIN SMALL LETTER ET"
40712\uA76C "LATIN CAPITAL LETTER IS"
40713\uA76D "LATIN SMALL LETTER IS"
40714\uA76E "LATIN CAPITAL LETTER CON"
40715\uA76F "LATIN SMALL LETTER CON"
40716\uA770 "MODIFIER LETTER US"
40717\uA771 "LATIN SMALL LETTER DUM"
40718\uA772 "LATIN SMALL LETTER LUM"
40719\uA773 "LATIN SMALL LETTER MUM"
40720\uA774 "LATIN SMALL LETTER NUM"
40721\uA775 "LATIN SMALL LETTER RUM"
40722\uA776 "LATIN LETTER SMALL CAPITAL RUM"
40723\uA777 "LATIN SMALL LETTER TUM"
40724\uA778 "LATIN SMALL LETTER UM"
40725\uA779 "LATIN CAPITAL LETTER INSULAR D"
40726\uA77A "LATIN SMALL LETTER INSULAR D"
40727\uA77B "LATIN CAPITAL LETTER INSULAR F"
40728\uA77C "LATIN SMALL LETTER INSULAR F"
40729\uA77D "LATIN CAPITAL LETTER INSULAR G"
40730\uA77E "LATIN CAPITAL LETTER TURNED INSULAR G"
40731\uA77F "LATIN SMALL LETTER TURNED INSULAR G"
40732\uA780 "LATIN CAPITAL LETTER TURNED L"
40733\uA781 "LATIN SMALL LETTER TURNED L"
40734\uA782 "LATIN CAPITAL LETTER INSULAR R"
40735\uA783 "LATIN SMALL LETTER INSULAR R"
40736\uA784 "LATIN CAPITAL LETTER INSULAR S"
40737\uA785 "LATIN SMALL LETTER INSULAR S"
40738\uA786 "LATIN CAPITAL LETTER INSULAR T"
40739\uA787 "LATIN SMALL LETTER INSULAR T"
40740\uA788 "MODIFIER LETTER LOW CIRCUMFLEX ACCENT"
40741\uA789 "MODIFIER LETTER COLON"
40742\uA78A "MODIFIER LETTER SHORT EQUALS SIGN"
40743\uA78B "LATIN CAPITAL LETTER SALTILLO"
40744\uA78C "LATIN SMALL LETTER SALTILLO"
40745\uA7FB "LATIN EPIGRAPHIC LETTER REVERSED F"
40746\uA7FC "LATIN EPIGRAPHIC LETTER REVERSED P"
40747\uA7FD "LATIN EPIGRAPHIC LETTER INVERTED M"
40748\uA7FE "LATIN EPIGRAPHIC LETTER I LONGA"
40749\uA7FF "LATIN EPIGRAPHIC LETTER ARCHAIC M"
40750\uA800 "SYLOTI NAGRI LETTER A"
40751\uA801 "SYLOTI NAGRI LETTER I"
40752\uA802 "SYLOTI NAGRI SIGN DVISVARA"
40753\uA803 "SYLOTI NAGRI LETTER U"
40754\uA804 "SYLOTI NAGRI LETTER E"
40755\uA805 "SYLOTI NAGRI LETTER O"
40756\uA806 "SYLOTI NAGRI SIGN HASANTA"
40757\uA807 "SYLOTI NAGRI LETTER KO"
40758\uA808 "SYLOTI NAGRI LETTER KHO"
40759\uA809 "SYLOTI NAGRI LETTER GO"
40760\uA80A "SYLOTI NAGRI LETTER GHO"
40761\uA80B "SYLOTI NAGRI SIGN ANUSVARA"
40762\uA80C "SYLOTI NAGRI LETTER CO"
40763\uA80D "SYLOTI NAGRI LETTER CHO"
40764\uA80E "SYLOTI NAGRI LETTER JO"
40765\uA80F "SYLOTI NAGRI LETTER JHO"
40766\uA810 "SYLOTI NAGRI LETTER TTO"
40767\uA811 "SYLOTI NAGRI LETTER TTHO"
40768\uA812 "SYLOTI NAGRI LETTER DDO"
40769\uA813 "SYLOTI NAGRI LETTER DDHO"
40770\uA814 "SYLOTI NAGRI LETTER TO"
40771\uA815 "SYLOTI NAGRI LETTER THO"
40772\uA816 "SYLOTI NAGRI LETTER DO"
40773\uA817 "SYLOTI NAGRI LETTER DHO"
40774\uA818 "SYLOTI NAGRI LETTER NO"
40775\uA819 "SYLOTI NAGRI LETTER PO"
40776\uA81A "SYLOTI NAGRI LETTER PHO"
40777\uA81B "SYLOTI NAGRI LETTER BO"
40778\uA81C "SYLOTI NAGRI LETTER BHO"
40779\uA81D "SYLOTI NAGRI LETTER MO"
40780\uA81E "SYLOTI NAGRI LETTER RO"
40781\uA81F "SYLOTI NAGRI LETTER LO"
40782\uA820 "SYLOTI NAGRI LETTER RRO"
40783\uA821 "SYLOTI NAGRI LETTER SO"
40784\uA822 "SYLOTI NAGRI LETTER HO"
40785\uA823 "SYLOTI NAGRI VOWEL SIGN A"
40786\uA824 "SYLOTI NAGRI VOWEL SIGN I"
40787\uA825 "SYLOTI NAGRI VOWEL SIGN U"
40788\uA826 "SYLOTI NAGRI VOWEL SIGN E"
40789\uA827 "SYLOTI NAGRI VOWEL SIGN OO"
40790\uA828 "SYLOTI NAGRI POETRY MARK-1"
40791\uA829 "SYLOTI NAGRI POETRY MARK-2"
40792\uA82A "SYLOTI NAGRI POETRY MARK-3"
40793\uA82B "SYLOTI NAGRI POETRY MARK-4"
40794\uA840 "PHAGS-PA LETTER KA"
40795\uA841 "PHAGS-PA LETTER KHA"
40796\uA842 "PHAGS-PA LETTER GA"
40797\uA843 "PHAGS-PA LETTER NGA"
40798\uA844 "PHAGS-PA LETTER CA"
40799\uA845 "PHAGS-PA LETTER CHA"
40800\uA846 "PHAGS-PA LETTER JA"
40801\uA847 "PHAGS-PA LETTER NYA"
40802\uA848 "PHAGS-PA LETTER TA"
40803\uA849 "PHAGS-PA LETTER THA"
40804\uA84A "PHAGS-PA LETTER DA"
40805\uA84B "PHAGS-PA LETTER NA"
40806\uA84C "PHAGS-PA LETTER PA"
40807\uA84D "PHAGS-PA LETTER PHA"
40808\uA84E "PHAGS-PA LETTER BA"
40809\uA84F "PHAGS-PA LETTER MA"
40810\uA850 "PHAGS-PA LETTER TSA"
40811\uA851 "PHAGS-PA LETTER TSHA"
40812\uA852 "PHAGS-PA LETTER DZA"
40813\uA853 "PHAGS-PA LETTER WA"
40814\uA854 "PHAGS-PA LETTER ZHA"
40815\uA855 "PHAGS-PA LETTER ZA"
40816\uA856 "PHAGS-PA LETTER SMALL A"
40817\uA857 "PHAGS-PA LETTER YA"
40818\uA858 "PHAGS-PA LETTER RA"
40819\uA859 "PHAGS-PA LETTER LA"
40820\uA85A "PHAGS-PA LETTER SHA"
40821\uA85B "PHAGS-PA LETTER SA"
40822\uA85C "PHAGS-PA LETTER HA"
40823\uA85D "PHAGS-PA LETTER A"
40824\uA85E "PHAGS-PA LETTER I"
40825\uA85F "PHAGS-PA LETTER U"
40826\uA860 "PHAGS-PA LETTER E"
40827\uA861 "PHAGS-PA LETTER O"
40828\uA862 "PHAGS-PA LETTER QA"
40829\uA863 "PHAGS-PA LETTER XA"
40830\uA864 "PHAGS-PA LETTER FA"
40831\uA865 "PHAGS-PA LETTER GGA"
40832\uA866 "PHAGS-PA LETTER EE"
40833\uA867 "PHAGS-PA SUBJOINED LETTER WA"
40834\uA868 "PHAGS-PA SUBJOINED LETTER YA"
40835\uA869 "PHAGS-PA LETTER TTA"
40836\uA86A "PHAGS-PA LETTER TTHA"
40837\uA86B "PHAGS-PA LETTER DDA"
40838\uA86C "PHAGS-PA LETTER NNA"
40839\uA86D "PHAGS-PA LETTER ALTERNATE YA"
40840\uA86E "PHAGS-PA LETTER VOICELESS SHA"
40841\uA86F "PHAGS-PA LETTER VOICED HA"
40842\uA870 "PHAGS-PA LETTER ASPIRATED FA"
40843\uA871 "PHAGS-PA SUBJOINED LETTER RA"
40844\uA872 "PHAGS-PA SUPERFIXED LETTER RA"
40845\uA873 "PHAGS-PA LETTER CANDRABINDU"
40846\uA874 "PHAGS-PA SINGLE HEAD MARK"
40847\uA875 "PHAGS-PA DOUBLE HEAD MARK"
40848\uA876 "PHAGS-PA MARK SHAD"
40849\uA877 "PHAGS-PA MARK DOUBLE SHAD"
40850\uA880 "SAURASHTRA SIGN ANUSVARA"
40851\uA881 "SAURASHTRA SIGN VISARGA"
40852\uA882 "SAURASHTRA LETTER A"
40853\uA883 "SAURASHTRA LETTER AA"
40854\uA884 "SAURASHTRA LETTER I"
40855\uA885 "SAURASHTRA LETTER II"
40856\uA886 "SAURASHTRA LETTER U"
40857\uA887 "SAURASHTRA LETTER UU"
40858\uA888 "SAURASHTRA LETTER VOCALIC R"
40859\uA889 "SAURASHTRA LETTER VOCALIC RR"
40860\uA88A "SAURASHTRA LETTER VOCALIC L"
40861\uA88B "SAURASHTRA LETTER VOCALIC LL"
40862\uA88C "SAURASHTRA LETTER E"
40863\uA88D "SAURASHTRA LETTER EE"
40864\uA88E "SAURASHTRA LETTER AI"
40865\uA88F "SAURASHTRA LETTER O"
40866\uA890 "SAURASHTRA LETTER OO"
40867\uA891 "SAURASHTRA LETTER AU"
40868\uA892 "SAURASHTRA LETTER KA"
40869\uA893 "SAURASHTRA LETTER KHA"
40870\uA894 "SAURASHTRA LETTER GA"
40871\uA895 "SAURASHTRA LETTER GHA"
40872\uA896 "SAURASHTRA LETTER NGA"
40873\uA897 "SAURASHTRA LETTER CA"
40874\uA898 "SAURASHTRA LETTER CHA"
40875\uA899 "SAURASHTRA LETTER JA"
40876\uA89A "SAURASHTRA LETTER JHA"
40877\uA89B "SAURASHTRA LETTER NYA"
40878\uA89C "SAURASHTRA LETTER TTA"
40879\uA89D "SAURASHTRA LETTER TTHA"
40880\uA89E "SAURASHTRA LETTER DDA"
40881\uA89F "SAURASHTRA LETTER DDHA"
40882\uA8A0 "SAURASHTRA LETTER NNA"
40883\uA8A1 "SAURASHTRA LETTER TA"
40884\uA8A2 "SAURASHTRA LETTER THA"
40885\uA8A3 "SAURASHTRA LETTER DA"
40886\uA8A4 "SAURASHTRA LETTER DHA"
40887\uA8A5 "SAURASHTRA LETTER NA"
40888\uA8A6 "SAURASHTRA LETTER PA"
40889\uA8A7 "SAURASHTRA LETTER PHA"
40890\uA8A8 "SAURASHTRA LETTER BA"
40891\uA8A9 "SAURASHTRA LETTER BHA"
40892\uA8AA "SAURASHTRA LETTER MA"
40893\uA8AB "SAURASHTRA LETTER YA"
40894\uA8AC "SAURASHTRA LETTER RA"
40895\uA8AD "SAURASHTRA LETTER LA"
40896\uA8AE "SAURASHTRA LETTER VA"
40897\uA8AF "SAURASHTRA LETTER SHA"
40898\uA8B0 "SAURASHTRA LETTER SSA"
40899\uA8B1 "SAURASHTRA LETTER SA"
40900\uA8B2 "SAURASHTRA LETTER HA"
40901\uA8B3 "SAURASHTRA LETTER LLA"
40902\uA8B4 "SAURASHTRA CONSONANT SIGN HAARU"
40903\uA8B5 "SAURASHTRA VOWEL SIGN AA"
40904\uA8B6 "SAURASHTRA VOWEL SIGN I"
40905\uA8B7 "SAURASHTRA VOWEL SIGN II"
40906\uA8B8 "SAURASHTRA VOWEL SIGN U"
40907\uA8B9 "SAURASHTRA VOWEL SIGN UU"
40908\uA8BA "SAURASHTRA VOWEL SIGN VOCALIC R"
40909\uA8BB "SAURASHTRA VOWEL SIGN VOCALIC RR"
40910\uA8BC "SAURASHTRA VOWEL SIGN VOCALIC L"
40911\uA8BD "SAURASHTRA VOWEL SIGN VOCALIC LL"
40912\uA8BE "SAURASHTRA VOWEL SIGN E"
40913\uA8BF "SAURASHTRA VOWEL SIGN EE"
40914\uA8C0 "SAURASHTRA VOWEL SIGN AI"
40915\uA8C1 "SAURASHTRA VOWEL SIGN O"
40916\uA8C2 "SAURASHTRA VOWEL SIGN OO"
40917\uA8C3 "SAURASHTRA VOWEL SIGN AU"
40918\uA8C4 "SAURASHTRA SIGN VIRAMA"
40919\uA8CE "SAURASHTRA DANDA"
40920\uA8CF "SAURASHTRA DOUBLE DANDA"
40921\uA8D0 "SAURASHTRA DIGIT ZERO"
40922\uA8D1 "SAURASHTRA DIGIT ONE"
40923\uA8D2 "SAURASHTRA DIGIT TWO"
40924\uA8D3 "SAURASHTRA DIGIT THREE"
40925\uA8D4 "SAURASHTRA DIGIT FOUR"
40926\uA8D5 "SAURASHTRA DIGIT FIVE"
40927\uA8D6 "SAURASHTRA DIGIT SIX"
40928\uA8D7 "SAURASHTRA DIGIT SEVEN"
40929\uA8D8 "SAURASHTRA DIGIT EIGHT"
40930\uA8D9 "SAURASHTRA DIGIT NINE"
40931\uA900 "KAYAH LI DIGIT ZERO"
40932\uA901 "KAYAH LI DIGIT ONE"
40933\uA902 "KAYAH LI DIGIT TWO"
40934\uA903 "KAYAH LI DIGIT THREE"
40935\uA904 "KAYAH LI DIGIT FOUR"
40936\uA905 "KAYAH LI DIGIT FIVE"
40937\uA906 "KAYAH LI DIGIT SIX"
40938\uA907 "KAYAH LI DIGIT SEVEN"
40939\uA908 "KAYAH LI DIGIT EIGHT"
40940\uA909 "KAYAH LI DIGIT NINE"
40941\uA90A "KAYAH LI LETTER KA"
40942\uA90B "KAYAH LI LETTER KHA"
40943\uA90C "KAYAH LI LETTER GA"
40944\uA90D "KAYAH LI LETTER NGA"
40945\uA90E "KAYAH LI LETTER SA"
40946\uA90F "KAYAH LI LETTER SHA"
40947\uA910 "KAYAH LI LETTER ZA"
40948\uA911 "KAYAH LI LETTER NYA"
40949\uA912 "KAYAH LI LETTER TA"
40950\uA913 "KAYAH LI LETTER HTA"
40951\uA914 "KAYAH LI LETTER NA"
40952\uA915 "KAYAH LI LETTER PA"
40953\uA916 "KAYAH LI LETTER PHA"
40954\uA917 "KAYAH LI LETTER MA"
40955\uA918 "KAYAH LI LETTER DA"
40956\uA919 "KAYAH LI LETTER BA"
40957\uA91A "KAYAH LI LETTER RA"
40958\uA91B "KAYAH LI LETTER YA"
40959\uA91C "KAYAH LI LETTER LA"
40960\uA91D "KAYAH LI LETTER WA"
40961\uA91E "KAYAH LI LETTER THA"
40962\uA91F "KAYAH LI LETTER HA"
40963\uA920 "KAYAH LI LETTER VA"
40964\uA921 "KAYAH LI LETTER CA"
40965\uA922 "KAYAH LI LETTER A"
40966\uA923 "KAYAH LI LETTER OE"
40967\uA924 "KAYAH LI LETTER I"
40968\uA925 "KAYAH LI LETTER OO"
40969\uA926 "KAYAH LI VOWEL UE"
40970\uA927 "KAYAH LI VOWEL E"
40971\uA928 "KAYAH LI VOWEL U"
40972\uA929 "KAYAH LI VOWEL EE"
40973\uA92A "KAYAH LI VOWEL O"
40974\uA92B "KAYAH LI TONE PLOPHU"
40975\uA92C "KAYAH LI TONE CALYA"
40976\uA92D "KAYAH LI TONE CALYA PLOPHU"
40977\uA92E "KAYAH LI SIGN CWI"
40978\uA92F "KAYAH LI SIGN SHYA"
40979\uA930 "REJANG LETTER KA"
40980\uA931 "REJANG LETTER GA"
40981\uA932 "REJANG LETTER NGA"
40982\uA933 "REJANG LETTER TA"
40983\uA934 "REJANG LETTER DA"
40984\uA935 "REJANG LETTER NA"
40985\uA936 "REJANG LETTER PA"
40986\uA937 "REJANG LETTER BA"
40987\uA938 "REJANG LETTER MA"
40988\uA939 "REJANG LETTER CA"
40989\uA93A "REJANG LETTER JA"
40990\uA93B "REJANG LETTER NYA"
40991\uA93C "REJANG LETTER SA"
40992\uA93D "REJANG LETTER RA"
40993\uA93E "REJANG LETTER LA"
40994\uA93F "REJANG LETTER YA"
40995\uA940 "REJANG LETTER WA"
40996\uA941 "REJANG LETTER HA"
40997\uA942 "REJANG LETTER MBA"
40998\uA943 "REJANG LETTER NGGA"
40999\uA944 "REJANG LETTER NDA"
41000\uA945 "REJANG LETTER NYJA"
41001\uA946 "REJANG LETTER A"
41002\uA947 "REJANG VOWEL SIGN I"
41003\uA948 "REJANG VOWEL SIGN U"
41004\uA949 "REJANG VOWEL SIGN E"
41005\uA94A "REJANG VOWEL SIGN AI"
41006\uA94B "REJANG VOWEL SIGN O"
41007\uA94C "REJANG VOWEL SIGN AU"
41008\uA94D "REJANG VOWEL SIGN EU"
41009\uA94E "REJANG VOWEL SIGN EA"
41010\uA94F "REJANG CONSONANT SIGN NG"
41011\uA950 "REJANG CONSONANT SIGN N"
41012\uA951 "REJANG CONSONANT SIGN R"
41013\uA952 "REJANG CONSONANT SIGN H"
41014\uA953 "REJANG VIRAMA"
41015\uA95F "REJANG SECTION MARK"
41016\uAA00 "CHAM LETTER A"
41017\uAA01 "CHAM LETTER I"
41018\uAA02 "CHAM LETTER U"
41019\uAA03 "CHAM LETTER E"
41020\uAA04 "CHAM LETTER AI"
41021\uAA05 "CHAM LETTER O"
41022\uAA06 "CHAM LETTER KA"
41023\uAA07 "CHAM LETTER KHA"
41024\uAA08 "CHAM LETTER GA"
41025\uAA09 "CHAM LETTER GHA"
41026\uAA0A "CHAM LETTER NGUE"
41027\uAA0B "CHAM LETTER NGA"
41028\uAA0C "CHAM LETTER CHA"
41029\uAA0D "CHAM LETTER CHHA"
41030\uAA0E "CHAM LETTER JA"
41031\uAA0F "CHAM LETTER JHA"
41032\uAA10 "CHAM LETTER NHUE"
41033\uAA11 "CHAM LETTER NHA"
41034\uAA12 "CHAM LETTER NHJA"
41035\uAA13 "CHAM LETTER TA"
41036\uAA14 "CHAM LETTER THA"
41037\uAA15 "CHAM LETTER DA"
41038\uAA16 "CHAM LETTER DHA"
41039\uAA17 "CHAM LETTER NUE"
41040\uAA18 "CHAM LETTER NA"
41041\uAA19 "CHAM LETTER DDA"
41042\uAA1A "CHAM LETTER PA"
41043\uAA1B "CHAM LETTER PPA"
41044\uAA1C "CHAM LETTER PHA"
41045\uAA1D "CHAM LETTER BA"
41046\uAA1E "CHAM LETTER BHA"
41047\uAA1F "CHAM LETTER MUE"
41048\uAA20 "CHAM LETTER MA"
41049\uAA21 "CHAM LETTER BBA"
41050\uAA22 "CHAM LETTER YA"
41051\uAA23 "CHAM LETTER RA"
41052\uAA24 "CHAM LETTER LA"
41053\uAA25 "CHAM LETTER VA"
41054\uAA26 "CHAM LETTER SSA"
41055\uAA27 "CHAM LETTER SA"
41056\uAA28 "CHAM LETTER HA"
41057\uAA29 "CHAM VOWEL SIGN AA"
41058\uAA2A "CHAM VOWEL SIGN I"
41059\uAA2B "CHAM VOWEL SIGN II"
41060\uAA2C "CHAM VOWEL SIGN EI"
41061\uAA2D "CHAM VOWEL SIGN U"
41062\uAA2E "CHAM VOWEL SIGN OE"
41063\uAA2F "CHAM VOWEL SIGN O"
41064\uAA30 "CHAM VOWEL SIGN AI"
41065\uAA31 "CHAM VOWEL SIGN AU"
41066\uAA32 "CHAM VOWEL SIGN UE"
41067\uAA33 "CHAM CONSONANT SIGN YA"
41068\uAA34 "CHAM CONSONANT SIGN RA"
41069\uAA35 "CHAM CONSONANT SIGN LA"
41070\uAA36 "CHAM CONSONANT SIGN WA"
41071\uAA40 "CHAM LETTER FINAL K"
41072\uAA41 "CHAM LETTER FINAL G"
41073\uAA42 "CHAM LETTER FINAL NG"
41074\uAA43 "CHAM CONSONANT SIGN FINAL NG"
41075\uAA44 "CHAM LETTER FINAL CH"
41076\uAA45 "CHAM LETTER FINAL T"
41077\uAA46 "CHAM LETTER FINAL N"
41078\uAA47 "CHAM LETTER FINAL P"
41079\uAA48 "CHAM LETTER FINAL Y"
41080\uAA49 "CHAM LETTER FINAL R"
41081\uAA4A "CHAM LETTER FINAL L"
41082\uAA4B "CHAM LETTER FINAL SS"
41083\uAA4C "CHAM CONSONANT SIGN FINAL M"
41084\uAA4D "CHAM CONSONANT SIGN FINAL H"
41085\uAA50 "CHAM DIGIT ZERO"
41086\uAA51 "CHAM DIGIT ONE"
41087\uAA52 "CHAM DIGIT TWO"
41088\uAA53 "CHAM DIGIT THREE"
41089\uAA54 "CHAM DIGIT FOUR"
41090\uAA55 "CHAM DIGIT FIVE"
41091\uAA56 "CHAM DIGIT SIX"
41092\uAA57 "CHAM DIGIT SEVEN"
41093\uAA58 "CHAM DIGIT EIGHT"
41094\uAA59 "CHAM DIGIT NINE"
41095\uAA5C "CHAM PUNCTUATION SPIRAL"
41096\uAA5D "CHAM PUNCTUATION DANDA"
41097\uAA5E "CHAM PUNCTUATION DOUBLE DANDA"
41098\uAA5F "CHAM PUNCTUATION TRIPLE DANDA"
41099\uF900 "CJK COMPATIBILITY IDEOGRAPH-F900"
41100\uF901 "CJK COMPATIBILITY IDEOGRAPH-F901"
41101\uF902 "CJK COMPATIBILITY IDEOGRAPH-F902"
41102\uF903 "CJK COMPATIBILITY IDEOGRAPH-F903"
41103\uF904 "CJK COMPATIBILITY IDEOGRAPH-F904"
41104\uF905 "CJK COMPATIBILITY IDEOGRAPH-F905"
41105\uF906 "CJK COMPATIBILITY IDEOGRAPH-F906"
41106\uF907 "CJK COMPATIBILITY IDEOGRAPH-F907"
41107\uF908 "CJK COMPATIBILITY IDEOGRAPH-F908"
41108\uF909 "CJK COMPATIBILITY IDEOGRAPH-F909"
41109\uF90A "CJK COMPATIBILITY IDEOGRAPH-F90A"
41110\uF90B "CJK COMPATIBILITY IDEOGRAPH-F90B"
41111\uF90C "CJK COMPATIBILITY IDEOGRAPH-F90C"
41112\uF90D "CJK COMPATIBILITY IDEOGRAPH-F90D"
41113\uF90E "CJK COMPATIBILITY IDEOGRAPH-F90E"
41114\uF90F "CJK COMPATIBILITY IDEOGRAPH-F90F"
41115\uF910 "CJK COMPATIBILITY IDEOGRAPH-F910"
41116\uF911 "CJK COMPATIBILITY IDEOGRAPH-F911"
41117\uF912 "CJK COMPATIBILITY IDEOGRAPH-F912"
41118\uF913 "CJK COMPATIBILITY IDEOGRAPH-F913"
41119\uF914 "CJK COMPATIBILITY IDEOGRAPH-F914"
41120\uF915 "CJK COMPATIBILITY IDEOGRAPH-F915"
41121\uF916 "CJK COMPATIBILITY IDEOGRAPH-F916"
41122\uF917 "CJK COMPATIBILITY IDEOGRAPH-F917"
41123\uF918 "CJK COMPATIBILITY IDEOGRAPH-F918"
41124\uF919 "CJK COMPATIBILITY IDEOGRAPH-F919"
41125\uF91A "CJK COMPATIBILITY IDEOGRAPH-F91A"
41126\uF91B "CJK COMPATIBILITY IDEOGRAPH-F91B"
41127\uF91C "CJK COMPATIBILITY IDEOGRAPH-F91C"
41128\uF91D "CJK COMPATIBILITY IDEOGRAPH-F91D"
41129\uF91E "CJK COMPATIBILITY IDEOGRAPH-F91E"
41130\uF91F "CJK COMPATIBILITY IDEOGRAPH-F91F"
41131\uF920 "CJK COMPATIBILITY IDEOGRAPH-F920"
41132\uF921 "CJK COMPATIBILITY IDEOGRAPH-F921"
41133\uF922 "CJK COMPATIBILITY IDEOGRAPH-F922"
41134\uF923 "CJK COMPATIBILITY IDEOGRAPH-F923"
41135\uF924 "CJK COMPATIBILITY IDEOGRAPH-F924"
41136\uF925 "CJK COMPATIBILITY IDEOGRAPH-F925"
41137\uF926 "CJK COMPATIBILITY IDEOGRAPH-F926"
41138\uF927 "CJK COMPATIBILITY IDEOGRAPH-F927"
41139\uF928 "CJK COMPATIBILITY IDEOGRAPH-F928"
41140\uF929 "CJK COMPATIBILITY IDEOGRAPH-F929"
41141\uF92A "CJK COMPATIBILITY IDEOGRAPH-F92A"
41142\uF92B "CJK COMPATIBILITY IDEOGRAPH-F92B"
41143\uF92C "CJK COMPATIBILITY IDEOGRAPH-F92C"
41144\uF92D "CJK COMPATIBILITY IDEOGRAPH-F92D"
41145\uF92E "CJK COMPATIBILITY IDEOGRAPH-F92E"
41146\uF92F "CJK COMPATIBILITY IDEOGRAPH-F92F"
41147\uF930 "CJK COMPATIBILITY IDEOGRAPH-F930"
41148\uF931 "CJK COMPATIBILITY IDEOGRAPH-F931"
41149\uF932 "CJK COMPATIBILITY IDEOGRAPH-F932"
41150\uF933 "CJK COMPATIBILITY IDEOGRAPH-F933"
41151\uF934 "CJK COMPATIBILITY IDEOGRAPH-F934"
41152\uF935 "CJK COMPATIBILITY IDEOGRAPH-F935"
41153\uF936 "CJK COMPATIBILITY IDEOGRAPH-F936"
41154\uF937 "CJK COMPATIBILITY IDEOGRAPH-F937"
41155\uF938 "CJK COMPATIBILITY IDEOGRAPH-F938"
41156\uF939 "CJK COMPATIBILITY IDEOGRAPH-F939"
41157\uF93A "CJK COMPATIBILITY IDEOGRAPH-F93A"
41158\uF93B "CJK COMPATIBILITY IDEOGRAPH-F93B"
41159\uF93C "CJK COMPATIBILITY IDEOGRAPH-F93C"
41160\uF93D "CJK COMPATIBILITY IDEOGRAPH-F93D"
41161\uF93E "CJK COMPATIBILITY IDEOGRAPH-F93E"
41162\uF93F "CJK COMPATIBILITY IDEOGRAPH-F93F"
41163\uF940 "CJK COMPATIBILITY IDEOGRAPH-F940"
41164\uF941 "CJK COMPATIBILITY IDEOGRAPH-F941"
41165\uF942 "CJK COMPATIBILITY IDEOGRAPH-F942"
41166\uF943 "CJK COMPATIBILITY IDEOGRAPH-F943"
41167\uF944 "CJK COMPATIBILITY IDEOGRAPH-F944"
41168\uF945 "CJK COMPATIBILITY IDEOGRAPH-F945"
41169\uF946 "CJK COMPATIBILITY IDEOGRAPH-F946"
41170\uF947 "CJK COMPATIBILITY IDEOGRAPH-F947"
41171\uF948 "CJK COMPATIBILITY IDEOGRAPH-F948"
41172\uF949 "CJK COMPATIBILITY IDEOGRAPH-F949"
41173\uF94A "CJK COMPATIBILITY IDEOGRAPH-F94A"
41174\uF94B "CJK COMPATIBILITY IDEOGRAPH-F94B"
41175\uF94C "CJK COMPATIBILITY IDEOGRAPH-F94C"
41176\uF94D "CJK COMPATIBILITY IDEOGRAPH-F94D"
41177\uF94E "CJK COMPATIBILITY IDEOGRAPH-F94E"
41178\uF94F "CJK COMPATIBILITY IDEOGRAPH-F94F"
41179\uF950 "CJK COMPATIBILITY IDEOGRAPH-F950"
41180\uF951 "CJK COMPATIBILITY IDEOGRAPH-F951"
41181\uF952 "CJK COMPATIBILITY IDEOGRAPH-F952"
41182\uF953 "CJK COMPATIBILITY IDEOGRAPH-F953"
41183\uF954 "CJK COMPATIBILITY IDEOGRAPH-F954"
41184\uF955 "CJK COMPATIBILITY IDEOGRAPH-F955"
41185\uF956 "CJK COMPATIBILITY IDEOGRAPH-F956"
41186\uF957 "CJK COMPATIBILITY IDEOGRAPH-F957"
41187\uF958 "CJK COMPATIBILITY IDEOGRAPH-F958"
41188\uF959 "CJK COMPATIBILITY IDEOGRAPH-F959"
41189\uF95A "CJK COMPATIBILITY IDEOGRAPH-F95A"
41190\uF95B "CJK COMPATIBILITY IDEOGRAPH-F95B"
41191\uF95C "CJK COMPATIBILITY IDEOGRAPH-F95C"
41192\uF95D "CJK COMPATIBILITY IDEOGRAPH-F95D"
41193\uF95E "CJK COMPATIBILITY IDEOGRAPH-F95E"
41194\uF95F "CJK COMPATIBILITY IDEOGRAPH-F95F"
41195\uF960 "CJK COMPATIBILITY IDEOGRAPH-F960"
41196\uF961 "CJK COMPATIBILITY IDEOGRAPH-F961"
41197\uF962 "CJK COMPATIBILITY IDEOGRAPH-F962"
41198\uF963 "CJK COMPATIBILITY IDEOGRAPH-F963"
41199\uF964 "CJK COMPATIBILITY IDEOGRAPH-F964"
41200\uF965 "CJK COMPATIBILITY IDEOGRAPH-F965"
41201\uF966 "CJK COMPATIBILITY IDEOGRAPH-F966"
41202\uF967 "CJK COMPATIBILITY IDEOGRAPH-F967"
41203\uF968 "CJK COMPATIBILITY IDEOGRAPH-F968"
41204\uF969 "CJK COMPATIBILITY IDEOGRAPH-F969"
41205\uF96A "CJK COMPATIBILITY IDEOGRAPH-F96A"
41206\uF96B "CJK COMPATIBILITY IDEOGRAPH-F96B"
41207\uF96C "CJK COMPATIBILITY IDEOGRAPH-F96C"
41208\uF96D "CJK COMPATIBILITY IDEOGRAPH-F96D"
41209\uF96E "CJK COMPATIBILITY IDEOGRAPH-F96E"
41210\uF96F "CJK COMPATIBILITY IDEOGRAPH-F96F"
41211\uF970 "CJK COMPATIBILITY IDEOGRAPH-F970"
41212\uF971 "CJK COMPATIBILITY IDEOGRAPH-F971"
41213\uF972 "CJK COMPATIBILITY IDEOGRAPH-F972"
41214\uF973 "CJK COMPATIBILITY IDEOGRAPH-F973"
41215\uF974 "CJK COMPATIBILITY IDEOGRAPH-F974"
41216\uF975 "CJK COMPATIBILITY IDEOGRAPH-F975"
41217\uF976 "CJK COMPATIBILITY IDEOGRAPH-F976"
41218\uF977 "CJK COMPATIBILITY IDEOGRAPH-F977"
41219\uF978 "CJK COMPATIBILITY IDEOGRAPH-F978"
41220\uF979 "CJK COMPATIBILITY IDEOGRAPH-F979"
41221\uF97A "CJK COMPATIBILITY IDEOGRAPH-F97A"
41222\uF97B "CJK COMPATIBILITY IDEOGRAPH-F97B"
41223\uF97C "CJK COMPATIBILITY IDEOGRAPH-F97C"
41224\uF97D "CJK COMPATIBILITY IDEOGRAPH-F97D"
41225\uF97E "CJK COMPATIBILITY IDEOGRAPH-F97E"
41226\uF97F "CJK COMPATIBILITY IDEOGRAPH-F97F"
41227\uF980 "CJK COMPATIBILITY IDEOGRAPH-F980"
41228\uF981 "CJK COMPATIBILITY IDEOGRAPH-F981"
41229\uF982 "CJK COMPATIBILITY IDEOGRAPH-F982"
41230\uF983 "CJK COMPATIBILITY IDEOGRAPH-F983"
41231\uF984 "CJK COMPATIBILITY IDEOGRAPH-F984"
41232\uF985 "CJK COMPATIBILITY IDEOGRAPH-F985"
41233\uF986 "CJK COMPATIBILITY IDEOGRAPH-F986"
41234\uF987 "CJK COMPATIBILITY IDEOGRAPH-F987"
41235\uF988 "CJK COMPATIBILITY IDEOGRAPH-F988"
41236\uF989 "CJK COMPATIBILITY IDEOGRAPH-F989"
41237\uF98A "CJK COMPATIBILITY IDEOGRAPH-F98A"
41238\uF98B "CJK COMPATIBILITY IDEOGRAPH-F98B"
41239\uF98C "CJK COMPATIBILITY IDEOGRAPH-F98C"
41240\uF98D "CJK COMPATIBILITY IDEOGRAPH-F98D"
41241\uF98E "CJK COMPATIBILITY IDEOGRAPH-F98E"
41242\uF98F "CJK COMPATIBILITY IDEOGRAPH-F98F"
41243\uF990 "CJK COMPATIBILITY IDEOGRAPH-F990"
41244\uF991 "CJK COMPATIBILITY IDEOGRAPH-F991"
41245\uF992 "CJK COMPATIBILITY IDEOGRAPH-F992"
41246\uF993 "CJK COMPATIBILITY IDEOGRAPH-F993"
41247\uF994 "CJK COMPATIBILITY IDEOGRAPH-F994"
41248\uF995 "CJK COMPATIBILITY IDEOGRAPH-F995"
41249\uF996 "CJK COMPATIBILITY IDEOGRAPH-F996"
41250\uF997 "CJK COMPATIBILITY IDEOGRAPH-F997"
41251\uF998 "CJK COMPATIBILITY IDEOGRAPH-F998"
41252\uF999 "CJK COMPATIBILITY IDEOGRAPH-F999"
41253\uF99A "CJK COMPATIBILITY IDEOGRAPH-F99A"
41254\uF99B "CJK COMPATIBILITY IDEOGRAPH-F99B"
41255\uF99C "CJK COMPATIBILITY IDEOGRAPH-F99C"
41256\uF99D "CJK COMPATIBILITY IDEOGRAPH-F99D"
41257\uF99E "CJK COMPATIBILITY IDEOGRAPH-F99E"
41258\uF99F "CJK COMPATIBILITY IDEOGRAPH-F99F"
41259\uF9A0 "CJK COMPATIBILITY IDEOGRAPH-F9A0"
41260\uF9A1 "CJK COMPATIBILITY IDEOGRAPH-F9A1"
41261\uF9A2 "CJK COMPATIBILITY IDEOGRAPH-F9A2"
41262\uF9A3 "CJK COMPATIBILITY IDEOGRAPH-F9A3"
41263\uF9A4 "CJK COMPATIBILITY IDEOGRAPH-F9A4"
41264\uF9A5 "CJK COMPATIBILITY IDEOGRAPH-F9A5"
41265\uF9A6 "CJK COMPATIBILITY IDEOGRAPH-F9A6"
41266\uF9A7 "CJK COMPATIBILITY IDEOGRAPH-F9A7"
41267\uF9A8 "CJK COMPATIBILITY IDEOGRAPH-F9A8"
41268\uF9A9 "CJK COMPATIBILITY IDEOGRAPH-F9A9"
41269\uF9AA "CJK COMPATIBILITY IDEOGRAPH-F9AA"
41270\uF9AB "CJK COMPATIBILITY IDEOGRAPH-F9AB"
41271\uF9AC "CJK COMPATIBILITY IDEOGRAPH-F9AC"
41272\uF9AD "CJK COMPATIBILITY IDEOGRAPH-F9AD"
41273\uF9AE "CJK COMPATIBILITY IDEOGRAPH-F9AE"
41274\uF9AF "CJK COMPATIBILITY IDEOGRAPH-F9AF"
41275\uF9B0 "CJK COMPATIBILITY IDEOGRAPH-F9B0"
41276\uF9B1 "CJK COMPATIBILITY IDEOGRAPH-F9B1"
41277\uF9B2 "CJK COMPATIBILITY IDEOGRAPH-F9B2"
41278\uF9B3 "CJK COMPATIBILITY IDEOGRAPH-F9B3"
41279\uF9B4 "CJK COMPATIBILITY IDEOGRAPH-F9B4"
41280\uF9B5 "CJK COMPATIBILITY IDEOGRAPH-F9B5"
41281\uF9B6 "CJK COMPATIBILITY IDEOGRAPH-F9B6"
41282\uF9B7 "CJK COMPATIBILITY IDEOGRAPH-F9B7"
41283\uF9B8 "CJK COMPATIBILITY IDEOGRAPH-F9B8"
41284\uF9B9 "CJK COMPATIBILITY IDEOGRAPH-F9B9"
41285\uF9BA "CJK COMPATIBILITY IDEOGRAPH-F9BA"
41286\uF9BB "CJK COMPATIBILITY IDEOGRAPH-F9BB"
41287\uF9BC "CJK COMPATIBILITY IDEOGRAPH-F9BC"
41288\uF9BD "CJK COMPATIBILITY IDEOGRAPH-F9BD"
41289\uF9BE "CJK COMPATIBILITY IDEOGRAPH-F9BE"
41290\uF9BF "CJK COMPATIBILITY IDEOGRAPH-F9BF"
41291\uF9C0 "CJK COMPATIBILITY IDEOGRAPH-F9C0"
41292\uF9C1 "CJK COMPATIBILITY IDEOGRAPH-F9C1"
41293\uF9C2 "CJK COMPATIBILITY IDEOGRAPH-F9C2"
41294\uF9C3 "CJK COMPATIBILITY IDEOGRAPH-F9C3"
41295\uF9C4 "CJK COMPATIBILITY IDEOGRAPH-F9C4"
41296\uF9C5 "CJK COMPATIBILITY IDEOGRAPH-F9C5"
41297\uF9C6 "CJK COMPATIBILITY IDEOGRAPH-F9C6"
41298\uF9C7 "CJK COMPATIBILITY IDEOGRAPH-F9C7"
41299\uF9C8 "CJK COMPATIBILITY IDEOGRAPH-F9C8"
41300\uF9C9 "CJK COMPATIBILITY IDEOGRAPH-F9C9"
41301\uF9CA "CJK COMPATIBILITY IDEOGRAPH-F9CA"
41302\uF9CB "CJK COMPATIBILITY IDEOGRAPH-F9CB"
41303\uF9CC "CJK COMPATIBILITY IDEOGRAPH-F9CC"
41304\uF9CD "CJK COMPATIBILITY IDEOGRAPH-F9CD"
41305\uF9CE "CJK COMPATIBILITY IDEOGRAPH-F9CE"
41306\uF9CF "CJK COMPATIBILITY IDEOGRAPH-F9CF"
41307\uF9D0 "CJK COMPATIBILITY IDEOGRAPH-F9D0"
41308\uF9D1 "CJK COMPATIBILITY IDEOGRAPH-F9D1"
41309\uF9D2 "CJK COMPATIBILITY IDEOGRAPH-F9D2"
41310\uF9D3 "CJK COMPATIBILITY IDEOGRAPH-F9D3"
41311\uF9D4 "CJK COMPATIBILITY IDEOGRAPH-F9D4"
41312\uF9D5 "CJK COMPATIBILITY IDEOGRAPH-F9D5"
41313\uF9D6 "CJK COMPATIBILITY IDEOGRAPH-F9D6"
41314\uF9D7 "CJK COMPATIBILITY IDEOGRAPH-F9D7"
41315\uF9D8 "CJK COMPATIBILITY IDEOGRAPH-F9D8"
41316\uF9D9 "CJK COMPATIBILITY IDEOGRAPH-F9D9"
41317\uF9DA "CJK COMPATIBILITY IDEOGRAPH-F9DA"
41318\uF9DB "CJK COMPATIBILITY IDEOGRAPH-F9DB"
41319\uF9DC "CJK COMPATIBILITY IDEOGRAPH-F9DC"
41320\uF9DD "CJK COMPATIBILITY IDEOGRAPH-F9DD"
41321\uF9DE "CJK COMPATIBILITY IDEOGRAPH-F9DE"
41322\uF9DF "CJK COMPATIBILITY IDEOGRAPH-F9DF"
41323\uF9E0 "CJK COMPATIBILITY IDEOGRAPH-F9E0"
41324\uF9E1 "CJK COMPATIBILITY IDEOGRAPH-F9E1"
41325\uF9E2 "CJK COMPATIBILITY IDEOGRAPH-F9E2"
41326\uF9E3 "CJK COMPATIBILITY IDEOGRAPH-F9E3"
41327\uF9E4 "CJK COMPATIBILITY IDEOGRAPH-F9E4"
41328\uF9E5 "CJK COMPATIBILITY IDEOGRAPH-F9E5"
41329\uF9E6 "CJK COMPATIBILITY IDEOGRAPH-F9E6"
41330\uF9E7 "CJK COMPATIBILITY IDEOGRAPH-F9E7"
41331\uF9E8 "CJK COMPATIBILITY IDEOGRAPH-F9E8"
41332\uF9E9 "CJK COMPATIBILITY IDEOGRAPH-F9E9"
41333\uF9EA "CJK COMPATIBILITY IDEOGRAPH-F9EA"
41334\uF9EB "CJK COMPATIBILITY IDEOGRAPH-F9EB"
41335\uF9EC "CJK COMPATIBILITY IDEOGRAPH-F9EC"
41336\uF9ED "CJK COMPATIBILITY IDEOGRAPH-F9ED"
41337\uF9EE "CJK COMPATIBILITY IDEOGRAPH-F9EE"
41338\uF9EF "CJK COMPATIBILITY IDEOGRAPH-F9EF"
41339\uF9F0 "CJK COMPATIBILITY IDEOGRAPH-F9F0"
41340\uF9F1 "CJK COMPATIBILITY IDEOGRAPH-F9F1"
41341\uF9F2 "CJK COMPATIBILITY IDEOGRAPH-F9F2"
41342\uF9F3 "CJK COMPATIBILITY IDEOGRAPH-F9F3"
41343\uF9F4 "CJK COMPATIBILITY IDEOGRAPH-F9F4"
41344\uF9F5 "CJK COMPATIBILITY IDEOGRAPH-F9F5"
41345\uF9F6 "CJK COMPATIBILITY IDEOGRAPH-F9F6"
41346\uF9F7 "CJK COMPATIBILITY IDEOGRAPH-F9F7"
41347\uF9F8 "CJK COMPATIBILITY IDEOGRAPH-F9F8"
41348\uF9F9 "CJK COMPATIBILITY IDEOGRAPH-F9F9"
41349\uF9FA "CJK COMPATIBILITY IDEOGRAPH-F9FA"
41350\uF9FB "CJK COMPATIBILITY IDEOGRAPH-F9FB"
41351\uF9FC "CJK COMPATIBILITY IDEOGRAPH-F9FC"
41352\uF9FD "CJK COMPATIBILITY IDEOGRAPH-F9FD"
41353\uF9FE "CJK COMPATIBILITY IDEOGRAPH-F9FE"
41354\uF9FF "CJK COMPATIBILITY IDEOGRAPH-F9FF"
41355\uFA00 "CJK COMPATIBILITY IDEOGRAPH-FA00"
41356\uFA01 "CJK COMPATIBILITY IDEOGRAPH-FA01"
41357\uFA02 "CJK COMPATIBILITY IDEOGRAPH-FA02"
41358\uFA03 "CJK COMPATIBILITY IDEOGRAPH-FA03"
41359\uFA04 "CJK COMPATIBILITY IDEOGRAPH-FA04"
41360\uFA05 "CJK COMPATIBILITY IDEOGRAPH-FA05"
41361\uFA06 "CJK COMPATIBILITY IDEOGRAPH-FA06"
41362\uFA07 "CJK COMPATIBILITY IDEOGRAPH-FA07"
41363\uFA08 "CJK COMPATIBILITY IDEOGRAPH-FA08"
41364\uFA09 "CJK COMPATIBILITY IDEOGRAPH-FA09"
41365\uFA0A "CJK COMPATIBILITY IDEOGRAPH-FA0A"
41366\uFA0B "CJK COMPATIBILITY IDEOGRAPH-FA0B"
41367\uFA0C "CJK COMPATIBILITY IDEOGRAPH-FA0C"
41368\uFA0D "CJK COMPATIBILITY IDEOGRAPH-FA0D"
41369\uFA0E "CJK COMPATIBILITY IDEOGRAPH-FA0E"
41370\uFA0F "CJK COMPATIBILITY IDEOGRAPH-FA0F"
41371\uFA10 "CJK COMPATIBILITY IDEOGRAPH-FA10"
41372\uFA11 "CJK COMPATIBILITY IDEOGRAPH-FA11"
41373\uFA12 "CJK COMPATIBILITY IDEOGRAPH-FA12"
41374\uFA13 "CJK COMPATIBILITY IDEOGRAPH-FA13"
41375\uFA14 "CJK COMPATIBILITY IDEOGRAPH-FA14"
41376\uFA15 "CJK COMPATIBILITY IDEOGRAPH-FA15"
41377\uFA16 "CJK COMPATIBILITY IDEOGRAPH-FA16"
41378\uFA17 "CJK COMPATIBILITY IDEOGRAPH-FA17"
41379\uFA18 "CJK COMPATIBILITY IDEOGRAPH-FA18"
41380\uFA19 "CJK COMPATIBILITY IDEOGRAPH-FA19"
41381\uFA1A "CJK COMPATIBILITY IDEOGRAPH-FA1A"
41382\uFA1B "CJK COMPATIBILITY IDEOGRAPH-FA1B"
41383\uFA1C "CJK COMPATIBILITY IDEOGRAPH-FA1C"
41384\uFA1D "CJK COMPATIBILITY IDEOGRAPH-FA1D"
41385\uFA1E "CJK COMPATIBILITY IDEOGRAPH-FA1E"
41386\uFA1F "CJK COMPATIBILITY IDEOGRAPH-FA1F"
41387\uFA20 "CJK COMPATIBILITY IDEOGRAPH-FA20"
41388\uFA21 "CJK COMPATIBILITY IDEOGRAPH-FA21"
41389\uFA22 "CJK COMPATIBILITY IDEOGRAPH-FA22"
41390\uFA23 "CJK COMPATIBILITY IDEOGRAPH-FA23"
41391\uFA24 "CJK COMPATIBILITY IDEOGRAPH-FA24"
41392\uFA25 "CJK COMPATIBILITY IDEOGRAPH-FA25"
41393\uFA26 "CJK COMPATIBILITY IDEOGRAPH-FA26"
41394\uFA27 "CJK COMPATIBILITY IDEOGRAPH-FA27"
41395\uFA28 "CJK COMPATIBILITY IDEOGRAPH-FA28"
41396\uFA29 "CJK COMPATIBILITY IDEOGRAPH-FA29"
41397\uFA2A "CJK COMPATIBILITY IDEOGRAPH-FA2A"
41398\uFA2B "CJK COMPATIBILITY IDEOGRAPH-FA2B"
41399\uFA2C "CJK COMPATIBILITY IDEOGRAPH-FA2C"
41400\uFA2D "CJK COMPATIBILITY IDEOGRAPH-FA2D"
41401\uFA30 "CJK COMPATIBILITY IDEOGRAPH-FA30"
41402\uFA31 "CJK COMPATIBILITY IDEOGRAPH-FA31"
41403\uFA32 "CJK COMPATIBILITY IDEOGRAPH-FA32"
41404\uFA33 "CJK COMPATIBILITY IDEOGRAPH-FA33"
41405\uFA34 "CJK COMPATIBILITY IDEOGRAPH-FA34"
41406\uFA35 "CJK COMPATIBILITY IDEOGRAPH-FA35"
41407\uFA36 "CJK COMPATIBILITY IDEOGRAPH-FA36"
41408\uFA37 "CJK COMPATIBILITY IDEOGRAPH-FA37"
41409\uFA38 "CJK COMPATIBILITY IDEOGRAPH-FA38"
41410\uFA39 "CJK COMPATIBILITY IDEOGRAPH-FA39"
41411\uFA3A "CJK COMPATIBILITY IDEOGRAPH-FA3A"
41412\uFA3B "CJK COMPATIBILITY IDEOGRAPH-FA3B"
41413\uFA3C "CJK COMPATIBILITY IDEOGRAPH-FA3C"
41414\uFA3D "CJK COMPATIBILITY IDEOGRAPH-FA3D"
41415\uFA3E "CJK COMPATIBILITY IDEOGRAPH-FA3E"
41416\uFA3F "CJK COMPATIBILITY IDEOGRAPH-FA3F"
41417\uFA40 "CJK COMPATIBILITY IDEOGRAPH-FA40"
41418\uFA41 "CJK COMPATIBILITY IDEOGRAPH-FA41"
41419\uFA42 "CJK COMPATIBILITY IDEOGRAPH-FA42"
41420\uFA43 "CJK COMPATIBILITY IDEOGRAPH-FA43"
41421\uFA44 "CJK COMPATIBILITY IDEOGRAPH-FA44"
41422\uFA45 "CJK COMPATIBILITY IDEOGRAPH-FA45"
41423\uFA46 "CJK COMPATIBILITY IDEOGRAPH-FA46"
41424\uFA47 "CJK COMPATIBILITY IDEOGRAPH-FA47"
41425\uFA48 "CJK COMPATIBILITY IDEOGRAPH-FA48"
41426\uFA49 "CJK COMPATIBILITY IDEOGRAPH-FA49"
41427\uFA4A "CJK COMPATIBILITY IDEOGRAPH-FA4A"
41428\uFA4B "CJK COMPATIBILITY IDEOGRAPH-FA4B"
41429\uFA4C "CJK COMPATIBILITY IDEOGRAPH-FA4C"
41430\uFA4D "CJK COMPATIBILITY IDEOGRAPH-FA4D"
41431\uFA4E "CJK COMPATIBILITY IDEOGRAPH-FA4E"
41432\uFA4F "CJK COMPATIBILITY IDEOGRAPH-FA4F"
41433\uFA50 "CJK COMPATIBILITY IDEOGRAPH-FA50"
41434\uFA51 "CJK COMPATIBILITY IDEOGRAPH-FA51"
41435\uFA52 "CJK COMPATIBILITY IDEOGRAPH-FA52"
41436\uFA53 "CJK COMPATIBILITY IDEOGRAPH-FA53"
41437\uFA54 "CJK COMPATIBILITY IDEOGRAPH-FA54"
41438\uFA55 "CJK COMPATIBILITY IDEOGRAPH-FA55"
41439\uFA56 "CJK COMPATIBILITY IDEOGRAPH-FA56"
41440\uFA57 "CJK COMPATIBILITY IDEOGRAPH-FA57"
41441\uFA58 "CJK COMPATIBILITY IDEOGRAPH-FA58"
41442\uFA59 "CJK COMPATIBILITY IDEOGRAPH-FA59"
41443\uFA5A "CJK COMPATIBILITY IDEOGRAPH-FA5A"
41444\uFA5B "CJK COMPATIBILITY IDEOGRAPH-FA5B"
41445\uFA5C "CJK COMPATIBILITY IDEOGRAPH-FA5C"
41446\uFA5D "CJK COMPATIBILITY IDEOGRAPH-FA5D"
41447\uFA5E "CJK COMPATIBILITY IDEOGRAPH-FA5E"
41448\uFA5F "CJK COMPATIBILITY IDEOGRAPH-FA5F"
41449\uFA60 "CJK COMPATIBILITY IDEOGRAPH-FA60"
41450\uFA61 "CJK COMPATIBILITY IDEOGRAPH-FA61"
41451\uFA62 "CJK COMPATIBILITY IDEOGRAPH-FA62"
41452\uFA63 "CJK COMPATIBILITY IDEOGRAPH-FA63"
41453\uFA64 "CJK COMPATIBILITY IDEOGRAPH-FA64"
41454\uFA65 "CJK COMPATIBILITY IDEOGRAPH-FA65"
41455\uFA66 "CJK COMPATIBILITY IDEOGRAPH-FA66"
41456\uFA67 "CJK COMPATIBILITY IDEOGRAPH-FA67"
41457\uFA68 "CJK COMPATIBILITY IDEOGRAPH-FA68"
41458\uFA69 "CJK COMPATIBILITY IDEOGRAPH-FA69"
41459\uFA6A "CJK COMPATIBILITY IDEOGRAPH-FA6A"
41460\uFA70 "CJK COMPATIBILITY IDEOGRAPH-FA70"
41461\uFA71 "CJK COMPATIBILITY IDEOGRAPH-FA71"
41462\uFA72 "CJK COMPATIBILITY IDEOGRAPH-FA72"
41463\uFA73 "CJK COMPATIBILITY IDEOGRAPH-FA73"
41464\uFA74 "CJK COMPATIBILITY IDEOGRAPH-FA74"
41465\uFA75 "CJK COMPATIBILITY IDEOGRAPH-FA75"
41466\uFA76 "CJK COMPATIBILITY IDEOGRAPH-FA76"
41467\uFA77 "CJK COMPATIBILITY IDEOGRAPH-FA77"
41468\uFA78 "CJK COMPATIBILITY IDEOGRAPH-FA78"
41469\uFA79 "CJK COMPATIBILITY IDEOGRAPH-FA79"
41470\uFA7A "CJK COMPATIBILITY IDEOGRAPH-FA7A"
41471\uFA7B "CJK COMPATIBILITY IDEOGRAPH-FA7B"
41472\uFA7C "CJK COMPATIBILITY IDEOGRAPH-FA7C"
41473\uFA7D "CJK COMPATIBILITY IDEOGRAPH-FA7D"
41474\uFA7E "CJK COMPATIBILITY IDEOGRAPH-FA7E"
41475\uFA7F "CJK COMPATIBILITY IDEOGRAPH-FA7F"
41476\uFA80 "CJK COMPATIBILITY IDEOGRAPH-FA80"
41477\uFA81 "CJK COMPATIBILITY IDEOGRAPH-FA81"
41478\uFA82 "CJK COMPATIBILITY IDEOGRAPH-FA82"
41479\uFA83 "CJK COMPATIBILITY IDEOGRAPH-FA83"
41480\uFA84 "CJK COMPATIBILITY IDEOGRAPH-FA84"
41481\uFA85 "CJK COMPATIBILITY IDEOGRAPH-FA85"
41482\uFA86 "CJK COMPATIBILITY IDEOGRAPH-FA86"
41483\uFA87 "CJK COMPATIBILITY IDEOGRAPH-FA87"
41484\uFA88 "CJK COMPATIBILITY IDEOGRAPH-FA88"
41485\uFA89 "CJK COMPATIBILITY IDEOGRAPH-FA89"
41486\uFA8A "CJK COMPATIBILITY IDEOGRAPH-FA8A"
41487\uFA8B "CJK COMPATIBILITY IDEOGRAPH-FA8B"
41488\uFA8C "CJK COMPATIBILITY IDEOGRAPH-FA8C"
41489\uFA8D "CJK COMPATIBILITY IDEOGRAPH-FA8D"
41490\uFA8E "CJK COMPATIBILITY IDEOGRAPH-FA8E"
41491\uFA8F "CJK COMPATIBILITY IDEOGRAPH-FA8F"
41492\uFA90 "CJK COMPATIBILITY IDEOGRAPH-FA90"
41493\uFA91 "CJK COMPATIBILITY IDEOGRAPH-FA91"
41494\uFA92 "CJK COMPATIBILITY IDEOGRAPH-FA92"
41495\uFA93 "CJK COMPATIBILITY IDEOGRAPH-FA93"
41496\uFA94 "CJK COMPATIBILITY IDEOGRAPH-FA94"
41497\uFA95 "CJK COMPATIBILITY IDEOGRAPH-FA95"
41498\uFA96 "CJK COMPATIBILITY IDEOGRAPH-FA96"
41499\uFA97 "CJK COMPATIBILITY IDEOGRAPH-FA97"
41500\uFA98 "CJK COMPATIBILITY IDEOGRAPH-FA98"
41501\uFA99 "CJK COMPATIBILITY IDEOGRAPH-FA99"
41502\uFA9A "CJK COMPATIBILITY IDEOGRAPH-FA9A"
41503\uFA9B "CJK COMPATIBILITY IDEOGRAPH-FA9B"
41504\uFA9C "CJK COMPATIBILITY IDEOGRAPH-FA9C"
41505\uFA9D "CJK COMPATIBILITY IDEOGRAPH-FA9D"
41506\uFA9E "CJK COMPATIBILITY IDEOGRAPH-FA9E"
41507\uFA9F "CJK COMPATIBILITY IDEOGRAPH-FA9F"
41508\uFAA0 "CJK COMPATIBILITY IDEOGRAPH-FAA0"
41509\uFAA1 "CJK COMPATIBILITY IDEOGRAPH-FAA1"
41510\uFAA2 "CJK COMPATIBILITY IDEOGRAPH-FAA2"
41511\uFAA3 "CJK COMPATIBILITY IDEOGRAPH-FAA3"
41512\uFAA4 "CJK COMPATIBILITY IDEOGRAPH-FAA4"
41513\uFAA5 "CJK COMPATIBILITY IDEOGRAPH-FAA5"
41514\uFAA6 "CJK COMPATIBILITY IDEOGRAPH-FAA6"
41515\uFAA7 "CJK COMPATIBILITY IDEOGRAPH-FAA7"
41516\uFAA8 "CJK COMPATIBILITY IDEOGRAPH-FAA8"
41517\uFAA9 "CJK COMPATIBILITY IDEOGRAPH-FAA9"
41518\uFAAA "CJK COMPATIBILITY IDEOGRAPH-FAAA"
41519\uFAAB "CJK COMPATIBILITY IDEOGRAPH-FAAB"
41520\uFAAC "CJK COMPATIBILITY IDEOGRAPH-FAAC"
41521\uFAAD "CJK COMPATIBILITY IDEOGRAPH-FAAD"
41522\uFAAE "CJK COMPATIBILITY IDEOGRAPH-FAAE"
41523\uFAAF "CJK COMPATIBILITY IDEOGRAPH-FAAF"
41524\uFAB0 "CJK COMPATIBILITY IDEOGRAPH-FAB0"
41525\uFAB1 "CJK COMPATIBILITY IDEOGRAPH-FAB1"
41526\uFAB2 "CJK COMPATIBILITY IDEOGRAPH-FAB2"
41527\uFAB3 "CJK COMPATIBILITY IDEOGRAPH-FAB3"
41528\uFAB4 "CJK COMPATIBILITY IDEOGRAPH-FAB4"
41529\uFAB5 "CJK COMPATIBILITY IDEOGRAPH-FAB5"
41530\uFAB6 "CJK COMPATIBILITY IDEOGRAPH-FAB6"
41531\uFAB7 "CJK COMPATIBILITY IDEOGRAPH-FAB7"
41532\uFAB8 "CJK COMPATIBILITY IDEOGRAPH-FAB8"
41533\uFAB9 "CJK COMPATIBILITY IDEOGRAPH-FAB9"
41534\uFABA "CJK COMPATIBILITY IDEOGRAPH-FABA"
41535\uFABB "CJK COMPATIBILITY IDEOGRAPH-FABB"
41536\uFABC "CJK COMPATIBILITY IDEOGRAPH-FABC"
41537\uFABD "CJK COMPATIBILITY IDEOGRAPH-FABD"
41538\uFABE "CJK COMPATIBILITY IDEOGRAPH-FABE"
41539\uFABF "CJK COMPATIBILITY IDEOGRAPH-FABF"
41540\uFAC0 "CJK COMPATIBILITY IDEOGRAPH-FAC0"
41541\uFAC1 "CJK COMPATIBILITY IDEOGRAPH-FAC1"
41542\uFAC2 "CJK COMPATIBILITY IDEOGRAPH-FAC2"
41543\uFAC3 "CJK COMPATIBILITY IDEOGRAPH-FAC3"
41544\uFAC4 "CJK COMPATIBILITY IDEOGRAPH-FAC4"
41545\uFAC5 "CJK COMPATIBILITY IDEOGRAPH-FAC5"
41546\uFAC6 "CJK COMPATIBILITY IDEOGRAPH-FAC6"
41547\uFAC7 "CJK COMPATIBILITY IDEOGRAPH-FAC7"
41548\uFAC8 "CJK COMPATIBILITY IDEOGRAPH-FAC8"
41549\uFAC9 "CJK COMPATIBILITY IDEOGRAPH-FAC9"
41550\uFACA "CJK COMPATIBILITY IDEOGRAPH-FACA"
41551\uFACB "CJK COMPATIBILITY IDEOGRAPH-FACB"
41552\uFACC "CJK COMPATIBILITY IDEOGRAPH-FACC"
41553\uFACD "CJK COMPATIBILITY IDEOGRAPH-FACD"
41554\uFACE "CJK COMPATIBILITY IDEOGRAPH-FACE"
41555\uFACF "CJK COMPATIBILITY IDEOGRAPH-FACF"
41556\uFAD0 "CJK COMPATIBILITY IDEOGRAPH-FAD0"
41557\uFAD1 "CJK COMPATIBILITY IDEOGRAPH-FAD1"
41558\uFAD2 "CJK COMPATIBILITY IDEOGRAPH-FAD2"
41559\uFAD3 "CJK COMPATIBILITY IDEOGRAPH-FAD3"
41560\uFAD4 "CJK COMPATIBILITY IDEOGRAPH-FAD4"
41561\uFAD5 "CJK COMPATIBILITY IDEOGRAPH-FAD5"
41562\uFAD6 "CJK COMPATIBILITY IDEOGRAPH-FAD6"
41563\uFAD7 "CJK COMPATIBILITY IDEOGRAPH-FAD7"
41564\uFAD8 "CJK COMPATIBILITY IDEOGRAPH-FAD8"
41565\uFAD9 "CJK COMPATIBILITY IDEOGRAPH-FAD9"
41566\uFB00 "LATIN SMALL LIGATURE FF"
41567\uFB01 "LATIN SMALL LIGATURE FI"
41568\uFB02 "LATIN SMALL LIGATURE FL"
41569\uFB03 "LATIN SMALL LIGATURE FFI"
41570\uFB04 "LATIN SMALL LIGATURE FFL"
41571\uFB05 "LATIN SMALL LIGATURE LONG S T"
41572\uFB06 "LATIN SMALL LIGATURE ST"
41573\uFB13 "ARMENIAN SMALL LIGATURE MEN NOW"
41574\uFB14 "ARMENIAN SMALL LIGATURE MEN ECH"
41575\uFB15 "ARMENIAN SMALL LIGATURE MEN INI"
41576\uFB16 "ARMENIAN SMALL LIGATURE VEW NOW"
41577\uFB17 "ARMENIAN SMALL LIGATURE MEN XEH"
41578\uFB1D "HEBREW LETTER YOD WITH HIRIQ"
41579\uFB1E "HEBREW POINT JUDEO-SPANISH VARIKA"
41580\uFB1F "HEBREW LIGATURE YIDDISH YOD YOD PATAH"
41581\uFB20 "HEBREW LETTER ALTERNATIVE AYIN"
41582\uFB21 "HEBREW LETTER WIDE ALEF"
41583\uFB22 "HEBREW LETTER WIDE DALET"
41584\uFB23 "HEBREW LETTER WIDE HE"
41585\uFB24 "HEBREW LETTER WIDE KAF"
41586\uFB25 "HEBREW LETTER WIDE LAMED"
41587\uFB26 "HEBREW LETTER WIDE FINAL MEM"
41588\uFB27 "HEBREW LETTER WIDE RESH"
41589\uFB28 "HEBREW LETTER WIDE TAV"
41590\uFB29 "HEBREW LETTER ALTERNATIVE PLUS SIGN"
41591\uFB2A "HEBREW LETTER SHIN WITH SHIN DOT"
41592\uFB2B "HEBREW LETTER SHIN WITH SIN DOT"
41593\uFB2C "HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT"
41594\uFB2D "HEBREW LETTER SHIN WITH DAGESH AND SIN DOT"
41595\uFB2E "HEBREW LETTER ALEF WITH PATAH"
41596\uFB2F "HEBREW LETTER ALEF WITH QAMATS"
41597\uFB30 "HEBREW LETTER ALEF WITH MAPIQ"
41598\uFB31 "HEBREW LETTER BET WITH DAGESH"
41599\uFB32 "HEBREW LETTER GIMEL WITH DAGESH"
41600\uFB33 "HEBREW LETTER DALET WITH DAGESH"
41601\uFB34 "HEBREW LETTER HE WITH MAPIQ"
41602\uFB35 "HEBREW LETTER VAV WITH DAGESH"
41603\uFB36 "HEBREW LETTER ZAYIN WITH DAGESH"
41604\uFB38 "HEBREW LETTER TET WITH DAGESH"
41605\uFB39 "HEBREW LETTER YOD WITH DAGESH"
41606\uFB3A "HEBREW LETTER FINAL KAF WITH DAGESH"
41607\uFB3B "HEBREW LETTER KAF WITH DAGESH"
41608\uFB3C "HEBREW LETTER LAMED WITH DAGESH"
41609\uFB3E "HEBREW LETTER MEM WITH DAGESH"
41610\uFB40 "HEBREW LETTER NUN WITH DAGESH"
41611\uFB41 "HEBREW LETTER SAMEKH WITH DAGESH"
41612\uFB43 "HEBREW LETTER FINAL PE WITH DAGESH"
41613\uFB44 "HEBREW LETTER PE WITH DAGESH"
41614\uFB46 "HEBREW LETTER TSADI WITH DAGESH"
41615\uFB47 "HEBREW LETTER QOF WITH DAGESH"
41616\uFB48 "HEBREW LETTER RESH WITH DAGESH"
41617\uFB49 "HEBREW LETTER SHIN WITH DAGESH"
41618\uFB4A "HEBREW LETTER TAV WITH DAGESH"
41619\uFB4B "HEBREW LETTER VAV WITH HOLAM"
41620\uFB4C "HEBREW LETTER BET WITH RAFE"
41621\uFB4D "HEBREW LETTER KAF WITH RAFE"
41622\uFB4E "HEBREW LETTER PE WITH RAFE"
41623\uFB4F "HEBREW LIGATURE ALEF LAMED"
41624\uFB50 "ARABIC LETTER ALEF WASLA ISOLATED FORM"
41625\uFB51 "ARABIC LETTER ALEF WASLA FINAL FORM"
41626\uFB52 "ARABIC LETTER BEEH ISOLATED FORM"
41627\uFB53 "ARABIC LETTER BEEH FINAL FORM"
41628\uFB54 "ARABIC LETTER BEEH INITIAL FORM"
41629\uFB55 "ARABIC LETTER BEEH MEDIAL FORM"
41630\uFB56 "ARABIC LETTER PEH ISOLATED FORM"
41631\uFB57 "ARABIC LETTER PEH FINAL FORM"
41632\uFB58 "ARABIC LETTER PEH INITIAL FORM"
41633\uFB59 "ARABIC LETTER PEH MEDIAL FORM"
41634\uFB5A "ARABIC LETTER BEHEH ISOLATED FORM"
41635\uFB5B "ARABIC LETTER BEHEH FINAL FORM"
41636\uFB5C "ARABIC LETTER BEHEH INITIAL FORM"
41637\uFB5D "ARABIC LETTER BEHEH MEDIAL FORM"
41638\uFB5E "ARABIC LETTER TTEHEH ISOLATED FORM"
41639\uFB5F "ARABIC LETTER TTEHEH FINAL FORM"
41640\uFB60 "ARABIC LETTER TTEHEH INITIAL FORM"
41641\uFB61 "ARABIC LETTER TTEHEH MEDIAL FORM"
41642\uFB62 "ARABIC LETTER TEHEH ISOLATED FORM"
41643\uFB63 "ARABIC LETTER TEHEH FINAL FORM"
41644\uFB64 "ARABIC LETTER TEHEH INITIAL FORM"
41645\uFB65 "ARABIC LETTER TEHEH MEDIAL FORM"
41646\uFB66 "ARABIC LETTER TTEH ISOLATED FORM"
41647\uFB67 "ARABIC LETTER TTEH FINAL FORM"
41648\uFB68 "ARABIC LETTER TTEH INITIAL FORM"
41649\uFB69 "ARABIC LETTER TTEH MEDIAL FORM"
41650\uFB6A "ARABIC LETTER VEH ISOLATED FORM"
41651\uFB6B "ARABIC LETTER VEH FINAL FORM"
41652\uFB6C "ARABIC LETTER VEH INITIAL FORM"
41653\uFB6D "ARABIC LETTER VEH MEDIAL FORM"
41654\uFB6E "ARABIC LETTER PEHEH ISOLATED FORM"
41655\uFB6F "ARABIC LETTER PEHEH FINAL FORM"
41656\uFB70 "ARABIC LETTER PEHEH INITIAL FORM"
41657\uFB71 "ARABIC LETTER PEHEH MEDIAL FORM"
41658\uFB72 "ARABIC LETTER DYEH ISOLATED FORM"
41659\uFB73 "ARABIC LETTER DYEH FINAL FORM"
41660\uFB74 "ARABIC LETTER DYEH INITIAL FORM"
41661\uFB75 "ARABIC LETTER DYEH MEDIAL FORM"
41662\uFB76 "ARABIC LETTER NYEH ISOLATED FORM"
41663\uFB77 "ARABIC LETTER NYEH FINAL FORM"
41664\uFB78 "ARABIC LETTER NYEH INITIAL FORM"
41665\uFB79 "ARABIC LETTER NYEH MEDIAL FORM"
41666\uFB7A "ARABIC LETTER TCHEH ISOLATED FORM"
41667\uFB7B "ARABIC LETTER TCHEH FINAL FORM"
41668\uFB7C "ARABIC LETTER TCHEH INITIAL FORM"
41669\uFB7D "ARABIC LETTER TCHEH MEDIAL FORM"
41670\uFB7E "ARABIC LETTER TCHEHEH ISOLATED FORM"
41671\uFB7F "ARABIC LETTER TCHEHEH FINAL FORM"
41672\uFB80 "ARABIC LETTER TCHEHEH INITIAL FORM"
41673\uFB81 "ARABIC LETTER TCHEHEH MEDIAL FORM"
41674\uFB82 "ARABIC LETTER DDAHAL ISOLATED FORM"
41675\uFB83 "ARABIC LETTER DDAHAL FINAL FORM"
41676\uFB84 "ARABIC LETTER DAHAL ISOLATED FORM"
41677\uFB85 "ARABIC LETTER DAHAL FINAL FORM"
41678\uFB86 "ARABIC LETTER DUL ISOLATED FORM"
41679\uFB87 "ARABIC LETTER DUL FINAL FORM"
41680\uFB88 "ARABIC LETTER DDAL ISOLATED FORM"
41681\uFB89 "ARABIC LETTER DDAL FINAL FORM"
41682\uFB8A "ARABIC LETTER JEH ISOLATED FORM"
41683\uFB8B "ARABIC LETTER JEH FINAL FORM"
41684\uFB8C "ARABIC LETTER RREH ISOLATED FORM"
41685\uFB8D "ARABIC LETTER RREH FINAL FORM"
41686\uFB8E "ARABIC LETTER KEHEH ISOLATED FORM"
41687\uFB8F "ARABIC LETTER KEHEH FINAL FORM"
41688\uFB90 "ARABIC LETTER KEHEH INITIAL FORM"
41689\uFB91 "ARABIC LETTER KEHEH MEDIAL FORM"
41690\uFB92 "ARABIC LETTER GAF ISOLATED FORM"
41691\uFB93 "ARABIC LETTER GAF FINAL FORM"
41692\uFB94 "ARABIC LETTER GAF INITIAL FORM"
41693\uFB95 "ARABIC LETTER GAF MEDIAL FORM"
41694\uFB96 "ARABIC LETTER GUEH ISOLATED FORM"
41695\uFB97 "ARABIC LETTER GUEH FINAL FORM"
41696\uFB98 "ARABIC LETTER GUEH INITIAL FORM"
41697\uFB99 "ARABIC LETTER GUEH MEDIAL FORM"
41698\uFB9A "ARABIC LETTER NGOEH ISOLATED FORM"
41699\uFB9B "ARABIC LETTER NGOEH FINAL FORM"
41700\uFB9C "ARABIC LETTER NGOEH INITIAL FORM"
41701\uFB9D "ARABIC LETTER NGOEH MEDIAL FORM"
41702\uFB9E "ARABIC LETTER NOON GHUNNA ISOLATED FORM"
41703\uFB9F "ARABIC LETTER NOON GHUNNA FINAL FORM"
41704\uFBA0 "ARABIC LETTER RNOON ISOLATED FORM"
41705\uFBA1 "ARABIC LETTER RNOON FINAL FORM"
41706\uFBA2 "ARABIC LETTER RNOON INITIAL FORM"
41707\uFBA3 "ARABIC LETTER RNOON MEDIAL FORM"
41708\uFBA4 "ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM"
41709\uFBA5 "ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM"
41710\uFBA6 "ARABIC LETTER HEH GOAL ISOLATED FORM"
41711\uFBA7 "ARABIC LETTER HEH GOAL FINAL FORM"
41712\uFBA8 "ARABIC LETTER HEH GOAL INITIAL FORM"
41713\uFBA9 "ARABIC LETTER HEH GOAL MEDIAL FORM"
41714\uFBAA "ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM"
41715\uFBAB "ARABIC LETTER HEH DOACHASHMEE FINAL FORM"
41716\uFBAC "ARABIC LETTER HEH DOACHASHMEE INITIAL FORM"
41717\uFBAD "ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM"
41718\uFBAE "ARABIC LETTER YEH BARREE ISOLATED FORM"
41719\uFBAF "ARABIC LETTER YEH BARREE FINAL FORM"
41720\uFBB0 "ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM"
41721\uFBB1 "ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM"
41722\uFBD3 "ARABIC LETTER NG ISOLATED FORM"
41723\uFBD4 "ARABIC LETTER NG FINAL FORM"
41724\uFBD5 "ARABIC LETTER NG INITIAL FORM"
41725\uFBD6 "ARABIC LETTER NG MEDIAL FORM"
41726\uFBD7 "ARABIC LETTER U ISOLATED FORM"
41727\uFBD8 "ARABIC LETTER U FINAL FORM"
41728\uFBD9 "ARABIC LETTER OE ISOLATED FORM"
41729\uFBDA "ARABIC LETTER OE FINAL FORM"
41730\uFBDB "ARABIC LETTER YU ISOLATED FORM"
41731\uFBDC "ARABIC LETTER YU FINAL FORM"
41732\uFBDD "ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM"
41733\uFBDE "ARABIC LETTER VE ISOLATED FORM"
41734\uFBDF "ARABIC LETTER VE FINAL FORM"
41735\uFBE0 "ARABIC LETTER KIRGHIZ OE ISOLATED FORM"
41736\uFBE1 "ARABIC LETTER KIRGHIZ OE FINAL FORM"
41737\uFBE2 "ARABIC LETTER KIRGHIZ YU ISOLATED FORM"
41738\uFBE3 "ARABIC LETTER KIRGHIZ YU FINAL FORM"
41739\uFBE4 "ARABIC LETTER E ISOLATED FORM"
41740\uFBE5 "ARABIC LETTER E FINAL FORM"
41741\uFBE6 "ARABIC LETTER E INITIAL FORM"
41742\uFBE7 "ARABIC LETTER E MEDIAL FORM"
41743\uFBE8 "ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM"
41744\uFBE9 "ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM"
41745\uFBEA "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM"
41746\uFBEB "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM"
41747\uFBEC "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM"
41748\uFBED "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM"
41749\uFBEE "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM"
41750\uFBEF "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM"
41751\uFBF0 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM"
41752\uFBF1 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM"
41753\uFBF2 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM"
41754\uFBF3 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM"
41755\uFBF4 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM"
41756\uFBF5 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM"
41757\uFBF6 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM"
41758\uFBF7 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM"
41759\uFBF8 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM"
41760\uFBF9 "ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM"
41761\uFBFA "ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM"
41762\uFBFB "ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM"
41763\uFBFC "ARABIC LETTER FARSI YEH ISOLATED FORM"
41764\uFBFD "ARABIC LETTER FARSI YEH FINAL FORM"
41765\uFBFE "ARABIC LETTER FARSI YEH INITIAL FORM"
41766\uFBFF "ARABIC LETTER FARSI YEH MEDIAL FORM"
41767\uFC00 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM"
41768\uFC01 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM"
41769\uFC02 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM"
41770\uFC03 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM"
41771\uFC04 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM"
41772\uFC05 "ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM"
41773\uFC06 "ARABIC LIGATURE BEH WITH HAH ISOLATED FORM"
41774\uFC07 "ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM"
41775\uFC08 "ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM"
41776\uFC09 "ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM"
41777\uFC0A "ARABIC LIGATURE BEH WITH YEH ISOLATED FORM"
41778\uFC0B "ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM"
41779\uFC0C "ARABIC LIGATURE TEH WITH HAH ISOLATED FORM"
41780\uFC0D "ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM"
41781\uFC0E "ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM"
41782\uFC0F "ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM"
41783\uFC10 "ARABIC LIGATURE TEH WITH YEH ISOLATED FORM"
41784\uFC11 "ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM"
41785\uFC12 "ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM"
41786\uFC13 "ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM"
41787\uFC14 "ARABIC LIGATURE THEH WITH YEH ISOLATED FORM"
41788\uFC15 "ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM"
41789\uFC16 "ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM"
41790\uFC17 "ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM"
41791\uFC18 "ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM"
41792\uFC19 "ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM"
41793\uFC1A "ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM"
41794\uFC1B "ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM"
41795\uFC1C "ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM"
41796\uFC1D "ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM"
41797\uFC1E "ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM"
41798\uFC1F "ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM"
41799\uFC20 "ARABIC LIGATURE SAD WITH HAH ISOLATED FORM"
41800\uFC21 "ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM"
41801\uFC22 "ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM"
41802\uFC23 "ARABIC LIGATURE DAD WITH HAH ISOLATED FORM"
41803\uFC24 "ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM"
41804\uFC25 "ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM"
41805\uFC26 "ARABIC LIGATURE TAH WITH HAH ISOLATED FORM"
41806\uFC27 "ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM"
41807\uFC28 "ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM"
41808\uFC29 "ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM"
41809\uFC2A "ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM"
41810\uFC2B "ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM"
41811\uFC2C "ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM"
41812\uFC2D "ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM"
41813\uFC2E "ARABIC LIGATURE FEH WITH HAH ISOLATED FORM"
41814\uFC2F "ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM"
41815\uFC30 "ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM"
41816\uFC31 "ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM"
41817\uFC32 "ARABIC LIGATURE FEH WITH YEH ISOLATED FORM"
41818\uFC33 "ARABIC LIGATURE QAF WITH HAH ISOLATED FORM"
41819\uFC34 "ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM"
41820\uFC35 "ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM"
41821\uFC36 "ARABIC LIGATURE QAF WITH YEH ISOLATED FORM"
41822\uFC37 "ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM"
41823\uFC38 "ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM"
41824\uFC39 "ARABIC LIGATURE KAF WITH HAH ISOLATED FORM"
41825\uFC3A "ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM"
41826\uFC3B "ARABIC LIGATURE KAF WITH LAM ISOLATED FORM"
41827\uFC3C "ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM"
41828\uFC3D "ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM"
41829\uFC3E "ARABIC LIGATURE KAF WITH YEH ISOLATED FORM"
41830\uFC3F "ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM"
41831\uFC40 "ARABIC LIGATURE LAM WITH HAH ISOLATED FORM"
41832\uFC41 "ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM"
41833\uFC42 "ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM"
41834\uFC43 "ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM"
41835\uFC44 "ARABIC LIGATURE LAM WITH YEH ISOLATED FORM"
41836\uFC45 "ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM"
41837\uFC46 "ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM"
41838\uFC47 "ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM"
41839\uFC48 "ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM"
41840\uFC49 "ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM"
41841\uFC4A "ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM"
41842\uFC4B "ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM"
41843\uFC4C "ARABIC LIGATURE NOON WITH HAH ISOLATED FORM"
41844\uFC4D "ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM"
41845\uFC4E "ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM"
41846\uFC4F "ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM"
41847\uFC50 "ARABIC LIGATURE NOON WITH YEH ISOLATED FORM"
41848\uFC51 "ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM"
41849\uFC52 "ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM"
41850\uFC53 "ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM"
41851\uFC54 "ARABIC LIGATURE HEH WITH YEH ISOLATED FORM"
41852\uFC55 "ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM"
41853\uFC56 "ARABIC LIGATURE YEH WITH HAH ISOLATED FORM"
41854\uFC57 "ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM"
41855\uFC58 "ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM"
41856\uFC59 "ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM"
41857\uFC5A "ARABIC LIGATURE YEH WITH YEH ISOLATED FORM"
41858\uFC5B "ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM"
41859\uFC5C "ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM"
41860\uFC5D "ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM"
41861\uFC5E "ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM"
41862\uFC5F "ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM"
41863\uFC60 "ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM"
41864\uFC61 "ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM"
41865\uFC62 "ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM"
41866\uFC63 "ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM"
41867\uFC64 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM"
41868\uFC65 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM"
41869\uFC66 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM"
41870\uFC67 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM"
41871\uFC68 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM"
41872\uFC69 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM"
41873\uFC6A "ARABIC LIGATURE BEH WITH REH FINAL FORM"
41874\uFC6B "ARABIC LIGATURE BEH WITH ZAIN FINAL FORM"
41875\uFC6C "ARABIC LIGATURE BEH WITH MEEM FINAL FORM"
41876\uFC6D "ARABIC LIGATURE BEH WITH NOON FINAL FORM"
41877\uFC6E "ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM"
41878\uFC6F "ARABIC LIGATURE BEH WITH YEH FINAL FORM"
41879\uFC70 "ARABIC LIGATURE TEH WITH REH FINAL FORM"
41880\uFC71 "ARABIC LIGATURE TEH WITH ZAIN FINAL FORM"
41881\uFC72 "ARABIC LIGATURE TEH WITH MEEM FINAL FORM"
41882\uFC73 "ARABIC LIGATURE TEH WITH NOON FINAL FORM"
41883\uFC74 "ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM"
41884\uFC75 "ARABIC LIGATURE TEH WITH YEH FINAL FORM"
41885\uFC76 "ARABIC LIGATURE THEH WITH REH FINAL FORM"
41886\uFC77 "ARABIC LIGATURE THEH WITH ZAIN FINAL FORM"
41887\uFC78 "ARABIC LIGATURE THEH WITH MEEM FINAL FORM"
41888\uFC79 "ARABIC LIGATURE THEH WITH NOON FINAL FORM"
41889\uFC7A "ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM"
41890\uFC7B "ARABIC LIGATURE THEH WITH YEH FINAL FORM"
41891\uFC7C "ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM"
41892\uFC7D "ARABIC LIGATURE FEH WITH YEH FINAL FORM"
41893\uFC7E "ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM"
41894\uFC7F "ARABIC LIGATURE QAF WITH YEH FINAL FORM"
41895\uFC80 "ARABIC LIGATURE KAF WITH ALEF FINAL FORM"
41896\uFC81 "ARABIC LIGATURE KAF WITH LAM FINAL FORM"
41897\uFC82 "ARABIC LIGATURE KAF WITH MEEM FINAL FORM"
41898\uFC83 "ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM"
41899\uFC84 "ARABIC LIGATURE KAF WITH YEH FINAL FORM"
41900\uFC85 "ARABIC LIGATURE LAM WITH MEEM FINAL FORM"
41901\uFC86 "ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM"
41902\uFC87 "ARABIC LIGATURE LAM WITH YEH FINAL FORM"
41903\uFC88 "ARABIC LIGATURE MEEM WITH ALEF FINAL FORM"
41904\uFC89 "ARABIC LIGATURE MEEM WITH MEEM FINAL FORM"
41905\uFC8A "ARABIC LIGATURE NOON WITH REH FINAL FORM"
41906\uFC8B "ARABIC LIGATURE NOON WITH ZAIN FINAL FORM"
41907\uFC8C "ARABIC LIGATURE NOON WITH MEEM FINAL FORM"
41908\uFC8D "ARABIC LIGATURE NOON WITH NOON FINAL FORM"
41909\uFC8E "ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM"
41910\uFC8F "ARABIC LIGATURE NOON WITH YEH FINAL FORM"
41911\uFC90 "ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM"
41912\uFC91 "ARABIC LIGATURE YEH WITH REH FINAL FORM"
41913\uFC92 "ARABIC LIGATURE YEH WITH ZAIN FINAL FORM"
41914\uFC93 "ARABIC LIGATURE YEH WITH MEEM FINAL FORM"
41915\uFC94 "ARABIC LIGATURE YEH WITH NOON FINAL FORM"
41916\uFC95 "ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM"
41917\uFC96 "ARABIC LIGATURE YEH WITH YEH FINAL FORM"
41918\uFC97 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM"
41919\uFC98 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM"
41920\uFC99 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM"
41921\uFC9A "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM"
41922\uFC9B "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM"
41923\uFC9C "ARABIC LIGATURE BEH WITH JEEM INITIAL FORM"
41924\uFC9D "ARABIC LIGATURE BEH WITH HAH INITIAL FORM"
41925\uFC9E "ARABIC LIGATURE BEH WITH KHAH INITIAL FORM"
41926\uFC9F "ARABIC LIGATURE BEH WITH MEEM INITIAL FORM"
41927\uFCA0 "ARABIC LIGATURE BEH WITH HEH INITIAL FORM"
41928\uFCA1 "ARABIC LIGATURE TEH WITH JEEM INITIAL FORM"
41929\uFCA2 "ARABIC LIGATURE TEH WITH HAH INITIAL FORM"
41930\uFCA3 "ARABIC LIGATURE TEH WITH KHAH INITIAL FORM"
41931\uFCA4 "ARABIC LIGATURE TEH WITH MEEM INITIAL FORM"
41932\uFCA5 "ARABIC LIGATURE TEH WITH HEH INITIAL FORM"
41933\uFCA6 "ARABIC LIGATURE THEH WITH MEEM INITIAL FORM"
41934\uFCA7 "ARABIC LIGATURE JEEM WITH HAH INITIAL FORM"
41935\uFCA8 "ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM"
41936\uFCA9 "ARABIC LIGATURE HAH WITH JEEM INITIAL FORM"
41937\uFCAA "ARABIC LIGATURE HAH WITH MEEM INITIAL FORM"
41938\uFCAB "ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM"
41939\uFCAC "ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM"
41940\uFCAD "ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM"
41941\uFCAE "ARABIC LIGATURE SEEN WITH HAH INITIAL FORM"
41942\uFCAF "ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM"
41943\uFCB0 "ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM"
41944\uFCB1 "ARABIC LIGATURE SAD WITH HAH INITIAL FORM"
41945\uFCB2 "ARABIC LIGATURE SAD WITH KHAH INITIAL FORM"
41946\uFCB3 "ARABIC LIGATURE SAD WITH MEEM INITIAL FORM"
41947\uFCB4 "ARABIC LIGATURE DAD WITH JEEM INITIAL FORM"
41948\uFCB5 "ARABIC LIGATURE DAD WITH HAH INITIAL FORM"
41949\uFCB6 "ARABIC LIGATURE DAD WITH KHAH INITIAL FORM"
41950\uFCB7 "ARABIC LIGATURE DAD WITH MEEM INITIAL FORM"
41951\uFCB8 "ARABIC LIGATURE TAH WITH HAH INITIAL FORM"
41952\uFCB9 "ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM"
41953\uFCBA "ARABIC LIGATURE AIN WITH JEEM INITIAL FORM"
41954\uFCBB "ARABIC LIGATURE AIN WITH MEEM INITIAL FORM"
41955\uFCBC "ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM"
41956\uFCBD "ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM"
41957\uFCBE "ARABIC LIGATURE FEH WITH JEEM INITIAL FORM"
41958\uFCBF "ARABIC LIGATURE FEH WITH HAH INITIAL FORM"
41959\uFCC0 "ARABIC LIGATURE FEH WITH KHAH INITIAL FORM"
41960\uFCC1 "ARABIC LIGATURE FEH WITH MEEM INITIAL FORM"
41961\uFCC2 "ARABIC LIGATURE QAF WITH HAH INITIAL FORM"
41962\uFCC3 "ARABIC LIGATURE QAF WITH MEEM INITIAL FORM"
41963\uFCC4 "ARABIC LIGATURE KAF WITH JEEM INITIAL FORM"
41964\uFCC5 "ARABIC LIGATURE KAF WITH HAH INITIAL FORM"
41965\uFCC6 "ARABIC LIGATURE KAF WITH KHAH INITIAL FORM"
41966\uFCC7 "ARABIC LIGATURE KAF WITH LAM INITIAL FORM"
41967\uFCC8 "ARABIC LIGATURE KAF WITH MEEM INITIAL FORM"
41968\uFCC9 "ARABIC LIGATURE LAM WITH JEEM INITIAL FORM"
41969\uFCCA "ARABIC LIGATURE LAM WITH HAH INITIAL FORM"
41970\uFCCB "ARABIC LIGATURE LAM WITH KHAH INITIAL FORM"
41971\uFCCC "ARABIC LIGATURE LAM WITH MEEM INITIAL FORM"
41972\uFCCD "ARABIC LIGATURE LAM WITH HEH INITIAL FORM"
41973\uFCCE "ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM"
41974\uFCCF "ARABIC LIGATURE MEEM WITH HAH INITIAL FORM"
41975\uFCD0 "ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM"
41976\uFCD1 "ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM"
41977\uFCD2 "ARABIC LIGATURE NOON WITH JEEM INITIAL FORM"
41978\uFCD3 "ARABIC LIGATURE NOON WITH HAH INITIAL FORM"
41979\uFCD4 "ARABIC LIGATURE NOON WITH KHAH INITIAL FORM"
41980\uFCD5 "ARABIC LIGATURE NOON WITH MEEM INITIAL FORM"
41981\uFCD6 "ARABIC LIGATURE NOON WITH HEH INITIAL FORM"
41982\uFCD7 "ARABIC LIGATURE HEH WITH JEEM INITIAL FORM"
41983\uFCD8 "ARABIC LIGATURE HEH WITH MEEM INITIAL FORM"
41984\uFCD9 "ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM"
41985\uFCDA "ARABIC LIGATURE YEH WITH JEEM INITIAL FORM"
41986\uFCDB "ARABIC LIGATURE YEH WITH HAH INITIAL FORM"
41987\uFCDC "ARABIC LIGATURE YEH WITH KHAH INITIAL FORM"
41988\uFCDD "ARABIC LIGATURE YEH WITH MEEM INITIAL FORM"
41989\uFCDE "ARABIC LIGATURE YEH WITH HEH INITIAL FORM"
41990\uFCDF "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM"
41991\uFCE0 "ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM"
41992\uFCE1 "ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM"
41993\uFCE2 "ARABIC LIGATURE BEH WITH HEH MEDIAL FORM"
41994\uFCE3 "ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM"
41995\uFCE4 "ARABIC LIGATURE TEH WITH HEH MEDIAL FORM"
41996\uFCE5 "ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM"
41997\uFCE6 "ARABIC LIGATURE THEH WITH HEH MEDIAL FORM"
41998\uFCE7 "ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM"
41999\uFCE8 "ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM"
42000\uFCE9 "ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM"
42001\uFCEA "ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM"
42002\uFCEB "ARABIC LIGATURE KAF WITH LAM MEDIAL FORM"
42003\uFCEC "ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM"
42004\uFCED "ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM"
42005\uFCEE "ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM"
42006\uFCEF "ARABIC LIGATURE NOON WITH HEH MEDIAL FORM"
42007\uFCF0 "ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM"
42008\uFCF1 "ARABIC LIGATURE YEH WITH HEH MEDIAL FORM"
42009\uFCF2 "ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM"
42010\uFCF3 "ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM"
42011\uFCF4 "ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM"
42012\uFCF5 "ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM"
42013\uFCF6 "ARABIC LIGATURE TAH WITH YEH ISOLATED FORM"
42014\uFCF7 "ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM"
42015\uFCF8 "ARABIC LIGATURE AIN WITH YEH ISOLATED FORM"
42016\uFCF9 "ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM"
42017\uFCFA "ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM"
42018\uFCFB "ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM"
42019\uFCFC "ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM"
42020\uFCFD "ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM"
42021\uFCFE "ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM"
42022\uFCFF "ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM"
42023\uFD00 "ARABIC LIGATURE HAH WITH YEH ISOLATED FORM"
42024\uFD01 "ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM"
42025\uFD02 "ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM"
42026\uFD03 "ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM"
42027\uFD04 "ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM"
42028\uFD05 "ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM"
42029\uFD06 "ARABIC LIGATURE SAD WITH YEH ISOLATED FORM"
42030\uFD07 "ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM"
42031\uFD08 "ARABIC LIGATURE DAD WITH YEH ISOLATED FORM"
42032\uFD09 "ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM"
42033\uFD0A "ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM"
42034\uFD0B "ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM"
42035\uFD0C "ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM"
42036\uFD0D "ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM"
42037\uFD0E "ARABIC LIGATURE SEEN WITH REH ISOLATED FORM"
42038\uFD0F "ARABIC LIGATURE SAD WITH REH ISOLATED FORM"
42039\uFD10 "ARABIC LIGATURE DAD WITH REH ISOLATED FORM"
42040\uFD11 "ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM"
42041\uFD12 "ARABIC LIGATURE TAH WITH YEH FINAL FORM"
42042\uFD13 "ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM"
42043\uFD14 "ARABIC LIGATURE AIN WITH YEH FINAL FORM"
42044\uFD15 "ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM"
42045\uFD16 "ARABIC LIGATURE GHAIN WITH YEH FINAL FORM"
42046\uFD17 "ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM"
42047\uFD18 "ARABIC LIGATURE SEEN WITH YEH FINAL FORM"
42048\uFD19 "ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM"
42049\uFD1A "ARABIC LIGATURE SHEEN WITH YEH FINAL FORM"
42050\uFD1B "ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM"
42051\uFD1C "ARABIC LIGATURE HAH WITH YEH FINAL FORM"
42052\uFD1D "ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM"
42053\uFD1E "ARABIC LIGATURE JEEM WITH YEH FINAL FORM"
42054\uFD1F "ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM"
42055\uFD20 "ARABIC LIGATURE KHAH WITH YEH FINAL FORM"
42056\uFD21 "ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM"
42057\uFD22 "ARABIC LIGATURE SAD WITH YEH FINAL FORM"
42058\uFD23 "ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM"
42059\uFD24 "ARABIC LIGATURE DAD WITH YEH FINAL FORM"
42060\uFD25 "ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM"
42061\uFD26 "ARABIC LIGATURE SHEEN WITH HAH FINAL FORM"
42062\uFD27 "ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM"
42063\uFD28 "ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM"
42064\uFD29 "ARABIC LIGATURE SHEEN WITH REH FINAL FORM"
42065\uFD2A "ARABIC LIGATURE SEEN WITH REH FINAL FORM"
42066\uFD2B "ARABIC LIGATURE SAD WITH REH FINAL FORM"
42067\uFD2C "ARABIC LIGATURE DAD WITH REH FINAL FORM"
42068\uFD2D "ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM"
42069\uFD2E "ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM"
42070\uFD2F "ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM"
42071\uFD30 "ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM"
42072\uFD31 "ARABIC LIGATURE SEEN WITH HEH INITIAL FORM"
42073\uFD32 "ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM"
42074\uFD33 "ARABIC LIGATURE TAH WITH MEEM INITIAL FORM"
42075\uFD34 "ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM"
42076\uFD35 "ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM"
42077\uFD36 "ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM"
42078\uFD37 "ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM"
42079\uFD38 "ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM"
42080\uFD39 "ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM"
42081\uFD3A "ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM"
42082\uFD3B "ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM"
42083\uFD3C "ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM"
42084\uFD3D "ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM"
42085\uFD3E "ORNATE LEFT PARENTHESIS"
42086\uFD3F "ORNATE RIGHT PARENTHESIS"
42087\uFD50 "ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM"
42088\uFD51 "ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM"
42089\uFD52 "ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM"
42090\uFD53 "ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM"
42091\uFD54 "ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM"
42092\uFD55 "ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM"
42093\uFD56 "ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM"
42094\uFD57 "ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM"
42095\uFD58 "ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM"
42096\uFD59 "ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM"
42097\uFD5A "ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM"
42098\uFD5B "ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM"
42099\uFD5C "ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM"
42100\uFD5D "ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM"
42101\uFD5E "ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM"
42102\uFD5F "ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM"
42103\uFD60 "ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM"
42104\uFD61 "ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM"
42105\uFD62 "ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM"
42106\uFD63 "ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM"
42107\uFD64 "ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM"
42108\uFD65 "ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM"
42109\uFD66 "ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM"
42110\uFD67 "ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM"
42111\uFD68 "ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM"
42112\uFD69 "ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM"
42113\uFD6A "ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM"
42114\uFD6B "ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM"
42115\uFD6C "ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM"
42116\uFD6D "ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM"
42117\uFD6E "ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM"
42118\uFD6F "ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM"
42119\uFD70 "ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM"
42120\uFD71 "ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM"
42121\uFD72 "ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM"
42122\uFD73 "ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM"
42123\uFD74 "ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM"
42124\uFD75 "ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM"
42125\uFD76 "ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM"
42126\uFD77 "ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM"
42127\uFD78 "ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM"
42128\uFD79 "ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM"
42129\uFD7A "ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM"
42130\uFD7B "ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM"
42131\uFD7C "ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM"
42132\uFD7D "ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM"
42133\uFD7E "ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM"
42134\uFD7F "ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM"
42135\uFD80 "ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM"
42136\uFD81 "ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM"
42137\uFD82 "ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM"
42138\uFD83 "ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM"
42139\uFD84 "ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM"
42140\uFD85 "ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM"
42141\uFD86 "ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM"
42142\uFD87 "ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM"
42143\uFD88 "ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM"
42144\uFD89 "ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM"
42145\uFD8A "ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM"
42146\uFD8B "ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM"
42147\uFD8C "ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM"
42148\uFD8D "ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM"
42149\uFD8E "ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM"
42150\uFD8F "ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM"
42151\uFD92 "ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM"
42152\uFD93 "ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM"
42153\uFD94 "ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM"
42154\uFD95 "ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM"
42155\uFD96 "ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM"
42156\uFD97 "ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM"
42157\uFD98 "ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM"
42158\uFD99 "ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM"
42159\uFD9A "ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM"
42160\uFD9B "ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM"
42161\uFD9C "ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM"
42162\uFD9D "ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM"
42163\uFD9E "ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM"
42164\uFD9F "ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM"
42165\uFDA0 "ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM"
42166\uFDA1 "ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM"
42167\uFDA2 "ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM"
42168\uFDA3 "ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM"
42169\uFDA4 "ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM"
42170\uFDA5 "ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM"
42171\uFDA6 "ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM"
42172\uFDA7 "ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM"
42173\uFDA8 "ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM"
42174\uFDA9 "ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM"
42175\uFDAA "ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM"
42176\uFDAB "ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM"
42177\uFDAC "ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM"
42178\uFDAD "ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM"
42179\uFDAE "ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM"
42180\uFDAF "ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM"
42181\uFDB0 "ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM"
42182\uFDB1 "ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM"
42183\uFDB2 "ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM"
42184\uFDB3 "ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM"
42185\uFDB4 "ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM"
42186\uFDB5 "ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM"
42187\uFDB6 "ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM"
42188\uFDB7 "ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM"
42189\uFDB8 "ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM"
42190\uFDB9 "ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM"
42191\uFDBA "ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM"
42192\uFDBB "ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM"
42193\uFDBC "ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM"
42194\uFDBD "ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM"
42195\uFDBE "ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM"
42196\uFDBF "ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM"
42197\uFDC0 "ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM"
42198\uFDC1 "ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM"
42199\uFDC2 "ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM"
42200\uFDC3 "ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM"
42201\uFDC4 "ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM"
42202\uFDC5 "ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM"
42203\uFDC6 "ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM"
42204\uFDC7 "ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM"
42205\uFDF0 "ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM"
42206\uFDF1 "ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM"
42207\uFDF2 "ARABIC LIGATURE ALLAH ISOLATED FORM"
42208\uFDF3 "ARABIC LIGATURE AKBAR ISOLATED FORM"
42209\uFDF4 "ARABIC LIGATURE MOHAMMAD ISOLATED FORM"
42210\uFDF5 "ARABIC LIGATURE SALAM ISOLATED FORM"
42211\uFDF6 "ARABIC LIGATURE RASOUL ISOLATED FORM"
42212\uFDF7 "ARABIC LIGATURE ALAYHE ISOLATED FORM"
42213\uFDF8 "ARABIC LIGATURE WASALLAM ISOLATED FORM"
42214\uFDF9 "ARABIC LIGATURE SALLA ISOLATED FORM"
42215\uFDFA "ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM"
42216\uFDFB "ARABIC LIGATURE JALLAJALALOUHOU"
42217\uFDFC "RIAL SIGN"
42218\uFDFD "ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM"
42219\uFE00 "VARIATION SELECTOR-1"
42220\uFE01 "VARIATION SELECTOR-2"
42221\uFE02 "VARIATION SELECTOR-3"
42222\uFE03 "VARIATION SELECTOR-4"
42223\uFE04 "VARIATION SELECTOR-5"
42224\uFE05 "VARIATION SELECTOR-6"
42225\uFE06 "VARIATION SELECTOR-7"
42226\uFE07 "VARIATION SELECTOR-8"
42227\uFE08 "VARIATION SELECTOR-9"
42228\uFE09 "VARIATION SELECTOR-10"
42229\uFE0A "VARIATION SELECTOR-11"
42230\uFE0B "VARIATION SELECTOR-12"
42231\uFE0C "VARIATION SELECTOR-13"
42232\uFE0D "VARIATION SELECTOR-14"
42233\uFE0E "VARIATION SELECTOR-15"
42234\uFE0F "VARIATION SELECTOR-16"
42235\uFE10 "PRESENTATION FORM FOR VERTICAL COMMA"
42236\uFE11 "PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA"
42237\uFE12 "PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP"
42238\uFE13 "PRESENTATION FORM FOR VERTICAL COLON"
42239\uFE14 "PRESENTATION FORM FOR VERTICAL SEMICOLON"
42240\uFE15 "PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK"
42241\uFE16 "PRESENTATION FORM FOR VERTICAL QUESTION MARK"
42242\uFE17 "PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET"
42243\uFE18 "PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET"
42244\uFE19 "PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS"
42245\uFE20 "COMBINING LIGATURE LEFT HALF"
42246\uFE21 "COMBINING LIGATURE RIGHT HALF"
42247\uFE22 "COMBINING DOUBLE TILDE LEFT HALF"
42248\uFE23 "COMBINING DOUBLE TILDE RIGHT HALF"
42249\uFE24 "COMBINING MACRON LEFT HALF"
42250\uFE25 "COMBINING MACRON RIGHT HALF"
42251\uFE26 "COMBINING CONJOINING MACRON"
42252\uFE30 "PRESENTATION FORM FOR VERTICAL TWO DOT LEADER"
42253\uFE31 "PRESENTATION FORM FOR VERTICAL EM DASH"
42254\uFE32 "PRESENTATION FORM FOR VERTICAL EN DASH"
42255\uFE33 "PRESENTATION FORM FOR VERTICAL LOW LINE"
42256\uFE34 "PRESENTATION FORM FOR VERTICAL WAVY LOW LINE"
42257\uFE35 "PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS"
42258\uFE36 "PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS"
42259\uFE37 "PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET"
42260\uFE38 "PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET"
42261\uFE39 "PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET"
42262\uFE3A "PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET"
42263\uFE3B "PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET"
42264\uFE3C "PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET"
42265\uFE3D "PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET"
42266\uFE3E "PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET"
42267\uFE3F "PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET"
42268\uFE40 "PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET"
42269\uFE41 "PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET"
42270\uFE42 "PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET"
42271\uFE43 "PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET"
42272\uFE44 "PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET"
42273\uFE45 "SESAME DOT"
42274\uFE46 "WHITE SESAME DOT"
42275\uFE47 "PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET"
42276\uFE48 "PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET"
42277\uFE49 "DASHED OVERLINE"
42278\uFE4A "CENTRELINE OVERLINE"
42279\uFE4B "WAVY OVERLINE"
42280\uFE4C "DOUBLE WAVY OVERLINE"
42281\uFE4D "DASHED LOW LINE"
42282\uFE4E "CENTRELINE LOW LINE"
42283\uFE4F "WAVY LOW LINE"
42284\uFE50 "SMALL COMMA"
42285\uFE51 "SMALL IDEOGRAPHIC COMMA"
42286\uFE52 "SMALL FULL STOP"
42287\uFE54 "SMALL SEMICOLON"
42288\uFE55 "SMALL COLON"
42289\uFE56 "SMALL QUESTION MARK"
42290\uFE57 "SMALL EXCLAMATION MARK"
42291\uFE58 "SMALL EM DASH"
42292\uFE59 "SMALL LEFT PARENTHESIS"
42293\uFE5A "SMALL RIGHT PARENTHESIS"
42294\uFE5B "SMALL LEFT CURLY BRACKET"
42295\uFE5C "SMALL RIGHT CURLY BRACKET"
42296\uFE5D "SMALL LEFT TORTOISE SHELL BRACKET"
42297\uFE5E "SMALL RIGHT TORTOISE SHELL BRACKET"
42298\uFE5F "SMALL NUMBER SIGN"
42299\uFE60 "SMALL AMPERSAND"
42300\uFE61 "SMALL ASTERISK"
42301\uFE62 "SMALL PLUS SIGN"
42302\uFE63 "SMALL HYPHEN-MINUS"
42303\uFE64 "SMALL LESS-THAN SIGN"
42304\uFE65 "SMALL GREATER-THAN SIGN"
42305\uFE66 "SMALL EQUALS SIGN"
42306\uFE68 "SMALL REVERSE SOLIDUS"
42307\uFE69 "SMALL DOLLAR SIGN"
42308\uFE6A "SMALL PERCENT SIGN"
42309\uFE6B "SMALL COMMERCIAL AT"
42310\uFE70 "ARABIC FATHATAN ISOLATED FORM"
42311\uFE71 "ARABIC TATWEEL WITH FATHATAN ABOVE"
42312\uFE72 "ARABIC DAMMATAN ISOLATED FORM"
42313\uFE73 "ARABIC TAIL FRAGMENT"
42314\uFE74 "ARABIC KASRATAN ISOLATED FORM"
42315\uFE76 "ARABIC FATHA ISOLATED FORM"
42316\uFE77 "ARABIC FATHA MEDIAL FORM"
42317\uFE78 "ARABIC DAMMA ISOLATED FORM"
42318\uFE79 "ARABIC DAMMA MEDIAL FORM"
42319\uFE7A "ARABIC KASRA ISOLATED FORM"
42320\uFE7B "ARABIC KASRA MEDIAL FORM"
42321\uFE7C "ARABIC SHADDA ISOLATED FORM"
42322\uFE7D "ARABIC SHADDA MEDIAL FORM"
42323\uFE7E "ARABIC SUKUN ISOLATED FORM"
42324\uFE7F "ARABIC SUKUN MEDIAL FORM"
42325\uFE80 "ARABIC LETTER HAMZA ISOLATED FORM"
42326\uFE81 "ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM"
42327\uFE82 "ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM"
42328\uFE83 "ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM"
42329\uFE84 "ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM"
42330\uFE85 "ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM"
42331\uFE86 "ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM"
42332\uFE87 "ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM"
42333\uFE88 "ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM"
42334\uFE89 "ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM"
42335\uFE8A "ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM"
42336\uFE8B "ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM"
42337\uFE8C "ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM"
42338\uFE8D "ARABIC LETTER ALEF ISOLATED FORM"
42339\uFE8E "ARABIC LETTER ALEF FINAL FORM"
42340\uFE8F "ARABIC LETTER BEH ISOLATED FORM"
42341\uFE90 "ARABIC LETTER BEH FINAL FORM"
42342\uFE91 "ARABIC LETTER BEH INITIAL FORM"
42343\uFE92 "ARABIC LETTER BEH MEDIAL FORM"
42344\uFE93 "ARABIC LETTER TEH MARBUTA ISOLATED FORM"
42345\uFE94 "ARABIC LETTER TEH MARBUTA FINAL FORM"
42346\uFE95 "ARABIC LETTER TEH ISOLATED FORM"
42347\uFE96 "ARABIC LETTER TEH FINAL FORM"
42348\uFE97 "ARABIC LETTER TEH INITIAL FORM"
42349\uFE98 "ARABIC LETTER TEH MEDIAL FORM"
42350\uFE99 "ARABIC LETTER THEH ISOLATED FORM"
42351\uFE9A "ARABIC LETTER THEH FINAL FORM"
42352\uFE9B "ARABIC LETTER THEH INITIAL FORM"
42353\uFE9C "ARABIC LETTER THEH MEDIAL FORM"
42354\uFE9D "ARABIC LETTER JEEM ISOLATED FORM"
42355\uFE9E "ARABIC LETTER JEEM FINAL FORM"
42356\uFE9F "ARABIC LETTER JEEM INITIAL FORM"
42357\uFEA0 "ARABIC LETTER JEEM MEDIAL FORM"
42358\uFEA1 "ARABIC LETTER HAH ISOLATED FORM"
42359\uFEA2 "ARABIC LETTER HAH FINAL FORM"
42360\uFEA3 "ARABIC LETTER HAH INITIAL FORM"
42361\uFEA4 "ARABIC LETTER HAH MEDIAL FORM"
42362\uFEA5 "ARABIC LETTER KHAH ISOLATED FORM"
42363\uFEA6 "ARABIC LETTER KHAH FINAL FORM"
42364\uFEA7 "ARABIC LETTER KHAH INITIAL FORM"
42365\uFEA8 "ARABIC LETTER KHAH MEDIAL FORM"
42366\uFEA9 "ARABIC LETTER DAL ISOLATED FORM"
42367\uFEAA "ARABIC LETTER DAL FINAL FORM"
42368\uFEAB "ARABIC LETTER THAL ISOLATED FORM"
42369\uFEAC "ARABIC LETTER THAL FINAL FORM"
42370\uFEAD "ARABIC LETTER REH ISOLATED FORM"
42371\uFEAE "ARABIC LETTER REH FINAL FORM"
42372\uFEAF "ARABIC LETTER ZAIN ISOLATED FORM"
42373\uFEB0 "ARABIC LETTER ZAIN FINAL FORM"
42374\uFEB1 "ARABIC LETTER SEEN ISOLATED FORM"
42375\uFEB2 "ARABIC LETTER SEEN FINAL FORM"
42376\uFEB3 "ARABIC LETTER SEEN INITIAL FORM"
42377\uFEB4 "ARABIC LETTER SEEN MEDIAL FORM"
42378\uFEB5 "ARABIC LETTER SHEEN ISOLATED FORM"
42379\uFEB6 "ARABIC LETTER SHEEN FINAL FORM"
42380\uFEB7 "ARABIC LETTER SHEEN INITIAL FORM"
42381\uFEB8 "ARABIC LETTER SHEEN MEDIAL FORM"
42382\uFEB9 "ARABIC LETTER SAD ISOLATED FORM"
42383\uFEBA "ARABIC LETTER SAD FINAL FORM"
42384\uFEBB "ARABIC LETTER SAD INITIAL FORM"
42385\uFEBC "ARABIC LETTER SAD MEDIAL FORM"
42386\uFEBD "ARABIC LETTER DAD ISOLATED FORM"
42387\uFEBE "ARABIC LETTER DAD FINAL FORM"
42388\uFEBF "ARABIC LETTER DAD INITIAL FORM"
42389\uFEC0 "ARABIC LETTER DAD MEDIAL FORM"
42390\uFEC1 "ARABIC LETTER TAH ISOLATED FORM"
42391\uFEC2 "ARABIC LETTER TAH FINAL FORM"
42392\uFEC3 "ARABIC LETTER TAH INITIAL FORM"
42393\uFEC4 "ARABIC LETTER TAH MEDIAL FORM"
42394\uFEC5 "ARABIC LETTER ZAH ISOLATED FORM"
42395\uFEC6 "ARABIC LETTER ZAH FINAL FORM"
42396\uFEC7 "ARABIC LETTER ZAH INITIAL FORM"
42397\uFEC8 "ARABIC LETTER ZAH MEDIAL FORM"
42398\uFEC9 "ARABIC LETTER AIN ISOLATED FORM"
42399\uFECA "ARABIC LETTER AIN FINAL FORM"
42400\uFECB "ARABIC LETTER AIN INITIAL FORM"
42401\uFECC "ARABIC LETTER AIN MEDIAL FORM"
42402\uFECD "ARABIC LETTER GHAIN ISOLATED FORM"
42403\uFECE "ARABIC LETTER GHAIN FINAL FORM"
42404\uFECF "ARABIC LETTER GHAIN INITIAL FORM"
42405\uFED0 "ARABIC LETTER GHAIN MEDIAL FORM"
42406\uFED1 "ARABIC LETTER FEH ISOLATED FORM"
42407\uFED2 "ARABIC LETTER FEH FINAL FORM"
42408\uFED3 "ARABIC LETTER FEH INITIAL FORM"
42409\uFED4 "ARABIC LETTER FEH MEDIAL FORM"
42410\uFED5 "ARABIC LETTER QAF ISOLATED FORM"
42411\uFED6 "ARABIC LETTER QAF FINAL FORM"
42412\uFED7 "ARABIC LETTER QAF INITIAL FORM"
42413\uFED8 "ARABIC LETTER QAF MEDIAL FORM"
42414\uFED9 "ARABIC LETTER KAF ISOLATED FORM"
42415\uFEDA "ARABIC LETTER KAF FINAL FORM"
42416\uFEDB "ARABIC LETTER KAF INITIAL FORM"
42417\uFEDC "ARABIC LETTER KAF MEDIAL FORM"
42418\uFEDD "ARABIC LETTER LAM ISOLATED FORM"
42419\uFEDE "ARABIC LETTER LAM FINAL FORM"
42420\uFEDF "ARABIC LETTER LAM INITIAL FORM"
42421\uFEE0 "ARABIC LETTER LAM MEDIAL FORM"
42422\uFEE1 "ARABIC LETTER MEEM ISOLATED FORM"
42423\uFEE2 "ARABIC LETTER MEEM FINAL FORM"
42424\uFEE3 "ARABIC LETTER MEEM INITIAL FORM"
42425\uFEE4 "ARABIC LETTER MEEM MEDIAL FORM"
42426\uFEE5 "ARABIC LETTER NOON ISOLATED FORM"
42427\uFEE6 "ARABIC LETTER NOON FINAL FORM"
42428\uFEE7 "ARABIC LETTER NOON INITIAL FORM"
42429\uFEE8 "ARABIC LETTER NOON MEDIAL FORM"
42430\uFEE9 "ARABIC LETTER HEH ISOLATED FORM"
42431\uFEEA "ARABIC LETTER HEH FINAL FORM"
42432\uFEEB "ARABIC LETTER HEH INITIAL FORM"
42433\uFEEC "ARABIC LETTER HEH MEDIAL FORM"
42434\uFEED "ARABIC LETTER WAW ISOLATED FORM"
42435\uFEEE "ARABIC LETTER WAW FINAL FORM"
42436\uFEEF "ARABIC LETTER ALEF MAKSURA ISOLATED FORM"
42437\uFEF0 "ARABIC LETTER ALEF MAKSURA FINAL FORM"
42438\uFEF1 "ARABIC LETTER YEH ISOLATED FORM"
42439\uFEF2 "ARABIC LETTER YEH FINAL FORM"
42440\uFEF3 "ARABIC LETTER YEH INITIAL FORM"
42441\uFEF4 "ARABIC LETTER YEH MEDIAL FORM"
42442\uFEF5 "ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM"
42443\uFEF6 "ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM"
42444\uFEF7 "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM"
42445\uFEF8 "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM"
42446\uFEF9 "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM"
42447\uFEFA "ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM"
42448\uFEFB "ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM"
42449\uFEFC "ARABIC LIGATURE LAM WITH ALEF FINAL FORM"
42450\uFEFF "ZERO WIDTH NO-BREAK SPACE"
42451\uFF01 "FULLWIDTH EXCLAMATION MARK"
42452\uFF02 "FULLWIDTH QUOTATION MARK"
42453\uFF03 "FULLWIDTH NUMBER SIGN"
42454\uFF04 "FULLWIDTH DOLLAR SIGN"
42455\uFF05 "FULLWIDTH PERCENT SIGN"
42456\uFF06 "FULLWIDTH AMPERSAND"
42457\uFF07 "FULLWIDTH APOSTROPHE"
42458\uFF08 "FULLWIDTH LEFT PARENTHESIS"
42459\uFF09 "FULLWIDTH RIGHT PARENTHESIS"
42460\uFF0A "FULLWIDTH ASTERISK"
42461\uFF0B "FULLWIDTH PLUS SIGN"
42462\uFF0C "FULLWIDTH COMMA"
42463\uFF0D "FULLWIDTH HYPHEN-MINUS"
42464\uFF0E "FULLWIDTH FULL STOP"
42465\uFF0F "FULLWIDTH SOLIDUS"
42466\uFF10 "FULLWIDTH DIGIT ZERO"
42467\uFF11 "FULLWIDTH DIGIT ONE"
42468\uFF12 "FULLWIDTH DIGIT TWO"
42469\uFF13 "FULLWIDTH DIGIT THREE"
42470\uFF14 "FULLWIDTH DIGIT FOUR"
42471\uFF15 "FULLWIDTH DIGIT FIVE"
42472\uFF16 "FULLWIDTH DIGIT SIX"
42473\uFF17 "FULLWIDTH DIGIT SEVEN"
42474\uFF18 "FULLWIDTH DIGIT EIGHT"
42475\uFF19 "FULLWIDTH DIGIT NINE"
42476\uFF1A "FULLWIDTH COLON"
42477\uFF1B "FULLWIDTH SEMICOLON"
42478\uFF1C "FULLWIDTH LESS-THAN SIGN"
42479\uFF1D "FULLWIDTH EQUALS SIGN"
42480\uFF1E "FULLWIDTH GREATER-THAN SIGN"
42481\uFF1F "FULLWIDTH QUESTION MARK"
42482\uFF20 "FULLWIDTH COMMERCIAL AT"
42483\uFF21 "FULLWIDTH LATIN CAPITAL LETTER A"
42484\uFF22 "FULLWIDTH LATIN CAPITAL LETTER B"
42485\uFF23 "FULLWIDTH LATIN CAPITAL LETTER C"
42486\uFF24 "FULLWIDTH LATIN CAPITAL LETTER D"
42487\uFF25 "FULLWIDTH LATIN CAPITAL LETTER E"
42488\uFF26 "FULLWIDTH LATIN CAPITAL LETTER F"
42489\uFF27 "FULLWIDTH LATIN CAPITAL LETTER G"
42490\uFF28 "FULLWIDTH LATIN CAPITAL LETTER H"
42491\uFF29 "FULLWIDTH LATIN CAPITAL LETTER I"
42492\uFF2A "FULLWIDTH LATIN CAPITAL LETTER J"
42493\uFF2B "FULLWIDTH LATIN CAPITAL LETTER K"
42494\uFF2C "FULLWIDTH LATIN CAPITAL LETTER L"
42495\uFF2D "FULLWIDTH LATIN CAPITAL LETTER M"
42496\uFF2E "FULLWIDTH LATIN CAPITAL LETTER N"
42497\uFF2F "FULLWIDTH LATIN CAPITAL LETTER O"
42498\uFF30 "FULLWIDTH LATIN CAPITAL LETTER P"
42499\uFF31 "FULLWIDTH LATIN CAPITAL LETTER Q"
42500\uFF32 "FULLWIDTH LATIN CAPITAL LETTER R"
42501\uFF33 "FULLWIDTH LATIN CAPITAL LETTER S"
42502\uFF34 "FULLWIDTH LATIN CAPITAL LETTER T"
42503\uFF35 "FULLWIDTH LATIN CAPITAL LETTER U"
42504\uFF36 "FULLWIDTH LATIN CAPITAL LETTER V"
42505\uFF37 "FULLWIDTH LATIN CAPITAL LETTER W"
42506\uFF38 "FULLWIDTH LATIN CAPITAL LETTER X"
42507\uFF39 "FULLWIDTH LATIN CAPITAL LETTER Y"
42508\uFF3A "FULLWIDTH LATIN CAPITAL LETTER Z"
42509\uFF3B "FULLWIDTH LEFT SQUARE BRACKET"
42510\uFF3C "FULLWIDTH REVERSE SOLIDUS"
42511\uFF3D "FULLWIDTH RIGHT SQUARE BRACKET"
42512\uFF3E "FULLWIDTH CIRCUMFLEX ACCENT"
42513\uFF3F "FULLWIDTH LOW LINE"
42514\uFF40 "FULLWIDTH GRAVE ACCENT"
42515\uFF41 "FULLWIDTH LATIN SMALL LETTER A"
42516\uFF42 "FULLWIDTH LATIN SMALL LETTER B"
42517\uFF43 "FULLWIDTH LATIN SMALL LETTER C"
42518\uFF44 "FULLWIDTH LATIN SMALL LETTER D"
42519\uFF45 "FULLWIDTH LATIN SMALL LETTER E"
42520\uFF46 "FULLWIDTH LATIN SMALL LETTER F"
42521\uFF47 "FULLWIDTH LATIN SMALL LETTER G"
42522\uFF48 "FULLWIDTH LATIN SMALL LETTER H"
42523\uFF49 "FULLWIDTH LATIN SMALL LETTER I"
42524\uFF4A "FULLWIDTH LATIN SMALL LETTER J"
42525\uFF4B "FULLWIDTH LATIN SMALL LETTER K"
42526\uFF4C "FULLWIDTH LATIN SMALL LETTER L"
42527\uFF4D "FULLWIDTH LATIN SMALL LETTER M"
42528\uFF4E "FULLWIDTH LATIN SMALL LETTER N"
42529\uFF4F "FULLWIDTH LATIN SMALL LETTER O"
42530\uFF50 "FULLWIDTH LATIN SMALL LETTER P"
42531\uFF51 "FULLWIDTH LATIN SMALL LETTER Q"
42532\uFF52 "FULLWIDTH LATIN SMALL LETTER R"
42533\uFF53 "FULLWIDTH LATIN SMALL LETTER S"
42534\uFF54 "FULLWIDTH LATIN SMALL LETTER T"
42535\uFF55 "FULLWIDTH LATIN SMALL LETTER U"
42536\uFF56 "FULLWIDTH LATIN SMALL LETTER V"
42537\uFF57 "FULLWIDTH LATIN SMALL LETTER W"
42538\uFF58 "FULLWIDTH LATIN SMALL LETTER X"
42539\uFF59 "FULLWIDTH LATIN SMALL LETTER Y"
42540\uFF5A "FULLWIDTH LATIN SMALL LETTER Z"
42541\uFF5B "FULLWIDTH LEFT CURLY BRACKET"
42542\uFF5C "FULLWIDTH VERTICAL LINE"
42543\uFF5D "FULLWIDTH RIGHT CURLY BRACKET"
42544\uFF5E "FULLWIDTH TILDE"
42545\uFF5F "FULLWIDTH LEFT WHITE PARENTHESIS"
42546\uFF60 "FULLWIDTH RIGHT WHITE PARENTHESIS"
42547\uFF61 "HALFWIDTH IDEOGRAPHIC FULL STOP"
42548\uFF62 "HALFWIDTH LEFT CORNER BRACKET"
42549\uFF63 "HALFWIDTH RIGHT CORNER BRACKET"
42550\uFF64 "HALFWIDTH IDEOGRAPHIC COMMA"
42551\uFF65 "HALFWIDTH KATAKANA MIDDLE DOT"
42552\uFF66 "HALFWIDTH KATAKANA LETTER WO"
42553\uFF67 "HALFWIDTH KATAKANA LETTER SMALL A"
42554\uFF68 "HALFWIDTH KATAKANA LETTER SMALL I"
42555\uFF69 "HALFWIDTH KATAKANA LETTER SMALL U"
42556\uFF6A "HALFWIDTH KATAKANA LETTER SMALL E"
42557\uFF6B "HALFWIDTH KATAKANA LETTER SMALL O"
42558\uFF6C "HALFWIDTH KATAKANA LETTER SMALL YA"
42559\uFF6D "HALFWIDTH KATAKANA LETTER SMALL YU"
42560\uFF6E "HALFWIDTH KATAKANA LETTER SMALL YO"
42561\uFF6F "HALFWIDTH KATAKANA LETTER SMALL TU"
42562\uFF70 "HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK"
42563\uFF71 "HALFWIDTH KATAKANA LETTER A"
42564\uFF72 "HALFWIDTH KATAKANA LETTER I"
42565\uFF73 "HALFWIDTH KATAKANA LETTER U"
42566\uFF74 "HALFWIDTH KATAKANA LETTER E"
42567\uFF75 "HALFWIDTH KATAKANA LETTER O"
42568\uFF76 "HALFWIDTH KATAKANA LETTER KA"
42569\uFF77 "HALFWIDTH KATAKANA LETTER KI"
42570\uFF78 "HALFWIDTH KATAKANA LETTER KU"
42571\uFF79 "HALFWIDTH KATAKANA LETTER KE"
42572\uFF7A "HALFWIDTH KATAKANA LETTER KO"
42573\uFF7B "HALFWIDTH KATAKANA LETTER SA"
42574\uFF7C "HALFWIDTH KATAKANA LETTER SI"
42575\uFF7D "HALFWIDTH KATAKANA LETTER SU"
42576\uFF7E "HALFWIDTH KATAKANA LETTER SE"
42577\uFF7F "HALFWIDTH KATAKANA LETTER SO"
42578\uFF80 "HALFWIDTH KATAKANA LETTER TA"
42579\uFF81 "HALFWIDTH KATAKANA LETTER TI"
42580\uFF82 "HALFWIDTH KATAKANA LETTER TU"
42581\uFF83 "HALFWIDTH KATAKANA LETTER TE"
42582\uFF84 "HALFWIDTH KATAKANA LETTER TO"
42583\uFF85 "HALFWIDTH KATAKANA LETTER NA"
42584\uFF86 "HALFWIDTH KATAKANA LETTER NI"
42585\uFF87 "HALFWIDTH KATAKANA LETTER NU"
42586\uFF88 "HALFWIDTH KATAKANA LETTER NE"
42587\uFF89 "HALFWIDTH KATAKANA LETTER NO"
42588\uFF8A "HALFWIDTH KATAKANA LETTER HA"
42589\uFF8B "HALFWIDTH KATAKANA LETTER HI"
42590\uFF8C "HALFWIDTH KATAKANA LETTER HU"
42591\uFF8D "HALFWIDTH KATAKANA LETTER HE"
42592\uFF8E "HALFWIDTH KATAKANA LETTER HO"
42593\uFF8F "HALFWIDTH KATAKANA LETTER MA"
42594\uFF90 "HALFWIDTH KATAKANA LETTER MI"
42595\uFF91 "HALFWIDTH KATAKANA LETTER MU"
42596\uFF92 "HALFWIDTH KATAKANA LETTER ME"
42597\uFF93 "HALFWIDTH KATAKANA LETTER MO"
42598\uFF94 "HALFWIDTH KATAKANA LETTER YA"
42599\uFF95 "HALFWIDTH KATAKANA LETTER YU"
42600\uFF96 "HALFWIDTH KATAKANA LETTER YO"
42601\uFF97 "HALFWIDTH KATAKANA LETTER RA"
42602\uFF98 "HALFWIDTH KATAKANA LETTER RI"
42603\uFF99 "HALFWIDTH KATAKANA LETTER RU"
42604\uFF9A "HALFWIDTH KATAKANA LETTER RE"
42605\uFF9B "HALFWIDTH KATAKANA LETTER RO"
42606\uFF9C "HALFWIDTH KATAKANA LETTER WA"
42607\uFF9D "HALFWIDTH KATAKANA LETTER N"
42608\uFF9E "HALFWIDTH KATAKANA VOICED SOUND MARK"
42609\uFF9F "HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK"
42610\uFFA0 "HALFWIDTH HANGUL FILLER"
42611\uFFA1 "HALFWIDTH HANGUL LETTER KIYEOK"
42612\uFFA2 "HALFWIDTH HANGUL LETTER SSANGKIYEOK"
42613\uFFA3 "HALFWIDTH HANGUL LETTER KIYEOK-SIOS"
42614\uFFA4 "HALFWIDTH HANGUL LETTER NIEUN"
42615\uFFA5 "HALFWIDTH HANGUL LETTER NIEUN-CIEUC"
42616\uFFA6 "HALFWIDTH HANGUL LETTER NIEUN-HIEUH"
42617\uFFA7 "HALFWIDTH HANGUL LETTER TIKEUT"
42618\uFFA8 "HALFWIDTH HANGUL LETTER SSANGTIKEUT"
42619\uFFA9 "HALFWIDTH HANGUL LETTER RIEUL"
42620\uFFAA "HALFWIDTH HANGUL LETTER RIEUL-KIYEOK"
42621\uFFAB "HALFWIDTH HANGUL LETTER RIEUL-MIEUM"
42622\uFFAC "HALFWIDTH HANGUL LETTER RIEUL-PIEUP"
42623\uFFAD "HALFWIDTH HANGUL LETTER RIEUL-SIOS"
42624\uFFAE "HALFWIDTH HANGUL LETTER RIEUL-THIEUTH"
42625\uFFAF "HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH"
42626\uFFB0 "HALFWIDTH HANGUL LETTER RIEUL-HIEUH"
42627\uFFB1 "HALFWIDTH HANGUL LETTER MIEUM"
42628\uFFB2 "HALFWIDTH HANGUL LETTER PIEUP"
42629\uFFB3 "HALFWIDTH HANGUL LETTER SSANGPIEUP"
42630\uFFB4 "HALFWIDTH HANGUL LETTER PIEUP-SIOS"
42631\uFFB5 "HALFWIDTH HANGUL LETTER SIOS"
42632\uFFB6 "HALFWIDTH HANGUL LETTER SSANGSIOS"
42633\uFFB7 "HALFWIDTH HANGUL LETTER IEUNG"
42634\uFFB8 "HALFWIDTH HANGUL LETTER CIEUC"
42635\uFFB9 "HALFWIDTH HANGUL LETTER SSANGCIEUC"
42636\uFFBA "HALFWIDTH HANGUL LETTER CHIEUCH"
42637\uFFBB "HALFWIDTH HANGUL LETTER KHIEUKH"
42638\uFFBC "HALFWIDTH HANGUL LETTER THIEUTH"
42639\uFFBD "HALFWIDTH HANGUL LETTER PHIEUPH"
42640\uFFBE "HALFWIDTH HANGUL LETTER HIEUH"
42641\uFFC2 "HALFWIDTH HANGUL LETTER A"
42642\uFFC3 "HALFWIDTH HANGUL LETTER AE"
42643\uFFC4 "HALFWIDTH HANGUL LETTER YA"
42644\uFFC5 "HALFWIDTH HANGUL LETTER YAE"
42645\uFFC6 "HALFWIDTH HANGUL LETTER EO"
42646\uFFC7 "HALFWIDTH HANGUL LETTER E"
42647\uFFCA "HALFWIDTH HANGUL LETTER YEO"
42648\uFFCB "HALFWIDTH HANGUL LETTER YE"
42649\uFFCC "HALFWIDTH HANGUL LETTER O"
42650\uFFCD "HALFWIDTH HANGUL LETTER WA"
42651\uFFCE "HALFWIDTH HANGUL LETTER WAE"
42652\uFFCF "HALFWIDTH HANGUL LETTER OE"
42653\uFFD2 "HALFWIDTH HANGUL LETTER YO"
42654\uFFD3 "HALFWIDTH HANGUL LETTER U"
42655\uFFD4 "HALFWIDTH HANGUL LETTER WEO"
42656\uFFD5 "HALFWIDTH HANGUL LETTER WE"
42657\uFFD6 "HALFWIDTH HANGUL LETTER WI"
42658\uFFD7 "HALFWIDTH HANGUL LETTER YU"
42659\uFFDA "HALFWIDTH HANGUL LETTER EU"
42660\uFFDB "HALFWIDTH HANGUL LETTER YI"
42661\uFFDC "HALFWIDTH HANGUL LETTER I"
42662\uFFE0 "FULLWIDTH CENT SIGN"
42663\uFFE1 "FULLWIDTH POUND SIGN"
42664\uFFE2 "FULLWIDTH NOT SIGN"
42665\uFFE3 "FULLWIDTH MACRON"
42666\uFFE4 "FULLWIDTH BROKEN BAR"
42667\uFFE5 "FULLWIDTH YEN SIGN"
42668\uFFE6 "FULLWIDTH WON SIGN"
42669\uFFE8 "HALFWIDTH FORMS LIGHT VERTICAL"
42670\uFFE9 "HALFWIDTH LEFTWARDS ARROW"
42671\uFFEA "HALFWIDTH UPWARDS ARROW"
42672\uFFEB "HALFWIDTH RIGHTWARDS ARROW"
42673\uFFEC "HALFWIDTH DOWNWARDS ARROW"
42674\uFFED "HALFWIDTH BLACK SQUARE"
42675\uFFEE "HALFWIDTH WHITE CIRCLE"
42676\uFFF9 "INTERLINEAR ANNOTATION ANCHOR"
42677\uFFFA "INTERLINEAR ANNOTATION SEPARATOR"
42678\uFFFB "INTERLINEAR ANNOTATION TERMINATOR"
42679\uFFFC "OBJECT REPLACEMENT CHARACTER"
42680\uFFFD "REPLACEMENT CHARACTER"
42681};
42682
42683if {$CommandLineProgram != ""} {set program $CommandLineProgram}
42684if {[SelectProgram $program] != 1} {
42685    update;
42686    after 5000; #Give the user a chance to see the message
42687    SelectProgram tcl
42688}
42689
42690if {[string equal $CommandLineUserClassFile ""] == 0} {
42691    ReadUserClasses $CommandLineUserClassFile;
42692}
42693if {$InitialTestInputDataFile != ""} {
42694    LoadTestInputData $InitialTestInputDataFile;
42695    if {$PipeP} {ShowMessage [_ "You can't read test data from a pipe and from a file."]}
42696}
42697if {$PipeP} {LoadTestInputData}
42698bind $::IND <<B3>> {ShowCode %W %x %y}
42699bind $::OUT <<B3>> {ShowCode %W %x %y}
42700bind $::COM <<B3>> {ShowCode %W %x %y}
42701focus -force $::REG;
42702FlushJournal;
42703