Jim Tcl
Check-in [c9b57c7b2b]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:expr: Fix compiler warning on older gcc

jim/jim.c: In function ‘SetExprFromAny’: jim/jim.c:9109:16: error: ‘top’ may be used uninitialized in this function [-Werror=maybe-uninitialized] expr->expr = top; ^ jim/jim.c:9075:25: note: ‘top’ was declared here struct JimExprNode *top;

Signed-off-by: Steve Bennett <steveb@workware.net.au>

Timelines: family | descendants | trunk
Files: files | file ages | folders
SHA1: c9b57c7b2ba62a2d919fe73da1c1405d46d98459
User & Date: steveb@workware.net.au 2018-07-05 03:02:42
Context
2018-07-08
00:42
aio: Always set error message on I/O error

Some operations that failed (such as read) would leave an empty error result.

Signed-off-by: Steve Bennett <steveb@workware.net.au> check-in: 35cbeebf78 user: steveb@workware.net.au tags: trunk

2018-07-05
03:02
expr: Fix compiler warning on older gcc

jim/jim.c: In function ‘SetExprFromAny’: jim/jim.c:9109:16: error: ‘top’ may be used uninitialized in this function [-Werror=maybe-uninitialized] expr->expr = top; ^ jim/jim.c:9075:25: note: ‘top’ was declared here struct JimExprNode *top;

Signed-off-by: Steve Bennett <steveb@workware.net.au> check-in: c9b57c7b2b user: steveb@workware.net.au tags: trunk

Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace

Added .gitignore.

            1  +config.log
            2  +tags
            3  +/Makefile
            4  +Tcl.html
            5  +jimautoconf.h
            6  +jimautoconfext.h
            7  +jim-config.h
            8  +_*.c
            9  +jim-stdlib.c
           10  +jim-tclcompat.c
           11  +jim-tree.c
           12  +jim-oo.c
           13  +jimsh
           14  +*.exe
           15  +libjim.a
           16  +*.so.*
           17  +*.dll
           18  +*.o
           19  +configure.gnu
           20  +jimsh0
           21  +build-jim-ext

Added .indent.pro.

            1  +-ncs
            2  +-npcs
            3  +-nut
            4  +-bad
            5  +-bap
            6  +-bbb
            7  +-nbc
            8  +-nlp
            9  +-ci4
           10  +-br
           11  +-ncdb
           12  +-nce
           13  +-cli4
           14  +-d0
           15  +-di1
           16  +-nfc1
           17  +-i4
           18  +-l100
           19  +-npsl
           20  +-TJim_Stack
           21  +-TJim_HashEntry
           22  +-TJim_HashTableType
           23  +-TJim_HashTable
           24  +-TJim_HashTableIterator
           25  +-TJim_Obj
           26  +-TJim_ObjType
           27  +-TJim_CallFrame
           28  +-TJim_Var
           29  +-TJim_Cmd
           30  +-TJim_PrngState
           31  +-TJim_Interp
           32  +-TJim_Reference
           33  +-TParseToken
           34  +-TParseTokenList

Added .project.

            1  +<?xml version="1.0" encoding="UTF-8"?>
            2  +<projectDescription>
            3  +	<name>jim</name>
            4  +	<comment></comment>
            5  +	<projects>
            6  +	</projects>
            7  +	<buildSpec>
            8  +	</buildSpec>
            9  +	<natures>
           10  +	</natures>
           11  +</projectDescription>

Added .travis.yml.

            1  +language: c
            2  +sudo: false
            3  +addons:
            4  +  apt:
            5  +    packages:
            6  +      - libsqlite3-dev
            7  +before_script:
            8  +  - ./configure --full --with-ext="sqlite3 zlib" --disable-docs
            9  +script:
           10  +  - make test

Added AUTHORS.

            1  +Salvatore Sanfilippo <antirez@invece.org>
            2  +
            3  +with the help (patches, bug reports, ideas, extensions) of:
            4  +
            5  +Pat Thoyts
            6  +Clemens Hintze
            7  +
            8  +See also the ChangeLog and README files for other credits.
            9  +
           10  +DESIGN CREDITS:
           11  +
           12  +some of the idea inside Jim are the fruit of long discussions
           13  +inside the Tclers chat room. The feedback of the Tcl
           14  +comunity in general, and of the members of the Tcl Core Team, was
           15  +very important to avoid mistakes: I used the great experience of
           16  +this people as a test for some of the ideas I put into Jim.
           17  +Bad ideas tend to be demolished in no time by good engineers.
           18  +
           19  +Also the following ideas are due to the following authors:
           20  +
           21  +- Jim locals were originally proposed by Miguel Sofer, I (SS) added
           22  +  the feature that make they similar to lexical scoped closures
           23  +  using capturing of the local variables value if no explicit
           24  +  intialization is provided.
           25  +
           26  +- The [lmap] command is my (SS) design, but I incorporated inside the
           27  +  command an interesting idea of Donal K. Fellows that proposed that
           28  +  the [continue] command may be used to skip the accumulation of the
           29  +  current-iteartion result, providing in one command the power of
           30  +  [map] and [filter] together.
           31  +
           32  +
           33  +ChangeLog committers to be identified. Tentative list:
           34  +
           35  +antirez - Salvatore Sanfilippo <antirez@gmail.com>
           36  +patthoyts - Pat Thoyts <patthoyts@users.sf.net>
           37  +oharboe - Øyvind Harboe - soyvind.harboe@zylin.com
           38  +Andrew Lunn <andrew@lunn.ch>
           39  +Duane Ellis <openocd@duaneellis.com>
           40  +Uwe Klein <uklein@klein-messgeraete.de>
           41  +Clemens Hintze ml-jim@qiao.in-berlin.de aka chi

Added BUGS.

            1  +Known bugs
            2  +==========
            3  +
            4  +None!

Added DEVELOPING.

            1  +Working on Jim
            2  +==============
            3  +
            4  +Jim's sources are kept in Git Version Control System. Global repository of
            5  +Jim project is placed on this Web site:
            6  +
            7  +        http://repo.or.cz/w/jimtcl.git
            8  +
            9  +There are two ways of contributing to Jim project. First is suited for
           10  +one-time fixes and small corrections. The second is more appropriate
           11  +for long-term contributors interested in Jim internals.
           12  +
           13  +Small changes
           14  +=============
           15  +
           16  +For small modifications, procedure of preparing a traditional 'patch'
           17  +is enough. In order to prepare a patch, you first have to obtain the
           18  +most recent copy of Jim Tcl. This can be done with following command:
           19  +
           20  +        git clone http://repo.or.cz/r/jimtcl.git
           21  +
           22  +After entering newly created directory you can easily correct/fix/modify
           23  +files. Once finished, patch can be easily generated:
           24  +
           25  +        git diff > my_patch_fixing_x_y.patch
           26  +
           27  +If working without Git system, you'll have to backup files first, modify
           28  +the original files and obtain a patch manually:
           29  +
           30  +        cp jim.c jim.c.ORIGINAL
           31  +
           32  +        [...] <- modifications go here
           33  +
           34  +        diff -u jim.c.ORIGINAL jim.c > my_patch_fixing_z.patch
           35  +
           36  +Bigger changes
           37  +==============
           38  +
           39  +In order to help extending and correcting Jim in a long term basis, one
           40  +needs to create separate fork of Jim project and maintain his changes in a
           41  +separate copy of a repository.
           42  +
           43  +By visiting this site, you'll have a chance to fork a project. This can
           44  +be easily done with "fork" link. Form that will show up next refers to
           45  +the project that is about to be started. The only thing that has to be
           46  +taken care of is the project mode -- it should be "push mode".
           47  +
           48  +Once the project is created one must add a user that will actually
           49  +start commiting new files to the repo. It can also be done through the
           50  +WWW interface, so nothing more is necessary.
           51  +
           52  +Once finished with setting up a project on the WWW panel, one can
           53  +start playing with actual import of the files. In order to obtain copy
           54  +of Jim sources, we have to clone the repository:
           55  +
           56  +        git clone http://repo.or.cz/r/jimtcl.git
           57  +
           58  +Now, we must push fresh copy of Jim to your project URL:
           59  +
           60  +        git push <URL> master
           61  +
           62  +So for example for me it was:
           63  +
           64  +        git push ssh://repo.or.cz/srv/git/jimtcl/wkoszek.git master
           65  +
           66  +In order to add file we type "git add <file>".  For remove, we do "git rm
           67  +<file>".  To remove all local changes that aren't in a repository you do "git
           68  +reset --hard HEAD".  Once inserted, files have to be commited with "git commit
           69  +-a".  Once done with commits for today, "git push" can be used to propagate
           70  +changes from your local disk to the remote repository.
           71  +
           72  +Right now you can verify whether this works by trying to clone your
           73  +project's repository somewhere else, this time using anonymount HTTP
           74  +access:
           75  +
           76  +        git clone http://repo.or.cz/r/jimtcl/wkoszek.git
           77  +
           78  +Review, testing and publishing
           79  +==============================
           80  +
           81  +Notification of work that can be considered finished is more than welcome on
           82  +Jim-devel mailing list:
           83  +
           84  +        http://jim.tcl.tk:8080/cgi-bin/mailman/listinfo/jim-devel
           85  +
           86  +Patches prepared with the procedures presented abore are welcome. Before
           87  +submitting patches, you can verify that your changes didn't bring any
           88  +regressions to the Jim. In order to do so, sample regression tests have
           89  +been implemented. You can execute them by typing:
           90  +
           91  +        make test
           92  +
           93  +All tests should succeed.

Added EastAsianWidth.txt.

            1  +# EastAsianWidth-10.0.0.txt
            2  +# Date: 2017-03-08, 02:00:00 GMT [KW, LI]
            3  +# © 2017 Unicode®, Inc.
            4  +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
            5  +# For terms of use, see http://www.unicode.org/terms_of_use.html
            6  +#
            7  +# Unicode Character Database
            8  +# For documentation, see http://www.unicode.org/reports/tr44/
            9  +#
           10  +# East_Asian_Width Property
           11  +#
           12  +# This file is an informative contributory data file in the
           13  +# Unicode Character Database.
           14  +#
           15  +# The format is two fields separated by a semicolon.
           16  +# Field 0: Unicode code point value or range of code point values
           17  +# Field 1: East_Asian_Width property, consisting of one of the following values:
           18  +#         "A", "F", "H", "N", "Na", "W"
           19  +#  - All code points, assigned or unassigned, that are not listed
           20  +#      explicitly are given the value "N".
           21  +#  - The unassigned code points in the following blocks default to "W":
           22  +#         CJK Unified Ideographs Extension A: U+3400..U+4DBF
           23  +#         CJK Unified Ideographs:             U+4E00..U+9FFF
           24  +#         CJK Compatibility Ideographs:       U+F900..U+FAFF
           25  +#  - All undesignated code points in Planes 2 and 3, whether inside or
           26  +#      outside of allocated blocks, default to "W":
           27  +#         Plane 2:                            U+20000..U+2FFFD
           28  +#         Plane 3:                            U+30000..U+3FFFD
           29  +#
           30  +# Character ranges are specified as for other property files in the
           31  +# Unicode Character Database.
           32  +#
           33  +# For legacy reasons, there are no spaces before or after the semicolon
           34  +# which separates the two fields. The comments following the number sign
           35  +# "#" list the General_Category property value or the L& alias of the
           36  +# derived value LC, the Unicode character name or names, and, in lines
           37  +# with ranges of code points, the code point count in square brackets.
           38  +#
           39  +# For more information, see UAX #11: East Asian Width,
           40  +# at http://www.unicode.org/reports/tr11/
           41  +#
           42  +# @missing: 0000..10FFFF; N
           43  +0000..001F;N     # Cc    [32] <control-0000>..<control-001F>
           44  +0020;Na          # Zs         SPACE
           45  +0021..0023;Na    # Po     [3] EXCLAMATION MARK..NUMBER SIGN
           46  +0024;Na          # Sc         DOLLAR SIGN
           47  +0025..0027;Na    # Po     [3] PERCENT SIGN..APOSTROPHE
           48  +0028;Na          # Ps         LEFT PARENTHESIS
           49  +0029;Na          # Pe         RIGHT PARENTHESIS
           50  +002A;Na          # Po         ASTERISK
           51  +002B;Na          # Sm         PLUS SIGN
           52  +002C;Na          # Po         COMMA
           53  +002D;Na          # Pd         HYPHEN-MINUS
           54  +002E..002F;Na    # Po     [2] FULL STOP..SOLIDUS
           55  +0030..0039;Na    # Nd    [10] DIGIT ZERO..DIGIT NINE
           56  +003A..003B;Na    # Po     [2] COLON..SEMICOLON
           57  +003C..003E;Na    # Sm     [3] LESS-THAN SIGN..GREATER-THAN SIGN
           58  +003F..0040;Na    # Po     [2] QUESTION MARK..COMMERCIAL AT
           59  +0041..005A;Na    # Lu    [26] LATIN CAPITAL LETTER A..LATIN CAPITAL LETTER Z
           60  +005B;Na          # Ps         LEFT SQUARE BRACKET
           61  +005C;Na          # Po         REVERSE SOLIDUS
           62  +005D;Na          # Pe         RIGHT SQUARE BRACKET
           63  +005E;Na          # Sk         CIRCUMFLEX ACCENT
           64  +005F;Na          # Pc         LOW LINE
           65  +0060;Na          # Sk         GRAVE ACCENT
           66  +0061..007A;Na    # Ll    [26] LATIN SMALL LETTER A..LATIN SMALL LETTER Z
           67  +007B;Na          # Ps         LEFT CURLY BRACKET
           68  +007C;Na          # Sm         VERTICAL LINE
           69  +007D;Na          # Pe         RIGHT CURLY BRACKET
           70  +007E;Na          # Sm         TILDE
           71  +007F;N           # Cc         <control-007F>
           72  +0080..009F;N     # Cc    [32] <control-0080>..<control-009F>
           73  +00A0;N           # Zs         NO-BREAK SPACE
           74  +00A1;A           # Po         INVERTED EXCLAMATION MARK
           75  +00A2..00A3;Na    # Sc     [2] CENT SIGN..POUND SIGN
           76  +00A4;A           # Sc         CURRENCY SIGN
           77  +00A5;Na          # Sc         YEN SIGN
           78  +00A6;Na          # So         BROKEN BAR
           79  +00A7;A           # Po         SECTION SIGN
           80  +00A8;A           # Sk         DIAERESIS
           81  +00A9;N           # So         COPYRIGHT SIGN
           82  +00AA;A           # Lo         FEMININE ORDINAL INDICATOR
           83  +00AB;N           # Pi         LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
           84  +00AC;Na          # Sm         NOT SIGN
           85  +00AD;A           # Cf         SOFT HYPHEN
           86  +00AE;A           # So         REGISTERED SIGN
           87  +00AF;Na          # Sk         MACRON
           88  +00B0;A           # So         DEGREE SIGN
           89  +00B1;A           # Sm         PLUS-MINUS SIGN
           90  +00B2..00B3;A     # No     [2] SUPERSCRIPT TWO..SUPERSCRIPT THREE
           91  +00B4;A           # Sk         ACUTE ACCENT
           92  +00B5;N           # Ll         MICRO SIGN
           93  +00B6..00B7;A     # Po     [2] PILCROW SIGN..MIDDLE DOT
           94  +00B8;A           # Sk         CEDILLA
           95  +00B9;A           # No         SUPERSCRIPT ONE
           96  +00BA;A           # Lo         MASCULINE ORDINAL INDICATOR
           97  +00BB;N           # Pf         RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
           98  +00BC..00BE;A     # No     [3] VULGAR FRACTION ONE QUARTER..VULGAR FRACTION THREE QUARTERS
           99  +00BF;A           # Po         INVERTED QUESTION MARK
          100  +00C0..00C5;N     # Lu     [6] LATIN CAPITAL LETTER A WITH GRAVE..LATIN CAPITAL LETTER A WITH RING ABOVE
          101  +00C6;A           # Lu         LATIN CAPITAL LETTER AE
          102  +00C7..00CF;N     # Lu     [9] LATIN CAPITAL LETTER C WITH CEDILLA..LATIN CAPITAL LETTER I WITH DIAERESIS
          103  +00D0;A           # Lu         LATIN CAPITAL LETTER ETH
          104  +00D1..00D6;N     # Lu     [6] LATIN CAPITAL LETTER N WITH TILDE..LATIN CAPITAL LETTER O WITH DIAERESIS
          105  +00D7;A           # Sm         MULTIPLICATION SIGN
          106  +00D8;A           # Lu         LATIN CAPITAL LETTER O WITH STROKE
          107  +00D9..00DD;N     # Lu     [5] LATIN CAPITAL LETTER U WITH GRAVE..LATIN CAPITAL LETTER Y WITH ACUTE
          108  +00DE..00E1;A     # L&     [4] LATIN CAPITAL LETTER THORN..LATIN SMALL LETTER A WITH ACUTE
          109  +00E2..00E5;N     # Ll     [4] LATIN SMALL LETTER A WITH CIRCUMFLEX..LATIN SMALL LETTER A WITH RING ABOVE
          110  +00E6;A           # Ll         LATIN SMALL LETTER AE
          111  +00E7;N           # Ll         LATIN SMALL LETTER C WITH CEDILLA
          112  +00E8..00EA;A     # Ll     [3] LATIN SMALL LETTER E WITH GRAVE..LATIN SMALL LETTER E WITH CIRCUMFLEX
          113  +00EB;N           # Ll         LATIN SMALL LETTER E WITH DIAERESIS
          114  +00EC..00ED;A     # Ll     [2] LATIN SMALL LETTER I WITH GRAVE..LATIN SMALL LETTER I WITH ACUTE
          115  +00EE..00EF;N     # Ll     [2] LATIN SMALL LETTER I WITH CIRCUMFLEX..LATIN SMALL LETTER I WITH DIAERESIS
          116  +00F0;A           # Ll         LATIN SMALL LETTER ETH
          117  +00F1;N           # Ll         LATIN SMALL LETTER N WITH TILDE
          118  +00F2..00F3;A     # Ll     [2] LATIN SMALL LETTER O WITH GRAVE..LATIN SMALL LETTER O WITH ACUTE
          119  +00F4..00F6;N     # Ll     [3] LATIN SMALL LETTER O WITH CIRCUMFLEX..LATIN SMALL LETTER O WITH DIAERESIS
          120  +00F7;A           # Sm         DIVISION SIGN
          121  +00F8..00FA;A     # Ll     [3] LATIN SMALL LETTER O WITH STROKE..LATIN SMALL LETTER U WITH ACUTE
          122  +00FB;N           # Ll         LATIN SMALL LETTER U WITH CIRCUMFLEX
          123  +00FC;A           # Ll         LATIN SMALL LETTER U WITH DIAERESIS
          124  +00FD;N           # Ll         LATIN SMALL LETTER Y WITH ACUTE
          125  +00FE;A           # Ll         LATIN SMALL LETTER THORN
          126  +00FF;N           # L&         LATIN SMALL LETTER Y WITH DIAERESIS
          127  +0100;N           # Lu         LATIN CAPITAL LETTER A WITH MACRON
          128  +0101;A           # Ll         LATIN SMALL LETTER A WITH MACRON
          129  +0102..0110;N     # L&    [15] LATIN CAPITAL LETTER A WITH BREVE..LATIN CAPITAL LETTER D WITH STROKE
          130  +0111;A           # Ll         LATIN SMALL LETTER D WITH STROKE
          131  +0112;N           # Lu         LATIN CAPITAL LETTER E WITH MACRON
          132  +0113;A           # Ll         LATIN SMALL LETTER E WITH MACRON
          133  +0114..011A;N     # L&     [7] LATIN CAPITAL LETTER E WITH BREVE..LATIN CAPITAL LETTER E WITH CARON
          134  +011B;A           # Ll         LATIN SMALL LETTER E WITH CARON
          135  +011C..0125;N     # L&    [10] LATIN CAPITAL LETTER G WITH CIRCUMFLEX..LATIN SMALL LETTER H WITH CIRCUMFLEX
          136  +0126..0127;A     # L&     [2] LATIN CAPITAL LETTER H WITH STROKE..LATIN SMALL LETTER H WITH STROKE
          137  +0128..012A;N     # L&     [3] LATIN CAPITAL LETTER I WITH TILDE..LATIN CAPITAL LETTER I WITH MACRON
          138  +012B;A           # Ll         LATIN SMALL LETTER I WITH MACRON
          139  +012C..0130;N     # L&     [5] LATIN CAPITAL LETTER I WITH BREVE..LATIN CAPITAL LETTER I WITH DOT ABOVE
          140  +0131..0133;A     # L&     [3] LATIN SMALL LETTER DOTLESS I..LATIN SMALL LIGATURE IJ
          141  +0134..0137;N     # L&     [4] LATIN CAPITAL LETTER J WITH CIRCUMFLEX..LATIN SMALL LETTER K WITH CEDILLA
          142  +0138;A           # Ll         LATIN SMALL LETTER KRA
          143  +0139..013E;N     # L&     [6] LATIN CAPITAL LETTER L WITH ACUTE..LATIN SMALL LETTER L WITH CARON
          144  +013F..0142;A     # L&     [4] LATIN CAPITAL LETTER L WITH MIDDLE DOT..LATIN SMALL LETTER L WITH STROKE
          145  +0143;N           # Lu         LATIN CAPITAL LETTER N WITH ACUTE
          146  +0144;A           # Ll         LATIN SMALL LETTER N WITH ACUTE
          147  +0145..0147;N     # L&     [3] LATIN CAPITAL LETTER N WITH CEDILLA..LATIN CAPITAL LETTER N WITH CARON
          148  +0148..014B;A     # L&     [4] LATIN SMALL LETTER N WITH CARON..LATIN SMALL LETTER ENG
          149  +014C;N           # Lu         LATIN CAPITAL LETTER O WITH MACRON
          150  +014D;A           # Ll         LATIN SMALL LETTER O WITH MACRON
          151  +014E..0151;N     # L&     [4] LATIN CAPITAL LETTER O WITH BREVE..LATIN SMALL LETTER O WITH DOUBLE ACUTE
          152  +0152..0153;A     # L&     [2] LATIN CAPITAL LIGATURE OE..LATIN SMALL LIGATURE OE
          153  +0154..0165;N     # L&    [18] LATIN CAPITAL LETTER R WITH ACUTE..LATIN SMALL LETTER T WITH CARON
          154  +0166..0167;A     # L&     [2] LATIN CAPITAL LETTER T WITH STROKE..LATIN SMALL LETTER T WITH STROKE
          155  +0168..016A;N     # L&     [3] LATIN CAPITAL LETTER U WITH TILDE..LATIN CAPITAL LETTER U WITH MACRON
          156  +016B;A           # Ll         LATIN SMALL LETTER U WITH MACRON
          157  +016C..017F;N     # L&    [20] LATIN CAPITAL LETTER U WITH BREVE..LATIN SMALL LETTER LONG S
          158  +0180..01BA;N     # L&    [59] LATIN SMALL LETTER B WITH STROKE..LATIN SMALL LETTER EZH WITH TAIL
          159  +01BB;N           # Lo         LATIN LETTER TWO WITH STROKE
          160  +01BC..01BF;N     # L&     [4] LATIN CAPITAL LETTER TONE FIVE..LATIN LETTER WYNN
          161  +01C0..01C3;N     # Lo     [4] LATIN LETTER DENTAL CLICK..LATIN LETTER RETROFLEX CLICK
          162  +01C4..01CD;N     # L&    [10] LATIN CAPITAL LETTER DZ WITH CARON..LATIN CAPITAL LETTER A WITH CARON
          163  +01CE;A           # Ll         LATIN SMALL LETTER A WITH CARON
          164  +01CF;N           # Lu         LATIN CAPITAL LETTER I WITH CARON
          165  +01D0;A           # Ll         LATIN SMALL LETTER I WITH CARON
          166  +01D1;N           # Lu         LATIN CAPITAL LETTER O WITH CARON
          167  +01D2;A           # Ll         LATIN SMALL LETTER O WITH CARON
          168  +01D3;N           # Lu         LATIN CAPITAL LETTER U WITH CARON
          169  +01D4;A           # Ll         LATIN SMALL LETTER U WITH CARON
          170  +01D5;N           # Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
          171  +01D6;A           # Ll         LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
          172  +01D7;N           # Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
          173  +01D8;A           # Ll         LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
          174  +01D9;N           # Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
          175  +01DA;A           # Ll         LATIN SMALL LETTER U WITH DIAERESIS AND CARON
          176  +01DB;N           # Lu         LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
          177  +01DC;A           # Ll         LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
          178  +01DD..024F;N     # L&   [115] LATIN SMALL LETTER TURNED E..LATIN SMALL LETTER Y WITH STROKE
          179  +0250;N           # Ll         LATIN SMALL LETTER TURNED A
          180  +0251;A           # Ll         LATIN SMALL LETTER ALPHA
          181  +0252..0260;N     # Ll    [15] LATIN SMALL LETTER TURNED ALPHA..LATIN SMALL LETTER G WITH HOOK
          182  +0261;A           # Ll         LATIN SMALL LETTER SCRIPT G
          183  +0262..0293;N     # Ll    [50] LATIN LETTER SMALL CAPITAL G..LATIN SMALL LETTER EZH WITH CURL
          184  +0294;N           # Lo         LATIN LETTER GLOTTAL STOP
          185  +0295..02AF;N     # Ll    [27] LATIN LETTER PHARYNGEAL VOICED FRICATIVE..LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL
          186  +02B0..02C1;N     # Lm    [18] MODIFIER LETTER SMALL H..MODIFIER LETTER REVERSED GLOTTAL STOP
          187  +02C2..02C3;N     # Sk     [2] MODIFIER LETTER LEFT ARROWHEAD..MODIFIER LETTER RIGHT ARROWHEAD
          188  +02C4;A           # Sk         MODIFIER LETTER UP ARROWHEAD
          189  +02C5;N           # Sk         MODIFIER LETTER DOWN ARROWHEAD
          190  +02C6;N           # Lm         MODIFIER LETTER CIRCUMFLEX ACCENT
          191  +02C7;A           # Lm         CARON
          192  +02C8;N           # Lm         MODIFIER LETTER VERTICAL LINE
          193  +02C9..02CB;A     # Lm     [3] MODIFIER LETTER MACRON..MODIFIER LETTER GRAVE ACCENT
          194  +02CC;N           # Lm         MODIFIER LETTER LOW VERTICAL LINE
          195  +02CD;A           # Lm         MODIFIER LETTER LOW MACRON
          196  +02CE..02CF;N     # Lm     [2] MODIFIER LETTER LOW GRAVE ACCENT..MODIFIER LETTER LOW ACUTE ACCENT
          197  +02D0;A           # Lm         MODIFIER LETTER TRIANGULAR COLON
          198  +02D1;N           # Lm         MODIFIER LETTER HALF TRIANGULAR COLON
          199  +02D2..02D7;N     # Sk     [6] MODIFIER LETTER CENTRED RIGHT HALF RING..MODIFIER LETTER MINUS SIGN
          200  +02D8..02DB;A     # Sk     [4] BREVE..OGONEK
          201  +02DC;N           # Sk         SMALL TILDE
          202  +02DD;A           # Sk         DOUBLE ACUTE ACCENT
          203  +02DE;N           # Sk         MODIFIER LETTER RHOTIC HOOK
          204  +02DF;A           # Sk         MODIFIER LETTER CROSS ACCENT
          205  +02E0..02E4;N     # Lm     [5] MODIFIER LETTER SMALL GAMMA..MODIFIER LETTER SMALL REVERSED GLOTTAL STOP
          206  +02E5..02EB;N     # Sk     [7] MODIFIER LETTER EXTRA-HIGH TONE BAR..MODIFIER LETTER YANG DEPARTING TONE MARK
          207  +02EC;N           # Lm         MODIFIER LETTER VOICING
          208  +02ED;N           # Sk         MODIFIER LETTER UNASPIRATED
          209  +02EE;N           # Lm         MODIFIER LETTER DOUBLE APOSTROPHE
          210  +02EF..02FF;N     # Sk    [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW
          211  +0300..036F;A     # Mn   [112] COMBINING GRAVE ACCENT..COMBINING LATIN SMALL LETTER X
          212  +0370..0373;N     # L&     [4] GREEK CAPITAL LETTER HETA..GREEK SMALL LETTER ARCHAIC SAMPI
          213  +0374;N           # Lm         GREEK NUMERAL SIGN
          214  +0375;N           # Sk         GREEK LOWER NUMERAL SIGN
          215  +0376..0377;N     # L&     [2] GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA..GREEK SMALL LETTER PAMPHYLIAN DIGAMMA
          216  +037A;N           # Lm         GREEK YPOGEGRAMMENI
          217  +037B..037D;N     # Ll     [3] GREEK SMALL REVERSED LUNATE SIGMA SYMBOL..GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL
          218  +037E;N           # Po         GREEK QUESTION MARK
          219  +037F;N           # Lu         GREEK CAPITAL LETTER YOT
          220  +0384..0385;N     # Sk     [2] GREEK TONOS..GREEK DIALYTIKA TONOS
          221  +0386;N           # Lu         GREEK CAPITAL LETTER ALPHA WITH TONOS
          222  +0387;N           # Po         GREEK ANO TELEIA
          223  +0388..038A;N     # Lu     [3] GREEK CAPITAL LETTER EPSILON WITH TONOS..GREEK CAPITAL LETTER IOTA WITH TONOS
          224  +038C;N           # Lu         GREEK CAPITAL LETTER OMICRON WITH TONOS
          225  +038E..0390;N     # L&     [3] GREEK CAPITAL LETTER UPSILON WITH TONOS..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
          226  +0391..03A1;A     # Lu    [17] GREEK CAPITAL LETTER ALPHA..GREEK CAPITAL LETTER RHO
          227  +03A3..03A9;A     # Lu     [7] GREEK CAPITAL LETTER SIGMA..GREEK CAPITAL LETTER OMEGA
          228  +03AA..03B0;N     # L&     [7] GREEK CAPITAL LETTER IOTA WITH DIALYTIKA..GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
          229  +03B1..03C1;A     # Ll    [17] GREEK SMALL LETTER ALPHA..GREEK SMALL LETTER RHO
          230  +03C2;N           # Ll         GREEK SMALL LETTER FINAL SIGMA
          231  +03C3..03C9;A     # Ll     [7] GREEK SMALL LETTER SIGMA..GREEK SMALL LETTER OMEGA
          232  +03CA..03F5;N     # L&    [44] GREEK SMALL LETTER IOTA WITH DIALYTIKA..GREEK LUNATE EPSILON SYMBOL
          233  +03F6;N           # Sm         GREEK REVERSED LUNATE EPSILON SYMBOL
          234  +03F7..03FF;N     # L&     [9] GREEK CAPITAL LETTER SHO..GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
          235  +0400;N           # Lu         CYRILLIC CAPITAL LETTER IE WITH GRAVE
          236  +0401;A           # Lu         CYRILLIC CAPITAL LETTER IO
          237  +0402..040F;N     # Lu    [14] CYRILLIC CAPITAL LETTER DJE..CYRILLIC CAPITAL LETTER DZHE
          238  +0410..044F;A     # L&    [64] CYRILLIC CAPITAL LETTER A..CYRILLIC SMALL LETTER YA
          239  +0450;N           # Ll         CYRILLIC SMALL LETTER IE WITH GRAVE
          240  +0451;A           # Ll         CYRILLIC SMALL LETTER IO
          241  +0452..0481;N     # L&    [48] CYRILLIC SMALL LETTER DJE..CYRILLIC SMALL LETTER KOPPA
          242  +0482;N           # So         CYRILLIC THOUSANDS SIGN
          243  +0483..0487;N     # Mn     [5] COMBINING CYRILLIC TITLO..COMBINING CYRILLIC POKRYTIE
          244  +0488..0489;N     # Me     [2] COMBINING CYRILLIC HUNDRED THOUSANDS SIGN..COMBINING CYRILLIC MILLIONS SIGN
          245  +048A..04FF;N     # L&   [118] CYRILLIC CAPITAL LETTER SHORT I WITH TAIL..CYRILLIC SMALL LETTER HA WITH STROKE
          246  +0500..052F;N     # L&    [48] CYRILLIC CAPITAL LETTER KOMI DE..CYRILLIC SMALL LETTER EL WITH DESCENDER
          247  +0531..0556;N     # Lu    [38] ARMENIAN CAPITAL LETTER AYB..ARMENIAN CAPITAL LETTER FEH
          248  +0559;N           # Lm         ARMENIAN MODIFIER LETTER LEFT HALF RING
          249  +055A..055F;N     # Po     [6] ARMENIAN APOSTROPHE..ARMENIAN ABBREVIATION MARK
          250  +0561..0587;N     # Ll    [39] ARMENIAN SMALL LETTER AYB..ARMENIAN SMALL LIGATURE ECH YIWN
          251  +0589;N           # Po         ARMENIAN FULL STOP
          252  +058A;N           # Pd         ARMENIAN HYPHEN
          253  +058D..058E;N     # So     [2] RIGHT-FACING ARMENIAN ETERNITY SIGN..LEFT-FACING ARMENIAN ETERNITY SIGN
          254  +058F;N           # Sc         ARMENIAN DRAM SIGN
          255  +0591..05BD;N     # Mn    [45] HEBREW ACCENT ETNAHTA..HEBREW POINT METEG
          256  +05BE;N           # Pd         HEBREW PUNCTUATION MAQAF
          257  +05BF;N           # Mn         HEBREW POINT RAFE
          258  +05C0;N           # Po         HEBREW PUNCTUATION PASEQ
          259  +05C1..05C2;N     # Mn     [2] HEBREW POINT SHIN DOT..HEBREW POINT SIN DOT
          260  +05C3;N           # Po         HEBREW PUNCTUATION SOF PASUQ
          261  +05C4..05C5;N     # Mn     [2] HEBREW MARK UPPER DOT..HEBREW MARK LOWER DOT
          262  +05C6;N           # Po         HEBREW PUNCTUATION NUN HAFUKHA
          263  +05C7;N           # Mn         HEBREW POINT QAMATS QATAN
          264  +05D0..05EA;N     # Lo    [27] HEBREW LETTER ALEF..HEBREW LETTER TAV
          265  +05F0..05F2;N     # Lo     [3] HEBREW LIGATURE YIDDISH DOUBLE VAV..HEBREW LIGATURE YIDDISH DOUBLE YOD
          266  +05F3..05F4;N     # Po     [2] HEBREW PUNCTUATION GERESH..HEBREW PUNCTUATION GERSHAYIM
          267  +0600..0605;N     # Cf     [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE
          268  +0606..0608;N     # Sm     [3] ARABIC-INDIC CUBE ROOT..ARABIC RAY
          269  +0609..060A;N     # Po     [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN
          270  +060B;N           # Sc         AFGHANI SIGN
          271  +060C..060D;N     # Po     [2] ARABIC COMMA..ARABIC DATE SEPARATOR
          272  +060E..060F;N     # So     [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA
          273  +0610..061A;N     # Mn    [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA
          274  +061B;N           # Po         ARABIC SEMICOLON
          275  +061C;N           # Cf         ARABIC LETTER MARK
          276  +061E..061F;N     # Po     [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK
          277  +0620..063F;N     # Lo    [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE
          278  +0640;N           # Lm         ARABIC TATWEEL
          279  +0641..064A;N     # Lo    [10] ARABIC LETTER FEH..ARABIC LETTER YEH
          280  +064B..065F;N     # Mn    [21] ARABIC FATHATAN..ARABIC WAVY HAMZA BELOW
          281  +0660..0669;N     # Nd    [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE
          282  +066A..066D;N     # Po     [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR
          283  +066E..066F;N     # Lo     [2] ARABIC LETTER DOTLESS BEH..ARABIC LETTER DOTLESS QAF
          284  +0670;N           # Mn         ARABIC LETTER SUPERSCRIPT ALEF
          285  +0671..06D3;N     # Lo    [99] ARABIC LETTER ALEF WASLA..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE
          286  +06D4;N           # Po         ARABIC FULL STOP
          287  +06D5;N           # Lo         ARABIC LETTER AE
          288  +06D6..06DC;N     # Mn     [7] ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA..ARABIC SMALL HIGH SEEN
          289  +06DD;N           # Cf         ARABIC END OF AYAH
          290  +06DE;N           # So         ARABIC START OF RUB EL HIZB
          291  +06DF..06E4;N     # Mn     [6] ARABIC SMALL HIGH ROUNDED ZERO..ARABIC SMALL HIGH MADDA
          292  +06E5..06E6;N     # Lm     [2] ARABIC SMALL WAW..ARABIC SMALL YEH
          293  +06E7..06E8;N     # Mn     [2] ARABIC SMALL HIGH YEH..ARABIC SMALL HIGH NOON
          294  +06E9;N           # So         ARABIC PLACE OF SAJDAH
          295  +06EA..06ED;N     # Mn     [4] ARABIC EMPTY CENTRE LOW STOP..ARABIC SMALL LOW MEEM
          296  +06EE..06EF;N     # Lo     [2] ARABIC LETTER DAL WITH INVERTED V..ARABIC LETTER REH WITH INVERTED V
          297  +06F0..06F9;N     # Nd    [10] EXTENDED ARABIC-INDIC DIGIT ZERO..EXTENDED ARABIC-INDIC DIGIT NINE
          298  +06FA..06FC;N     # Lo     [3] ARABIC LETTER SHEEN WITH DOT BELOW..ARABIC LETTER GHAIN WITH DOT BELOW
          299  +06FD..06FE;N     # So     [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN
          300  +06FF;N           # Lo         ARABIC LETTER HEH WITH INVERTED V
          301  +0700..070D;N     # Po    [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS
          302  +070F;N           # Cf         SYRIAC ABBREVIATION MARK
          303  +0710;N           # Lo         SYRIAC LETTER ALAPH
          304  +0711;N           # Mn         SYRIAC LETTER SUPERSCRIPT ALAPH
          305  +0712..072F;N     # Lo    [30] SYRIAC LETTER BETH..SYRIAC LETTER PERSIAN DHALATH
          306  +0730..074A;N     # Mn    [27] SYRIAC PTHAHA ABOVE..SYRIAC BARREKH
          307  +074D..074F;N     # Lo     [3] SYRIAC LETTER SOGDIAN ZHAIN..SYRIAC LETTER SOGDIAN FE
          308  +0750..077F;N     # Lo    [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE
          309  +0780..07A5;N     # Lo    [38] THAANA LETTER HAA..THAANA LETTER WAAVU
          310  +07A6..07B0;N     # Mn    [11] THAANA ABAFILI..THAANA SUKUN
          311  +07B1;N           # Lo         THAANA LETTER NAA
          312  +07C0..07C9;N     # Nd    [10] NKO DIGIT ZERO..NKO DIGIT NINE
          313  +07CA..07EA;N     # Lo    [33] NKO LETTER A..NKO LETTER JONA RA
          314  +07EB..07F3;N     # Mn     [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE
          315  +07F4..07F5;N     # Lm     [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE
          316  +07F6;N           # So         NKO SYMBOL OO DENNEN
          317  +07F7..07F9;N     # Po     [3] NKO SYMBOL GBAKURUNEN..NKO EXCLAMATION MARK
          318  +07FA;N           # Lm         NKO LAJANYALAN
          319  +0800..0815;N     # Lo    [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF
          320  +0816..0819;N     # Mn     [4] SAMARITAN MARK IN..SAMARITAN MARK DAGESH
          321  +081A;N           # Lm         SAMARITAN MODIFIER LETTER EPENTHETIC YUT
          322  +081B..0823;N     # Mn     [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A
          323  +0824;N           # Lm         SAMARITAN MODIFIER LETTER SHORT A
          324  +0825..0827;N     # Mn     [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U
          325  +0828;N           # Lm         SAMARITAN MODIFIER LETTER I
          326  +0829..082D;N     # Mn     [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA
          327  +0830..083E;N     # Po    [15] SAMARITAN PUNCTUATION NEQUDAA..SAMARITAN PUNCTUATION ANNAAU
          328  +0840..0858;N     # Lo    [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN
          329  +0859..085B;N     # Mn     [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK
          330  +085E;N           # Po         MANDAIC PUNCTUATION
          331  +0860..086A;N     # Lo    [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA
          332  +08A0..08B4;N     # Lo    [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW
          333  +08B6..08BD;N     # Lo     [8] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER AFRICAN NOON
          334  +08D4..08E1;N     # Mn    [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA
          335  +08E2;N           # Cf         ARABIC DISPUTED END OF AYAH
          336  +08E3..08FF;N     # Mn    [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA
          337  +0900..0902;N     # Mn     [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA
          338  +0903;N           # Mc         DEVANAGARI SIGN VISARGA
          339  +0904..0939;N     # Lo    [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA
          340  +093A;N           # Mn         DEVANAGARI VOWEL SIGN OE
          341  +093B;N           # Mc         DEVANAGARI VOWEL SIGN OOE
          342  +093C;N           # Mn         DEVANAGARI SIGN NUKTA
          343  +093D;N           # Lo         DEVANAGARI SIGN AVAGRAHA
          344  +093E..0940;N     # Mc     [3] DEVANAGARI VOWEL SIGN AA..DEVANAGARI VOWEL SIGN II
          345  +0941..0948;N     # Mn     [8] DEVANAGARI VOWEL SIGN U..DEVANAGARI VOWEL SIGN AI
          346  +0949..094C;N     # Mc     [4] DEVANAGARI VOWEL SIGN CANDRA O..DEVANAGARI VOWEL SIGN AU
          347  +094D;N           # Mn         DEVANAGARI SIGN VIRAMA
          348  +094E..094F;N     # Mc     [2] DEVANAGARI VOWEL SIGN PRISHTHAMATRA E..DEVANAGARI VOWEL SIGN AW
          349  +0950;N           # Lo         DEVANAGARI OM
          350  +0951..0957;N     # Mn     [7] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI VOWEL SIGN UUE
          351  +0958..0961;N     # Lo    [10] DEVANAGARI LETTER QA..DEVANAGARI LETTER VOCALIC LL
          352  +0962..0963;N     # Mn     [2] DEVANAGARI VOWEL SIGN VOCALIC L..DEVANAGARI VOWEL SIGN VOCALIC LL
          353  +0964..0965;N     # Po     [2] DEVANAGARI DANDA..DEVANAGARI DOUBLE DANDA
          354  +0966..096F;N     # Nd    [10] DEVANAGARI DIGIT ZERO..DEVANAGARI DIGIT NINE
          355  +0970;N           # Po         DEVANAGARI ABBREVIATION SIGN
          356  +0971;N           # Lm         DEVANAGARI SIGN HIGH SPACING DOT
          357  +0972..097F;N     # Lo    [14] DEVANAGARI LETTER CANDRA A..DEVANAGARI LETTER BBA
          358  +0980;N           # Lo         BENGALI ANJI
          359  +0981;N           # Mn         BENGALI SIGN CANDRABINDU
          360  +0982..0983;N     # Mc     [2] BENGALI SIGN ANUSVARA..BENGALI SIGN VISARGA
          361  +0985..098C;N     # Lo     [8] BENGALI LETTER A..BENGALI LETTER VOCALIC L
          362  +098F..0990;N     # Lo     [2] BENGALI LETTER E..BENGALI LETTER AI
          363  +0993..09A8;N     # Lo    [22] BENGALI LETTER O..BENGALI LETTER NA
          364  +09AA..09B0;N     # Lo     [7] BENGALI LETTER PA..BENGALI LETTER RA
          365  +09B2;N           # Lo         BENGALI LETTER LA
          366  +09B6..09B9;N     # Lo     [4] BENGALI LETTER SHA..BENGALI LETTER HA
          367  +09BC;N           # Mn         BENGALI SIGN NUKTA
          368  +09BD;N           # Lo         BENGALI SIGN AVAGRAHA
          369  +09BE..09C0;N     # Mc     [3] BENGALI VOWEL SIGN AA..BENGALI VOWEL SIGN II
          370  +09C1..09C4;N     # Mn     [4] BENGALI VOWEL SIGN U..BENGALI VOWEL SIGN VOCALIC RR
          371  +09C7..09C8;N     # Mc     [2] BENGALI VOWEL SIGN E..BENGALI VOWEL SIGN AI
          372  +09CB..09CC;N     # Mc     [2] BENGALI VOWEL SIGN O..BENGALI VOWEL SIGN AU
          373  +09CD;N           # Mn         BENGALI SIGN VIRAMA
          374  +09CE;N           # Lo         BENGALI LETTER KHANDA TA
          375  +09D7;N           # Mc         BENGALI AU LENGTH MARK
          376  +09DC..09DD;N     # Lo     [2] BENGALI LETTER RRA..BENGALI LETTER RHA
          377  +09DF..09E1;N     # Lo     [3] BENGALI LETTER YYA..BENGALI LETTER VOCALIC LL
          378  +09E2..09E3;N     # Mn     [2] BENGALI VOWEL SIGN VOCALIC L..BENGALI VOWEL SIGN VOCALIC LL
          379  +09E6..09EF;N     # Nd    [10] BENGALI DIGIT ZERO..BENGALI DIGIT NINE
          380  +09F0..09F1;N     # Lo     [2] BENGALI LETTER RA WITH MIDDLE DIAGONAL..BENGALI LETTER RA WITH LOWER DIAGONAL
          381  +09F2..09F3;N     # Sc     [2] BENGALI RUPEE MARK..BENGALI RUPEE SIGN
          382  +09F4..09F9;N     # No     [6] BENGALI CURRENCY NUMERATOR ONE..BENGALI CURRENCY DENOMINATOR SIXTEEN
          383  +09FA;N           # So         BENGALI ISSHAR
          384  +09FB;N           # Sc         BENGALI GANDA MARK
          385  +09FC;N           # Lo         BENGALI LETTER VEDIC ANUSVARA
          386  +09FD;N           # Po         BENGALI ABBREVIATION SIGN
          387  +0A01..0A02;N     # Mn     [2] GURMUKHI SIGN ADAK BINDI..GURMUKHI SIGN BINDI
          388  +0A03;N           # Mc         GURMUKHI SIGN VISARGA
          389  +0A05..0A0A;N     # Lo     [6] GURMUKHI LETTER A..GURMUKHI LETTER UU
          390  +0A0F..0A10;N     # Lo     [2] GURMUKHI LETTER EE..GURMUKHI LETTER AI
          391  +0A13..0A28;N     # Lo    [22] GURMUKHI LETTER OO..GURMUKHI LETTER NA
          392  +0A2A..0A30;N     # Lo     [7] GURMUKHI LETTER PA..GURMUKHI LETTER RA
          393  +0A32..0A33;N     # Lo     [2] GURMUKHI LETTER LA..GURMUKHI LETTER LLA
          394  +0A35..0A36;N     # Lo     [2] GURMUKHI LETTER VA..GURMUKHI LETTER SHA
          395  +0A38..0A39;N     # Lo     [2] GURMUKHI LETTER SA..GURMUKHI LETTER HA
          396  +0A3C;N           # Mn         GURMUKHI SIGN NUKTA
          397  +0A3E..0A40;N     # Mc     [3] GURMUKHI VOWEL SIGN AA..GURMUKHI VOWEL SIGN II
          398  +0A41..0A42;N     # Mn     [2] GURMUKHI VOWEL SIGN U..GURMUKHI VOWEL SIGN UU
          399  +0A47..0A48;N     # Mn     [2] GURMUKHI VOWEL SIGN EE..GURMUKHI VOWEL SIGN AI
          400  +0A4B..0A4D;N     # Mn     [3] GURMUKHI VOWEL SIGN OO..GURMUKHI SIGN VIRAMA
          401  +0A51;N           # Mn         GURMUKHI SIGN UDAAT
          402  +0A59..0A5C;N     # Lo     [4] GURMUKHI LETTER KHHA..GURMUKHI LETTER RRA
          403  +0A5E;N           # Lo         GURMUKHI LETTER FA
          404  +0A66..0A6F;N     # Nd    [10] GURMUKHI DIGIT ZERO..GURMUKHI DIGIT NINE
          405  +0A70..0A71;N     # Mn     [2] GURMUKHI TIPPI..GURMUKHI ADDAK
          406  +0A72..0A74;N     # Lo     [3] GURMUKHI IRI..GURMUKHI EK ONKAR
          407  +0A75;N           # Mn         GURMUKHI SIGN YAKASH
          408  +0A81..0A82;N     # Mn     [2] GUJARATI SIGN CANDRABINDU..GUJARATI SIGN ANUSVARA
          409  +0A83;N           # Mc         GUJARATI SIGN VISARGA
          410  +0A85..0A8D;N     # Lo     [9] GUJARATI LETTER A..GUJARATI VOWEL CANDRA E
          411  +0A8F..0A91;N     # Lo     [3] GUJARATI LETTER E..GUJARATI VOWEL CANDRA O
          412  +0A93..0AA8;N     # Lo    [22] GUJARATI LETTER O..GUJARATI LETTER NA
          413  +0AAA..0AB0;N     # Lo     [7] GUJARATI LETTER PA..GUJARATI LETTER RA
          414  +0AB2..0AB3;N     # Lo     [2] GUJARATI LETTER LA..GUJARATI LETTER LLA
          415  +0AB5..0AB9;N     # Lo     [5] GUJARATI LETTER VA..GUJARATI LETTER HA
          416  +0ABC;N           # Mn         GUJARATI SIGN NUKTA
          417  +0ABD;N           # Lo         GUJARATI SIGN AVAGRAHA
          418  +0ABE..0AC0;N     # Mc     [3] GUJARATI VOWEL SIGN AA..GUJARATI VOWEL SIGN II
          419  +0AC1..0AC5;N     # Mn     [5] GUJARATI VOWEL SIGN U..GUJARATI VOWEL SIGN CANDRA E
          420  +0AC7..0AC8;N     # Mn     [2] GUJARATI VOWEL SIGN E..GUJARATI VOWEL SIGN AI
          421  +0AC9;N           # Mc         GUJARATI VOWEL SIGN CANDRA O
          422  +0ACB..0ACC;N     # Mc     [2] GUJARATI VOWEL SIGN O..GUJARATI VOWEL SIGN AU
          423  +0ACD;N           # Mn         GUJARATI SIGN VIRAMA
          424  +0AD0;N           # Lo         GUJARATI OM
          425  +0AE0..0AE1;N     # Lo     [2] GUJARATI LETTER VOCALIC RR..GUJARATI LETTER VOCALIC LL
          426  +0AE2..0AE3;N     # Mn     [2] GUJARATI VOWEL SIGN VOCALIC L..GUJARATI VOWEL SIGN VOCALIC LL
          427  +0AE6..0AEF;N     # Nd    [10] GUJARATI DIGIT ZERO..GUJARATI DIGIT NINE
          428  +0AF0;N           # Po         GUJARATI ABBREVIATION SIGN
          429  +0AF1;N           # Sc         GUJARATI RUPEE SIGN
          430  +0AF9;N           # Lo         GUJARATI LETTER ZHA
          431  +0AFA..0AFF;N     # Mn     [6] GUJARATI SIGN SUKUN..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE
          432  +0B01;N           # Mn         ORIYA SIGN CANDRABINDU
          433  +0B02..0B03;N     # Mc     [2] ORIYA SIGN ANUSVARA..ORIYA SIGN VISARGA
          434  +0B05..0B0C;N     # Lo     [8] ORIYA LETTER A..ORIYA LETTER VOCALIC L
          435  +0B0F..0B10;N     # Lo     [2] ORIYA LETTER E..ORIYA LETTER AI
          436  +0B13..0B28;N     # Lo    [22] ORIYA LETTER O..ORIYA LETTER NA
          437  +0B2A..0B30;N     # Lo     [7] ORIYA LETTER PA..ORIYA LETTER RA
          438  +0B32..0B33;N     # Lo     [2] ORIYA LETTER LA..ORIYA LETTER LLA
          439  +0B35..0B39;N     # Lo     [5] ORIYA LETTER VA..ORIYA LETTER HA
          440  +0B3C;N           # Mn         ORIYA SIGN NUKTA
          441  +0B3D;N           # Lo         ORIYA SIGN AVAGRAHA
          442  +0B3E;N           # Mc         ORIYA VOWEL SIGN AA
          443  +0B3F;N           # Mn         ORIYA VOWEL SIGN I
          444  +0B40;N           # Mc         ORIYA VOWEL SIGN II
          445  +0B41..0B44;N     # Mn     [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR
          446  +0B47..0B48;N     # Mc     [2] ORIYA VOWEL SIGN E..ORIYA VOWEL SIGN AI
          447  +0B4B..0B4C;N     # Mc     [2] ORIYA VOWEL SIGN O..ORIYA VOWEL SIGN AU
          448  +0B4D;N           # Mn         ORIYA SIGN VIRAMA
          449  +0B56;N           # Mn         ORIYA AI LENGTH MARK
          450  +0B57;N           # Mc         ORIYA AU LENGTH MARK
          451  +0B5C..0B5D;N     # Lo     [2] ORIYA LETTER RRA..ORIYA LETTER RHA
          452  +0B5F..0B61;N     # Lo     [3] ORIYA LETTER YYA..ORIYA LETTER VOCALIC LL
          453  +0B62..0B63;N     # Mn     [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL
          454  +0B66..0B6F;N     # Nd    [10] ORIYA DIGIT ZERO..ORIYA DIGIT NINE
          455  +0B70;N           # So         ORIYA ISSHAR
          456  +0B71;N           # Lo         ORIYA LETTER WA
          457  +0B72..0B77;N     # No     [6] ORIYA FRACTION ONE QUARTER..ORIYA FRACTION THREE SIXTEENTHS
          458  +0B82;N           # Mn         TAMIL SIGN ANUSVARA
          459  +0B83;N           # Lo         TAMIL SIGN VISARGA
          460  +0B85..0B8A;N     # Lo     [6] TAMIL LETTER A..TAMIL LETTER UU
          461  +0B8E..0B90;N     # Lo     [3] TAMIL LETTER E..TAMIL LETTER AI
          462  +0B92..0B95;N     # Lo     [4] TAMIL LETTER O..TAMIL LETTER KA
          463  +0B99..0B9A;N     # Lo     [2] TAMIL LETTER NGA..TAMIL LETTER CA
          464  +0B9C;N           # Lo         TAMIL LETTER JA
          465  +0B9E..0B9F;N     # Lo     [2] TAMIL LETTER NYA..TAMIL LETTER TTA
          466  +0BA3..0BA4;N     # Lo     [2] TAMIL LETTER NNA..TAMIL LETTER TA
          467  +0BA8..0BAA;N     # Lo     [3] TAMIL LETTER NA..TAMIL LETTER PA
          468  +0BAE..0BB9;N     # Lo    [12] TAMIL LETTER MA..TAMIL LETTER HA
          469  +0BBE..0BBF;N     # Mc     [2] TAMIL VOWEL SIGN AA..TAMIL VOWEL SIGN I
          470  +0BC0;N           # Mn         TAMIL VOWEL SIGN II
          471  +0BC1..0BC2;N     # Mc     [2] TAMIL VOWEL SIGN U..TAMIL VOWEL SIGN UU
          472  +0BC6..0BC8;N     # Mc     [3] TAMIL VOWEL SIGN E..TAMIL VOWEL SIGN AI
          473  +0BCA..0BCC;N     # Mc     [3] TAMIL VOWEL SIGN O..TAMIL VOWEL SIGN AU
          474  +0BCD;N           # Mn         TAMIL SIGN VIRAMA
          475  +0BD0;N           # Lo         TAMIL OM
          476  +0BD7;N           # Mc         TAMIL AU LENGTH MARK
          477  +0BE6..0BEF;N     # Nd    [10] TAMIL DIGIT ZERO..TAMIL DIGIT NINE
          478  +0BF0..0BF2;N     # No     [3] TAMIL NUMBER TEN..TAMIL NUMBER ONE THOUSAND
          479  +0BF3..0BF8;N     # So     [6] TAMIL DAY SIGN..TAMIL AS ABOVE SIGN
          480  +0BF9;N           # Sc         TAMIL RUPEE SIGN
          481  +0BFA;N           # So         TAMIL NUMBER SIGN
          482  +0C00;N           # Mn         TELUGU SIGN COMBINING CANDRABINDU ABOVE
          483  +0C01..0C03;N     # Mc     [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA
          484  +0C05..0C0C;N     # Lo     [8] TELUGU LETTER A..TELUGU LETTER VOCALIC L
          485  +0C0E..0C10;N     # Lo     [3] TELUGU LETTER E..TELUGU LETTER AI
          486  +0C12..0C28;N     # Lo    [23] TELUGU LETTER O..TELUGU LETTER NA
          487  +0C2A..0C39;N     # Lo    [16] TELUGU LETTER PA..TELUGU LETTER HA
          488  +0C3D;N           # Lo         TELUGU SIGN AVAGRAHA
          489  +0C3E..0C40;N     # Mn     [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II
          490  +0C41..0C44;N     # Mc     [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR
          491  +0C46..0C48;N     # Mn     [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI
          492  +0C4A..0C4D;N     # Mn     [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA
          493  +0C55..0C56;N     # Mn     [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK
          494  +0C58..0C5A;N     # Lo     [3] TELUGU LETTER TSA..TELUGU LETTER RRRA
          495  +0C60..0C61;N     # Lo     [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL
          496  +0C62..0C63;N     # Mn     [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL
          497  +0C66..0C6F;N     # Nd    [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE
          498  +0C78..0C7E;N     # No     [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR
          499  +0C7F;N           # So         TELUGU SIGN TUUMU
          500  +0C80;N           # Lo         KANNADA SIGN SPACING CANDRABINDU
          501  +0C81;N           # Mn         KANNADA SIGN CANDRABINDU
          502  +0C82..0C83;N     # Mc     [2] KANNADA SIGN ANUSVARA..KANNADA SIGN VISARGA
          503  +0C85..0C8C;N     # Lo     [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L
          504  +0C8E..0C90;N     # Lo     [3] KANNADA LETTER E..KANNADA LETTER AI
          505  +0C92..0CA8;N     # Lo    [23] KANNADA LETTER O..KANNADA LETTER NA
          506  +0CAA..0CB3;N     # Lo    [10] KANNADA LETTER PA..KANNADA LETTER LLA
          507  +0CB5..0CB9;N     # Lo     [5] KANNADA LETTER VA..KANNADA LETTER HA
          508  +0CBC;N           # Mn         KANNADA SIGN NUKTA
          509  +0CBD;N           # Lo         KANNADA SIGN AVAGRAHA
          510  +0CBE;N           # Mc         KANNADA VOWEL SIGN AA
          511  +0CBF;N           # Mn         KANNADA VOWEL SIGN I
          512  +0CC0..0CC4;N     # Mc     [5] KANNADA VOWEL SIGN II..KANNADA VOWEL SIGN VOCALIC RR
          513  +0CC6;N           # Mn         KANNADA VOWEL SIGN E
          514  +0CC7..0CC8;N     # Mc     [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI
          515  +0CCA..0CCB;N     # Mc     [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO
          516  +0CCC..0CCD;N     # Mn     [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA
          517  +0CD5..0CD6;N     # Mc     [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK
          518  +0CDE;N           # Lo         KANNADA LETTER FA
          519  +0CE0..0CE1;N     # Lo     [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL
          520  +0CE2..0CE3;N     # Mn     [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL
          521  +0CE6..0CEF;N     # Nd    [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE
          522  +0CF1..0CF2;N     # Lo     [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA
          523  +0D00..0D01;N     # Mn     [2] MALAYALAM SIGN COMBINING ANUSVARA ABOVE..MALAYALAM SIGN CANDRABINDU
          524  +0D02..0D03;N     # Mc     [2] MALAYALAM SIGN ANUSVARA..MALAYALAM SIGN VISARGA
          525  +0D05..0D0C;N     # Lo     [8] MALAYALAM LETTER A..MALAYALAM LETTER VOCALIC L
          526  +0D0E..0D10;N     # Lo     [3] MALAYALAM LETTER E..MALAYALAM LETTER AI
          527  +0D12..0D3A;N     # Lo    [41] MALAYALAM LETTER O..MALAYALAM LETTER TTTA
          528  +0D3B..0D3C;N     # Mn     [2] MALAYALAM SIGN VERTICAL BAR VIRAMA..MALAYALAM SIGN CIRCULAR VIRAMA
          529  +0D3D;N           # Lo         MALAYALAM SIGN AVAGRAHA
          530  +0D3E..0D40;N     # Mc     [3] MALAYALAM VOWEL SIGN AA..MALAYALAM VOWEL SIGN II
          531  +0D41..0D44;N     # Mn     [4] MALAYALAM VOWEL SIGN U..MALAYALAM VOWEL SIGN VOCALIC RR
          532  +0D46..0D48;N     # Mc     [3] MALAYALAM VOWEL SIGN E..MALAYALAM VOWEL SIGN AI
          533  +0D4A..0D4C;N     # Mc     [3] MALAYALAM VOWEL SIGN O..MALAYALAM VOWEL SIGN AU
          534  +0D4D;N           # Mn         MALAYALAM SIGN VIRAMA
          535  +0D4E;N           # Lo         MALAYALAM LETTER DOT REPH
          536  +0D4F;N           # So         MALAYALAM SIGN PARA
          537  +0D54..0D56;N     # Lo     [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL
          538  +0D57;N           # Mc         MALAYALAM AU LENGTH MARK
          539  +0D58..0D5E;N     # No     [7] MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH..MALAYALAM FRACTION ONE FIFTH
          540  +0D5F..0D61;N     # Lo     [3] MALAYALAM LETTER ARCHAIC II..MALAYALAM LETTER VOCALIC LL
          541  +0D62..0D63;N     # Mn     [2] MALAYALAM VOWEL SIGN VOCALIC L..MALAYALAM VOWEL SIGN VOCALIC LL
          542  +0D66..0D6F;N     # Nd    [10] MALAYALAM DIGIT ZERO..MALAYALAM DIGIT NINE
          543  +0D70..0D78;N     # No     [9] MALAYALAM NUMBER TEN..MALAYALAM FRACTION THREE SIXTEENTHS
          544  +0D79;N           # So         MALAYALAM DATE MARK
          545  +0D7A..0D7F;N     # Lo     [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K
          546  +0D82..0D83;N     # Mc     [2] SINHALA SIGN ANUSVARAYA..SINHALA SIGN VISARGAYA
          547  +0D85..0D96;N     # Lo    [18] SINHALA LETTER AYANNA..SINHALA LETTER AUYANNA
          548  +0D9A..0DB1;N     # Lo    [24] SINHALA LETTER ALPAPRAANA KAYANNA..SINHALA LETTER DANTAJA NAYANNA
          549  +0DB3..0DBB;N     # Lo     [9] SINHALA LETTER SANYAKA DAYANNA..SINHALA LETTER RAYANNA
          550  +0DBD;N           # Lo         SINHALA LETTER DANTAJA LAYANNA
          551  +0DC0..0DC6;N     # Lo     [7] SINHALA LETTER VAYANNA..SINHALA LETTER FAYANNA
          552  +0DCA;N           # Mn         SINHALA SIGN AL-LAKUNA
          553  +0DCF..0DD1;N     # Mc     [3] SINHALA VOWEL SIGN AELA-PILLA..SINHALA VOWEL SIGN DIGA AEDA-PILLA
          554  +0DD2..0DD4;N     # Mn     [3] SINHALA VOWEL SIGN KETTI IS-PILLA..SINHALA VOWEL SIGN KETTI PAA-PILLA
          555  +0DD6;N           # Mn         SINHALA VOWEL SIGN DIGA PAA-PILLA
          556  +0DD8..0DDF;N     # Mc     [8] SINHALA VOWEL SIGN GAETTA-PILLA..SINHALA VOWEL SIGN GAYANUKITTA
          557  +0DE6..0DEF;N     # Nd    [10] SINHALA LITH DIGIT ZERO..SINHALA LITH DIGIT NINE
          558  +0DF2..0DF3;N     # Mc     [2] SINHALA VOWEL SIGN DIGA GAETTA-PILLA..SINHALA VOWEL SIGN DIGA GAYANUKITTA
          559  +0DF4;N           # Po         SINHALA PUNCTUATION KUNDDALIYA
          560  +0E01..0E30;N     # Lo    [48] THAI CHARACTER KO KAI..THAI CHARACTER SARA A
          561  +0E31;N           # Mn         THAI CHARACTER MAI HAN-AKAT
          562  +0E32..0E33;N     # Lo     [2] THAI CHARACTER SARA AA..THAI CHARACTER SARA AM
          563  +0E34..0E3A;N     # Mn     [7] THAI CHARACTER SARA I..THAI CHARACTER PHINTHU
          564  +0E3F;N           # Sc         THAI CURRENCY SYMBOL BAHT
          565  +0E40..0E45;N     # Lo     [6] THAI CHARACTER SARA E..THAI CHARACTER LAKKHANGYAO
          566  +0E46;N           # Lm         THAI CHARACTER MAIYAMOK
          567  +0E47..0E4E;N     # Mn     [8] THAI CHARACTER MAITAIKHU..THAI CHARACTER YAMAKKAN
          568  +0E4F;N           # Po         THAI CHARACTER FONGMAN
          569  +0E50..0E59;N     # Nd    [10] THAI DIGIT ZERO..THAI DIGIT NINE
          570  +0E5A..0E5B;N     # Po     [2] THAI CHARACTER ANGKHANKHU..THAI CHARACTER KHOMUT
          571  +0E81..0E82;N     # Lo     [2] LAO LETTER KO..LAO LETTER KHO SUNG
          572  +0E84;N           # Lo         LAO LETTER KHO TAM
          573  +0E87..0E88;N     # Lo     [2] LAO LETTER NGO..LAO LETTER CO
          574  +0E8A;N           # Lo         LAO LETTER SO TAM
          575  +0E8D;N           # Lo         LAO LETTER NYO
          576  +0E94..0E97;N     # Lo     [4] LAO LETTER DO..LAO LETTER THO TAM
          577  +0E99..0E9F;N     # Lo     [7] LAO LETTER NO..LAO LETTER FO SUNG
          578  +0EA1..0EA3;N     # Lo     [3] LAO LETTER MO..LAO LETTER LO LING
          579  +0EA5;N           # Lo         LAO LETTER LO LOOT
          580  +0EA7;N           # Lo         LAO LETTER WO
          581  +0EAA..0EAB;N     # Lo     [2] LAO LETTER SO SUNG..LAO LETTER HO SUNG
          582  +0EAD..0EB0;N     # Lo     [4] LAO LETTER O..LAO VOWEL SIGN A
          583  +0EB1;N           # Mn         LAO VOWEL SIGN MAI KAN
          584  +0EB2..0EB3;N     # Lo     [2] LAO VOWEL SIGN AA..LAO VOWEL SIGN AM
          585  +0EB4..0EB9;N     # Mn     [6] LAO VOWEL SIGN I..LAO VOWEL SIGN UU
          586  +0EBB..0EBC;N     # Mn     [2] LAO VOWEL SIGN MAI KON..LAO SEMIVOWEL SIGN LO
          587  +0EBD;N           # Lo         LAO SEMIVOWEL SIGN NYO
          588  +0EC0..0EC4;N     # Lo     [5] LAO VOWEL SIGN E..LAO VOWEL SIGN AI
          589  +0EC6;N           # Lm         LAO KO LA
          590  +0EC8..0ECD;N     # Mn     [6] LAO TONE MAI EK..LAO NIGGAHITA
          591  +0ED0..0ED9;N     # Nd    [10] LAO DIGIT ZERO..LAO DIGIT NINE
          592  +0EDC..0EDF;N     # Lo     [4] LAO HO NO..LAO LETTER KHMU NYO
          593  +0F00;N           # Lo         TIBETAN SYLLABLE OM
          594  +0F01..0F03;N     # So     [3] TIBETAN MARK GTER YIG MGO TRUNCATED A..TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA
          595  +0F04..0F12;N     # Po    [15] TIBETAN MARK INITIAL YIG MGO MDUN MA..TIBETAN MARK RGYA GRAM SHAD
          596  +0F13;N           # So         TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN
          597  +0F14;N           # Po         TIBETAN MARK GTER TSHEG
          598  +0F15..0F17;N     # So     [3] TIBETAN LOGOTYPE SIGN CHAD RTAGS..TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS
          599  +0F18..0F19;N     # Mn     [2] TIBETAN ASTROLOGICAL SIGN -KHYUD PA..TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS
          600  +0F1A..0F1F;N     # So     [6] TIBETAN SIGN RDEL DKAR GCIG..TIBETAN SIGN RDEL DKAR RDEL NAG
          601  +0F20..0F29;N     # Nd    [10] TIBETAN DIGIT ZERO..TIBETAN DIGIT NINE
          602  +0F2A..0F33;N     # No    [10] TIBETAN DIGIT HALF ONE..TIBETAN DIGIT HALF ZERO
          603  +0F34;N           # So         TIBETAN MARK BSDUS RTAGS
          604  +0F35;N           # Mn         TIBETAN MARK NGAS BZUNG NYI ZLA
          605  +0F36;N           # So         TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN
          606  +0F37;N           # Mn         TIBETAN MARK NGAS BZUNG SGOR RTAGS
          607  +0F38;N           # So         TIBETAN MARK CHE MGO
          608  +0F39;N           # Mn         TIBETAN MARK TSA -PHRU
          609  +0F3A;N           # Ps         TIBETAN MARK GUG RTAGS GYON
          610  +0F3B;N           # Pe         TIBETAN MARK GUG RTAGS GYAS
          611  +0F3C;N           # Ps         TIBETAN MARK ANG KHANG GYON
          612  +0F3D;N           # Pe         TIBETAN MARK ANG KHANG GYAS
          613  +0F3E..0F3F;N     # Mc     [2] TIBETAN SIGN YAR TSHES..TIBETAN SIGN MAR TSHES
          614  +0F40..0F47;N     # Lo     [8] TIBETAN LETTER KA..TIBETAN LETTER JA
          615  +0F49..0F6C;N     # Lo    [36] TIBETAN LETTER NYA..TIBETAN LETTER RRA
          616  +0F71..0F7E;N     # Mn    [14] TIBETAN VOWEL SIGN AA..TIBETAN SIGN RJES SU NGA RO
          617  +0F7F;N           # Mc         TIBETAN SIGN RNAM BCAD
          618  +0F80..0F84;N     # Mn     [5] TIBETAN VOWEL SIGN REVERSED I..TIBETAN MARK HALANTA
          619  +0F85;N           # Po         TIBETAN MARK PALUTA
          620  +0F86..0F87;N     # Mn     [2] TIBETAN SIGN LCI RTAGS..TIBETAN SIGN YANG RTAGS
          621  +0F88..0F8C;N     # Lo     [5] TIBETAN SIGN LCE TSA CAN..TIBETAN SIGN INVERTED MCHU CAN
          622  +0F8D..0F97;N     # Mn    [11] TIBETAN SUBJOINED SIGN LCE TSA CAN..TIBETAN SUBJOINED LETTER JA
          623  +0F99..0FBC;N     # Mn    [36] TIBETAN SUBJOINED LETTER NYA..TIBETAN SUBJOINED LETTER FIXED-FORM RA
          624  +0FBE..0FC5;N     # So     [8] TIBETAN KU RU KHA..TIBETAN SYMBOL RDO RJE
          625  +0FC6;N           # Mn         TIBETAN SYMBOL PADMA GDAN
          626  +0FC7..0FCC;N     # So     [6] TIBETAN SYMBOL RDO RJE RGYA GRAM..TIBETAN SYMBOL NOR BU BZHI -KHYIL
          627  +0FCE..0FCF;N     # So     [2] TIBETAN SIGN RDEL NAG RDEL DKAR..TIBETAN SIGN RDEL NAG GSUM
          628  +0FD0..0FD4;N     # Po     [5] TIBETAN MARK BSKA- SHOG GI MGO RGYAN..TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA
          629  +0FD5..0FD8;N     # So     [4] RIGHT-FACING SVASTI SIGN..LEFT-FACING SVASTI SIGN WITH DOTS
          630  +0FD9..0FDA;N     # Po     [2] TIBETAN MARK LEADING MCHAN RTAGS..TIBETAN MARK TRAILING MCHAN RTAGS
          631  +1000..102A;N     # Lo    [43] MYANMAR LETTER KA..MYANMAR LETTER AU
          632  +102B..102C;N     # Mc     [2] MYANMAR VOWEL SIGN TALL AA..MYANMAR VOWEL SIGN AA
          633  +102D..1030;N     # Mn     [4] MYANMAR VOWEL SIGN I..MYANMAR VOWEL SIGN UU
          634  +1031;N           # Mc         MYANMAR VOWEL SIGN E
          635  +1032..1037;N     # Mn     [6] MYANMAR VOWEL SIGN AI..MYANMAR SIGN DOT BELOW
          636  +1038;N           # Mc         MYANMAR SIGN VISARGA
          637  +1039..103A;N     # Mn     [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT
          638  +103B..103C;N     # Mc     [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA
          639  +103D..103E;N     # Mn     [2] MYANMAR CONSONANT SIGN MEDIAL WA..MYANMAR CONSONANT SIGN MEDIAL HA
          640  +103F;N           # Lo         MYANMAR LETTER GREAT SA
          641  +1040..1049;N     # Nd    [10] MYANMAR DIGIT ZERO..MYANMAR DIGIT NINE
          642  +104A..104F;N     # Po     [6] MYANMAR SIGN LITTLE SECTION..MYANMAR SYMBOL GENITIVE
          643  +1050..1055;N     # Lo     [6] MYANMAR LETTER SHA..MYANMAR LETTER VOCALIC LL
          644  +1056..1057;N     # Mc     [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR
          645  +1058..1059;N     # Mn     [2] MYANMAR VOWEL SIGN VOCALIC L..MYANMAR VOWEL SIGN VOCALIC LL
          646  +105A..105D;N     # Lo     [4] MYANMAR LETTER MON NGA..MYANMAR LETTER MON BBE
          647  +105E..1060;N     # Mn     [3] MYANMAR CONSONANT SIGN MON MEDIAL NA..MYANMAR CONSONANT SIGN MON MEDIAL LA
          648  +1061;N           # Lo         MYANMAR LETTER SGAW KAREN SHA
          649  +1062..1064;N     # Mc     [3] MYANMAR VOWEL SIGN SGAW KAREN EU..MYANMAR TONE MARK SGAW KAREN KE PHO
          650  +1065..1066;N     # Lo     [2] MYANMAR LETTER WESTERN PWO KAREN THA..MYANMAR LETTER WESTERN PWO KAREN PWA
          651  +1067..106D;N     # Mc     [7] MYANMAR VOWEL SIGN WESTERN PWO KAREN EU..MYANMAR SIGN WESTERN PWO KAREN TONE-5
          652  +106E..1070;N     # Lo     [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA
          653  +1071..1074;N     # Mn     [4] MYANMAR VOWEL SIGN GEBA KAREN I..MYANMAR VOWEL SIGN KAYAH EE
          654  +1075..1081;N     # Lo    [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA
          655  +1082;N           # Mn         MYANMAR CONSONANT SIGN SHAN MEDIAL WA
          656  +1083..1084;N     # Mc     [2] MYANMAR VOWEL SIGN SHAN AA..MYANMAR VOWEL SIGN SHAN E
          657  +1085..1086;N     # Mn     [2] MYANMAR VOWEL SIGN SHAN E ABOVE..MYANMAR VOWEL SIGN SHAN FINAL Y
          658  +1087..108C;N     # Mc     [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3
          659  +108D;N           # Mn         MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE
          660  +108E;N           # Lo         MYANMAR LETTER RUMAI PALAUNG FA
          661  +108F;N           # Mc         MYANMAR SIGN RUMAI PALAUNG TONE-5
          662  +1090..1099;N     # Nd    [10] MYANMAR SHAN DIGIT ZERO..MYANMAR SHAN DIGIT NINE
          663  +109A..109C;N     # Mc     [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A
          664  +109D;N           # Mn         MYANMAR VOWEL SIGN AITON AI
          665  +109E..109F;N     # So     [2] MYANMAR SYMBOL SHAN ONE..MYANMAR SYMBOL SHAN EXCLAMATION
          666  +10A0..10C5;N     # Lu    [38] GEORGIAN CAPITAL LETTER AN..GEORGIAN CAPITAL LETTER HOE
          667  +10C7;N           # Lu         GEORGIAN CAPITAL LETTER YN
          668  +10CD;N           # Lu         GEORGIAN CAPITAL LETTER AEN
          669  +10D0..10FA;N     # Lo    [43] GEORGIAN LETTER AN..GEORGIAN LETTER AIN
          670  +10FB;N           # Po         GEORGIAN PARAGRAPH SEPARATOR
          671  +10FC;N           # Lm         MODIFIER LETTER GEORGIAN NAR
          672  +10FD..10FF;N     # Lo     [3] GEORGIAN LETTER AEN..GEORGIAN LETTER LABIAL SIGN
          673  +1100..115F;W     # Lo    [96] HANGUL CHOSEONG KIYEOK..HANGUL CHOSEONG FILLER
          674  +1160..11FF;N     # Lo   [160] HANGUL JUNGSEONG FILLER..HANGUL JONGSEONG SSANGNIEUN
          675  +1200..1248;N     # Lo    [73] ETHIOPIC SYLLABLE HA..ETHIOPIC SYLLABLE QWA
          676  +124A..124D;N     # Lo     [4] ETHIOPIC SYLLABLE QWI..ETHIOPIC SYLLABLE QWE
          677  +1250..1256;N     # Lo     [7] ETHIOPIC SYLLABLE QHA..ETHIOPIC SYLLABLE QHO
          678  +1258;N           # Lo         ETHIOPIC SYLLABLE QHWA
          679  +125A..125D;N     # Lo     [4] ETHIOPIC SYLLABLE QHWI..ETHIOPIC SYLLABLE QHWE
          680  +1260..1288;N     # Lo    [41] ETHIOPIC SYLLABLE BA..ETHIOPIC SYLLABLE XWA
          681  +128A..128D;N     # Lo     [4] ETHIOPIC SYLLABLE XWI..ETHIOPIC SYLLABLE XWE
          682  +1290..12B0;N     # Lo    [33] ETHIOPIC SYLLABLE NA..ETHIOPIC SYLLABLE KWA
          683  +12B2..12B5;N     # Lo     [4] ETHIOPIC SYLLABLE KWI..ETHIOPIC SYLLABLE KWE
          684  +12B8..12BE;N     # Lo     [7] ETHIOPIC SYLLABLE KXA..ETHIOPIC SYLLABLE KXO
          685  +12C0;N           # Lo         ETHIOPIC SYLLABLE KXWA
          686  +12C2..12C5;N     # Lo     [4] ETHIOPIC SYLLABLE KXWI..ETHIOPIC SYLLABLE KXWE
          687  +12C8..12D6;N     # Lo    [15] ETHIOPIC SYLLABLE WA..ETHIOPIC SYLLABLE PHARYNGEAL O
          688  +12D8..1310;N     # Lo    [57] ETHIOPIC SYLLABLE ZA..ETHIOPIC SYLLABLE GWA
          689  +1312..1315;N     # Lo     [4] ETHIOPIC SYLLABLE GWI..ETHIOPIC SYLLABLE GWE
          690  +1318..135A;N     # Lo    [67] ETHIOPIC SYLLABLE GGA..ETHIOPIC SYLLABLE FYA
          691  +135D..135F;N     # Mn     [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK
          692  +1360..1368;N     # Po     [9] ETHIOPIC SECTION MARK..ETHIOPIC PARAGRAPH SEPARATOR
          693  +1369..137C;N     # No    [20] ETHIOPIC DIGIT ONE..ETHIOPIC NUMBER TEN THOUSAND
          694  +1380..138F;N     # Lo    [16] ETHIOPIC SYLLABLE SEBATBEIT MWA..ETHIOPIC SYLLABLE PWE
          695  +1390..1399;N     # So    [10] ETHIOPIC TONAL MARK YIZET..ETHIOPIC TONAL MARK KURT
          696  +13A0..13F5;N     # Lu    [86] CHEROKEE LETTER A..CHEROKEE LETTER MV
          697  +13F8..13FD;N     # Ll     [6] CHEROKEE SMALL LETTER YE..CHEROKEE SMALL LETTER MV
          698  +1400;N           # Pd         CANADIAN SYLLABICS HYPHEN
          699  +1401..166C;N     # Lo   [620] CANADIAN SYLLABICS E..CANADIAN SYLLABICS CARRIER TTSA
          700  +166D..166E;N     # Po     [2] CANADIAN SYLLABICS CHI SIGN..CANADIAN SYLLABICS FULL STOP
          701  +166F..167F;N     # Lo    [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W
          702  +1680;N           # Zs         OGHAM SPACE MARK
          703  +1681..169A;N     # Lo    [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH
          704  +169B;N           # Ps         OGHAM FEATHER MARK
          705  +169C;N           # Pe         OGHAM REVERSED FEATHER MARK
          706  +16A0..16EA;N     # Lo    [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X
          707  +16EB..16ED;N     # Po     [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION
          708  +16EE..16F0;N     # Nl     [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL
          709  +16F1..16F8;N     # Lo     [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC
          710  +1700..170C;N     # Lo    [13] TAGALOG LETTER A..TAGALOG LETTER YA
          711  +170E..1711;N     # Lo     [4] TAGALOG LETTER LA..TAGALOG LETTER HA
          712  +1712..1714;N     # Mn     [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA
          713  +1720..1731;N     # Lo    [18] HANUNOO LETTER A..HANUNOO LETTER HA
          714  +1732..1734;N     # Mn     [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD
          715  +1735..1736;N     # Po     [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION
          716  +1740..1751;N     # Lo    [18] BUHID LETTER A..BUHID LETTER HA
          717  +1752..1753;N     # Mn     [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U
          718  +1760..176C;N     # Lo    [13] TAGBANWA LETTER A..TAGBANWA LETTER YA
          719  +176E..1770;N     # Lo     [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA
          720  +1772..1773;N     # Mn     [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U
          721  +1780..17B3;N     # Lo    [52] KHMER LETTER KA..KHMER INDEPENDENT VOWEL QAU
          722  +17B4..17B5;N     # Mn     [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA
          723  +17B6;N           # Mc         KHMER VOWEL SIGN AA
          724  +17B7..17BD;N     # Mn     [7] KHMER VOWEL SIGN I..KHMER VOWEL SIGN UA
          725  +17BE..17C5;N     # Mc     [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU
          726  +17C6;N           # Mn         KHMER SIGN NIKAHIT
          727  +17C7..17C8;N     # Mc     [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU
          728  +17C9..17D3;N     # Mn    [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT
          729  +17D4..17D6;N     # Po     [3] KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH
          730  +17D7;N           # Lm         KHMER SIGN LEK TOO
          731  +17D8..17DA;N     # Po     [3] KHMER SIGN BEYYAL..KHMER SIGN KOOMUUT
          732  +17DB;N           # Sc         KHMER CURRENCY SYMBOL RIEL
          733  +17DC;N           # Lo         KHMER SIGN AVAKRAHASANYA
          734  +17DD;N           # Mn         KHMER SIGN ATTHACAN
          735  +17E0..17E9;N     # Nd    [10] KHMER DIGIT ZERO..KHMER DIGIT NINE
          736  +17F0..17F9;N     # No    [10] KHMER SYMBOL LEK ATTAK SON..KHMER SYMBOL LEK ATTAK PRAM-BUON
          737  +1800..1805;N     # Po     [6] MONGOLIAN BIRGA..MONGOLIAN FOUR DOTS
          738  +1806;N           # Pd         MONGOLIAN TODO SOFT HYPHEN
          739  +1807..180A;N     # Po     [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU
          740  +180B..180D;N     # Mn     [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE
          741  +180E;N           # Cf         MONGOLIAN VOWEL SEPARATOR
          742  +1810..1819;N     # Nd    [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE
          743  +1820..1842;N     # Lo    [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI
          744  +1843;N           # Lm         MONGOLIAN LETTER TODO LONG VOWEL SIGN
          745  +1844..1877;N     # Lo    [52] MONGOLIAN LETTER TODO E..MONGOLIAN LETTER MANCHU ZHA
          746  +1880..1884;N     # Lo     [5] MONGOLIAN LETTER ALI GALI ANUSVARA ONE..MONGOLIAN LETTER ALI GALI INVERTED UBADAMA
          747  +1885..1886;N     # Mn     [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA
          748  +1887..18A8;N     # Lo    [34] MONGOLIAN LETTER ALI GALI A..MONGOLIAN LETTER MANCHU ALI GALI BHA
          749  +18A9;N           # Mn         MONGOLIAN LETTER ALI GALI DAGALGA
          750  +18AA;N           # Lo         MONGOLIAN LETTER MANCHU ALI GALI LHA
          751  +18B0..18F5;N     # Lo    [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S
          752  +1900..191E;N     # Lo    [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA
          753  +1920..1922;N     # Mn     [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U
          754  +1923..1926;N     # Mc     [4] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AU
          755  +1927..1928;N     # Mn     [2] LIMBU VOWEL SIGN E..LIMBU VOWEL SIGN O
          756  +1929..192B;N     # Mc     [3] LIMBU SUBJOINED LETTER YA..LIMBU SUBJOINED LETTER WA
          757  +1930..1931;N     # Mc     [2] LIMBU SMALL LETTER KA..LIMBU SMALL LETTER NGA
          758  +1932;N           # Mn         LIMBU SMALL LETTER ANUSVARA
          759  +1933..1938;N     # Mc     [6] LIMBU SMALL LETTER TA..LIMBU SMALL LETTER LA
          760  +1939..193B;N     # Mn     [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I
          761  +1940;N           # So         LIMBU SIGN LOO
          762  +1944..1945;N     # Po     [2] LIMBU EXCLAMATION MARK..LIMBU QUESTION MARK
          763  +1946..194F;N     # Nd    [10] LIMBU DIGIT ZERO..LIMBU DIGIT NINE
          764  +1950..196D;N     # Lo    [30] TAI LE LETTER KA..TAI LE LETTER AI
          765  +1970..1974;N     # Lo     [5] TAI LE LETTER TONE-2..TAI LE LETTER TONE-6
          766  +1980..19AB;N     # Lo    [44] NEW TAI LUE LETTER HIGH QA..NEW TAI LUE LETTER LOW SUA
          767  +19B0..19C9;N     # Lo    [26] NEW TAI LUE VOWEL SIGN VOWEL SHORTENER..NEW TAI LUE TONE MARK-2
          768  +19D0..19D9;N     # Nd    [10] NEW TAI LUE DIGIT ZERO..NEW TAI LUE DIGIT NINE
          769  +19DA;N           # No         NEW TAI LUE THAM DIGIT ONE
          770  +19DE..19DF;N     # So     [2] NEW TAI LUE SIGN LAE..NEW TAI LUE SIGN LAEV
          771  +19E0..19FF;N     # So    [32] KHMER SYMBOL PATHAMASAT..KHMER SYMBOL DAP-PRAM ROC
          772  +1A00..1A16;N     # Lo    [23] BUGINESE LETTER KA..BUGINESE LETTER HA
          773  +1A17..1A18;N     # Mn     [2] BUGINESE VOWEL SIGN I..BUGINESE VOWEL SIGN U
          774  +1A19..1A1A;N     # Mc     [2] BUGINESE VOWEL SIGN E..BUGINESE VOWEL SIGN O
          775  +1A1B;N           # Mn         BUGINESE VOWEL SIGN AE
          776  +1A1E..1A1F;N     # Po     [2] BUGINESE PALLAWA..BUGINESE END OF SECTION
          777  +1A20..1A54;N     # Lo    [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA
          778  +1A55;N           # Mc         TAI THAM CONSONANT SIGN MEDIAL RA
          779  +1A56;N           # Mn         TAI THAM CONSONANT SIGN MEDIAL LA
          780  +1A57;N           # Mc         TAI THAM CONSONANT SIGN LA TANG LAI
          781  +1A58..1A5E;N     # Mn     [7] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN SA
          782  +1A60;N           # Mn         TAI THAM SIGN SAKOT
          783  +1A61;N           # Mc         TAI THAM VOWEL SIGN A
          784  +1A62;N           # Mn         TAI THAM VOWEL SIGN MAI SAT
          785  +1A63..1A64;N     # Mc     [2] TAI THAM VOWEL SIGN AA..TAI THAM VOWEL SIGN TALL AA
          786  +1A65..1A6C;N     # Mn     [8] TAI THAM VOWEL SIGN I..TAI THAM VOWEL SIGN OA BELOW
          787  +1A6D..1A72;N     # Mc     [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI
          788  +1A73..1A7C;N     # Mn    [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN
          789  +1A7F;N           # Mn         TAI THAM COMBINING CRYPTOGRAMMIC DOT
          790  +1A80..1A89;N     # Nd    [10] TAI THAM HORA DIGIT ZERO..TAI THAM HORA DIGIT NINE
          791  +1A90..1A99;N     # Nd    [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE
          792  +1AA0..1AA6;N     # Po     [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA
          793  +1AA7;N           # Lm         TAI THAM SIGN MAI YAMOK
          794  +1AA8..1AAD;N     # Po     [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG
          795  +1AB0..1ABD;N     # Mn    [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW
          796  +1ABE;N           # Me         COMBINING PARENTHESES OVERLAY
          797  +1B00..1B03;N     # Mn     [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG
          798  +1B04;N           # Mc         BALINESE SIGN BISAH
          799  +1B05..1B33;N     # Lo    [47] BALINESE LETTER AKARA..BALINESE LETTER HA
          800  +1B34;N           # Mn         BALINESE SIGN REREKAN
          801  +1B35;N           # Mc         BALINESE VOWEL SIGN TEDUNG
          802  +1B36..1B3A;N     # Mn     [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA
          803  +1B3B;N           # Mc         BALINESE VOWEL SIGN RA REPA TEDUNG
          804  +1B3C;N           # Mn         BALINESE VOWEL SIGN LA LENGA
          805  +1B3D..1B41;N     # Mc     [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG
          806  +1B42;N           # Mn         BALINESE VOWEL SIGN PEPET
          807  +1B43..1B44;N     # Mc     [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG
          808  +1B45..1B4B;N     # Lo     [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK
          809  +1B50..1B59;N     # Nd    [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE
          810  +1B5A..1B60;N     # Po     [7] BALINESE PANTI..BALINESE PAMENENG
          811  +1B61..1B6A;N     # So    [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE
          812  +1B6B..1B73;N     # Mn     [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG
          813  +1B74..1B7C;N     # So     [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING
          814  +1B80..1B81;N     # Mn     [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR
          815  +1B82;N           # Mc         SUNDANESE SIGN PANGWISAD
          816  +1B83..1BA0;N     # Lo    [30] SUNDANESE LETTER A..SUNDANESE LETTER HA
          817  +1BA1;N           # Mc         SUNDANESE CONSONANT SIGN PAMINGKAL
          818  +1BA2..1BA5;N     # Mn     [4] SUNDANESE CONSONANT SIGN PANYAKRA..SUNDANESE VOWEL SIGN PANYUKU
          819  +1BA6..1BA7;N     # Mc     [2] SUNDANESE VOWEL SIGN PANAELAENG..SUNDANESE VOWEL SIGN PANOLONG
          820  +1BA8..1BA9;N     # Mn     [2] SUNDANESE VOWEL SIGN PAMEPET..SUNDANESE VOWEL SIGN PANEULEUNG
          821  +1BAA;N           # Mc         SUNDANESE SIGN PAMAAEH
          822  +1BAB..1BAD;N     # Mn     [3] SUNDANESE SIGN VIRAMA..SUNDANESE CONSONANT SIGN PASANGAN WA
          823  +1BAE..1BAF;N     # Lo     [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA
          824  +1BB0..1BB9;N     # Nd    [10] SUNDANESE DIGIT ZERO..SUNDANESE DIGIT NINE
          825  +1BBA..1BBF;N     # Lo     [6] SUNDANESE AVAGRAHA..SUNDANESE LETTER FINAL M
          826  +1BC0..1BE5;N     # Lo    [38] BATAK LETTER A..BATAK LETTER U
          827  +1BE6;N           # Mn         BATAK SIGN TOMPI
          828  +1BE7;N           # Mc         BATAK VOWEL SIGN E
          829  +1BE8..1BE9;N     # Mn     [2] BATAK VOWEL SIGN PAKPAK E..BATAK VOWEL SIGN EE
          830  +1BEA..1BEC;N     # Mc     [3] BATAK VOWEL SIGN I..BATAK VOWEL SIGN O
          831  +1BED;N           # Mn         BATAK VOWEL SIGN KARO O
          832  +1BEE;N           # Mc         BATAK VOWEL SIGN U
          833  +1BEF..1BF1;N     # Mn     [3] BATAK VOWEL SIGN U FOR SIMALUNGUN SA..BATAK CONSONANT SIGN H
          834  +1BF2..1BF3;N     # Mc     [2] BATAK PANGOLAT..BATAK PANONGONAN
          835  +1BFC..1BFF;N     # Po     [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT
          836  +1C00..1C23;N     # Lo    [36] LEPCHA LETTER KA..LEPCHA LETTER A
          837  +1C24..1C2B;N     # Mc     [8] LEPCHA SUBJOINED LETTER YA..LEPCHA VOWEL SIGN UU
          838  +1C2C..1C33;N     # Mn     [8] LEPCHA VOWEL SIGN E..LEPCHA CONSONANT SIGN T
          839  +1C34..1C35;N     # Mc     [2] LEPCHA CONSONANT SIGN NYIN-DO..LEPCHA CONSONANT SIGN KANG
          840  +1C36..1C37;N     # Mn     [2] LEPCHA SIGN RAN..LEPCHA SIGN NUKTA
          841  +1C3B..1C3F;N     # Po     [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK
          842  +1C40..1C49;N     # Nd    [10] LEPCHA DIGIT ZERO..LEPCHA DIGIT NINE
          843  +1C4D..1C4F;N     # Lo     [3] LEPCHA LETTER TTA..LEPCHA LETTER DDA
          844  +1C50..1C59;N     # Nd    [10] OL CHIKI DIGIT ZERO..OL CHIKI DIGIT NINE
          845  +1C5A..1C77;N     # Lo    [30] OL CHIKI LETTER LA..OL CHIKI LETTER OH
          846  +1C78..1C7D;N     # Lm     [6] OL CHIKI MU TTUDDAG..OL CHIKI AHAD
          847  +1C7E..1C7F;N     # Po     [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD
          848  +1C80..1C88;N     # Ll     [9] CYRILLIC SMALL LETTER ROUNDED VE..CYRILLIC SMALL LETTER UNBLENDED UK
          849  +1CC0..1CC7;N     # Po     [8] SUNDANESE PUNCTUATION BINDU SURYA..SUNDANESE PUNCTUATION BINDU BA SATANGA
          850  +1CD0..1CD2;N     # Mn     [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA
          851  +1CD3;N           # Po         VEDIC SIGN NIHSHVASA
          852  +1CD4..1CE0;N     # Mn    [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA
          853  +1CE1;N           # Mc         VEDIC TONE ATHARVAVEDIC INDEPENDENT SVARITA
          854  +1CE2..1CE8;N     # Mn     [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL
          855  +1CE9..1CEC;N     # Lo     [4] VEDIC SIGN ANUSVARA ANTARGOMUKHA..VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL
          856  +1CED;N           # Mn         VEDIC SIGN TIRYAK
          857  +1CEE..1CF1;N     # Lo     [4] VEDIC SIGN HEXIFORM LONG ANUSVARA..VEDIC SIGN ANUSVARA UBHAYATO MUKHA
          858  +1CF2..1CF3;N     # Mc     [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA
          859  +1CF4;N           # Mn         VEDIC TONE CANDRA ABOVE
          860  +1CF5..1CF6;N     # Lo     [2] VEDIC SIGN JIHVAMULIYA..VEDIC SIGN UPADHMANIYA
          861  +1CF7;N           # Mc         VEDIC SIGN ATIKRAMA
          862  +1CF8..1CF9;N     # Mn     [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE
          863  +1D00..1D2B;N     # Ll    [44] LATIN LETTER SMALL CAPITAL A..CYRILLIC LETTER SMALL CAPITAL EL
          864  +1D2C..1D6A;N     # Lm    [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI
          865  +1D6B..1D77;N     # Ll    [13] LATIN SMALL LETTER UE..LATIN SMALL LETTER TURNED G
          866  +1D78;N           # Lm         MODIFIER LETTER CYRILLIC EN
          867  +1D79..1D7F;N     # Ll     [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE
          868  +1D80..1D9A;N     # Ll    [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK
          869  +1D9B..1DBF;N     # Lm    [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA
          870  +1DC0..1DF9;N     # Mn    [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW
          871  +1DFB..1DFF;N     # Mn     [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW
          872  +1E00..1EFF;N     # L&   [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP
          873  +1F00..1F15;N     # L&    [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA
          874  +1F18..1F1D;N     # Lu     [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
          875  +1F20..1F45;N     # L&    [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA
          876  +1F48..1F4D;N     # Lu     [6] GREEK CAPITAL LETTER OMICRON WITH PSILI..GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
          877  +1F50..1F57;N     # Ll     [8] GREEK SMALL LETTER UPSILON WITH PSILI..GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI
          878  +1F59;N           # Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA
          879  +1F5B;N           # Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
          880  +1F5D;N           # Lu         GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
          881  +1F5F..1F7D;N     # L&    [31] GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI..GREEK SMALL LETTER OMEGA WITH OXIA
          882  +1F80..1FB4;N     # L&    [53] GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI..GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
          883  +1FB6..1FBC;N     # L&     [7] GREEK SMALL LETTER ALPHA WITH PERISPOMENI..GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
          884  +1FBD;N           # Sk         GREEK KORONIS
          885  +1FBE;N           # Ll         GREEK PROSGEGRAMMENI
          886  +1FBF..1FC1;N     # Sk     [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI
          887  +1FC2..1FC4;N     # Ll     [3] GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
          888  +1FC6..1FCC;N     # L&     [7] GREEK SMALL LETTER ETA WITH PERISPOMENI..GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
          889  +1FCD..1FCF;N     # Sk     [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI
          890  +1FD0..1FD3;N     # Ll     [4] GREEK SMALL LETTER IOTA WITH VRACHY..GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
          891  +1FD6..1FDB;N     # L&     [6] GREEK SMALL LETTER IOTA WITH PERISPOMENI..GREEK CAPITAL LETTER IOTA WITH OXIA
          892  +1FDD..1FDF;N     # Sk     [3] GREEK DASIA AND VARIA..GREEK DASIA AND PERISPOMENI
          893  +1FE0..1FEC;N     # L&    [13] GREEK SMALL LETTER UPSILON WITH VRACHY..GREEK CAPITAL LETTER RHO WITH DASIA
          894  +1FED..1FEF;N     # Sk     [3] GREEK DIALYTIKA AND VARIA..GREEK VARIA
          895  +1FF2..1FF4;N     # Ll     [3] GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI..GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
          896  +1FF6..1FFC;N     # L&     [7] GREEK SMALL LETTER OMEGA WITH PERISPOMENI..GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
          897  +1FFD..1FFE;N     # Sk     [2] GREEK OXIA..GREEK DASIA
          898  +2000..200A;N     # Zs    [11] EN QUAD..HAIR SPACE
          899  +200B..200F;N     # Cf     [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK
          900  +2010;A           # Pd         HYPHEN
          901  +2011..2012;N     # Pd     [2] NON-BREAKING HYPHEN..FIGURE DASH
          902  +2013..2015;A     # Pd     [3] EN DASH..HORIZONTAL BAR
          903  +2016;A           # Po         DOUBLE VERTICAL LINE
          904  +2017;N           # Po         DOUBLE LOW LINE
          905  +2018;A           # Pi         LEFT SINGLE QUOTATION MARK
          906  +2019;A           # Pf         RIGHT SINGLE QUOTATION MARK
          907  +201A;N           # Ps         SINGLE LOW-9 QUOTATION MARK
          908  +201B;N           # Pi         SINGLE HIGH-REVERSED-9 QUOTATION MARK
          909  +201C;A           # Pi         LEFT DOUBLE QUOTATION MARK
          910  +201D;A           # Pf         RIGHT DOUBLE QUOTATION MARK
          911  +201E;N           # Ps         DOUBLE LOW-9 QUOTATION MARK
          912  +201F;N           # Pi         DOUBLE HIGH-REVERSED-9 QUOTATION MARK
          913  +2020..2022;A     # Po     [3] DAGGER..BULLET
          914  +2023;N           # Po         TRIANGULAR BULLET
          915  +2024..2027;A     # Po     [4] ONE DOT LEADER..HYPHENATION POINT
          916  +2028;N           # Zl         LINE SEPARATOR
          917  +2029;N           # Zp         PARAGRAPH SEPARATOR
          918  +202A..202E;N     # Cf     [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE
          919  +202F;N           # Zs         NARROW NO-BREAK SPACE
          920  +2030;A           # Po         PER MILLE SIGN
          921  +2031;N           # Po         PER TEN THOUSAND SIGN
          922  +2032..2033;A     # Po     [2] PRIME..DOUBLE PRIME
          923  +2034;N           # Po         TRIPLE PRIME
          924  +2035;A           # Po         REVERSED PRIME
          925  +2036..2038;N     # Po     [3] REVERSED DOUBLE PRIME..CARET
          926  +2039;N           # Pi         SINGLE LEFT-POINTING ANGLE QUOTATION MARK
          927  +203A;N           # Pf         SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
          928  +203B;A           # Po         REFERENCE MARK
          929  +203C..203D;N     # Po     [2] DOUBLE EXCLAMATION MARK..INTERROBANG
          930  +203E;A           # Po         OVERLINE
          931  +203F..2040;N     # Pc     [2] UNDERTIE..CHARACTER TIE
          932  +2041..2043;N     # Po     [3] CARET INSERTION POINT..HYPHEN BULLET
          933  +2044;N           # Sm         FRACTION SLASH
          934  +2045;N           # Ps         LEFT SQUARE BRACKET WITH QUILL
          935  +2046;N           # Pe         RIGHT SQUARE BRACKET WITH QUILL
          936  +2047..2051;N     # Po    [11] DOUBLE QUESTION MARK..TWO ASTERISKS ALIGNED VERTICALLY
          937  +2052;N           # Sm         COMMERCIAL MINUS SIGN
          938  +2053;N           # Po         SWUNG DASH
          939  +2054;N           # Pc         INVERTED UNDERTIE
          940  +2055..205E;N     # Po    [10] FLOWER PUNCTUATION MARK..VERTICAL FOUR DOTS
          941  +205F;N           # Zs         MEDIUM MATHEMATICAL SPACE
          942  +2060..2064;N     # Cf     [5] WORD JOINER..INVISIBLE PLUS
          943  +2066..206F;N     # Cf    [10] LEFT-TO-RIGHT ISOLATE..NOMINAL DIGIT SHAPES
          944  +2070;N           # No         SUPERSCRIPT ZERO
          945  +2071;N           # Lm         SUPERSCRIPT LATIN SMALL LETTER I
          946  +2074;A           # No         SUPERSCRIPT FOUR
          947  +2075..2079;N     # No     [5] SUPERSCRIPT FIVE..SUPERSCRIPT NINE
          948  +207A..207C;N     # Sm     [3] SUPERSCRIPT PLUS SIGN..SUPERSCRIPT EQUALS SIGN
          949  +207D;N           # Ps         SUPERSCRIPT LEFT PARENTHESIS
          950  +207E;N           # Pe         SUPERSCRIPT RIGHT PARENTHESIS
          951  +207F;A           # Lm         SUPERSCRIPT LATIN SMALL LETTER N
          952  +2080;N           # No         SUBSCRIPT ZERO
          953  +2081..2084;A     # No     [4] SUBSCRIPT ONE..SUBSCRIPT FOUR
          954  +2085..2089;N     # No     [5] SUBSCRIPT FIVE..SUBSCRIPT NINE
          955  +208A..208C;N     # Sm     [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN
          956  +208D;N           # Ps         SUBSCRIPT LEFT PARENTHESIS
          957  +208E;N           # Pe         SUBSCRIPT RIGHT PARENTHESIS
          958  +2090..209C;N     # Lm    [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T
          959  +20A0..20A8;N     # Sc     [9] EURO-CURRENCY SIGN..RUPEE SIGN
          960  +20A9;H           # Sc         WON SIGN
          961  +20AA..20AB;N     # Sc     [2] NEW SHEQEL SIGN..DONG SIGN
          962  +20AC;A           # Sc         EURO SIGN
          963  +20AD..20BF;N     # Sc    [19] KIP SIGN..BITCOIN SIGN
          964  +20D0..20DC;N     # Mn    [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE
          965  +20DD..20E0;N     # Me     [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH
          966  +20E1;N           # Mn         COMBINING LEFT RIGHT ARROW ABOVE
          967  +20E2..20E4;N     # Me     [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE
          968  +20E5..20F0;N     # Mn    [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE
          969  +2100..2101;N     # So     [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT
          970  +2102;N           # Lu         DOUBLE-STRUCK CAPITAL C
          971  +2103;A           # So         DEGREE CELSIUS
          972  +2104;N           # So         CENTRE LINE SYMBOL
          973  +2105;A           # So         CARE OF
          974  +2106;N           # So         CADA UNA
          975  +2107;N           # Lu         EULER CONSTANT
          976  +2108;N           # So         SCRUPLE
          977  +2109;A           # So         DEGREE FAHRENHEIT
          978  +210A..2112;N     # L&     [9] SCRIPT SMALL G..SCRIPT CAPITAL L
          979  +2113;A           # Ll         SCRIPT SMALL L
          980  +2114;N           # So         L B BAR SYMBOL
          981  +2115;N           # Lu         DOUBLE-STRUCK CAPITAL N
          982  +2116;A           # So         NUMERO SIGN
          983  +2117;N           # So         SOUND RECORDING COPYRIGHT
          984  +2118;N           # Sm         SCRIPT CAPITAL P
          985  +2119..211D;N     # Lu     [5] DOUBLE-STRUCK CAPITAL P..DOUBLE-STRUCK CAPITAL R
          986  +211E..2120;N     # So     [3] PRESCRIPTION TAKE..SERVICE MARK
          987  +2121..2122;A     # So     [2] TELEPHONE SIGN..TRADE MARK SIGN
          988  +2123;N           # So         VERSICLE
          989  +2124;N           # Lu         DOUBLE-STRUCK CAPITAL Z
          990  +2125;N           # So         OUNCE SIGN
          991  +2126;A           # Lu         OHM SIGN
          992  +2127;N           # So         INVERTED OHM SIGN
          993  +2128;N           # Lu         BLACK-LETTER CAPITAL Z
          994  +2129;N           # So         TURNED GREEK SMALL LETTER IOTA
          995  +212A;N           # Lu         KELVIN SIGN
          996  +212B;A           # Lu         ANGSTROM SIGN
          997  +212C..212D;N     # Lu     [2] SCRIPT CAPITAL B..BLACK-LETTER CAPITAL C
          998  +212E;N           # So         ESTIMATED SYMBOL
          999  +212F..2134;N     # L&     [6] SCRIPT SMALL E..SCRIPT SMALL O
         1000  +2135..2138;N     # Lo     [4] ALEF SYMBOL..DALET SYMBOL
         1001  +2139;N           # Ll         INFORMATION SOURCE
         1002  +213A..213B;N     # So     [2] ROTATED CAPITAL Q..FACSIMILE SIGN
         1003  +213C..213F;N     # L&     [4] DOUBLE-STRUCK SMALL PI..DOUBLE-STRUCK CAPITAL PI
         1004  +2140..2144;N     # Sm     [5] DOUBLE-STRUCK N-ARY SUMMATION..TURNED SANS-SERIF CAPITAL Y
         1005  +2145..2149;N     # L&     [5] DOUBLE-STRUCK ITALIC CAPITAL D..DOUBLE-STRUCK ITALIC SMALL J
         1006  +214A;N           # So         PROPERTY LINE
         1007  +214B;N           # Sm         TURNED AMPERSAND
         1008  +214C..214D;N     # So     [2] PER SIGN..AKTIESELSKAB
         1009  +214E;N           # Ll         TURNED SMALL F
         1010  +214F;N           # So         SYMBOL FOR SAMARITAN SOURCE
         1011  +2150..2152;N     # No     [3] VULGAR FRACTION ONE SEVENTH..VULGAR FRACTION ONE TENTH
         1012  +2153..2154;A     # No     [2] VULGAR FRACTION ONE THIRD..VULGAR FRACTION TWO THIRDS
         1013  +2155..215A;N     # No     [6] VULGAR FRACTION ONE FIFTH..VULGAR FRACTION FIVE SIXTHS
         1014  +215B..215E;A     # No     [4] VULGAR FRACTION ONE EIGHTH..VULGAR FRACTION SEVEN EIGHTHS
         1015  +215F;N           # No         FRACTION NUMERATOR ONE
         1016  +2160..216B;A     # Nl    [12] ROMAN NUMERAL ONE..ROMAN NUMERAL TWELVE
         1017  +216C..216F;N     # Nl     [4] ROMAN NUMERAL FIFTY..ROMAN NUMERAL ONE THOUSAND
         1018  +2170..2179;A     # Nl    [10] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL TEN
         1019  +217A..2182;N     # Nl     [9] SMALL ROMAN NUMERAL ELEVEN..ROMAN NUMERAL TEN THOUSAND
         1020  +2183..2184;N     # L&     [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C
         1021  +2185..2188;N     # Nl     [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND
         1022  +2189;A           # No         VULGAR FRACTION ZERO THIRDS
         1023  +218A..218B;N     # So     [2] TURNED DIGIT TWO..TURNED DIGIT THREE
         1024  +2190..2194;A     # Sm     [5] LEFTWARDS ARROW..LEFT RIGHT ARROW
         1025  +2195..2199;A     # So     [5] UP DOWN ARROW..SOUTH WEST ARROW
         1026  +219A..219B;N     # Sm     [2] LEFTWARDS ARROW WITH STROKE..RIGHTWARDS ARROW WITH STROKE
         1027  +219C..219F;N     # So     [4] LEFTWARDS WAVE ARROW..UPWARDS TWO HEADED ARROW
         1028  +21A0;N           # Sm         RIGHTWARDS TWO HEADED ARROW
         1029  +21A1..21A2;N     # So     [2] DOWNWARDS TWO HEADED ARROW..LEFTWARDS ARROW WITH TAIL
         1030  +21A3;N           # Sm         RIGHTWARDS ARROW WITH TAIL
         1031  +21A4..21A5;N     # So     [2] LEFTWARDS ARROW FROM BAR..UPWARDS ARROW FROM BAR
         1032  +21A6;N           # Sm         RIGHTWARDS ARROW FROM BAR
         1033  +21A7..21AD;N     # So     [7] DOWNWARDS ARROW FROM BAR..LEFT RIGHT WAVE ARROW
         1034  +21AE;N           # Sm         LEFT RIGHT ARROW WITH STROKE
         1035  +21AF..21B7;N     # So     [9] DOWNWARDS ZIGZAG ARROW..CLOCKWISE TOP SEMICIRCLE ARROW
         1036  +21B8..21B9;A     # So     [2] NORTH WEST ARROW TO LONG BAR..LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
         1037  +21BA..21CD;N     # So    [20] ANTICLOCKWISE OPEN CIRCLE ARROW..LEFTWARDS DOUBLE ARROW WITH STROKE
         1038  +21CE..21CF;N     # Sm     [2] LEFT RIGHT DOUBLE ARROW WITH STROKE..RIGHTWARDS DOUBLE ARROW WITH STROKE
         1039  +21D0..21D1;N     # So     [2] LEFTWARDS DOUBLE ARROW..UPWARDS DOUBLE ARROW
         1040  +21D2;A           # Sm         RIGHTWARDS DOUBLE ARROW
         1041  +21D3;N           # So         DOWNWARDS DOUBLE ARROW
         1042  +21D4;A           # Sm         LEFT RIGHT DOUBLE ARROW
         1043  +21D5..21E6;N     # So    [18] UP DOWN DOUBLE ARROW..LEFTWARDS WHITE ARROW
         1044  +21E7;A           # So         UPWARDS WHITE ARROW
         1045  +21E8..21F3;N     # So    [12] RIGHTWARDS WHITE ARROW..UP DOWN WHITE ARROW
         1046  +21F4..21FF;N     # Sm    [12] RIGHT ARROW WITH SMALL CIRCLE..LEFT RIGHT OPEN-HEADED ARROW
         1047  +2200;A           # Sm         FOR ALL
         1048  +2201;N           # Sm         COMPLEMENT
         1049  +2202..2203;A     # Sm     [2] PARTIAL DIFFERENTIAL..THERE EXISTS
         1050  +2204..2206;N     # Sm     [3] THERE DOES NOT EXIST..INCREMENT
         1051  +2207..2208;A     # Sm     [2] NABLA..ELEMENT OF
         1052  +2209..220A;N     # Sm     [2] NOT AN ELEMENT OF..SMALL ELEMENT OF
         1053  +220B;A           # Sm         CONTAINS AS MEMBER
         1054  +220C..220E;N     # Sm     [3] DOES NOT CONTAIN AS MEMBER..END OF PROOF
         1055  +220F;A           # Sm         N-ARY PRODUCT
         1056  +2210;N           # Sm         N-ARY COPRODUCT
         1057  +2211;A           # Sm         N-ARY SUMMATION
         1058  +2212..2214;N     # Sm     [3] MINUS SIGN..DOT PLUS
         1059  +2215;A           # Sm         DIVISION SLASH
         1060  +2216..2219;N     # Sm     [4] SET MINUS..BULLET OPERATOR
         1061  +221A;A           # Sm         SQUARE ROOT
         1062  +221B..221C;N     # Sm     [2] CUBE ROOT..FOURTH ROOT
         1063  +221D..2220;A     # Sm     [4] PROPORTIONAL TO..ANGLE
         1064  +2221..2222;N     # Sm     [2] MEASURED ANGLE..SPHERICAL ANGLE
         1065  +2223;A           # Sm         DIVIDES
         1066  +2224;N           # Sm         DOES NOT DIVIDE
         1067  +2225;A           # Sm         PARALLEL TO
         1068  +2226;N           # Sm         NOT PARALLEL TO
         1069  +2227..222C;A     # Sm     [6] LOGICAL AND..DOUBLE INTEGRAL
         1070  +222D;N           # Sm         TRIPLE INTEGRAL
         1071  +222E;A           # Sm         CONTOUR INTEGRAL
         1072  +222F..2233;N     # Sm     [5] SURFACE INTEGRAL..ANTICLOCKWISE CONTOUR INTEGRAL
         1073  +2234..2237;A     # Sm     [4] THEREFORE..PROPORTION
         1074  +2238..223B;N     # Sm     [4] DOT MINUS..HOMOTHETIC
         1075  +223C..223D;A     # Sm     [2] TILDE OPERATOR..REVERSED TILDE
         1076  +223E..2247;N     # Sm    [10] INVERTED LAZY S..NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
         1077  +2248;A           # Sm         ALMOST EQUAL TO
         1078  +2249..224B;N     # Sm     [3] NOT ALMOST EQUAL TO..TRIPLE TILDE
         1079  +224C;A           # Sm         ALL EQUAL TO
         1080  +224D..2251;N     # Sm     [5] EQUIVALENT TO..GEOMETRICALLY EQUAL TO
         1081  +2252;A           # Sm         APPROXIMATELY EQUAL TO OR THE IMAGE OF
         1082  +2253..225F;N     # Sm    [13] IMAGE OF OR APPROXIMATELY EQUAL TO..QUESTIONED EQUAL TO
         1083  +2260..2261;A     # Sm     [2] NOT EQUAL TO..IDENTICAL TO
         1084  +2262..2263;N     # Sm     [2] NOT IDENTICAL TO..STRICTLY EQUIVALENT TO
         1085  +2264..2267;A     # Sm     [4] LESS-THAN OR EQUAL TO..GREATER-THAN OVER EQUAL TO
         1086  +2268..2269;N     # Sm     [2] LESS-THAN BUT NOT EQUAL TO..GREATER-THAN BUT NOT EQUAL TO
         1087  +226A..226B;A     # Sm     [2] MUCH LESS-THAN..MUCH GREATER-THAN
         1088  +226C..226D;N     # Sm     [2] BETWEEN..NOT EQUIVALENT TO
         1089  +226E..226F;A     # Sm     [2] NOT LESS-THAN..NOT GREATER-THAN
         1090  +2270..2281;N     # Sm    [18] NEITHER LESS-THAN NOR EQUAL TO..DOES NOT SUCCEED
         1091  +2282..2283;A     # Sm     [2] SUBSET OF..SUPERSET OF
         1092  +2284..2285;N     # Sm     [2] NOT A SUBSET OF..NOT A SUPERSET OF
         1093  +2286..2287;A     # Sm     [2] SUBSET OF OR EQUAL TO..SUPERSET OF OR EQUAL TO
         1094  +2288..2294;N     # Sm    [13] NEITHER A SUBSET OF NOR EQUAL TO..SQUARE CUP
         1095  +2295;A           # Sm         CIRCLED PLUS
         1096  +2296..2298;N     # Sm     [3] CIRCLED MINUS..CIRCLED DIVISION SLASH
         1097  +2299;A           # Sm         CIRCLED DOT OPERATOR
         1098  +229A..22A4;N     # Sm    [11] CIRCLED RING OPERATOR..DOWN TACK
         1099  +22A5;A           # Sm         UP TACK
         1100  +22A6..22BE;N     # Sm    [25] ASSERTION..RIGHT ANGLE WITH ARC
         1101  +22BF;A           # Sm         RIGHT TRIANGLE
         1102  +22C0..22FF;N     # Sm    [64] N-ARY LOGICAL AND..Z NOTATION BAG MEMBERSHIP
         1103  +2300..2307;N     # So     [8] DIAMETER SIGN..WAVY LINE
         1104  +2308;N           # Ps         LEFT CEILING
         1105  +2309;N           # Pe         RIGHT CEILING
         1106  +230A;N           # Ps         LEFT FLOOR
         1107  +230B;N           # Pe         RIGHT FLOOR
         1108  +230C..2311;N     # So     [6] BOTTOM RIGHT CROP..SQUARE LOZENGE
         1109  +2312;A           # So         ARC
         1110  +2313..2319;N     # So     [7] SEGMENT..TURNED NOT SIGN
         1111  +231A..231B;W     # So     [2] WATCH..HOURGLASS
         1112  +231C..231F;N     # So     [4] TOP LEFT CORNER..BOTTOM RIGHT CORNER
         1113  +2320..2321;N     # Sm     [2] TOP HALF INTEGRAL..BOTTOM HALF INTEGRAL
         1114  +2322..2328;N     # So     [7] FROWN..KEYBOARD
         1115  +2329;W           # Ps         LEFT-POINTING ANGLE BRACKET
         1116  +232A;W           # Pe         RIGHT-POINTING ANGLE BRACKET
         1117  +232B..237B;N     # So    [81] ERASE TO THE LEFT..NOT CHECK MARK
         1118  +237C;N           # Sm         RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW
         1119  +237D..239A;N     # So    [30] SHOULDERED OPEN BOX..CLEAR SCREEN SYMBOL
         1120  +239B..23B3;N     # Sm    [25] LEFT PARENTHESIS UPPER HOOK..SUMMATION BOTTOM
         1121  +23B4..23DB;N     # So    [40] TOP SQUARE BRACKET..FUSE
         1122  +23DC..23E1;N     # Sm     [6] TOP PARENTHESIS..BOTTOM TORTOISE SHELL BRACKET
         1123  +23E2..23E8;N     # So     [7] WHITE TRAPEZIUM..DECIMAL EXPONENT SYMBOL
         1124  +23E9..23EC;W     # So     [4] BLACK RIGHT-POINTING DOUBLE TRIANGLE..BLACK DOWN-POINTING DOUBLE TRIANGLE
         1125  +23ED..23EF;N     # So     [3] BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR..BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR
         1126  +23F0;W           # So         ALARM CLOCK
         1127  +23F1..23F2;N     # So     [2] STOPWATCH..TIMER CLOCK
         1128  +23F3;W           # So         HOURGLASS WITH FLOWING SAND
         1129  +23F4..23FF;N     # So    [12] BLACK MEDIUM LEFT-POINTING TRIANGLE..OBSERVER EYE SYMBOL
         1130  +2400..2426;N     # So    [39] SYMBOL FOR NULL..SYMBOL FOR SUBSTITUTE FORM TWO
         1131  +2440..244A;N     # So    [11] OCR HOOK..OCR DOUBLE BACKSLASH
         1132  +2460..249B;A     # No    [60] CIRCLED DIGIT ONE..NUMBER TWENTY FULL STOP
         1133  +249C..24E9;A     # So    [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z
         1134  +24EA;N           # No         CIRCLED DIGIT ZERO
         1135  +24EB..24FF;A     # No    [21] NEGATIVE CIRCLED NUMBER ELEVEN..NEGATIVE CIRCLED DIGIT ZERO
         1136  +2500..254B;A     # So    [76] BOX DRAWINGS LIGHT HORIZONTAL..BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
         1137  +254C..254F;N     # So     [4] BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL..BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL
         1138  +2550..2573;A     # So    [36] BOX DRAWINGS DOUBLE HORIZONTAL..BOX DRAWINGS LIGHT DIAGONAL CROSS
         1139  +2574..257F;N     # So    [12] BOX DRAWINGS LIGHT LEFT..BOX DRAWINGS HEAVY UP AND LIGHT DOWN
         1140  +2580..258F;A     # So    [16] UPPER HALF BLOCK..LEFT ONE EIGHTH BLOCK
         1141  +2590..2591;N     # So     [2] RIGHT HALF BLOCK..LIGHT SHADE
         1142  +2592..2595;A     # So     [4] MEDIUM SHADE..RIGHT ONE EIGHTH BLOCK
         1143  +2596..259F;N     # So    [10] QUADRANT LOWER LEFT..QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT
         1144  +25A0..25A1;A     # So     [2] BLACK SQUARE..WHITE SQUARE
         1145  +25A2;N           # So         WHITE SQUARE WITH ROUNDED CORNERS
         1146  +25A3..25A9;A     # So     [7] WHITE SQUARE CONTAINING BLACK SMALL SQUARE..SQUARE WITH DIAGONAL CROSSHATCH FILL
         1147  +25AA..25B1;N     # So     [8] BLACK SMALL SQUARE..WHITE PARALLELOGRAM
         1148  +25B2..25B3;A     # So     [2] BLACK UP-POINTING TRIANGLE..WHITE UP-POINTING TRIANGLE
         1149  +25B4..25B5;N     # So     [2] BLACK UP-POINTING SMALL TRIANGLE..WHITE UP-POINTING SMALL TRIANGLE
         1150  +25B6;A           # So         BLACK RIGHT-POINTING TRIANGLE
         1151  +25B7;A           # Sm         WHITE RIGHT-POINTING TRIANGLE
         1152  +25B8..25BB;N     # So     [4] BLACK RIGHT-POINTING SMALL TRIANGLE..WHITE RIGHT-POINTING POINTER
         1153  +25BC..25BD;A     # So     [2] BLACK DOWN-POINTING TRIANGLE..WHITE DOWN-POINTING TRIANGLE
         1154  +25BE..25BF;N     # So     [2] BLACK DOWN-POINTING SMALL TRIANGLE..WHITE DOWN-POINTING SMALL TRIANGLE
         1155  +25C0;A           # So         BLACK LEFT-POINTING TRIANGLE
         1156  +25C1;A           # Sm         WHITE LEFT-POINTING TRIANGLE
         1157  +25C2..25C5;N     # So     [4] BLACK LEFT-POINTING SMALL TRIANGLE..WHITE LEFT-POINTING POINTER
         1158  +25C6..25C8;A     # So     [3] BLACK DIAMOND..WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
         1159  +25C9..25CA;N     # So     [2] FISHEYE..LOZENGE
         1160  +25CB;A           # So         WHITE CIRCLE
         1161  +25CC..25CD;N     # So     [2] DOTTED CIRCLE..CIRCLE WITH VERTICAL FILL
         1162  +25CE..25D1;A     # So     [4] BULLSEYE..CIRCLE WITH RIGHT HALF BLACK
         1163  +25D2..25E1;N     # So    [16] CIRCLE WITH LOWER HALF BLACK..LOWER HALF CIRCLE
         1164  +25E2..25E5;A     # So     [4] BLACK LOWER RIGHT TRIANGLE..BLACK UPPER RIGHT TRIANGLE
         1165  +25E6..25EE;N     # So     [9] WHITE BULLET..UP-POINTING TRIANGLE WITH RIGHT HALF BLACK
         1166  +25EF;A           # So         LARGE CIRCLE
         1167  +25F0..25F7;N     # So     [8] WHITE SQUARE WITH UPPER LEFT QUADRANT..WHITE CIRCLE WITH UPPER RIGHT QUADRANT
         1168  +25F8..25FC;N     # Sm     [5] UPPER LEFT TRIANGLE..BLACK MEDIUM SQUARE
         1169  +25FD..25FE;W     # Sm     [2] WHITE MEDIUM SMALL SQUARE..BLACK MEDIUM SMALL SQUARE
         1170  +25FF;N           # Sm         LOWER RIGHT TRIANGLE
         1171  +2600..2604;N     # So     [5] BLACK SUN WITH RAYS..COMET
         1172  +2605..2606;A     # So     [2] BLACK STAR..WHITE STAR
         1173  +2607..2608;N     # So     [2] LIGHTNING..THUNDERSTORM
         1174  +2609;A           # So         SUN
         1175  +260A..260D;N     # So     [4] ASCENDING NODE..OPPOSITION
         1176  +260E..260F;A     # So     [2] BLACK TELEPHONE..WHITE TELEPHONE
         1177  +2610..2613;N     # So     [4] BALLOT BOX..SALTIRE
         1178  +2614..2615;W     # So     [2] UMBRELLA WITH RAIN DROPS..HOT BEVERAGE
         1179  +2616..261B;N     # So     [6] WHITE SHOGI PIECE..BLACK RIGHT POINTING INDEX
         1180  +261C;A           # So         WHITE LEFT POINTING INDEX
         1181  +261D;N           # So         WHITE UP POINTING INDEX
         1182  +261E;A           # So         WHITE RIGHT POINTING INDEX
         1183  +261F..263F;N     # So    [33] WHITE DOWN POINTING INDEX..MERCURY
         1184  +2640;A           # So         FEMALE SIGN
         1185  +2641;N           # So         EARTH
         1186  +2642;A           # So         MALE SIGN
         1187  +2643..2647;N     # So     [5] JUPITER..PLUTO
         1188  +2648..2653;W     # So    [12] ARIES..PISCES
         1189  +2654..265F;N     # So    [12] WHITE CHESS KING..BLACK CHESS PAWN
         1190  +2660..2661;A     # So     [2] BLACK SPADE SUIT..WHITE HEART SUIT
         1191  +2662;N           # So         WHITE DIAMOND SUIT
         1192  +2663..2665;A     # So     [3] BLACK CLUB SUIT..BLACK HEART SUIT
         1193  +2666;N           # So         BLACK DIAMOND SUIT
         1194  +2667..266A;A     # So     [4] WHITE CLUB SUIT..EIGHTH NOTE
         1195  +266B;N           # So         BEAMED EIGHTH NOTES
         1196  +266C..266D;A     # So     [2] BEAMED SIXTEENTH NOTES..MUSIC FLAT SIGN
         1197  +266E;N           # So         MUSIC NATURAL SIGN
         1198  +266F;A           # Sm         MUSIC SHARP SIGN
         1199  +2670..267E;N     # So    [15] WEST SYRIAC CROSS..PERMANENT PAPER SIGN
         1200  +267F;W           # So         WHEELCHAIR SYMBOL
         1201  +2680..2692;N     # So    [19] DIE FACE-1..HAMMER AND PICK
         1202  +2693;W           # So         ANCHOR
         1203  +2694..269D;N     # So    [10] CROSSED SWORDS..OUTLINED WHITE STAR
         1204  +269E..269F;A     # So     [2] THREE LINES CONVERGING RIGHT..THREE LINES CONVERGING LEFT
         1205  +26A0;N           # So         WARNING SIGN
         1206  +26A1;W           # So         HIGH VOLTAGE SIGN
         1207  +26A2..26A9;N     # So     [8] DOUBLED FEMALE SIGN..HORIZONTAL MALE WITH STROKE SIGN
         1208  +26AA..26AB;W     # So     [2] MEDIUM WHITE CIRCLE..MEDIUM BLACK CIRCLE
         1209  +26AC..26BC;N     # So    [17] MEDIUM SMALL WHITE CIRCLE..SESQUIQUADRATE
         1210  +26BD..26BE;W     # So     [2] SOCCER BALL..BASEBALL
         1211  +26BF;A           # So         SQUARED KEY
         1212  +26C0..26C3;N     # So     [4] WHITE DRAUGHTS MAN..BLACK DRAUGHTS KING
         1213  +26C4..26C5;W     # So     [2] SNOWMAN WITHOUT SNOW..SUN BEHIND CLOUD
         1214  +26C6..26CD;A     # So     [8] RAIN..DISABLED CAR
         1215  +26CE;W           # So         OPHIUCHUS
         1216  +26CF..26D3;A     # So     [5] PICK..CHAINS
         1217  +26D4;W           # So         NO ENTRY
         1218  +26D5..26E1;A     # So    [13] ALTERNATE ONE-WAY LEFT WAY TRAFFIC..RESTRICTED LEFT ENTRY-2
         1219  +26E2;N           # So         ASTRONOMICAL SYMBOL FOR URANUS
         1220  +26E3;A           # So         HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE
         1221  +26E4..26E7;N     # So     [4] PENTAGRAM..INVERTED PENTAGRAM
         1222  +26E8..26E9;A     # So     [2] BLACK CROSS ON SHIELD..SHINTO SHRINE
         1223  +26EA;W           # So         CHURCH
         1224  +26EB..26F1;A     # So     [7] CASTLE..UMBRELLA ON GROUND
         1225  +26F2..26F3;W     # So     [2] FOUNTAIN..FLAG IN HOLE
         1226  +26F4;A           # So         FERRY
         1227  +26F5;W           # So         SAILBOAT
         1228  +26F6..26F9;A     # So     [4] SQUARE FOUR CORNERS..PERSON WITH BALL
         1229  +26FA;W           # So         TENT
         1230  +26FB..26FC;A     # So     [2] JAPANESE BANK SYMBOL..HEADSTONE GRAVEYARD SYMBOL
         1231  +26FD;W           # So         FUEL PUMP
         1232  +26FE..26FF;A     # So     [2] CUP ON BLACK SQUARE..WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE
         1233  +2700..2704;N     # So     [5] BLACK SAFETY SCISSORS..WHITE SCISSORS
         1234  +2705;W           # So         WHITE HEAVY CHECK MARK
         1235  +2706..2709;N     # So     [4] TELEPHONE LOCATION SIGN..ENVELOPE
         1236  +270A..270B;W     # So     [2] RAISED FIST..RAISED HAND
         1237  +270C..2727;N     # So    [28] VICTORY HAND..WHITE FOUR POINTED STAR
         1238  +2728;W           # So         SPARKLES
         1239  +2729..273C;N     # So    [20] STRESS OUTLINED WHITE STAR..OPEN CENTRE TEARDROP-SPOKED ASTERISK
         1240  +273D;A           # So         HEAVY TEARDROP-SPOKED ASTERISK
         1241  +273E..274B;N     # So    [14] SIX PETALLED BLACK AND WHITE FLORETTE..HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK
         1242  +274C;W           # So         CROSS MARK
         1243  +274D;N           # So         SHADOWED WHITE CIRCLE
         1244  +274E;W           # So         NEGATIVE SQUARED CROSS MARK
         1245  +274F..2752;N     # So     [4] LOWER RIGHT DROP-SHADOWED WHITE SQUARE..UPPER RIGHT SHADOWED WHITE SQUARE
         1246  +2753..2755;W     # So     [3] BLACK QUESTION MARK ORNAMENT..WHITE EXCLAMATION MARK ORNAMENT
         1247  +2756;N           # So         BLACK DIAMOND MINUS WHITE X
         1248  +2757;W           # So         HEAVY EXCLAMATION MARK SYMBOL
         1249  +2758..2767;N     # So    [16] LIGHT VERTICAL BAR..ROTATED FLORAL HEART BULLET
         1250  +2768;N           # Ps         MEDIUM LEFT PARENTHESIS ORNAMENT
         1251  +2769;N           # Pe         MEDIUM RIGHT PARENTHESIS ORNAMENT
         1252  +276A;N           # Ps         MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
         1253  +276B;N           # Pe         MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
         1254  +276C;N           # Ps         MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
         1255  +276D;N           # Pe         MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
         1256  +276E;N           # Ps         HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
         1257  +276F;N           # Pe         HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
         1258  +2770;N           # Ps         HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
         1259  +2771;N           # Pe         HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
         1260  +2772;N           # Ps         LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
         1261  +2773;N           # Pe         LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
         1262  +2774;N           # Ps         MEDIUM LEFT CURLY BRACKET ORNAMENT
         1263  +2775;N           # Pe         MEDIUM RIGHT CURLY BRACKET ORNAMENT
         1264  +2776..277F;A     # No    [10] DINGBAT NEGATIVE CIRCLED DIGIT ONE..DINGBAT NEGATIVE CIRCLED NUMBER TEN
         1265  +2780..2793;N     # No    [20] DINGBAT CIRCLED SANS-SERIF DIGIT ONE..DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN
         1266  +2794;N           # So         HEAVY WIDE-HEADED RIGHTWARDS ARROW
         1267  +2795..2797;W     # So     [3] HEAVY PLUS SIGN..HEAVY DIVISION SIGN
         1268  +2798..27AF;N     # So    [24] HEAVY SOUTH EAST ARROW..NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW
         1269  +27B0;W           # So         CURLY LOOP
         1270  +27B1..27BE;N     # So    [14] NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW..OPEN-OUTLINED RIGHTWARDS ARROW
         1271  +27BF;W           # So         DOUBLE CURLY LOOP
         1272  +27C0..27C4;N     # Sm     [5] THREE DIMENSIONAL ANGLE..OPEN SUPERSET
         1273  +27C5;N           # Ps         LEFT S-SHAPED BAG DELIMITER
         1274  +27C6;N           # Pe         RIGHT S-SHAPED BAG DELIMITER
         1275  +27C7..27E5;N     # Sm    [31] OR WITH DOT INSIDE..WHITE SQUARE WITH RIGHTWARDS TICK
         1276  +27E6;Na          # Ps         MATHEMATICAL LEFT WHITE SQUARE BRACKET
         1277  +27E7;Na          # Pe         MATHEMATICAL RIGHT WHITE SQUARE BRACKET
         1278  +27E8;Na          # Ps         MATHEMATICAL LEFT ANGLE BRACKET
         1279  +27E9;Na          # Pe         MATHEMATICAL RIGHT ANGLE BRACKET
         1280  +27EA;Na          # Ps         MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
         1281  +27EB;Na          # Pe         MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
         1282  +27EC;Na          # Ps         MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
         1283  +27ED;Na          # Pe         MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
         1284  +27EE;N           # Ps         MATHEMATICAL LEFT FLATTENED PARENTHESIS
         1285  +27EF;N           # Pe         MATHEMATICAL RIGHT FLATTENED PARENTHESIS
         1286  +27F0..27FF;N     # Sm    [16] UPWARDS QUADRUPLE ARROW..LONG RIGHTWARDS SQUIGGLE ARROW
         1287  +2800..28FF;N     # So   [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678
         1288  +2900..297F;N     # Sm   [128] RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE..DOWN FISH TAIL
         1289  +2980..2982;N     # Sm     [3] TRIPLE VERTICAL BAR DELIMITER..Z NOTATION TYPE COLON
         1290  +2983;N           # Ps         LEFT WHITE CURLY BRACKET
         1291  +2984;N           # Pe         RIGHT WHITE CURLY BRACKET
         1292  +2985;Na          # Ps         LEFT WHITE PARENTHESIS
         1293  +2986;Na          # Pe         RIGHT WHITE PARENTHESIS
         1294  +2987;N           # Ps         Z NOTATION LEFT IMAGE BRACKET
         1295  +2988;N           # Pe         Z NOTATION RIGHT IMAGE BRACKET
         1296  +2989;N           # Ps         Z NOTATION LEFT BINDING BRACKET
         1297  +298A;N           # Pe         Z NOTATION RIGHT BINDING BRACKET
         1298  +298B;N           # Ps         LEFT SQUARE BRACKET WITH UNDERBAR
         1299  +298C;N           # Pe         RIGHT SQUARE BRACKET WITH UNDERBAR
         1300  +298D;N           # Ps         LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
         1301  +298E;N           # Pe         RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
         1302  +298F;N           # Ps         LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
         1303  +2990;N           # Pe         RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
         1304  +2991;N           # Ps         LEFT ANGLE BRACKET WITH DOT
         1305  +2992;N           # Pe         RIGHT ANGLE BRACKET WITH DOT
         1306  +2993;N           # Ps         LEFT ARC LESS-THAN BRACKET
         1307  +2994;N           # Pe         RIGHT ARC GREATER-THAN BRACKET
         1308  +2995;N           # Ps         DOUBLE LEFT ARC GREATER-THAN BRACKET
         1309  +2996;N           # Pe         DOUBLE RIGHT ARC LESS-THAN BRACKET
         1310  +2997;N           # Ps         LEFT BLACK TORTOISE SHELL BRACKET
         1311  +2998;N           # Pe         RIGHT BLACK TORTOISE SHELL BRACKET
         1312  +2999..29D7;N     # Sm    [63] DOTTED FENCE..BLACK HOURGLASS
         1313  +29D8;N           # Ps         LEFT WIGGLY FENCE
         1314  +29D9;N           # Pe         RIGHT WIGGLY FENCE
         1315  +29DA;N           # Ps         LEFT DOUBLE WIGGLY FENCE
         1316  +29DB;N           # Pe         RIGHT DOUBLE WIGGLY FENCE
         1317  +29DC..29FB;N     # Sm    [32] INCOMPLETE INFINITY..TRIPLE PLUS
         1318  +29FC;N           # Ps         LEFT-POINTING CURVED ANGLE BRACKET
         1319  +29FD;N           # Pe         RIGHT-POINTING CURVED ANGLE BRACKET
         1320  +29FE..29FF;N     # Sm     [2] TINY..MINY
         1321  +2A00..2AFF;N     # Sm   [256] N-ARY CIRCLED DOT OPERATOR..N-ARY WHITE VERTICAL BAR
         1322  +2B00..2B1A;N     # So    [27] NORTH EAST WHITE ARROW..DOTTED SQUARE
         1323  +2B1B..2B1C;W     # So     [2] BLACK LARGE SQUARE..WHITE LARGE SQUARE
         1324  +2B1D..2B2F;N     # So    [19] BLACK VERY SMALL SQUARE..WHITE VERTICAL ELLIPSE
         1325  +2B30..2B44;N     # Sm    [21] LEFT ARROW WITH SMALL CIRCLE..RIGHTWARDS ARROW THROUGH SUPERSET
         1326  +2B45..2B46;N     # So     [2] LEFTWARDS QUADRUPLE ARROW..RIGHTWARDS QUADRUPLE ARROW
         1327  +2B47..2B4C;N     # Sm     [6] REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW..RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR
         1328  +2B4D..2B4F;N     # So     [3] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..SHORT BACKSLANTED SOUTH ARROW
         1329  +2B50;W           # So         WHITE MEDIUM STAR
         1330  +2B51..2B54;N     # So     [4] BLACK SMALL STAR..WHITE RIGHT-POINTING PENTAGON
         1331  +2B55;W           # So         HEAVY LARGE CIRCLE
         1332  +2B56..2B59;A     # So     [4] HEAVY OVAL WITH OVAL INSIDE..HEAVY CIRCLED SALTIRE
         1333  +2B5A..2B73;N     # So    [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR
         1334  +2B76..2B95;N     # So    [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW
         1335  +2B98..2BB9;N     # So    [34] THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD..UP ARROWHEAD IN A RECTANGLE BOX
         1336  +2BBD..2BC8;N     # So    [12] BALLOT BOX WITH LIGHT X..BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED
         1337  +2BCA..2BD2;N     # So     [9] TOP HALF BLACK CIRCLE..GROUP MARK
         1338  +2BEC..2BEF;N     # So     [4] LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS..DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS
         1339  +2C00..2C2E;N     # Lu    [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
         1340  +2C30..2C5E;N     # Ll    [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE
         1341  +2C60..2C7B;N     # L&    [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E
         1342  +2C7C..2C7D;N     # Lm     [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V
         1343  +2C7E..2C7F;N     # Lu     [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL
         1344  +2C80..2CE4;N     # L&   [101] COPTIC CAPITAL LETTER ALFA..COPTIC SYMBOL KAI
         1345  +2CE5..2CEA;N     # So     [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA
         1346  +2CEB..2CEE;N     # L&     [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA
         1347  +2CEF..2CF1;N     # Mn     [3] COPTIC COMBINING NI ABOVE..COPTIC COMBINING SPIRITUS LENIS
         1348  +2CF2..2CF3;N     # L&     [2] COPTIC CAPITAL LETTER BOHAIRIC KHEI..COPTIC SMALL LETTER BOHAIRIC KHEI
         1349  +2CF9..2CFC;N     # Po     [4] COPTIC OLD NUBIAN FULL STOP..COPTIC OLD NUBIAN VERSE DIVIDER
         1350  +2CFD;N           # No         COPTIC FRACTION ONE HALF
         1351  +2CFE..2CFF;N     # Po     [2] COPTIC FULL STOP..COPTIC MORPHOLOGICAL DIVIDER
         1352  +2D00..2D25;N     # Ll    [38] GEORGIAN SMALL LETTER AN..GEORGIAN SMALL LETTER HOE
         1353  +2D27;N           # Ll         GEORGIAN SMALL LETTER YN
         1354  +2D2D;N           # Ll         GEORGIAN SMALL LETTER AEN
         1355  +2D30..2D67;N     # Lo    [56] TIFINAGH LETTER YA..TIFINAGH LETTER YO
         1356  +2D6F;N           # Lm         TIFINAGH MODIFIER LETTER LABIALIZATION MARK
         1357  +2D70;N           # Po         TIFINAGH SEPARATOR MARK
         1358  +2D7F;N           # Mn         TIFINAGH CONSONANT JOINER
         1359  +2D80..2D96;N     # Lo    [23] ETHIOPIC SYLLABLE LOA..ETHIOPIC SYLLABLE GGWE
         1360  +2DA0..2DA6;N     # Lo     [7] ETHIOPIC SYLLABLE SSA..ETHIOPIC SYLLABLE SSO
         1361  +2DA8..2DAE;N     # Lo     [7] ETHIOPIC SYLLABLE CCA..ETHIOPIC SYLLABLE CCO
         1362  +2DB0..2DB6;N     # Lo     [7] ETHIOPIC SYLLABLE ZZA..ETHIOPIC SYLLABLE ZZO
         1363  +2DB8..2DBE;N     # Lo     [7] ETHIOPIC SYLLABLE CCHA..ETHIOPIC SYLLABLE CCHO
         1364  +2DC0..2DC6;N     # Lo     [7] ETHIOPIC SYLLABLE QYA..ETHIOPIC SYLLABLE QYO
         1365  +2DC8..2DCE;N     # Lo     [7] ETHIOPIC SYLLABLE KYA..ETHIOPIC SYLLABLE KYO
         1366  +2DD0..2DD6;N     # Lo     [7] ETHIOPIC SYLLABLE XYA..ETHIOPIC SYLLABLE XYO
         1367  +2DD8..2DDE;N     # Lo     [7] ETHIOPIC SYLLABLE GYA..ETHIOPIC SYLLABLE GYO
         1368  +2DE0..2DFF;N     # Mn    [32] COMBINING CYRILLIC LETTER BE..COMBINING CYRILLIC LETTER IOTIFIED BIG YUS
         1369  +2E00..2E01;N     # Po     [2] RIGHT ANGLE SUBSTITUTION MARKER..RIGHT ANGLE DOTTED SUBSTITUTION MARKER
         1370  +2E02;N           # Pi         LEFT SUBSTITUTION BRACKET
         1371  +2E03;N           # Pf         RIGHT SUBSTITUTION BRACKET
         1372  +2E04;N           # Pi         LEFT DOTTED SUBSTITUTION BRACKET
         1373  +2E05;N           # Pf         RIGHT DOTTED SUBSTITUTION BRACKET
         1374  +2E06..2E08;N     # Po     [3] RAISED INTERPOLATION MARKER..DOTTED TRANSPOSITION MARKER
         1375  +2E09;N           # Pi         LEFT TRANSPOSITION BRACKET
         1376  +2E0A;N           # Pf         RIGHT TRANSPOSITION BRACKET
         1377  +2E0B;N           # Po         RAISED SQUARE
         1378  +2E0C;N           # Pi         LEFT RAISED OMISSION BRACKET
         1379  +2E0D;N           # Pf         RIGHT RAISED OMISSION BRACKET
         1380  +2E0E..2E16;N     # Po     [9] EDITORIAL CORONIS..DOTTED RIGHT-POINTING ANGLE
         1381  +2E17;N           # Pd         DOUBLE OBLIQUE HYPHEN
         1382  +2E18..2E19;N     # Po     [2] INVERTED INTERROBANG..PALM BRANCH
         1383  +2E1A;N           # Pd         HYPHEN WITH DIAERESIS
         1384  +2E1B;N           # Po         TILDE WITH RING ABOVE
         1385  +2E1C;N           # Pi         LEFT LOW PARAPHRASE BRACKET
         1386  +2E1D;N           # Pf         RIGHT LOW PARAPHRASE BRACKET
         1387  +2E1E..2E1F;N     # Po     [2] TILDE WITH DOT ABOVE..TILDE WITH DOT BELOW
         1388  +2E20;N           # Pi         LEFT VERTICAL BAR WITH QUILL
         1389  +2E21;N           # Pf         RIGHT VERTICAL BAR WITH QUILL
         1390  +2E22;N           # Ps         TOP LEFT HALF BRACKET
         1391  +2E23;N           # Pe         TOP RIGHT HALF BRACKET
         1392  +2E24;N           # Ps         BOTTOM LEFT HALF BRACKET
         1393  +2E25;N           # Pe         BOTTOM RIGHT HALF BRACKET
         1394  +2E26;N           # Ps         LEFT SIDEWAYS U BRACKET
         1395  +2E27;N           # Pe         RIGHT SIDEWAYS U BRACKET
         1396  +2E28;N           # Ps         LEFT DOUBLE PARENTHESIS
         1397  +2E29;N           # Pe         RIGHT DOUBLE PARENTHESIS
         1398  +2E2A..2E2E;N     # Po     [5] TWO DOTS OVER ONE DOT PUNCTUATION..REVERSED QUESTION MARK
         1399  +2E2F;N           # Lm         VERTICAL TILDE
         1400  +2E30..2E39;N     # Po    [10] RING POINT..TOP HALF SECTION SIGN
         1401  +2E3A..2E3B;N     # Pd     [2] TWO-EM DASH..THREE-EM DASH
         1402  +2E3C..2E3F;N     # Po     [4] STENOGRAPHIC FULL STOP..CAPITULUM
         1403  +2E40;N           # Pd         DOUBLE HYPHEN
         1404  +2E41;N           # Po         REVERSED COMMA
         1405  +2E42;N           # Ps         DOUBLE LOW-REVERSED-9 QUOTATION MARK
         1406  +2E43..2E49;N     # Po     [7] DASH WITH LEFT UPTURN..DOUBLE STACKED COMMA
         1407  +2E80..2E99;W     # So    [26] CJK RADICAL REPEAT..CJK RADICAL RAP
         1408  +2E9B..2EF3;W     # So    [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE
         1409  +2F00..2FD5;W     # So   [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE
         1410  +2FF0..2FFB;W     # So    [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID
         1411  +3000;F           # Zs         IDEOGRAPHIC SPACE
         1412  +3001..3003;W     # Po     [3] IDEOGRAPHIC COMMA..DITTO MARK
         1413  +3004;W           # So         JAPANESE INDUSTRIAL STANDARD SYMBOL
         1414  +3005;W           # Lm         IDEOGRAPHIC ITERATION MARK
         1415  +3006;W           # Lo         IDEOGRAPHIC CLOSING MARK
         1416  +3007;W           # Nl         IDEOGRAPHIC NUMBER ZERO
         1417  +3008;W           # Ps         LEFT ANGLE BRACKET
         1418  +3009;W           # Pe         RIGHT ANGLE BRACKET
         1419  +300A;W           # Ps         LEFT DOUBLE ANGLE BRACKET
         1420  +300B;W           # Pe         RIGHT DOUBLE ANGLE BRACKET
         1421  +300C;W           # Ps         LEFT CORNER BRACKET
         1422  +300D;W           # Pe         RIGHT CORNER BRACKET
         1423  +300E;W           # Ps         LEFT WHITE CORNER BRACKET
         1424  +300F;W           # Pe         RIGHT WHITE CORNER BRACKET
         1425  +3010;W           # Ps         LEFT BLACK LENTICULAR BRACKET
         1426  +3011;W           # Pe         RIGHT BLACK LENTICULAR BRACKET
         1427  +3012..3013;W     # So     [2] POSTAL MARK..GETA MARK
         1428  +3014;W           # Ps         LEFT TORTOISE SHELL BRACKET
         1429  +3015;W           # Pe         RIGHT TORTOISE SHELL BRACKET
         1430  +3016;W           # Ps         LEFT WHITE LENTICULAR BRACKET
         1431  +3017;W           # Pe         RIGHT WHITE LENTICULAR BRACKET
         1432  +3018;W           # Ps         LEFT WHITE TORTOISE SHELL BRACKET
         1433  +3019;W           # Pe         RIGHT WHITE TORTOISE SHELL BRACKET
         1434  +301A;W           # Ps         LEFT WHITE SQUARE BRACKET
         1435  +301B;W           # Pe         RIGHT WHITE SQUARE BRACKET
         1436  +301C;W           # Pd         WAVE DASH
         1437  +301D;W           # Ps         REVERSED DOUBLE PRIME QUOTATION MARK
         1438  +301E..301F;W     # Pe     [2] DOUBLE PRIME QUOTATION MARK..LOW DOUBLE PRIME QUOTATION MARK
         1439  +3020;W           # So         POSTAL MARK FACE
         1440  +3021..3029;W     # Nl     [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE
         1441  +302A..302D;W     # Mn     [4] IDEOGRAPHIC LEVEL TONE MARK..IDEOGRAPHIC ENTERING TONE MARK
         1442  +302E..302F;W     # Mc     [2] HANGUL SINGLE DOT TONE MARK..HANGUL DOUBLE DOT TONE MARK
         1443  +3030;W           # Pd         WAVY DASH
         1444  +3031..3035;W     # Lm     [5] VERTICAL KANA REPEAT MARK..VERTICAL KANA REPEAT MARK LOWER HALF
         1445  +3036..3037;W     # So     [2] CIRCLED POSTAL MARK..IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL
         1446  +3038..303A;W     # Nl     [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY
         1447  +303B;W           # Lm         VERTICAL IDEOGRAPHIC ITERATION MARK
         1448  +303C;W           # Lo         MASU MARK
         1449  +303D;W           # Po         PART ALTERNATION MARK
         1450  +303E;W           # So         IDEOGRAPHIC VARIATION INDICATOR
         1451  +303F;N           # So         IDEOGRAPHIC HALF FILL SPACE
         1452  +3041..3096;W     # Lo    [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE
         1453  +3099..309A;W     # Mn     [2] COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK..COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
         1454  +309B..309C;W     # Sk     [2] KATAKANA-HIRAGANA VOICED SOUND MARK..KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
         1455  +309D..309E;W     # Lm     [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK
         1456  +309F;W           # Lo         HIRAGANA DIGRAPH YORI
         1457  +30A0;W           # Pd         KATAKANA-HIRAGANA DOUBLE HYPHEN
         1458  +30A1..30FA;W     # Lo    [90] KATAKANA LETTER SMALL A..KATAKANA LETTER VO
         1459  +30FB;W           # Po         KATAKANA MIDDLE DOT
         1460  +30FC..30FE;W     # Lm     [3] KATAKANA-HIRAGANA PROLONGED SOUND MARK..KATAKANA VOICED ITERATION MARK
         1461  +30FF;W           # Lo         KATAKANA DIGRAPH KOTO
         1462  +3105..312E;W     # Lo    [42] BOPOMOFO LETTER B..BOPOMOFO LETTER O WITH DOT ABOVE
         1463  +3131..318E;W     # Lo    [94] HANGUL LETTER KIYEOK..HANGUL LETTER ARAEAE
         1464  +3190..3191;W     # So     [2] IDEOGRAPHIC ANNOTATION LINKING MARK..IDEOGRAPHIC ANNOTATION REVERSE MARK
         1465  +3192..3195;W     # No     [4] IDEOGRAPHIC ANNOTATION ONE MARK..IDEOGRAPHIC ANNOTATION FOUR MARK
         1466  +3196..319F;W     # So    [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK
         1467  +31A0..31BA;W     # Lo    [27] BOPOMOFO LETTER BU..BOPOMOFO LETTER ZY
         1468  +31C0..31E3;W     # So    [36] CJK STROKE T..CJK STROKE Q
         1469  +31F0..31FF;W     # Lo    [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO
         1470  +3200..321E;W     # So    [31] PARENTHESIZED HANGUL KIYEOK..PARENTHESIZED KOREAN CHARACTER O HU
         1471  +3220..3229;W     # No    [10] PARENTHESIZED IDEOGRAPH ONE..PARENTHESIZED IDEOGRAPH TEN
         1472  +322A..3247;W     # So    [30] PARENTHESIZED IDEOGRAPH MOON..CIRCLED IDEOGRAPH KOTO
         1473  +3248..324F;A     # No     [8] CIRCLED NUMBER TEN ON BLACK SQUARE..CIRCLED NUMBER EIGHTY ON BLACK SQUARE
         1474  +3250;W           # So         PARTNERSHIP SIGN
         1475  +3251..325F;W     # No    [15] CIRCLED NUMBER TWENTY ONE..CIRCLED NUMBER THIRTY FIVE
         1476  +3260..327F;W     # So    [32] CIRCLED HANGUL KIYEOK..KOREAN STANDARD SYMBOL
         1477  +3280..3289;W     # No    [10] CIRCLED IDEOGRAPH ONE..CIRCLED IDEOGRAPH TEN
         1478  +328A..32B0;W     # So    [39] CIRCLED IDEOGRAPH MOON..CIRCLED IDEOGRAPH NIGHT
         1479  +32B1..32BF;W     # No    [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY
         1480  +32C0..32FE;W     # So    [63] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..CIRCLED KATAKANA WO
         1481  +3300..33FF;W     # So   [256] SQUARE APAATO..SQUARE GAL
         1482  +3400..4DB5;W     # Lo  [6582] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DB5
         1483  +4DB6..4DBF;W     # Cn    [10] <reserved-4DB6>..<reserved-4DBF>
         1484  +4DC0..4DFF;N     # So    [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION
         1485  +4E00..9FEA;W     # Lo [20971] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FEA
         1486  +9FEB..9FFF;W     # Cn    [21] <reserved-9FEB>..<reserved-9FFF>
         1487  +A000..A014;W     # Lo    [21] YI SYLLABLE IT..YI SYLLABLE E
         1488  +A015;W           # Lm         YI SYLLABLE WU
         1489  +A016..A48C;W     # Lo  [1143] YI SYLLABLE BIT..YI SYLLABLE YYR
         1490  +A490..A4C6;W     # So    [55] YI RADICAL QOT..YI RADICAL KE
         1491  +A4D0..A4F7;N     # Lo    [40] LISU LETTER BA..LISU LETTER OE
         1492  +A4F8..A4FD;N     # Lm     [6] LISU LETTER TONE MYA TI..LISU LETTER TONE MYA JEU
         1493  +A4FE..A4FF;N     # Po     [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP
         1494  +A500..A60B;N     # Lo   [268] VAI SYLLABLE EE..VAI SYLLABLE NG
         1495  +A60C;N           # Lm         VAI SYLLABLE LENGTHENER
         1496  +A60D..A60F;N     # Po     [3] VAI COMMA..VAI QUESTION MARK
         1497  +A610..A61F;N     # Lo    [16] VAI SYLLABLE NDOLE FA..VAI SYMBOL JONG
         1498  +A620..A629;N     # Nd    [10] VAI DIGIT ZERO..VAI DIGIT NINE
         1499  +A62A..A62B;N     # Lo     [2] VAI SYLLABLE NDOLE MA..VAI SYLLABLE NDOLE DO
         1500  +A640..A66D;N     # L&    [46] CYRILLIC CAPITAL LETTER ZEMLYA..CYRILLIC SMALL LETTER DOUBLE MONOCULAR O
         1501  +A66E;N           # Lo         CYRILLIC LETTER MULTIOCULAR O
         1502  +A66F;N           # Mn         COMBINING CYRILLIC VZMET
         1503  +A670..A672;N     # Me     [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRILLIC THOUSAND MILLIONS SIGN
         1504  +A673;N           # Po         SLAVONIC ASTERISK
         1505  +A674..A67D;N     # Mn    [10] COMBINING CYRILLIC LETTER UKRAINIAN IE..COMBINING CYRILLIC PAYEROK
         1506  +A67E;N           # Po         CYRILLIC KAVYKA
         1507  +A67F;N           # Lm         CYRILLIC PAYEROK
         1508  +A680..A69B;N     # L&    [28] CYRILLIC CAPITAL LETTER DWE..CYRILLIC SMALL LETTER CROSSED O
         1509  +A69C..A69D;N     # Lm     [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN
         1510  +A69E..A69F;N     # Mn     [2] COMBINING CYRILLIC LETTER EF..COMBINING CYRILLIC LETTER IOTIFIED E
         1511  +A6A0..A6E5;N     # Lo    [70] BAMUM LETTER A..BAMUM LETTER KI
         1512  +A6E6..A6EF;N     # Nl    [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM
         1513  +A6F0..A6F1;N     # Mn     [2] BAMUM COMBINING MARK KOQNDON..BAMUM COMBINING MARK TUKWENTIS
         1514  +A6F2..A6F7;N     # Po     [6] BAMUM NJAEMLI..BAMUM QUESTION MARK
         1515  +A700..A716;N     # Sk    [23] MODIFIER LETTER CHINESE TONE YIN PING..MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR
         1516  +A717..A71F;N     # Lm     [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK
         1517  +A720..A721;N     # Sk     [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER STRESS AND LOW TONE
         1518  +A722..A76F;N     # L&    [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN SMALL LETTER CON
         1519  +A770;N           # Lm         MODIFIER LETTER US
         1520  +A771..A787;N     # L&    [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T
         1521  +A788;N           # Lm         MODIFIER LETTER LOW CIRCUMFLEX ACCENT
         1522  +A789..A78A;N     # Sk     [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN
         1523  +A78B..A78E;N     # L&     [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT
         1524  +A78F;N           # Lo         LATIN LETTER SINOLOGICAL DOT
         1525  +A790..A7AE;N     # L&    [31] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN CAPITAL LETTER SMALL CAPITAL I
         1526  +A7B0..A7B7;N     # L&     [8] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER OMEGA
         1527  +A7F7;N           # Lo         LATIN EPIGRAPHIC LETTER SIDEWAYS I
         1528  +A7F8..A7F9;N     # Lm     [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE
         1529  +A7FA;N           # Ll         LATIN LETTER SMALL CAPITAL TURNED M
         1530  +A7FB..A7FF;N     # Lo     [5] LATIN EPIGRAPHIC LETTER REVERSED F..LATIN EPIGRAPHIC LETTER ARCHAIC M
         1531  +A800..A801;N     # Lo     [2] SYLOTI NAGRI LETTER A..SYLOTI NAGRI LETTER I
         1532  +A802;N           # Mn         SYLOTI NAGRI SIGN DVISVARA
         1533  +A803..A805;N     # Lo     [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O
         1534  +A806;N           # Mn         SYLOTI NAGRI SIGN HASANTA
         1535  +A807..A80A;N     # Lo     [4] SYLOTI NAGRI LETTER KO..SYLOTI NAGRI LETTER GHO
         1536  +A80B;N           # Mn         SYLOTI NAGRI SIGN ANUSVARA
         1537  +A80C..A822;N     # Lo    [23] SYLOTI NAGRI LETTER CO..SYLOTI NAGRI LETTER HO
         1538  +A823..A824;N     # Mc     [2] SYLOTI NAGRI VOWEL SIGN A..SYLOTI NAGRI VOWEL SIGN I
         1539  +A825..A826;N     # Mn     [2] SYLOTI NAGRI VOWEL SIGN U..SYLOTI NAGRI VOWEL SIGN E
         1540  +A827;N           # Mc         SYLOTI NAGRI VOWEL SIGN OO
         1541  +A828..A82B;N     # So     [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK-4
         1542  +A830..A835;N     # No     [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTION THREE SIXTEENTHS
         1543  +A836..A837;N     # So     [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK
         1544  +A838;N           # Sc         NORTH INDIC RUPEE MARK
         1545  +A839;N           # So         NORTH INDIC QUANTITY MARK
         1546  +A840..A873;N     # Lo    [52] PHAGS-PA LETTER KA..PHAGS-PA LETTER CANDRABINDU
         1547  +A874..A877;N     # Po     [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SHAD
         1548  +A880..A881;N     # Mc     [2] SAURASHTRA SIGN ANUSVARA..SAURASHTRA SIGN VISARGA
         1549  +A882..A8B3;N     # Lo    [50] SAURASHTRA LETTER A..SAURASHTRA LETTER LLA
         1550  +A8B4..A8C3;N     # Mc    [16] SAURASHTRA CONSONANT SIGN HAARU..SAURASHTRA VOWEL SIGN AU
         1551  +A8C4..A8C5;N     # Mn     [2] SAURASHTRA SIGN VIRAMA..SAURASHTRA SIGN CANDRABINDU
         1552  +A8CE..A8CF;N     # Po     [2] SAURASHTRA DANDA..SAURASHTRA DOUBLE DANDA
         1553  +A8D0..A8D9;N     # Nd    [10] SAURASHTRA DIGIT ZERO..SAURASHTRA DIGIT NINE
         1554  +A8E0..A8F1;N     # Mn    [18] COMBINING DEVANAGARI DIGIT ZERO..COMBINING DEVANAGARI SIGN AVAGRAHA
         1555  +A8F2..A8F7;N     # Lo     [6] DEVANAGARI SIGN SPACING CANDRABINDU..DEVANAGARI SIGN CANDRABINDU AVAGRAHA
         1556  +A8F8..A8FA;N     # Po     [3] DEVANAGARI SIGN PUSHPIKA..DEVANAGARI CARET
         1557  +A8FB;N           # Lo         DEVANAGARI HEADSTROKE
         1558  +A8FC;N           # Po         DEVANAGARI SIGN SIDDHAM
         1559  +A8FD;N           # Lo         DEVANAGARI JAIN OM
         1560  +A900..A909;N     # Nd    [10] KAYAH LI DIGIT ZERO..KAYAH LI DIGIT NINE
         1561  +A90A..A925;N     # Lo    [28] KAYAH LI LETTER KA..KAYAH LI LETTER OO
         1562  +A926..A92D;N     # Mn     [8] KAYAH LI VOWEL UE..KAYAH LI TONE CALYA PLOPHU
         1563  +A92E..A92F;N     # Po     [2] KAYAH LI SIGN CWI..KAYAH LI SIGN SHYA
         1564  +A930..A946;N     # Lo    [23] REJANG LETTER KA..REJANG LETTER A
         1565  +A947..A951;N     # Mn    [11] REJANG VOWEL SIGN I..REJANG CONSONANT SIGN R
         1566  +A952..A953;N     # Mc     [2] REJANG CONSONANT SIGN H..REJANG VIRAMA
         1567  +A95F;N           # Po         REJANG SECTION MARK
         1568  +A960..A97C;W     # Lo    [29] HANGUL CHOSEONG TIKEUT-MIEUM..HANGUL CHOSEONG SSANGYEORINHIEUH
         1569  +A980..A982;N     # Mn     [3] JAVANESE SIGN PANYANGGA..JAVANESE SIGN LAYAR
         1570  +A983;N           # Mc         JAVANESE SIGN WIGNYAN
         1571  +A984..A9B2;N     # Lo    [47] JAVANESE LETTER A..JAVANESE LETTER HA
         1572  +A9B3;N           # Mn         JAVANESE SIGN CECAK TELU
         1573  +A9B4..A9B5;N     # Mc     [2] JAVANESE VOWEL SIGN TARUNG..JAVANESE VOWEL SIGN TOLONG
         1574  +A9B6..A9B9;N     # Mn     [4] JAVANESE VOWEL SIGN WULU..JAVANESE VOWEL SIGN SUKU MENDUT
         1575  +A9BA..A9BB;N     # Mc     [2] JAVANESE VOWEL SIGN TALING..JAVANESE VOWEL SIGN DIRGA MURE
         1576  +A9BC;N           # Mn         JAVANESE VOWEL SIGN PEPET
         1577  +A9BD..A9C0;N     # Mc     [4] JAVANESE CONSONANT SIGN KERET..JAVANESE PANGKON
         1578  +A9C1..A9CD;N     # Po    [13] JAVANESE LEFT RERENGGAN..JAVANESE TURNED PADA PISELEH
         1579  +A9CF;N           # Lm         JAVANESE PANGRANGKEP
         1580  +A9D0..A9D9;N     # Nd    [10] JAVANESE DIGIT ZERO..JAVANESE DIGIT NINE
         1581  +A9DE..A9DF;N     # Po     [2] JAVANESE PADA TIRTA TUMETES..JAVANESE PADA ISEN-ISEN
         1582  +A9E0..A9E4;N     # Lo     [5] MYANMAR LETTER SHAN GHA..MYANMAR LETTER SHAN BHA
         1583  +A9E5;N           # Mn         MYANMAR SIGN SHAN SAW
         1584  +A9E6;N           # Lm         MYANMAR MODIFIER LETTER SHAN REDUPLICATION
         1585  +A9E7..A9EF;N     # Lo     [9] MYANMAR LETTER TAI LAING NYA..MYANMAR LETTER TAI LAING NNA
         1586  +A9F0..A9F9;N     # Nd    [10] MYANMAR TAI LAING DIGIT ZERO..MYANMAR TAI LAING DIGIT NINE
         1587  +A9FA..A9FE;N     # Lo     [5] MYANMAR LETTER TAI LAING LLA..MYANMAR LETTER TAI LAING BHA
         1588  +AA00..AA28;N     # Lo    [41] CHAM LETTER A..CHAM LETTER HA
         1589  +AA29..AA2E;N     # Mn     [6] CHAM VOWEL SIGN AA..CHAM VOWEL SIGN OE
         1590  +AA2F..AA30;N     # Mc     [2] CHAM VOWEL SIGN O..CHAM VOWEL SIGN AI
         1591  +AA31..AA32;N     # Mn     [2] CHAM VOWEL SIGN AU..CHAM VOWEL SIGN UE
         1592  +AA33..AA34;N     # Mc     [2] CHAM CONSONANT SIGN YA..CHAM CONSONANT SIGN RA
         1593  +AA35..AA36;N     # Mn     [2] CHAM CONSONANT SIGN LA..CHAM CONSONANT SIGN WA
         1594  +AA40..AA42;N     # Lo     [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG
         1595  +AA43;N           # Mn         CHAM CONSONANT SIGN FINAL NG
         1596  +AA44..AA4B;N     # Lo     [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS
         1597  +AA4C;N           # Mn         CHAM CONSONANT SIGN FINAL M
         1598  +AA4D;N           # Mc         CHAM CONSONANT SIGN FINAL H
         1599  +AA50..AA59;N     # Nd    [10] CHAM DIGIT ZERO..CHAM DIGIT NINE
         1600  +AA5C..AA5F;N     # Po     [4] CHAM PUNCTUATION SPIRAL..CHAM PUNCTUATION TRIPLE DANDA
         1601  +AA60..AA6F;N     # Lo    [16] MYANMAR LETTER KHAMTI GA..MYANMAR LETTER KHAMTI FA
         1602  +AA70;N           # Lm         MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION
         1603  +AA71..AA76;N     # Lo     [6] MYANMAR LETTER KHAMTI XA..MYANMAR LOGOGRAM KHAMTI HM
         1604  +AA77..AA79;N     # So     [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO
         1605  +AA7A;N           # Lo         MYANMAR LETTER AITON RA
         1606  +AA7B;N           # Mc         MYANMAR SIGN PAO KAREN TONE
         1607  +AA7C;N           # Mn         MYANMAR SIGN TAI LAING TONE-2
         1608  +AA7D;N           # Mc         MYANMAR SIGN TAI LAING TONE-5
         1609  +AA7E..AA7F;N     # Lo     [2] MYANMAR LETTER SHWE PALAUNG CHA..MYANMAR LETTER SHWE PALAUNG SHA
         1610  +AA80..AAAF;N     # Lo    [48] TAI VIET LETTER LOW KO..TAI VIET LETTER HIGH O
         1611  +AAB0;N           # Mn         TAI VIET MAI KANG
         1612  +AAB1;N           # Lo         TAI VIET VOWEL AA
         1613  +AAB2..AAB4;N     # Mn     [3] TAI VIET VOWEL I..TAI VIET VOWEL U
         1614  +AAB5..AAB6;N     # Lo     [2] TAI VIET VOWEL E..TAI VIET VOWEL O
         1615  +AAB7..AAB8;N     # Mn     [2] TAI VIET MAI KHIT..TAI VIET VOWEL IA
         1616  +AAB9..AABD;N     # Lo     [5] TAI VIET VOWEL UEA..TAI VIET VOWEL AN
         1617  +AABE..AABF;N     # Mn     [2] TAI VIET VOWEL AM..TAI VIET TONE MAI EK
         1618  +AAC0;N           # Lo         TAI VIET TONE MAI NUENG
         1619  +AAC1;N           # Mn         TAI VIET TONE MAI THO
         1620  +AAC2;N           # Lo         TAI VIET TONE MAI SONG
         1621  +AADB..AADC;N     # Lo     [2] TAI VIET SYMBOL KON..TAI VIET SYMBOL NUENG
         1622  +AADD;N           # Lm         TAI VIET SYMBOL SAM
         1623  +AADE..AADF;N     # Po     [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI
         1624  +AAE0..AAEA;N     # Lo    [11] MEETEI MAYEK LETTER E..MEETEI MAYEK LETTER SSA
         1625  +AAEB;N           # Mc         MEETEI MAYEK VOWEL SIGN II
         1626  +AAEC..AAED;N     # Mn     [2] MEETEI MAYEK VOWEL SIGN UU..MEETEI MAYEK VOWEL SIGN AAI
         1627  +AAEE..AAEF;N     # Mc     [2] MEETEI MAYEK VOWEL SIGN AU..MEETEI MAYEK VOWEL SIGN AAU
         1628  +AAF0..AAF1;N     # Po     [2] MEETEI MAYEK CHEIKHAN..MEETEI MAYEK AHANG KHUDAM
         1629  +AAF2;N           # Lo         MEETEI MAYEK ANJI
         1630  +AAF3..AAF4;N     # Lm     [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK
         1631  +AAF5;N           # Mc         MEETEI MAYEK VOWEL SIGN VISARGA
         1632  +AAF6;N           # Mn         MEETEI MAYEK VIRAMA
         1633  +AB01..AB06;N     # Lo     [6] ETHIOPIC SYLLABLE TTHU..ETHIOPIC SYLLABLE TTHO
         1634  +AB09..AB0E;N     # Lo     [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DDHO
         1635  +AB11..AB16;N     # Lo     [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO
         1636  +AB20..AB26;N     # Lo     [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO
         1637  +AB28..AB2E;N     # Lo     [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO
         1638  +AB30..AB5A;N     # Ll    [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG
         1639  +AB5B;N           # Sk         MODIFIER BREVE WITH INVERTED BREVE
         1640  +AB5C..AB5F;N     # Lm     [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK
         1641  +AB60..AB65;N     # Ll     [6] LATIN SMALL LETTER SAKHA YAT..GREEK LETTER SMALL CAPITAL OMEGA
         1642  +AB70..ABBF;N     # Ll    [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA
         1643  +ABC0..ABE2;N     # Lo    [35] MEETEI MAYEK LETTER KOK..MEETEI MAYEK LETTER I LONSUM
         1644  +ABE3..ABE4;N     # Mc     [2] MEETEI MAYEK VOWEL SIGN ONAP..MEETEI MAYEK VOWEL SIGN INAP
         1645  +ABE5;N           # Mn         MEETEI MAYEK VOWEL SIGN ANAP
         1646  +ABE6..ABE7;N     # Mc     [2] MEETEI MAYEK VOWEL SIGN YENAP..MEETEI MAYEK VOWEL SIGN SOUNAP
         1647  +ABE8;N           # Mn         MEETEI MAYEK VOWEL SIGN UNAP
         1648  +ABE9..ABEA;N     # Mc     [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEETEI MAYEK VOWEL SIGN NUNG
         1649  +ABEB;N           # Po         MEETEI MAYEK CHEIKHEI
         1650  +ABEC;N           # Mc         MEETEI MAYEK LUM IYEK
         1651  +ABED;N           # Mn         MEETEI MAYEK APUN IYEK
         1652  +ABF0..ABF9;N     # Nd    [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE
         1653  +AC00..D7A3;W     # Lo [11172] HANGUL SYLLABLE GA..HANGUL SYLLABLE HIH
         1654  +D7B0..D7C6;N     # Lo    [23] HANGUL JUNGSEONG O-YEO..HANGUL JUNGSEONG ARAEA-E
         1655  +D7CB..D7FB;N     # Lo    [49] HANGUL JONGSEONG NIEUN-RIEUL..HANGUL JONGSEONG PHIEUPH-THIEUTH
         1656  +D800..DB7F;N     # Cs   [896] <surrogate-D800>..<surrogate-DB7F>
         1657  +DB80..DBFF;N     # Cs   [128] <surrogate-DB80>..<surrogate-DBFF>
         1658  +DC00..DFFF;N     # Cs  [1024] <surrogate-DC00>..<surrogate-DFFF>
         1659  +E000..F8FF;A     # Co  [6400] <private-use-E000>..<private-use-F8FF>
         1660  +F900..FA6D;W     # Lo   [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D
         1661  +FA6E..FA6F;W     # Cn     [2] <reserved-FA6E>..<reserved-FA6F>
         1662  +FA70..FAD9;W     # Lo   [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9
         1663  +FADA..FAFF;W     # Cn    [38] <reserved-FADA>..<reserved-FAFF>
         1664  +FB00..FB06;N     # Ll     [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST
         1665  +FB13..FB17;N     # Ll     [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH
         1666  +FB1D;N           # Lo         HEBREW LETTER YOD WITH HIRIQ
         1667  +FB1E;N           # Mn         HEBREW POINT JUDEO-SPANISH VARIKA
         1668  +FB1F..FB28;N     # Lo    [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV
         1669  +FB29;N           # Sm         HEBREW LETTER ALTERNATIVE PLUS SIGN
         1670  +FB2A..FB36;N     # Lo    [13] HEBREW LETTER SHIN WITH SHIN DOT..HEBREW LETTER ZAYIN WITH DAGESH
         1671  +FB38..FB3C;N     # Lo     [5] HEBREW LETTER TET WITH DAGESH..HEBREW LETTER LAMED WITH DAGESH
         1672  +FB3E;N           # Lo         HEBREW LETTER MEM WITH DAGESH
         1673  +FB40..FB41;N     # Lo     [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH
         1674  +FB43..FB44;N     # Lo     [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH
         1675  +FB46..FB4F;N     # Lo    [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED
         1676  +FB50..FBB1;N     # Lo    [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM
         1677  +FBB2..FBC1;N     # Sk    [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW
         1678  +FBD3..FD3D;N     # Lo   [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM
         1679  +FD3E;N           # Pe         ORNATE LEFT PARENTHESIS
         1680  +FD3F;N           # Ps         ORNATE RIGHT PARENTHESIS
         1681  +FD50..FD8F;N     # Lo    [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM
         1682  +FD92..FDC7;N     # Lo    [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM
         1683  +FDF0..FDFB;N     # Lo    [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU
         1684  +FDFC;N           # Sc         RIAL SIGN
         1685  +FDFD;N           # So         ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM
         1686  +FE00..FE0F;A     # Mn    [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16
         1687  +FE10..FE16;W     # Po     [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK
         1688  +FE17;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
         1689  +FE18;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET
         1690  +FE19;W           # Po         PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS
         1691  +FE20..FE2F;N     # Mn    [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF
         1692  +FE30;W           # Po         PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
         1693  +FE31..FE32;W     # Pd     [2] PRESENTATION FORM FOR VERTICAL EM DASH..PRESENTATION FORM FOR VERTICAL EN DASH
         1694  +FE33..FE34;W     # Pc     [2] PRESENTATION FORM FOR VERTICAL LOW LINE..PRESENTATION FORM FOR VERTICAL WAVY LOW LINE
         1695  +FE35;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
         1696  +FE36;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
         1697  +FE37;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
         1698  +FE38;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
         1699  +FE39;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
         1700  +FE3A;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
         1701  +FE3B;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
         1702  +FE3C;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
         1703  +FE3D;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
         1704  +FE3E;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
         1705  +FE3F;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
         1706  +FE40;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
         1707  +FE41;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
         1708  +FE42;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
         1709  +FE43;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
         1710  +FE44;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
         1711  +FE45..FE46;W     # Po     [2] SESAME DOT..WHITE SESAME DOT
         1712  +FE47;W           # Ps         PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
         1713  +FE48;W           # Pe         PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
         1714  +FE49..FE4C;W     # Po     [4] DASHED OVERLINE..DOUBLE WAVY OVERLINE
         1715  +FE4D..FE4F;W     # Pc     [3] DASHED LOW LINE..WAVY LOW LINE
         1716  +FE50..FE52;W     # Po     [3] SMALL COMMA..SMALL FULL STOP
         1717  +FE54..FE57;W     # Po     [4] SMALL SEMICOLON..SMALL EXCLAMATION MARK
         1718  +FE58;W           # Pd         SMALL EM DASH
         1719  +FE59;W           # Ps         SMALL LEFT PARENTHESIS
         1720  +FE5A;W           # Pe         SMALL RIGHT PARENTHESIS
         1721  +FE5B;W           # Ps         SMALL LEFT CURLY BRACKET
         1722  +FE5C;W           # Pe         SMALL RIGHT CURLY BRACKET
         1723  +FE5D;W           # Ps         SMALL LEFT TORTOISE SHELL BRACKET
         1724  +FE5E;W           # Pe         SMALL RIGHT TORTOISE SHELL BRACKET
         1725  +FE5F..FE61;W     # Po     [3] SMALL NUMBER SIGN..SMALL ASTERISK
         1726  +FE62;W           # Sm         SMALL PLUS SIGN
         1727  +FE63;W           # Pd         SMALL HYPHEN-MINUS
         1728  +FE64..FE66;W     # Sm     [3] SMALL LESS-THAN SIGN..SMALL EQUALS SIGN
         1729  +FE68;W           # Po         SMALL REVERSE SOLIDUS
         1730  +FE69;W           # Sc         SMALL DOLLAR SIGN
         1731  +FE6A..FE6B;W     # Po     [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT
         1732  +FE70..FE74;N     # Lo     [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM
         1733  +FE76..FEFC;N     # Lo   [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM
         1734  +FEFF;N           # Cf         ZERO WIDTH NO-BREAK SPACE
         1735  +FF01..FF03;F     # Po     [3] FULLWIDTH EXCLAMATION MARK..FULLWIDTH NUMBER SIGN
         1736  +FF04;F           # Sc         FULLWIDTH DOLLAR SIGN
         1737  +FF05..FF07;F     # Po     [3] FULLWIDTH PERCENT SIGN..FULLWIDTH APOSTROPHE
         1738  +FF08;F           # Ps         FULLWIDTH LEFT PARENTHESIS
         1739  +FF09;F           # Pe         FULLWIDTH RIGHT PARENTHESIS
         1740  +FF0A;F           # Po         FULLWIDTH ASTERISK
         1741  +FF0B;F           # Sm         FULLWIDTH PLUS SIGN
         1742  +FF0C;F           # Po         FULLWIDTH COMMA
         1743  +FF0D;F           # Pd         FULLWIDTH HYPHEN-MINUS
         1744  +FF0E..FF0F;F     # Po     [2] FULLWIDTH FULL STOP..FULLWIDTH SOLIDUS
         1745  +FF10..FF19;F     # Nd    [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE
         1746  +FF1A..FF1B;F     # Po     [2] FULLWIDTH COLON..FULLWIDTH SEMICOLON
         1747  +FF1C..FF1E;F     # Sm     [3] FULLWIDTH LESS-THAN SIGN..FULLWIDTH GREATER-THAN SIGN
         1748  +FF1F..FF20;F     # Po     [2] FULLWIDTH QUESTION MARK..FULLWIDTH COMMERCIAL AT
         1749  +FF21..FF3A;F     # Lu    [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z
         1750  +FF3B;F           # Ps         FULLWIDTH LEFT SQUARE BRACKET
         1751  +FF3C;F           # Po         FULLWIDTH REVERSE SOLIDUS
         1752  +FF3D;F           # Pe         FULLWIDTH RIGHT SQUARE BRACKET
         1753  +FF3E;F           # Sk         FULLWIDTH CIRCUMFLEX ACCENT
         1754  +FF3F;F           # Pc         FULLWIDTH LOW LINE
         1755  +FF40;F           # Sk         FULLWIDTH GRAVE ACCENT
         1756  +FF41..FF5A;F     # Ll    [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z
         1757  +FF5B;F           # Ps         FULLWIDTH LEFT CURLY BRACKET
         1758  +FF5C;F           # Sm         FULLWIDTH VERTICAL LINE
         1759  +FF5D;F           # Pe         FULLWIDTH RIGHT CURLY BRACKET
         1760  +FF5E;F           # Sm         FULLWIDTH TILDE
         1761  +FF5F;F           # Ps         FULLWIDTH LEFT WHITE PARENTHESIS
         1762  +FF60;F           # Pe         FULLWIDTH RIGHT WHITE PARENTHESIS
         1763  +FF61;H           # Po         HALFWIDTH IDEOGRAPHIC FULL STOP
         1764  +FF62;H           # Ps         HALFWIDTH LEFT CORNER BRACKET
         1765  +FF63;H           # Pe         HALFWIDTH RIGHT CORNER BRACKET
         1766  +FF64..FF65;H     # Po     [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDLE DOT
         1767  +FF66..FF6F;H     # Lo    [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU
         1768  +FF70;H           # Lm         HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK
         1769  +FF71..FF9D;H     # Lo    [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N
         1770  +FF9E..FF9F;H     # Lm     [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
         1771  +FFA0..FFBE;H     # Lo    [31] HALFWIDTH HANGUL FILLER..HALFWIDTH HANGUL LETTER HIEUH
         1772  +FFC2..FFC7;H     # Lo     [6] HALFWIDTH HANGUL LETTER A..HALFWIDTH HANGUL LETTER E
         1773  +FFCA..FFCF;H     # Lo     [6] HALFWIDTH HANGUL LETTER YEO..HALFWIDTH HANGUL LETTER OE
         1774  +FFD2..FFD7;H     # Lo     [6] HALFWIDTH HANGUL LETTER YO..HALFWIDTH HANGUL LETTER YU
         1775  +FFDA..FFDC;H     # Lo     [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I
         1776  +FFE0..FFE1;F     # Sc     [2] FULLWIDTH CENT SIGN..FULLWIDTH POUND SIGN
         1777  +FFE2;F           # Sm         FULLWIDTH NOT SIGN
         1778  +FFE3;F           # Sk         FULLWIDTH MACRON
         1779  +FFE4;F           # So         FULLWIDTH BROKEN BAR
         1780  +FFE5..FFE6;F     # Sc     [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN
         1781  +FFE8;H           # So         HALFWIDTH FORMS LIGHT VERTICAL
         1782  +FFE9..FFEC;H     # Sm     [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW
         1783  +FFED..FFEE;H     # So     [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE
         1784  +FFF9..FFFB;N     # Cf     [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION TERMINATOR
         1785  +FFFC;N           # So         OBJECT REPLACEMENT CHARACTER
         1786  +FFFD;A           # So         REPLACEMENT CHARACTER
         1787  +10000..1000B;N   # Lo    [12] LINEAR B SYLLABLE B008 A..LINEAR B SYLLABLE B046 JE
         1788  +1000D..10026;N   # Lo    [26] LINEAR B SYLLABLE B036 JO..LINEAR B SYLLABLE B032 QO
         1789  +10028..1003A;N   # Lo    [19] LINEAR B SYLLABLE B060 RA..LINEAR B SYLLABLE B042 WO
         1790  +1003C..1003D;N   # Lo     [2] LINEAR B SYLLABLE B017 ZA..LINEAR B SYLLABLE B074 ZE
         1791  +1003F..1004D;N   # Lo    [15] LINEAR B SYLLABLE B020 ZO..LINEAR B SYLLABLE B091 TWO
         1792  +10050..1005D;N   # Lo    [14] LINEAR B SYMBOL B018..LINEAR B SYMBOL B089
         1793  +10080..100FA;N   # Lo   [123] LINEAR B IDEOGRAM B100 MAN..LINEAR B IDEOGRAM VESSEL B305
         1794  +10100..10102;N   # Po     [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK
         1795  +10107..10133;N   # No    [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND
         1796  +10137..1013F;N   # So     [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT
         1797  +10140..10174;N   # Nl    [53] GREEK ACROPHONIC ATTIC ONE QUARTER..GREEK ACROPHONIC STRATIAN FIFTY MNAS
         1798  +10175..10178;N   # No     [4] GREEK ONE HALF SIGN..GREEK THREE QUARTERS SIGN
         1799  +10179..10189;N   # So    [17] GREEK YEAR SIGN..GREEK TRYBLION BASE SIGN
         1800  +1018A..1018B;N   # No     [2] GREEK ZERO SIGN..GREEK ONE QUARTER SIGN
         1801  +1018C..1018E;N   # So     [3] GREEK SINUSOID SIGN..NOMISMA SIGN
         1802  +10190..1019B;N   # So    [12] ROMAN SEXTANS SIGN..ROMAN CENTURIAL SIGN
         1803  +101A0;N          # So         GREEK SYMBOL TAU RHO
         1804  +101D0..101FC;N   # So    [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND
         1805  +101FD;N          # Mn         PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE
         1806  +10280..1029C;N   # Lo    [29] LYCIAN LETTER A..LYCIAN LETTER X
         1807  +102A0..102D0;N   # Lo    [49] CARIAN LETTER A..CARIAN LETTER UUU3
         1808  +102E0;N          # Mn         COPTIC EPACT THOUSANDS MARK
         1809  +102E1..102FB;N   # No    [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED
         1810  +10300..1031F;N   # Lo    [32] OLD ITALIC LETTER A..OLD ITALIC LETTER ESS
         1811  +10320..10323;N   # No     [4] OLD ITALIC NUMERAL ONE..OLD ITALIC NUMERAL FIFTY
         1812  +1032D..1032F;N   # Lo     [3] OLD ITALIC LETTER YE..OLD ITALIC LETTER SOUTHERN TSE
         1813  +10330..10340;N   # Lo    [17] GOTHIC LETTER AHSA..GOTHIC LETTER PAIRTHRA
         1814  +10341;N          # Nl         GOTHIC LETTER NINETY
         1815  +10342..10349;N   # Lo     [8] GOTHIC LETTER RAIDA..GOTHIC LETTER OTHAL
         1816  +1034A;N          # Nl         GOTHIC LETTER NINE HUNDRED
         1817  +10350..10375;N   # Lo    [38] OLD PERMIC LETTER AN..OLD PERMIC LETTER IA
         1818  +10376..1037A;N   # Mn     [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII
         1819  +10380..1039D;N   # Lo    [30] UGARITIC LETTER ALPA..UGARITIC LETTER SSU
         1820  +1039F;N          # Po         UGARITIC WORD DIVIDER
         1821  +103A0..103C3;N   # Lo    [36] OLD PERSIAN SIGN A..OLD PERSIAN SIGN HA
         1822  +103C8..103CF;N   # Lo     [8] OLD PERSIAN SIGN AURAMAZDAA..OLD PERSIAN SIGN BUUMISH
         1823  +103D0;N          # Po         OLD PERSIAN WORD DIVIDER
         1824  +103D1..103D5;N   # Nl     [5] OLD PERSIAN NUMBER ONE..OLD PERSIAN NUMBER HUNDRED
         1825  +10400..1044F;N   # L&    [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW
         1826  +10450..1047F;N   # Lo    [48] SHAVIAN LETTER PEEP..SHAVIAN LETTER YEW
         1827  +10480..1049D;N   # Lo    [30] OSMANYA LETTER ALEF..OSMANYA LETTER OO
         1828  +104A0..104A9;N   # Nd    [10] OSMANYA DIGIT ZERO..OSMANYA DIGIT NINE
         1829  +104B0..104D3;N   # Lu    [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA
         1830  +104D8..104FB;N   # Ll    [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA
         1831  +10500..10527;N   # Lo    [40] ELBASAN LETTER A..ELBASAN LETTER KHE
         1832  +10530..10563;N   # Lo    [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW
         1833  +1056F;N          # Po         CAUCASIAN ALBANIAN CITATION MARK
         1834  +10600..10736;N   # Lo   [311] LINEAR A SIGN AB001..LINEAR A SIGN A664
         1835  +10740..10755;N   # Lo    [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE
         1836  +10760..10767;N   # Lo     [8] LINEAR A SIGN A800..LINEAR A SIGN A807
         1837  +10800..10805;N   # Lo     [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA
         1838  +10808;N          # Lo         CYPRIOT SYLLABLE JO
         1839  +1080A..10835;N   # Lo    [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO
         1840  +10837..10838;N   # Lo     [2] CYPRIOT SYLLABLE XA..CYPRIOT SYLLABLE XE
         1841  +1083C;N          # Lo         CYPRIOT SYLLABLE ZA
         1842  +1083F;N          # Lo         CYPRIOT SYLLABLE ZO
         1843  +10840..10855;N   # Lo    [22] IMPERIAL ARAMAIC LETTER ALEPH..IMPERIAL ARAMAIC LETTER TAW
         1844  +10857;N          # Po         IMPERIAL ARAMAIC SECTION SIGN
         1845  +10858..1085F;N   # No     [8] IMPERIAL ARAMAIC NUMBER ONE..IMPERIAL ARAMAIC NUMBER TEN THOUSAND
         1846  +10860..10876;N   # Lo    [23] PALMYRENE LETTER ALEPH..PALMYRENE LETTER TAW
         1847  +10877..10878;N   # So     [2] PALMYRENE LEFT-POINTING FLEURON..PALMYRENE RIGHT-POINTING FLEURON
         1848  +10879..1087F;N   # No     [7] PALMYRENE NUMBER ONE..PALMYRENE NUMBER TWENTY
         1849  +10880..1089E;N   # Lo    [31] NABATAEAN LETTER FINAL ALEPH..NABATAEAN LETTER TAW
         1850  +108A7..108AF;N   # No     [9] NABATAEAN NUMBER ONE..NABATAEAN NUMBER ONE HUNDRED
         1851  +108E0..108F2;N   # Lo    [19] HATRAN LETTER ALEPH..HATRAN LETTER QOPH
         1852  +108F4..108F5;N   # Lo     [2] HATRAN LETTER SHIN..HATRAN LETTER TAW
         1853  +108FB..108FF;N   # No     [5] HATRAN NUMBER ONE..HATRAN NUMBER ONE HUNDRED
         1854  +10900..10915;N   # Lo    [22] PHOENICIAN LETTER ALF..PHOENICIAN LETTER TAU
         1855  +10916..1091B;N   # No     [6] PHOENICIAN NUMBER ONE..PHOENICIAN NUMBER THREE
         1856  +1091F;N          # Po         PHOENICIAN WORD SEPARATOR
         1857  +10920..10939;N   # Lo    [26] LYDIAN LETTER A..LYDIAN LETTER C
         1858  +1093F;N          # Po         LYDIAN TRIANGULAR MARK
         1859  +10980..1099F;N   # Lo    [32] MEROITIC HIEROGLYPHIC LETTER A..MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2
         1860  +109A0..109B7;N   # Lo    [24] MEROITIC CURSIVE LETTER A..MEROITIC CURSIVE LETTER DA
         1861  +109BC..109BD;N   # No     [2] MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS..MEROITIC CURSIVE FRACTION ONE HALF
         1862  +109BE..109BF;N   # Lo     [2] MEROITIC CURSIVE LOGOGRAM RMT..MEROITIC CURSIVE LOGOGRAM IMN
         1863  +109C0..109CF;N   # No    [16] MEROITIC CURSIVE NUMBER ONE..MEROITIC CURSIVE NUMBER SEVENTY
         1864  +109D2..109FF;N   # No    [46] MEROITIC CURSIVE NUMBER ONE HUNDRED..MEROITIC CURSIVE FRACTION TEN TWELFTHS
         1865  +10A00;N          # Lo         KHAROSHTHI LETTER A
         1866  +10A01..10A03;N   # Mn     [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R
         1867  +10A05..10A06;N   # Mn     [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O
         1868  +10A0C..10A0F;N   # Mn     [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA
         1869  +10A10..10A13;N   # Lo     [4] KHAROSHTHI LETTER KA..KHAROSHTHI LETTER GHA
         1870  +10A15..10A17;N   # Lo     [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA
         1871  +10A19..10A33;N   # Lo    [27] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER TTTHA
         1872  +10A38..10A3A;N   # Mn     [3] KHAROSHTHI SIGN BAR ABOVE..KHAROSHTHI SIGN DOT BELOW
         1873  +10A3F;N          # Mn         KHAROSHTHI VIRAMA
         1874  +10A40..10A47;N   # No     [8] KHAROSHTHI DIGIT ONE..KHAROSHTHI NUMBER ONE THOUSAND
         1875  +10A50..10A58;N   # Po     [9] KHAROSHTHI PUNCTUATION DOT..KHAROSHTHI PUNCTUATION LINES
         1876  +10A60..10A7C;N   # Lo    [29] OLD SOUTH ARABIAN LETTER HE..OLD SOUTH ARABIAN LETTER THETH
         1877  +10A7D..10A7E;N   # No     [2] OLD SOUTH ARABIAN NUMBER ONE..OLD SOUTH ARABIAN NUMBER FIFTY
         1878  +10A7F;N          # Po         OLD SOUTH ARABIAN NUMERIC INDICATOR
         1879  +10A80..10A9C;N   # Lo    [29] OLD NORTH ARABIAN LETTER HEH..OLD NORTH ARABIAN LETTER ZAH
         1880  +10A9D..10A9F;N   # No     [3] OLD NORTH ARABIAN NUMBER ONE..OLD NORTH ARABIAN NUMBER TWENTY
         1881  +10AC0..10AC7;N   # Lo     [8] MANICHAEAN LETTER ALEPH..MANICHAEAN LETTER WAW
         1882  +10AC8;N          # So         MANICHAEAN SIGN UD
         1883  +10AC9..10AE4;N   # Lo    [28] MANICHAEAN LETTER ZAYIN..MANICHAEAN LETTER TAW
         1884  +10AE5..10AE6;N   # Mn     [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW
         1885  +10AEB..10AEF;N   # No     [5] MANICHAEAN NUMBER ONE..MANICHAEAN NUMBER ONE HUNDRED
         1886  +10AF0..10AF6;N   # Po     [7] MANICHAEAN PUNCTUATION STAR..MANICHAEAN PUNCTUATION LINE FILLER
         1887  +10B00..10B35;N   # Lo    [54] AVESTAN LETTER A..AVESTAN LETTER HE
         1888  +10B39..10B3F;N   # Po     [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION
         1889  +10B40..10B55;N   # Lo    [22] INSCRIPTIONAL PARTHIAN LETTER ALEPH..INSCRIPTIONAL PARTHIAN LETTER TAW
         1890  +10B58..10B5F;N   # No     [8] INSCRIPTIONAL PARTHIAN NUMBER ONE..INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND
         1891  +10B60..10B72;N   # Lo    [19] INSCRIPTIONAL PAHLAVI LETTER ALEPH..INSCRIPTIONAL PAHLAVI LETTER TAW
         1892  +10B78..10B7F;N   # No     [8] INSCRIPTIONAL PAHLAVI NUMBER ONE..INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND
         1893  +10B80..10B91;N   # Lo    [18] PSALTER PAHLAVI LETTER ALEPH..PSALTER PAHLAVI LETTER TAW
         1894  +10B99..10B9C;N   # Po     [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT
         1895  +10BA9..10BAF;N   # No     [7] PSALTER PAHLAVI NUMBER ONE..PSALTER PAHLAVI NUMBER ONE HUNDRED
         1896  +10C00..10C48;N   # Lo    [73] OLD TURKIC LETTER ORKHON A..OLD TURKIC LETTER ORKHON BASH
         1897  +10C80..10CB2;N   # Lu    [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US
         1898  +10CC0..10CF2;N   # Ll    [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US
         1899  +10CFA..10CFF;N   # No     [6] OLD HUNGARIAN NUMBER ONE..OLD HUNGARIAN NUMBER ONE THOUSAND
         1900  +10E60..10E7E;N   # No    [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS
         1901  +11000;N          # Mc         BRAHMI SIGN CANDRABINDU
         1902  +11001;N          # Mn         BRAHMI SIGN ANUSVARA
         1903  +11002;N          # Mc         BRAHMI SIGN VISARGA
         1904  +11003..11037;N   # Lo    [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA
         1905  +11038..11046;N   # Mn    [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA
         1906  +11047..1104D;N   # Po     [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS
         1907  +11052..11065;N   # No    [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND
         1908  +11066..1106F;N   # Nd    [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE
         1909  +1107F;N          # Mn         BRAHMI NUMBER JOINER
         1910  +11080..11081;N   # Mn     [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA
         1911  +11082;N          # Mc         KAITHI SIGN VISARGA
         1912  +11083..110AF;N   # Lo    [45] KAITHI LETTER A..KAITHI LETTER HA
         1913  +110B0..110B2;N   # Mc     [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II
         1914  +110B3..110B6;N   # Mn     [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI
         1915  +110B7..110B8;N   # Mc     [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU
         1916  +110B9..110BA;N   # Mn     [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA
         1917  +110BB..110BC;N   # Po     [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN
         1918  +110BD;N          # Cf         KAITHI NUMBER SIGN
         1919  +110BE..110C1;N   # Po     [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA
         1920  +110D0..110E8;N   # Lo    [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE
         1921  +110F0..110F9;N   # Nd    [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE
         1922  +11100..11102;N   # Mn     [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA
         1923  +11103..11126;N   # Lo    [36] CHAKMA LETTER AA..CHAKMA LETTER HAA
         1924  +11127..1112B;N   # Mn     [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU
         1925  +1112C;N          # Mc         CHAKMA VOWEL SIGN E
         1926  +1112D..11134;N   # Mn     [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA
         1927  +11136..1113F;N   # Nd    [10] CHAKMA DIGIT ZERO..CHAKMA DIGIT NINE
         1928  +11140..11143;N   # Po     [4] CHAKMA SECTION MARK..CHAKMA QUESTION MARK
         1929  +11150..11172;N   # Lo    [35] MAHAJANI LETTER A..MAHAJANI LETTER RRA
         1930  +11173;N          # Mn         MAHAJANI SIGN NUKTA
         1931  +11174..11175;N   # Po     [2] MAHAJANI ABBREVIATION SIGN..MAHAJANI SECTION MARK
         1932  +11176;N          # Lo         MAHAJANI LIGATURE SHRI
         1933  +11180..11181;N   # Mn     [2] SHARADA SIGN CANDRABINDU..SHARADA SIGN ANUSVARA
         1934  +11182;N          # Mc         SHARADA SIGN VISARGA
         1935  +11183..111B2;N   # Lo    [48] SHARADA LETTER A..SHARADA LETTER HA
         1936  +111B3..111B5;N   # Mc     [3] SHARADA VOWEL SIGN AA..SHARADA VOWEL SIGN II
         1937  +111B6..111BE;N   # Mn     [9] SHARADA VOWEL SIGN U..SHARADA VOWEL SIGN O
         1938  +111BF..111C0;N   # Mc     [2] SHARADA VOWEL SIGN AU..SHARADA SIGN VIRAMA
         1939  +111C1..111C4;N   # Lo     [4] SHARADA SIGN AVAGRAHA..SHARADA OM
         1940  +111C5..111C9;N   # Po     [5] SHARADA DANDA..SHARADA SANDHI MARK
         1941  +111CA..111CC;N   # Mn     [3] SHARADA SIGN NUKTA..SHARADA EXTRA SHORT VOWEL MARK
         1942  +111CD;N          # Po         SHARADA SUTRA MARK
         1943  +111D0..111D9;N   # Nd    [10] SHARADA DIGIT ZERO..SHARADA DIGIT NINE
         1944  +111DA;N          # Lo         SHARADA EKAM
         1945  +111DB;N          # Po         SHARADA SIGN SIDDHAM
         1946  +111DC;N          # Lo         SHARADA HEADSTROKE
         1947  +111DD..111DF;N   # Po     [3] SHARADA CONTINUATION SIGN..SHARADA SECTION MARK-2
         1948  +111E1..111F4;N   # No    [20] SINHALA ARCHAIC DIGIT ONE..SINHALA ARCHAIC NUMBER ONE THOUSAND
         1949  +11200..11211;N   # Lo    [18] KHOJKI LETTER A..KHOJKI LETTER JJA
         1950  +11213..1122B;N   # Lo    [25] KHOJKI LETTER NYA..KHOJKI LETTER LLA
         1951  +1122C..1122E;N   # Mc     [3] KHOJKI VOWEL SIGN AA..KHOJKI VOWEL SIGN II
         1952  +1122F..11231;N   # Mn     [3] KHOJKI VOWEL SIGN U..KHOJKI VOWEL SIGN AI
         1953  +11232..11233;N   # Mc     [2] KHOJKI VOWEL SIGN O..KHOJKI VOWEL SIGN AU
         1954  +11234;N          # Mn         KHOJKI SIGN ANUSVARA
         1955  +11235;N          # Mc         KHOJKI SIGN VIRAMA
         1956  +11236..11237;N   # Mn     [2] KHOJKI SIGN NUKTA..KHOJKI SIGN SHADDA
         1957  +11238..1123D;N   # Po     [6] KHOJKI DANDA..KHOJKI ABBREVIATION SIGN
         1958  +1123E;N          # Mn         KHOJKI SIGN SUKUN
         1959  +11280..11286;N   # Lo     [7] MULTANI LETTER A..MULTANI LETTER GA
         1960  +11288;N          # Lo         MULTANI LETTER GHA
         1961  +1128A..1128D;N   # Lo     [4] MULTANI LETTER CA..MULTANI LETTER JJA
         1962  +1128F..1129D;N   # Lo    [15] MULTANI LETTER NYA..MULTANI LETTER BA
         1963  +1129F..112A8;N   # Lo    [10] MULTANI LETTER BHA..MULTANI LETTER RHA
         1964  +112A9;N          # Po         MULTANI SECTION MARK
         1965  +112B0..112DE;N   # Lo    [47] KHUDAWADI LETTER A..KHUDAWADI LETTER HA
         1966  +112DF;N          # Mn         KHUDAWADI SIGN ANUSVARA
         1967  +112E0..112E2;N   # Mc     [3] KHUDAWADI VOWEL SIGN AA..KHUDAWADI VOWEL SIGN II
         1968  +112E3..112EA;N   # Mn     [8] KHUDAWADI VOWEL SIGN U..KHUDAWADI SIGN VIRAMA
         1969  +112F0..112F9;N   # Nd    [10] KHUDAWADI DIGIT ZERO..KHUDAWADI DIGIT NINE
         1970  +11300..11301;N   # Mn     [2] GRANTHA SIGN COMBINING ANUSVARA ABOVE..GRANTHA SIGN CANDRABINDU
         1971  +11302..11303;N   # Mc     [2] GRANTHA SIGN ANUSVARA..GRANTHA SIGN VISARGA
         1972  +11305..1130C;N   # Lo     [8] GRANTHA LETTER A..GRANTHA LETTER VOCALIC L
         1973  +1130F..11310;N   # Lo     [2] GRANTHA LETTER EE..GRANTHA LETTER AI
         1974  +11313..11328;N   # Lo    [22] GRANTHA LETTER OO..GRANTHA LETTER NA
         1975  +1132A..11330;N   # Lo     [7] GRANTHA LETTER PA..GRANTHA LETTER RA
         1976  +11332..11333;N   # Lo     [2] GRANTHA LETTER LA..GRANTHA LETTER LLA
         1977  +11335..11339;N   # Lo     [5] GRANTHA LETTER VA..GRANTHA LETTER HA
         1978  +1133C;N          # Mn         GRANTHA SIGN NUKTA
         1979  +1133D;N          # Lo         GRANTHA SIGN AVAGRAHA
         1980  +1133E..1133F;N   # Mc     [2] GRANTHA VOWEL SIGN AA..GRANTHA VOWEL SIGN I
         1981  +11340;N          # Mn         GRANTHA VOWEL SIGN II
         1982  +11341..11344;N   # Mc     [4] GRANTHA VOWEL SIGN U..GRANTHA VOWEL SIGN VOCALIC RR
         1983  +11347..11348;N   # Mc     [2] GRANTHA VOWEL SIGN EE..GRANTHA VOWEL SIGN AI
         1984  +1134B..1134D;N   # Mc     [3] GRANTHA VOWEL SIGN OO..GRANTHA SIGN VIRAMA
         1985  +11350;N          # Lo         GRANTHA OM
         1986  +11357;N          # Mc         GRANTHA AU LENGTH MARK
         1987  +1135D..11361;N   # Lo     [5] GRANTHA SIGN PLUTA..GRANTHA LETTER VOCALIC LL
         1988  +11362..11363;N   # Mc     [2] GRANTHA VOWEL SIGN VOCALIC L..GRANTHA VOWEL SIGN VOCALIC LL
         1989  +11366..1136C;N   # Mn     [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX
         1990  +11370..11374;N   # Mn     [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA
         1991  +11400..11434;N   # Lo    [53] NEWA LETTER A..NEWA LETTER HA
         1992  +11435..11437;N   # Mc     [3] NEWA VOWEL SIGN AA..NEWA VOWEL SIGN II
         1993  +11438..1143F;N   # Mn     [8] NEWA VOWEL SIGN U..NEWA VOWEL SIGN AI
         1994  +11440..11441;N   # Mc     [2] NEWA VOWEL SIGN O..NEWA VOWEL SIGN AU
         1995  +11442..11444;N   # Mn     [3] NEWA SIGN VIRAMA..NEWA SIGN ANUSVARA
         1996  +11445;N          # Mc         NEWA SIGN VISARGA
         1997  +11446;N          # Mn         NEWA SIGN NUKTA
         1998  +11447..1144A;N   # Lo     [4] NEWA SIGN AVAGRAHA..NEWA SIDDHI
         1999  +1144B..1144F;N   # Po     [5] NEWA DANDA..NEWA ABBREVIATION SIGN
         2000  +11450..11459;N   # Nd    [10] NEWA DIGIT ZERO..NEWA DIGIT NINE
         2001  +1145B;N          # Po         NEWA PLACEHOLDER MARK
         2002  +1145D;N          # Po         NEWA INSERTION SIGN
         2003  +11480..114AF;N   # Lo    [48] TIRHUTA ANJI..TIRHUTA LETTER HA
         2004  +114B0..114B2;N   # Mc     [3] TIRHUTA VOWEL SIGN AA..TIRHUTA VOWEL SIGN II
         2005  +114B3..114B8;N   # Mn     [6] TIRHUTA VOWEL SIGN U..TIRHUTA VOWEL SIGN VOCALIC LL
         2006  +114B9;N          # Mc         TIRHUTA VOWEL SIGN E
         2007  +114BA;N          # Mn         TIRHUTA VOWEL SIGN SHORT E
         2008  +114BB..114BE;N   # Mc     [4] TIRHUTA VOWEL SIGN AI..TIRHUTA VOWEL SIGN AU
         2009  +114BF..114C0;N   # Mn     [2] TIRHUTA SIGN CANDRABINDU..TIRHUTA SIGN ANUSVARA
         2010  +114C1;N          # Mc         TIRHUTA SIGN VISARGA
         2011  +114C2..114C3;N   # Mn     [2] TIRHUTA SIGN VIRAMA..TIRHUTA SIGN NUKTA
         2012  +114C4..114C5;N   # Lo     [2] TIRHUTA SIGN AVAGRAHA..TIRHUTA GVANG
         2013  +114C6;N          # Po         TIRHUTA ABBREVIATION SIGN
         2014  +114C7;N          # Lo         TIRHUTA OM
         2015  +114D0..114D9;N   # Nd    [10] TIRHUTA DIGIT ZERO..TIRHUTA DIGIT NINE
         2016  +11580..115AE;N   # Lo    [47] SIDDHAM LETTER A..SIDDHAM LETTER HA
         2017  +115AF..115B1;N   # Mc     [3] SIDDHAM VOWEL SIGN AA..SIDDHAM VOWEL SIGN II
         2018  +115B2..115B5;N   # Mn     [4] SIDDHAM VOWEL SIGN U..SIDDHAM VOWEL SIGN VOCALIC RR
         2019  +115B8..115BB;N   # Mc     [4] SIDDHAM VOWEL SIGN E..SIDDHAM VOWEL SIGN AU
         2020  +115BC..115BD;N   # Mn     [2] SIDDHAM SIGN CANDRABINDU..SIDDHAM SIGN ANUSVARA
         2021  +115BE;N          # Mc         SIDDHAM SIGN VISARGA
         2022  +115BF..115C0;N   # Mn     [2] SIDDHAM SIGN VIRAMA..SIDDHAM SIGN NUKTA
         2023  +115C1..115D7;N   # Po    [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES
         2024  +115D8..115DB;N   # Lo     [4] SIDDHAM LETTER THREE-CIRCLE ALTERNATE I..SIDDHAM LETTER ALTERNATE U
         2025  +115DC..115DD;N   # Mn     [2] SIDDHAM VOWEL SIGN ALTERNATE U..SIDDHAM VOWEL SIGN ALTERNATE UU
         2026  +11600..1162F;N   # Lo    [48] MODI LETTER A..MODI LETTER LLA
         2027  +11630..11632;N   # Mc     [3] MODI VOWEL SIGN AA..MODI VOWEL SIGN II
         2028  +11633..1163A;N   # Mn     [8] MODI VOWEL SIGN U..MODI VOWEL SIGN AI
         2029  +1163B..1163C;N   # Mc     [2] MODI VOWEL SIGN O..MODI VOWEL SIGN AU
         2030  +1163D;N          # Mn         MODI SIGN ANUSVARA
         2031  +1163E;N          # Mc         MODI SIGN VISARGA
         2032  +1163F..11640;N   # Mn     [2] MODI SIGN VIRAMA..MODI SIGN ARDHACANDRA
         2033  +11641..11643;N   # Po     [3] MODI DANDA..MODI ABBREVIATION SIGN
         2034  +11644;N          # Lo         MODI SIGN HUVA
         2035  +11650..11659;N   # Nd    [10] MODI DIGIT ZERO..MODI DIGIT NINE
         2036  +11660..1166C;N   # Po    [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT
         2037  +11680..116AA;N   # Lo    [43] TAKRI LETTER A..TAKRI LETTER RRA
         2038  +116AB;N          # Mn         TAKRI SIGN ANUSVARA
         2039  +116AC;N          # Mc         TAKRI SIGN VISARGA
         2040  +116AD;N          # Mn         TAKRI VOWEL SIGN AA
         2041  +116AE..116AF;N   # Mc     [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II
         2042  +116B0..116B5;N   # Mn     [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU
         2043  +116B6;N          # Mc         TAKRI SIGN VIRAMA
         2044  +116B7;N          # Mn         TAKRI SIGN NUKTA
         2045  +116C0..116C9;N   # Nd    [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE
         2046  +11700..11719;N   # Lo    [26] AHOM LETTER KA..AHOM LETTER JHA
         2047  +1171D..1171F;N   # Mn     [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA
         2048  +11720..11721;N   # Mc     [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA
         2049  +11722..11725;N   # Mn     [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU
         2050  +11726;N          # Mc         AHOM VOWEL SIGN E
         2051  +11727..1172B;N   # Mn     [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER
         2052  +11730..11739;N   # Nd    [10] AHOM DIGIT ZERO..AHOM DIGIT NINE
         2053  +1173A..1173B;N   # No     [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY
         2054  +1173C..1173E;N   # Po     [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI
         2055  +1173F;N          # So         AHOM SYMBOL VI
         2056  +118A0..118DF;N   # L&    [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO
         2057  +118E0..118E9;N   # Nd    [10] WARANG CITI DIGIT ZERO..WARANG CITI DIGIT NINE
         2058  +118EA..118F2;N   # No     [9] WARANG CITI NUMBER TEN..WARANG CITI NUMBER NINETY
         2059  +118FF;N          # Lo         WARANG CITI OM
         2060  +11A00;N          # Lo         ZANABAZAR SQUARE LETTER A
         2061  +11A01..11A06;N   # Mn     [6] ZANABAZAR SQUARE VOWEL SIGN I..ZANABAZAR SQUARE VOWEL SIGN O
         2062  +11A07..11A08;N   # Mc     [2] ZANABAZAR SQUARE VOWEL SIGN AI..ZANABAZAR SQUARE VOWEL SIGN AU
         2063  +11A09..11A0A;N   # Mn     [2] ZANABAZAR SQUARE VOWEL SIGN REVERSED I..ZANABAZAR SQUARE VOWEL LENGTH MARK
         2064  +11A0B..11A32;N   # Lo    [40] ZANABAZAR SQUARE LETTER KA..ZANABAZAR SQUARE LETTER KSSA
         2065  +11A33..11A38;N   # Mn     [6] ZANABAZAR SQUARE FINAL CONSONANT MARK..ZANABAZAR SQUARE SIGN ANUSVARA
         2066  +11A39;N          # Mc         ZANABAZAR SQUARE SIGN VISARGA
         2067  +11A3A;N          # Lo         ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA
         2068  +11A3B..11A3E;N   # Mn     [4] ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA..ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA
         2069  +11A3F..11A46;N   # Po     [8] ZANABAZAR SQUARE INITIAL HEAD MARK..ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK
         2070  +11A47;N          # Mn         ZANABAZAR SQUARE SUBJOINER
         2071  +11A50;N          # Lo         SOYOMBO LETTER A
         2072  +11A51..11A56;N   # Mn     [6] SOYOMBO VOWEL SIGN I..SOYOMBO VOWEL SIGN OE
         2073  +11A57..11A58;N   # Mc     [2] SOYOMBO VOWEL SIGN AI..SOYOMBO VOWEL SIGN AU
         2074  +11A59..11A5B;N   # Mn     [3] SOYOMBO VOWEL SIGN VOCALIC R..SOYOMBO VOWEL LENGTH MARK
         2075  +11A5C..11A83;N   # Lo    [40] SOYOMBO LETTER KA..SOYOMBO LETTER KSSA
         2076  +11A86..11A89;N   # Lo     [4] SOYOMBO CLUSTER-INITIAL LETTER RA..SOYOMBO CLUSTER-INITIAL LETTER SA
         2077  +11A8A..11A96;N   # Mn    [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA
         2078  +11A97;N          # Mc         SOYOMBO SIGN VISARGA
         2079  +11A98..11A99;N   # Mn     [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER
         2080  +11A9A..11A9C;N   # Po     [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD
         2081  +11A9E..11AA2;N   # Po     [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2
         2082  +11AC0..11AF8;N   # Lo    [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL
         2083  +11C00..11C08;N   # Lo     [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L
         2084  +11C0A..11C2E;N   # Lo    [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA
         2085  +11C2F;N          # Mc         BHAIKSUKI VOWEL SIGN AA
         2086  +11C30..11C36;N   # Mn     [7] BHAIKSUKI VOWEL SIGN I..BHAIKSUKI VOWEL SIGN VOCALIC L
         2087  +11C38..11C3D;N   # Mn     [6] BHAIKSUKI VOWEL SIGN E..BHAIKSUKI SIGN ANUSVARA
         2088  +11C3E;N          # Mc         BHAIKSUKI SIGN VISARGA
         2089  +11C3F;N          # Mn         BHAIKSUKI SIGN VIRAMA
         2090  +11C40;N          # Lo         BHAIKSUKI SIGN AVAGRAHA
         2091  +11C41..11C45;N   # Po     [5] BHAIKSUKI DANDA..BHAIKSUKI GAP FILLER-2
         2092  +11C50..11C59;N   # Nd    [10] BHAIKSUKI DIGIT ZERO..BHAIKSUKI DIGIT NINE
         2093  +11C5A..11C6C;N   # No    [19] BHAIKSUKI NUMBER ONE..BHAIKSUKI HUNDREDS UNIT MARK
         2094  +11C70..11C71;N   # Po     [2] MARCHEN HEAD MARK..MARCHEN MARK SHAD
         2095  +11C72..11C8F;N   # Lo    [30] MARCHEN LETTER KA..MARCHEN LETTER A
         2096  +11C92..11CA7;N   # Mn    [22] MARCHEN SUBJOINED LETTER KA..MARCHEN SUBJOINED LETTER ZA
         2097  +11CA9;N          # Mc         MARCHEN SUBJOINED LETTER YA
         2098  +11CAA..11CB0;N   # Mn     [7] MARCHEN SUBJOINED LETTER RA..MARCHEN VOWEL SIGN AA
         2099  +11CB1;N          # Mc         MARCHEN VOWEL SIGN I
         2100  +11CB2..11CB3;N   # Mn     [2] MARCHEN VOWEL SIGN U..MARCHEN VOWEL SIGN E
         2101  +11CB4;N          # Mc         MARCHEN VOWEL SIGN O
         2102  +11CB5..11CB6;N   # Mn     [2] MARCHEN SIGN ANUSVARA..MARCHEN SIGN CANDRABINDU
         2103  +11D00..11D06;N   # Lo     [7] MASARAM GONDI LETTER A..MASARAM GONDI LETTER E
         2104  +11D08..11D09;N   # Lo     [2] MASARAM GONDI LETTER AI..MASARAM GONDI LETTER O
         2105  +11D0B..11D30;N   # Lo    [38] MASARAM GONDI LETTER AU..MASARAM GONDI LETTER TRA
         2106  +11D31..11D36;N   # Mn     [6] MASARAM GONDI VOWEL SIGN AA..MASARAM GONDI VOWEL SIGN VOCALIC R
         2107  +11D3A;N          # Mn         MASARAM GONDI VOWEL SIGN E
         2108  +11D3C..11D3D;N   # Mn     [2] MASARAM GONDI VOWEL SIGN AI..MASARAM GONDI VOWEL SIGN O
         2109  +11D3F..11D45;N   # Mn     [7] MASARAM GONDI VOWEL SIGN AU..MASARAM GONDI VIRAMA
         2110  +11D46;N          # Lo         MASARAM GONDI REPHA
         2111  +11D47;N          # Mn         MASARAM GONDI RA-KARA
         2112  +11D50..11D59;N   # Nd    [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE
         2113  +12000..12399;N   # Lo   [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U
         2114  +12400..1246E;N   # Nl   [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM
         2115  +12470..12474;N   # Po     [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON
         2116  +12480..12543;N   # Lo   [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU
         2117  +13000..1342E;N   # Lo  [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032
         2118  +14400..14646;N   # Lo   [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530
         2119  +16800..16A38;N   # Lo   [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ
         2120  +16A40..16A5E;N   # Lo    [31] MRO LETTER TA..MRO LETTER TEK
         2121  +16A60..16A69;N   # Nd    [10] MRO DIGIT ZERO..MRO DIGIT NINE
         2122  +16A6E..16A6F;N   # Po     [2] MRO DANDA..MRO DOUBLE DANDA
         2123  +16AD0..16AED;N   # Lo    [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I
         2124  +16AF0..16AF4;N   # Mn     [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE
         2125  +16AF5;N          # Po         BASSA VAH FULL STOP
         2126  +16B00..16B2F;N   # Lo    [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU
         2127  +16B30..16B36;N   # Mn     [7] PAHAWH HMONG MARK CIM TUB..PAHAWH HMONG MARK CIM TAUM
         2128  +16B37..16B3B;N   # Po     [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM
         2129  +16B3C..16B3F;N   # So     [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB
         2130  +16B40..16B43;N   # Lm     [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM
         2131  +16B44;N          # Po         PAHAWH HMONG SIGN XAUS
         2132  +16B45;N          # So         PAHAWH HMONG SIGN CIM TSOV ROG
         2133  +16B50..16B59;N   # Nd    [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE
         2134  +16B5B..16B61;N   # No     [7] PAHAWH HMONG NUMBER TENS..PAHAWH HMONG NUMBER TRILLIONS
         2135  +16B63..16B77;N   # Lo    [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS
         2136  +16B7D..16B8F;N   # Lo    [19] PAHAWH HMONG CLAN SIGN TSHEEJ..PAHAWH HMONG CLAN SIGN VWJ
         2137  +16F00..16F44;N   # Lo    [69] MIAO LETTER PA..MIAO LETTER HHA
         2138  +16F50;N          # Lo         MIAO LETTER NASALIZATION
         2139  +16F51..16F7E;N   # Mc    [46] MIAO SIGN ASPIRATION..MIAO VOWEL SIGN NG
         2140  +16F8F..16F92;N   # Mn     [4] MIAO TONE RIGHT..MIAO TONE BELOW
         2141  +16F93..16F9F;N   # Lm    [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8
         2142  +16FE0..16FE1;W   # Lm     [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK
         2143  +17000..187EC;W   # Lo  [6125] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187EC
         2144  +18800..18AF2;W   # Lo   [755] TANGUT COMPONENT-001..TANGUT COMPONENT-755
         2145  +1B000..1B0FF;W   # Lo   [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2
         2146  +1B100..1B11E;W   # Lo    [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2
         2147  +1B170..1B2FB;W   # Lo   [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB
         2148  +1BC00..1BC6A;N   # Lo   [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M
         2149  +1BC70..1BC7C;N   # Lo    [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK
         2150  +1BC80..1BC88;N   # Lo     [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL
         2151  +1BC90..1BC99;N   # Lo    [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW
         2152  +1BC9C;N          # So         DUPLOYAN SIGN O WITH CROSS
         2153  +1BC9D..1BC9E;N   # Mn     [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK
         2154  +1BC9F;N          # Po         DUPLOYAN PUNCTUATION CHINOOK FULL STOP
         2155  +1BCA0..1BCA3;N   # Cf     [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP
         2156  +1D000..1D0F5;N   # So   [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO
         2157  +1D100..1D126;N   # So    [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2
         2158  +1D129..1D164;N   # So    [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
         2159  +1D165..1D166;N   # Mc     [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM
         2160  +1D167..1D169;N   # Mn     [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3
         2161  +1D16A..1D16C;N   # So     [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3
         2162  +1D16D..1D172;N   # Mc     [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5
         2163  +1D173..1D17A;N   # Cf     [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE
         2164  +1D17B..1D182;N   # Mn     [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE
         2165  +1D183..1D184;N   # So     [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN
         2166  +1D185..1D18B;N   # Mn     [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE
         2167  +1D18C..1D1A9;N   # So    [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH
         2168  +1D1AA..1D1AD;N   # Mn     [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO
         2169  +1D1AE..1D1E8;N   # So    [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN
         2170  +1D200..1D241;N   # So    [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54
         2171  +1D242..1D244;N   # Mn     [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME
         2172  +1D245;N          # So         GREEK MUSICAL LEIMMA
         2173  +1D300..1D356;N   # So    [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING
         2174  +1D360..1D371;N   # No    [18] COUNTING ROD UNIT DIGIT ONE..COUNTING ROD TENS DIGIT NINE
         2175  +1D400..1D454;N   # L&    [85] MATHEMATICAL BOLD CAPITAL A..MATHEMATICAL ITALIC SMALL G
         2176  +1D456..1D49C;N   # L&    [71] MATHEMATICAL ITALIC SMALL I..MATHEMATICAL SCRIPT CAPITAL A
         2177  +1D49E..1D49F;N   # Lu     [2] MATHEMATICAL SCRIPT CAPITAL C..MATHEMATICAL SCRIPT CAPITAL D
         2178  +1D4A2;N          # Lu         MATHEMATICAL SCRIPT CAPITAL G
         2179  +1D4A5..1D4A6;N   # Lu     [2] MATHEMATICAL SCRIPT CAPITAL J..MATHEMATICAL SCRIPT CAPITAL K
         2180  +1D4A9..1D4AC;N   # Lu     [4] MATHEMATICAL SCRIPT CAPITAL N..MATHEMATICAL SCRIPT CAPITAL Q
         2181  +1D4AE..1D4B9;N   # L&    [12] MATHEMATICAL SCRIPT CAPITAL S..MATHEMATICAL SCRIPT SMALL D
         2182  +1D4BB;N          # Ll         MATHEMATICAL SCRIPT SMALL F
         2183  +1D4BD..1D4C3;N   # Ll     [7] MATHEMATICAL SCRIPT SMALL H..MATHEMATICAL SCRIPT SMALL N
         2184  +1D4C5..1D505;N   # L&    [65] MATHEMATICAL SCRIPT SMALL P..MATHEMATICAL FRAKTUR CAPITAL B
         2185  +1D507..1D50A;N   # Lu     [4] MATHEMATICAL FRAKTUR CAPITAL D..MATHEMATICAL FRAKTUR CAPITAL G
         2186  +1D50D..1D514;N   # Lu     [8] MATHEMATICAL FRAKTUR CAPITAL J..MATHEMATICAL FRAKTUR CAPITAL Q
         2187  +1D516..1D51C;N   # Lu     [7] MATHEMATICAL FRAKTUR CAPITAL S..MATHEMATICAL FRAKTUR CAPITAL Y
         2188  +1D51E..1D539;N   # L&    [28] MATHEMATICAL FRAKTUR SMALL A..MATHEMATICAL DOUBLE-STRUCK CAPITAL B
         2189  +1D53B..1D53E;N   # Lu     [4] MATHEMATICAL DOUBLE-STRUCK CAPITAL D..MATHEMATICAL DOUBLE-STRUCK CAPITAL G
         2190  +1D540..1D544;N   # Lu     [5] MATHEMATICAL DOUBLE-STRUCK CAPITAL I..MATHEMATICAL DOUBLE-STRUCK CAPITAL M
         2191  +1D546;N          # Lu         MATHEMATICAL DOUBLE-STRUCK CAPITAL O
         2192  +1D54A..1D550;N   # Lu     [7] MATHEMATICAL DOUBLE-STRUCK CAPITAL S..MATHEMATICAL DOUBLE-STRUCK CAPITAL Y
         2193  +1D552..1D6A5;N   # L&   [340] MATHEMATICAL DOUBLE-STRUCK SMALL A..MATHEMATICAL ITALIC SMALL DOTLESS J
         2194  +1D6A8..1D6C0;N   # Lu    [25] MATHEMATICAL BOLD CAPITAL ALPHA..MATHEMATICAL BOLD CAPITAL OMEGA
         2195  +1D6C1;N          # Sm         MATHEMATICAL BOLD NABLA
         2196  +1D6C2..1D6DA;N   # Ll    [25] MATHEMATICAL BOLD SMALL ALPHA..MATHEMATICAL BOLD SMALL OMEGA
         2197  +1D6DB;N          # Sm         MATHEMATICAL BOLD PARTIAL DIFFERENTIAL
         2198  +1D6DC..1D6FA;N   # L&    [31] MATHEMATICAL BOLD EPSILON SYMBOL..MATHEMATICAL ITALIC CAPITAL OMEGA
         2199  +1D6FB;N          # Sm         MATHEMATICAL ITALIC NABLA
         2200  +1D6FC..1D714;N   # Ll    [25] MATHEMATICAL ITALIC SMALL ALPHA..MATHEMATICAL ITALIC SMALL OMEGA
         2201  +1D715;N          # Sm         MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL
         2202  +1D716..1D734;N   # L&    [31] MATHEMATICAL ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD ITALIC CAPITAL OMEGA
         2203  +1D735;N          # Sm         MATHEMATICAL BOLD ITALIC NABLA
         2204  +1D736..1D74E;N   # Ll    [25] MATHEMATICAL BOLD ITALIC SMALL ALPHA..MATHEMATICAL BOLD ITALIC SMALL OMEGA
         2205  +1D74F;N          # Sm         MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL
         2206  +1D750..1D76E;N   # L&    [31] MATHEMATICAL BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA
         2207  +1D76F;N          # Sm         MATHEMATICAL SANS-SERIF BOLD NABLA
         2208  +1D770..1D788;N   # Ll    [25] MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA
         2209  +1D789;N          # Sm         MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL
         2210  +1D78A..1D7A8;N   # L&    [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA
         2211  +1D7A9;N          # Sm         MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA
         2212  +1D7AA..1D7C2;N   # Ll    [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA
         2213  +1D7C3;N          # Sm         MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL
         2214  +1D7C4..1D7CB;N   # L&     [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA
         2215  +1D7CE..1D7FF;N   # Nd    [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE
         2216  +1D800..1D9FF;N   # So   [512] SIGNWRITING HAND-FIST INDEX..SIGNWRITING HEAD
         2217  +1DA00..1DA36;N   # Mn    [55] SIGNWRITING HEAD RIM..SIGNWRITING AIR SUCKING IN
         2218  +1DA37..1DA3A;N   # So     [4] SIGNWRITING AIR BLOW SMALL ROTATIONS..SIGNWRITING BREATH EXHALE
         2219  +1DA3B..1DA6C;N   # Mn    [50] SIGNWRITING MOUTH CLOSED NEUTRAL..SIGNWRITING EXCITEMENT
         2220  +1DA6D..1DA74;N   # So     [8] SIGNWRITING SHOULDER HIP SPINE..SIGNWRITING TORSO-FLOORPLANE TWISTING
         2221  +1DA75;N          # Mn         SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS
         2222  +1DA76..1DA83;N   # So    [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH
         2223  +1DA84;N          # Mn         SIGNWRITING LOCATION HEAD NECK
         2224  +1DA85..1DA86;N   # So     [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS
         2225  +1DA87..1DA8B;N   # Po     [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS
         2226  +1DA9B..1DA9F;N   # Mn     [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6
         2227  +1DAA1..1DAAF;N   # Mn    [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16
         2228  +1E000..1E006;N   # Mn     [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE
         2229  +1E008..1E018;N   # Mn    [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU
         2230  +1E01B..1E021;N   # Mn     [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI
         2231  +1E023..1E024;N   # Mn     [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS
         2232  +1E026..1E02A;N   # Mn     [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA
         2233  +1E800..1E8C4;N   # Lo   [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON
         2234  +1E8C7..1E8CF;N   # No     [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE
         2235  +1E8D0..1E8D6;N   # Mn     [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS
         2236  +1E900..1E943;N   # L&    [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA
         2237  +1E944..1E94A;N   # Mn     [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA
         2238  +1E950..1E959;N   # Nd    [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE
         2239  +1E95E..1E95F;N   # Po     [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK
         2240  +1EE00..1EE03;N   # Lo     [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL
         2241  +1EE05..1EE1F;N   # Lo    [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF
         2242  +1EE21..1EE22;N   # Lo     [2] ARABIC MATHEMATICAL INITIAL BEH..ARABIC MATHEMATICAL INITIAL JEEM
         2243  +1EE24;N          # Lo         ARABIC MATHEMATICAL INITIAL HEH
         2244  +1EE27;N          # Lo         ARABIC MATHEMATICAL INITIAL HAH
         2245  +1EE29..1EE32;N   # Lo    [10] ARABIC MATHEMATICAL INITIAL YEH..ARABIC MATHEMATICAL INITIAL QAF
         2246  +1EE34..1EE37;N   # Lo     [4] ARABIC MATHEMATICAL INITIAL SHEEN..ARABIC MATHEMATICAL INITIAL KHAH
         2247  +1EE39;N          # Lo         ARABIC MATHEMATICAL INITIAL DAD
         2248  +1EE3B;N          # Lo         ARABIC MATHEMATICAL INITIAL GHAIN
         2249  +1EE42;N          # Lo         ARABIC MATHEMATICAL TAILED JEEM
         2250  +1EE47;N          # Lo         ARABIC MATHEMATICAL TAILED HAH
         2251  +1EE49;N          # Lo         ARABIC MATHEMATICAL TAILED YEH
         2252  +1EE4B;N          # Lo         ARABIC MATHEMATICAL TAILED LAM
         2253  +1EE4D..1EE4F;N   # Lo     [3] ARABIC MATHEMATICAL TAILED NOON..ARABIC MATHEMATICAL TAILED AIN
         2254  +1EE51..1EE52;N   # Lo     [2] ARABIC MATHEMATICAL TAILED SAD..ARABIC MATHEMATICAL TAILED QAF
         2255  +1EE54;N          # Lo         ARABIC MATHEMATICAL TAILED SHEEN
         2256  +1EE57;N          # Lo         ARABIC MATHEMATICAL TAILED KHAH
         2257  +1EE59;N          # Lo         ARABIC MATHEMATICAL TAILED DAD
         2258  +1EE5B;N          # Lo         ARABIC MATHEMATICAL TAILED GHAIN
         2259  +1EE5D;N          # Lo         ARABIC MATHEMATICAL TAILED DOTLESS NOON
         2260  +1EE5F;N          # Lo         ARABIC MATHEMATICAL TAILED DOTLESS QAF
         2261  +1EE61..1EE62;N   # Lo     [2] ARABIC MATHEMATICAL STRETCHED BEH..ARABIC MATHEMATICAL STRETCHED JEEM
         2262  +1EE64;N          # Lo         ARABIC MATHEMATICAL STRETCHED HEH
         2263  +1EE67..1EE6A;N   # Lo     [4] ARABIC MATHEMATICAL STRETCHED HAH..ARABIC MATHEMATICAL STRETCHED KAF
         2264  +1EE6C..1EE72;N   # Lo     [7] ARABIC MATHEMATICAL STRETCHED MEEM..ARABIC MATHEMATICAL STRETCHED QAF
         2265  +1EE74..1EE77;N   # Lo     [4] ARABIC MATHEMATICAL STRETCHED SHEEN..ARABIC MATHEMATICAL STRETCHED KHAH
         2266  +1EE79..1EE7C;N   # Lo     [4] ARABIC MATHEMATICAL STRETCHED DAD..ARABIC MATHEMATICAL STRETCHED DOTLESS BEH
         2267  +1EE7E;N          # Lo         ARABIC MATHEMATICAL STRETCHED DOTLESS FEH
         2268  +1EE80..1EE89;N   # Lo    [10] ARABIC MATHEMATICAL LOOPED ALEF..ARABIC MATHEMATICAL LOOPED YEH
         2269  +1EE8B..1EE9B;N   # Lo    [17] ARABIC MATHEMATICAL LOOPED LAM..ARABIC MATHEMATICAL LOOPED GHAIN
         2270  +1EEA1..1EEA3;N   # Lo     [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL
         2271  +1EEA5..1EEA9;N   # Lo     [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH
         2272  +1EEAB..1EEBB;N   # Lo    [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN
         2273  +1EEF0..1EEF1;N   # Sm     [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL
         2274  +1F000..1F003;N   # So     [4] MAHJONG TILE EAST WIND..MAHJONG TILE NORTH WIND
         2275  +1F004;W          # So         MAHJONG TILE RED DRAGON
         2276  +1F005..1F02B;N   # So    [39] MAHJONG TILE GREEN DRAGON..MAHJONG TILE BACK
         2277  +1F030..1F093;N   # So   [100] DOMINO TILE HORIZONTAL BACK..DOMINO TILE VERTICAL-06-06
         2278  +1F0A0..1F0AE;N   # So    [15] PLAYING CARD BACK..PLAYING CARD KING OF SPADES
         2279  +1F0B1..1F0BF;N   # So    [15] PLAYING CARD ACE OF HEARTS..PLAYING CARD RED JOKER
         2280  +1F0C1..1F0CE;N   # So    [14] PLAYING CARD ACE OF DIAMONDS..PLAYING CARD KING OF DIAMONDS
         2281  +1F0CF;W          # So         PLAYING CARD BLACK JOKER
         2282  +1F0D1..1F0F5;N   # So    [37] PLAYING CARD ACE OF CLUBS..PLAYING CARD TRUMP-21
         2283  +1F100..1F10A;A   # No    [11] DIGIT ZERO FULL STOP..DIGIT NINE COMMA
         2284  +1F10B..1F10C;N   # No     [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO
         2285  +1F110..1F12D;A   # So    [30] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED CD
         2286  +1F12E;N          # So         CIRCLED WZ
         2287  +1F130..1F169;A   # So    [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z
         2288  +1F16A..1F16B;N   # So     [2] RAISED MC SIGN..RAISED MD SIGN
         2289  +1F170..1F18D;A   # So    [30] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED SA
         2290  +1F18E;W          # So         NEGATIVE SQUARED AB
         2291  +1F18F..1F190;A   # So     [2] NEGATIVE SQUARED WC..SQUARE DJ
         2292  +1F191..1F19A;W   # So    [10] SQUARED CL..SQUARED VS
         2293  +1F19B..1F1AC;A   # So    [18] SQUARED THREE D..SQUARED VOD
         2294  +1F1E6..1F1FF;N   # So    [26] REGIONAL INDICATOR SYMBOL LETTER A..REGIONAL INDICATOR SYMBOL LETTER Z
         2295  +1F200..1F202;W   # So     [3] SQUARE HIRAGANA HOKA..SQUARED KATAKANA SA
         2296  +1F210..1F23B;W   # So    [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D
         2297  +1F240..1F248;W   # So     [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557
         2298  +1F250..1F251;W   # So     [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT
         2299  +1F260..1F265;W   # So     [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI
         2300  +1F300..1F320;W   # So    [33] CYCLONE..SHOOTING STAR
         2301  +1F321..1F32C;N   # So    [12] THERMOMETER..WIND BLOWING FACE
         2302  +1F32D..1F335;W   # So     [9] HOT DOG..CACTUS
         2303  +1F336;N          # So         HOT PEPPER
         2304  +1F337..1F37C;W   # So    [70] TULIP..BABY BOTTLE
         2305  +1F37D;N          # So         FORK AND KNIFE WITH PLATE
         2306  +1F37E..1F393;W   # So    [22] BOTTLE WITH POPPING CORK..GRADUATION CAP
         2307  +1F394..1F39F;N   # So    [12] HEART WITH TIP ON THE LEFT..ADMISSION TICKETS
         2308  +1F3A0..1F3CA;W   # So    [43] CAROUSEL HORSE..SWIMMER
         2309  +1F3CB..1F3CE;N   # So     [4] WEIGHT LIFTER..RACING CAR
         2310  +1F3CF..1F3D3;W   # So     [5] CRICKET BAT AND BALL..TABLE TENNIS PADDLE AND BALL
         2311  +1F3D4..1F3DF;N   # So    [12] SNOW CAPPED MOUNTAIN..STADIUM
         2312  +1F3E0..1F3F0;W   # So    [17] HOUSE BUILDING..EUROPEAN CASTLE
         2313  +1F3F1..1F3F3;N   # So     [3] WHITE PENNANT..WAVING WHITE FLAG
         2314  +1F3F4;W          # So         WAVING BLACK FLAG
         2315  +1F3F5..1F3F7;N   # So     [3] ROSETTE..LABEL
         2316  +1F3F8..1F3FA;W   # So     [3] BADMINTON RACQUET AND SHUTTLECOCK..AMPHORA
         2317  +1F3FB..1F3FF;W   # Sk     [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6
         2318  +1F400..1F43E;W   # So    [63] RAT..PAW PRINTS
         2319  +1F43F;N          # So         CHIPMUNK
         2320  +1F440;W          # So         EYES
         2321  +1F441;N          # So         EYE
         2322  +1F442..1F4FC;W   # So   [187] EAR..VIDEOCASSETTE
         2323  +1F4FD..1F4FE;N   # So     [2] FILM PROJECTOR..PORTABLE STEREO
         2324  +1F4FF..1F53D;W   # So    [63] PRAYER BEADS..DOWN-POINTING SMALL RED TRIANGLE
         2325  +1F53E..1F54A;N   # So    [13] LOWER RIGHT SHADOWED WHITE CIRCLE..DOVE OF PEACE
         2326  +1F54B..1F54E;W   # So     [4] KAABA..MENORAH WITH NINE BRANCHES
         2327  +1F54F;N          # So         BOWL OF HYGIEIA
         2328  +1F550..1F567;W   # So    [24] CLOCK FACE ONE OCLOCK..CLOCK FACE TWELVE-THIRTY
         2329  +1F568..1F579;N   # So    [18] RIGHT SPEAKER..JOYSTICK
         2330  +1F57A;W          # So         MAN DANCING
         2331  +1F57B..1F594;N   # So    [26] LEFT HAND TELEPHONE RECEIVER..REVERSED VICTORY HAND
         2332  +1F595..1F596;W   # So     [2] REVERSED HAND WITH MIDDLE FINGER EXTENDED..RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS
         2333  +1F597..1F5A3;N   # So    [13] WHITE DOWN POINTING LEFT HAND INDEX..BLACK DOWN POINTING BACKHAND INDEX
         2334  +1F5A4;W          # So         BLACK HEART
         2335  +1F5A5..1F5FA;N   # So    [86] DESKTOP COMPUTER..WORLD MAP
         2336  +1F5FB..1F5FF;W   # So     [5] MOUNT FUJI..MOYAI
         2337  +1F600..1F64F;W   # So    [80] GRINNING FACE..PERSON WITH FOLDED HANDS
         2338  +1F650..1F67F;N   # So    [48] NORTH WEST POINTING LEAF..REVERSE CHECKER BOARD
         2339  +1F680..1F6C5;W   # So    [70] ROCKET..LEFT LUGGAGE
         2340  +1F6C6..1F6CB;N   # So     [6] TRIANGLE WITH ROUNDED CORNERS..COUCH AND LAMP
         2341  +1F6CC;W          # So         SLEEPING ACCOMMODATION
         2342  +1F6CD..1F6CF;N   # So     [3] SHOPPING BAGS..BED
         2343  +1F6D0..1F6D2;W   # So     [3] PLACE OF WORSHIP..SHOPPING TROLLEY
         2344  +1F6D3..1F6D4;N   # So     [2] STUPA..PAGODA
         2345  +1F6E0..1F6EA;N   # So    [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE
         2346  +1F6EB..1F6EC;W   # So     [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING
         2347  +1F6F0..1F6F3;N   # So     [4] SATELLITE..PASSENGER SHIP
         2348  +1F6F4..1F6F8;W   # So     [5] SCOOTER..FLYING SAUCER
         2349  +1F700..1F773;N   # So   [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE
         2350  +1F780..1F7D4;N   # So    [85] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..HEAVY TWELVE POINTED PINWHEEL STAR
         2351  +1F800..1F80B;N   # So    [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD
         2352  +1F810..1F847;N   # So    [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW
         2353  +1F850..1F859;N   # So    [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW
         2354  +1F860..1F887;N   # So    [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW
         2355  +1F890..1F8AD;N   # So    [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS
         2356  +1F900..1F90B;N   # So    [12] CIRCLED CROSS FORMEE WITH FOUR DOTS..DOWNWARD FACING NOTCHED HOOK WITH DOT
         2357  +1F910..1F93E;W   # So    [47] ZIPPER-MOUTH FACE..HANDBALL
         2358  +1F940..1F94C;W   # So    [13] WILTED FLOWER..CURLING STONE
         2359  +1F950..1F96B;W   # So    [28] CROISSANT..CANNED FOOD
         2360  +1F980..1F997;W   # So    [24] CRAB..CRICKET
         2361  +1F9C0;W          # So         CHEESE WEDGE
         2362  +1F9D0..1F9E6;W   # So    [23] FACE WITH MONOCLE..SOCKS
         2363  +20000..2A6D6;W   # Lo [42711] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6D6
         2364  +2A6D7..2A6FF;W   # Cn    [41] <reserved-2A6D7>..<reserved-2A6FF>
         2365  +2A700..2B734;W   # Lo  [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734
         2366  +2B735..2B73F;W   # Cn    [11] <reserved-2B735>..<reserved-2B73F>
         2367  +2B740..2B81D;W   # Lo   [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D
         2368  +2B81E..2B81F;W   # Cn     [2] <reserved-2B81E>..<reserved-2B81F>
         2369  +2B820..2CEA1;W   # Lo  [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1
         2370  +2CEA2..2CEAF;W   # Cn    [14] <reserved-2CEA2>..<reserved-2CEAF>
         2371  +2CEB0..2EBE0;W   # Lo  [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0
         2372  +2EBE1..2F7FF;W   # Cn  [3103] <reserved-2EBE1>..<reserved-2F7FF>
         2373  +2F800..2FA1D;W   # Lo   [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D
         2374  +2FA1E..2FFFD;W   # Cn  [1504] <reserved-2FA1E>..<reserved-2FFFD>
         2375  +30000..3FFFD;W   # Cn [65534] <reserved-30000>..<reserved-3FFFD>
         2376  +E0001;N          # Cf         LANGUAGE TAG
         2377  +E0020..E007F;N   # Cf    [96] TAG SPACE..CANCEL TAG
         2378  +E0100..E01EF;A   # Mn   [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256
         2379  +F0000..FFFFD;A   # Co [65534] <private-use-F0000>..<private-use-FFFFD>
         2380  +100000..10FFFD;A # Co [65534] <private-use-100000>..<private-use-10FFFD>
         2381  +
         2382  +# EOF

Added LICENSE.

            1  +Unless explicitly stated, all files within Jim repository are released
            2  +under following license:
            3  +
            4  +/* Jim - A small embeddable Tcl interpreter
            5  + *
            6  + * Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
            7  + * Copyright 2005 Clemens Hintze <c.hintze@gmx.net>
            8  + * Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
            9  + * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
           10  + * Copyright 2008 Andrew Lunn <andrew@lunn.ch>
           11  + * Copyright 2008 Duane Ellis <openocd@duaneellis.com>
           12  + * Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de>
           13  + * Copyright 2008 Steve Bennett <steveb@workware.net.au>
           14  + * Copyright 2009 Nico Coesel <ncoesel@dealogic.nl>
           15  + * Copyright 2009 Zachary T Welch zw@superlucidity.net
           16  + * Copyright 2009 David Brownell
           17  + *
           18  + * Redistribution and use in source and binary forms, with or without
           19  + * modification, are permitted provided that the following conditions
           20  + * are met:
           21  + *
           22  + * 1. Redistributions of source code must retain the above copyright
           23  + *    notice, this list of conditions and the following disclaimer.
           24  + * 2. Redistributions in binary form must reproduce the above
           25  + *    copyright notice, this list of conditions and the following
           26  + *    disclaimer in the documentation and/or other materials
           27  + *    provided with the distribution.
           28  + *
           29  + * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY
           30  + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
           31  + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
           32  + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
           33  + * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
           34  + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
           35  + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
           36  + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
           37  + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
           38  + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
           39  + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
           40  + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
           41  + *
           42  + * The views and conclusions contained in the software and documentation
           43  + * are those of the authors and should not be interpreted as representing
           44  + * official policies, either expressed or implied, of the Jim Tcl Project.
           45  + */

Added Makefile.in.

            1  +@if NO_SILENT_RULES
            2  +Q :=
            3  +ECHO := @:
            4  +@else
            5  +# make V=1 for verbose make output
            6  +Q := @
            7  +ECHO := @echo
            8  +ifeq ($(V),1)
            9  +ifeq ("$(origin V)", "command line")
           10  +Q :=
           11  +ECHO := @:
           12  +endif
           13  +endif
           14  +@endif
           15  +
           16  +# Tools
           17  +CC = @CCACHE@ @CC@
           18  +CXX = @CCACHE@ @CXX@
           19  +RANLIB = @RANLIB@
           20  +AR = @AR@
           21  +STRIP = @STRIP@
           22  +
           23  +# Configuration
           24  +
           25  +SH_CFLAGS ?= @SH_CFLAGS@
           26  +SH_LDFLAGS ?= @SH_LDFLAGS@
           27  +@if SH_SOPREFIX
           28  +SH_LDFLAGS += @SH_SOPREFIX@libjim@LIBSOEXT@
           29  +@endif
           30  +SHOBJ_CFLAGS ?= @SHOBJ_CFLAGS@
           31  +@if JIM_STATICLIB
           32  +SHOBJ_LDFLAGS ?= @SHOBJ_LDFLAGS@
           33  +@else
           34  +SHOBJ_LDFLAGS ?= @SHOBJ_LDFLAGS_R@
           35  +@endif
           36  +CFLAGS = @CFLAGS@ @CCOPTS@ @CPPFLAGS@
           37  +CXXFLAGS = @CXXFLAGS@ @CXXOPTS@
           38  +LDFLAGS = @LDFLAGS@
           39  +LDLIBS += @LDLIBS@
           40  +LIBS += @LIBS@
           41  +exec_prefix ?= @exec_prefix@
           42  +prefix ?= @prefix@
           43  +docdir = @docdir@
           44  +
           45  +CC += -Wall $(OPTIM) -I.
           46  +CXX += -Wall $(OPTIM) -I.
           47  +@if srcdir != .
           48  +CFLAGS += -I@srcdir@
           49  +CXXFLAGS += -I@srcdir@
           50  +VPATH := @srcdir@
           51  +@endif
           52  +
           53  +@if JIM_STATICLIB
           54  +LIBJIM := libjim.a
           55  +@else
           56  +LIBJIM := libjim@LIBSOEXT@
           57  +SH_LIBJIM := $(LIBJIM)
           58  +CC += $(SH_CFLAGS)
           59  +CXX += $(SH_CFLAGS)
           60  +DEF_LD_PATH := @LD_LIBRARY_PATH@="@builddir@:$(@LD_LIBRARY_PATH@)"
           61  +@endif
           62  +
           63  +@if HAVE_CXX_EXTENSIONS
           64  +JIMSH_CC := $(CXX) $(CXXFLAGS)
           65  +@else
           66  +JIMSH_CC := $(CC) $(CFLAGS)
           67  +@endif
           68  +
           69  +OBJS := _load-static-exts.o jim-subcmd.o jim-interactive.o jim-format.o jim.o utf8.o jimregexp.o jimiocompat.o \
           70  +    @EXTRA_OBJS@ @C_EXT_OBJS@ @TCL_EXT_OBJS@
           71  +
           72  +JIMSH := jimsh@EXEEXT@
           73  +
           74  +@if JIM_INSTALL
           75  +INSTALL_DATA_DIR ?= mkdir -p
           76  +INSTALL_DATA ?= cp
           77  +INSTALL_PROGRAM ?= cp
           78  +@endif
           79  +
           80  +all: $(JIMSH) @C_EXT_SHOBJS@
           81  +
           82  +# Create C extensions from pure Tcl extensions
           83  +.SUFFIXES: .tcl
           84  +.tcl.o:
           85  +	$(ECHO) " 	TCLEXT	_$*.c"
           86  +	$(Q)@tclsh@ @srcdir@/make-c-ext.tcl $< >_$*.c
           87  +	$(ECHO) " 	CC	$@"
           88  +	$(Q)$(CC) $(CFLAGS) -c -o $@ _$*.c
           89  +
           90  +.c.o:
           91  +	$(ECHO) "	CC	$@"
           92  +	$(Q)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@
           93  +
           94  +$(JIMSH): $(LIBJIM) jimsh.o initjimsh.o
           95  +	$(ECHO) "	LINK	$@"
           96  +	$(Q)$(JIMSH_CC) @SH_LINKFLAGS@ $(LDFLAGS) -o $@ jimsh.o initjimsh.o $(LIBJIM) $(LDLIBS) $(LIBS)
           97  +
           98  +@if JIM_INSTALL
           99  +install: all @TCL_EXTS@ install-exec install-docs
          100  +	$(INSTALL_DATA_DIR) $(DESTDIR)@libdir@/jim
          101  +	$(INSTALL_DATA) $(LIBJIM) $(DESTDIR)@libdir@
          102  +	$(INSTALL_DATA) @srcdir@/README.extensions @C_EXT_SHOBJS@ $(DESTDIR)@libdir@/jim
          103  +	for i in tcltest.tcl @TCL_EXTS@; do $(INSTALL_DATA) @srcdir@/$$i $(DESTDIR)@libdir@/jim; done
          104  +	$(INSTALL_DATA_DIR) $(DESTDIR)@includedir@
          105  +	$(INSTALL_DATA) @srcdir@/jim.h @srcdir@/jim-eventloop.h @srcdir@/jim-signal.h \
          106  +		@srcdir@/jim-subcmd.h @srcdir@/jim-win32compat.h $(DESTDIR)@includedir@
          107  +	$(INSTALL_DATA) jim-config.h $(DESTDIR)@includedir@
          108  +	$(INSTALL_DATA_DIR) $(DESTDIR)@bindir@
          109  +	$(INSTALL_DATA) build-jim-ext $(DESTDIR)@bindir@
          110  +	$(INSTALL_DATA_DIR) $(DESTDIR)@libdir@/pkgconfig
          111  +	$(INSTALL_DATA) jimtcl.pc $(DESTDIR)@libdir@/pkgconfig
          112  +
          113  +install-exec: all
          114  +	$(INSTALL_DATA_DIR) $(DESTDIR)@bindir@
          115  +	$(INSTALL_PROGRAM) $(JIMSH) $(DESTDIR)@bindir@
          116  +
          117  +uninstall:
          118  +	rm -f $(DESTDIR)@bindir@/$(JIMSH)
          119  +	rm -f $(DESTDIR)@bindir@/build-jim-ext
          120  +	rm -f $(DESTDIR)@libdir@/$(LIBJIM)
          121  +	for i in README.extensions @C_EXT_SHOBJS@ @TCL_EXTS@; do rm -f $(DESTDIR)@libdir@/jim/$$i; done
          122  +	rm -f $(DESTDIR)@includedir@/jim*.h
          123  +	rm -f $(DESTDIR)@datadir@/doc/jim/Tcl.html
          124  +@else
          125  +install install-exec: all
          126  +uninstall:
          127  +@endif
          128  +
          129  +test check: $(JIMSH)
          130  +	cd @srcdir@/tests; $(DEF_LD_PATH) $(MAKE) jimsh=@builddir@/jimsh TOPSRCDIR=..
          131  +
          132  +$(OBJS) jimsh.o initjimsh.o: Makefile $(wildcard *.h)
          133  +
          134  +@if JIM_UTF8
          135  +# Generate the unicode case mapping
          136  +utf8.o: _unicode_mapping.c
          137  +
          138  +_unicode_mapping.c: @srcdir@/UnicodeData.txt @srcdir@/parse-unidata.tcl
          139  +	$(ECHO) "	UNIDATA	$@"
          140  +	$(Q)@tclsh@ @srcdir@/parse-unidata.tcl @PARSE_UNIDATA_FLAGS@ @srcdir@/UnicodeData.txt @srcdir@/EastAsianWidth.txt >$@ || ( rm $@; exit 1)
          141  +@endif
          142  +
          143  +_load-static-exts.c: @srcdir@/make-load-static-exts.tcl Makefile
          144  +	$(ECHO) "	MKLDEXT	$@"
          145  +	$(Q)@tclsh@ @srcdir@/make-load-static-exts.tcl @STATIC_EXTS@ >$@ || ( rm $@; exit 1)
          146  +
          147  +$(LIBJIM): $(OBJS)
          148  +@if JIM_STATICLIB
          149  +	$(ECHO) "	AR	$@"
          150  +	$(Q)$(AR) cr $@ $(OBJS)
          151  +	$(Q)$(RANLIB) $@
          152  +@else
          153  +	$(ECHO) "	LDSO	$@"
          154  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SH_LDFLAGS) -o $@ $(OBJS) $(LDLIBS) $(LIBS)
          155  +@endif
          156  +
          157  +# Note that $> $^ is for compatibility with both GNU make and BSD make
          158  +readdir.so: jim-readdir.c
          159  +	$(ECHO)	"	CC	${@:.so=.o}"
          160  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-readdir.o $> $^
          161  +	$(ECHO)	"	LDSO	$@"
          162  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-readdir.o $(SH_LIBJIM)
          163  +
          164  +array.so: jim-array.c
          165  +	$(ECHO)	"	CC	${@:.so=.o}"
          166  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-array.o $> $^
          167  +	$(ECHO)	"	LDSO	$@"
          168  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-array.o $(SH_LIBJIM)
          169  +
          170  +clock.so: jim-clock.c
          171  +	$(ECHO)	"	CC	${@:.so=.o}"
          172  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-clock.o $> $^
          173  +	$(ECHO)	"	LDSO	$@"
          174  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-clock.o $(SH_LIBJIM)
          175  +
          176  +file.so: jim-file.c
          177  +	$(ECHO)	"	CC	${@:.so=.o}"
          178  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-file.o $> $^
          179  +	$(ECHO)	"	LDSO	$@"
          180  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-file.o $(SH_LIBJIM)
          181  +
          182  +interp.so: jim-interp.c
          183  +	$(ECHO)	"	CC	${@:.so=.o}"
          184  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-interp.o jim-interp.c
          185  +	$(ECHO)	"	LDSO	$@"
          186  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-interp.o $(SH_LIBJIM) @LDLIBS_interp@
          187  +
          188  +posix.so: jim-posix.c
          189  +	$(ECHO)	"	CC	${@:.so=.o}"
          190  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-posix.o $> $^
          191  +	$(ECHO)	"	LDSO	$@"
          192  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-posix.o $(SH_LIBJIM)
          193  +
          194  +regexp.so: jim-regexp.c
          195  +	$(ECHO)	"	CC	${@:.so=.o}"
          196  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-regexp.o $> $^
          197  +	$(ECHO)	"	LDSO	$@"
          198  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-regexp.o $(SH_LIBJIM)
          199  +
          200  +syslog.so: jim-syslog.c
          201  +	$(ECHO)	"	CC	${@:.so=.o}"
          202  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-syslog.o $> $^
          203  +	$(ECHO)	"	LDSO	$@"
          204  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-syslog.o $(SH_LIBJIM)
          205  +
          206  +readline.so: jim-readline.c
          207  +	$(ECHO)	"	CC	${@:.so=.o}"
          208  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-readline.o $> $^
          209  +	$(ECHO)	"	LDSO	$@"
          210  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-readline.o $(SH_LIBJIM) @LDLIBS_readline@
          211  +
          212  +pack.so: jim-pack.c
          213  +	$(ECHO)	"	CC	${@:.so=.o}"
          214  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-pack.o $> $^
          215  +	$(ECHO)	"	LDSO	$@"
          216  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-pack.o $(SH_LIBJIM) @LDLIBS_pack@
          217  +
          218  +tclprefix.so: jim-tclprefix.c
          219  +	$(ECHO)	"	CC	${@:.so=.o}"
          220  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-tclprefix.o $> $^
          221  +	$(ECHO)	"	LDSO	$@"
          222  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-tclprefix.o $(SH_LIBJIM) @LDLIBS_tclprefix@
          223  +
          224  +sqlite3.so: jim-sqlite3.c
          225  +	$(ECHO)	"	CC	${@:.so=.o}"
          226  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-sqlite3.o $> $^
          227  +	$(ECHO)	"	LDSO	$@"
          228  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-sqlite3.o $(SH_LIBJIM) @LDLIBS_sqlite3@
          229  +
          230  +win32.so: jim-win32.c
          231  +	$(ECHO)	"	CC	${@:.so=.o}"
          232  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-win32.o $> $^
          233  +	$(ECHO)	"	LDSO	$@"
          234  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-win32.o $(SH_LIBJIM) @LDLIBS_win32@
          235  +
          236  +mk.so: jim-mk.cpp
          237  +	$(ECHO)	"	CC	${@:.so=.o}"
          238  +	$(Q)$(CXX) $(CXXFLAGS) $(SHOBJ_CFLAGS) -c -o jim-mk.o $> $^
          239  +	$(ECHO)	"	LDSO	$@"
          240  +	$(Q)$(CXX) $(CXXFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-mk.o $(SH_LIBJIM) @LDLIBS_mk@
          241  +
          242  +sdl.so: jim-sdl.c
          243  +	$(ECHO)	"	CC	${@:.so=.o}"
          244  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-sdl.o $> $^
          245  +	$(ECHO)	"	LDSO	$@"
          246  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-sdl.o $(SH_LIBJIM) @LDLIBS_sdl@
          247  +
          248  +zlib.so: jim-zlib.c
          249  +	$(ECHO)	"	CC	${@:.so=.o}"
          250  +	$(Q)$(CC) $(CFLAGS) $(SHOBJ_CFLAGS) -c -o jim-zlib.o $> $^
          251  +	$(ECHO)	"	LDSO	$@"
          252  +	$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $(SHOBJ_LDFLAGS) -o $@ jim-zlib.o $(SH_LIBJIM) @LDLIBS_zlib@
          253  +
          254  +docs: Tcl.html
          255  +
          256  +@if INSTALL_DOCS == nodocs
          257  +install-docs:
          258  +@endif
          259  +
          260  +@if INSTALL_DOCS == docs
          261  +install-docs: docs
          262  +	$(INSTALL_DATA_DIR) $(DESTDIR)$(docdir)
          263  +	$(INSTALL_DATA) Tcl.html $(DESTDIR)$(docdir)
          264  +@endif
          265  +
          266  +@if INSTALL_DOCS == shipped
          267  +install-docs:
          268  +	$(INSTALL_DATA_DIR) $(DESTDIR)$(docdir)
          269  +	@echo "Warning: asciidoc not available - installing Tcl_shipped.html"
          270  +	$(INSTALL_DATA) Tcl_shipped.html $(DESTDIR)$(docdir)/Tcl.html
          271  +@endif
          272  +
          273  +Tcl.html: jim_tcl.txt @srcdir@/make-index
          274  +@if HAVE_ASCIIDOC
          275  +	@tclsh@ @srcdir@/make-index $> $^ | @ASCIIDOC@ -d manpage - | @SED@ -e '/^<div.*id="footer-text"/,/<\/div>/d' >$@
          276  +@else
          277  +	@echo "asciidoc is not available"; false
          278  +@endif
          279  +
          280  +clean:
          281  +	rm -f *.o *.so *.dll *.exe lib*.a $(JIMSH) $(LIBJIM) Tcl.html _*.c
          282  +
          283  +distclean: clean
          284  +	rm -f jimautoconf.h jim-config.h Makefile config.log @srcdir@/autosetup/jimsh0@EXEEXT@ build-jim-ext
          285  +	rm -f jimtcl.pc
          286  +
          287  +ship: Tcl.html
          288  +	cp $< Tcl_shipped.html
          289  +
          290  +# automake compatibility. do nothing for all these targets
          291  +EMPTY_AUTOMAKE_TARGETS := dvi pdf ps info html tags ctags mostlyclean maintainer-clean check installcheck installdirs \
          292  + install-pdf install-ps install-info install-html -install-dvi uninstall install-data
          293  +.PHONY: $(EMPTY_AUTOMAKE_TARGETS)
          294  +$(EMPTY_AUTOMAKE_TARGETS):
          295  +
          296  +# automake compatibility - install sources from the current dir to $(distdir)
          297  +distdir_full := $(shell cd $(distdir); pwd)
          298  +distdir:
          299  +	cd "@srcdir@"; git ls-files | cpio -pdmu $(distdir_full)
          300  +
          301  +reconfig:
          302  +	CC='@CC@' @AUTOREMAKE@

Added README.

            1  +The Jim Interpreter
            2  +
            3  +A small-footprint implementation of the Tcl programming language.
            4  +
            5  +--------------------------------------------------------------------------------
            6  +WHAT IS JIM?
            7  +--------------------------------------------------------------------------------
            8  +
            9  +Jim is a small footprint implementation of the Tcl programming language
           10  +written from scratch. Currently Jim Tcl is very feature complete with
           11  +an extensive test suite (see the tests directory).
           12  +There are some Tcl commands and features which are not implemented
           13  +(and likely never will be), including traces and Tk. However
           14  +Jim Tcl offers a number of both Tcl8.5 and Tcl8.6 features ({*}, dict, lassign,
           15  +tailcall and optional UTF-8 support) and some unique features.
           16  +These unique features include [lambda] with garbage collection, a general GC/references
           17  +system, arrays as syntax sugar for [dict]tionaries, object-based I/O and more.
           18  +
           19  +Other common features of the Tcl programming language are present, like
           20  +the "everything is a string" behaviour, implemented internally as
           21  +dual ported objects to ensure that the execution time does not reflect
           22  +the semantic of the language :)
           23  +
           24  +--------------------------------------------------------------------------------
           25  +WHEN JIM CAN BE USEFUL?
           26  +--------------------------------------------------------------------------------
           27  +
           28  +1) If you are writing an application, and want to make it scriptable, with
           29  +Jim you have a way to do it that does not require to link your application
           30  +with a big system. You can include the Jim source directly in your project
           31  +and use the Jim API to write the glue code that makes your application
           32  +scriptable in Jim, with the following advantages:
           33  +
           34  +- Jim is not the next "little language", but it's a Tcl implementation.
           35  +  You can reuse your knowledge if you already Tcl skills, or enjoy
           36  +  the availability of documentation, books, web resources, ...
           37  +  (for example check my online Tcl book at http://www.invece.org/tclwise)
           38  +
           39  +- Jim is simple, 14k lines of core code. If you want to adapt it you can hack
           40  +  the source code to meet the needs of your application. It makes you
           41  +  able to have scripting for default, and avoid external dependences.
           42  +
           43  +  Having scripting support *inside*, and in a way that a given version
           44  +  of your program always gets shipped a given version of Jim, you can
           45  +  write part of your application in Jim itself. Like it happens for
           46  +  Emacs/Elisp, or Gimp/Scheme, both this applications have the interpreter
           47  +  inside.
           48  +
           49  +- Jim is Tcl, and Tcl looks like a configuration file if you want. So
           50  +  if you use Jim you have also a flexible syntax for your config file.
           51  +  This is a valid Tcl script:
           52  +
           53  +     set MyFeature on
           54  +     ifssl {
           55  +       set SslPort 45000
           56  +       use compression
           57  +     }
           58  +
           59  +  It looks like a configuration file, but if you implement the [ifssl]
           60  +  and [use] commands, it's a valid Tcl script.
           61  +
           62  +- Tcl scales with the user. Not all know it, but Tcl is so powerful that
           63  +  you can reprogram the language in itself. Jim support this features
           64  +  of the Tcl programming language. You can write new control structures,
           65  +  use the flexible data types it offers (Lists are a central data structure,
           66  +  with Dictionaries that are also lists). Still Tcl is simpler for the
           67  +  casual programmer, especially if compared to other languages offering
           68  +  small footprint implementations (like Scheme and FORTH).
           69  +
           70  +- Because of the Tcl semantic (pass by value, everything is a command
           71  +  since there are no reserved words), there is a nice API to glue
           72  +  your application with Jim. See under the Jim Tcl manual for more detail.
           73  +
           74  +- Jim is supported. If you need commercial software, contact the original author
           75  +  at 'antirez@gmail.com' or the current maintainer at 'steveb@workware.net.au'.
           76  +
           77  +2) The other "field" where Jim can be useful is obviously embedded systems.
           78  +
           79  +3) We are working to make Jim as feature-complete as possible, thanks to
           80  +   dynamically loaded extensions it may stay as little as it is today
           81  +   but able to do interesting things for you. So it's not excluded that
           82  +   in the future Jim will be an option as general purpose language.
           83  +   But don't mind, for this there is already the mainstream Tcl
           84  +   implementation ;).
           85  +
           86  +--------------------------------------------------------------------------------
           87  +HOW BIG IS IT?
           88  +--------------------------------------------------------------------------------
           89  +
           90  +Jim with the default extensions configured and compiled with -Os is about 130k.
           91  +Without any extensions, it is about 85k.
           92  +
           93  +--------------------------------------------------------------------------------
           94  +HOW FAST IS IT?
           95  +--------------------------------------------------------------------------------
           96  +
           97  +Jim is in most code faster than Tcl7.6p2 (latest 7.x version),
           98  +and slower than Tcl 8.4.x. You can expect pretty decent performance
           99  +for such a little interpreter.
          100  +
          101  +If you want a more precise measure, there is 'bench.tcl' inside this
          102  +distribution that will run both under Jim and Tcl, so just execute
          103  +it with both the interpreters and see what you get :)
          104  +
          105  +--------------------------------------------------------------------------------
          106  +HOW TO COMPILE
          107  +--------------------------------------------------------------------------------
          108  +
          109  +Jim was tested under Linux, FreeBSD, MacosX, eCos, QNX, Windows XP (mingw, MVC).
          110  +
          111  +To compile jim itself try:
          112  +
          113  +  ./configure
          114  +  make
          115  +
          116  +--------------------------------------------------------------------------------
          117  +EXTENSIONS
          118  +--------------------------------------------------------------------------------
          119  +
          120  +Many optional extensions are included. Some are C extensions and others are pure Tcl.
          121  +Form more information, try:
          122  +
          123  +  ./configure --help
          124  +
          125  +--------------------------------------------------------------------------------
          126  +HOW TO EMBED JIM INTO APPLICATIONS
          127  +--------------------------------------------------------------------------------
          128  +
          129  +See the "examples.api" directory
          130  +
          131  +--------------------------------------------------------------------------------
          132  +HOW TO WRITE EXTENSIONS FOR JIM
          133  +--------------------------------------------------------------------------------
          134  +
          135  +See the extensions shipped with Jim, jim-readline.c, jim-clock.c, glob.tcl and oo.tcl
          136  +
          137  +--------------------------------------------------------------------------------
          138  +COPYRIGHT and LICENSE
          139  +--------------------------------------------------------------------------------
          140  +
          141  +Unless explicitly stated, all files within Jim repository are released
          142  +under following license:
          143  +
          144  +/* Jim - A small embeddable Tcl interpreter
          145  + *
          146  + * Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
          147  + * Copyright 2005 Clemens Hintze <c.hintze@gmx.net>
          148  + * Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
          149  + * Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
          150  + * Copyright 2008 Andrew Lunn <andrew@lunn.ch>
          151  + * Copyright 2008 Duane Ellis <openocd@duaneellis.com>
          152  + * Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de>
          153  + * Copyright 2008 Steve Bennett <steveb@workware.net.au>
          154  + * Copyright 2009 Nico Coesel <ncoesel@dealogic.nl>
          155  + * Copyright 2009 Zachary T Welch zw@superlucidity.net
          156  + * Copyright 2009 David Brownell
          157  + *
          158  + * Redistribution and use in source and binary forms, with or without
          159  + * modification, are permitted provided that the following conditions
          160  + * are met:
          161  + *
          162  + * 1. Redistributions of source code must retain the above copyright
          163  + *    notice, this list of conditions and the following disclaimer.
          164  + * 2. Redistributions in binary form must reproduce the above
          165  + *    copyright notice, this list of conditions and the following
          166  + *    disclaimer in the documentation and/or other materials
          167  + *    provided with the distribution.
          168  + *
          169  + * THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY
          170  + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
          171  + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
          172  + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
          173  + * JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
          174  + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
          175  + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
          176  + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
          177  + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
          178  + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
          179  + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
          180  + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
          181  + *
          182  + * The views and conclusions contained in the software and documentation
          183  + * are those of the authors and should not be interpreted as representing
          184  + * official policies, either expressed or implied, of the Jim Tcl Project.
          185  + */
          186  +--------------------------------------------------------------------------------
          187  +HISTORY
          188  +--------------------------------------------------------------------------------
          189  +
          190  +"first Jim goal: to vent my need to hack on Tcl."
          191  +
          192  +And actually this is exactly why I started Jim, in the first days
          193  +of Jenuary 2005. After a month of hacking Jim was able to run
          194  +simple scripts, now, after two months it started to be clear to
          195  +me that it was not just the next toy to throw away but something
          196  +that may evolve into a real interpreter. In the same time
          197  +Pat Thoyts and Clemens Hintze started to contribute code, so that
          198  +the development of new core commands was faster, and also more
          199  +people hacking on the same code had as result fixes in the API,
          200  +C macros, and so on.
          201  +
          202  +Currently we are at the point that the core interpreter is almost finished
          203  +and it is entering the Beta stage. There is to add some other core command,
          204  +to do a code review to ensure quality of all the parts and to write
          205  +documentation.
          206  +
          207  +We already started to work on extensions like OOP, event loop,
          208  +I/O, networking, regexp. Some extensions are already ready for
          209  +prime time, like the Sqlite extension and the ANSI I/O.
          210  +
          211  +------------------------------------------------------------------------------
          212  +Thanks to...
          213  +------------------------------------------------------------------------------
          214  +
          215  +- First of all, thanks to every guy that are listed in the AUTHORS file,
          216  +  that directly helped with code and ideas. Also check the ChangeLog
          217  +  file for additional credits about patches or bug reports.
          218  +- Elisa Manara that helped me to select this ill conceived name for
          219  +  an interpreter.
          220  +- Many people on the Tclers Chat that helped me to explore issues
          221  +  about the use and the implementation of the Tcl programming language.
          222  +- David Welton for the tech info sharing and our chats about
          223  +  programming languages design and the ability of software to "scale down".
          224  +- Martin S. Weber for the great help with Solaris issues, debugging of
          225  +  problems with [load] on this arch, 64bit tests.
          226  +- The authors of "valgrind", for this wonderful tool, that helped me a
          227  +  lot to fix bugs in minutes instead of hours.
          228  +
          229  +
          230  +----
          231  +Enjoy!
          232  +Salvatore Sanfilippo
          233  +10 Mar 2005
          234  +
          235  +

Added README.extensions.

            1  +The /lib/jim directory contains both dynamically loadable extensions
            2  +and pure-Tcl extensions.
            3  +
            4  +Dynamically loadable extensions must have a .so file extension
            5  +Tcl extensions must have a .tcl file extension
            6  +
            7  +As long as /lib/jim is in $::auto_path (it is by default), extension
            8  +abc can be loaded with:
            9  +
           10  +  package require abc
           11  +
           12  +First abc.so will be tried, and then abc.tcl
           13  +
           14  +Note that this directory may be something like /lib/jim, /usr/lib/jim or
           15  +/usr/local/lib/jim, depending upon where jim was installed.

Added README.metakit.

            1  +---
            2  +title: Metakit
            3  +---
            4  +
            5  +Metakit Extension for Jim Tcl
            6  +=============================
            7  +
            8  +OVERVIEW
            9  +--------
           10  +The mk extension provides an interface to the Metakit small-footprint
           11  +embeddable database library (<http://equi4.com/metakit/>). The underlying
           12  +library is efficient at manipulating not-so-large amounts of data and takes a
           13  +different approach to composing database operations than common SQL-based
           14  +relational databases.
           15  +
           16  +Both the Metakit core library and the mk package can be linked either
           17  +statically or dynamically and loaded using
           18  +
           19  +    package require mk
           20  +
           21  +CREATING A DATABASE
           22  +-------------------
           23  +A database (called a "storage" in Metakit terms) may either reside totally in
           24  +memory or be backed by a file. To open or create a database, call the
           25  +`storage` command with an optional filename parameter:
           26  +
           27  +    set db [storage test.mk]
           28  +
           29  +The returned handle can be used as a command name to access the database. When
           30  +you are done, execute the `close` method, that is, run
           31  +
           32  +    $db close
           33  +
           34  +A lost handle won't be found by GC but will be closed when the interpreter
           35  +exits. Note that by default Metakit will only record changes to the database
           36  +when you close the handle. Use the `commit` method to record the current
           37  +state of the database to disk.
           38  +
           39  +CREATING VIEWS
           40  +--------------
           41  +*Views* in Metakit are what is called "tables" in conventional databases. A view
           42  +may several typed *properties*, or columns, and contains homogenous *rows*, or
           43  +records. New properties may be added to a view as needed; however, new properties
           44  +are not stored in the database file by default. The structure method specifies
           45  +the stored properties of a view, creating a new view or restructuring an old one
           46  +as needed:
           47  +
           48  +    $db structure viewName description
           49  +
           50  +The view description must be a list of form `{propName type propName type ...}`.
           51  +The supported property types include:
           52  +
           53  +`string`
           54  +:   A NULL-terminated string, stored as an array of bytes (without any encoding
           55  +    assumptions).
           56  +
           57  +`binary`
           58  +:   **Not yet supported by the `mk` extension.**
           59  +    Blob of binary data that may contain embedded NULLs (zero bytes). Stored
           60  +    as-is. This is more efficient than `string` when storing large blocks of
           61  +    data (e.g. images) and will adjust the storage strategy as needed.
           62  +
           63  +`integer`
           64  +:   An signed integer value occupying a maximum of 32 bits. If all values
           65  +    stored in a column can fit in a smaller range (16, 8, or even 4 or 2 bits),
           66  +    they are packed automatically.
           67  +
           68  +`long`
           69  +:   Like `integer`, but is required to fit into 64 bits.
           70  +
           71  +`float` and `double`
           72  +:   32-bit and 64-bit IEEE floating-point values respectively.
           73  +
           74  +`subview`
           75  +:   This type is not usually specified directly; instead, a structure
           76  +    description of a nested view is given. `subview` properties store complete
           77  +    views as their value, creating hierarchical data structures. When retreived
           78  +    from a view, a value of a subview property is a normal view handle.
           79  +
           80  +Without a `description` parameter, the `structure` method returns the current
           81  +structure of the named view; without any parameters, it returns a dictionary
           82  +containing structure descriptions of all views stored in the database.
           83  +
           84  +After specifying the properties you expect to see in the view, call
           85  +
           86  +    [$db view $viewName] as viewHandle
           87  +
           88  +to obtain a view handle. These handles are also commands, but are
           89  +garbage-collected and also destroy themselves after a single method call; the
           90  +`as viewHandle` call assigns the view handle to the specified variable and also
           91  +tells the view not to destroy itself until all the references to it are gone.
           92  +
           93  +View handles may also be made permanent by giving them a global command name,
           94  +e.g.
           95  +
           96  +    rename [$db view data] .db.data
           97  +
           98  +However, such view handles are not managed automatically at all and must be
           99  +destroyed using the `destroy` method, or by renaming them to `""`.
          100  +
          101  +MANIPULATING DATA
          102  +-----------------
          103  +The value of a particular property is obtained using
          104  +
          105  +    cursor get $cur propName
          106  +
          107  +where `$cur` is a string of form `viewHandle!index`. Row indices are zero-based
          108  +and may also be specified relative to the last row of the view using the
          109  +`end[+-]integer` notation.
          110  +
          111  +A dictionary containing all property name and value pairs can be retreived by
          112  +omitting the `propName` argument:
          113  +
          114  +    cursor get $cur
          115  +
          116  +Setting property values is also performed either individually, using
          117  +
          118  +    cursor set $cur propName value ?propName value ...?
          119  +
          120  +or via a dictionary with
          121  +
          122  +    cursor set $cur dictValue
          123  +
          124  +In the first form of the command, property names may also be preceded by a
          125  +-_typeName_ option. In this case, a new property of the specified type will be
          126  +created if it doesn't already exist; note that this will cause *all* the rows
          127  +in the view to have the property (but see **A NOTE ON NULL** below).
          128  +
          129  +If the row index points after the end of the view, an appropriate number of
          130  +fresh rows will be inserted first. So, for example, you can use `end+1`
          131  +to append a new row. (Note that you then have to set it all at once, though.)
          132  +
          133  +The total number of rows can be obtained using
          134  +
          135  +    $viewHandle size
          136  +
          137  +and set manually with
          138  +
          139  +    $viewHandle resize newSize
          140  +
          141  +For example, you can use `$viewHandle resize 0` to clear a view.
          142  +
          143  +INSERT AND REMOVE
          144  +-----------------
          145  +New rows may also be inserted at an arbitrary position in a view with
          146  +
          147  +    cursor insert $cur ?count?
          148  +
          149  +This will insert _count_ fresh rows into the view so that _$cur_ points to
          150  +the first one. The inverse of this operation is
          151  +
          152  +    cursor remove $cur ?count?
          153  +
          154  +COMPOSING VIEWS
          155  +---------------
          156  +The real power of Metakit lies in the way existing views are combined to create
          157  +new ones to obtain a particular perspective on the stored data. A single
          158  +operation takes one or more views and possibly additional options and produces a
          159  +new view, usually tracking notifications to the underlying views and sometimes
          160  +even supporting modification.
          161  +
          162  +Binary operations are left-biased when there are conflicting property values;
          163  +that is, they always prefer the values from the left view.
          164  +
          165  +### Unary operations ###
          166  +
          167  +*view* `unique`
          168  +:   Derived view with duplicate rows removed.
          169  +
          170  +*view* `sort` *crit ?crit ...?*
          171  +:   Derived view sorted on the specified criteria, in order. A single _crit_
          172  +    is either a property name or a property name preceded by a dash; the latter
          173  +    specifies that the sorting is to be performed in reverse order.
          174  +
          175  +### Binary operations ###
          176  +
          177  +The operations taking _set_ arguments require that the given views have no
          178  +duplicate rows. The `unique` method can be used to ensure this.
          179  +
          180  +*view1* `concat` *view2*
          181  +:   Vertical concatenation; that is, all the rows of _view1_ and then all rows
          182  +    of _view2_.
          183  +
          184  +*view1* `pair` *view2*
          185  +:   Pairing, or horizontal concatenation: every row in _view1_ is matched with
          186  +    a row with the same index in _view2_; the result has all the properties of
          187  +    _view1_ and all the properties of _view2_.
          188  +
          189  +*view1* `product` *view2*
          190  +:   Cartesian product: each row in _view1_ horizontally concatenated with every
          191  +    row in _view2_.
          192  +
          193  +*set1* `union` *set2*
          194  +:   Set union. Unlike `concat`, this operation removes duplicates from the
          195  +    result. A row is in the result if it is in _set1_ **or** in _set2_.
          196  +
          197  +*set1* `intersect` *set2*
          198  +:   Set intersection. A row is in the result if it is in _set1_ **and** in
          199  +    _set2_.
          200  +
          201  +*set1* `different` *set2*
          202  +:   Symmetric difference. A row is in the result if it is in _set1_ **xor** in
          203  +    _set2_, that is, in _set1_ or in _set2_, but not in both.
          204  +
          205  +*set1* `minus` *set2*
          206  +:   Set minus. A row is in the result if it is in _set1_ **and not** in _set2_.
          207  +
          208  +### Relational operations ###
          209  +
          210  +*view1* `join` *view2* ?`-outer`? *prop ?prop ...?*
          211  +:   Relational join on the specified properties: the rows from _view1_ and
          212  +    _view2_ with all the specified properties equal are concatenated to form a
          213  +    new row. If the `-outer` option is specified, the rows from _view1_ that do
          214  +    not have a corresponding one in _view2_ are also left in the view, with the
          215  +    properties existing only in _view2_ filled with default values.
          216  +
          217  +*view* `group` *subviewName prop ?prop ...?*
          218  +:   Groups the rows with all the specified properties equal; moves all the
          219  +    remaining properties into a newly created subview property called
          220  +    _subviewName_.
          221  +
          222  +*view* `flatten` *subviewProp*
          223  +:   The inverse of `group`.
          224  +
          225  +### Projections and selections ###
          226  +
          227  +*view* `project` *prop ?prop ...?*
          228  +:   Projection: a derived view with only the specified properties left.
          229  +
          230  +*view* `without` *prop ?prop ...?*
          231  +:   The opposite of `project`: a derived view with the specified properties
          232  +    removed.
          233  +
          234  +*view* `range` *start end ?step?*
          235  +    A slice or a segment of _view_: rows at _start_, _start+step_, and so on,
          236  +    until the row number becomes larger than _end_. The usual `end[+-]integer`
          237  +    notation is supported, but the indices don't change if the underlying view
          238  +    is resized.
          239  +
          240  +**(!) select etc. should go here**
          241  +
          242  +### Search and storage optimization ###
          243  +
          244  +*view* `blocked`
          245  +:   Invokes an optimization designed for storing large amounts of data. _view_
          246  +    must have a single subview property called `_B` with the desired structure
          247  +    inside. This additional level of indirection is used by `blocked` to create
          248  +    a view that looks like a usual one, but can store much more data
          249  +    efficiently. As a result, indexing into the view becomes a bit slower. Once
          250  +    this method is invoked, all access to _view_ must go through the returned
          251  +    view.
          252  +
          253  +*view* `ordered` *prop ?prop ...?*
          254  +:   Does not transform the structure of the view in any way, but signals that
          255  +    the view should be considered ordered on a unique key consisting of the
          256  +    specified properties, enabling some optimizations. Note that duplicate keys
          257  +    are not allowed in an ordered view.
          258  +
          259  +**(!) TODO: hash, indexed(?) -- these make no sense until searches are implemented**
          260  +
          261  +### Pipelines ###
          262  +
          263  +Because constructs like `[[view op1 ...] op2 ...] op3 ...` tend to be common in
          264  +programs using Metakit, a shorthand syntax is introduced: such expressions may
          265  +also be written as `view op1 ... | op2 ... | op3 ...`.
          266  +
          267  +Note though that this syntax is not in any way magically wired into the
          268  +interpreter: it is understood only by the view handles and the two commands that
          269  +can possibly return a view: `$db view` and `cursor get`. If you want to support
          270  +this syntax in Tcl procedures, you'll need to do this yourself, or you may want
          271  +to create a custom view method and have the view handle work out the syntax for
          272  +you (see **USER-DEFINED METHODS** below).
          273  +
          274  +OTHER VIEW METHODS
          275  +------------------
          276  +
          277  +*view* `copy`
          278  +:   Creates a copy of view with the same data.
          279  +
          280  +*view* `clone`
          281  +:   Creates a view with the same structure, but no data.
          282  +
          283  +*view* `pin`
          284  +:   Specifies that the view should not be destroyed after a single method call.
          285  +    Returns _view_.
          286  +
          287  +*view* `as` *varName*
          288  +:   In addition to the actions performed by `pin`, assigns the view handle to
          289  +    the variable named varName in the caller's scope.
          290  +
          291  +*view* `properties`
          292  +:   Returns the names of all properties in the view.
          293  +
          294  +*view* `type` *prop*
          295  +:   Returns the type of the specified property.
          296  +
          297  +A NOTE ON NULL
          298  +--------------
          299  +Note that Metakit does not have a special `NULL` value like conventional
          300  +relational databases do. Instead, it defines _default_ property values: `""` for
          301  +`string` and `binary` types, `0` for all numeric types and a view with no rows
          302  +for subviews. These defaults are used when a fresh row is inserted and when
          303  +a new property is added to the view to fill in the missing values.
          304  +
          305  +USER-DEFINED METHODS
          306  +--------------------
          307  +The storage and view handles support custom methods defined in Tcl: to define
          308  +_methodName_ on every storage or view handle, create a procedure called
          309  +{`mk.storage` *methodName*} or {`mk.view` *methodName*} respectively. These
          310  +procedures will receive the handle as the first argument and all the remaining
          311  +arguments. Remember to `pin` the view handle in view methods if you call more
          312  +than one method of it!
          313  +
          314  +Custom `cursor` subcommands may also be defined by creating a procedure called
          315  +{`cursor` *methodName*}. These receive all the arguments without any
          316  +modifications.

Added README.namespaces.

            1  +Lightweight Namespaces for Jim Tcl
            2  +==================================
            3  +
            4  +There are two broad requirements for namespace support in Jim Tcl.
            5  +
            6  +1. To allow code from multiple sources while reducing the chance of name clashes
            7  +2. To simplify porting existing Tcl code which uses namespaces
            8  +
            9  +This proposal addresses both of these requirements, with the following
           10  +additional requirements imposed by Jim Tcl.
           11  +
           12  +3. Support for namespaces should be optional, with the space and time overhead
           13  +   when namespaces are disabled as close to zero as possible.
           14  +4. The implementation should be small and reasonably efficient.
           15  +
           16  +To further expand on requirement (2), the goal is not to be able to run
           17  +any Tcl scripts using namespaces with no changes. Rather, scripts
           18  +which use namespaces in a straightforward manner, should be easily
           19  +ported with changes which are compatible with Tcl.
           20  +
           21  +Implicit namespaces
           22  +-------------------
           23  +Rather than supporting explicit namespaces as Tcl does, Jim Tcl
           24  +supports implicit namespaces. Any procedure or variable which
           25  +is defined with a name containing ::, is implicitly scoped within
           26  +a namespace.
           27  +
           28  +For example, the following procedure and variable are created
           29  +in the namespace 'test'
           30  +
           31  +proc ::test::myproc {} {
           32  +  puts "I am in namespace [namespace current]"
           33  +}
           34  +set ::test::myvar 3
           35  +
           36  +This approach allows much of the existing variable and command
           37  +resolution machinery to be used with little change. It also means
           38  +that it is possible to simply define a namespace-scoped variable
           39  +or procedure without first creating the namespace, and similarly,
           40  +namespaces "disappear" when all variables and procedures defined
           41  +with the namespace scope are deleted.
           42  +
           43  +Namespaces, procedures and call frames
           44  +--------------------------------------
           45  +When namespace support is enabled (at build time), each procedure has an associated
           46  +namespace (based on the procedure name). When the procedure is evaluated,
           47  +the namespace for the created call frame is set to the namespace associated
           48  +with the procedure.
           49  +
           50  +Command resolution is based on the namespace of the current call frame.
           51  +An unscoped command name will first be looked up in the current namespace,
           52  +and then in the global namespace.
           53  +
           54  +This also means that commands which do not create a call frame (such as commands
           55  +implemented in C) do not have an associated namespace.
           56  +
           57  +Similarly to Tcl, namespace eval introduces a temporary, anonymous
           58  +call frame with the associated namespace. For example, the following
           59  +will return "::test,1".
           60  +
           61  +namespace eval test {
           62  +	puts [namespace current],[info level]
           63  +}
           64  +
           65  +Variable resolution
           66  +-------------------
           67  +The variable command in Jim Tcl has the same syntax as Tcl, but is closer in behaviour to the global command.
           68  +The variable command creates a link from a local variable to a namespace variable, possibly initialising it.
           69  +
           70  +For example, the following procedure uses 'variable' to initialise and access myvar.
           71  +
           72  +proc ::test::myproc {} {
           73  +  variable myvar 4
           74  +  incr myvar
           75  +}
           76  +
           77  +Note that there is no automatic resolution of namespace variables.
           78  +For example, the following will *not* work.
           79  +
           80  +namespace eval ::test {
           81  +  variable myvar 4
           82  +}
           83  +namespace eval ::test {
           84  +  # This will increment a local variable, not ::test::myvar
           85  +  incr myvar
           86  +}
           87  +
           88  +And similarly, the following will only access local variables
           89  +
           90  +set x 3
           91  +namespace eval ::test {
           92  +	# This will increment a local variable, not ::x
           93  +	incr x
           94  +	# This will also increment a local variable
           95  +	incr abc::def
           96  +}
           97  +
           98  +In the same way that variable resolution does not "fall back" to
           99  +global variables, it also does not "fall back" to namespace variables.
          100  +
          101  +This approach allows name resolution to be simpler and more efficient
          102  +since it uses the same variable linking mechanism as upvar/global
          103  +and it allows namespaces to be implicit. It also solves the "creative
          104  +writing" problem where a variable may be created in an unintentional
          105  +scope.
          106  +
          107  +The namespace command
          108  +---------------------
          109  +Currently, the following namespace commands are supported.
          110  +
          111  +* current - returns the current, fully-qualified namespace
          112  +* eval - evaluates a script in a namespace (introduces a call frame)
          113  +* qualifiers, tail, parent - note that these do not check for existence
          114  +* code, inscope - implemented
          115  +* delete - deletes all variables and commands with the namespace prefix
          116  +* which - implemented
          117  +* upvar - implemented
          118  +
          119  +namespace children, exists, path
          120  +--------------------------------
          121  +With implicit namespaces, the namespace exists and namespace children commands
          122  +are expensive to implement and are of limited use. Checking the existence
          123  +of a namespace can be better done by checking for the existence of a known procedure
          124  +or variable in the namespace.
          125  +
          126  +Command resolution is always done by first looking in the namespace and then
          127  +at the global scope, so namespace path is not required.
          128  +
          129  +namespace ensemble
          130  +------------------
          131  +The namespace ensemble command is not currently supported. A future version
          132  +of Jim Tcl will have a general-purpose ensemble creation and manipulation
          133  +mechanism and namespace ensemble will be implemented in terms of that mechanism.
          134  +
          135  +namespace import, export, forget, origin
          136  +----------------------------------------
          137  +Since Jim Tcl namespaces are implicit, there is no location to store export patterns.
          138  +Therefore the namespace export command is a dummy command which does nothing.
          139  +All procedures in a namespace are considered to be exported.
          140  +
          141  +The namespace import command works by creating aliases to the target namespace
          142  +procedures.
          143  +
          144  +namespace forget is not implemented.
          145  +
          146  +namespace origin understands aliases created by namespace import
          147  +and can return the original command.
          148  +
          149  +namespace unknown
          150  +-----------------
          151  +If an undefined command is invoked, the "unknown" command is invoked.
          152  +The same namespace resolution rules apply for the unknown command.
          153  +This means that in the following example, test::unknown will be invoked
          154  +for the missing command rather than the global ::unknown.
          155  +
          156  +proc unknown {args} {
          157  +	puts "global unknown"
          158  +}
          159  +
          160  +proc test::unknown {args} {
          161  +	puts "test unknown"
          162  +}
          163  +
          164  +namespace eval test {
          165  +	bogus
          166  +}
          167  +
          168  +This approach requires no special support and provides enough flexibility that
          169  +the namespace unknown command is not implemented.
          170  +
          171  +Porting namespace code from Tcl to Jim Tcl
          172  +------------------------------------------
          173  +For most code, the following changes will be sufficient to port code.
          174  +
          175  +1. Canonicalise namespace names. For example, ::ns:: should be written
          176  +   as ::ns or ns as appropriate, and excess colons should be removed.
          177  +   For example ::ns:::blah should be written as ::ns::blah
          178  +   (Note that the only "excess colon" case supported is ::::abc
          179  +   in order to support [namespace current]::abc in the global namespace)
          180  +
          181  +2. The variable command should be used within namespace eval to link
          182  +   to namespace variables, and access to variables in other namespaces
          183  +   should be fully qualified
          184  +
          185  +Changes in the core Jim Tcl
          186  +---------------------------
          187  +Previously Jim Tcl performed no scoping of command names.  i.e. The
          188  +::format command was considered different from the format command.
          189  +
          190  +Even if namespace support is disabled, the command resolution will
          191  +recognised global scoping of commands and treat these as identical.

Added README.oo.

            1  +OO Package for Jim Tcl
            2  +======================
            3  +
            4  +Author: Steve Bennett <steveb@workware.net.au>
            5  +Date: 1 Nov 2010 09:18:40
            6  +
            7  +OVERVIEW
            8  +--------
            9  +The pure-Tcl oo package leverages Jim's unique strengths
           10  +to provide support for Object Oriented programming.
           11  +
           12  +The oo package can be statically linked with Jim or installed
           13  +as a separate Tcl package and loaded with:
           14  +
           15  +  package require oo
           16  +
           17  +DECLARING CLASSES
           18  +-----------------
           19  +A class is declared with the 'class' proc as follows.
           20  +
           21  +  class myclass ?baseclasses? classvars
           22  +
           23  +This declares a class named 'myclass' with the given dictionary,
           24  +'classvars', providing the initial state of all new objects.
           25  +It is important to list all class variables in 'classvars', even
           26  +if initialised only to the empty string, since the class makes
           27  +these variables available in methods and via [myclass vars].
           28  +
           29  +A list of zero or more base classes may also be specified from
           30  +which methods and class variables are imported. See INHERITANCE
           31  +below for more details.
           32  +
           33  +Declaring a class creates a procedure with the class name along
           34  +with some related procedures. For example:
           35  +
           36  +  . class Account {balance 0}
           37  +  Account
           38  +  . info procs Account*
           39  +  {Account get} {Account methods} {Account eval} Account {Account new} {Account destroy}
           40  +  {Account vars} {Account classname} {Account classvars} {Account method}
           41  +
           42  +Notice that apart from the main 'Account' procedure, all the remaining procedures (methods)
           43  +are prefixed with 'Account' and a space.
           44  +
           45  +PREDEFINED CLASS METHODS
           46  +------------------------
           47  +Declaring a class pre-defines a number of "class" methods. i.e. those which don't
           48  +require an object and simply return or manipulate properties of the class. These are:
           49  +
           50  +  new ?instancevars?::
           51  +    Creates and returns new object, optionally overriding the default class variable values.
           52  +	Note that the class name is an alias for 'classname new {}' and can be used as a shorthand
           53  +	for creating new objects with default values.
           54  +
           55  +  method name arglist body::
           56  +    Creates or redefines a method for the class with the given name, argument list and body.
           57  +
           58  +  methods::
           59  +    Returns a list of the methods supported by this class, including both class methods
           60  +	and instance methods. Also includes base class methods.
           61  +
           62  +  vars::
           63  +	Returns a list of the class variables for this class (names
           64  +	only). Also includes base class variables.
           65  +
           66  +  classvars::
           67  +	Returns a dictionary the class variables, including initial values, for this class.
           68  +	Also includes base class variables.
           69  +
           70  +  classname::
           71  +    Returns the classname. This can be useful as [$self classname].
           72  +
           73  +Class methods may be invoked either via the class name or via an object of the class.
           74  +For example:
           75  +
           76  +  . class Account {balance 0}
           77  +  Account
           78  +  . Account methods
           79  +  classname classvars destroy eval get method methods new vars
           80  +  . set a [Account]
           81  +  <reference.<Account>.00000000000000000001>
           82  +  . $a methods
           83  +  classname classvars destroy eval get method methods new vars
           84  +
           85  +PREDEFINED OBJECT METHODS
           86  +-------------------------
           87  +Declaring a class pre-defines a number of "object" methods. i.e. those which operate
           88  +on a specific object.
           89  +
           90  +  destroy::
           91  +    Destroys the object. This method may be overridden, but note that it should
           92  +	delete the object with {rename $self ""}. This method will also be called
           93  +	if the object is reaped during garbage collection.
           94  +
           95  +  get varname::
           96  +    Returns the value of the given instance variable.
           97  +
           98  +  eval ?locals? body::
           99  +    Makes any given local variables available to the body, along with
          100  +	the instance variables, and evaluate the body in that context.
          101  +	This can be used for one-off evaluation to avoid declaring a method.
          102  +
          103  +RESERVED METHODS
          104  +----------------
          105  +The following methods are special
          106  +
          107  +  constructor::
          108  +    If this method exists, it is invoked (with no arguments) after an object is created
          109  +
          110  +  unknown methodname ...::
          111  +    If an undefined method is invoked, and this method exists, it is called with the methodname
          112  +	and the original arguments
          113  +
          114  +
          115  +CREATING OBJECTS
          116  +----------------
          117  +An object is created with the 'new' method, or simply by using the classname shortcut.
          118  +If the 'new' method is used, the variables for the newly created object (instance variables)
          119  +may be initialised. Otherwise they are set to the default values specified when the
          120  +class was declared.
          121  +
          122  +For example:
          123  +
          124  +  . class Account {balance 0}
          125  +  Account
          126  +  . set a [Account]
          127  +  <reference.<Account>.00000000000000000001>
          128  +  . set b [Account new {balance 1000}]
          129  +  <reference.<Account>.00000000000000000002>
          130  +  . $a get balance
          131  +  0
          132  +  . $b get balance
          133  +  1000
          134  +
          135  +If the 'constructor' method exists, it is invoked just after the object is created
          136  +
          137  +DECLARING METHODS
          138  +-----------------
          139  +In addition to the predefined methods, new methods may be declared, or existing
          140  +methods redefined with the class method, method.
          141  +
          142  +Declaring a method is very similar to defining a proc, and the arglist
          143  +has identical syntax. For example:
          144  +
          145  +  . Account method show {{channel stdout}} { $channel puts "Balance of account is $balance" }
          146  +  . $b show
          147  +  Balance of account is 1000
          148  +
          149  +All instance variables are available within the method and any
          150  +changes to these variables are maintained by the object.
          151  +
          152  +In addition, the $self variables is defined and refers to the current object.
          153  +This may be used to invoke further methods on the object. For example:
          154  +
          155  +  . Account method show {} { puts "Balance of account is [$self get balance]" }
          156  +  . $b show
          157  +  Balance of account is 1000
          158  +
          159  +Notes:
          160  +* It is a bad idea to unset an instance variable.
          161  +* In general, you should avoid redefining any of the pre-defined methods, except for 'destroy'.
          162  +* When accessing the caller's scope with upvar or uplevel, note that there
          163  +  are two frame levels between the caller and the method. Thus it is necessary
          164  +  to use 'upvar 2' or 'uplevel 2'
          165  +
          166  +INHERITANCE
          167  +-----------
          168  +For each base class given in a new class declaration, the methods
          169  +and variables of those classes are imported into the new class being
          170  +defined. Base classes are imported in left to right order, so that if a
          171  +method is defined in more than one base class, the later definition
          172  +is selected. This applies similarly to class variables.
          173  +
          174  +Within a method, 'super' may be used to explicitly invoke a
          175  +base class method on the object. This applies only to the *last*
          176  +base class given. For example:
          177  +
          178  +  # Assumes the existence of classes Account and Client
          179  +  . Account method debit {amount} { incr balance -$amount }
          180  +  . class CreditAccount {Client Account} {type visa}
          181  +  CreditAccount
          182  +  . CreditAccount method debit {amount} {
          183  +    puts "Debit $type card"
          184  +	super debit $amount
          185  +  }
          186  +  . set a [CreditAccount]
          187  +  <reference.<Account>.00000000000000000001>
          188  +  . $a debit 20
          189  +  Debit visa card
          190  +  . $a balance
          191  +  -20
          192  +
          193  +In the CreditAccount debit method, the call to 'super debit' invokes
          194  +the method 'Account debit' since Account is the last base class listed.
          195  +
          196  +OBJECT LIFETIME/GARBAGE COLLECTION
          197  +----------------------------------
          198  +Objects are implemented as lambdas. That is, they are procedures with state
          199  +and are named as references. This means that when an object is no longer
          200  +reachable by any name and garbage collection runs, the object will be
          201  +discarded and the destructor will be invoked. Note that the garbage collector
          202  +can be invoked manually with 'collect' if required.
          203  +
          204  +  . class Account {}
          205  +  Account
          206  +  . Account method destroy {} { puts dying...; rename $self "" }
          207  +  Account destroy
          208  +  . proc a {} { set b [Account]; return "" }
          209  +  a
          210  +  . a
          211  +  . collect
          212  +  dying...
          213  +  1
          214  +
          215  +CLASS METHODS/CLASS STATIC VARIABLES
          216  +------------------------------------
          217  +All methods defined with 'method' operate on objects (instances).
          218  +If a class method is required, it is possible to simply declare one with 'proc'.
          219  +The method dispatcher will automatically be able to dispatch to this method.
          220  +Using this approach, it is also possible to add class static variables by
          221  +defining static variables to the proc. Although strictly these variables
          222  +are accessible only to that proc, not the class as a whole.
          223  +
          224  +For example:
          225  +
          226  +  . class Account {}
          227  +  Account
          228  +  . proc {Account nextid} {} {{id 0}} { incr id }
          229  +  Account nextid
          230  +  . Account nextid
          231  +  1
          232  +  . Account nextid
          233  +  2
          234  +  . set a [Account]
          235  +  <reference.<Account>.00000000000000000001>
          236  +  . $a nextid
          237  +  3
          238  +  . $a eval { $self nextid }
          239  +  4
          240  +
          241  +HOW METHOD DISPATCH WORKS
          242  +-------------------------
          243  +All class and object methods are name "classname methodname".
          244  +
          245  +The class method dispatcher is named "classname". When invoked with a methodname,
          246  +it simply invokes the method "classname methodname".
          247  +
          248  +The method dispatch is via a two step process. Firstly the object procedure is invoked
          249  +with the method name. This procedure then invokes "classname method" which sets up
          250  +the appropriate access to the object variables, and then invokes the method body.
          251  +
          252  +EXAMPLES
          253  +--------
          254  +tree.tcl
          255  +~~~~~~~~
          256  +The 'tree' package is implemented using the 'oo' package.
          257  +See the source code in tree.tcl and a usage example in tests/tree.test
          258  +
          259  +Of particular note is how callbacks and recursive invocation is used in the 'walk' method.
          260  +
          261  +examples/ootest.tcl
          262  +~~~~~~~~~~~~~~~~~~~
          263  +A comprehensive OO example is provided in examples/ootest.tcl.
          264  +
          265  +It can be run simply as:
          266  +
          267  +  ./jimsh examples/ootest.tcl

Added README.sqlite.

            1  +Jim Sqlite extension documentation.
            2  +Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
            3  +
            4  +
            5  +Overview
            6  +~~~~~~~~
            7  +
            8  +The Sqlite extension makes possible to work with sqlite (http://www.sqlite.org)
            9  +databases from Jim. SQLite is a small C library that implements a
           10  +self-contained, embeddable, zero-configuration SQL database engine. This
           11  +means it is perfect for embedded systems, and for stand-alone applications
           12  +that need the power of SQL without to use an external server like Mysql.
           13  +
           14  +Basic usage
           15  +~~~~~~~~~~~
           16  +
           17  +The Sqlite extension exports an Object Based interface for databases. In order
           18  +to open a database use:
           19  +
           20  +  set f [sqlite3.open dbname]
           21  +
           22  +The [sqlite3.open] command returns a db handle, that is a command name that
           23  +can be used to perform operations on the database. A real example:
           24  +
           25  +    . set db [sqlite3.open test.db]
           26  +    sqlite.handle0
           27  +    . $db query "SELECT * from tbl1"
           28  +    {one hello! two 10} {one goodbye two 20}
           29  +
           30  +In the second line the handle is used as a command name, followed
           31  +by the 'method' or 'subcommand' ("query" in the example), and the arguments.
           32  +
           33  +The query method
           34  +~~~~~~~~~~~~~~~~
           35  +
           36  +The query method has the following signature:
           37  +
           38  +    $db query SqlQuery ?args?
           39  +
           40  +The sql query may contain occurrences of "%s" that are substituted
           41  +in the actual query with the following arguments, quoted in order
           42  +to make sure that the query is correct even if these arguments contain
           43  +"'" characters. So for example it is possible to write:
           44  +
           45  +    . $db query "SELECT * from tbl1 WHERE one='%s'" hello!
           46  +    {one hello! two 10}
           47  +
           48  +Instead of hello! it is possible to use a string with embedded "'":
           49  +
           50  +    . $db query "SELECT * from tbl1 WHERE one='%s'" a'b
           51  +    (no matches - the empty list is returned)
           52  +
           53  +This does not work instead using the Tcl variable expansion in the string:
           54  +
           55  +    . $db query "SELECT * from tbl1 WHERE one='$foo'"
           56  +    Runtime error, file "?", line 1:
           57  +        near "b": syntax error
           58  +
           59  +In order to obtain an actual '%' character in the query, there is just
           60  +to use two, like in "foo %% bar". This is the same as the [format] argument.
           61  +
           62  +Specification of query results
           63  +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           64  +
           65  +In one of the above examples, the following query was used:
           66  +
           67  +    . $db query "SELECT * from tbl1"
           68  +    {one hello! two 10} {one goodbye two 20}
           69  +
           70  +As you can see the result of a query is a list of lists. Every
           71  +element of the list represents a row, as a list of key/value pairs,
           72  +so actually every row is a Jim dictionary.
           73  +
           74  +The following example and generated output show how to take advantage
           75  +of this representation:
           76  +
           77  +    . set res [$db query "SELECT * from tbl1"]
           78  +    {one hello! two 10} {one goodbye two 20}
           79  +    . foreach row $res {puts "One: $row(one), Two: $row(two)"}
           80  +    One: hello!, Two: 10
           81  +    One: goodbye, Two: 20
           82  +
           83  +To access every row sequentially is very simple, and field of a row
           84  +can be accessed using the $row(field) syntax.
           85  +
           86  +The close method
           87  +~~~~~~~~~~~~~~~~
           88  +
           89  +In order to close the db, use the 'close' method that will have as side effect
           90  +to close the db and to remove the command associated with the db.
           91  +Just use:
           92  +
           93  +    $db close
           94  +
           95  +Handling NULL values
           96  +~~~~~~~~~~~~~~~~~~~~
           97  +
           98  +In the SQL language there is a special value NULL that is not the empty
           99  +string, so how to represent it in a typeless language like Tcl?
          100  +For default this extension will use the empty string, but it is possible
          101  +to specify a different string for the NULL value.
          102  +
          103  +In the above example there were two rows in the 'tbl1' table. Now
          104  +we can add using the "sqlite" command line client another one with
          105  +a NULL value:
          106  +
          107  +    sqlite> INSERT INTO tbl1 VALUES(NULL,30);
          108  +    sqlite> .exit
          109  +
          110  +That's what the sqlite extension will return for default:
          111  +
          112  +    . $db query "SELECT * from tbl1"
          113  +    {one hello! two 10} {one goodbye two 20} {one {} two 30}
          114  +
          115  +As you can see in the last row, the NULL is represented as {}, that's
          116  +the empty string. Using the -null option of the 'query' command we
          117  +can change this default, and tell the sqlite extension to represent
          118  +the NULL value as a different string:
          119  +
          120  +    . $db query -null <<NULL>> "SELECT * from tbl1"
          121  +    {one hello! two 10} {one goodbye two 20} {one <<NULL>> two 30}
          122  +
          123  +This way if the empty string has some semantical value for your
          124  +dataset you can change it.
          125  +
          126  +Finding the ID of the last inserted row
          127  +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          128  +
          129  +This is as simple as:
          130  +
          131  +    . $db lastid
          132  +    10
          133  +
          134  +Number of rows changed by the most recent query
          135  +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          136  +
          137  +This is also very simple, there is just to use the 'changes' method
          138  +without arguments.
          139  +
          140  +    . $db changes
          141  +    5
          142  +
          143  +Note that if you drop an entire table the number of changes will
          144  +be reported as zero, because of details of the sqlite implementation.
          145  +
          146  +That's all,
          147  +Enjoy!
          148  +Salvatore Sanfilippo
          149  +
          150  +p.s. this extension is just the work of some hour thanks to the cool
          151  +clean C API that sqlite exports. Thanks to the author of sqlite for this
          152  +great work.
          153  +
          154  +In memory databases
          155  +~~~~~~~~~~~~~~~~~~~
          156  +
          157  +SQLite is able to create in-memory databases instead to use files.
          158  +This is of course faster and does not need the ability to write
          159  +to the filesystem. Of course this databases are only useful for
          160  +temp data.
          161  +
          162  +In-memory DBs are used just like regular databases, just the name used to
          163  +open the database is :memory:. That's an example that does not use the
          164  +filesystem at all to create and work with the db.
          165  +
          166  +  package require sqlite3
          167  +  set db [sqlite3.open :memory:]
          168  +  $db query {CREATE TABLE plays (id, author, title)}
          169  +  $db query {INSERT INTO plays (id, author, title) VALUES (1, 'Goethe', 'Faust');}
          170  +  $db query {INSERT INTO plays (id, author, title) VALUES (2, 'Shakespeare', 'Hamlet');}
          171  +  $db query {INSERT INTO plays (id, author, title) VALUES (3, 'Sophocles', 'Oedipus Rex');}
          172  +  set res [$db query "SELECT * FROM plays"]
          173  +  $db close
          174  +  foreach r $res {puts $r(author)}
          175  +
          176  +Of course once the Jim process is destroyed the database will no longer
          177  +exists.

Added README.utf-8.

            1  +UTF-8 Support for Jim Tcl
            2  +=========================
            3  +
            4  +Author: Steve Bennett <steveb@workware.net.au>
            5  +Date: 2 Nov 2010 10:55:52 EST
            6  +
            7  +OVERVIEW
            8  +--------
            9  +Early versions of Jim Tcl supported strings, including binary strings containing
           10  +nulls, however it had no support for multi-byte character encodings.
           11  +
           12  +In some fields, such as when dealing with the web, or other user-generated content,
           13  +support for multi-byte character encodings is necessary.
           14  +In these cases it would be very useful for Jim Tcl to be able to process strings
           15  +as multi-byte character strings rather than simply binary bytes.
           16  +
           17  +Supporting multiple character encodings and translation between those encodings
           18  +is beyond the scope of Jim Tcl. Therefore, Jim has been enhanced to add support
           19  +for UTF-8, as the most popular general purpose multi-byte encoding.
           20  +
           21  +UTF-8 support is optional. It can be enabled at compile time with:
           22  +
           23  +  ./configure --enable-utf8
           24  +
           25  +The Jim Tcl documentation fully documents the UTF-8 support. This README includes
           26  +additional background information.
           27  +
           28  +Unicode vs UTF-8
           29  +----------------
           30  +It is important to understand that Unicode is an abstract representation
           31  +of the concept of a "character", while UTF-8 is an encoding of
           32  +Unicode into bytes.  Thus the Unicode codepoint U+00B5 is encoded
           33  +in UTF-8 with the byte sequence: 0xc2, 0xb5. This is different from
           34  +ASCII where the same name is used interchangeably between a character value
           35  +and and its encoding.
           36  +
           37  +Unicode Escapes
           38  +---------------
           39  +Even without UTF-8 enabled, it is useful to be able to encode UTF-8 characters
           40  +in strings. This can be done with the \uNNNN Unicode escape. This syntax
           41  +is compatible with Tcl and is enabled even if UTF-8 is disabled.
           42  +
           43  +Unlike Tcl, Jim Tcl supports  Unicode characters up to 21 bits.
           44  +In addition to \uNNNN, Jim Tcl also supports variable length Unicode
           45  +character specifications with \u{NNNNNN} where there may be anywhere between
           46  +1 and 6 hex within the braces. e.g. \u{24B62}
           47  +
           48  +UTF-8 Properties
           49  +----------------
           50  +Due to the design of the UTF-8 encoding, many (most) commands continue
           51  +to work with UTF-8 strings. This is due to the following properties of UTF-8:
           52  +
           53  +* ASCII characters in strings have the same representation in UTF-8
           54  +* An ASCII string will never match the middle of a multi-byte UTF-8 sequence
           55  +* UTF-8 strings can be sorted as bytes and produce the same result as sorting
           56  +  by characters
           57  +* UTF-8 strings in Jim continue to be null terminated
           58  +
           59  +Commands Supporting UTF-8
           60  +-------------------------
           61  +The following commands have been enhanced to support UTF-8 strings.
           62  +
           63  +* array {get,names,unset}
           64  +* case
           65  +* glob
           66  +* lsearch -glob, -regexp
           67  +* switch -glob, -regexp
           68  +* regexp, regsub
           69  +* format
           70  +* scan
           71  +* split
           72  +* string index, range, length, compare, equal, first, last, map, match, reverse, tolower, toupper
           73  +* string bytelength (new)
           74  +* info procs, commands, vars, globals, locals
           75  +
           76  +Character Classes
           77  +-----------------
           78  +Jim Tcl has no support for UTF-8 character classes.  Thus [:alpha:]
           79  +will match [a-zA-Z], but not non-ASCII alphabetic characters.  The
           80  +same is true for 'string is'.
           81  +
           82  +Regular Expressions
           83  +-------------------
           84  +Normally, Jim Tcl uses the system-supplied POSIX-compatible regex
           85  +implementation.
           86  +
           87  +Typically systems do not provide a UTF-8 capable regex implementation,
           88  +therefore when UTF-8 support is enabled, the built-in regex
           89  +implementation is used which includes UTF-8 support.
           90  +
           91  +Case Insensitivity
           92  +------------------
           93  +Case folding is much more complex under Unicode than under ASCII.
           94  +For example it is possible for a character to change the number of
           95  +bytes required for representation when converting from one case to
           96  +another. Jim Tcl supports only "simple" case folding, where case
           97  +is folded only where the number of bytes does not change.
           98  +
           99  +Case folding tables are automatically generated from the official
          100  +unicode data table at http://unicode.org/Public/UNIDATA/UnicodeData.txt
          101  +
          102  +Working with Binary Data and non-UTF-8 encodings
          103  +------------------------------------------------
          104  +Almost all Jim commands will work identically with binary data and
          105  +UTF-8 encoded data, including read, gets, puts and 'string eq'.  It
          106  +is only certain string manipulation commands that behave differently.
          107  +For example, 'string index' will return UTF-8 characters, not bytes.
          108  +
          109  +If it is necessary to manipulate strings containing binary, non-ASCII
          110  +data (bytes >= 0x80), there are two options.
          111  +
          112  +1. Build Jim without UTF-8 support
          113  +2. Use 'string byterange', 'string bytelength' and 'pack', 'unpack' and
          114  +   'binary' to operate on strings as bytes rather than characters.
          115  +
          116  +Internal Details
          117  +----------------
          118  +Jim_Utf8Length() will calculate the character length of the string and cache
          119  +it for later access. It uses utf8_strlen() which relies on the string to be null
          120  +terminated (which it always will be).
          121  +
          122  +It is possible to tell if a string is ascii-only because length == bytelength
          123  +
          124  +It is possible to provide optimised versions of various routines for
          125  +the ascii-only case. Both 'string index' and 'string range' currently
          126  +perform such optimisation.

Added STYLE.

            1  +This file summarizes the C style used for Jim.
            2  +Copyright (C) 2005 Salvatore Sanfilippo.
            3  +
            4  +-----------
            5  +INDENTATION
            6  +-----------
            7  +
            8  +Indentation is 4 spaces, no smart-tabs are used (i.e.
            9  +two indentation steps of 4 spaces will not be converted
           10  +into a real tab, but 8 spaces).
           11  +
           12  +---------------
           13  +FUNCTIONS NAMES
           14  +---------------
           15  +
           16  +Functions names of exported functions are in the form:
           17  +
           18  +Jim_ExportedFunctionName()
           19  +
           20  +The prefix is "Jim_", every word composing the function name
           21  +is capitalized.
           22  +
           23  +Not exported functions that are of general interest for the Jim
           24  +core, like JimFreeInterp() are capitalized the same way, but the
           25  +prefix used for this functions is "Jim" instead of "Jim_".
           26  +Another example is:
           27  +
           28  +JimNotExportedFunction()
           29  +
           30  +Not exported functions that are not general, like functions
           31  +implementing hashtables or Jim objects methods can be named
           32  +in any prefix as long as capitalization rules are followed,
           33  +like in:
           34  +
           35  +ListSetIndex()
           36  +
           37  +---------------
           38  +VARIABLES NAMES
           39  +---------------
           40  +
           41  +Global variables follow the same names convention of functions.
           42  +
           43  +Local variables have usually short names. A counter is just 'i', or 'j',
           44  +or something like this. When a longer name is required, composed of
           45  +more words, capitalization is used, but the first word starts in
           46  +lowcase:
           47  +
           48  +thisIsALogVarName
           49  +
           50  +----
           51  +GOTO
           52  +----
           53  +
           54  +Goto is allowed every time it makes the code cleaner, like in complex
           55  +functions that need to handle exceptions, there is often an "err" label
           56  +at the end of the function where allocated resources are freed before to exit
           57  +with an error. Goto is also used in order to escape multiple nested loops.
           58  +
           59  +----------
           60  +C FEATURES
           61  +----------
           62  +
           63  +Only C89 ANSI C is allowed. C99 features can't be used currently.
           64  +GCC extensions are not allowed.

Added TODO.

            1  +CORE LANGUAGE FEATURES
            2  +
            3  +- none
            4  +
            5  +CORE COMMANDS
            6  +
            7  +- none
            8  +
            9  +OTHER COMMANDS NOT IN TCL BUT THAT SHOULD BE IN JIM
           10  +
           11  +- Set commands: [lunion], [lintersect], and [ldifference]
           12  +
           13  +EXTENSIONS
           14  +
           15  +- Cryptography: hash functions, block ciphers, strim ciphers, PRNGs.
           16  +- Tuplespace extension (http://wiki.tcl.tk/3947) (using sqlite as backend)
           17  +- Gdlib
           18  +- CGI (interface compatible with ncgi, but possibly written in C for speed)
           19  +
           20  +REFERENCES SYSTEM
           21  +
           22  +- Unify ref/getref/setref/collect/finalize under an unique [ref] command.

Added Tcl_shipped.html.

            1  +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
            2  +    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
            3  +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
            4  +<head>
            5  +<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
            6  +<meta name="generator" content="AsciiDoc 8.6.9" />
            7  +<title>Jim Tcl(n)</title>
            8  +<style type="text/css">
            9  +/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
           10  +
           11  +/* Default font. */
           12  +body {
           13  +  font-family: Georgia,serif;
           14  +}
           15  +
           16  +/* Title font. */
           17  +h1, h2, h3, h4, h5, h6,
           18  +div.title, caption.title,
           19  +thead, p.table.header,
           20  +#toctitle,
           21  +#author, #revnumber, #revdate, #revremark,
           22  +#footer {
           23  +  font-family: Arial,Helvetica,sans-serif;
           24  +}
           25  +
           26  +body {
           27  +  margin: 1em 5% 1em 5%;
           28  +}
           29  +
           30  +a {
           31  +  color: blue;
           32  +  text-decoration: underline;
           33  +}
           34  +a:visited {
           35  +  color: fuchsia;
           36  +}
           37  +
           38  +em {
           39  +  font-style: italic;
           40  +  color: navy;
           41  +}
           42  +
           43  +strong {
           44  +  font-weight: bold;
           45  +  color: #083194;
           46  +}
           47  +
           48  +h1, h2, h3, h4, h5, h6 {
           49  +  color: #527bbd;
           50  +  margin-top: 1.2em;
           51  +  margin-bottom: 0.5em;
           52  +  line-height: 1.3;
           53  +}
           54  +
           55  +h1, h2, h3 {
           56  +  border-bottom: 2px solid silver;
           57  +}
           58  +h2 {
           59  +  padding-top: 0.5em;
           60  +}
           61  +h3 {
           62  +  float: left;
           63  +}
           64  +h3 + * {
           65  +  clear: left;
           66  +}
           67  +h5 {
           68  +  font-size: 1.0em;
           69  +}
           70  +
           71  +div.sectionbody {
           72  +  margin-left: 0;
           73  +}
           74  +
           75  +hr {
           76  +  border: 1px solid silver;
           77  +}
           78  +
           79  +p {
           80  +  margin-top: 0.5em;
           81  +  margin-bottom: 0.5em;
           82  +}
           83  +
           84  +ul, ol, li > p {
           85  +  margin-top: 0;
           86  +}
           87  +ul > li     { color: #aaa; }
           88  +ul > li > * { color: black; }
           89  +
           90  +.monospaced, code, pre {
           91  +  font-family: "Courier New", Courier, monospace;
           92  +  font-size: inherit;
           93  +  color: navy;
           94  +  padding: 0;
           95  +  margin: 0;
           96  +}
           97  +pre {
           98  +  white-space: pre-wrap;
           99  +}
          100  +
          101  +#author {
          102  +  color: #527bbd;
          103  +  font-weight: bold;
          104  +  font-size: 1.1em;
          105  +}
          106  +#email {
          107  +}
          108  +#revnumber, #revdate, #revremark {
          109  +}
          110  +
          111  +#footer {
          112  +  font-size: small;
          113  +  border-top: 2px solid silver;
          114  +  padding-top: 0.5em;
          115  +  margin-top: 4.0em;
          116  +}
          117  +#footer-text {
          118  +  float: left;
          119  +  padding-bottom: 0.5em;
          120  +}
          121  +#footer-badges {
          122  +  float: right;
          123  +  padding-bottom: 0.5em;
          124  +}
          125  +
          126  +#preamble {
          127  +  margin-top: 1.5em;
          128  +  margin-bottom: 1.5em;
          129  +}
          130  +div.imageblock, div.exampleblock, div.verseblock,
          131  +div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,
          132  +div.admonitionblock {
          133  +  margin-top: 1.0em;
          134  +  margin-bottom: 1.5em;
          135  +}
          136  +div.admonitionblock {
          137  +  margin-top: 2.0em;
          138  +  margin-bottom: 2.0em;
          139  +  margin-right: 10%;
          140  +  color: #606060;
          141  +}
          142  +
          143  +div.content { /* Block element content. */
          144  +  padding: 0;
          145  +}
          146  +
          147  +/* Block element titles. */
          148  +div.title, caption.title {
          149  +  color: #527bbd;
          150  +  font-weight: bold;
          151  +  text-align: left;
          152  +  margin-top: 1.0em;
          153  +  margin-bottom: 0.5em;
          154  +}
          155  +div.title + * {
          156  +  margin-top: 0;
          157  +}
          158  +
          159  +td div.title:first-child {
          160  +  margin-top: 0.0em;
          161  +}
          162  +div.content div.title:first-child {
          163  +  margin-top: 0.0em;
          164  +}
          165  +div.content + div.title {
          166  +  margin-top: 0.0em;
          167  +}
          168  +
          169  +div.sidebarblock > div.content {
          170  +  background: #ffffee;
          171  +  border: 1px solid #dddddd;
          172  +  border-left: 4px solid #f0f0f0;
          173  +  padding: 0.5em;
          174  +}
          175  +
          176  +div.listingblock > div.content {
          177  +  border: 1px solid #dddddd;
          178  +  border-left: 5px solid #f0f0f0;
          179  +  background: #f8f8f8;
          180  +  padding: 0.5em;
          181  +}
          182  +
          183  +div.quoteblock, div.verseblock {
          184  +  padding-left: 1.0em;
          185  +  margin-left: 1.0em;
          186  +  margin-right: 10%;
          187  +  border-left: 5px solid #f0f0f0;
          188  +  color: #888;
          189  +}
          190  +
          191  +div.quoteblock > div.attribution {
          192  +  padding-top: 0.5em;
          193  +  text-align: right;
          194  +}
          195  +
          196  +div.verseblock > pre.content {
          197  +  font-family: inherit;
          198  +  font-size: inherit;
          199  +}
          200  +div.verseblock > div.attribution {
          201  +  padding-top: 0.75em;
          202  +  text-align: left;
          203  +}
          204  +/* DEPRECATED: Pre version 8.2.7 verse style literal block. */
          205  +div.verseblock + div.attribution {
          206  +  text-align: left;
          207  +}
          208  +
          209  +div.admonitionblock .icon {
          210  +  vertical-align: top;
          211  +  font-size: 1.1em;
          212  +  font-weight: bold;
          213  +  text-decoration: underline;
          214  +  color: #527bbd;
          215  +  padding-right: 0.5em;
          216  +}
          217  +div.admonitionblock td.content {
          218  +  padding-left: 0.5em;
          219  +  border-left: 3px solid #dddddd;
          220  +}
          221  +
          222  +div.exampleblock > div.content {
          223  +  border-left: 3px solid #dddddd;
          224  +  padding-left: 0.5em;
          225  +}
          226  +
          227  +div.imageblock div.content { padding-left: 0; }
          228  +span.image img { border-style: none; vertical-align: text-bottom; }
          229  +a.image:visited { color: white; }
          230  +
          231  +dl {
          232  +  margin-top: 0.8em;
          233  +  margin-bottom: 0.8em;
          234  +}
          235  +dt {
          236  +  margin-top: 0.5em;
          237  +  margin-bottom: 0;
          238  +  font-style: normal;
          239  +  color: navy;
          240  +}
          241  +dd > *:first-child {
          242  +  margin-top: 0.1em;
          243  +}
          244  +
          245  +ul, ol {
          246  +    list-style-position: outside;
          247  +}
          248  +ol.arabic {
          249  +  list-style-type: decimal;
          250  +}
          251  +ol.loweralpha {
          252  +  list-style-type: lower-alpha;
          253  +}
          254  +ol.upperalpha {
          255  +  list-style-type: upper-alpha;
          256  +}
          257  +ol.lowerroman {
          258  +  list-style-type: lower-roman;
          259  +}
          260  +ol.upperroman {
          261  +  list-style-type: upper-roman;
          262  +}
          263  +
          264  +div.compact ul, div.compact ol,
          265  +div.compact p, div.compact p,
          266  +div.compact div, div.compact div {
          267  +  margin-top: 0.1em;
          268  +  margin-bottom: 0.1em;
          269  +}
          270  +
          271  +tfoot {
          272  +  font-weight: bold;
          273  +}
          274  +td > div.verse {
          275  +  white-space: pre;
          276  +}
          277  +
          278  +div.hdlist {
          279  +  margin-top: 0.8em;
          280  +  margin-bottom: 0.8em;
          281  +}
          282  +div.hdlist tr {
          283  +  padding-bottom: 15px;
          284  +}
          285  +dt.hdlist1.strong, td.hdlist1.strong {
          286  +  font-weight: bold;
          287  +}
          288  +td.hdlist1 {
          289  +  vertical-align: top;
          290  +  font-style: normal;
          291  +  padding-right: 0.8em;
          292  +  color: navy;
          293  +}
          294  +td.hdlist2 {
          295  +  vertical-align: top;
          296  +}
          297  +div.hdlist.compact tr {
          298  +  margin: 0;
          299  +  padding-bottom: 0;
          300  +}
          301  +
          302  +.comment {
          303  +  background: yellow;
          304  +}
          305  +
          306  +.footnote, .footnoteref {
          307  +  font-size: 0.8em;
          308  +}
          309  +
          310  +span.footnote, span.footnoteref {
          311  +  vertical-align: super;
          312  +}
          313  +
          314  +#footnotes {
          315  +  margin: 20px 0 20px 0;
          316  +  padding: 7px 0 0 0;
          317  +}
          318  +
          319  +#footnotes div.footnote {
          320  +  margin: 0 0 5px 0;
          321  +}
          322  +
          323  +#footnotes hr {
          324  +  border: none;
          325  +  border-top: 1px solid silver;
          326  +  height: 1px;
          327  +  text-align: left;
          328  +  margin-left: 0;
          329  +  width: 20%;
          330  +  min-width: 100px;
          331  +}
          332  +
          333  +div.colist td {
          334  +  padding-right: 0.5em;
          335  +  padding-bottom: 0.3em;
          336  +  vertical-align: top;
          337  +}
          338  +div.colist td img {
          339  +  margin-top: 0.3em;
          340  +}
          341  +
          342  +@media print {
          343  +  #footer-badges { display: none; }
          344  +}
          345  +
          346  +#toc {
          347  +  margin-bottom: 2.5em;
          348  +}
          349  +
          350  +#toctitle {
          351  +  color: #527bbd;
          352  +  font-size: 1.1em;
          353  +  font-weight: bold;
          354  +  margin-top: 1.0em;
          355  +  margin-bottom: 0.1em;
          356  +}
          357  +
          358  +div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {
          359  +  margin-top: 0;
          360  +  margin-bottom: 0;
          361  +}
          362  +div.toclevel2 {
          363  +  margin-left: 2em;
          364  +  font-size: 0.9em;
          365  +}
          366  +div.toclevel3 {
          367  +  margin-left: 4em;
          368  +  font-size: 0.9em;
          369  +}
          370  +div.toclevel4 {
          371  +  margin-left: 6em;
          372  +  font-size: 0.9em;
          373  +}
          374  +
          375  +span.aqua { color: aqua; }
          376  +span.black { color: black; }
          377  +span.blue { color: blue; }
          378  +span.fuchsia { color: fuchsia; }
          379  +span.gray { color: gray; }
          380  +span.green { color: green; }
          381  +span.lime { color: lime; }
          382  +span.maroon { color: maroon; }
          383  +span.navy { color: navy; }
          384  +span.olive { color: olive; }
          385  +span.purple { color: purple; }
          386  +span.red { color: red; }
          387  +span.silver { color: silver; }
          388  +span.teal { color: teal; }
          389  +span.white { color: white; }
          390  +span.yellow { color: yellow; }
          391  +
          392  +span.aqua-background { background: aqua; }
          393  +span.black-background { background: black; }
          394  +span.blue-background { background: blue; }
          395  +span.fuchsia-background { background: fuchsia; }
          396  +span.gray-background { background: gray; }
          397  +span.green-background { background: green; }
          398  +span.lime-background { background: lime; }
          399  +span.maroon-background { background: maroon; }
          400  +span.navy-background { background: navy; }
          401  +span.olive-background { background: olive; }
          402  +span.purple-background { background: purple; }
          403  +span.red-background { background: red; }
          404  +span.silver-background { background: silver; }
          405  +span.teal-background { background: teal; }
          406  +span.white-background { background: white; }
          407  +span.yellow-background { background: yellow; }
          408  +
          409  +span.big { font-size: 2em; }
          410  +span.small { font-size: 0.6em; }
          411  +
          412  +span.underline { text-decoration: underline; }
          413  +span.overline { text-decoration: overline; }
          414  +span.line-through { text-decoration: line-through; }
          415  +
          416  +div.unbreakable { page-break-inside: avoid; }
          417  +
          418  +
          419  +/*
          420  + * xhtml11 specific
          421  + *
          422  + * */
          423  +
          424  +div.tableblock {
          425  +  margin-top: 1.0em;
          426  +  margin-bottom: 1.5em;
          427  +}
          428  +div.tableblock > table {
          429  +  border: 3px solid #527bbd;
          430  +}
          431  +thead, p.table.header {
          432  +  font-weight: bold;
          433  +  color: #527bbd;
          434  +}
          435  +p.table {
          436  +  margin-top: 0;
          437  +}
          438  +/* Because the table frame attribute is overriden by CSS in most browsers. */
          439  +div.tableblock > table[frame="void"] {
          440  +  border-style: none;
          441  +}
          442  +div.tableblock > table[frame="hsides"] {
          443  +  border-left-style: none;
          444  +  border-right-style: none;
          445  +}
          446  +div.tableblock > table[frame="vsides"] {
          447  +  border-top-style: none;
          448  +  border-bottom-style: none;
          449  +}
          450  +
          451  +
          452  +/*
          453  + * html5 specific
          454  + *
          455  + * */
          456  +
          457  +table.tableblock {
          458  +  margin-top: 1.0em;
          459  +  margin-bottom: 1.5em;
          460  +}
          461  +thead, p.tableblock.header {
          462  +  font-weight: bold;
          463  +  color: #527bbd;
          464  +}
          465  +p.tableblock {
          466  +  margin-top: 0;
          467  +}
          468  +table.tableblock {
          469  +  border-width: 3px;
          470  +  border-spacing: 0px;
          471  +  border-style: solid;
          472  +  border-color: #527bbd;
          473  +  border-collapse: collapse;
          474  +}
          475  +th.tableblock, td.tableblock {
          476  +  border-width: 1px;
          477  +  padding: 4px;
          478  +  border-style: solid;
          479  +  border-color: #527bbd;
          480  +}
          481  +
          482  +table.tableblock.frame-topbot {
          483  +  border-left-style: hidden;
          484  +  border-right-style: hidden;
          485  +}
          486  +table.tableblock.frame-sides {
          487  +  border-top-style: hidden;
          488  +  border-bottom-style: hidden;
          489  +}
          490  +table.tableblock.frame-none {
          491  +  border-style: hidden;
          492  +}
          493  +
          494  +th.tableblock.halign-left, td.tableblock.halign-left {
          495  +  text-align: left;
          496  +}
          497  +th.tableblock.halign-center, td.tableblock.halign-center {
          498  +  text-align: center;
          499  +}
          500  +th.tableblock.halign-right, td.tableblock.halign-right {
          501  +  text-align: right;
          502  +}
          503  +
          504  +th.tableblock.valign-top, td.tableblock.valign-top {
          505  +  vertical-align: top;
          506  +}
          507  +th.tableblock.valign-middle, td.tableblock.valign-middle {
          508  +  vertical-align: middle;
          509  +}
          510  +th.tableblock.valign-bottom, td.tableblock.valign-bottom {
          511  +  vertical-align: bottom;
          512  +}
          513  +
          514  +
          515  +/*
          516  + * manpage specific
          517  + *
          518  + * */
          519  +
          520  +body.manpage h1 {
          521  +  padding-top: 0.5em;
          522  +  padding-bottom: 0.5em;
          523  +  border-top: 2px solid silver;
          524  +  border-bottom: 2px solid silver;
          525  +}
          526  +body.manpage h2 {
          527  +  border-style: none;
          528  +}
          529  +body.manpage div.sectionbody {
          530  +  margin-left: 3em;
          531  +}
          532  +
          533  +@media print {
          534  +  body.manpage div#toc { display: none; }
          535  +}
          536  +
          537  +
          538  +</style>
          539  +<script type="text/javascript">
          540  +/*<![CDATA[*/
          541  +var asciidoc = {  // Namespace.
          542  +
          543  +/////////////////////////////////////////////////////////////////////
          544  +// Table Of Contents generator
          545  +/////////////////////////////////////////////////////////////////////
          546  +
          547  +/* Author: Mihai Bazon, September 2002
          548  + * http://students.infoiasi.ro/~mishoo
          549  + *
          550  + * Table Of Content generator
          551  + * Version: 0.4
          552  + *
          553  + * Feel free to use this script under the terms of the GNU General Public
          554  + * License, as long as you do not remove or alter this notice.
          555  + */
          556  +
          557  + /* modified by Troy D. Hanson, September 2006. License: GPL */
          558  + /* modified by Stuart Rackham, 2006, 2009. License: GPL */
          559  +
          560  +// toclevels = 1..4.
          561  +toc: function (toclevels) {
          562  +
          563  +  function getText(el) {
          564  +    var text = "";
          565  +    for (var i = el.firstChild; i != null; i = i.nextSibling) {
          566  +      if (i.nodeType == 3 /* Node.TEXT_NODE */) // IE doesn't speak constants.
          567  +        text += i.data;
          568  +      else if (i.firstChild != null)
          569  +        text += getText(i);
          570  +    }
          571  +    return text;
          572  +  }
          573  +
          574  +  function TocEntry(el, text, toclevel) {
          575  +    this.element = el;
          576  +    this.text = text;
          577  +    this.toclevel = toclevel;
          578  +  }
          579  +
          580  +  function tocEntries(el, toclevels) {
          581  +    var result = new Array;
          582  +    var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');
          583  +    // Function that scans the DOM tree for header elements (the DOM2
          584  +    // nodeIterator API would be a better technique but not supported by all
          585  +    // browsers).
          586  +    var iterate = function (el) {
          587  +      for (var i = el.firstChild; i != null; i = i.nextSibling) {
          588  +        if (i.nodeType == 1 /* Node.ELEMENT_NODE */) {
          589  +          var mo = re.exec(i.tagName);
          590  +          if (mo && (i.getAttribute("class") || i.getAttribute("className")) != "float") {
          591  +            result[result.length] = new TocEntry(i, getText(i), mo[1]-1);
          592  +          }
          593  +          iterate(i);
          594  +        }
          595  +      }
          596  +    }
          597  +    iterate(el);
          598  +    return result;
          599  +  }
          600  +
          601  +  var toc = document.getElementById("toc");
          602  +  if (!toc) {
          603  +    return;
          604  +  }
          605  +
          606  +  // Delete existing TOC entries in case we're reloading the TOC.
          607  +  var tocEntriesToRemove = [];
          608  +  var i;
          609  +  for (i = 0; i < toc.childNodes.length; i++) {
          610  +    var entry = toc.childNodes[i];
          611  +    if (entry.nodeName.toLowerCase() == 'div'
          612  +     && entry.getAttribute("class")
          613  +     && entry.getAttribute("class").match(/^toclevel/))
          614  +      tocEntriesToRemove.push(entry);
          615  +  }
          616  +  for (i = 0; i < tocEntriesToRemove.length; i++) {
          617  +    toc.removeChild(tocEntriesToRemove[i]);
          618  +  }
          619  +
          620  +  // Rebuild TOC entries.
          621  +  var entries = tocEntries(document.getElementById("content"), toclevels);
          622  +  for (var i = 0; i < entries.length; ++i) {
          623  +    var entry = entries[i];
          624  +    if (entry.element.id == "")
          625  +      entry.element.id = "_toc_" + i;
          626  +    var a = document.createElement("a");
          627  +    a.href = "#" + entry.element.id;
          628  +    a.appendChild(document.createTextNode(entry.text));
          629  +    var div = document.createElement("div");
          630  +    div.appendChild(a);
          631  +    div.className = "toclevel" + entry.toclevel;
          632  +    toc.appendChild(div);
          633  +  }
          634  +  if (entries.length == 0)
          635  +    toc.parentNode.removeChild(toc);
          636  +},
          637  +
          638  +
          639  +/////////////////////////////////////////////////////////////////////
          640  +// Footnotes generator
          641  +/////////////////////////////////////////////////////////////////////
          642  +
          643  +/* Based on footnote generation code from:
          644  + * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html
          645  + */
          646  +
          647  +footnotes: function () {
          648  +  // Delete existing footnote entries in case we're reloading the footnodes.
          649  +  var i;
          650  +  var noteholder = document.getElementById("footnotes");
          651  +  if (!noteholder) {
          652  +    return;
          653  +  }
          654  +  var entriesToRemove = [];
          655  +  for (i = 0; i < noteholder.childNodes.length; i++) {
          656  +    var entry = noteholder.childNodes[i];
          657  +    if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")
          658  +      entriesToRemove.push(entry);
          659  +  }
          660  +  for (i = 0; i < entriesToRemove.length; i++) {
          661  +    noteholder.removeChild(entriesToRemove[i]);
          662  +  }
          663  +
          664  +  // Rebuild footnote entries.
          665  +  var cont = document.getElementById("content");
          666  +  var spans = cont.getElementsByTagName("span");
          667  +  var refs = {};
          668  +  var n = 0;
          669  +  for (i=0; i<spans.length; i++) {
          670  +    if (spans[i].className == "footnote") {
          671  +      n++;
          672  +      var note = spans[i].getAttribute("data-note");
          673  +      if (!note) {
          674  +        // Use [\s\S] in place of . so multi-line matches work.
          675  +        // Because JavaScript has no s (dotall) regex flag.
          676  +        note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];
          677  +        spans[i].innerHTML =
          678  +          "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +
          679  +          "' title='View footnote' class='footnote'>" + n + "</a>]";
          680  +        spans[i].setAttribute("data-note", note);
          681  +      }
          682  +      noteholder.innerHTML +=
          683  +        "<div class='footnote' id='_footnote_" + n + "'>" +
          684  +        "<a href='#_footnoteref_" + n + "' title='Return to text'>" +
          685  +        n + "</a>. " + note + "</div>";
          686  +      var id =spans[i].getAttribute("id");
          687  +      if (id != null) refs["#"+id] = n;
          688  +    }
          689  +  }
          690  +  if (n == 0)
          691  +    noteholder.parentNode.removeChild(noteholder);
          692  +  else {
          693  +    // Process footnoterefs.
          694  +    for (i=0; i<spans.length; i++) {
          695  +      if (spans[i].className == "footnoteref") {
          696  +        var href = spans[i].getElementsByTagName("a")[0].getAttribute("href");
          697  +        href = href.match(/#.*/)[0];  // Because IE return full URL.
          698  +        n = refs[href];
          699  +        spans[i].innerHTML =
          700  +          "[<a href='#_footnote_" + n +
          701  +          "' title='View footnote' class='footnote'>" + n + "</a>]";
          702  +      }
          703  +    }
          704  +  }
          705  +},
          706  +
          707  +install: function(toclevels) {
          708  +  var timerId;
          709  +
          710  +  function reinstall() {
          711  +    asciidoc.footnotes();
          712  +    if (toclevels) {
          713  +      asciidoc.toc(toclevels);
          714  +    }
          715  +  }
          716  +
          717  +  function reinstallAndRemoveTimer() {
          718  +    clearInterval(timerId);
          719  +    reinstall();
          720  +  }
          721  +
          722  +  timerId = setInterval(reinstall, 500);
          723  +  if (document.addEventListener)
          724  +    document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);
          725  +  else
          726  +    window.onload = reinstallAndRemoveTimer;
          727  +}
          728  +
          729  +}
          730  +asciidoc.install();
          731  +/*]]>*/
          732  +</script>
          733  +</head>
          734  +<body class="manpage">
          735  +<div id="header">
          736  +<h1>
          737  +Jim Tcl(n) Manual Page
          738  +</h1>
          739  +<h2>NAME</h2>
          740  +<div class="sectionbody">
          741  +<p>Jim Tcl v0.78 -
          742  +   reference manual for the Jim Tcl scripting language
          743  +</p>
          744  +</div>
          745  +</div>
          746  +<div id="content">
          747  +<div class="sect1">
          748  +<h2 id="_synopsis">SYNOPSIS</h2>
          749  +<div class="sectionbody">
          750  +<div class="literalblock">
          751  +<div class="content">
          752  +<pre><code>cc &lt;source&gt; -ljim</code></pre>
          753  +</div></div>
          754  +<div class="paragraph"><p>or</p></div>
          755  +<div class="literalblock">
          756  +<div class="content">
          757  +<pre><code>jimsh [&lt;scriptfile&gt;|-]
          758  +jimsh -e '&lt;immediate-script&gt;'
          759  +jimsh --version
          760  +jimsh --help</code></pre>
          761  +</div></div>
          762  +<div class="ulist"><div class="title">Quick Index</div><ul>
          763  +<li>
          764  +<p>
          765  +<a href="#CommandIndex">Command Reference</a>
          766  +</p>
          767  +</li>
          768  +<li>
          769  +<p>
          770  +<a href="#OperatorPrecedence">Operator Precedence</a>
          771  +</p>
          772  +</li>
          773  +<li>
          774  +<p>
          775  +<a href="#BuiltinVariables">Builtin Variables</a>
          776  +</p>
          777  +</li>
          778  +<li>
          779  +<p>
          780  +<a href="#BackslashSequences">Backslash Sequences</a>
          781  +</p>
          782  +</li>
          783  +</ul></div>
          784  +</div>
          785  +</div>
          786  +<div class="sect1">
          787  +<h2 id="_introduction">INTRODUCTION</h2>
          788  +<div class="sectionbody">
          789  +<div class="paragraph"><p>Jim Tcl is a small footprint reimplementation of the Tcl scripting language.
          790  +The core language engine is compatible with Tcl 8.5+, while implementing
          791  +a significant subset of the Tcl 8.6 command set, plus additional features
          792  +available only in Jim Tcl.</p></div>
          793  +<div class="paragraph"><p>Some notable differences with Tcl 8.5/8.6 are:</p></div>
          794  +<div class="olist arabic"><ol class="arabic">
          795  +<li>
          796  +<p>
          797  +Object-based I/O (aio), but with a Tcl-compatibility layer
          798  +</p>
          799  +</li>
          800  +<li>
          801  +<p>
          802  +I/O: Support for sockets and pipes including udp, unix domain sockets and IPv6
          803  +</p>
          804  +</li>
          805  +<li>
          806  +<p>
          807  +Integers are 64bit
          808  +</p>
          809  +</li>
          810  +<li>
          811  +<p>
          812  +Support for references (<a href="#_ref"><strong><code>ref</code></strong></a>/<a href="#_getref"><strong><code>getref</code></strong></a>/<a href="#_setref"><strong><code>setref</code></strong></a>) and garbage collection
          813  +</p>
          814  +</li>
          815  +<li>
          816  +<p>
          817  +Builtin dictionary type (<a href="#_dict"><strong><code>dict</code></strong></a>) with some limitations compared to Tcl 8.6
          818  +</p>
          819  +</li>
          820  +<li>
          821  +<p>
          822  +<a href="#_env"><strong><code>env</code></strong></a> command to access environment variables
          823  +</p>
          824  +</li>
          825  +<li>
          826  +<p>
          827  +Operating system features: <a href="#cmd_1"><strong><code>os.fork</code></strong></a>, <a href="#cmd_1"><strong><code>os.uptime</code></strong></a>, <a href="#_wait"><strong><code>wait</code></strong></a>, <a href="#_signal"><strong><code>signal</code></strong></a>, <a href="#_alarm"><strong><code>alarm</code></strong></a>, <a href="#_sleep"><strong><code>sleep</code></strong></a>
          828  +</p>
          829  +</li>
          830  +<li>
          831  +<p>
          832  +Much better error reporting. <a href="#_info"><strong><code>info</code></strong></a> <code>stacktrace</code> as a replacement for <em>$errorInfo</em>, <em>$errorCode</em>
          833  +</p>
          834  +</li>
          835  +<li>
          836  +<p>
          837  +Support for "static" variables in procedures
          838  +</p>
          839  +</li>
          840  +<li>
          841  +<p>
          842  +Threads and coroutines are not supported
          843  +</p>
          844  +</li>
          845  +<li>
          846  +<p>
          847  +Command and variable traces are not supported
          848  +</p>
          849  +</li>
          850  +<li>
          851  +<p>
          852  +Built-in command line editing
          853  +</p>
          854  +</li>
          855  +<li>
          856  +<p>
          857  +Expression shorthand syntax: <code>$(&#8230;)</code>
          858  +</p>
          859  +</li>
          860  +<li>
          861  +<p>
          862  +Modular build allows many features to be omitted or built as dynamic, loadable modules
          863  +</p>
          864  +</li>
          865  +<li>
          866  +<p>
          867  +Highly suitable for use in an embedded environment
          868  +</p>
          869  +</li>
          870  +<li>
          871  +<p>
          872  +Support for UDP, IPv6, Unix-Domain sockets in addition to TCP sockets
          873  +</p>
          874  +</li>
          875  +</ol></div>
          876  +</div>
          877  +</div>
          878  +<div class="sect1">
          879  +<h2 id="_recent_changes">RECENT CHANGES</h2>
          880  +<div class="sectionbody">
          881  +<div class="sect2">
          882  +<h3 id="_changes_between_0_77_and_0_78">Changes between 0.77 and 0.78</h3>
          883  +<div class="olist arabic"><ol class="arabic">
          884  +<li>
          885  +<p>
          886  +Add serial/tty support with <a href="#_aio"><strong><code>aio</code></strong></a> <code>tty</code>
          887  +</p>
          888  +</li>
          889  +<li>
          890  +<p>
          891  +Add support for <em>jimsh -</em>
          892  +</p>
          893  +</li>
          894  +<li>
          895  +<p>
          896  +Add hidden <em>-commands</em> option to many commands
          897  +</p>
          898  +</li>
          899  +<li>
          900  +<p>
          901  +Add scriptable autocompletion support in interactive mode with <a href="#_tcl_autocomplete"><strong><code>tcl::autocomplete</code></strong></a>
          902  +</p>
          903  +</li>
          904  +<li>
          905  +<p>
          906  +Add <a href="#_aio"><strong><code>aio</code></strong></a> <code>sockopt</code>
          907  +</p>
          908  +</li>
          909  +<li>
          910  +<p>
          911  +Add scriptable autocompletion support with <a href="#_history"><strong><code>history</code></strong></a> <code>completion</code>
          912  +</p>
          913  +</li>
          914  +<li>
          915  +<p>
          916  +Add support for <a href="#_tree"><strong><code>tree</code></strong></a> <code>delete</code>
          917  +</p>
          918  +</li>
          919  +<li>
          920  +<p>
          921  +Add support for <a href="#_defer"><strong><code>defer</code></strong></a> and <em>$jim::defer</em>
          922  +</p>
          923  +</li>
          924  +<li>
          925  +<p>
          926  +Renamed <code>os.wait</code> to <a href="#_wait"><strong><code>wait</code></strong></a>, now more Tcl-compatible and compatible with <a href="#_exec"><strong><code>exec</code></strong></a> <code>... &amp;</code>
          927  +</p>
          928  +</li>
          929  +<li>
          930  +<p>
          931  +<a href="#_pipe"><strong><code>pipe</code></strong></a> is now a synonym for <a href="#_socket"><strong><code>socket</code></strong></a> <code>pipe</code>
          932  +</p>
          933  +</li>
          934  +<li>
          935  +<p>
          936  +Closing a pipe open with <a href="#_open"><strong><code>open</code></strong></a> <code>|...</code> now returns Tcl-like status
          937  +</p>
          938  +</li>
          939  +<li>
          940  +<p>
          941  +It is now possible to used <a href="#_exec"><strong><code>exec</code></strong></a> redirection with a pipe opened with <a href="#_open"><strong><code>open</code></strong></a> <code>|...</code>
          942  +</p>
          943  +</li>
          944  +<li>
          945  +<p>
          946  +Interactive line editing now supports multiline mode if $::history::multiline is set
          947  +</p>
          948  +</li>
          949  +</ol></div>
          950  +</div>
          951  +<div class="sect2">
          952  +<h3 id="_changes_between_0_76_and_0_77">Changes between 0.76 and 0.77</h3>
          953  +<div class="olist arabic"><ol class="arabic">
          954  +<li>
          955  +<p>
          956  +Add support for <a href="#_aio"><strong><code>aio</code></strong></a> <code>sync</code>
          957  +</p>
          958  +</li>
          959  +<li>
          960  +<p>
          961  +Add SSL and TLS support in aio
          962  +</p>
          963  +</li>
          964  +<li>
          965  +<p>
          966  +Added <a href="#_zlib"><strong><code>zlib</code></strong></a>
          967  +</p>
          968  +</li>
          969  +<li>
          970  +<p>
          971  +Added support for boolean constants in <a href="#_expr"><strong><code>expr</code></strong></a>
          972  +</p>
          973  +</li>
          974  +<li>
          975  +<p>
          976  +<a href="#_string"><strong><code>string</code></strong></a> <code>is</code> now supports <em>boolean</em> class
          977  +</p>
          978  +</li>
          979  +<li>
          980  +<p>
          981  +Add support for <a href="#_aio"><strong><code>aio</code></strong></a> <code>lock</code> and <a href="#_aio"><strong><code>aio</code></strong></a> <code>unlock</code>
          982  +</p>
          983  +</li>
          984  +<li>
          985  +<p>
          986  +Add new <a href="#_interp"><strong><code>interp</code></strong></a> command
          987  +</p>
          988  +</li>
          989  +</ol></div>
          990  +</div>
          991  +<div class="sect2">
          992  +<h3 id="_changes_between_0_75_and_0_76">Changes between 0.75 and 0.76</h3>
          993  +<div class="olist arabic"><ol class="arabic">
          994  +<li>
          995  +<p>
          996  +<a href="#_glob"><strong><code>glob</code></strong></a> now supports the <code>-tails</code> option
          997  +</p>
          998  +</li>
          999  +<li>
         1000  +<p>
         1001  +Add support for <a href="#_string"><strong><code>string</code></strong></a> <code>cat</code>
         1002  +</p>
         1003  +</li>
         1004  +<li>
         1005  +<p>
         1006  +Allow <a href="#_info"><strong><code>info</code></strong></a> <code>source</code> to add source info
         1007  +</p>
         1008  +</li>
         1009  +</ol></div>
         1010  +</div>
         1011  +<div class="sect2">
         1012  +<h3 id="_changes_between_0_74_and_0_75">Changes between 0.74 and 0.75</h3>
         1013  +<div class="olist arabic"><ol class="arabic">
         1014  +<li>
         1015  +<p>
         1016  +<a href="#_binary"><strong><code>binary</code></strong></a>, <a href="#cmd_3"><strong><code>pack</code></strong></a> and <a href="#cmd_3"><strong><code>unpack</code></strong></a> now support floating point
         1017  +</p>
         1018  +</li>
         1019  +<li>
         1020  +<p>
         1021  +<a href="#_file"><strong><code>file</code></strong></a> <code>copy</code> <code>-force</code> handles source and target as the same file
         1022  +</p>
         1023  +</li>
         1024  +<li>
         1025  +<p>
         1026  +<a href="#_format"><strong><code>format</code></strong></a> now supports <code>%b</code> for binary conversion
         1027  +</p>
         1028  +</li>
         1029  +<li>
         1030  +<p>
         1031  +<a href="#_lsort"><strong><code>lsort</code></strong></a> now supports <code>-unique</code> and <code>-real</code>
         1032  +</p>
         1033  +</li>
         1034  +<li>
         1035  +<p>
         1036  +Add support for half-close with <a href="#_aio"><strong><code>aio</code></strong></a> <code>close</code> <code>?r|w?</code>
         1037  +</p>
         1038  +</li>
         1039  +<li>
         1040  +<p>
         1041  +Add <a href="#_socket"><strong><code>socket</code></strong></a> <code>pair</code> for a bidirectional pipe
         1042  +</p>
         1043  +</li>
         1044  +<li>
         1045  +<p>
         1046  +Add <em>--random-hash</em> to randomise hash tables for greater security
         1047  +</p>
         1048  +</li>
         1049  +<li>
         1050  +<p>
         1051  +<a href="#_dict"><strong><code>dict</code></strong></a> now supports <em>for</em>, <em>values</em>, <em>incr</em>, <em>append</em>, <em>lappend</em>, <em>update</em>, <em>info</em> and <em>replace</em>
         1052  +</p>
         1053  +</li>
         1054  +<li>
         1055  +<p>
         1056  +<a href="#_file"><strong><code>file</code></strong></a> <code>stat</code> no longer requires the variable name
         1057  +</p>
         1058  +</li>
         1059  +<li>
         1060  +<p>
         1061  +Add support for <a href="#_file"><strong><code>file</code></strong></a> <code>link</code>
         1062  +</p>
         1063  +</li>
         1064  +</ol></div>
         1065  +</div>
         1066  +<div class="sect2">
         1067  +<h3 id="_changes_between_0_73_and_0_74">Changes between 0.73 and 0.74</h3>
         1068  +<div class="olist arabic"><ol class="arabic">
         1069  +<li>
         1070  +<p>
         1071  +Numbers with leading zeros are treated as decimal, not octal
         1072  +</p>
         1073  +</li>
         1074  +<li>
         1075  +<p>
         1076  +Add <a href="#_aio"><strong><code>aio</code></strong></a> <code>isatty</code>
         1077  +</p>
         1078  +</li>
         1079  +<li>
         1080  +<p>
         1081  +Add LFS (64 bit) support for <a href="#_aio"><strong><code>aio</code></strong></a> <code>seek</code>, <a href="#_aio"><strong><code>aio</code></strong></a> <code>tell</code>, <a href="#_aio"><strong><code>aio</code></strong></a> <code>copyto</code>, <a href="#_file"><strong><code>file</code></strong></a> <code>copy</code>
         1082  +</p>
         1083  +</li>
         1084  +<li>
         1085  +<p>
         1086  +<a href="#_string"><strong><code>string</code></strong></a> <code>compare</code> and <a href="#_string"><strong><code>string</code></strong></a> <code>equal</code> now support <em>-length</em>
         1087  +</p>
         1088  +</li>
         1089  +<li>
         1090  +<p>
         1091  +<a href="#_glob"><strong><code>glob</code></strong></a> now supports <em>-directory</em>
         1092  +</p>
         1093  +</li>
         1094  +</ol></div>
         1095  +</div>
         1096  +<div class="sect2">
         1097  +<h3 id="_changes_between_0_72_and_0_73">Changes between 0.72 and 0.73</h3>
         1098  +<div class="olist arabic"><ol class="arabic">
         1099  +<li>
         1100  +<p>
         1101  +Built-in regexp now support non-capturing parentheses: (?:&#8230;)
         1102  +</p>
         1103  +</li>
         1104  +<li>
         1105  +<p>
         1106  +Add <a href="#_string"><strong><code>string</code></strong></a> <code>replace</code>
         1107  +</p>
         1108  +</li>
         1109  +<li>
         1110  +<p>
         1111  +Add <a href="#_string"><strong><code>string</code></strong></a> <code>totitle</code>
         1112  +</p>
         1113  +</li>
         1114  +<li>
         1115  +<p>
         1116  +Add <a href="#_info"><strong><code>info</code></strong></a> <code>statics</code>
         1117  +</p>
         1118  +</li>
         1119  +<li>
         1120  +<p>
         1121  +Add <code>build-jim-ext</code> for easy separate building of loadable modules (extensions)
         1122  +</p>
         1123  +</li>
         1124  +<li>
         1125  +<p>
         1126  +<a href="#_local"><strong><code>local</code></strong></a> now works with any command, not just procs
         1127  +</p>
         1128  +</li>
         1129  +<li>
         1130  +<p>
         1131  +Add <a href="#_info"><strong><code>info</code></strong></a> <code>alias</code> to access the target of an alias
         1132  +</p>
         1133  +</li>
         1134  +<li>
         1135  +<p>
         1136  +UTF-8 encoding past the basic multilingual plane (BMP) is supported
         1137  +</p>
         1138  +</li>
         1139  +<li>
         1140  +<p>
         1141  +Add <a href="#_tcl_prefix"><strong><code>tcl::prefix</code></strong></a>
         1142  +</p>
         1143  +</li>
         1144  +<li>
         1145  +<p>
         1146  +Add <a href="#_history"><strong><code>history</code></strong></a>
         1147  +</p>
         1148  +</li>
         1149  +<li>
         1150  +<p>
         1151  +Most extensions are now enabled by default
         1152  +</p>
         1153  +</li>
         1154  +<li>
         1155  +<p>
         1156  +Add support for namespaces and the <a href="#_namespace"><strong><code>namespace</code></strong></a> command
         1157  +</p>
         1158  +</li>
         1159  +<li>
         1160  +<p>
         1161  +Add <a href="#_apply"><strong><code>apply</code></strong></a>
         1162  +</p>
         1163  +</li>
         1164  +</ol></div>
         1165  +</div>
         1166  +<div class="sect2">
         1167  +<h3 id="_changes_between_0_71_and_0_72">Changes between 0.71 and 0.72</h3>
         1168  +<div class="olist arabic"><ol class="arabic">
         1169  +<li>
         1170  +<p>
         1171  +procs now allow <em>args</em> and optional parameters in any position
         1172  +</p>
         1173  +</li>
         1174  +<li>
         1175  +<p>
         1176  +Add Tcl-compatible expr functions, <code>rand()</code>, <code>srand()</code> and <code>pow()</code>
         1177  +</p>
         1178  +</li>
         1179  +<li>
         1180  +<p>
         1181  +Add support for the <em>-force</em> option to <a href="#_file"><strong><code>file</code></strong></a> <code>delete</code>
         1182  +</p>
         1183  +</li>
         1184  +<li>
         1185  +<p>
         1186  +Better diagnostics when <a href="#_source"><strong><code>source</code></strong></a> fails to load a script with a missing quote or bracket
         1187  +</p>
         1188  +</li>
         1189  +<li>
         1190  +<p>
         1191  +New <code>tcl_platform(pathSeparator)</code>
         1192  +</p>
         1193  +</li>
         1194  +<li>
         1195  +<p>
         1196  +Add support settings the modification time with <a href="#_file"><strong><code>file</code></strong></a> <code>mtime</code>
         1197  +</p>
         1198  +</li>
         1199  +<li>
         1200  +<p>
         1201  +<a href="#_exec"><strong><code>exec</code></strong></a> is now fully supported on win32 (mingw32)
         1202  +</p>
         1203  +</li>
         1204  +<li>
         1205  +<p>
         1206  +<a href="#_file"><strong><code>file</code></strong></a> <code>join</code>, <a href="#_pwd"><strong><code>pwd</code></strong></a>, <a href="#_glob"><strong><code>glob</code></strong></a> etc. now work for mingw32
         1207  +</p>
         1208  +</li>
         1209  +<li>
         1210  +<p>
         1211  +Line editing is now supported for the win32 console (mingw32)
         1212  +</p>
         1213  +</li>
         1214  +<li>
         1215  +<p>
         1216  +Add <a href="#_aio"><strong><code>aio</code></strong></a> <code>listen</code> command
         1217  +</p>
         1218  +</li>
         1219  +</ol></div>
         1220  +</div>
         1221  +<div class="sect2">
         1222  +<h3 id="_changes_between_0_70_and_0_71">Changes between 0.70 and 0.71</h3>
         1223  +<div class="olist arabic"><ol class="arabic">
         1224  +<li>
         1225  +<p>
         1226  +Allow <em>args</em> to be renamed in procs
         1227  +</p>
         1228  +</li>
         1229  +<li>
         1230  +<p>
         1231  +Add <code>$(&#8230;)</code> shorthand syntax for expressions
         1232  +</p>
         1233  +</li>
         1234  +<li>
         1235  +<p>
         1236  +Add automatic reference variables in procs with <code>&amp;var</code> syntax
         1237  +</p>
         1238  +</li>
         1239  +<li>
         1240  +<p>
         1241  +Support <code>jimsh --version</code>
         1242  +</p>
         1243  +</li>
         1244  +<li>
         1245  +<p>
         1246  +Additional variables in <code>tcl_platform()</code>
         1247  +</p>
         1248  +</li>
         1249  +<li>
         1250  +<p>
         1251  +<a href="#_local"><strong><code>local</code></strong></a> procs now push existing commands and <a href="#_upcall"><strong><code>upcall</code></strong></a> can call them
         1252  +</p>
         1253  +</li>
         1254  +<li>
         1255  +<p>
         1256  +Add <a href="#_loop"><strong><code>loop</code></strong></a> command (TclX compatible)
         1257  +</p>
         1258  +</li>
         1259  +<li>
         1260  +<p>
         1261  +Add <a href="#_aio"><strong><code>aio</code></strong></a> <code>buffering</code> command
         1262  +</p>
         1263  +</li>
         1264  +<li>
         1265  +<p>
         1266  +<a href="#_info"><strong><code>info</code></strong></a> <code>complete</code> can now return the missing character
         1267  +</p>
         1268  +</li>
         1269  +<li>
         1270  +<p>
         1271  +<a href="#_binary"><strong><code>binary</code></strong></a> <code>format</code> and <a href="#_binary"><strong><code>binary</code></strong></a> <code>scan</code> are now (optionally) supported
         1272  +</p>
         1273  +</li>
         1274  +<li>
         1275  +<p>
         1276  +Add <a href="#_string"><strong><code>string</code></strong></a> <code>byterange</code>
         1277  +</p>
         1278  +</li>
         1279  +<li>
         1280  +<p>
         1281  +Built-in regexp now support non-greedy repetition (*?, +?, ??)
         1282  +</p>
         1283  +</li>
         1284  +</ol></div>
         1285  +</div>
         1286  +</div>
         1287  +</div>
         1288  +<div class="sect1">
         1289  +<h2 id="_tcl_introduction">TCL INTRODUCTION</h2>
         1290  +<div class="sectionbody">
         1291  +<div class="paragraph"><p>Tcl stands for <em>tool command language</em> and is pronounced
         1292  +<em><a href="http://www.oxforddictionaries.com/definition/american_english/tickle">tickle</a></em>.
         1293  +It is actually two things: a language and a library.</p></div>
         1294  +<div class="paragraph"><p>First, Tcl is a simple textual language, intended primarily for
         1295  +issuing commands to interactive programs such as text editors,
         1296  +debuggers, illustrators, and shells.  It has a simple syntax and is also
         1297  +programmable, so Tcl users can write command procedures to provide more
         1298  +powerful commands than those in the built-in set.</p></div>
         1299  +<div class="paragraph"><p>Second, Tcl is a library package that can be embedded in application
         1300  +programs.  The Tcl library consists of a parser for the Tcl language,
         1301  +routines to implement the Tcl built-in commands, and procedures that
         1302  +allow each application to extend Tcl with additional commands specific
         1303  +to that application.  The application program generates Tcl commands and
         1304  +passes them to the Tcl parser for execution.  Commands may be generated
         1305  +by reading characters from an input source, or by associating command
         1306  +strings with elements of the application&#8217;s user interface, such as menu
         1307  +entries, buttons, or keystrokes.</p></div>
         1308  +<div class="paragraph"><p>When the Tcl library receives commands it parses them into component
         1309  +fields and executes built-in commands directly.  For commands implemented
         1310  +by the application, Tcl calls back to the application to execute the
         1311  +commands.  In many cases commands will invoke recursive invocations of the
         1312  +Tcl interpreter by passing in additional strings to execute (procedures,
         1313  +looping commands, and conditional commands all work in this way).</p></div>
         1314  +<div class="paragraph"><p>An application program gains three advantages by using Tcl for its command
         1315  +language.  First, Tcl provides a standard syntax:  once users know Tcl,
         1316  +they will be able to issue commands easily to any Tcl-based application.
         1317  +Second, Tcl provides programmability.  All a Tcl application needs
         1318  +to do is to implement a few application-specific low-level commands.
         1319  +Tcl provides many utility commands plus a general programming interface
         1320  +for building up complex command procedures.  By using Tcl, applications
         1321  +need not re-implement these features.</p></div>
         1322  +<div class="paragraph"><p>Third, Tcl can be used as a common language for communicating between
         1323  +applications.  Inter-application communication is not built into the
         1324  +Tcl core described here, but various add-on libraries, such as the Tk
         1325  +toolkit, allow applications to issue commands to each other.  This makes
         1326  +it possible for applications to work together in much more powerful ways
         1327  +than was previously possible.</p></div>
         1328  +<div class="paragraph"><p>Fourth, Jim Tcl includes a command processor, <code>jimsh</code>, which can be
         1329  +used to run standalone Tcl scripts, or to run Tcl commands interactively.</p></div>
         1330  +<div class="paragraph"><p>This manual page focuses primarily on the Tcl language.  It describes
         1331  +the language syntax and the built-in commands that will be available
         1332  +in any application based on Tcl.  The individual library procedures are
         1333  +described in more detail in separate manual pages, one per procedure.</p></div>
         1334  +</div>
         1335  +</div>
         1336  +<div class="sect1">
         1337  +<h2 id="_jimsh_command_interpreter">JIMSH COMMAND INTERPRETER</h2>
         1338  +<div class="sectionbody">
         1339  +<div class="paragraph"><p>A simple, but powerful command processor, <code>jimsh</code>, is part of Jim Tcl.
         1340  +It may be invoked in interactive mode as:</p></div>
         1341  +<div class="literalblock">
         1342  +<div class="content">
         1343  +<pre><code>jimsh</code></pre>
         1344  +</div></div>
         1345  +<div class="paragraph"><p>or to process the Tcl script in a file with:</p></div>
         1346  +<div class="literalblock">
         1347  +<div class="content">
         1348  +<pre><code>jimsh filename</code></pre>
         1349  +</div></div>
         1350  +<div class="paragraph"><p>or to process the Tcl script from standard input:</p></div>
         1351  +<div class="literalblock">
         1352  +<div class="content">
         1353  +<pre><code>jimsh -</code></pre>
         1354  +</div></div>
         1355  +<div class="paragraph"><p>It may also be invoked to execute an immediate script with:</p></div>
         1356  +<div class="literalblock">
         1357  +<div class="content">
         1358  +<pre><code>jimsh -e "script"</code></pre>
         1359  +</div></div>
         1360  +<div class="sect2">
         1361  +<h3 id="_interactive_mode">Interactive Mode</h3>
         1362  +<div class="paragraph"><p>Interactive mode reads Tcl commands from standard input, evaluates
         1363  +those commands and prints the results.</p></div>
         1364  +<div class="literalblock">
         1365  +<div class="content">
         1366  +<pre><code>$ jimsh
         1367  +Welcome to Jim version 0.73, Copyright (c) 2005-8 Salvatore Sanfilippo
         1368  +. info version
         1369  +0.73
         1370  +. lsort [info commands p*]
         1371  +package parray pid popen proc puts pwd
         1372  +. foreach i {a b c} {
         1373  +{&gt; puts $i
         1374  +{&gt; }
         1375  +a
         1376  +b
         1377  +c
         1378  +. bad
         1379  +invalid command name "bad"
         1380  +[error] . exit
         1381  +$</code></pre>
         1382  +</div></div>
         1383  +<div class="paragraph"><p>If <code>jimsh</code> is configured with line editing (it is by default) and a VT-100-compatible
         1384  +terminal is detected, Emacs-style line editing commands are available, including:
         1385  +arrow keys, <code>^W</code> to erase a word, <code>^U</code> to erase the line, <code>^R</code> for reverse incremental search
         1386  +in history. Additionally, the <code>h</code> command may be used to display the command history.</p></div>
         1387  +<div class="paragraph"><p>Command line history is automatically saved and loaded from <code>~/.jim_history</code></p></div>
         1388  +<div class="paragraph"><p>In interactive mode, <code>jimsh</code> automatically runs the script <code>~/.jimrc</code> at startup
         1389  +if it exists.</p></div>
         1390  +</div>
         1391  +</div>
         1392  +</div>
         1393  +<div class="sect1">
         1394  +<h2 id="_interpreters">INTERPRETERS</h2>
         1395  +<div class="sectionbody">
         1396  +<div class="paragraph"><p>The central data structure in Tcl is an interpreter (C type <em>Jim_Interp</em>).
         1397  +An interpreter consists of a set of command bindings, a set of variable
         1398  +values, and a few other miscellaneous pieces of state.  Each Tcl command
         1399  +is interpreted in the context of a particular interpreter.</p></div>
         1400  +<div class="paragraph"><p>Some Tcl-based applications will maintain multiple interpreters
         1401  +simultaneously, each associated with a different widget or portion of
         1402  +the application.  Interpreters are relatively lightweight structures.
         1403  +They can be created and deleted quickly, so application programmers should
         1404  +feel free to use multiple interpreters if that simplifies the application.</p></div>
         1405  +</div>
         1406  +</div>
         1407  +<div class="sect1">
         1408  +<h2 id="_data_types">DATA TYPES</h2>
         1409  +<div class="sectionbody">
         1410  +<div class="paragraph"><p>Tcl supports only one type of data:  strings.  All commands, all arguments
         1411  +to commands, all command results, and all variable values are strings.</p></div>
         1412  +<div class="paragraph"><p>Where commands require numeric arguments or return numeric results,
         1413  +the arguments and results are passed as strings.  Many commands expect
         1414  +their string arguments to have certain formats, but this interpretation
         1415  +is up to the individual commands.  For example, arguments often contain
         1416  +Tcl command strings, which may get executed as part of the commands.
         1417  +The easiest way to understand the Tcl interpreter is to remember that
         1418  +everything is just an operation on a string.  In many cases Tcl constructs
         1419  +will look similar to more structured constructs from other languages.
         1420  +However, the Tcl constructs are not structured at all; they are just
         1421  +strings of characters, and this gives them a different behaviour than
         1422  +the structures they may look like.</p></div>
         1423  +<div class="paragraph"><p>Although the exact interpretation of a Tcl string depends on who is doing
         1424  +the interpretation, there are three common forms that strings take:
         1425  +commands, expressions, and lists.  The major sections below discuss
         1426  +these three forms in more detail.</p></div>
         1427  +</div>
         1428  +</div>
         1429  +<div class="sect1">
         1430  +<h2 id="_basic_command_syntax">BASIC COMMAND SYNTAX</h2>
         1431  +<div class="sectionbody">
         1432  +<div class="paragraph"><p>The Tcl language has syntactic similarities to both the Unix shells
         1433  +and Lisp.  However, the interpretation of commands is different
         1434  +in Tcl than in either of those other two systems.
         1435  +A Tcl command string consists of one or more commands separated
         1436  +by newline characters or semi-colons.
         1437  +Each command consists of a collection of fields separated by
         1438  +white space (spaces or tabs).
         1439  +The first field must be the name of a command, and the
         1440  +additional fields, if any, are arguments that will be passed to
         1441  +that command.  For example, the command:</p></div>
         1442  +<div class="literalblock">
         1443  +<div class="content">
         1444  +<pre><code>set a 22</code></pre>
         1445  +</div></div>
         1446  +<div class="paragraph"><p>has three fields:  the first, <a href="#_set"><strong><code>set</code></strong></a>, is the name of a Tcl command, and
         1447  +the last two, <em>a</em> and <em>22</em>, will be passed as arguments to
         1448  +the <a href="#_set"><strong><code>set</code></strong></a> command.  The command name may refer either to a built-in
         1449  +Tcl command, an application-specific command bound in with the library
         1450  +procedure <em>Jim_CreateCommand</em>, or a command procedure defined with the
         1451  +<a href="#_proc"><strong><code>proc</code></strong></a> built-in command.</p></div>
         1452  +<div class="paragraph"><p>Arguments are passed literally as text strings.  Individual commands may
         1453  +interpret those strings in any fashion they wish.  The <a href="#_set"><strong><code>set</code></strong></a> command,
         1454  +for example, will treat its first argument as the name of a variable
         1455  +and its second argument as a string value to assign to that variable.
         1456  +For other commands arguments may be interpreted as integers, lists,
         1457  +file names, or Tcl commands.</p></div>
         1458  +<div class="paragraph"><p>Command names should normally be typed completely (e.g. no abbreviations).
         1459  +However, if the Tcl interpreter cannot locate a command it invokes a
         1460  +special command named <a href="#_unknown"><strong><code>unknown</code></strong></a> which attempts to find or create the
         1461  +command.</p></div>
         1462  +<div class="paragraph"><p>For example, at many sites <a href="#_unknown"><strong><code>unknown</code></strong></a> will search through library
         1463  +directories for the desired command and create it as a Tcl procedure if
         1464  +it is found.  The <a href="#_unknown"><strong><code>unknown</code></strong></a> command often provides automatic completion
         1465  +of abbreviated commands, but usually only for commands that were typed
         1466  +interactively.</p></div>
         1467  +<div class="paragraph"><p>It&#8217;s probably a bad idea to use abbreviations in command scripts and
         1468  +other forms that will be re-used over time:  changes to the command set
         1469  +may cause abbreviations to become ambiguous, resulting in scripts that
         1470  +no longer work.</p></div>
         1471  +</div>
         1472  +</div>
         1473  +<div class="sect1">
         1474  +<h2 id="_comments">COMMENTS</h2>
         1475  +<div class="sectionbody">
         1476  +<div class="paragraph"><p>If the first non-blank character in a command is <code>#</code>, then everything
         1477  +from the <code>#</code> up through the next newline character is treated as
         1478  +a comment and ignored.  When comments are embedded inside nested
         1479  +commands (e.g. fields enclosed in braces) they must have properly-matched
         1480  +braces (this is necessary because when Tcl parses the top-level command
         1481  +it doesn&#8217;t yet know that the nested field will be used as a command so
         1482  +it cannot process the nested comment character as a comment).</p></div>
         1483  +</div>
         1484  +</div>
         1485  +<div class="sect1">
         1486  +<h2 id="_grouping_arguments_with_double_quotes">GROUPING ARGUMENTS WITH DOUBLE-QUOTES</h2>
         1487  +<div class="sectionbody">
         1488  +<div class="paragraph"><p>Normally each argument field ends at the next white space, but
         1489  +double-quotes may be used to create arguments with embedded space.</p></div>
         1490  +<div class="paragraph"><p>If an argument field begins with a double-quote, then the argument isn&#8217;t
         1491  +terminated by white space (including newlines) or a semi-colon (see below
         1492  +for information on semi-colons); instead it ends at the next double-quote
         1493  +character.  The double-quotes are not included in the resulting argument.
         1494  +For example, the command</p></div>
         1495  +<div class="literalblock">
         1496  +<div class="content">
         1497  +<pre><code>set a "This is a single argument"</code></pre>
         1498  +</div></div>
         1499  +<div class="paragraph"><p>will pass two arguments to <a href="#_set"><strong><code>set</code></strong></a>:  <em>a</em> and <em>This is a single argument</em>.</p></div>
         1500  +<div class="paragraph"><p>Within double-quotes, command substitutions, variable substitutions,
         1501  +and backslash substitutions still occur, as described below.  If the
         1502  +first character of a command field is not a quote, then quotes receive
         1503  +no special interpretation in the parsing of that field.</p></div>
         1504  +</div>
         1505  +</div>
         1506  +<div class="sect1">
         1507  +<h2 id="_grouping_arguments_with_braces">GROUPING ARGUMENTS WITH BRACES</h2>
         1508  +<div class="sectionbody">
         1509  +<div class="paragraph"><p>Curly braces may also be used for grouping arguments.  They are similar
         1510  +to quotes except for two differences.  First, they nest; this makes them
         1511  +easier to use for complicated arguments like nested Tcl command strings.
         1512  +Second, the substitutions described below for commands, variables, and
         1513  +backslashes do <strong>not</strong> occur in arguments enclosed in braces, so braces
         1514  +can be used to prevent substitutions where they are undesirable.</p></div>
         1515  +<div class="paragraph"><p>If an argument field begins with a left brace, then the argument ends
         1516  +at the matching right brace.  Tcl will strip off the outermost layer
         1517  +of braces and pass the information between the braces to the command
         1518  +without any further modification.  For example, in the command</p></div>
         1519  +<div class="literalblock">
         1520  +<div class="content">
         1521  +<pre><code>set a {xyz a {b c d}}</code></pre>
         1522  +</div></div>
         1523  +<div class="paragraph"><p>the <a href="#_set"><strong><code>set</code></strong></a> command will receive two arguments: <em>a</em>
         1524  +and <em>xyz a {b c d}</em>.</p></div>
         1525  +<div class="paragraph"><p>When braces or quotes are in effect, the matching brace or quote need
         1526  +not be on the same line as the starting quote or brace; in this case
         1527  +the newline will be included in the argument field along with any other
         1528  +characters up to the matching brace or quote.  For example, the <a href="#_eval"><strong><code>eval</code></strong></a>
         1529  +command takes one argument, which is a command string; <a href="#_eval"><strong><code>eval</code></strong></a> invokes
         1530  +the Tcl interpreter to execute the command string.  The command</p></div>
         1531  +<div class="literalblock">
         1532  +<div class="content">
         1533  +<pre><code>eval {
         1534  +  set a 22
         1535  +  set b 33
         1536  +}</code></pre>
         1537  +</div></div>
         1538  +<div class="paragraph"><p>will assign the value <em>22</em> to <em>a</em> and <em>33</em> to <em>b</em>.</p></div>
         1539  +<div class="paragraph"><p>If the first character of a command field is not a left
         1540  +brace, then neither left nor right
         1541  +braces in the field will be treated specially (except as part of
         1542  +variable substitution; see below).</p></div>
         1543  +</div>
         1544  +</div>
         1545  +<div class="sect1">
         1546  +<h2 id="_command_substitution_with_brackets">COMMAND SUBSTITUTION WITH BRACKETS</h2>
         1547  +<div class="sectionbody">
         1548  +<div class="paragraph"><p>If an open bracket occurs in a field of a command, then command
         1549  +substitution occurs (except for fields enclosed in braces).  All of the
         1550  +text up to the matching close bracket is treated as a Tcl command and
         1551  +executed immediately.  Then the result of that command is substituted
         1552  +for the bracketed text.  For example, consider the command</p></div>
         1553  +<div class="literalblock">
         1554  +<div class="content">
         1555  +<pre><code>set a [set b]</code></pre>
         1556  +</div></div>
         1557  +<div class="paragraph"><p>When the <a href="#_set"><strong><code>set</code></strong></a> command has only a single argument, it is the name of a
         1558  +variable and <a href="#_set"><strong><code>set</code></strong></a> returns the contents of that variable.  In this case,
         1559  +if variable <em>b</em> has the value <em>foo</em>, then the command above is equivalent
         1560  +to the command</p></div>
         1561  +<div class="literalblock">
         1562  +<div class="content">
         1563  +<pre><code>set a foo</code></pre>
         1564  +</div></div>
         1565  +<div class="paragraph"><p>Brackets can be used in more complex ways.  For example, if the variable
         1566  +<em>b</em> has the value <em>foo</em> and the variable <em>c</em> has the value <em>gorp</em>,
         1567  +then the command</p></div>
         1568  +<div class="literalblock">
         1569  +<div class="content">
         1570  +<pre><code>set a xyz[set b].[set c]</code></pre>
         1571  +</div></div>
         1572  +<div class="paragraph"><p>is equivalent to the command</p></div>
         1573  +<div class="literalblock">
         1574  +<div class="content">
         1575  +<pre><code>set a xyzfoo.gorp</code></pre>
         1576  +</div></div>
         1577  +<div class="paragraph"><p>A bracketed command may contain multiple commands separated by newlines
         1578  +or semi-colons in the usual fashion.  In this case the value of the last
         1579  +command is used for substitution.  For example, the command</p></div>
         1580  +<div class="literalblock">
         1581  +<div class="content">
         1582  +<pre><code>set a x[set b 22
         1583  +expr $b+2]x</code></pre>
         1584  +</div></div>
         1585  +<div class="paragraph"><p>is equivalent to the command</p></div>
         1586  +<div class="literalblock">
         1587  +<div class="content">
         1588  +<pre><code>set a x24x</code></pre>
         1589  +</div></div>
         1590  +<div class="paragraph"><p>If a field is enclosed in braces then the brackets and the characters
         1591  +between them are not interpreted specially; they are passed through to
         1592  +the argument verbatim.</p></div>
         1593  +</div>
         1594  +</div>
         1595  +<div class="sect1">
         1596  +<h2 id="_variable_substitution_with">VARIABLE SUBSTITUTION WITH $</h2>
         1597  +<div class="sectionbody">
         1598  +<div class="paragraph"><p>The dollar sign (<code>$</code>) may be used as a special shorthand form for
         1599  +substituting variable values.  If <code>$</code> appears in an argument that isn&#8217;t
         1600  +enclosed in braces then variable substitution will occur.  The characters
         1601  +after the <code>$</code>, up to the first character that isn&#8217;t a number, letter,
         1602  +or underscore, are taken as a variable name and the string value of that
         1603  +variable is substituted for the name.</p></div>
         1604  +<div class="paragraph"><p>For example, if variable <em>foo</em> has the value <em>test</em>, then the command</p></div>
         1605  +<div class="literalblock">
         1606  +<div class="content">
         1607  +<pre><code>set a $foo.c</code></pre>
         1608  +</div></div>
         1609  +<div class="paragraph"><p>is equivalent to the command</p></div>
         1610  +<div class="literalblock">
         1611  +<div class="content">
         1612  +<pre><code>set a test.c</code></pre>
         1613  +</div></div>
         1614  +<div class="paragraph"><p>There are two special forms for variable substitution.  If the next
         1615  +character after the name of the variable is an open parenthesis, then
         1616  +the variable is assumed to be an array name, and all of the characters
         1617  +between the open parenthesis and the next close parenthesis are taken as
         1618  +an index into the array.  Command substitutions and variable substitutions
         1619  +are performed on the information between the parentheses before it is
         1620  +used as an index.</p></div>
         1621  +<div class="paragraph"><p>For example, if the variable <em>x</em> is an array with one element named
         1622  +<em>first</em> and value <em>87</em> and another element named <em>14</em> and value <em>more</em>,
         1623  +then the command</p></div>
         1624  +<div class="literalblock">
         1625  +<div class="content">
         1626  +<pre><code>set a xyz$x(first)zyx</code></pre>
         1627  +</div></div>
         1628  +<div class="paragraph"><p>is equivalent to the command</p></div>
         1629  +<div class="literalblock">
         1630  +<div class="content">
         1631  +<pre><code>set a xyz87zyx</code></pre>
         1632  +</div></div>
         1633  +<div class="paragraph"><p>If the variable <em>index</em> has the value <em>14</em>, then the command</p></div>
         1634  +<div class="literalblock">
         1635  +<div class="content">
         1636  +<pre><code>set a xyz$x($index)zyx</code></pre>
         1637  +</div></div>
         1638  +<div class="paragraph"><p>is equivalent to the command</p></div>
         1639  +<div class="literalblock">
         1640  +<div class="content">
         1641  +<pre><code>set a xyzmorezyx</code></pre>
         1642  +</div></div>
         1643  +<div class="paragraph"><p>For more information on arrays, see VARIABLES AND ARRAYS below.</p></div>
         1644  +<div class="paragraph"><p>The second special form for variables occurs when the dollar sign is
         1645  +followed by an open curly brace.  In this case the variable name consists
         1646  +of all the characters up to the next curly brace.</p></div>
         1647  +<div class="paragraph"><p>Array references are not possible in this form:  the name between braces
         1648  +is assumed to refer to a scalar variable.  For example, if variable
         1649  +<em>foo</em> has the value <em>test</em>, then the command</p></div>
         1650  +<div class="literalblock">
         1651  +<div class="content">
         1652  +<pre><code>set a abc${foo}bar</code></pre>
         1653  +</div></div>
         1654  +<div class="paragraph"><p>is equivalent to the command</p></div>
         1655  +<div class="literalblock">
         1656  +<div class="content">
         1657  +<pre><code>set a abctestbar</code></pre>
         1658  +</div></div>
         1659  +<div class="paragraph"><p>Variable substitution does not occur in arguments that are enclosed in
         1660  +braces:  the dollar sign and variable name are passed through to the
         1661  +argument verbatim.</p></div>
         1662  +<div class="paragraph"><p>The dollar sign abbreviation is simply a shorthand form.  <code>$a</code> is
         1663  +completely equivalent to <code>[set a]</code>; it is provided as a convenience
         1664  +to reduce typing.</p></div>
         1665  +</div>
         1666  +</div>
         1667  +<div class="sect1">
         1668  +<h2 id="_separating_commands_with_semi_colons">SEPARATING COMMANDS WITH SEMI-COLONS</h2>
         1669  +<div class="sectionbody">
         1670  +<div class="paragraph"><p>Normally, each command occupies one line (the command is terminated by a
         1671  +newline character).  However, semi-colon (<code>;</code>) is treated as a command
         1672  +separator character; multiple commands may be placed on one line by
         1673  +separating them with a semi-colon.  Semi-colons are not treated as
         1674  +command separators if they appear within curly braces or double-quotes.</p></div>
         1675  +</div>
         1676  +</div>
         1677  +<div class="sect1">
         1678  +<h2 id="_backslash_substitution">BACKSLASH SUBSTITUTION</h2>
         1679  +<div class="sectionbody">
         1680  +<div class="paragraph"><p>Backslashes may be used to insert non-printing characters into command
         1681  +fields and also to insert special characters like braces and brackets
         1682  +into fields without them being interpreted specially as described above.</p></div>
         1683  +<div class="paragraph"><p>The backslash sequences understood by the Tcl interpreter are
         1684  +listed below.  In each case, the backslash
         1685  +sequence is replaced by the given character:</p></div>
         1686  +<div class="dlist" id="BackslashSequences"><dl>
         1687  +<dt class="hdlist1">
         1688  +<code>\b</code>
         1689  +</dt>
         1690  +<dd>
         1691  +<p>
         1692  +    Backspace (0x8)
         1693  +</p>
         1694  +</dd>
         1695  +<dt class="hdlist1">
         1696  +<code>\f</code>
         1697  +</dt>
         1698  +<dd>
         1699  +<p>
         1700  +    Form feed (0xc)
         1701  +</p>
         1702  +</dd>
         1703  +<dt class="hdlist1">
         1704  +<code>\n</code>
         1705  +</dt>
         1706  +<dd>
         1707  +<p>
         1708  +    Newline (0xa)
         1709  +</p>
         1710  +</dd>
         1711  +<dt class="hdlist1">
         1712  +<code>\r</code>
         1713  +</dt>
         1714  +<dd>
         1715  +<p>
         1716  +    Carriage-return (0xd).
         1717  +</p>
         1718  +</dd>
         1719  +<dt class="hdlist1">
         1720  +<code>\t</code>
         1721  +</dt>
         1722  +<dd>
         1723  +<p>
         1724  +    Tab (0x9).
         1725  +</p>
         1726  +</dd>
         1727  +<dt class="hdlist1">
         1728  +<code>\v</code>
         1729  +</dt>
         1730  +<dd>
         1731  +<p>
         1732  +    Vertical tab (0xb).
         1733  +</p>
         1734  +</dd>
         1735  +<dt class="hdlist1">
         1736  +<code>\{</code>
         1737  +</dt>
         1738  +<dd>
         1739  +<p>
         1740  +    Left brace ({).
         1741  +</p>
         1742  +</dd>
         1743  +<dt class="hdlist1">
         1744  +<code>\}</code>
         1745  +</dt>
         1746  +<dd>
         1747  +<p>
         1748  +    Right brace (}).
         1749  +</p>
         1750  +</dd>
         1751  +<dt class="hdlist1">
         1752  +<code>\[</code>
         1753  +</dt>
         1754  +<dd>
         1755  +<p>
         1756  +    Open bracket ([).
         1757  +</p>
         1758  +</dd>
         1759  +<dt class="hdlist1">
         1760  +<code>\]</code>
         1761  +</dt>
         1762  +<dd>
         1763  +<p>
         1764  +    Close bracket (]).
         1765  +</p>
         1766  +</dd>
         1767  +<dt class="hdlist1">
         1768  +<code>\$</code>
         1769  +</dt>
         1770  +<dd>
         1771  +<p>
         1772  +    Dollar sign ($).
         1773  +</p>
         1774  +</dd>
         1775  +<dt class="hdlist1">
         1776  +<code>\&lt;space&gt;</code>
         1777  +</dt>
         1778  +<dd>
         1779  +<p>
         1780  +    Space ( ): doesn&#8217;t terminate argument.
         1781  +</p>
         1782  +</dd>
         1783  +<dt class="hdlist1">
         1784  +<code>\;</code>
         1785  +</dt>
         1786  +<dd>
         1787  +<p>
         1788  +    Semi-colon: doesn&#8217;t terminate command.
         1789  +</p>
         1790  +</dd>
         1791  +<dt class="hdlist1">
         1792  +<code>\"</code>
         1793  +</dt>
         1794  +<dd>
         1795  +<p>
         1796  +    Double-quote.
         1797  +</p>
         1798  +</dd>
         1799  +<dt class="hdlist1">
         1800  +<code>\&lt;newline&gt;</code>
         1801  +</dt>
         1802  +<dd>
         1803  +<p>
         1804  +    Nothing:  this joins two lines together
         1805  +    into a single line.  This backslash feature is unique in that
         1806  +    it will be applied even when the sequence occurs within braces.
         1807  +</p>
         1808  +</dd>
         1809  +<dt class="hdlist1">
         1810  +<code>\\</code>
         1811  +</dt>
         1812  +<dd>
         1813  +<p>
         1814  +    Backslash (<em>\</em>).
         1815  +</p>
         1816  +</dd>
         1817  +<dt class="hdlist1">
         1818  +<code>\ddd</code>
         1819  +</dt>
         1820  +<dd>
         1821  +<p>
         1822  +    The digits <code><em>ddd</em></code> (one, two, or three of them) give the octal value of
         1823  +    the character.  Note that Jim supports null characters in strings.
         1824  +</p>
         1825  +</dd>
         1826  +<dt class="hdlist1">
         1827  +<code>\unnnn</code>
         1828  +</dt>
         1829  +<dt class="hdlist1">
         1830  +<code>\u{nnn}</code>
         1831  +</dt>
         1832  +<dt class="hdlist1">
         1833  +<code>\Unnnnnnnn</code>
         1834  +</dt>
         1835  +<dd>
         1836  +<p>
         1837  +    The UTF-8 encoding of the unicode codepoint represented by the hex digits, <code><em>nnnn</em></code>, is inserted.
         1838  +    The <em>u</em> form allows for one to four hex digits.
         1839  +    The <em>U</em> form allows for one to eight hex digits.
         1840  +    The <em>u{nnn}</em> form allows for one to eight hex digits, but makes it easier to insert
         1841  +    characters UTF-8 characters which are followed by a hex digit.
         1842  +</p>
         1843  +</dd>
         1844  +</dl></div>
         1845  +<div class="paragraph"><p>For example, in the command</p></div>
         1846  +<div class="literalblock">
         1847  +<div class="content">
         1848  +<pre><code>set a \{x\[\ yz\141</code></pre>
         1849  +</div></div>
         1850  +<div class="paragraph"><p>the second argument to <a href="#_set"><strong><code>set</code></strong></a> will be <code>{x[ yza</code>.</p></div>
         1851  +<div class="paragraph"><p>If a backslash is followed by something other than one of the options
         1852  +described above, then the backslash is transmitted to the argument
         1853  +field without any special processing, and the Tcl scanner continues
         1854  +normal processing with the next character.  For example, in the
         1855  +command</p></div>
         1856  +<div class="literalblock">
         1857  +<div class="content">
         1858  +<pre><code>set \*a \\\{foo</code></pre>
         1859  +</div></div>
         1860  +<div class="paragraph"><p>The first argument to <a href="#_set"><strong><code>set</code></strong></a> will be <code>\*a</code> and the second
         1861  +argument will be <code>\{foo</code>.</p></div>
         1862  +<div class="paragraph"><p>If an argument is enclosed in braces, then backslash sequences inside
         1863  +the argument are parsed but no substitution occurs (except for
         1864  +backslash-newline):  the backslash
         1865  +sequence is passed through to the argument as is, without making
         1866  +any special interpretation of the characters in the backslash sequence.
         1867  +In particular, backslashed braces are not counted in locating the
         1868  +matching right brace that terminates the argument.
         1869  +For example, in the
         1870  +command</p></div>
         1871  +<div class="literalblock">
         1872  +<div class="content">
         1873  +<pre><code>set a {\{abc}</code></pre>
         1874  +</div></div>
         1875  +<div class="paragraph"><p>the second argument to <a href="#_set"><strong><code>set</code></strong></a> will be <code>\{abc</code>.</p></div>
         1876  +<div class="paragraph"><p>This backslash mechanism is not sufficient to generate absolutely
         1877  +any argument structure; it only covers the
         1878  +most common cases.  To produce particularly complicated arguments
         1879  +it is probably easiest to use the <a href="#_format"><strong><code>format</code></strong></a> command along with
         1880  +command substitution.</p></div>
         1881  +</div>
         1882  +</div>
         1883  +<div class="sect1">
         1884  +<h2 id="_string_and_list_index_specifications">STRING AND LIST INDEX SPECIFICATIONS</h2>
         1885  +<div class="sectionbody">
         1886  +<div class="paragraph"><p>Many string and list commands take one or more <em>index</em> parameters which
         1887  +specify a position in the string relative to the start or end of the string/list.</p></div>
         1888  +<div class="paragraph"><p>The index may be one of the following forms:</p></div>
         1889  +<div class="dlist"><dl>
         1890  +<dt class="hdlist1">
         1891  +<code>integer</code>
         1892  +</dt>
         1893  +<dd>
         1894  +<p>
         1895  +    A simple integer, where <em>0</em> refers to the first element of the string
         1896  +    or list.
         1897  +</p>
         1898  +</dd>
         1899  +<dt class="hdlist1">
         1900  +<code>integer+integer</code> or
         1901  +</dt>
         1902  +<dt class="hdlist1">
         1903  +<code>integer-integer</code>
         1904  +</dt>
         1905  +<dd>
         1906  +<p>
         1907  +    The sum or difference of the two integers. e.g. <code>2+3</code> refers to the 5th element.
         1908  +    This is useful when used with (e.g.) <code>$i+1</code> rather than the more verbose
         1909  +    <code>[expr {$i+1}]</code>
         1910  +</p>
         1911  +</dd>
         1912  +<dt class="hdlist1">
         1913  +<code>end</code>
         1914  +</dt>
         1915  +<dd>
         1916  +<p>
         1917  +    The last element of the string or list.
         1918  +</p>
         1919  +</dd>
         1920  +<dt class="hdlist1">
         1921  +<code>end-integer</code>
         1922  +</dt>
         1923  +<dd>
         1924  +<p>
         1925  +    The <em>nth-from-last</em> element of the string or list.
         1926  +</p>
         1927  +</dd>
         1928  +</dl></div>
         1929  +</div>
         1930  +</div>
         1931  +<div class="sect1">
         1932  +<h2 id="_command_summary">COMMAND SUMMARY</h2>
         1933  +<div class="sectionbody">
         1934  +<div class="olist arabic"><ol class="arabic">
         1935  +<li>
         1936  +<p>
         1937  +A command is just a string.
         1938  +</p>
         1939  +</li>
         1940  +<li>
         1941  +<p>
         1942  +Within a string commands are separated by newlines or semi-colons
         1943  +   (unless the newline or semi-colon is within braces or brackets
         1944  +   or is backslashed).
         1945  +</p>
         1946  +</li>
         1947  +<li>
         1948  +<p>
         1949  +A command consists of fields.  The first field is the name of the command.
         1950  +   The other fields are strings that are passed to that command as arguments.
         1951  +</p>
         1952  +</li>
         1953  +<li>
         1954  +<p>
         1955  +Fields are normally separated by white space.
         1956  +</p>
         1957  +</li>
         1958  +<li>
         1959  +<p>
         1960  +Double-quotes allow white space and semi-colons to appear within
         1961  +   a single argument.
         1962  +   Command substitution, variable substitution, and backslash substitution
         1963  +   still occur inside quotes.
         1964  +</p>
         1965  +</li>
         1966  +<li>
         1967  +<p>
         1968  +Braces defer interpretation of special characters.
         1969  +   If a field begins with a left brace, then it consists of everything
         1970  +   between the left brace and the matching right brace. The
         1971  +   braces themselves are not included in the argument.
         1972  +   No further processing is done on the information between the braces
         1973  +   except that backslash-newline sequences are eliminated.
         1974  +</p>
         1975  +</li>
         1976  +<li>
         1977  +<p>
         1978  +If a field doesn&#8217;t begin with a brace then backslash,
         1979  +   variable, and command substitution are done on the field.  Only a
         1980  +   single level of processing is done:  the results of one substitution
         1981  +   are not scanned again for further substitutions or any other
         1982  +   special treatment.  Substitution can
         1983  +   occur on any field of a command, including the command name
         1984  +   as well as the arguments.
         1985  +</p>
         1986  +</li>
         1987  +<li>
         1988  +<p>
         1989  +If the first non-blank character of a command is a <code>#</code>, everything
         1990  +   from the <code>#</code> up through the next newline is treated as a comment
         1991  +   and ignored.
         1992  +</p>
         1993  +</li>
         1994  +</ol></div>
         1995  +</div>
         1996  +</div>
         1997  +<div class="sect1">
         1998  +<h2 id="_expressions">EXPRESSIONS</h2>
         1999  +<div class="sectionbody">
         2000  +<div class="paragraph"><p>The second major interpretation applied to strings in Tcl is
         2001  +as expressions.  Several commands, such as <a href="#_expr"><strong><code>expr</code></strong></a>, <a href="#_for"><strong><code>for</code></strong></a>,
         2002  +and <a href="#_if"><strong><code>if</code></strong></a>, treat one or more of their arguments as expressions
         2003  +and call the Tcl expression processors (<em>Jim_ExprLong</em>,
         2004  +<em>Jim_ExprBoolean</em>, etc.) to evaluate them.</p></div>
         2005  +<div class="paragraph"><p>The operators permitted in Tcl expressions are a subset of
         2006  +the operators permitted in C expressions, and they have the
         2007  +same meaning and precedence as the corresponding C operators.
         2008  +Expressions almost always yield numeric results
         2009  +(integer or floating-point values).
         2010  +For example, the expression</p></div>
         2011  +<div class="literalblock">
         2012  +<div class="content">
         2013  +<pre><code>8.2 + 6</code></pre>
         2014  +</div></div>
         2015  +<div class="paragraph"><p>evaluates to 14.2.</p></div>
         2016  +<div class="paragraph"><p>Tcl expressions differ from C expressions in the way that
         2017  +operands are specified, and in that Tcl expressions support
         2018  +non-numeric operands and string comparisons.</p></div>
         2019  +<div class="paragraph"><p>A Tcl expression consists of a combination of operands, operators,
         2020  +and parentheses.</p></div>
         2021  +<div class="paragraph"><p>White space may be used between the operands and operators and
         2022  +parentheses; it is ignored by the expression processor.
         2023  +Where possible, operands are interpreted as integer values.</p></div>
         2024  +<div class="paragraph"><p>Integer values may be specified in decimal (the normal case) or in
         2025  +hexadecimal (if the first two characters of the operand are <em>0x</em>).
         2026  +Note that Jim Tcl does <strong>not</strong> treat numbers with leading zeros as octal.</p></div>
         2027  +<div class="paragraph"><p>If an operand does not have one of the integer formats given
         2028  +above, then it is treated as a floating-point number if that is
         2029  +possible.  Floating-point numbers may be specified in any of the
         2030  +ways accepted by an ANSI-compliant C compiler (except that the
         2031  +<em>f</em>, <em>F</em>, <em>l</em>, and <em>L</em> suffixes will not be permitted in
         2032  +most installations).  For example, all of the
         2033  +following are valid floating-point numbers:  2.1, 3., 6e4, 7.91e+16.</p></div>
         2034  +<div class="paragraph"><p>If no numeric interpretation is possible, then an operand is left
         2035  +as a string (and only a limited set of operators may be applied to
         2036  +it).</p></div>
         2037  +<div class="paragraph"><p>String constants representing boolean constants
         2038  +(<code><em>0</em></code>, <code><em>1</em></code>, <code><em>false</em></code>, <code><em>off</em></code>, <code><em>no</em></code>, <code><em>true</em></code>, <code><em>on</em></code>, <code><em>yes</em></code>)
         2039  +are also recognized and can be used in logical operations.</p></div>
         2040  +<div class="olist arabic"><ol class="arabic">
         2041  +<li>
         2042  +<p>
         2043  +Operands may be specified in any of the following ways:
         2044  +</p>
         2045  +</li>
         2046  +<li>
         2047  +<p>
         2048  +As a numeric value, either integer or floating-point.
         2049  +</p>
         2050  +</li>
         2051  +<li>
         2052  +<p>
         2053  +As one of valid boolean constants
         2054  +</p>
         2055  +</li>
         2056  +<li>
         2057  +<p>
         2058  +As a Tcl variable, using standard <em>$</em> notation.
         2059  +The variable&#8217;s value will be used as the operand.
         2060  +</p>
         2061  +</li>
         2062  +<li>
         2063  +<p>
         2064  +As a string enclosed in double-quotes.
         2065  +The expression parser will perform backslash, variable, and
         2066  +command substitutions on the information between the quotes,
         2067  +and use the resulting value as the operand
         2068  +</p>
         2069  +</li>
         2070  +<li>
         2071  +<p>
         2072  +As a string enclosed in braces.
         2073  +The characters between the open brace and matching close brace
         2074  +will be used as the operand without any substitutions.
         2075  +</p>
         2076  +</li>
         2077  +<li>
         2078  +<p>
         2079  +As a Tcl command enclosed in brackets.
         2080  +The command will be executed and its result will be used as
         2081  +the operand.
         2082  +</p>
         2083  +</li>
         2084  +</ol></div>
         2085  +<div class="paragraph"><p>Where substitutions occur above (e.g. inside quoted strings), they
         2086  +are performed by the expression processor.
         2087  +However, an additional layer of substitution may already have
         2088  +been performed by the command parser before the expression
         2089  +processor was called.</p></div>
         2090  +<div class="paragraph"><p>As discussed below, it is usually best to enclose expressions
         2091  +in braces to prevent the command parser from performing substitutions
         2092  +on the contents.</p></div>
         2093  +<div class="paragraph"><p>For some examples of simple expressions, suppose the variable <em>a</em> has
         2094  +the value 3 and the variable <em>b</em> has the value 6.  Then the expression
         2095  +on the left side of each of the lines below will evaluate to the value
         2096  +on the right side of the line:</p></div>
         2097  +<div class="literalblock">
         2098  +<div class="content">
         2099  +<pre><code>$a + 3.1                6.1
         2100  +2 + "$a.$b"             5.6
         2101  +4*[llength "6 2"]       8
         2102  +{word one} &lt; "word $a"  0</code></pre>
         2103  +</div></div>
         2104  +<div class="paragraph"><p>The valid operators are listed below, grouped in decreasing order
         2105  +of precedence:</p></div>
         2106  +<div class="dlist" id="OperatorPrecedence"><dl>
         2107  +<dt class="hdlist1">
         2108  +<code>int() double() round() abs(), rand(), srand()</code>
         2109  +</dt>
         2110  +<dd>
         2111  +<p>
         2112  +    Unary functions (except rand() which takes no arguments)
         2113  +</p>
         2114  +<div class="ulist"><ul>
         2115  +<li>
         2116  +<p>
         2117  +<code><em>int()</em></code> converts the numeric argument to an integer by truncating down.
         2118  +</p>
         2119  +</li>
         2120  +<li>
         2121  +<p>
         2122  +<code><em>double()</em></code> converts the numeric argument to floating point.
         2123  +</p>
         2124  +</li>
         2125  +<li>
         2126  +<p>
         2127  +<code><em>round()</em></code> converts the numeric argument to the closest integer value.
         2128  +</p>
         2129  +</li>
         2130  +<li>
         2131  +<p>
         2132  +<code><em>abs()</em></code> takes the absolute value of the numeric argument.
         2133  +</p>
         2134  +</li>
         2135  +<li>
         2136  +<p>
         2137  +<code><em>rand()</em></code> returns a pseudo-random floating-point value in the range (0,1).
         2138  +</p>
         2139  +</li>
         2140  +<li>
         2141  +<p>
         2142  +<code><em>srand()</em></code> takes an integer argument to (re)seed the random number generator. Returns the first random number from that seed.
         2143  +</p>
         2144  +</li>
         2145  +</ul></div>
         2146  +</dd>
         2147  +<dt class="hdlist1">
         2148  +<code>sin() cos() tan() asin() acos() atan() sinh() cosh() tanh() ceil() floor() exp() log() log10() sqrt()</code>
         2149  +</dt>
         2150  +<dd>
         2151  +<p>
         2152  +    Unary math functions.
         2153  +    If Jim is compiled with math support, these functions are available.
         2154  +</p>
         2155  +</dd>
         2156  +<dt class="hdlist1">
         2157  +<code>- + ~ !</code>
         2158  +</dt>
         2159  +<dd>
         2160  +<p>
         2161  +    Unary minus, unary plus, bit-wise NOT, logical NOT.  None of these operands
         2162  +    may be applied to string operands, and bit-wise NOT may be
         2163  +    applied only to integers.
         2164  +</p>
         2165  +</dd>
         2166  +<dt class="hdlist1">
         2167  +<code>** pow(x,y)</code>
         2168  +</dt>
         2169  +<dd>
         2170  +<p>
         2171  +    Power. e.g. <em>x<sup>y</sup></em>. If Jim is compiled with math support, supports doubles and
         2172  +    integers. Otherwise supports integers only. (Note that the math-function form
         2173  +    has the same highest precedence)
         2174  +</p>
         2175  +</dd>
         2176  +<dt class="hdlist1">
         2177  +<code>* / %</code>
         2178  +</dt>
         2179  +<dd>
         2180  +<p>
         2181  +    Multiply, divide, remainder.  None of these operands may be
         2182  +    applied to string operands, and remainder may be applied only
         2183  +    to integers.
         2184  +</p>
         2185  +</dd>
         2186  +<dt class="hdlist1">
         2187  +<code>+ -</code>
         2188  +</dt>
         2189  +<dd>
         2190  +<p>
         2191  +    Add and subtract.  Valid for any numeric operands.
         2192  +</p>
         2193  +</dd>
         2194  +<dt class="hdlist1">
         2195  +<code>&lt;&lt;  &gt;&gt; &lt;&lt;&lt; &gt;&gt;&gt;</code>
         2196  +</dt>
         2197  +<dd>
         2198  +<p>
         2199  +    Left and right shift, left and right rotate.  Valid for integer operands only.
         2200  +</p>
         2201  +</dd>
         2202  +<dt class="hdlist1">
         2203  +<code>&lt;  &gt;  &lt;=  &gt;=</code>
         2204  +</dt>
         2205  +<dd>
         2206  +<p>
         2207  +    Boolean less, greater, less than or equal, and greater than or equal.
         2208  +    Each operator produces 1 if the condition is true, 0 otherwise.
         2209  +    These operators may be applied to strings as well as numeric operands,
         2210  +    in which case string comparison is used.
         2211  +</p>
         2212  +</dd>
         2213  +<dt class="hdlist1">
         2214  +<code>==  !=</code>
         2215  +</dt>
         2216  +<dd>
         2217  +<p>
         2218  +    Boolean equal and not equal.  Each operator produces a zero/one result.
         2219  +    Valid for all operand types. <strong>Note</strong> that values will be converted to integers
         2220  +    if possible, then floating point types, and finally strings will be compared.
         2221  +    It is recommended that <em>eq</em> and <em>ne</em> should be used for string comparison.
         2222  +</p>
         2223  +</dd>
         2224  +<dt class="hdlist1">
         2225  +<code>eq ne</code>
         2226  +</dt>
         2227  +<dd>
         2228  +<p>
         2229  +    String equal and not equal.  Uses the string value directly without
         2230  +    attempting to convert to a number first.
         2231  +</p>
         2232  +</dd>
         2233  +<dt class="hdlist1">
         2234  +<code>in ni</code>
         2235  +</dt>
         2236  +<dd>
         2237  +<p>
         2238  +    String in list and not in list. For <em>in</em>, result is 1 if the left operand (as a string)
         2239  +    is contained in the right operand (as a list), or 0 otherwise. The result for
         2240  +    <code>{$a ni $list}</code> is equivalent to <code>{!($a in $list)}</code>.
         2241  +</p>
         2242  +</dd>
         2243  +<dt class="hdlist1">
         2244  +<code>&amp;</code>
         2245  +</dt>
         2246  +<dd>
         2247  +<p>
         2248  +    Bit-wise AND.  Valid for integer operands only.
         2249  +</p>
         2250  +</dd>
         2251  +<dt class="hdlist1">
         2252  +<code>|</code>
         2253  +</dt>
         2254  +<dd>
         2255  +<p>
         2256  +    Bit-wise OR.  Valid for integer operands only.
         2257  +</p>
         2258  +</dd>
         2259  +<dt class="hdlist1">
         2260  +<code>^</code>
         2261  +</dt>
         2262  +<dd>
         2263  +<p>
         2264  +    Bit-wise exclusive OR.  Valid for integer operands only.
         2265  +</p>
         2266  +</dd>
         2267  +<dt class="hdlist1">
         2268  +<code>&amp;&amp;</code>
         2269  +</dt>
         2270  +<dd>
         2271  +<p>
         2272  +    Logical AND.  Produces a 1 result if both operands are non-zero, 0 otherwise.
         2273  +    Valid for numeric operands only (integers or floating-point).
         2274  +</p>
         2275  +</dd>
         2276  +<dt class="hdlist1">
         2277  +<code>||</code>
         2278  +</dt>
         2279  +<dd>
         2280  +<p>
         2281  +    Logical OR.  Produces a 0 result if both operands are zero, 1 otherwise.
         2282  +    Valid for numeric operands only (integers or floating-point).
         2283  +</p>
         2284  +</dd>
         2285  +<dt class="hdlist1">
         2286  +<code>x ? y : z</code>
         2287  +</dt>
         2288  +<dd>
         2289  +<p>
         2290  +    If-then-else, as in C.  If <code><em>x</em></code>
         2291  +    evaluates to non-zero, then the result is the value of <code><em>y</em></code>.
         2292  +    Otherwise the result is the value of <code><em>z</em></code>.
         2293  +    The <code><em>x</em></code> operand must have a numeric value, while <code><em>y</em></code> and <code><em>z</em></code> can
         2294  +    be of any type.
         2295  +</p>
         2296  +</dd>
         2297  +</dl></div>
         2298  +<div class="paragraph"><p>See the C manual for more details on the results
         2299  +produced by each operator.
         2300  +All of the binary operators group left-to-right within the same
         2301  +precedence level.  For example, the expression</p></div>
         2302  +<div class="literalblock">
         2303  +<div class="content">
         2304  +<pre><code>4*2 &lt; 7</code></pre>
         2305  +</div></div>
         2306  +<div class="paragraph"><p>evaluates to 0.</p></div>
         2307  +<div class="paragraph"><p>The <code>&amp;&amp;</code>, <code>||</code>, and <code>?:</code> operators have <em>lazy evaluation</em>, just as
         2308  +in C, which means that operands are not evaluated if they are not
         2309  +needed to determine the outcome.  For example, in</p></div>
         2310  +<div class="literalblock">
         2311  +<div class="content">
         2312  +<pre><code>$v ? [a] : [b]</code></pre>
         2313  +</div></div>
         2314  +<div class="paragraph"><p>only one of <code>[a]</code> or <code>[b]</code> will actually be evaluated,
         2315  +depending on the value of <code>$v</code>.</p></div>
         2316  +<div class="paragraph"><p>All internal computations involving integers are done with the C
         2317  +type <em>long long</em> if available, or <em>long</em> otherwise, and all internal
         2318  +computations involving floating-point are done with the C type
         2319  +<em>double</em>.</p></div>
         2320  +<div class="paragraph"><p>When converting a string to floating-point, exponent overflow is
         2321  +detected and results in a Tcl error.
         2322  +For conversion to integer from string, detection of overflow depends
         2323  +on the behaviour of some routines in the local C library, so it should
         2324  +be regarded as unreliable.
         2325  +In any case, overflow and underflow are generally not detected
         2326  +reliably for intermediate results.</p></div>
         2327  +<div class="paragraph"><p>Conversion among internal representations for integer, floating-point,
         2328  +string operands is done automatically as needed.
         2329  +For arithmetic computations, integers are used until some
         2330  +floating-point number is introduced, after which floating-point is used.
         2331  +For example,</p></div>
         2332  +<div class="literalblock">
         2333  +<div class="content">
         2334  +<pre><code>5 / 4</code></pre>
         2335  +</div></div>
         2336  +<div class="paragraph"><p>yields the result 1, while</p></div>
         2337  +<div class="literalblock">
         2338  +<div class="content">
         2339  +<pre><code>5 / 4.0
         2340  +5 / ( [string length "abcd"] + 0.0 )</code></pre>
         2341  +</div></div>
         2342  +<div class="paragraph"><p>both yield the result 1.25.</p></div>
         2343  +<div class="paragraph"><p>String values may be used as operands of the comparison operators,
         2344  +although the expression evaluator tries to do comparisons as integer
         2345  +or floating-point when it can.
         2346  +If one of the operands of a comparison is a string and the other
         2347  +has a numeric value, the numeric operand is converted back to
         2348  +a string using the C <em>sprintf</em> format specifier
         2349  +<em>%d</em> for integers and <em>%g</em> for floating-point values.
         2350  +For example, the expressions</p></div>
         2351  +<div class="literalblock">
         2352  +<div class="content">
         2353  +<pre><code>"0x03" &gt; "2"
         2354  +"0y" &lt; "0x12"</code></pre>
         2355  +</div></div>
         2356  +<div class="paragraph"><p>both evaluate to 1.  The first comparison is done using integer
         2357  +comparison, and the second is done using string comparison after
         2358  +the second operand is converted to the string <em>18</em>.</p></div>
         2359  +<div class="paragraph"><p>In general it is safest to enclose an expression in braces when
         2360  +entering it in a command:  otherwise, if the expression contains
         2361  +any white space then the Tcl interpreter will split it
         2362  +among several arguments.  For example, the command</p></div>
         2363  +<div class="literalblock">
         2364  +<div class="content">
         2365  +<pre><code>expr $a + $b</code></pre>
         2366  +</div></div>
         2367  +<div class="paragraph"><p>results in three arguments being passed to <a href="#_expr"><strong><code>expr</code></strong></a>:  <code>$a</code>,
         2368  ++, and <code>$b</code>.  In addition, if the expression isn&#8217;t in braces
         2369  +then the Tcl interpreter will perform variable and command substitution
         2370  +immediately (it will happen in the command parser rather than in
         2371  +the expression parser).  In many cases the expression is being
         2372  +passed to a command that will evaluate the expression later (or
         2373  +even many times if, for example, the expression is to be used to
         2374  +decide when to exit a loop).  Usually the desired goal is to re-do
         2375  +the variable or command substitutions each time the expression is
         2376  +evaluated, rather than once and for all at the beginning.  For example,
         2377  +the command</p></div>
         2378  +<div class="literalblock">
         2379  +<div class="content">
         2380  +<pre><code>for {set i 1} $i&lt;=10 {incr i} {...}        ** WRONG **</code></pre>
         2381  +</div></div>
         2382  +<div class="paragraph"><p>is probably intended to iterate over all values of <code>i</code> from 1 to 10.
         2383  +After each iteration of the body of the loop, <a href="#_for"><strong><code>for</code></strong></a> will pass
         2384  +its second argument to the expression evaluator to see whether or not
         2385  +to continue processing.  Unfortunately, in this case the value of <code>i</code>
         2386  +in the second argument will be substituted once and for all when the
         2387  +<a href="#_for"><strong><code>for</code></strong></a> command is parsed.  If <code>i</code> was 0 before the <a href="#_for"><strong><code>for</code></strong></a>
         2388  +command was invoked then the second argument of <a href="#_for"><strong><code>for</code></strong></a> will be <code>0&lt;=10</code>
         2389  +which will always evaluate to 1, even though <code>i</code> eventually
         2390  +becomes greater than 10.  In the above case the loop will never
         2391  +terminate.  Instead, the expression should be placed in braces:</p></div>
         2392  +<div class="literalblock">
         2393  +<div class="content">
         2394  +<pre><code>for {set i 1} {$i&lt;=10} {incr i} {...}      ** RIGHT **</code></pre>
         2395  +</div></div>
         2396  +<div class="paragraph"><p>This causes the substitution of <em>i</em>
         2397  +to be delayed; it will be re-done each time the expression is
         2398  +evaluated, which is the desired result.</p></div>
         2399  +</div>
         2400  +</div>
         2401  +<div class="sect1">
         2402  +<h2 id="_lists">LISTS</h2>
         2403  +<div class="sectionbody">
         2404  +<div class="paragraph"><p>The third major way that strings are interpreted in Tcl is as lists.
         2405  +A list is just a string with a list-like structure
         2406  +consisting of fields separated by white space.  For example, the
         2407  +string</p></div>
         2408  +<div class="literalblock">
         2409  +<div class="content">
         2410  +<pre><code>Al Sue Anne John</code></pre>
         2411  +</div></div>
         2412  +<div class="paragraph"><p>is a list with four elements or fields.
         2413  +Lists have the same basic structure as command strings, except
         2414  +that a newline character in a list is treated as a field separator
         2415  +just like space or tab.  Conventions for braces and quotes
         2416  +and backslashes are the same for lists as for commands.  For example,
         2417  +the string</p></div>
         2418  +<div class="literalblock">
         2419  +<div class="content">
         2420  +<pre><code>a b\ c {d e {f g h}}</code></pre>
         2421  +</div></div>
         2422  +<div class="paragraph"><p>is a list with three elements:  <code>a</code>, <code>b c</code>, and <code>d e {f g h}</code>.</p></div>
         2423  +<div class="paragraph"><p>Whenever an element is extracted from a list, the same rules about
         2424  +braces and quotes and backslashes are applied as for commands.  Thus in
         2425  +the example above when the third element is extracted from the list,
         2426  +the result is</p></div>
         2427  +<div class="literalblock">
         2428  +<div class="content">
         2429  +<pre><code>d e {f g h}</code></pre>
         2430  +</div></div>
         2431  +<div class="paragraph"><p>(when the field was extracted, all that happened was to strip off
         2432  +the outermost layer of braces).  Command substitution and
         2433  +variable substitution are never
         2434  +made on a list (at least, not by the list-processing commands; the
         2435  +list can always be passed to the Tcl interpreter for evaluation).</p></div>
         2436  +<div class="paragraph"><p>The Tcl commands <a href="#_concat"><strong><code>concat</code></strong></a>, <a href="#_foreach"><strong><code>foreach</code></strong></a>, <a href="#_lappend"><strong><code>lappend</code></strong></a>, <a href="#_lindex"><strong><code>lindex</code></strong></a>, <a href="#_linsert"><strong><code>linsert</code></strong></a>,
         2437  +<a href="#_list"><strong><code>list</code></strong></a>, <a href="#_llength"><strong><code>llength</code></strong></a>, <a href="#_lrange"><strong><code>lrange</code></strong></a>, <a href="#_lreplace"><strong><code>lreplace</code></strong></a>, <a href="#_lsearch"><strong><code>lsearch</code></strong></a>, and <a href="#_lsort"><strong><code>lsort</code></strong></a> allow
         2438  +you to build lists, extract elements from them, search them, and perform
         2439  +other list-related functions.</p></div>
         2440  +<div class="paragraph"><p>Advanced list commands include <a href="#_lrepeat"><strong><code>lrepeat</code></strong></a>, <a href="#_lreverse"><strong><code>lreverse</code></strong></a>, <a href="#_lmap"><strong><code>lmap</code></strong></a>, <a href="#_lassign"><strong><code>lassign</code></strong></a>, <a href="#_lset"><strong><code>lset</code></strong></a>.</p></div>
         2441  +</div>
         2442  +</div>
         2443  +<div class="sect1">
         2444  +<h2 id="_list_expansion">LIST EXPANSION</h2>
         2445  +<div class="sectionbody">
         2446  +<div class="paragraph"><p>A new addition to Tcl 8.5 is the ability to expand a list into separate
         2447  +arguments. Support for this feature is also available in Jim.</p></div>
         2448  +<div class="paragraph"><p>Consider the following attempt to exec a list:</p></div>
         2449  +<div class="literalblock">
         2450  +<div class="content">
         2451  +<pre><code>set cmd {ls -l}
         2452  +exec $cmd</code></pre>
         2453  +</div></div>
         2454  +<div class="paragraph"><p>This will attempt to exec a command named "ls -l", which will clearly not
         2455  +work. Typically eval and concat are required to solve this problem, however
         2456  +it can be solved much more easily with <code>{*}</code>.</p></div>
         2457  +<div class="literalblock">
         2458  +<div class="content">
         2459  +<pre><code>exec {*}$cmd</code></pre>
         2460  +</div></div>
         2461  +<div class="paragraph"><p>This will expand the following argument into individual elements and then evaluate
         2462  +the resulting command.</p></div>
         2463  +<div class="paragraph"><p>Note that the official Tcl syntax is <code>{*}</code>, however <code>{expand}</code> is retained
         2464  +for backward compatibility with experimental versions of this feature.</p></div>
         2465  +</div>
         2466  +</div>
         2467  +<div class="sect1">
         2468  +<h2 id="_regular_expressions">REGULAR EXPRESSIONS</h2>
         2469  +<div class="sectionbody">
         2470  +<div class="paragraph"><p>Tcl provides two commands that support string matching using regular
         2471  +expressions, <a href="#_regexp"><strong><code>regexp</code></strong></a> and <a href="#_regsub"><strong><code>regsub</code></strong></a>, as well as <a href="#_switch"><strong><code>switch</code></strong></a> <code>-regexp</code> and
         2472  +<a href="#_lsearch"><strong><code>lsearch</code></strong></a> <code>-regexp</code>.</p></div>
         2473  +<div class="paragraph"><p>Regular expressions may be implemented one of two ways. Either using the system&#8217;s C library
         2474  +POSIX regular expression support, or using the built-in regular expression engine.
         2475  +The differences between these are described below.</p></div>
         2476  +<div class="paragraph"><p><strong>NOTE</strong> Tcl 7.x and 8.x use perl-style Advanced Regular Expressions (<code>ARE</code>).</p></div>
         2477  +<div class="sect2">
         2478  +<h3 id="_posix_regular_expressions">POSIX Regular Expressions</h3>
         2479  +<div class="paragraph"><p>If the system supports POSIX regular expressions, and UTF-8 support is not enabled,
         2480  +this support will be used by default. The type of regular expressions supported are
         2481  +Extended Regular Expressions (<code>ERE</code>) rather than Basic Regular Expressions (<code>BRE</code>).
         2482  +See REG_EXTENDED in the documentation.</p></div>
         2483  +<div class="paragraph"><p>Using the system-supported POSIX regular expressions will typically
         2484  +make for the smallest code size, but some features such as UTF-8
         2485  +and <code>\w</code>, <code>\d</code>, <code>\s</code> are not supported, and null characters
         2486  +in strings are not supported.</p></div>
         2487  +<div class="paragraph"><p>See regex(3) and regex(7) for full details.</p></div>
         2488  +</div>
         2489  +<div class="sect2">
         2490  +<h3 id="_jim_built_in_regular_expressions">Jim built-in Regular Expressions</h3>
         2491  +<div class="paragraph"><p>The Jim built-in regular expression engine may be selected with <code>./configure --with-jim-regexp</code>
         2492  +or it will be selected automatically if UTF-8 support is enabled.</p></div>
         2493  +<div class="paragraph"><p>This engine supports UTF-8 as well as some <code>ARE</code> features. The differences with both Tcl 7.x/8.x
         2494  +and POSIX are highlighted below.</p></div>
         2495  +<div class="olist arabic"><ol class="arabic">
         2496  +<li>
         2497  +<p>
         2498  +UTF-8 strings and patterns are both supported
         2499  +</p>
         2500  +</li>
         2501  +<li>
         2502  +<p>
         2503  +All Tcl character classes are supported (e.g. <code>[:alnum:]</code>, <code>[:digit:]</code>, <code>[:space:]</code>), but&#8230;
         2504  +</p>
         2505  +</li>
         2506  +<li>
         2507  +<p>
         2508  +Character classes apply to ASCII characters only
         2509  +</p>
         2510  +</li>
         2511  +<li>
         2512  +<p>
         2513  +Supported shorthand character classes: <code>\w</code> = <code>[:alnum:]</code>, <code>\W</code> = <code><sup>[:alnum:]</code>, <code>\d</code> = <code>[:digit:],</code> <code>\D</code> = <code></sup>[:digit:],</code> <code>\s</code> = <code>[:space:]</code>, + <code>\S</code> = <code>^[:space:]</code>
         2514  +</p>
         2515  +</li>
         2516  +<li>
         2517  +<p>
         2518  +Supported constraint escapes: <code>\m</code> = <code>\&lt;</code> = start of word, <code>\M</code> = <code>\&gt;</code> = end of word
         2519  +</p>
         2520  +</li>
         2521  +<li>
         2522  +<p>
         2523  +Backslash escapes may be used within regular expressions, such as <code>\n</code> = newline, <code>\uNNNN</code> = unicode
         2524  +</p>
         2525  +</li>
         2526  +<li>
         2527  +<p>
         2528  +Partially supported constraint escapes: <code>\A</code> = start of string, <code>\Z</code> = end of string
         2529  +</p>
         2530  +</li>
         2531  +<li>
         2532  +<p>
         2533  +Support for the <code>?</code> non-greedy quantifier. e.g. <code>*?</code>
         2534  +</p>
         2535  +</li>
         2536  +<li>
         2537  +<p>
         2538  +Support for non-capturing parentheses <code>(?:&#8230;)</code>
         2539  +</p>
         2540  +</li>
         2541  +<li>
         2542  +<p>
         2543  +Jim Tcl considers that both patterns and strings end at a null character (<code>\x00</code>)
         2544  +</p>
         2545  +</li>
         2546  +</ol></div>
         2547  +</div>
         2548  +</div>
         2549  +</div>
         2550  +<div class="sect1">
         2551  +<h2 id="_command_results">COMMAND RESULTS</h2>
         2552  +<div class="sectionbody">
         2553  +<div class="paragraph"><p>Each command produces two results:  a code and a string.  The
         2554  +code indicates whether the command completed successfully or not,
         2555  +and the string gives additional information.  The valid codes are
         2556  +defined in jim.h, and are:</p></div>
         2557  +<div class="dlist"><dl>
         2558  +<dt class="hdlist1">
         2559  +<code>JIM_OK(0)</code>
         2560  +</dt>
         2561  +<dd>
         2562  +<p>
         2563  +    This is the normal return code, and indicates that the command completed
         2564  +    successfully.  The string gives the command&#8217;s return value.
         2565  +</p>
         2566  +</dd>
         2567  +<dt class="hdlist1">
         2568  +<code>JIM_ERR(1)</code>
         2569  +</dt>
         2570  +<dd>
         2571  +<p>
         2572  +    Indicates that an error occurred; the string gives a message describing
         2573  +    the error.
         2574  +</p>
         2575  +</dd>
         2576  +<dt class="hdlist1">
         2577  +<code>JIM_RETURN(2)</code>
         2578  +</dt>
         2579  +<dd>
         2580  +<p>
         2581  +    Indicates that the <a href="#_return"><strong><code>return</code></strong></a> command has been invoked, and that the
         2582  +    current procedure (or top-level command or <a href="#_source"><strong><code>source</code></strong></a> command)
         2583  +    should return immediately.  The
         2584  +    string gives the return value for the procedure or command.
         2585  +</p>
         2586  +</dd>
         2587  +<dt class="hdlist1">
         2588  +<code>JIM_BREAK(3)</code>
         2589  +</dt>
         2590  +<dd>
         2591  +<p>
         2592  +    Indicates that the <a href="#_break"><strong><code>break</code></strong></a> command has been invoked, so the
         2593  +    innermost loop should abort immediately.  The string should always
         2594  +    be empty.
         2595  +</p>
         2596  +</dd>
         2597  +<dt class="hdlist1">
         2598  +<code>JIM_CONTINUE(4)</code>
         2599  +</dt>
         2600  +<dd>
         2601  +<p>
         2602  +    Indicates that the <a href="#_continue"><strong><code>continue</code></strong></a> command has been invoked, so the
         2603  +    innermost loop should go on to the next iteration.  The string
         2604  +    should always be empty.
         2605  +</p>
         2606  +</dd>
         2607  +<dt class="hdlist1">
         2608  +<code>JIM_SIGNAL(5)</code>
         2609  +</dt>
         2610  +<dd>
         2611  +<p>
         2612  +    Indicates that a signal was caught while executing a commands.
         2613  +    The string contains the name of the signal caught.
         2614  +    See the <a href="#_signal"><strong><code>signal</code></strong></a> and <a href="#_catch"><strong><code>catch</code></strong></a> commands.
         2615  +</p>
         2616  +</dd>
         2617  +<dt class="hdlist1">
         2618  +<code>JIM_EXIT(6)</code>
         2619  +</dt>
         2620  +<dd>
         2621  +<p>
         2622  +    Indicates that the command called the <a href="#_exit"><strong><code>exit</code></strong></a> command.
         2623  +    The string contains the exit code.
         2624  +</p>
         2625  +</dd>
         2626  +</dl></div>
         2627  +<div class="paragraph"><p>Tcl programmers do not normally need to think about return codes,
         2628  +since <code>JIM_OK</code> is almost always returned.  If anything else is returned
         2629  +by a command, then the Tcl interpreter immediately stops processing
         2630  +commands and returns to its caller.  If there are several nested
         2631  +invocations of the Tcl interpreter in progress, then each nested
         2632  +command will usually return the error to its caller, until eventually
         2633  +the error is reported to the top-level application code.  The
         2634  +application will then display the error message for the user.</p></div>
         2635  +<div class="paragraph"><p>In a few cases, some commands will handle certain <a href="#_error"><strong><code>error</code></strong></a> conditions
         2636  +themselves and not return them upwards.  For example, the <a href="#_for"><strong><code>for</code></strong></a>
         2637  +command checks for the <code>JIM_BREAK</code> code; if it occurs, then <a href="#_for"><strong><code>for</code></strong></a>
         2638  +stops executing the body of the loop and returns <code>JIM_OK</code> to its
         2639  +caller.  The <a href="#_for"><strong><code>for</code></strong></a> command also handles <code>JIM_CONTINUE</code> codes and the
         2640  +procedure interpreter handles <code>JIM_RETURN</code> codes.  The <a href="#_catch"><strong><code>catch</code></strong></a>
         2641  +command allows Tcl programs to catch errors and handle them without
         2642  +aborting command interpretation any further.</p></div>
         2643  +<div class="paragraph"><p>The <a href="#_info"><strong><code>info</code></strong></a> <code>returncodes</code> command may be used to programmatically map between
         2644  +return codes and names.</p></div>
         2645  +</div>
         2646  +</div>
         2647  +<div class="sect1">
         2648  +<h2 id="_procedures">PROCEDURES</h2>
         2649  +<div class="sectionbody">
         2650  +<div class="paragraph"><p>Tcl allows you to extend the command interface by defining
         2651  +procedures.  A Tcl procedure can be invoked just like any other Tcl
         2652  +command (it has a name and it receives one or more arguments).
         2653  +The only difference is that its body isn&#8217;t a piece of C code linked
         2654  +into the program; it is a string containing one or more other
         2655  +Tcl commands.</p></div>
         2656  +<div class="paragraph"><p>The <a href="#_proc"><strong><code>proc</code></strong></a> command is used to create a new Tcl command procedure:</p></div>
         2657  +<div class="paragraph"><p><code><strong>proc</strong> <em>name arglist ?statics? body</em></code></p></div>
         2658  +<div class="paragraph"><p>The new command is named <code><em>name</em></code>, and it replaces any existing command
         2659  +there may have been by that name. Whenever the new command is
         2660  +invoked, the contents of <code><em>body</em></code> will be executed by the Tcl
         2661  +interpreter.</p></div>
         2662  +<div class="paragraph"><p><code><em>arglist</em></code> specifies the formal arguments to the procedure.
         2663  +It consists of a list, possibly empty, of the following
         2664  +argument specifiers:</p></div>
         2665  +<div class="dlist"><dl>
         2666  +<dt class="hdlist1">
         2667  +<code>name</code>
         2668  +</dt>
         2669  +<dd>
         2670  +<p>
         2671  +    Required Argument - A simple argument name.
         2672  +</p>
         2673  +</dd>
         2674  +<dt class="hdlist1">
         2675  +<code>{name default}</code>
         2676  +</dt>
         2677  +<dd>
         2678  +<p>
         2679  +    Optional Argument - A two-element list consisting of the
         2680  +    argument name, followed by the default value, which will
         2681  +    be used if the corresponding argument is not supplied.
         2682  +</p>
         2683  +</dd>
         2684  +<dt class="hdlist1">
         2685  +<code>&amp;name</code>
         2686  +</dt>
         2687  +<dd>
         2688  +<p>
         2689  +    Reference Argument - The caller is expected to pass the name of
         2690  +    an existing variable. An implicit <code><a href="#_upvar"><strong><code>upvar</code></strong></a> 1 origname name</code> is done
         2691  +    to make the variable available in the proc scope.
         2692  +</p>
         2693  +</dd>
         2694  +<dt class="hdlist1">
         2695  +<code><strong>args</strong></code>
         2696  +</dt>
         2697  +<dd>
         2698  +<p>
         2699  +    Variable Argument - The special name <code><em>args</em></code>, which is
         2700  +    assigned all remaining arguments (including none) as a list. The
         2701  +    variable argument may only be specified once. Note that
         2702  +    the syntax <code>{args newname}</code> may be used to retain the special
         2703  +    behaviour of <code><em>args</em></code> with a different local name. In this case,
         2704  +    the variable is named <code><em>newname</em></code> rather than <code><em>args</em></code>.
         2705  +</p>
         2706  +</dd>
         2707  +</dl></div>
         2708  +<div class="paragraph"><p>When the command is invoked, a local variable will be created for each of
         2709  +the formal arguments to the procedure; its value will be the value
         2710  +of corresponding argument in the invoking command or the argument&#8217;s
         2711  +default value.</p></div>
         2712  +<div class="paragraph"><p>Arguments with default values need not be specified in a procedure
         2713  +invocation.  However, there must be enough actual arguments for all
         2714  +required arguments, and there must not be any extra actual arguments
         2715  +(unless the Variable Argument is specified).</p></div>
         2716  +<div class="paragraph"><p>Actual arguments are assigned to formal arguments as in left-to-right
         2717  +order with the following precedence.</p></div>
         2718  +<div class="olist arabic"><ol class="arabic">
         2719  +<li>
         2720  +<p>
         2721  +Required Arguments (including Reference Arguments)
         2722  +</p>
         2723  +</li>
         2724  +<li>
         2725  +<p>
         2726  +Optional Arguments
         2727  +</p>
         2728  +</li>
         2729  +<li>
         2730  +<p>
         2731  +Variable Argument
         2732  +</p>
         2733  +</li>
         2734  +</ol></div>
         2735  +<div class="paragraph"><p>The following example illustrates precedence. Assume a procedure declaration:</p></div>
         2736  +<div class="literalblock">
         2737  +<div class="content">
         2738  +<pre><code>proc p {{a A} args b {c C} d} {...}</code></pre>
         2739  +</div></div>
         2740  +<div class="paragraph"><p>This procedure requires at least two arguments, but can accept an unlimited number.
         2741  +The following table shows how various numbers of arguments are assigned.
         2742  +Values marked as <code>-</code> are assigned the default value.</p></div>
         2743  +<div class="tableblock">
         2744  +<table rules="all"
         2745  +width="40%"
         2746  +frame="hsides"
         2747  +cellspacing="0" cellpadding="4">
         2748  +<col width="16%" />
         2749  +<col width="16%" />
         2750  +<col width="16%" />
         2751  +<col width="16%" />
         2752  +<col width="16%" />
         2753  +<col width="16%" />
         2754  +<thead>
         2755  +<tr>
         2756  +<th align="left" valign="top">Number of arguments</th>
         2757  +<th align="left" valign="top">a</th>
         2758  +<th align="left" valign="top">args</th>
         2759  +<th align="left" valign="top">b</th>
         2760  +<th align="left" valign="top">c</th>
         2761  +<th align="left" valign="top">d</th>
         2762  +</tr>
         2763  +</thead>
         2764  +<tbody>
         2765  +<tr>
         2766  +<td align="left" valign="top"><p class="table">2</p></td>
         2767  +<td align="left" valign="top"><p class="table">-</p></td>
         2768  +<td align="left" valign="top"><p class="table">-</p></td>
         2769  +<td align="left" valign="top"><p class="table">1</p></td>
         2770  +<td align="left" valign="top"><p class="table">-</p></td>
         2771  +<td align="left" valign="top"><p class="table">2</p></td>
         2772  +</tr>
         2773  +<tr>
         2774  +<td align="left" valign="top"><p class="table">3</p></td>
         2775  +<td align="left" valign="top"><p class="table">1</p></td>
         2776  +<td align="left" valign="top"><p class="table">-</p></td>
         2777  +<td align="left" valign="top"><p class="table">2</p></td>
         2778  +<td align="left" valign="top"><p class="table">-</p></td>
         2779  +<td align="left" valign="top"><p class="table">3</p></td>
         2780  +</tr>
         2781  +<tr>
         2782  +<td align="left" valign="top"><p class="table">4</p></td>
         2783  +<td align="left" valign="top"><p class="table">1</p></td>
         2784  +<td align="left" valign="top"><p class="table">-</p></td>
         2785  +<td align="left" valign="top"><p class="table">2</p></td>
         2786  +<td align="left" valign="top"><p class="table">3</p></td>
         2787  +<td align="left" valign="top"><p class="table">4</p></td>
         2788  +</tr>
         2789  +<tr>
         2790  +<td align="left" valign="top"><p class="table">5</p></td>
         2791  +<td align="left" valign="top"><p class="table">1</p></td>
         2792  +<td align="left" valign="top"><p class="table">2</p></td>
         2793  +<td align="left" valign="top"><p class="table">3</p></td>
         2794  +<td align="left" valign="top"><p class="table">4</p></td>
         2795  +<td align="left" valign="top"><p class="table">5</p></td>
         2796  +</tr>
         2797  +<tr>
         2798  +<td align="left" valign="top"><p class="table">6</p></td>
         2799  +<td align="left" valign="top"><p class="table">1</p></td>
         2800  +<td align="left" valign="top"><p class="table">2,3</p></td>
         2801  +<td align="left" valign="top"><p class="table">4</p></td>
         2802  +<td align="left" valign="top"><p class="table">5</p></td>
         2803  +<td align="left" valign="top"><p class="table">6</p></td>
         2804  +</tr>
         2805  +</tbody>
         2806  +</table>
         2807  +</div>
         2808  +<div class="paragraph"><p>When <code><em>body</em></code> is being executed, variable names normally refer to local
         2809  +variables, which are created automatically when referenced and deleted
         2810  +when the procedure returns.  One local variable is automatically created
         2811  +for each of the procedure&#8217;s arguments.  Global variables can be
         2812  +accessed by invoking the <a href="#_global"><strong><code>global</code></strong></a> command or via the <code>::</code> prefix.</p></div>
         2813  +<div class="sect2">
         2814  +<h3 id="_new_in_jim">New in Jim</h3>
         2815  +<div class="paragraph"><p>In addition to procedure arguments, Jim procedures may declare static variables.
         2816  +These variables scoped to the procedure and initialised at procedure definition.
         2817  +Either from the static variable definition, or from the enclosing scope.</p></div>
         2818  +<div class="paragraph"><p>Consider the following example:</p></div>
         2819  +<div class="literalblock">
         2820  +<div class="content">
         2821  +<pre><code>jim&gt; set a 1
         2822  +jim&gt; proc a {} {a {b 2}} {
         2823  +    set c 1
         2824  +    puts "$a $b $c"
         2825  +    incr a
         2826  +    incr b
         2827  +    incr c
         2828  +}
         2829  +jim&gt; a
         2830  +1 2 1
         2831  +jim&gt; a
         2832  +2 3 1</code></pre>
         2833  +</div></div>
         2834  +<div class="paragraph"><p>The static variable <code><em>a</em></code> has no initialiser, so it is initialised from
         2835  +the enclosing scope with the value 1. (Note that it is an error if there
         2836  +is no variable with the same name in the enclosing scope). However <code><em>b</em></code>
         2837  +has an initialiser, so it is initialised to 2.</p></div>
         2838  +<div class="paragraph"><p>Unlike a local variable, the value of a static variable is retained across
         2839  +invocations of the procedure.</p></div>
         2840  +<div class="paragraph"><p>See the <a href="#_proc"><strong><code>proc</code></strong></a> command for information on how to define procedures
         2841  +and what happens when they are invoked. See also NAMESPACES.</p></div>
         2842  +</div>
         2843  +</div>
         2844  +</div>
         2845  +<div class="sect1">
         2846  +<h2 id="_variables_scalars_and_arrays">VARIABLES - SCALARS AND ARRAYS</h2>
         2847  +<div class="sectionbody">
         2848  +<div class="paragraph"><p>Tcl allows the definition of variables and the use of their values
         2849  +either through <em>$</em>-style variable substitution, the <a href="#_set"><strong><code>set</code></strong></a>
         2850  +command, or a few other mechanisms.</p></div>
         2851  +<div class="paragraph"><p>Variables need not be declared:  a new variable will automatically
         2852  +be created each time a new variable name is used.</p></div>
         2853  +<div class="paragraph"><p>Tcl supports two types of variables:  scalars and arrays.
         2854  +A scalar variable has a single value, whereas an array variable
         2855  +can have any number of elements, each with a name (called
         2856  +its <em>index</em>) and a value.</p></div>
         2857  +<div class="paragraph"><p>Array indexes may be arbitrary strings; they need not be numeric.
         2858  +Parentheses are used refer to array elements in Tcl commands.
         2859  +For example, the command</p></div>
         2860  +<div class="literalblock">
         2861  +<div class="content">
         2862  +<pre><code>set x(first) 44</code></pre>
         2863  +</div></div>
         2864  +<div class="paragraph"><p>will modify the element of <em>x</em> whose index is <em>first</em>
         2865  +so that its new value is <em>44</em>.</p></div>
         2866  +<div class="paragraph"><p>Two-dimensional arrays can be simulated in Tcl by using indexes
         2867  +that contain multiple concatenated values.
         2868  +For example, the commands</p></div>
         2869  +<div class="literalblock">
         2870  +<div class="content">
         2871  +<pre><code>set a(2,3) 1
         2872  +set a(3,6) 2</code></pre>
         2873  +</div></div>
         2874  +<div class="paragraph"><p>set the elements of <em>a</em> whose indexes are <em>2,3</em> and <em>3,6</em>.</p></div>
         2875  +<div class="paragraph"><p>In general, array elements may be used anywhere in Tcl that scalar
         2876  +variables may be used.</p></div>
         2877  +<div class="paragraph"><p>If an array is defined with a particular name, then there may
         2878  +not be a scalar variable with the same name.</p></div>
         2879  +<div class="paragraph"><p>Similarly, if there is a scalar variable with a particular
         2880  +name then it is not possible to make array references to the
         2881  +variable.</p></div>
         2882  +<div class="paragraph"><p>To convert a scalar variable to an array or vice versa, remove
         2883  +the existing variable with the <a href="#_unset"><strong><code>unset</code></strong></a> command.</p></div>
         2884  +<div class="paragraph"><p>The <a href="#_array"><strong><code>array</code></strong></a> command provides several features for dealing
         2885  +with arrays, such as querying the names of all the elements of
         2886  +the array and converting between an array and a list.</p></div>
         2887  +<div class="paragraph"><p>Variables may be either global or local.  If a variable
         2888  +name is used when a procedure isn&#8217;t being executed, then it
         2889  +automatically refers to a global variable.  Variable names used
         2890  +within a procedure normally refer to local variables associated with that
         2891  +invocation of the procedure.  Local variables are deleted whenever
         2892  +a procedure exits.  Either <a href="#_global"><strong><code>global</code></strong></a> command may be used to request
         2893  +that a name refer to a global variable for the duration of the current
         2894  +procedure (this is somewhat analogous to <em>extern</em> in C), or the variable
         2895  +may be explicitly scoped with the <code>::</code> prefix. For example</p></div>
         2896  +<div class="literalblock">
         2897  +<div class="content">
         2898  +<pre><code>set a 1
         2899  +set b 2
         2900  +proc p {} {
         2901  +    set c 3
         2902  +    global a</code></pre>
         2903  +</div></div>
         2904  +<div class="literalblock">
         2905  +<div class="content">
         2906  +<pre><code>    puts "$a $::b $c"
         2907  +}
         2908  +p</code></pre>
         2909  +</div></div>
         2910  +<div class="paragraph"><p>will output:</p></div>
         2911  +<div class="literalblock">
         2912  +<div class="content">
         2913  +<pre><code>1 2 3</code></pre>
         2914  +</div></div>
         2915  +</div>
         2916  +</div>
         2917  +<div class="sect1">
         2918  +<h2 id="_arrays_as_lists_in_jim">ARRAYS AS LISTS IN JIM</h2>
         2919  +<div class="sectionbody">
         2920  +<div class="paragraph"><p>Unlike Tcl, Jim can automatically convert between a list (with an even
         2921  +number of elements) and an array value. This is similar to the way Tcl
         2922  +can convert between a string and a list.</p></div>
         2923  +<div class="paragraph"><p>For example:</p></div>
         2924  +<div class="literalblock">
         2925  +<div class="content">
         2926  +<pre><code>set a {1 one 2 two}
         2927  +puts $a(2)</code></pre>
         2928  +</div></div>
         2929  +<div class="paragraph"><p>will output:</p></div>
         2930  +<div class="literalblock">
         2931  +<div class="content">
         2932  +<pre><code>two</code></pre>
         2933  +</div></div>
         2934  +<div class="paragraph"><p>Thus <a href="#_array"><strong><code>array</code></strong></a> <code>set</code> is equivalent to <a href="#_set"><strong><code>set</code></strong></a> when the variable does not
         2935  +exist or is empty.</p></div>
         2936  +<div class="paragraph"><p>The reverse is also true where an array will be converted into
         2937  +a list.</p></div>
         2938  +<div class="literalblock">
         2939  +<div class="content">
         2940  +<pre><code>set a(1) one; set a(2) two
         2941  +puts $a</code></pre>
         2942  +</div></div>
         2943  +<div class="paragraph"><p>will output:</p></div>
         2944  +<div class="literalblock">
         2945  +<div class="content">
         2946  +<pre><code>1 one 2 two</code></pre>
         2947  +</div></div>
         2948  +</div>
         2949  +</div>
         2950  +<div class="sect1">
         2951  +<h2 id="_dictionary_values">DICTIONARY VALUES</h2>
         2952  +<div class="sectionbody">
         2953  +<div class="paragraph"><p>Tcl 8.5 introduced the dict command, and Jim Tcl has added a version
         2954  +of this command. Dictionaries provide efficient access to key-value
         2955  +pairs, just like arrays, but dictionaries are pure values. This
         2956  +means that you can pass them to a procedure just as a list or a
         2957  +string. Tcl dictionaries are therefore much more like Tcl lists,
         2958  +except that they represent a mapping from keys to values, rather
         2959  +than an ordered sequence.</p></div>
         2960  +<div class="paragraph"><p>You can nest dictionaries, so that the value for a particular key
         2961  +consists of another dictionary. That way you can elegantly build
         2962  +complicated data structures, such as hierarchical databases. You
         2963  +can also combine dictionaries with other Tcl data structures. For
         2964  +instance, you can build a list of dictionaries that themselves
         2965  +contain lists.</p></div>
         2966  +<div class="paragraph"><p>Dictionaries are values that contain an efficient, order-preserving
         2967  +mapping from arbitrary keys to arbitrary values. Each key in the
         2968  +dictionary maps to a single value. They have a textual format that
         2969  +is exactly that of any list with an even number of elements, with
         2970  +each mapping in the dictionary being represented as two items in
         2971  +the list. When a command takes a dictionary and produces a new
         2972  +dictionary based on it (either returning it or writing it back into
         2973  +the variable that the starting dictionary was read from) the new
         2974  +dictionary will have the same order of keys, modulo any deleted
         2975  +keys and with new keys added on to the end. When a string is
         2976  +interpreted as a dictionary and it would otherwise have duplicate
         2977  +keys, only the last value for a particular key is used; the others
         2978  +are ignored, meaning that, "apple banana" and "apple carrot apple
         2979  +banana" are equivalent dictionaries (with different string
         2980  +representations).</p></div>
         2981  +<div class="paragraph"><p>Note that in Jim, arrays are implemented as dictionaries.
         2982  +Thus automatic conversion between lists and dictionaries applies
         2983  +as it does for arrays.</p></div>
         2984  +<div class="literalblock">
         2985  +<div class="content">
         2986  +<pre><code>jim&gt; dict set a 1 one
         2987  +1 one
         2988  +jim&gt; dict set a 2 two
         2989  +1 one 2 two
         2990  +jim&gt; puts $a
         2991  +1 one 2 two
         2992  +jim&gt; puts $a(2)
         2993  +two
         2994  +jim&gt; dict set a 3 T three
         2995  +1 one 2 two 3 {T three}</code></pre>
         2996  +</div></div>
         2997  +<div class="paragraph"><p>See the <a href="#_dict"><strong><code>dict</code></strong></a> command for more details.</p></div>
         2998  +</div>
         2999  +</div>
         3000  +<div class="sect1">
         3001  +<h2 id="_namespaces">NAMESPACES</h2>
         3002  +<div class="sectionbody">
         3003  +<div class="paragraph"><p>Tcl added namespaces as a mechanism avoiding name clashes, especially in applications
         3004  +including a number of 3rd party components. While there is less need for namespaces
         3005  +in Jim Tcl (which does not strive to support large applications), it is convenient to
         3006  +provide a subset of the support for namespaces to easy porting code from Tcl.</p></div>
         3007  +<div class="paragraph"><p>Jim Tcl currently supports "light-weight" namespaces which should be adequate for most
         3008  +purposes. This feature is currently experimental. See README.namespaces for more information
         3009  +and the documentation of the <a href="#_namespace"><strong><code>namespace</code></strong></a> command.</p></div>
         3010  +</div>
         3011  +</div>
         3012  +<div class="sect1">
         3013  +<h2 id="_garbage_collection_references_lambda_function">GARBAGE COLLECTION, REFERENCES, LAMBDA FUNCTION</h2>
         3014  +<div class="sectionbody">
         3015  +<div class="paragraph"><p>Unlike Tcl, Jim has some sophisticated support for functional programming.
         3016  +These are described briefly below.</p></div>
         3017  +<div class="paragraph"><p>More information may be found at <a href="http://wiki.tcl.tk/13847">http://wiki.tcl.tk/13847</a></p></div>
         3018  +<div class="sect2">
         3019  +<h3 id="_references">References</h3>
         3020  +<div class="paragraph"><p>A reference can be thought of as holding a value with one level of indirection,
         3021  +where the value may be garbage collected when unreferenced.
         3022  +Consider the following example:</p></div>
         3023  +<div class="literalblock">
         3024  +<div class="content">
         3025  +<pre><code>jim&gt; set r [ref "One String" test]
         3026  +&lt;reference.&lt;test___&gt;.00000000000000000000&gt;
         3027  +jim&gt; getref $r
         3028  +One String</code></pre>
         3029  +</div></div>
         3030  +<div class="paragraph"><p>The operation <a href="#_ref"><strong><code>ref</code></strong></a> creates a references to the value specified by the
         3031  +first argument. (The second argument is a "type" used for documentation purposes).</p></div>
         3032  +<div class="paragraph"><p>The operation <a href="#_getref"><strong><code>getref</code></strong></a> is the dereferencing operation which retrieves the value
         3033  +stored in the reference.</p></div>
         3034  +<div class="literalblock">
         3035  +<div class="content">
         3036  +<pre><code>jim&gt; setref $r "New String"
         3037  +New String
         3038  +jim&gt; getref $r
         3039  +New String</code></pre>
         3040  +</div></div>
         3041  +<div class="paragraph"><p>The operation <a href="#_setref"><strong><code>setref</code></strong></a> replaces the value stored by the reference. If the old value
         3042  +is no longer accessible by any reference, it will eventually be automatically be garbage
         3043  +collected.</p></div>
         3044  +</div>
         3045  +<div class="sect2">
         3046  +<h3 id="_garbage_collection">Garbage Collection</h3>
         3047  +<div class="paragraph"><p>Normally, all values in Tcl are passed by value. As such values are copied and released
         3048  +automatically as necessary.</p></div>
         3049  +<div class="paragraph"><p>With the introduction of references, it is possible to create values whose lifetime
         3050  +transcend their scope. To support this, case, the Jim system will periodically identify
         3051  +and discard objects which are no longer accessible by any reference.</p></div>
         3052  +<div class="paragraph"><p>The <a href="#_collect"><strong><code>collect</code></strong></a> command may be used to force garbage collection.  Consider a reference created
         3053  +with a finalizer:</p></div>
         3054  +<div class="literalblock">
         3055  +<div class="content">
         3056  +<pre><code>jim&gt; proc f {ref value} { puts "Finaliser called for $ref,$value" }
         3057  +jim&gt; set r [ref "One String" test f]
         3058  +&lt;reference.&lt;test___&gt;.00000000000
         3059  +jim&gt; collect
         3060  +0
         3061  +jim&gt; set r ""
         3062  +jim&gt; collect
         3063  +Finaliser called for &lt;reference.&lt;test___&gt;.00000000000,One String
         3064  +1</code></pre>
         3065  +</div></div>
         3066  +<div class="paragraph"><p>Note that once the reference, <em>r</em>, was modified so that it no longer
         3067  +contained a reference to the value, the garbage collector discarded
         3068  +the value (after calling the finalizer).</p></div>
         3069  +<div class="paragraph"><p>The finalizer for a reference may be examined or changed with the <a href="#_finalize"><strong><code>finalize</code></strong></a> command</p></div>
         3070  +<div class="literalblock">
         3071  +<div class="content">
         3072  +<pre><code>jim&gt; finalize $r
         3073  +f
         3074  +jim&gt; finalize $r newf
         3075  +newf</code></pre>
         3076  +</div></div>
         3077  +</div>
         3078  +<div class="sect2">
         3079  +<h3 id="_lambda_function">Lambda Function</h3>
         3080  +<div class="paragraph"><p>Jim provides a garbage collected <a href="#_lambda"><strong><code>lambda</code></strong></a> function. This is a procedure
         3081  +which is able to create an anonymous procedure.  Consider:</p></div>
         3082  +<div class="literalblock">
         3083  +<div class="content">
         3084  +<pre><code>jim&gt; set f [lambda {a} {{x 0}} { incr x $a }]
         3085  +jim&gt; $f 1
         3086  +1
         3087  +jim&gt; $f 2
         3088  +3
         3089  +jim&gt; set f ""</code></pre>
         3090  +</div></div>
         3091  +<div class="paragraph"><p>This create an anonymous procedure (with the name stored in <em>f</em>), with a static variable
         3092  +which is incremented by the supplied value and the result returned.</p></div>
         3093  +<div class="paragraph"><p>Once the procedure name is no longer accessible, it will automatically be deleted
         3094  +when the garbage collector runs.</p></div>
         3095  +<div class="paragraph"><p>The procedure may also be delete immediately by renaming it "". e.g.</p></div>
         3096  +<div class="literalblock">
         3097  +<div class="content">
         3098  +<pre><code>jim&gt; rename $f ""</code></pre>
         3099  +</div></div>
         3100  +</div>
         3101  +</div>
         3102  +</div>
         3103  +<div class="sect1">
         3104  +<h2 id="_utf_8_and_unicode">UTF-8 AND UNICODE</h2>
         3105  +<div class="sectionbody">
         3106  +<div class="paragraph"><p>If Jim is built with UTF-8 support enabled (configure --enable-utf),
         3107  +then most string-related commands become UTF-8 aware.  These include,
         3108  +but are not limited to, <a href="#_string"><strong><code>string</code></strong></a> <code>match</code>, <a href="#_split"><strong><code>split</code></strong></a>, <a href="#_glob"><strong><code>glob</code></strong></a>, <a href="#_scan"><strong><code>scan</code></strong></a> and
         3109  +<a href="#_format"><strong><code>format</code></strong></a>.</p></div>
         3110  +<div class="paragraph"><p>UTF-8 encoding has many advantages, but one of the complications is that
         3111  +characters can take a variable number of bytes. Thus the addition of
         3112  +<a href="#_string"><strong><code>string</code></strong></a> <code>bytelength</code> which returns the number of bytes in a string,
         3113  +while <a href="#_string"><strong><code>string</code></strong></a> <code>length</code> returns the number of characters.</p></div>
         3114  +<div class="paragraph"><p>If UTF-8 support is not enabled, all commands treat bytes as characters
         3115  +and <a href="#_string"><strong><code>string</code></strong></a> <code>bytelength</code> returns the same value as <a href="#_string"><strong><code>string</code></strong></a> <code>length</code>.</p></div>
         3116  +<div class="paragraph"><p>Note that even if UTF-8 support is not enabled, the <code>\uNNNN</code> and related syntax
         3117  +is still available to embed UTF-8 sequences.</p></div>
         3118  +<div class="paragraph"><p>Jim Tcl supports all currently defined unicode codepoints. That is 21 bits, up to +<em>U+1FFFFF</em>.</p></div>
         3119  +<div class="sect2">
         3120  +<h3 id="_string_matching">String Matching</h3>
         3121  +<div class="paragraph"><p>Commands such as <a href="#_string"><strong><code>string</code></strong></a> <code>match</code>, <a href="#_lsearch"><strong><code>lsearch</code></strong></a> <code>-glob</code>, <a href="#_array"><strong><code>array</code></strong></a> <code>names</code> and others use string
         3122  +pattern matching rules. These commands support UTF-8. For example:</p></div>
         3123  +<div class="literalblock">
         3124  +<div class="content">
         3125  +<pre><code>string match a\[\ua0-\ubf\]b "a\u00a3b"</code></pre>
         3126  +</div></div>
         3127  +</div>
         3128  +<div class="sect2">
         3129  +<h3 id="_format_and_scan">format and scan</h3>
         3130  +<div class="paragraph"><p><code>format %c</code> allows a unicode codepoint to be be encoded. For example, the following will return
         3131  +a string with two bytes and one character. The same as <code>\ub5</code></p></div>
         3132  +<div class="literalblock">
         3133  +<div class="content">
         3134  +<pre><code>format %c 0xb5</code></pre>
         3135  +</div></div>
         3136  +<div class="paragraph"><p><a href="#_format"><strong><code>format</code></strong></a> respects widths as character widths, not byte widths. For example, the following will
         3137  +return a string with three characters, not three bytes.</p></div>
         3138  +<div class="literalblock">
         3139  +<div class="content">
         3140  +<pre><code>format %.3s \ub5\ub6\ub7\ub8</code></pre>
         3141  +</div></div>
         3142  +<div class="paragraph"><p>Similarly, <code>scan &#8230; %c</code> allows a UTF-8 to be decoded to a unicode codepoint. The following will set
         3143  +<code><em>a</em></code> to 181 (0xb5) and <code><em>b</em></code> to 65 (0x41).</p></div>
         3144  +<div class="literalblock">
         3145  +<div class="content">
         3146  +<pre><code>scan \u00b5A %c%c a b</code></pre>
         3147  +</div></div>
         3148  +<div class="paragraph"><p><a href="#_scan"><strong><code>scan</code></strong></a> <code>%s</code> will also accept a character class, including unicode ranges.</p></div>
         3149  +</div>
         3150  +<div class="sect2">
         3151  +<h3 id="_string_classes">String Classes</h3>
         3152  +<div class="paragraph"><p><a href="#_string"><strong><code>string</code></strong></a> <code>is</code> has <strong>not</strong> been extended to classify UTF-8 characters. Therefore, the following
         3153  +will return 0, even though the string may be considered to be alphabetic.</p></div>
         3154  +<div class="literalblock">
         3155  +<div class="content">
         3156  +<pre><code>string is alpha \ub5Test</code></pre>
         3157  +</div></div>
         3158  +<div class="paragraph"><p>This does not affect the string classes <em>ascii</em>, <em>control</em>, <em>digit</em>, <em>double</em>, <em>integer</em> or <em>xdigit</em>.</p></div>
         3159  +</div>
         3160  +<div class="sect2">
         3161  +<h3 id="_case_mapping_and_conversion">Case Mapping and Conversion</h3>
         3162  +<div class="paragraph"><p>Jim provides a simplified unicode case mapping. This means that case conversion
         3163  +and comparison will not increase or decrease the number of characters in a string.
         3164  +(Although it may change the number of bytes).</p></div>
         3165  +<div class="paragraph"><p><a href="#_string"><strong><code>string</code></strong></a> <code>toupper</code> will convert any lowercase letters to their uppercase equivalent.
         3166  +Any character which is not a letter or has no uppercase equivalent is left unchanged.
         3167  +Similarly for <a href="#_string"><strong><code>string</code></strong></a> <code>tolower</code> and <a href="#_string"><strong><code>string</code></strong></a> <code>totitle</code>.</p></div>
         3168  +<div class="paragraph"><p>Commands which perform case insensitive matches, such as <a href="#_string"><strong><code>string</code></strong></a> <code>compare -nocase</code>
         3169  +and <a href="#_lsearch"><strong><code>lsearch</code></strong></a> <code>-nocase</code> fold both strings to uppercase before comparison.</p></div>
         3170  +</div>
         3171  +<div class="sect2">
         3172  +<h3 id="_invalid_utf_8_sequences">Invalid UTF-8 Sequences</h3>
         3173  +<div class="paragraph"><p>Some UTF-8 character sequences are invalid, such as those beginning with <em>0xff</em>,
         3174  +those which represent character sequences longer than 3 bytes (greater than U+FFFF),
         3175  +and those which end prematurely, such as a lone <em>0xc2</em>.</p></div>
         3176  +<div class="paragraph"><p>In these situations, the offending bytes are treated as single characters. For example,
         3177  +the following returns 2.</p></div>
         3178  +<div class="literalblock">
         3179  +<div class="content">
         3180  +<pre><code>string bytelength \xff\xff</code></pre>
         3181  +</div></div>
         3182  +</div>
         3183  +<div class="sect2">
         3184  +<h3 id="_regular_expressions_2">Regular Expressions</h3>
         3185  +<div class="paragraph"><p>If UTF-8 support is enabled, the built-in regular expression engine will be
         3186  +selected which supports UTF-8 strings and patterns.</p></div>
         3187  +<div class="paragraph"><p>See REGULAR EXPRESSIONS</p></div>
         3188  +</div>
         3189  +</div>
         3190  +</div>
         3191  +<div class="sect1">
         3192  +<h2 id="_built_in_commands">BUILT-IN COMMANDS</h2>
         3193  +<div class="sectionbody">
         3194  +<div class="paragraph"><p>The Tcl library provides the following built-in commands, which will
         3195  +be available in any application using Tcl.  In addition to these
         3196  +built-in commands, there may be additional commands defined by each
         3197  +application, plus commands defined as Tcl procedures.</p></div>
         3198  +<div class="paragraph"><p>In the command syntax descriptions below, words in <code><strong>boldface</strong></code> are
         3199  +literals that you type verbatim to Tcl.</p></div>
         3200  +<div class="paragraph"><p>Words in <code><em>italics</em></code> are meta-symbols; they serve as names for any of
         3201  +a range of values that you can type.</p></div>
         3202  +<div class="paragraph"><p>Optional arguments or groups of arguments are indicated by enclosing them
         3203  +in <code>?question-marks?</code>.</p></div>
         3204  +<div class="paragraph"><p>Ellipses (<code>...</code>) indicate that any number of additional
         3205  +arguments or groups of arguments may appear, in the same format
         3206  +as the preceding argument(s).</p></div>
         3207  +<div class="sect2">
         3208  +<h3 id="CommandIndex">Command Index</h3>
         3209  +<div class="tableblock">
         3210  +<table rules="none"
         3211  +width="100%"
         3212  +frame="void"
         3213  +cellspacing="0" cellpadding="4">
         3214  +<col width="12%" />
         3215  +<col width="12%" />
         3216  +<col width="12%" />
         3217  +<col width="12%" />
         3218  +<col width="12%" />
         3219  +<col width="12%" />
         3220  +<col width="12%" />
         3221  +<col width="12%" />
         3222  +<tbody>
         3223  +<tr>
         3224  +<td align="left" valign="top"><p class="table"><a href="#cmd_2"><strong><code>after</code></strong></a></p></td>
         3225  +<td align="left" valign="top"><p class="table"><a href="#_aio"><strong><code>aio</code></strong></a></p></td>
         3226  +<td align="left" valign="top"><p class="table"><a href="#_alarm"><strong><code>alarm</code></strong></a></p></td>
         3227  +<td align="left" valign="top"><p class="table"><a href="#_alias"><strong><code>alias</code></strong></a></p></td>
         3228  +<td align="left" valign="top"><p class="table"><a href="#_append"><strong><code>append</code></strong></a></p></td>
         3229  +<td align="left" valign="top"><p class="table"><a href="#_apply"><strong><code>apply</code></strong></a></p></td>
         3230  +<td align="left" valign="top"><p class="table"><a href="#_array"><strong><code>array</code></strong></a></p></td>
         3231  +<td align="left" valign="top"><p class="table"><a href="#_binary"><strong><code>binary</code></strong></a></p></td>
         3232  +</tr>
         3233  +<tr>
         3234  +<td align="left" valign="top"><p class="table"><a href="#_break"><strong><code>break</code></strong></a></p></td>
         3235  +<td align="left" valign="top"><p class="table"><a href="#_case"><strong><code>case</code></strong></a></p></td>
         3236  +<td align="left" valign="top"><p class="table"><a href="#_catch"><strong><code>catch</code></strong></a></p></td>
         3237  +<td align="left" valign="top"><p class="table"><a href="#_cd"><strong><code>cd</code></strong></a></p></td>
         3238  +<td align="left" valign="top"><p class="table"><a href="#cmd_4"><strong><code>class</code></strong></a></p></td>
         3239  +<td align="left" valign="top"><p class="table"><a href="#_clock"><strong><code>clock</code></strong></a></p></td>
         3240  +<td align="left" valign="top"><p class="table"><a href="#_close"><strong><code>close</code></strong></a></p></td>
         3241  +<td align="left" valign="top"><p class="table"><a href="#_collect"><strong><code>collect</code></strong></a></p></td>
         3242  +</tr>
         3243  +<tr>
         3244  +<td align="left" valign="top"><p class="table"><a href="#_concat"><strong><code>concat</code></strong></a></p></td>
         3245  +<td align="left" valign="top"><p class="table"><a href="#_continue"><strong><code>continue</code></strong></a></p></td>
         3246  +<td align="left" valign="top"><p class="table"><a href="#_curry"><strong><code>curry</code></strong></a></p></td>
         3247  +<td align="left" valign="top"><p class="table"><a href="#_defer"><strong><code>defer</code></strong></a></p></td>
         3248  +<td align="left" valign="top"><p class="table"><a href="#_dict"><strong><code>dict</code></strong></a></p></td>
         3249  +<td align="left" valign="top"><p class="table"><a href="#_env"><strong><code>env</code></strong></a></p></td>
         3250  +<td align="left" valign="top"><p class="table"><a href="#_eof"><strong><code>eof</code></strong></a></p></td>
         3251  +<td align="left" valign="top"><p class="table"><a href="#_error"><strong><code>error</code></strong></a></p></td>
         3252  +</tr>
         3253  +<tr>
         3254  +<td align="left" valign="top"><p class="table"><a href="#_eval"><strong><code>eval</code></strong></a></p></td>
         3255  +<td align="left" valign="top"><p class="table"><a href="#cmd_2"><strong><code>eventloop</code></strong></a></p></td>
         3256  +<td align="left" valign="top"><p class="table"><a href="#_exec"><strong><code>exec</code></strong></a></p></td>
         3257  +<td align="left" valign="top"><p class="table"><a href="#_exists"><strong><code>exists</code></strong></a></p></td>
         3258  +<td align="left" valign="top"><p class="table"><a href="#_exit"><strong><code>exit</code></strong></a></p></td>
         3259  +<td align="left" valign="top"><p class="table"><a href="#_expr"><strong><code>expr</code></strong></a></p></td>
         3260  +<td align="left" valign="top"><p class="table"><a href="#_fconfigure"><strong><code>fconfigure</code></strong></a></p></td>
         3261  +<td align="left" valign="top"><p class="table"><a href="#_file"><strong><code>file</code></strong></a></p></td>
         3262  +</tr>
         3263  +<tr>
         3264  +<td align="left" valign="top"><p class="table"><a href="#_finalize"><strong><code>finalize</code></strong></a></p></td>
         3265  +<td align="left" valign="top"><p class="table"><a href="#_flush"><strong><code>flush</code></strong></a></p></td>
         3266  +<td align="left" valign="top"><p class="table"><a href="#_for"><strong><code>for</code></strong></a></p></td>
         3267  +<td align="left" valign="top"><p class="table"><a href="#_foreach"><strong><code>foreach</code></strong></a></p></td>
         3268  +<td align="left" valign="top"><p class="table"><a href="#_format"><strong><code>format</code></strong></a></p></td>
         3269  +<td align="left" valign="top"><p class="table"><a href="#_getref"><strong><code>getref</code></strong></a></p></td>
         3270  +<td align="left" valign="top"><p class="table"><a href="#_gets"><strong><code>gets</code></strong></a></p></td>
         3271  +<td align="left" valign="top"><p class="table"><a href="#_glob"><strong><code>glob</code></strong></a></p></td>
         3272  +</tr>
         3273  +<tr>
         3274  +<td align="left" valign="top"><p class="table"><a href="#_global"><strong><code>global</code></strong></a></p></td>
         3275  +<td align="left" valign="top"><p class="table"><a href="#_history"><strong><code>history</code></strong></a></p></td>
         3276  +<td align="left" valign="top"><p class="table"><a href="#_if"><strong><code>if</code></strong></a></p></td>
         3277  +<td align="left" valign="top"><p class="table"><a href="#_incr"><strong><code>incr</code></strong></a></p></td>
         3278  +<td align="left" valign="top"><p class="table"><a href="#_info"><strong><code>info</code></strong></a></p></td>
         3279  +<td align="left" valign="top"><p class="table"><a href="#_interp"><strong><code>interp</code></strong></a></p></td>
         3280  +<td align="left" valign="top"><p class="table"><a href="#_join"><strong><code>join</code></strong></a></p></td>
         3281  +<td align="left" valign="top"><p class="table"><a href="#_kill"><strong><code>kill</code></strong></a></p></td>
         3282  +</tr>
         3283  +<tr>
         3284  +<td align="left" valign="top"><p class="table"><a href="#_lambda"><strong><code>lambda</code></strong></a></p></td>
         3285  +<td align="left" valign="top"><p class="table"><a href="#_lappend"><strong><code>lappend</code></strong></a></p></td>
         3286  +<td align="left" valign="top"><p class="table"><a href="#_lassign"><strong><code>lassign</code></strong></a></p></td>
         3287  +<td align="left" valign="top"><p class="table"><a href="#_lindex"><strong><code>lindex</code></strong></a></p></td>
         3288  +<td align="left" valign="top"><p class="table"><a href="#_linsert"><strong><code>linsert</code></strong></a></p></td>
         3289  +<td align="left" valign="top"><p class="table"><a href="#_list"><strong><code>list</code></strong></a></p></td>
         3290  +<td align="left" valign="top"><p class="table"><a href="#_llength"><strong><code>llength</code></strong></a></p></td>
         3291  +<td align="left" valign="top"><p class="table"><a href="#_lmap"><strong><code>lmap</code></strong></a></p></td>
         3292  +</tr>
         3293  +<tr>
         3294  +<td align="left" valign="top"><p class="table"><a href="#_load"><strong><code>load</code></strong></a></p></td>
         3295  +<td align="left" valign="top"><p class="table"><a href="#_local"><strong><code>local</code></strong></a></p></td>
         3296  +<td align="left" valign="top"><p class="table"><a href="#_loop"><strong><code>loop</code></strong></a></p></td>
         3297  +<td align="left" valign="top"><p class="table"><a href="#_lrange"><strong><code>lrange</code></strong></a></p></td>
         3298  +<td align="left" valign="top"><p class="table"><a href="#_lrepeat"><strong><code>lrepeat</code></strong></a></p></td>
         3299  +<td align="left" valign="top"><p class="table"><a href="#_lreplace"><strong><code>lreplace</code></strong></a></p></td>
         3300  +<td align="left" valign="top"><p class="table"><a href="#_lreverse"><strong><code>lreverse</code></strong></a></p></td>
         3301  +<td align="left" valign="top"><p class="table"><a href="#_lsearch"><strong><code>lsearch</code></strong></a></p></td>
         3302  +</tr>
         3303  +<tr>
         3304  +<td align="left" valign="top"><p class="table"><a href="#_lset"><strong><code>lset</code></strong></a></p></td>
         3305  +<td align="left" valign="top"><p class="table"><a href="#_lsort"><strong><code>lsort</code></strong></a></p></td>
         3306  +<td align="left" valign="top"><p class="table"><a href="#_namespace"><strong><code>namespace</code></strong></a></p></td>
         3307  +<td align="left" valign="top"><p class="table"><a href="#cmd_4"><strong><code>oo</code></strong></a></p></td>
         3308  +<td align="left" valign="top"><p class="table"><a href="#_open"><strong><code>open</code></strong></a></p></td>
         3309  +<td align="left" valign="top"><p class="table"><a href="#cmd_1"><strong><code>os.fork</code></strong></a></p></td>
         3310  +<td align="left" valign="top"><p class="table"><a href="#cmd_1"><strong><code>os.gethostname</code></strong></a></p></td>
         3311  +<td align="left" valign="top"><p class="table"><a href="#cmd_1"><strong><code>os.getids</code></strong></a></p></td>
         3312  +</tr>
         3313  +<tr>
         3314  +<td align="left" valign="top"><p class="table"><a href="#cmd_1"><strong><code>os.uptime</code></strong></a></p></td>
         3315  +<td align="left" valign="top"><p class="table"><a href="#cmd_3"><strong><code>pack</code></strong></a></p></td>
         3316  +<td align="left" valign="top"><p class="table"><a href="#cmd_3"><strong><code>pack</code></strong></a></p></td>
         3317  +<td align="left" valign="top"><p class="table"><a href="#_package"><strong><code>package</code></strong></a></p></td>
         3318  +<td align="left" valign="top"><p class="table"><a href="#_pid"><strong><code>pid</code></strong></a></p></td>
         3319  +<td align="left" valign="top"><p class="table"><a href="#_pipe"><strong><code>pipe</code></strong></a></p></td>
         3320  +<td align="left" valign="top"><p class="table"><a href="#cmd_1"><strong><code>posix</code></strong></a></p></td>
         3321  +<td align="left" valign="top"><p class="table"><a href="#_proc"><strong><code>proc</code></strong></a></p></td>
         3322  +</tr>
         3323  +<tr>
         3324  +<td align="left" valign="top"><p class="table"><a href="#_puts"><strong><code>puts</code></strong></a></p></td>
         3325  +<td align="left" valign="top"><p class="table"><a href="#_pwd"><strong><code>pwd</code></strong></a></p></td>
         3326  +<td align="left" valign="top"><p class="table"><a href="#_rand"><strong><code>rand</code></strong></a></p></td>
         3327  +<td align="left" valign="top"><p class="table"><a href="#_range"><strong><code>range</code></strong></a></p></td>
         3328  +<td align="left" valign="top"><p class="table"><a href="#_read"><strong><code>read</code></strong></a></p></td>
         3329  +<td align="left" valign="top"><p class="table"><a href="#_ref"><strong><code>ref</code></strong></a></p></td>
         3330  +<td align="left" valign="top"><p class="table"><a href="#_regexp"><strong><code>regexp</code></strong></a></p></td>
         3331  +<td align="left" valign="top"><p class="table"><a href="#_regsub"><strong><code>regsub</code></strong></a></p></td>
         3332  +</tr>
         3333  +<tr>
         3334  +<td align="left" valign="top"><p class="table"><a href="#_rename"><strong><code>rename</code></strong></a></p></td>
         3335  +<td align="left" valign="top"><p class="table"><a href="#_return"><strong><code>return</code></strong></a></p></td>
         3336  +<td align="left" valign="top"><p class="table"><a href="#_scan"><strong><code>scan</code></strong></a></p></td>
         3337  +<td align="left" valign="top"><p class="table"><a href="#_seek"><strong><code>seek</code></strong></a></p></td>
         3338  +<td align="left" valign="top"><p class="table"><a href="#_set"><strong><code>set</code></strong></a></p></td>
         3339  +<td align="left" valign="top"><p class="table"><a href="#_setref"><strong><code>setref</code></strong></a></p></td>
         3340  +<td align="left" valign="top"><p class="table"><a href="#_signal"><strong><code>signal</code></strong></a></p></td>
         3341  +<td align="left" valign="top"><p class="table"><a href="#_sleep"><strong><code>sleep</code></strong></a></p></td>
         3342  +</tr>
         3343  +<tr>
         3344  +<td align="left" valign="top"><p class="table"><a href="#_socket"><strong><code>socket</code></strong></a></p></td>
         3345  +<td align="left" valign="top"><p class="table"><a href="#_source"><strong><code>source</code></strong></a></p></td>
         3346  +<td align="left" valign="top"><p class="table"><a href="#_split"><strong><code>split</code></strong></a></p></td>
         3347  +<td align="left" valign="top"><p class="table"><a href="#_stackdump"><strong><code>stackdump</code></strong></a></p></td>
         3348  +<td align="left" valign="top"><p class="table"><a href="#_stacktrace"><strong><code>stacktrace</code></strong></a></p></td>
         3349  +<td align="left" valign="top"><p class="table"><a href="#_string"><strong><code>string</code></strong></a></p></td>
         3350  +<td align="left" valign="top"><p class="table"><a href="#_subst"><strong><code>subst</code></strong></a></p></td>
         3351  +<td align="left" valign="top"><p class="table"><a href="#cmd_4"><strong><code>super</code></strong></a></p></td>
         3352  +</tr>
         3353  +<tr>
         3354  +<td align="left" valign="top"><p class="table"><a href="#_switch"><strong><code>switch</code></strong></a></p></td>
         3355  +<td align="left" valign="top"><p class="table"><a href="#_syslog"><strong><code>syslog</code></strong></a></p></td>
         3356  +<td align="left" valign="top"><p class="table"><a href="#_tailcall"><strong><code>tailcall</code></strong></a></p></td>
         3357  +<td align="left" valign="top"><p class="table"><a href="#_tcl_autocomplete"><strong><code>tcl::autocomplete</code></strong></a></p></td>
         3358  +<td align="left" valign="top"><p class="table"><a href="#_tcl_prefix"><strong><code>tcl::prefix</code></strong></a></p></td>
         3359  +<td align="left" valign="top"><p class="table"><a href="#_tell"><strong><code>tell</code></strong></a></p></td>
         3360  +<td align="left" valign="top"><p class="table"><a href="#_throw"><strong><code>throw</code></strong></a></p></td>
         3361  +<td align="left" valign="top"><p class="table"><a href="#_time"><strong><code>time</code></strong></a></p></td>
         3362  +</tr>
         3363  +<tr>
         3364  +<td align="left" valign="top"><p class="table"><a href="#_tree"><strong><code>tree</code></strong></a></p></td>
         3365  +<td align="left" valign="top"><p class="table"><a href="#_try"><strong><code>try</code></strong></a></p></td>
         3366  +<td align="left" valign="top"><p class="table"><a href="#_unknown"><strong><code>unknown</code></strong></a></p></td>
         3367  +<td align="left" valign="top"><p class="table"><a href="#cmd_3"><strong><code>unpack</code></strong></a></p></td>
         3368  +<td align="left" valign="top"><p class="table"><a href="#_unset"><strong><code>unset</code></strong></a></p></td>
         3369  +<td align="left" valign="top"><p class="table"><a href="#_upcall"><strong><code>upcall</code></strong></a></p></td>
         3370  +<td align="left" valign="top"><p class="table"><a href="#cmd_2"><strong><code>update</code></strong></a></p></td>
         3371  +<td align="left" valign="top"><p class="table"><a href="#_uplevel"><strong><code>uplevel</code></strong></a></p></td>
         3372  +</tr>
         3373  +<tr>
         3374  +<td align="left" valign="top"><p class="table"><a href="#_upvar"><strong><code>upvar</code></strong></a></p></td>
         3375  +<td align="left" valign="top"><p class="table"><a href="#cmd_2"><strong><code>vwait</code></strong></a></p></td>
         3376  +<td align="left" valign="top"><p class="table"><a href="#_wait"><strong><code>wait</code></strong></a></p></td>
         3377  +<td align="left" valign="top"><p class="table"><a href="#_while"><strong><code>while</code></strong></a></p></td>
         3378  +<td align="left" valign="top"><p class="table"><a href="#_zlib"><strong><code>zlib</code></strong></a></p></td>
         3379  +<td align="left" valign="top"><p class="table"></p></td>
         3380  +<td align="left" valign="top"><p class="table"></p></td>
         3381  +<td align="left" valign="top"><p class="table"></p></td>
         3382  +</tr>
         3383  +</tbody>
         3384  +</table>
         3385  +</div>
         3386  +</div>
         3387  +<div class="sect2">
         3388  +<h3 id="_alarm">alarm</h3>
         3389  +<div class="paragraph"><p><code><strong>alarm</strong> <em>seconds</em></code></p></div>
         3390  +<div class="paragraph"><p>Delivers the <code>SIGALRM</code> signal to the process after the given
         3391  +number of seconds. If the platform supports <em>ualarm(3)</em> then
         3392  +the argument may be a floating point value. Otherwise it must
         3393  +be an integer.</p></div>
         3394  +<div class="paragraph"><p>Note that unless a signal handler for <code>SIGALRM</code> has been installed
         3395  +(see <a href="#_signal"><strong><code>signal</code></strong></a>), the process will exit on this signal.</p></div>
         3396  +</div>
         3397  +<div class="sect2">
         3398  +<h3 id="_alias">alias</h3>
         3399  +<div class="paragraph"><p><code><strong>alias</strong> <em>name args...</em></code></p></div>
         3400  +<div class="paragraph"><p>Creates a single word alias (command) for one or more words. For example,
         3401  +the following creates an alias for the command <a href="#_info"><strong><code>info</code></strong></a> <code>exists</code>.</p></div>
         3402  +<div class="literalblock">
         3403  +<div class="content">
         3404  +<pre><code>alias e info exists
         3405  +if {[e var]} {
         3406  +  ...
         3407  +}</code></pre>
         3408  +</div></div>
         3409  +<div class="paragraph"><p><a href="#_alias"><strong><code>alias</code></strong></a> returns <code><em>name</em></code>, allowing it to be used with <a href="#_local"><strong><code>local</code></strong></a>.</p></div>
         3410  +<div class="paragraph"><p>See also <a href="#_proc"><strong><code>proc</code></strong></a>, <a href="#_curry"><strong><code>curry</code></strong></a>, <a href="#_lambda"><strong><code>lambda</code></strong></a>, <a href="#_local"><strong><code>local</code></strong></a>, <a href="#_info"><strong><code>info</code></strong></a> <code>alias</code>, <a href="#_exists"><strong><code>exists</code></strong></a> <code>-alias</code></p></div>
         3411  +</div>
         3412  +<div class="sect2">
         3413  +<h3 id="_append">append</h3>
         3414  +<div class="paragraph"><p><code><strong>append</strong> <em>varName value ?value value &#8230;?</em></code></p></div>
         3415  +<div class="paragraph"><p>Append all of the <code><em>value</em></code> arguments to the current value
         3416  +of variable <code><em>varName</em></code>.  If <code><em>varName</em></code> doesn&#8217;t exist,
         3417  +it is given a value equal to the concatenation of all the
         3418  +<code><em>value</em></code> arguments.</p></div>
         3419  +<div class="paragraph"><p>This command provides an efficient way to build up long
         3420  +variables incrementally.
         3421  +For example, "<a href="#_append"><strong><code>append</code></strong></a> <code>a $b</code>" is much more efficient than
         3422  +"<a href="#_set"><strong><code>set</code></strong></a> <code>a $a$b</code>" if <code>$a</code> is long.</p></div>
         3423  +</div>
         3424  +<div class="sect2">
         3425  +<h3 id="_apply">apply</h3>
         3426  +<div class="paragraph"><p><code><strong>apply</strong> <em>lambdaExpr ?arg1 arg2 ...?</em></code></p></div>
         3427  +<div class="paragraph"><p>The command <a href="#_apply"><strong><code>apply</code></strong></a> provides for anonymous procedure calls,
         3428  +similar to <a href="#_lambda"><strong><code>lambda</code></strong></a>, but without command name being created, even temporarily.</p></div>
         3429  +<div class="paragraph"><p>The function  <code><em>lambdaExpr</em></code> is a two element list <code>{args body}</code>
         3430  +or a three element list <code>{args body namespace}</code>. The first element
         3431  +args specifies the formal arguments, in the same form as the <a href="#_proc"><strong><code>proc</code></strong></a> and <a href="#_lambda"><strong><code>lambda</code></strong></a> commands.</p></div>
         3432  +</div>
         3433  +<div class="sect2">
         3434  +<h3 id="_array">array</h3>
         3435  +<div class="paragraph"><p><code><strong>array</strong> <em>option arrayName ?arg...?</em></code></p></div>
         3436  +<div class="paragraph"><p>This command performs one of several operations on the
         3437  +variable given by <code><em>arrayName</em></code>.</p></div>
         3438  +<div class="paragraph"><p>Note that in general, if the named array does not exist, the <code><em>array</em></code> command behaves
         3439  +as though the array exists but is empty.</p></div>
         3440  +<div class="paragraph"><p>The <code><em>option</em></code> argument determines what action is carried out by the
         3441  +command.  The legal <code><em>options</em></code> (which may be abbreviated) are:</p></div>
         3442  +<div class="dlist"><dl>
         3443  +<dt class="hdlist1">
         3444  +<code><strong>array exists</strong> <em>arrayName</em></code>
         3445  +</dt>
         3446  +<dd>
         3447  +<p>
         3448  +    Returns 1 if arrayName is an array variable, 0 if there is
         3449  +    no variable by that name.
         3450  +</p>
         3451  +</dd>
         3452  +<dt class="hdlist1">
         3453  +<code><strong>array get</strong> <em>arrayName ?pattern?</em></code>
         3454  +</dt>
         3455  +<dd>
         3456  +<p>
         3457  +    Returns a list containing pairs of elements. The first
         3458  +    element in each pair is the name of an element in arrayName
         3459  +    and the second element of each pair is the value of the
         3460  +    array element. The order of the pairs is undefined. If
         3461  +    pattern is not specified, then all of the elements of the
         3462  +    array are included in the result. If pattern is specified,
         3463  +    then only those elements whose names match pattern (using
         3464  +    the matching rules of string match) are included. If arrayName
         3465  +    isn&#8217;t the name of an array variable, or if the array contains
         3466  +    no elements, then an empty list is returned.
         3467  +</p>
         3468  +</dd>
         3469  +<dt class="hdlist1">
         3470  +<code><strong>array names</strong> <em>arrayName ?pattern?</em></code>
         3471  +</dt>
         3472  +<dd>
         3473  +<p>
         3474  +    Returns a list containing the names of all of the elements
         3475  +    in the array that match pattern. If pattern is omitted then
         3476  +    the command returns all of the element names in the array.
         3477  +    If pattern is specified, then only those elements whose
         3478  +    names match pattern (using the matching rules of string
         3479  +    match) are included. If there are no (matching) elements
         3480  +    in the array, or if arrayName isn&#8217;t the name of an array
         3481  +    variable, then an empty string is returned.
         3482  +</p>
         3483  +</dd>
         3484  +<dt class="hdlist1">
         3485  +<code><strong>array set</strong> <em>arrayName list</em></code>
         3486  +</dt>
         3487  +<dd>
         3488  +<p>
         3489  +    Sets the values of one or more elements in arrayName. list
         3490  +    must have a form like that returned by array get, consisting
         3491  +    of an even number of elements. Each odd-numbered element
         3492  +    in list is treated as an element name within arrayName, and
         3493  +    the following element in list is used as a new value for
         3494  +    that array element. If the variable arrayName does not
         3495  +    already exist and list is empty, arrayName is created with
         3496  +    an empty array value.
         3497  +</p>
         3498  +</dd>
         3499  +<dt class="hdlist1">
         3500  +<code><strong>array size</strong> <em>arrayName</em></code>
         3501  +</dt>
         3502  +<dd>
         3503  +<p>
         3504  +    Returns the number of elements in the array. If arrayName
         3505  +    isn&#8217;t the name of an array then 0 is returned.
         3506  +</p>
         3507  +</dd>
         3508  +<dt class="hdlist1">
         3509  +<code><strong>array unset</strong> <em>arrayName ?pattern?</em></code>
         3510  +</dt>
         3511  +<dd>
         3512  +<p>
         3513  +    Unsets all of the elements in the array that match pattern
         3514  +    (using the matching rules of string match). If arrayName
         3515  +    isn&#8217;t the name of an array variable or there are no matching
         3516  +    elements in the array, no error will be raised. If pattern
         3517  +    is omitted and arrayName is an array variable, then the
         3518  +    command unsets the entire array. The command always returns
         3519  +    an empty string.
         3520  +</p>
         3521  +</dd>
         3522  +</dl></div>
         3523  +</div>
         3524  +<div class="sect2">
         3525  +<h3 id="_break">break</h3>
         3526  +<div class="paragraph"><p><code><strong>break</strong></code></p></div>
         3527  +<div class="paragraph"><p>This command may be invoked only inside the body of a loop command
         3528  +such as <a href="#_for"><strong><code>for</code></strong></a> or <a href="#_foreach"><strong><code>foreach</code></strong></a> or <a href="#_while"><strong><code>while</code></strong></a>.  It returns a <code>JIM_BREAK</code> code
         3529  +to signal the innermost containing loop command to return immediately.</p></div>
         3530  +</div>
         3531  +<div class="sect2">
         3532  +<h3 id="_case">case</h3>
         3533  +<div class="paragraph"><p><code><strong>case</strong> <em>string</em> ?in? <em>patList body ?patList body &#8230;?</em></code></p></div>
         3534  +<div class="paragraph"><p><code><strong>case</strong> <em>string</em> ?in? {<em>patList body ?patList body &#8230;?</em>}</code></p></div>
         3535  +<div class="paragraph"><p><strong>Note</strong> that the <a href="#_switch"><strong><code>switch</code></strong></a> command should generally be preferred unless compatibility
         3536  +with Tcl 6.x is desired.</p></div>
         3537  +<div class="paragraph"><p>Match <code><em>string</em></code> against each of the <code><em>patList</em></code> arguments
         3538  +in order.  If one matches, then evaluate the following <code><em>body</em></code> argument
         3539  +by passing it recursively to the Tcl interpreter, and return the result
         3540  +of that evaluation.  Each <code><em>patList</em></code> argument consists of a single
         3541  +pattern or list of patterns.  Each pattern may contain any of the wild-cards
         3542  +described under <a href="#_string"><strong><code>string</code></strong></a> <code>match</code>.</p></div>
         3543  +<div class="paragraph"><p>If a <code><em>patList</em></code> argument is <code>default</code>, the corresponding body will be
         3544  +evaluated if no <code><em>patList</em></code> matches <code><em>string</em></code>.  If no <code><em>patList</em></code> argument
         3545  +matches <code><em>string</em></code> and no default is given, then the <a href="#_case"><strong><code>case</code></strong></a> command returns
         3546  +an empty string.</p></div>
         3547  +<div class="paragraph"><p>Two syntaxes are provided.</p></div>
         3548  +<div class="paragraph"><p>The first uses a separate argument for each of the patterns and commands;
         3549  +this form is convenient if substitutions are desired on some of the
         3550  +patterns or commands.</p></div>
         3551  +<div class="paragraph"><p>The second form places all of the patterns and commands together into
         3552  +a single argument; the argument must have proper list structure, with
         3553  +the elements of the list being the patterns and commands.</p></div>
         3554  +<div class="paragraph"><p>The second form makes it easy to construct multi-line case commands,
         3555  +since the braces around the whole list make it unnecessary to include a
         3556  +backslash at the end of each line.</p></div>
         3557  +<div class="paragraph"><p>Since the <code><em>patList</em></code> arguments are in braces in the second form,
         3558  +no command or variable substitutions are performed on them;  this makes
         3559  +the behaviour of the second form different than the first form in some
         3560  +cases.</p></div>
         3561  +<div class="paragraph"><p>Below are some examples of <a href="#_case"><strong><code>case</code></strong></a> commands:</p></div>
         3562  +<div class="literalblock">
         3563  +<div class="content">
         3564  +<pre><code>case abc in {a b} {format 1} default {format 2} a* {format 3}</code></pre>
         3565  +</div></div>
         3566  +<div class="paragraph"><p>will return <em>3</em>,</p></div>
         3567  +<div class="literalblock">
         3568  +<div class="content">
         3569  +<pre><code>case a in {
         3570  +    {a b} {format 1}
         3571  +    default {format 2}
         3572  +    a* {format 3}
         3573  +}</code></pre>
         3574  +</div></div>
         3575  +<div class="paragraph"><p>will return <em>1</em>, and</p></div>
         3576  +<div class="literalblock">
         3577  +<div class="content">
         3578  +<pre><code>case xyz {
         3579  +    {a b}
         3580  +        {format 1}
         3581  +    default
         3582  +        {format 2}
         3583  +    a*
         3584  +        {format 3}
         3585  +}</code></pre>
         3586  +</div></div>
         3587  +<div class="paragraph"><p>will return <em>2</em>.</p></div>
         3588  +</div>
         3589  +<div class="sect2">
         3590  +<h3 id="_catch">catch</h3>
         3591  +<div class="paragraph"><p><code><strong>catch</strong> ?-?no?<em>code ...</em>? ?--? <em>command ?resultVarName? ?optionsVarName?</em></code></p></div>
         3592  +<div class="paragraph"><p>The <a href="#_catch"><strong><code>catch</code></strong></a> command may be used to prevent errors from aborting
         3593  +command interpretation.  <a href="#_catch"><strong><code>catch</code></strong></a> evaluates <code><em>command</em></code>, and returns a
         3594  +<code>JIM_OK</code> code, regardless of any errors that might occur while
         3595  +executing <code><em>command</em></code> (with the possible exception of <code>JIM_SIGNAL</code> -
         3596  +see below).</p></div>
         3597  +<div class="paragraph"><p>The return value from <a href="#_catch"><strong><code>catch</code></strong></a> is a decimal string giving the code
         3598  +returned by the Tcl interpreter after executing <code><em>command</em></code>.  This
         3599  +will be <em>0</em> (<code>JIM_OK</code>) if there were no errors in <code><em>command</em></code>; otherwise
         3600  +it will have a non-zero value corresponding to one of the exceptional
         3601  +return codes (see jim.h for the definitions of code values, or the
         3602  +<a href="#_info"><strong><code>info</code></strong></a> <code>returncodes</code> command).</p></div>
         3603  +<div class="paragraph"><p>If the <code><em>resultVarName</em></code> argument is given, then it gives the name
         3604  +of a variable; <a href="#_catch"><strong><code>catch</code></strong></a> will set the value of the variable to the
         3605  +string returned from <code><em>command</em></code> (either a result or an error message).</p></div>
         3606  +<div class="paragraph"><p>If the <code><em>optionsVarName</em></code> argument is given, then it gives the name
         3607  +of a variable; <a href="#_catch"><strong><code>catch</code></strong></a> will set the value of the variable to a
         3608  +dictionary. For any return code other than <code>JIM_RETURN</code>, the value
         3609  +for the key <code>-code</code> will be set to the return code. For <code>JIM_RETURN</code>
         3610  +it will be set to the code given in <a href="#_return"><strong><code>return</code></strong></a> <code>-code</code>. Additionally,
         3611  +for the return code <code>JIM_ERR</code>, the value of the key <code>-errorinfo</code>
         3612  +will contain the current stack trace (the same result as <a href="#_info"><strong><code>info</code></strong></a> <code>stacktrace</code>),
         3613  +the value of the key <code>-errorcode</code> will contain the
         3614  +same value as the global variable $::errorCode, and the value of
         3615  +the key <code>-level</code> will be the current return level (see <a href="#_return"><strong><code>return</code></strong></a> <code>-level</code>).
         3616  +This can be useful to rethrow an error:</p></div>
         3617  +<div class="literalblock">
         3618  +<div class="content">
         3619  +<pre><code>if {[catch {...} msg opts]} {
         3620  +    ...maybe do something with the error...
         3621  +    incr opts(-level)
         3622  +    return {*}$opts $msg
         3623  +}</code></pre>
         3624  +</div></div>
         3625  +<div class="paragraph"><p>Normally <a href="#_catch"><strong><code>catch</code></strong></a> will <code><em>not</em></code> catch any of the codes <code>JIM_EXIT</code>, <code>JIM_EVAL</code> or <code>JIM_SIGNAL</code>.
         3626  +The set of codes which will be caught may be modified by specifying the one more codes before
         3627  +<code><em>command</em></code>.</p></div>
         3628  +<div class="paragraph"><p>e.g. To catch <code>JIM_EXIT</code> but not <code>JIM_BREAK</code> or <code>JIM_CONTINUE</code></p></div>
         3629  +<div class="literalblock">
         3630  +<div class="content">
         3631  +<pre><code>catch -exit -nobreak -nocontinue -- { ... }</code></pre>
         3632  +</div></div>
         3633  +<div class="paragraph"><p>The use of <code>--</code> is optional. It signifies that no more return code options follow.</p></div>
         3634  +<div class="paragraph"><p>Note that if a signal marked as <a href="#_signal"><strong><code>signal</code></strong></a> <code>handle</code> is caught with <a href="#_catch"><strong><code>catch</code></strong></a> <code>-signal</code>, the return value
         3635  +(stored in <code><em>resultVarName</em></code>) is name of the signal caught.</p></div>
         3636  +</div>
         3637  +<div class="sect2">
         3638  +<h3 id="_cd">cd</h3>
         3639  +<div class="paragraph"><p><code><strong>cd</strong> <em>dirName</em></code></p></div>
         3640  +<div class="paragraph"><p>Change the current working directory to <code><em>dirName</em></code>.</p></div>
         3641  +<div class="paragraph"><p>Returns an empty string.</p></div>
         3642  +<div class="paragraph"><p>This command can potentially be disruptive to an application, so it may
         3643  +be removed in some applications.</p></div>
         3644  +</div>
         3645  +<div class="sect2">
         3646  +<h3 id="_clock">clock</h3>
         3647  +<div class="dlist"><dl>
         3648  +<dt class="hdlist1">
         3649  +<code><strong>clock seconds</strong></code>
         3650  +</dt>
         3651  +<dd>
         3652  +<p>
         3653  +    Returns the current time as seconds since the epoch.
         3654  +</p>
         3655  +</dd>
         3656  +<dt class="hdlist1">
         3657  +<code><strong>clock clicks</strong></code>
         3658  +</dt>
         3659  +<dd>
         3660  +<p>
         3661  +    Returns the current time in &#8216;clicks&#8217;.
         3662  +</p>
         3663  +</dd>
         3664  +<dt class="hdlist1">
         3665  +<code><strong>clock microseconds</strong></code>
         3666  +</dt>
         3667  +<dd>
         3668  +<p>
         3669  +    Returns the current time in microseconds.
         3670  +</p>
         3671  +</dd>
         3672  +<dt class="hdlist1">
         3673  +<code><strong>clock milliseconds</strong></code>
         3674  +</dt>
         3675  +<dd>
         3676  +<p>
         3677  +    Returns the current time in milliseconds.
         3678  +</p>
         3679  +</dd>
         3680  +<dt class="hdlist1">
         3681  +<code><strong>clock format</strong> <em>seconds</em> ?<strong>-format</strong> <em>format?</em></code>
         3682  +</dt>
         3683  +<dd>
         3684  +<p>
         3685  +    Format the given time (seconds since the epoch) according to the given
         3686  +    format. See strftime(3) for supported formats.
         3687  +    If no format is supplied, "%c" is used.
         3688  +</p>
         3689  +</dd>
         3690  +<dt class="hdlist1">
         3691  +<code><strong>clock scan</strong> <em>str</em> <strong>-format</strong> <em>format</em></code>
         3692  +</dt>
         3693  +<dd>
         3694  +<p>
         3695  +    Scan the given time string using the given format string.
         3696  +    See strptime(3) for supported formats.
         3697  +</p>
         3698  +</dd>
         3699  +</dl></div>
         3700  +</div>
         3701  +<div class="sect2">
         3702  +<h3 id="_close">close</h3>
         3703  +<div class="paragraph"><p><code><strong>close</strong> <em>fileId</em></code></p></div>
         3704  +<div class="paragraph"><p><code><em>fileId</em> <strong>close</strong></code></p></div>
         3705  +<div class="paragraph"><p>Closes the file given by <code><em>fileId</em></code>.
         3706  +<code><em>fileId</em></code> must be the return value from a previous invocation
         3707  +of the <a href="#_open"><strong><code>open</code></strong></a> command; after this command, it should not be
         3708  +used anymore.</p></div>
         3709  +</div>
         3710  +<div class="sect2">
         3711  +<h3 id="_collect">collect</h3>
         3712  +<div class="paragraph"><p><code><strong>collect</strong></code></p></div>
         3713  +<div class="paragraph"><p>Normally reference garbage collection is automatically performed periodically.
         3714  +However it may be run immediately with the <a href="#_collect"><strong><code>collect</code></strong></a> command.</p></div>
         3715  +<div class="paragraph"><p>See GARBAGE COLLECTION, REFERENCES, LAMBDA FUNCTION for more detail.</p></div>
         3716  +</div>
         3717  +<div class="sect2">
         3718  +<h3 id="_concat">concat</h3>
         3719  +<div class="paragraph"><p><code><strong>concat</strong> <em>arg ?arg ...?</em></code></p></div>
         3720  +<div class="paragraph"><p>This command treats each argument as a list and concatenates them
         3721  +into a single list.  It permits any number of arguments.  For example,
         3722  +the command</p></div>
         3723  +<div class="literalblock">
         3724  +<div class="content">
         3725  +<pre><code>concat a b {c d e} {f {g h}}</code></pre>
         3726  +</div></div>
         3727  +<div class="paragraph"><p>will return</p></div>
         3728  +<div class="literalblock">
         3729  +<div class="content">
         3730  +<pre><code>a b c d e f {g h}</code></pre>
         3731  +</div></div>
         3732  +<div class="paragraph"><p>as its result.</p></div>
         3733  +</div>
         3734  +<div class="sect2">
         3735  +<h3 id="_continue">continue</h3>
         3736  +<div class="paragraph"><p><code><strong>continue</strong></code></p></div>
         3737  +<div class="paragraph"><p>This command may be invoked only inside the body of a loop command such
         3738  +as <a href="#_for"><strong><code>for</code></strong></a> or <a href="#_foreach"><strong><code>foreach</code></strong></a> or <a href="#_while"><strong><code>while</code></strong></a>.  It returns a  <code>JIM_CONTINUE</code> code to
         3739  +signal the innermost containing loop command to skip the remainder of
         3740  +the loop&#8217;s body but continue with the next iteration of the loop.</p></div>
         3741  +</div>
         3742  +<div class="sect2">
         3743  +<h3 id="_curry">curry</h3>
         3744  +<div class="paragraph"><p><code><strong>alias</strong> <em>args...</em></code></p></div>
         3745  +<div class="paragraph"><p>Similar to <a href="#_alias"><strong><code>alias</code></strong></a> except it creates an anonymous procedure (lambda) instead of
         3746  +a named procedure.</p></div>
         3747  +<div class="paragraph"><p>the following creates a local, unnamed alias for the command <a href="#_info"><strong><code>info</code></strong></a> <code>exists</code>.</p></div>
         3748  +<div class="literalblock">
         3749  +<div class="content">
         3750  +<pre><code>set e [local curry info exists]
         3751  +if {[$e var]} {
         3752  +  ...
         3753  +}</code></pre>
         3754  +</div></div>
         3755  +<div class="paragraph"><p><a href="#_curry"><strong><code>curry</code></strong></a> returns the name of the procedure.</p></div>
         3756  +<div class="paragraph"><p>See also <a href="#_proc"><strong><code>proc</code></strong></a>, <a href="#_alias"><strong><code>alias</code></strong></a>, <a href="#_lambda"><strong><code>lambda</code></strong></a>, <a href="#_local"><strong><code>local</code></strong></a>.</p></div>
         3757  +</div>
         3758  +<div class="sect2"></