My working unpac space for OCaml projects in development
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge opam/patches/sedlex

+9185
+1
vendor/opam/sedlex/.gitattributes
··· 1 + test/stress_test.ml text diff
+3
vendor/opam/sedlex/.github/CODEOWNERS
··· 1 + # These are the default owners for everything in the repo. They will 2 + # be requested for review when someone opens a pull request. 3 + * @alainfrisch @Drup @pmetzger
+69
vendor/opam/sedlex/.github/workflows/build.yml
··· 1 + name: build 2 + 3 + on: 4 + merge_group: 5 + pull_request: 6 + push: 7 + branches: 8 + - master 9 + schedule: 10 + # Prime the caches every Monday 11 + - cron: 0 1 * * MON 12 + 13 + concurrency: 14 + group: ${{ github.workflow }}-${{ github.ref }} 15 + cancel-in-progress: true 16 + 17 + jobs: 18 + build: 19 + strategy: 20 + fail-fast: false 21 + matrix: 22 + os: 23 + - ubuntu-latest 24 + - macos-latest 25 + - windows-latest 26 + ocaml-compiler: 27 + - 4.14.x 28 + - 5.x 29 + 30 + runs-on: ${{ matrix.os }} 31 + 32 + steps: 33 + - name: Set git to use LF 34 + run: | 35 + git config --global core.autocrlf false 36 + git config --global core.eol lf 37 + git config --global core.ignorecase false 38 + 39 + - name: Checkout code 40 + uses: actions/checkout@v4 41 + 42 + - name: Use OCaml ${{ matrix.ocaml-compiler }} 43 + uses: ocaml/setup-ocaml@v3 44 + with: 45 + ocaml-compiler: ${{ matrix.ocaml-compiler }} 46 + dune-cache: ${{ matrix.os == 'ubuntu-latest' }} 47 + 48 + - run: opam install . --with-test 49 + 50 + - run: opam exec -- make build 51 + 52 + - run: opam exec -- make test 53 + 54 + - run: opam exec -- git diff --exit-code 55 + 56 + lint-fmt: 57 + runs-on: ubuntu-latest 58 + steps: 59 + - name: Checkout code 60 + uses: actions/checkout@v4 61 + 62 + - name: Use OCaml 4.14.x 63 + uses: ocaml/setup-ocaml@v3 64 + with: 65 + ocaml-compiler: 4.14.x 66 + dune-cache: true 67 + 68 + - name: Lint fmt 69 + uses: ocaml/setup-ocaml/lint-fmt@v3
+20
vendor/opam/sedlex/.github/workflows/changelog.yml
··· 1 + name: Check changelog 2 + 3 + on: 4 + pull_request: 5 + branches: 6 + - master 7 + types: 8 + - labeled 9 + - opened 10 + - reopened 11 + - synchronize 12 + - unlabeled 13 + 14 + jobs: 15 + check-changelog: 16 + name: Check changelog 17 + runs-on: ubuntu-latest 18 + steps: 19 + - name: Check changelog 20 + uses: tarides/changelog-check-action@v1
+28
vendor/opam/sedlex/.github/workflows/doc.yml
··· 1 + name: Doc build 2 + 3 + on: 4 + push: 5 + branches: 6 + - master 7 + 8 + jobs: 9 + build_doc: 10 + runs-on: ubuntu-latest 11 + steps: 12 + - name: Checkout code 13 + uses: actions/checkout@v4 14 + - name: Setup OCaml 15 + uses: ocaml/setup-ocaml@v3 16 + with: 17 + ocaml-compiler: 4.14.x 18 + - name: Pin locally 19 + run: opam pin -y add --no-action . 20 + - name: Install locally 21 + run: opam install -y --with-doc sedlex 22 + - name: Build doc 23 + run: opam exec dune build @doc 24 + - name: Deploy doc 25 + uses: JamesIves/github-pages-deploy-action@4.1.4 26 + with: 27 + branch: gh-pages 28 + folder: _build/default/_doc/_html
+21
vendor/opam/sedlex/.gitignore
··· 1 + *.annot 2 + *.cmo 3 + *.cma 4 + *.cmi 5 + *.a 6 + *.o 7 + *.cmx 8 + *.cmxs 9 + *.cmxa 10 + *.exe 11 + *.install 12 + *.merlin 13 + .*sw* 14 + _build 15 + libdoc 16 + src/syntax/ppx_sedlex 17 + src/generator/data/*.txt 18 + examples/complement 19 + examples/tokenizer 20 + examples/subtraction 21 + _opam
+5
vendor/opam/sedlex/.merlin
··· 1 + PKG compiler-libs ppx_tools ppx_tools.metaquot 2 + 3 + SRC src/** 4 + 5 + B src/**
+10
vendor/opam/sedlex/.ocamlformat
··· 1 + version=0.27.0 2 + profile = conventional 3 + break-separators = after 4 + space-around-lists = false 5 + doc-comments = before 6 + match-indent = 2 7 + match-indent-nested = always 8 + parens-ite 9 + exp-grouping = preserve 10 + module-item-spacing = compact
+19
vendor/opam/sedlex/.travis.yml
··· 1 + language: c 2 + sudo: required 3 + install: test -e .travis.opam.sh || wget https://raw.githubusercontent.com/ocaml/ocaml-ci-scripts/master/.travis-opam.sh 4 + script: bash -ex .travis-opam.sh 5 + env: 6 + global: 7 + - PACKAGE=sedlex 8 + matrix: 9 + - OCAML_VERSION=4.04 10 + - OCAML_VERSION=4.05 11 + - OCAML_VERSION=4.06 12 + - OCAML_VERSION=4.07 13 + - OCAML_VERSION=4.08 14 + - OCAML_VERSION=4.09 15 + - OCAML_VERSION=4.10 16 + - OCAML_VERSION=4.11 17 + os: 18 + - linux 19 + - osx
+128
vendor/opam/sedlex/CHANGES.md
··· 1 + # 3.7 (2025-10-06) 2 + - Update to unicode 17.0.0 3 + 4 + # 3.6 (2025-01-05) 5 + - Fixed one of the ranges implementing 6 + Implement Corrigendum #1: UTF-8 Shortest Form 7 + for 4-bytes long characters (#171) 8 + 9 + # 3.5 (2025-05-29) 10 + - Implement Corrigendum #1: UTF-8 Shortest Form 11 + - Add utf8 support for string literal (#127) 12 + 13 + # 3.4 (2025-03-28) 14 + - Make the library compatibility with ppxlib.0.36 (#166) 15 + 16 + # 3.3 (2024-10-29) 17 + - Add support for unicode `16.0.0` (#157) 18 + - Add API for retrieving start and stop positions separately (#155) 19 + 20 + # 3.2 (2023-06-28): 21 + - Restore compatibility with OCaml 4.08 22 + - Use `Sedlexing.{Utf8,Utf16}.from_gen` to initialize UTF8 (resp. UTF16) lexing buffers from 23 + string. 24 + - Delay raising Malformed until actually reading the malformed part of the imput. (#140) 25 + - Count lines in all cases (#130). Previously, certain functions for initiating the 26 + lexical buffer would disable lines counting. 27 + - Check and fix invariants from Cset. The codebase was not respecting 28 + invariants documented in the Cset module which could break code 29 + relying on it. The code generated by sedlex.ppx could be affected. 30 + - Do not rely on comments from unicode UCD files 31 + - Add API to track position in bytes. Should be opt-in and backward compatible. (#146) 32 + 33 + # 3.1: 34 + - Fix directly nested sedlex matches (@smuenzel, PR #117, fixes: #12) 35 + - Use explicit stdlib in generated code (@hhugo, PR #122, fixes: #115) 36 + - Preserve location of lexbuf (@hhugo, PR #118, fixes: #19) 37 + - Don't use gen to consume channels (@hhugo, PR #124, fixes: #45) 38 + - New expect_test testsuite (@hhugo, PR #124) 39 + - Properly recognize malformed truncated input (@hhugo, PR #124) 40 + - Raise `Malformed` instead of `Invalid_arg` (@hhugo, PR #126, fixes: #91) 41 + - Updated unicode support to `15.0.0` 42 + 43 + # 3.0: 44 + - Dropped `Stream` api which was removed in `4.14.0` ahead of the `5.0` 45 + release. 46 + 47 + 2.6: 48 + - Adapted to ppxlib `0.26`, thanks to @pitag-ha 49 + 50 + 2.5: 51 + - Fix exponential compilation time, thanks to @mnxn for reporting in #97 52 + and @fangyi-zhou for fixing in #106 53 + - Update unicode support for `14.0.0`. 54 + 55 + # 2.4 56 + - Update `dune` support to `2.8`, add auto-generated `opam` files. 57 + - Optimize generated code, thanks to @bobzhang 58 + - Update unicode version to 13.0.0 59 + 60 + # 2.3 61 + - Switch to ppxlib 62 + 63 + # 2.2 64 + - Support for OCaml 4.08 65 + 66 + # 2.1 67 + - GPR#78: Auto-generate unicode data 68 + 69 + # 2.0 70 + - GPR#70: Switch to dune, opam v2 71 + - GPR#60: Breaking change: switch from int codepoints to Uchar.t 72 + codepoints 73 + - GPR#59: Track lexing position 74 + 75 + # 1.99.4 76 + - GPR#47: Switch to ocaml-migrate-parsetree (contributed by Adrien Guatto) 77 + - GPR#42: Added 'Rep' (repeat operator) (contributed by jpathy) 78 + 79 + # 1.99.3 80 + - Update to work with 4.03 (4.02 still supported) 81 + 82 + # 1.99.2 83 + - First official release of sedlex 84 + 85 + # 1.99.1 86 + - Support for new Ast_mapper registration API, follow OCaml trunk after 87 + the inclusion of the extension_point branch 88 + 89 + # 1.99 90 + - First version of sedlex. The history below refers to ulex, the ancestor 91 + or sedlex implemented with Camlp4. 92 + 93 + # 1.1 94 + - Generate (more) globally unique identifiers to avoid conflicts when open'ing another module 95 + processed by ulex (issue reported by Gerd Stolpmann) 96 + 97 + # 1.0 98 + - Update to the new Camlp4 and to ocamlbuild (release for OCaml 3.10 99 + only), by Nicolas Pouillard. 100 + 101 + # 0.8 102 + - Really make it work with OCaml 3.09. 103 + - Support for Utf-16. 104 + 105 + # 0.7 released May 24 2005 106 + - Bug fixes 107 + - Update to OCaml 3.09 (currently CVS). Still works with OCaml 3.08. 108 + - MIT-like license (used to LGPL) 109 + 110 + # 0.5 release Jul. 8 2004 111 + - Document how to use a custom implementation for lex buffers 112 + - Update to OCaml 3.08 113 + 114 + # 0.4 released Jan. 10 2004 115 + - Bug fix (accept 1114111 as valid Unicode code point) 116 + - Add the rollback function- 117 + # 0.3 released Oct. 8 2003 118 + - Bug fix 119 + - Add a new predefined class for ISO identifiers 120 + 121 + # 0.2 released Sep. 22 2003 122 + - Changed the names of predefined regexp 123 + - Fix max_code = 0x10ffff 124 + - Lexers that changes encoding on the fly 125 + - Documentation of the interface Ulexing 126 + 127 + # 0.1 released Sep. 20 2003 128 + - Initial release
+22
vendor/opam/sedlex/LICENSE
··· 1 + The MIT License (MIT) 2 + 3 + Copyright 2005, 2014 by Alain Frisch and LexiFi. 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining 6 + a copy of this software and associated documentation files (the 7 + "Software"), to deal in the Software without restriction, including 8 + without limitation the rights to use, copy, modify, merge, publish, 9 + distribute, sublicense, and/or sell copies of the Software, and to 10 + permit persons to whom the Software is furnished to do so, subject to 11 + the following conditions: 12 + 13 + The above copyright notice and this permission notice shall be 14 + included in all copies or substantial portions of the Software. 15 + 16 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+27
vendor/opam/sedlex/Makefile
··· 1 + # The package sedlex is released under the terms of an MIT-like license. 2 + # See the attached LICENSE file. 3 + # Copyright 2005, 2013 by Alain Frisch and LexiFi. 4 + 5 + INSTALL_ARGS := $(if $(PREFIX),--prefix $(PREFIX),) 6 + 7 + .PHONY: build install uninstall clean doc test all 8 + 9 + build: 10 + dune build @install 11 + 12 + install: 13 + dune install $(INSTALL_ARGS) 14 + 15 + uninstall: 16 + dune uninstall $(INSTALL_ARGS) 17 + 18 + clean: 19 + dune clean 20 + 21 + doc: 22 + dune build @doc 23 + 24 + test: 25 + dune build @runtest 26 + 27 + all: build test doc
+250
vendor/opam/sedlex/README.md
··· 1 + # sedlex 2 + 3 + [![build](https://github.com/ocaml-community/sedlex/actions/workflows/build.yml/badge.svg)](https://github.com/ocaml-community/sedlex/actions/workflows/build.yml) 4 + 5 + Unicode-friendly lexer generator for OCaml. 6 + 7 + This package is licensed by LexiFi under the terms of the MIT license. 8 + 9 + sedlex was originally written by Alain Frisch 10 + <alain.frisch@lexifi.com> and is now maintained as part of the 11 + ocaml-community repositories on github. 12 + 13 + ## API 14 + The API is documented [here](https://ocaml-community.github.io/sedlex). 15 + 16 + ## Overview 17 + 18 + sedlex is a lexer generator for OCaml, similar to ocamllex, but 19 + supporting Unicode. Contrary to ocamllex, lexer specifications for 20 + sedlex are embedded in regular OCaml source files. 21 + 22 + The lexers work with a new kind of "lexbuf", similar to ocamllex 23 + Lexing lexbufs, but designed to support Unicode, and abstracting from 24 + a specific encoding. A single lexer can work with arbitrary encodings 25 + of the input stream. 26 + 27 + sedlex is the successor of the ulex project. Contrary to ulex which 28 + was implemented as a Camlp4 syntax extension, sedlex is based on the 29 + new "-ppx" technology of OCaml, which allow rewriting OCaml parse 30 + trees through external rewriters. (And what a better name than "sed" 31 + for a rewriter?) 32 + 33 + As any -ppx rewriter, sedlex does not touch the concrete syntax of the 34 + language: lexer specifications are written in source file which comply 35 + with the standard grammar of OCaml programs. sedlex reuse the syntax 36 + for pattern matching in order to describe lexers (regular expressions 37 + are encoded within OCaml patterns). A nice consequence is that your 38 + editor (vi, emacs, ...) won't get confused (indentation, coloring) and 39 + you don't need to learn new priority rules. Moreover, sedlex is 40 + compatible with any front-end parsing technology: it works fine even 41 + if you use camlp4 or camlp5, with the standard or revised syntax. 42 + 43 + 44 + ## Lexer specifications 45 + 46 + 47 + sedlex adds a new kind of expression to OCaml: lexer definitions. 48 + The syntax for the new construction is: 49 + 50 + ```ocaml 51 + match%sedlex lexbuf with 52 + | R1 -> e1 53 + ... 54 + | Rn -> en 55 + | _ -> def 56 + ``` 57 + 58 + or: 59 + 60 + ```ocaml 61 + [%sedlex match lexbuf with 62 + | R1 -> e1 63 + ... 64 + | Rn -> en 65 + | _ -> def 66 + ] 67 + ``` 68 + 69 + (The first vertical bar is optional as in any OCaml pattern matching. 70 + Guard expressions are not allowed.) 71 + 72 + where: 73 + - lexbuf is an arbitrary lowercase identifier, which must refer to 74 + an existing value of type `Sedlexing.lexbuf`. 75 + - the Ri are regular expressions (see below); 76 + - the ei and def are OCaml expressions (called actions) of the same type 77 + (the type for the whole lexer definition). 78 + 79 + Unlike ocamllex, lexers work on stream of Unicode codepoints, not 80 + bytes. 81 + 82 + The actions can call functions from the Sedlexing module to extract 83 + (parts of) the matched lexeme, in the desired encoding. 84 + 85 + Regular expressions are syntactically OCaml patterns: 86 + 87 + - `"...."` (string constant): recognize the specified string. 88 + - `'....'` (character constant) : recognize the specified character 89 + - `i` (integer constant) : recognize the specified codepoint 90 + - `'...' .. '...'`: character range 91 + - `i1 .. i2`: range between two codepoints 92 + - `R1 | R2` : alternation 93 + - `R, R2, ..., Rn` : concatenation 94 + - `Star R` : Kleene star (0 or more repetition) 95 + - `Plus R` : equivalent to `R, R*` 96 + - `Opt R` : equivalent to `("" | R)` 97 + - `Rep (R, n)` : equivalent to `R{n}` 98 + - `Rep (R, n .. m)` : equivalent to `R{n, m}` 99 + - `Chars "..."` : recognize any character in the string 100 + - `Compl R` : assume that R is a single-character length regexp (see below) 101 + and recognize the complement set 102 + - `Sub (R1,R2)` : assume that R is a single-character length regexp (see below) 103 + and recognize the set of items in `R1` but not in `R2` ("subtract") 104 + - `Intersect (R1,R2)` : assume that `R` is a single-character length regexp (see 105 + below) and recognize the set of items which are in both `R1` and `R2` 106 + - `Utf8 R` : string literals inside R are assumed to be utf-8 encoded. 107 + - `Latin1 R` : string literals inside R are assumed to be latin1 encoded. 108 + - `Ascii R` : string literals inside R are assumed to be ascii encoded. 109 + - `lid` (lowercase identifier) : reference a named regexp (see below) 110 + 111 + A single-character length regexp is a regexp which does not contain (after 112 + expansion of references) concatenation, Star, Plus, Opt or string constants 113 + with a length different from one. 114 + 115 + 116 + 117 + Note: 118 + - The OCaml source is assumed to be encoded in UTF-8. 119 + - Strings and chars litterals will be interpreted in ASCII unless otherwise 120 + specified by the `Latin1`,`Ascii` and `Utf8` constructors in patterns. 121 + 122 + 123 + It is possible to define named regular expressions with the following 124 + construction, that can appear in place of a structure item: 125 + 126 + ```ocaml 127 + let lid = [%sedlex.regexp? R] 128 + ``` 129 + 130 + where lid is the regexp name to be defined and R its definition. The 131 + scope of the "lid" regular expression is the rest of the structure, 132 + after the definition. 133 + 134 + The same syntax can be used for local binding: 135 + 136 + ```ocaml 137 + let lid = [%sedlex.regexp? R] in 138 + body 139 + ``` 140 + 141 + The scope of "lid" is the body expression. 142 + 143 + 144 + ## Predefined regexps 145 + 146 + sedlex provides a set of predefined regexps: 147 + - any: any character 148 + - eof: the virtual end-of-file character 149 + - xml_letter, xml_digit, xml_extender, xml_base_char, xml_ideographic, 150 + xml_combining_char, xml_blank: as defined by the XML recommandation 151 + - tr8876_ident_char: characters names in identifiers from ISO TR8876 152 + - cc, cf, cn, co, cs, ll, lm, lo, lt, lu, mc, me, mn, nd, nl, no, pc, pd, 153 + pe, pf, pi, po, ps, sc, sk, sm, so, zl, zp, zs: as defined by the 154 + Unicode standard (categories) 155 + - alphabetic, ascii_hex_digit, hex_digit, id_continue, id_start, 156 + lowercase, math, other_alphabetic, other_lowercase, other_math, 157 + other_uppercase, uppercase, white_space, xid_continue, xid_start: as 158 + defined by the Unicode standard (properties) 159 + 160 + 161 + ## Running a lexer 162 + 163 + See the interface of the Sedlexing module for a description of how to 164 + create lexbuf values (from strings, stream or channels encoded in 165 + Latin1, utf8 or utf16, or from integer arrays or streams representing 166 + Unicode code points). 167 + 168 + It is possible to work with a custom implementation for lex buffers. 169 + To do this, you just have to ensure that a module called Sedlexing is 170 + in scope of your lexer specifications, and that it defines at least 171 + the following functions: start, next, mark, backtrack. See the interface 172 + of the Sedlexing module for more information. 173 + 174 + 175 + 176 + ## Using sedlex 177 + 178 + The quick way: 179 + 180 + ``` 181 + opam install sedlex 182 + ``` 183 + 184 + 185 + Otherwise, the first thing to do is to compile and install sedlex. 186 + You need a recent version of OCaml and [dune](https://dune.build/). 187 + 188 + ``` 189 + make 190 + ``` 191 + 192 + ### With findlib 193 + 194 + If you have findlib, you can use it to install and use sedlex. 195 + The name of the findlib package is "sedlex". 196 + 197 + Installation (after "make"): 198 + 199 + ``` 200 + make install 201 + ``` 202 + 203 + Compilation of OCaml files with lexer specifications: 204 + 205 + ``` 206 + ocamlfind ocamlc -c -package sedlex.ppx my_file.ml 207 + ``` 208 + 209 + When linking, you must also include the sedlex package: 210 + 211 + ``` 212 + ocamlfind ocamlc -o my_prog -linkpkg -package sedlex.ppx my_file.cmo 213 + ``` 214 + 215 + 216 + There is also a sedlex.ppx subpackage containing the code of the ppx 217 + filter. This can be used to build custom drivers (combining several ppx 218 + transformations in a single process). 219 + 220 + 221 + ### Without findlib 222 + 223 + You can use sedlex without findlib. To compile, you need to run the 224 + source file through -ppx rewriter ppx_sedlex. Moreover, you need to 225 + link the application with the runtime support library for sedlex 226 + (sedlexing.cma / sedlexing.cmxa). 227 + 228 + ### With utop 229 + 230 + Once sedlex is installed as per above, simply type 231 + 232 + ``` 233 + #require "sedlex.ppx";; 234 + ``` 235 + 236 + ## Examples 237 + 238 + The `examples/` subdirectory contains several samples of sedlex in use. 239 + 240 + ## Contributors 241 + 242 + - Benus Becker: implementation of Utf16 243 + - sghost: for Unicode 6.3 categories and properties 244 + - Peter Zotov: 245 + - improvements to the build system 246 + - switched parts of ppx_sedlex to using concrete syntax (with ppx_metaquot) 247 + - Steffen Smolka: port to dune 248 + - Romain Beauxis: 249 + - Implementation of the unicode table extractors 250 + - General maintenance
+26
vendor/opam/sedlex/dune-project
··· 1 + (lang dune 3.0) 2 + (version 3.7) 3 + (name sedlex) 4 + (source (github ocaml-community/sedlex)) 5 + (license MIT) 6 + (authors "Alain Frisch <alain.frisch@lexifi.com>" 7 + "https://github.com/ocaml-community/sedlex/graphs/contributors") 8 + (maintainers "Alain Frisch <alain.frisch@lexifi.com>") 9 + (homepage "https://github.com/ocaml-community/sedlex") 10 + 11 + (generate_opam_files true) 12 + (executables_implicit_empty_intf true) 13 + 14 + (package 15 + (name sedlex) 16 + (synopsis "An OCaml lexer generator for Unicode") 17 + (description "sedlex is a lexer generator for OCaml. It is similar to ocamllex, but supports 18 + Unicode. Unlike ocamllex, sedlex allows lexer specifications within regular 19 + OCaml source files. Lexing specific constructs are provided via a ppx syntax 20 + extension.") 21 + (depends 22 + (ocaml (>= 4.08)) 23 + dune 24 + (ppxlib (>= 0.26.0)) 25 + gen 26 + (ppx_expect :with-test)))
+20
vendor/opam/sedlex/examples/complement.ml
··· 1 + let ucase = [%sedlex.regexp? 'A' .. 'Z'] 2 + let lcase = [%sedlex.regexp? 'a' .. 'z'] 3 + 4 + let rec token buf = 5 + match%sedlex buf with 6 + | lcase -> 7 + print_char 'L'; 8 + token buf 9 + | Compl (ucase | lcase) -> 10 + print_char '?'; 11 + token buf 12 + | ucase -> 13 + print_char 'U'; 14 + token buf 15 + | eof -> print_endline "." 16 + | _ -> assert false 17 + 18 + let () = 19 + let lexbuf = Sedlexing.Latin1.from_string "Abc::DefG" in 20 + token lexbuf
+48
vendor/opam/sedlex/examples/dune
··· 1 + (executables 2 + (names tokenizer regressions complement subtraction repeat performance) 3 + (libraries sedlex sedlex_ppx) 4 + (preprocess 5 + (pps sedlex.ppx)) 6 + (flags :standard -w +39)) 7 + 8 + (rule 9 + (alias runtest) 10 + (deps 11 + (:< tokenizer.exe)) 12 + (action 13 + (run %{<}))) 14 + 15 + (rule 16 + (alias runtest) 17 + (deps 18 + (:< regressions.exe)) 19 + (action 20 + (run %{<}))) 21 + 22 + (rule 23 + (alias runtest) 24 + (deps 25 + (:< complement.exe)) 26 + (action 27 + (run %{<}))) 28 + 29 + (rule 30 + (alias runtest) 31 + (deps 32 + (:< subtraction.exe)) 33 + (action 34 + (run %{<}))) 35 + 36 + (rule 37 + (alias runtest) 38 + (deps 39 + (:< repeat.exe)) 40 + (action 41 + (run %{<}))) 42 + 43 + (rule 44 + (alias runtest) 45 + (deps 46 + (:< performance.exe)) 47 + (action 48 + (run %{<})))
+23
vendor/opam/sedlex/examples/performance.ml
··· 1 + let rec token buf = 2 + match%sedlex buf with any -> token buf | eof -> () | _ -> assert false 3 + 4 + let time f x = 5 + let rec acc f x = function 6 + | 0 -> f x 7 + | n -> 8 + f x |> ignore; 9 + acc f x (n - 1) 10 + in 11 + let t = Sys.time () in 12 + let fx = acc f x 10 in 13 + Printf.printf "Execution time: %fs\n" (Sys.time () -. t); 14 + fx 15 + 16 + let () = 17 + let long_str = String.make 1000000 '\n' in 18 + let token_from _ = 19 + let lexbuf = Sedlexing.Latin1.from_string long_str in 20 + (* let () = Sedlexing.set_curr_p lexbuf Lexing.dummy_pos in *) 21 + token lexbuf 22 + in 23 + time token_from long_str
+58
vendor/opam/sedlex/examples/regressions.ml
··· 1 + (* This test that unicode_old.ml is a strict sub-set of new unicode.ml. *) 2 + 3 + module CSet = Sedlex_ppx.Sedlex_cset 4 + module Unicode = Sedlex_ppx.Unicode 5 + 6 + let test_versions = ("16.0.0", "17.0.0") 7 + 8 + let regressions = 9 + [ (* Example *) 10 + (* ("lt", CSet.union (CSet.singleton 0x1c5) (CSet.singleton (0x0001))) *) ] 11 + 12 + let compare name (old_ : CSet.t) (new_ : CSet.t) = 13 + let diff = CSet.difference old_ new_ in 14 + let regressions = 15 + match List.assoc name regressions with 16 + | exception Not_found -> CSet.empty 17 + | x -> x 18 + in 19 + let regressions_intersect = CSet.intersection regressions old_ in 20 + let regressions = CSet.difference regressions regressions_intersect in 21 + let regressions_useless = CSet.difference regressions new_ in 22 + let diff = CSet.difference diff regressions in 23 + Seq.iter 24 + (fun x -> 25 + Printf.printf 26 + "Invalid regression for 0x%x in %s: already present in old set.\n" x 27 + name) 28 + (CSet.to_seq regressions_intersect); 29 + Seq.iter 30 + (fun x -> 31 + Printf.printf "Invalid regression for 0x%x in %s: absent in new set.\n" x 32 + name) 33 + (CSet.to_seq regressions_useless); 34 + Seq.iter 35 + (fun x -> Printf.printf "Code point 0x%x missing in %s!\n" x name) 36 + (CSet.to_seq diff) 37 + 38 + let test new_l (name, old_l) = 39 + (* Cn is for unassigned code points, which are allowed to be 40 + * used in future version. *) 41 + let old_l = Sedlex_utils.Cset.to_list old_l in 42 + if name <> "cn" then ( 43 + let old_l = 44 + List.fold_left 45 + (fun acc (a, b) -> CSet.union acc (CSet.interval a b)) 46 + CSet.empty old_l 47 + in 48 + compare name old_l (List.assoc name new_l)) 49 + 50 + let () = 51 + if (Unicode_old.version, Unicode.version) <> test_versions then 52 + failwith 53 + (Printf.sprintf "Test written for versions: %s => %s\n%!" 54 + Unicode_old.version Unicode.version); 55 + Printf.printf "Testing Unicode regression: %s => %s\n%!" Unicode_old.version 56 + Unicode.version; 57 + List.iter (test Unicode.Categories.list) Unicode_old.Categories.list; 58 + List.iter (test Unicode.Properties.list) Unicode_old.Properties.list
+26
vendor/opam/sedlex/examples/repeat.ml
··· 1 + let rec token buf = 2 + match%sedlex buf with 3 + | white_space -> 4 + print_endline "\tWhitespace"; 5 + token buf 6 + | 'a', Rep (white_space, 1) -> 7 + print_endline "a\n\tWhitespace"; 8 + token buf 9 + | Rep ("bc", 2) -> 10 + print_endline "bcbc"; 11 + token buf 12 + | Rep ("d", 1 .. 1) -> 13 + print_endline "d"; 14 + token buf 15 + | Rep ("ef", 1 .. 3) -> 16 + Printf.printf "%s\n" (Sedlexing.Utf8.lexeme buf); 17 + token buf 18 + | eof -> print_endline "\tEnd" 19 + | any -> 20 + print_endline "Other"; 21 + token buf 22 + | _ -> failwith "Internal failure: Reached impossible place" 23 + 24 + let () = 25 + let lexbuf = Sedlexing.Utf8.from_string "a bcbc d ef efef efefef" in 26 + token lexbuf
+23
vendor/opam/sedlex/examples/subtraction.ml
··· 1 + let rec token buf = 2 + match%sedlex buf with 3 + | white_space -> 4 + print_endline "\tWhitespace"; 5 + token buf 6 + | Sub (Chars "ab", "b") -> 7 + print_endline "a"; 8 + token buf 9 + | Chars "ab" | "c" -> 10 + print_endline "abc"; 11 + token buf 12 + | Intersect ("d", Chars "abd") -> 13 + print_endline "d"; 14 + token buf 15 + | eof -> print_endline "\tEnd" 16 + | any -> 17 + print_endline "Other"; 18 + token buf 19 + | _ -> failwith "Internal failure: Reached impossible place" 20 + 21 + let () = 22 + let lexbuf = Sedlexing.Utf8.from_string "a b c d e" in 23 + token lexbuf
+23
vendor/opam/sedlex/examples/tokenizer.ml
··· 1 + let digit = [%sedlex.regexp? '0' .. '9'] 2 + let number = [%sedlex.regexp? Plus digit] 3 + 4 + let rec token buf = 5 + let letter = [%sedlex.regexp? 'a' .. 'z' | 'A' .. 'Z'] in 6 + match%sedlex buf with 7 + | number -> 8 + Printf.printf "Number %s\n" (Sedlexing.Latin1.lexeme buf); 9 + token buf 10 + | letter, Star ('A' .. 'Z' | 'a' .. 'z' | digit) -> 11 + Printf.printf "Ident %s\n" (Sedlexing.Latin1.lexeme buf); 12 + token buf 13 + | Plus xml_blank -> token buf 14 + | Plus (Chars "+*-/") -> 15 + Printf.printf "Op %s\n" (Sedlexing.Latin1.lexeme buf); 16 + token buf 17 + | 128 .. 255 -> print_endline "Non ASCII" 18 + | eof -> print_endline "EOF" 19 + | _ -> failwith "Unexpected character" 20 + 21 + let () = 22 + let lexbuf = Sedlexing.Latin1.from_string "foobar A123Bfoo ++123Xbar/foo" in 23 + token lexbuf
+2164
vendor/opam/sedlex/examples/unicode_old.ml
··· 1 + [@@@ocamlformat "disable"] 2 + 3 + (* This file was automatically generated, do not edit. *) 4 + (* Edit gen_unicode.ml.inc instead. *) 5 + 6 + 7 + 8 + let version = "16.0.0" 9 + 10 + module Categories = struct 11 + 12 + let cc = Sedlex_utils.Cset.of_list 13 + [0x0, 0x1f; 0x7f, 0x9f] 14 + 15 + let cf = Sedlex_utils.Cset.of_list 16 + [0xad, 0xad; 0x600, 0x605; 0x61c, 0x61c; 0x6dd, 0x6dd; 0x70f, 0x70f; 17 + 0x890, 0x891; 0x8e2, 0x8e2; 0x180e, 0x180e; 0x200b, 0x200f; 0x202a, 0x202e; 18 + 0x2060, 0x2064; 0x2066, 0x206f; 0xfeff, 0xfeff; 0xfff9, 0xfffb; 0x110bd, 0x110bd; 19 + 0x110cd, 0x110cd; 0x13430, 0x1343f; 0x1bca0, 0x1bca3; 0x1d173, 0x1d17a; 0xe0001, 0xe0001; 20 + 0xe0020, 0xe007f] 21 + 22 + let cn = Sedlex_utils.Cset.of_list 23 + [0x378, 0x379; 0x380, 0x383; 0x38b, 0x38b; 0x38d, 0x38d; 0x3a2, 0x3a2; 24 + 0x530, 0x530; 0x557, 0x558; 0x58b, 0x58c; 0x590, 0x590; 0x5c8, 0x5cf; 25 + 0x5eb, 0x5ee; 0x5f5, 0x5ff; 0x70e, 0x70e; 0x74b, 0x74c; 0x7b2, 0x7bf; 26 + 0x7fb, 0x7fc; 0x82e, 0x82f; 0x83f, 0x83f; 0x85c, 0x85d; 0x85f, 0x85f; 27 + 0x86b, 0x86f; 0x88f, 0x88f; 0x892, 0x896; 0x984, 0x984; 0x98d, 0x98e; 28 + 0x991, 0x992; 0x9a9, 0x9a9; 0x9b1, 0x9b1; 0x9b3, 0x9b5; 0x9ba, 0x9bb; 29 + 0x9c5, 0x9c6; 0x9c9, 0x9ca; 0x9cf, 0x9d6; 0x9d8, 0x9db; 0x9de, 0x9de; 30 + 0x9e4, 0x9e5; 0x9ff, 0xa00; 0xa04, 0xa04; 0xa0b, 0xa0e; 0xa11, 0xa12; 31 + 0xa29, 0xa29; 0xa31, 0xa31; 0xa34, 0xa34; 0xa37, 0xa37; 0xa3a, 0xa3b; 32 + 0xa3d, 0xa3d; 0xa43, 0xa46; 0xa49, 0xa4a; 0xa4e, 0xa50; 0xa52, 0xa58; 33 + 0xa5d, 0xa5d; 0xa5f, 0xa65; 0xa77, 0xa80; 0xa84, 0xa84; 0xa8e, 0xa8e; 34 + 0xa92, 0xa92; 0xaa9, 0xaa9; 0xab1, 0xab1; 0xab4, 0xab4; 0xaba, 0xabb; 35 + 0xac6, 0xac6; 0xaca, 0xaca; 0xace, 0xacf; 0xad1, 0xadf; 0xae4, 0xae5; 36 + 0xaf2, 0xaf8; 0xb00, 0xb00; 0xb04, 0xb04; 0xb0d, 0xb0e; 0xb11, 0xb12; 37 + 0xb29, 0xb29; 0xb31, 0xb31; 0xb34, 0xb34; 0xb3a, 0xb3b; 0xb45, 0xb46; 38 + 0xb49, 0xb4a; 0xb4e, 0xb54; 0xb58, 0xb5b; 0xb5e, 0xb5e; 0xb64, 0xb65; 39 + 0xb78, 0xb81; 0xb84, 0xb84; 0xb8b, 0xb8d; 0xb91, 0xb91; 0xb96, 0xb98; 40 + 0xb9b, 0xb9b; 0xb9d, 0xb9d; 0xba0, 0xba2; 0xba5, 0xba7; 0xbab, 0xbad; 41 + 0xbba, 0xbbd; 0xbc3, 0xbc5; 0xbc9, 0xbc9; 0xbce, 0xbcf; 0xbd1, 0xbd6; 42 + 0xbd8, 0xbe5; 0xbfb, 0xbff; 0xc0d, 0xc0d; 0xc11, 0xc11; 0xc29, 0xc29; 43 + 0xc3a, 0xc3b; 0xc45, 0xc45; 0xc49, 0xc49; 0xc4e, 0xc54; 0xc57, 0xc57; 44 + 0xc5b, 0xc5c; 0xc5e, 0xc5f; 0xc64, 0xc65; 0xc70, 0xc76; 0xc8d, 0xc8d; 45 + 0xc91, 0xc91; 0xca9, 0xca9; 0xcb4, 0xcb4; 0xcba, 0xcbb; 0xcc5, 0xcc5; 46 + 0xcc9, 0xcc9; 0xcce, 0xcd4; 0xcd7, 0xcdc; 0xcdf, 0xcdf; 0xce4, 0xce5; 47 + 0xcf0, 0xcf0; 0xcf4, 0xcff; 0xd0d, 0xd0d; 0xd11, 0xd11; 0xd45, 0xd45; 48 + 0xd49, 0xd49; 0xd50, 0xd53; 0xd64, 0xd65; 0xd80, 0xd80; 0xd84, 0xd84; 49 + 0xd97, 0xd99; 0xdb2, 0xdb2; 0xdbc, 0xdbc; 0xdbe, 0xdbf; 0xdc7, 0xdc9; 50 + 0xdcb, 0xdce; 0xdd5, 0xdd5; 0xdd7, 0xdd7; 0xde0, 0xde5; 0xdf0, 0xdf1; 51 + 0xdf5, 0xe00; 0xe3b, 0xe3e; 0xe5c, 0xe80; 0xe83, 0xe83; 0xe85, 0xe85; 52 + 0xe8b, 0xe8b; 0xea4, 0xea4; 0xea6, 0xea6; 0xebe, 0xebf; 0xec5, 0xec5; 53 + 0xec7, 0xec7; 0xecf, 0xecf; 0xeda, 0xedb; 0xee0, 0xeff; 0xf48, 0xf48; 54 + 0xf6d, 0xf70; 0xf98, 0xf98; 0xfbd, 0xfbd; 0xfcd, 0xfcd; 0xfdb, 0xfff; 55 + 0x10c6, 0x10c6; 0x10c8, 0x10cc; 0x10ce, 0x10cf; 0x1249, 0x1249; 0x124e, 0x124f; 56 + 0x1257, 0x1257; 0x1259, 0x1259; 0x125e, 0x125f; 0x1289, 0x1289; 0x128e, 0x128f; 57 + 0x12b1, 0x12b1; 0x12b6, 0x12b7; 0x12bf, 0x12bf; 0x12c1, 0x12c1; 0x12c6, 0x12c7; 58 + 0x12d7, 0x12d7; 0x1311, 0x1311; 0x1316, 0x1317; 0x135b, 0x135c; 0x137d, 0x137f; 59 + 0x139a, 0x139f; 0x13f6, 0x13f7; 0x13fe, 0x13ff; 0x169d, 0x169f; 0x16f9, 0x16ff; 60 + 0x1716, 0x171e; 0x1737, 0x173f; 0x1754, 0x175f; 0x176d, 0x176d; 0x1771, 0x1771; 61 + 0x1774, 0x177f; 0x17de, 0x17df; 0x17ea, 0x17ef; 0x17fa, 0x17ff; 0x181a, 0x181f; 62 + 0x1879, 0x187f; 0x18ab, 0x18af; 0x18f6, 0x18ff; 0x191f, 0x191f; 0x192c, 0x192f; 63 + 0x193c, 0x193f; 0x1941, 0x1943; 0x196e, 0x196f; 0x1975, 0x197f; 0x19ac, 0x19af; 64 + 0x19ca, 0x19cf; 0x19db, 0x19dd; 0x1a1c, 0x1a1d; 0x1a5f, 0x1a5f; 0x1a7d, 0x1a7e; 65 + 0x1a8a, 0x1a8f; 0x1a9a, 0x1a9f; 0x1aae, 0x1aaf; 0x1acf, 0x1aff; 0x1b4d, 0x1b4d; 66 + 0x1bf4, 0x1bfb; 0x1c38, 0x1c3a; 0x1c4a, 0x1c4c; 0x1c8b, 0x1c8f; 0x1cbb, 0x1cbc; 67 + 0x1cc8, 0x1ccf; 0x1cfb, 0x1cff; 0x1f16, 0x1f17; 0x1f1e, 0x1f1f; 0x1f46, 0x1f47; 68 + 0x1f4e, 0x1f4f; 0x1f58, 0x1f58; 0x1f5a, 0x1f5a; 0x1f5c, 0x1f5c; 0x1f5e, 0x1f5e; 69 + 0x1f7e, 0x1f7f; 0x1fb5, 0x1fb5; 0x1fc5, 0x1fc5; 0x1fd4, 0x1fd5; 0x1fdc, 0x1fdc; 70 + 0x1ff0, 0x1ff1; 0x1ff5, 0x1ff5; 0x1fff, 0x1fff; 0x2065, 0x2065; 0x2072, 0x2073; 71 + 0x208f, 0x208f; 0x209d, 0x209f; 0x20c1, 0x20cf; 0x20f1, 0x20ff; 0x218c, 0x218f; 72 + 0x242a, 0x243f; 0x244b, 0x245f; 0x2b74, 0x2b75; 0x2b96, 0x2b96; 0x2cf4, 0x2cf8; 73 + 0x2d26, 0x2d26; 0x2d28, 0x2d2c; 0x2d2e, 0x2d2f; 0x2d68, 0x2d6e; 0x2d71, 0x2d7e; 74 + 0x2d97, 0x2d9f; 0x2da7, 0x2da7; 0x2daf, 0x2daf; 0x2db7, 0x2db7; 0x2dbf, 0x2dbf; 75 + 0x2dc7, 0x2dc7; 0x2dcf, 0x2dcf; 0x2dd7, 0x2dd7; 0x2ddf, 0x2ddf; 0x2e5e, 0x2e7f; 76 + 0x2e9a, 0x2e9a; 0x2ef4, 0x2eff; 0x2fd6, 0x2fef; 0x3040, 0x3040; 0x3097, 0x3098; 77 + 0x3100, 0x3104; 0x3130, 0x3130; 0x318f, 0x318f; 0x31e6, 0x31ee; 0x321f, 0x321f; 78 + 0xa48d, 0xa48f; 0xa4c7, 0xa4cf; 0xa62c, 0xa63f; 0xa6f8, 0xa6ff; 0xa7ce, 0xa7cf; 79 + 0xa7d2, 0xa7d2; 0xa7d4, 0xa7d4; 0xa7dd, 0xa7f1; 0xa82d, 0xa82f; 0xa83a, 0xa83f; 80 + 0xa878, 0xa87f; 0xa8c6, 0xa8cd; 0xa8da, 0xa8df; 0xa954, 0xa95e; 0xa97d, 0xa97f; 81 + 0xa9ce, 0xa9ce; 0xa9da, 0xa9dd; 0xa9ff, 0xa9ff; 0xaa37, 0xaa3f; 0xaa4e, 0xaa4f; 82 + 0xaa5a, 0xaa5b; 0xaac3, 0xaada; 0xaaf7, 0xab00; 0xab07, 0xab08; 0xab0f, 0xab10; 83 + 0xab17, 0xab1f; 0xab27, 0xab27; 0xab2f, 0xab2f; 0xab6c, 0xab6f; 0xabee, 0xabef; 84 + 0xabfa, 0xabff; 0xd7a4, 0xd7af; 0xd7c7, 0xd7ca; 0xd7fc, 0xd7ff; 0xfa6e, 0xfa6f; 85 + 0xfada, 0xfaff; 0xfb07, 0xfb12; 0xfb18, 0xfb1c; 0xfb37, 0xfb37; 0xfb3d, 0xfb3d; 86 + 0xfb3f, 0xfb3f; 0xfb42, 0xfb42; 0xfb45, 0xfb45; 0xfbc3, 0xfbd2; 0xfd90, 0xfd91; 87 + 0xfdc8, 0xfdce; 0xfdd0, 0xfdef; 0xfe1a, 0xfe1f; 0xfe53, 0xfe53; 0xfe67, 0xfe67; 88 + 0xfe6c, 0xfe6f; 0xfe75, 0xfe75; 0xfefd, 0xfefe; 0xff00, 0xff00; 0xffbf, 0xffc1; 89 + 0xffc8, 0xffc9; 0xffd0, 0xffd1; 0xffd8, 0xffd9; 0xffdd, 0xffdf; 0xffe7, 0xffe7; 90 + 0xffef, 0xfff8; 0xfffe, 0xffff; 0x1000c, 0x1000c; 0x10027, 0x10027; 0x1003b, 0x1003b; 91 + 0x1003e, 0x1003e; 0x1004e, 0x1004f; 0x1005e, 0x1007f; 0x100fb, 0x100ff; 0x10103, 0x10106; 92 + 0x10134, 0x10136; 0x1018f, 0x1018f; 0x1019d, 0x1019f; 0x101a1, 0x101cf; 0x101fe, 0x1027f; 93 + 0x1029d, 0x1029f; 0x102d1, 0x102df; 0x102fc, 0x102ff; 0x10324, 0x1032c; 0x1034b, 0x1034f; 94 + 0x1037b, 0x1037f; 0x1039e, 0x1039e; 0x103c4, 0x103c7; 0x103d6, 0x103ff; 0x1049e, 0x1049f; 95 + 0x104aa, 0x104af; 0x104d4, 0x104d7; 0x104fc, 0x104ff; 0x10528, 0x1052f; 0x10564, 0x1056e; 96 + 0x1057b, 0x1057b; 0x1058b, 0x1058b; 0x10593, 0x10593; 0x10596, 0x10596; 0x105a2, 0x105a2; 97 + 0x105b2, 0x105b2; 0x105ba, 0x105ba; 0x105bd, 0x105bf; 0x105f4, 0x105ff; 0x10737, 0x1073f; 98 + 0x10756, 0x1075f; 0x10768, 0x1077f; 0x10786, 0x10786; 0x107b1, 0x107b1; 0x107bb, 0x107ff; 99 + 0x10806, 0x10807; 0x10809, 0x10809; 0x10836, 0x10836; 0x10839, 0x1083b; 0x1083d, 0x1083e; 100 + 0x10856, 0x10856; 0x1089f, 0x108a6; 0x108b0, 0x108df; 0x108f3, 0x108f3; 0x108f6, 0x108fa; 101 + 0x1091c, 0x1091e; 0x1093a, 0x1093e; 0x10940, 0x1097f; 0x109b8, 0x109bb; 0x109d0, 0x109d1; 102 + 0x10a04, 0x10a04; 0x10a07, 0x10a0b; 0x10a14, 0x10a14; 0x10a18, 0x10a18; 0x10a36, 0x10a37; 103 + 0x10a3b, 0x10a3e; 0x10a49, 0x10a4f; 0x10a59, 0x10a5f; 0x10aa0, 0x10abf; 0x10ae7, 0x10aea; 104 + 0x10af7, 0x10aff; 0x10b36, 0x10b38; 0x10b56, 0x10b57; 0x10b73, 0x10b77; 0x10b92, 0x10b98; 105 + 0x10b9d, 0x10ba8; 0x10bb0, 0x10bff; 0x10c49, 0x10c7f; 0x10cb3, 0x10cbf; 0x10cf3, 0x10cf9; 106 + 0x10d28, 0x10d2f; 0x10d3a, 0x10d3f; 0x10d66, 0x10d68; 0x10d86, 0x10d8d; 0x10d90, 0x10e5f; 107 + 0x10e7f, 0x10e7f; 0x10eaa, 0x10eaa; 0x10eae, 0x10eaf; 0x10eb2, 0x10ec1; 0x10ec5, 0x10efb; 108 + 0x10f28, 0x10f2f; 0x10f5a, 0x10f6f; 0x10f8a, 0x10faf; 0x10fcc, 0x10fdf; 0x10ff7, 0x10fff; 109 + 0x1104e, 0x11051; 0x11076, 0x1107e; 0x110c3, 0x110cc; 0x110ce, 0x110cf; 0x110e9, 0x110ef; 110 + 0x110fa, 0x110ff; 0x11135, 0x11135; 0x11148, 0x1114f; 0x11177, 0x1117f; 0x111e0, 0x111e0; 111 + 0x111f5, 0x111ff; 0x11212, 0x11212; 0x11242, 0x1127f; 0x11287, 0x11287; 0x11289, 0x11289; 112 + 0x1128e, 0x1128e; 0x1129e, 0x1129e; 0x112aa, 0x112af; 0x112eb, 0x112ef; 0x112fa, 0x112ff; 113 + 0x11304, 0x11304; 0x1130d, 0x1130e; 0x11311, 0x11312; 0x11329, 0x11329; 0x11331, 0x11331; 114 + 0x11334, 0x11334; 0x1133a, 0x1133a; 0x11345, 0x11346; 0x11349, 0x1134a; 0x1134e, 0x1134f; 115 + 0x11351, 0x11356; 0x11358, 0x1135c; 0x11364, 0x11365; 0x1136d, 0x1136f; 0x11375, 0x1137f; 116 + 0x1138a, 0x1138a; 0x1138c, 0x1138d; 0x1138f, 0x1138f; 0x113b6, 0x113b6; 0x113c1, 0x113c1; 117 + 0x113c3, 0x113c4; 0x113c6, 0x113c6; 0x113cb, 0x113cb; 0x113d6, 0x113d6; 0x113d9, 0x113e0; 118 + 0x113e3, 0x113ff; 0x1145c, 0x1145c; 0x11462, 0x1147f; 0x114c8, 0x114cf; 0x114da, 0x1157f; 119 + 0x115b6, 0x115b7; 0x115de, 0x115ff; 0x11645, 0x1164f; 0x1165a, 0x1165f; 0x1166d, 0x1167f; 120 + 0x116ba, 0x116bf; 0x116ca, 0x116cf; 0x116e4, 0x116ff; 0x1171b, 0x1171c; 0x1172c, 0x1172f; 121 + 0x11747, 0x117ff; 0x1183c, 0x1189f; 0x118f3, 0x118fe; 0x11907, 0x11908; 0x1190a, 0x1190b; 122 + 0x11914, 0x11914; 0x11917, 0x11917; 0x11936, 0x11936; 0x11939, 0x1193a; 0x11947, 0x1194f; 123 + 0x1195a, 0x1199f; 0x119a8, 0x119a9; 0x119d8, 0x119d9; 0x119e5, 0x119ff; 0x11a48, 0x11a4f; 124 + 0x11aa3, 0x11aaf; 0x11af9, 0x11aff; 0x11b0a, 0x11bbf; 0x11be2, 0x11bef; 0x11bfa, 0x11bff; 125 + 0x11c09, 0x11c09; 0x11c37, 0x11c37; 0x11c46, 0x11c4f; 0x11c6d, 0x11c6f; 0x11c90, 0x11c91; 126 + 0x11ca8, 0x11ca8; 0x11cb7, 0x11cff; 0x11d07, 0x11d07; 0x11d0a, 0x11d0a; 0x11d37, 0x11d39; 127 + 0x11d3b, 0x11d3b; 0x11d3e, 0x11d3e; 0x11d48, 0x11d4f; 0x11d5a, 0x11d5f; 0x11d66, 0x11d66; 128 + 0x11d69, 0x11d69; 0x11d8f, 0x11d8f; 0x11d92, 0x11d92; 0x11d99, 0x11d9f; 0x11daa, 0x11edf; 129 + 0x11ef9, 0x11eff; 0x11f11, 0x11f11; 0x11f3b, 0x11f3d; 0x11f5b, 0x11faf; 0x11fb1, 0x11fbf; 130 + 0x11ff2, 0x11ffe; 0x1239a, 0x123ff; 0x1246f, 0x1246f; 0x12475, 0x1247f; 0x12544, 0x12f8f; 131 + 0x12ff3, 0x12fff; 0x13456, 0x1345f; 0x143fb, 0x143ff; 0x14647, 0x160ff; 0x1613a, 0x167ff; 132 + 0x16a39, 0x16a3f; 0x16a5f, 0x16a5f; 0x16a6a, 0x16a6d; 0x16abf, 0x16abf; 0x16aca, 0x16acf; 133 + 0x16aee, 0x16aef; 0x16af6, 0x16aff; 0x16b46, 0x16b4f; 0x16b5a, 0x16b5a; 0x16b62, 0x16b62; 134 + 0x16b78, 0x16b7c; 0x16b90, 0x16d3f; 0x16d7a, 0x16e3f; 0x16e9b, 0x16eff; 0x16f4b, 0x16f4e; 135 + 0x16f88, 0x16f8e; 0x16fa0, 0x16fdf; 0x16fe5, 0x16fef; 0x16ff2, 0x16fff; 0x187f8, 0x187ff; 136 + 0x18cd6, 0x18cfe; 0x18d09, 0x1afef; 0x1aff4, 0x1aff4; 0x1affc, 0x1affc; 0x1afff, 0x1afff; 137 + 0x1b123, 0x1b131; 0x1b133, 0x1b14f; 0x1b153, 0x1b154; 0x1b156, 0x1b163; 0x1b168, 0x1b16f; 138 + 0x1b2fc, 0x1bbff; 0x1bc6b, 0x1bc6f; 0x1bc7d, 0x1bc7f; 0x1bc89, 0x1bc8f; 0x1bc9a, 0x1bc9b; 139 + 0x1bca4, 0x1cbff; 0x1ccfa, 0x1ccff; 0x1ceb4, 0x1ceff; 0x1cf2e, 0x1cf2f; 0x1cf47, 0x1cf4f; 140 + 0x1cfc4, 0x1cfff; 0x1d0f6, 0x1d0ff; 0x1d127, 0x1d128; 0x1d1eb, 0x1d1ff; 0x1d246, 0x1d2bf; 141 + 0x1d2d4, 0x1d2df; 0x1d2f4, 0x1d2ff; 0x1d357, 0x1d35f; 0x1d379, 0x1d3ff; 0x1d455, 0x1d455; 142 + 0x1d49d, 0x1d49d; 0x1d4a0, 0x1d4a1; 0x1d4a3, 0x1d4a4; 0x1d4a7, 0x1d4a8; 0x1d4ad, 0x1d4ad; 143 + 0x1d4ba, 0x1d4ba; 0x1d4bc, 0x1d4bc; 0x1d4c4, 0x1d4c4; 0x1d506, 0x1d506; 0x1d50b, 0x1d50c; 144 + 0x1d515, 0x1d515; 0x1d51d, 0x1d51d; 0x1d53a, 0x1d53a; 0x1d53f, 0x1d53f; 0x1d545, 0x1d545; 145 + 0x1d547, 0x1d549; 0x1d551, 0x1d551; 0x1d6a6, 0x1d6a7; 0x1d7cc, 0x1d7cd; 0x1da8c, 0x1da9a; 146 + 0x1daa0, 0x1daa0; 0x1dab0, 0x1deff; 0x1df1f, 0x1df24; 0x1df2b, 0x1dfff; 0x1e007, 0x1e007; 147 + 0x1e019, 0x1e01a; 0x1e022, 0x1e022; 0x1e025, 0x1e025; 0x1e02b, 0x1e02f; 0x1e06e, 0x1e08e; 148 + 0x1e090, 0x1e0ff; 0x1e12d, 0x1e12f; 0x1e13e, 0x1e13f; 0x1e14a, 0x1e14d; 0x1e150, 0x1e28f; 149 + 0x1e2af, 0x1e2bf; 0x1e2fa, 0x1e2fe; 0x1e300, 0x1e4cf; 0x1e4fa, 0x1e5cf; 0x1e5fb, 0x1e5fe; 150 + 0x1e600, 0x1e7df; 0x1e7e7, 0x1e7e7; 0x1e7ec, 0x1e7ec; 0x1e7ef, 0x1e7ef; 0x1e7ff, 0x1e7ff; 151 + 0x1e8c5, 0x1e8c6; 0x1e8d7, 0x1e8ff; 0x1e94c, 0x1e94f; 0x1e95a, 0x1e95d; 0x1e960, 0x1ec70; 152 + 0x1ecb5, 0x1ed00; 0x1ed3e, 0x1edff; 0x1ee04, 0x1ee04; 0x1ee20, 0x1ee20; 0x1ee23, 0x1ee23; 153 + 0x1ee25, 0x1ee26; 0x1ee28, 0x1ee28; 0x1ee33, 0x1ee33; 0x1ee38, 0x1ee38; 0x1ee3a, 0x1ee3a; 154 + 0x1ee3c, 0x1ee41; 0x1ee43, 0x1ee46; 0x1ee48, 0x1ee48; 0x1ee4a, 0x1ee4a; 0x1ee4c, 0x1ee4c; 155 + 0x1ee50, 0x1ee50; 0x1ee53, 0x1ee53; 0x1ee55, 0x1ee56; 0x1ee58, 0x1ee58; 0x1ee5a, 0x1ee5a; 156 + 0x1ee5c, 0x1ee5c; 0x1ee5e, 0x1ee5e; 0x1ee60, 0x1ee60; 0x1ee63, 0x1ee63; 0x1ee65, 0x1ee66; 157 + 0x1ee6b, 0x1ee6b; 0x1ee73, 0x1ee73; 0x1ee78, 0x1ee78; 0x1ee7d, 0x1ee7d; 0x1ee7f, 0x1ee7f; 158 + 0x1ee8a, 0x1ee8a; 0x1ee9c, 0x1eea0; 0x1eea4, 0x1eea4; 0x1eeaa, 0x1eeaa; 0x1eebc, 0x1eeef; 159 + 0x1eef2, 0x1efff; 0x1f02c, 0x1f02f; 0x1f094, 0x1f09f; 0x1f0af, 0x1f0b0; 0x1f0c0, 0x1f0c0; 160 + 0x1f0d0, 0x1f0d0; 0x1f0f6, 0x1f0ff; 0x1f1ae, 0x1f1e5; 0x1f203, 0x1f20f; 0x1f23c, 0x1f23f; 161 + 0x1f249, 0x1f24f; 0x1f252, 0x1f25f; 0x1f266, 0x1f2ff; 0x1f6d8, 0x1f6db; 0x1f6ed, 0x1f6ef; 162 + 0x1f6fd, 0x1f6ff; 0x1f777, 0x1f77a; 0x1f7da, 0x1f7df; 0x1f7ec, 0x1f7ef; 0x1f7f1, 0x1f7ff; 163 + 0x1f80c, 0x1f80f; 0x1f848, 0x1f84f; 0x1f85a, 0x1f85f; 0x1f888, 0x1f88f; 0x1f8ae, 0x1f8af; 164 + 0x1f8bc, 0x1f8bf; 0x1f8c2, 0x1f8ff; 0x1fa54, 0x1fa5f; 0x1fa6e, 0x1fa6f; 0x1fa7d, 0x1fa7f; 165 + 0x1fa8a, 0x1fa8e; 0x1fac7, 0x1facd; 0x1fadd, 0x1fade; 0x1faea, 0x1faef; 0x1faf9, 0x1faff; 166 + 0x1fb93, 0x1fb93; 0x1fbfa, 0x1ffff; 0x2a6e0, 0x2a6ff; 0x2b73a, 0x2b73f; 0x2b81e, 0x2b81f; 167 + 0x2cea2, 0x2ceaf; 0x2ebe1, 0x2ebef; 0x2ee5e, 0x2f7ff; 0x2fa1e, 0x2ffff; 0x3134b, 0x3134f; 168 + 0x323b0, 0xe0000; 0xe0002, 0xe001f; 0xe0080, 0xe00ff; 0xe01f0, 0xeffff; 0xffffe, 0xfffff; 169 + 0x10fffe, 0x10ffff] 170 + 171 + let co = Sedlex_utils.Cset.of_list 172 + [0xe000, 0xf8ff; 0xf0000, 0xffffd; 0x100000, 0x10fffd] 173 + 174 + let cs = Sedlex_utils.Cset.of_list 175 + [0xd800, 0xdfff] 176 + 177 + let ll = Sedlex_utils.Cset.of_list 178 + [0x61, 0x7a; 0xb5, 0xb5; 0xdf, 0xf6; 0xf8, 0xff; 0x101, 0x101; 179 + 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 0x109, 0x109; 0x10b, 0x10b; 180 + 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 0x113, 0x113; 0x115, 0x115; 181 + 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 0x11d, 0x11d; 0x11f, 0x11f; 182 + 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 0x127, 0x127; 0x129, 0x129; 183 + 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 0x131, 0x131; 0x133, 0x133; 184 + 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 0x13c, 0x13c; 0x13e, 0x13e; 185 + 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 0x146, 0x146; 0x148, 0x149; 186 + 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 0x151, 0x151; 0x153, 0x153; 187 + 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 0x15b, 0x15b; 0x15d, 0x15d; 188 + 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 0x165, 0x165; 0x167, 0x167; 189 + 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 0x16f, 0x16f; 0x171, 0x171; 190 + 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 0x17a, 0x17a; 0x17c, 0x17c; 191 + 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 0x188, 0x188; 0x18c, 0x18d; 192 + 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 0x19e, 0x19e; 0x1a1, 0x1a1; 193 + 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 0x1aa, 0x1ab; 0x1ad, 0x1ad; 194 + 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 0x1b9, 0x1ba; 0x1bd, 0x1bf; 195 + 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 0x1ce, 0x1ce; 0x1d0, 0x1d0; 196 + 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 0x1d8, 0x1d8; 0x1da, 0x1da; 197 + 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 0x1e3, 0x1e3; 0x1e5, 0x1e5; 198 + 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 0x1ed, 0x1ed; 0x1ef, 0x1f0; 199 + 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 0x1fb, 0x1fb; 0x1fd, 0x1fd; 200 + 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 0x205, 0x205; 0x207, 0x207; 201 + 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 0x20f, 0x20f; 0x211, 0x211; 202 + 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 0x219, 0x219; 0x21b, 0x21b; 203 + 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 0x223, 0x223; 0x225, 0x225; 204 + 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 0x22d, 0x22d; 0x22f, 0x22f; 205 + 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 0x23f, 0x240; 0x242, 0x242; 206 + 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 0x24d, 0x24d; 0x24f, 0x293; 207 + 0x295, 0x2af; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37b, 0x37d; 208 + 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 209 + 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 210 + 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 211 + 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 212 + 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 213 + 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 214 + 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 215 + 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 216 + 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 217 + 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 218 + 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 219 + 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 220 + 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 221 + 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 222 + 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 223 + 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 224 + 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 225 + 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 226 + 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 227 + 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 228 + 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 229 + 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 230 + 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 231 + 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 232 + 0x10d0, 0x10fa; 0x10fd, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1c8a, 0x1c8a; 233 + 0x1d00, 0x1d2b; 0x1d6b, 0x1d77; 0x1d79, 0x1d9a; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 234 + 0x1e05, 0x1e05; 0x1e07, 0x1e07; 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 235 + 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 236 + 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 237 + 0x1e23, 0x1e23; 0x1e25, 0x1e25; 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 238 + 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 239 + 0x1e37, 0x1e37; 0x1e39, 0x1e39; 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 240 + 0x1e41, 0x1e41; 0x1e43, 0x1e43; 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 241 + 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 242 + 0x1e55, 0x1e55; 0x1e57, 0x1e57; 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 243 + 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 244 + 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 245 + 0x1e73, 0x1e73; 0x1e75, 0x1e75; 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 246 + 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 247 + 0x1e87, 0x1e87; 0x1e89, 0x1e89; 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 248 + 0x1e91, 0x1e91; 0x1e93, 0x1e93; 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 249 + 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 250 + 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 251 + 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 252 + 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 253 + 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 254 + 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 255 + 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 256 + 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 257 + 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 258 + 0x1efd, 0x1efd; 0x1eff, 0x1f07; 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 259 + 0x1f40, 0x1f45; 0x1f50, 0x1f57; 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 260 + 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 261 + 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 262 + 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 0x210a, 0x210a; 0x210e, 0x210f; 0x2113, 0x2113; 263 + 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 0x2146, 0x2149; 264 + 0x214e, 0x214e; 0x2184, 0x2184; 0x2c30, 0x2c5f; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 265 + 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 266 + 0x2c76, 0x2c7b; 0x2c81, 0x2c81; 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 267 + 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 268 + 0x2c93, 0x2c93; 0x2c95, 0x2c95; 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 269 + 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 270 + 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 271 + 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 272 + 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 273 + 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 274 + 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 275 + 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 276 + 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 277 + 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 278 + 0xa647, 0xa647; 0xa649, 0xa649; 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 279 + 0xa651, 0xa651; 0xa653, 0xa653; 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 280 + 0xa65b, 0xa65b; 0xa65d, 0xa65d; 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 281 + 0xa665, 0xa665; 0xa667, 0xa667; 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 282 + 0xa681, 0xa681; 0xa683, 0xa683; 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 283 + 0xa68b, 0xa68b; 0xa68d, 0xa68d; 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 284 + 0xa695, 0xa695; 0xa697, 0xa697; 0xa699, 0xa699; 0xa69b, 0xa69b; 0xa723, 0xa723; 285 + 0xa725, 0xa725; 0xa727, 0xa727; 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 286 + 0xa72f, 0xa731; 0xa733, 0xa733; 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 287 + 0xa73b, 0xa73b; 0xa73d, 0xa73d; 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 288 + 0xa745, 0xa745; 0xa747, 0xa747; 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 289 + 0xa74f, 0xa74f; 0xa751, 0xa751; 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 290 + 0xa759, 0xa759; 0xa75b, 0xa75b; 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 291 + 0xa763, 0xa763; 0xa765, 0xa765; 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 292 + 0xa76d, 0xa76d; 0xa76f, 0xa76f; 0xa771, 0xa778; 0xa77a, 0xa77a; 0xa77c, 0xa77c; 293 + 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 0xa785, 0xa785; 0xa787, 0xa787; 294 + 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 0xa793, 0xa795; 0xa797, 0xa797; 295 + 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 296 + 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 297 + 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 298 + 0xa7bf, 0xa7bf; 0xa7c1, 0xa7c1; 0xa7c3, 0xa7c3; 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 299 + 0xa7cd, 0xa7cd; 0xa7d1, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d5; 0xa7d7, 0xa7d7; 300 + 0xa7d9, 0xa7d9; 0xa7db, 0xa7db; 0xa7f6, 0xa7f6; 0xa7fa, 0xa7fa; 0xab30, 0xab5a; 301 + 0xab60, 0xab68; 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 302 + 0x10428, 0x1044f; 0x104d8, 0x104fb; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 303 + 0x105bb, 0x105bc; 0x10cc0, 0x10cf2; 0x10d70, 0x10d85; 0x118c0, 0x118df; 0x16e60, 0x16e7f; 304 + 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 305 + 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 306 + 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 307 + 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 308 + 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 0x1d770, 0x1d788; 0x1d78a, 0x1d78f; 309 + 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7c9; 0x1d7cb, 0x1d7cb; 0x1df00, 0x1df09; 0x1df0b, 0x1df1e; 310 + 0x1df25, 0x1df2a; 0x1e922, 0x1e943] 311 + 312 + let lm = Sedlex_utils.Cset.of_list 313 + [0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 314 + 0x374, 0x374; 0x37a, 0x37a; 0x559, 0x559; 0x640, 0x640; 0x6e5, 0x6e6; 315 + 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 316 + 0x8c9, 0x8c9; 0x971, 0x971; 0xe46, 0xe46; 0xec6, 0xec6; 0x10fc, 0x10fc; 317 + 0x17d7, 0x17d7; 0x1843, 0x1843; 0x1aa7, 0x1aa7; 0x1c78, 0x1c7d; 0x1d2c, 0x1d6a; 318 + 0x1d78, 0x1d78; 0x1d9b, 0x1dbf; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 319 + 0x2c7c, 0x2c7d; 0x2d6f, 0x2d6f; 0x2e2f, 0x2e2f; 0x3005, 0x3005; 0x3031, 0x3035; 320 + 0x303b, 0x303b; 0x309d, 0x309e; 0x30fc, 0x30fe; 0xa015, 0xa015; 0xa4f8, 0xa4fd; 321 + 0xa60c, 0xa60c; 0xa67f, 0xa67f; 0xa69c, 0xa69d; 0xa717, 0xa71f; 0xa770, 0xa770; 322 + 0xa788, 0xa788; 0xa7f2, 0xa7f4; 0xa7f8, 0xa7f9; 0xa9cf, 0xa9cf; 0xa9e6, 0xa9e6; 323 + 0xaa70, 0xaa70; 0xaadd, 0xaadd; 0xaaf3, 0xaaf4; 0xab5c, 0xab5f; 0xab69, 0xab69; 324 + 0xff70, 0xff70; 0xff9e, 0xff9f; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 325 + 0x10d4e, 0x10d4e; 0x10d6f, 0x10d6f; 0x16b40, 0x16b43; 0x16d40, 0x16d42; 0x16d6b, 0x16d6c; 326 + 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 327 + 0x1affd, 0x1affe; 0x1e030, 0x1e06d; 0x1e137, 0x1e13d; 0x1e4eb, 0x1e4eb; 0x1e94b, 0x1e94b] 328 + 329 + let lo = Sedlex_utils.Cset.of_list 330 + [0xaa, 0xaa; 0xba, 0xba; 0x1bb, 0x1bb; 0x1c0, 0x1c3; 0x294, 0x294; 331 + 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x641, 0x64a; 0x66e, 0x66f; 332 + 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 333 + 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 334 + 0x800, 0x815; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 335 + 0x8a0, 0x8c8; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 336 + 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 337 + 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 338 + 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 339 + 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 340 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 341 + 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 342 + 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 343 + 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 344 + 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 345 + 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 346 + 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 347 + 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 348 + 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 349 + 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcdd, 0xcde; 350 + 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 351 + 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 352 + 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 353 + 0xe01, 0xe30; 0xe32, 0xe33; 0xe40, 0xe45; 0xe81, 0xe82; 0xe84, 0xe84; 354 + 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb3; 355 + 0xebd, 0xebd; 0xec0, 0xec4; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 356 + 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 357 + 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 358 + 0x108e, 0x108e; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 359 + 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 360 + 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 361 + 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x1401, 0x166c; 0x166f, 0x167f; 362 + 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 363 + 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17dc, 0x17dc; 364 + 0x1820, 0x1842; 0x1844, 0x1878; 0x1880, 0x1884; 0x1887, 0x18a8; 0x18aa, 0x18aa; 365 + 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 366 + 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 367 + 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 368 + 0x1c5a, 0x1c77; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 369 + 0x2135, 0x2138; 0x2d30, 0x2d67; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 370 + 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 371 + 0x2dd8, 0x2dde; 0x3006, 0x3006; 0x303c, 0x303c; 0x3041, 0x3096; 0x309f, 0x309f; 372 + 0x30a1, 0x30fa; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 373 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 374 + 0xa500, 0xa60b; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa66e, 0xa66e; 0xa6a0, 0xa6e5; 375 + 0xa78f, 0xa78f; 0xa7f7, 0xa7f7; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 376 + 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 377 + 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 378 + 0xa9e0, 0xa9e4; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 379 + 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 380 + 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 381 + 0xaadb, 0xaadc; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xab01, 0xab06; 0xab09, 0xab0e; 382 + 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 383 + 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb1d, 0xfb1d; 384 + 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 385 + 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 386 + 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff66, 0xff6f; 0xff71, 0xff9d; 387 + 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 388 + 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 389 + 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 390 + 0x1032d, 0x10340; 0x10342, 0x10349; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 391 + 0x103c8, 0x103cf; 0x10450, 0x1049d; 0x10500, 0x10527; 0x10530, 0x10563; 0x105c0, 0x105f3; 392 + 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 393 + 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 394 + 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 395 + 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 396 + 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 397 + 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 398 + 0x10d00, 0x10d23; 0x10d4a, 0x10d4d; 0x10d4f, 0x10d4f; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 399 + 0x10ec2, 0x10ec4; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 400 + 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 0x11075, 0x11075; 401 + 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 402 + 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 403 + 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1123f, 0x11240; 0x11280, 0x11286; 404 + 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 405 + 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 406 + 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11380, 0x11389; 407 + 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113b7; 0x113d1, 0x113d1; 408 + 0x113d3, 0x113d3; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 409 + 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 410 + 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11740, 0x11746; 411 + 0x11800, 0x1182b; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 412 + 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 413 + 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 414 + 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 415 + 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 416 + 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 417 + 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11f02, 0x11f02; 0x11f04, 0x11f10; 418 + 0x11f12, 0x11f33; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12480, 0x12543; 0x12f90, 0x12ff0; 419 + 0x13000, 0x1342f; 0x13441, 0x13446; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x1611d; 420 + 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 421 + 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d43, 0x16d6a; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 422 + 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18cff, 0x18d08; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 423 + 0x1b150, 0x1b152; 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 424 + 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1df0a, 0x1df0a; 0x1e100, 0x1e12c; 425 + 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4ea; 0x1e5d0, 0x1e5ed; 426 + 0x1e5f0, 0x1e5f0; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 427 + 0x1e800, 0x1e8c4; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 428 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 429 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 430 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 431 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 432 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 433 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 434 + 0x2a700, 0x2b739; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 435 + 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0x31350, 0x323af] 436 + 437 + let lt = Sedlex_utils.Cset.of_list 438 + [0x1c5, 0x1c5; 0x1c8, 0x1c8; 0x1cb, 0x1cb; 0x1f2, 0x1f2; 0x1f88, 0x1f8f; 439 + 0x1f98, 0x1f9f; 0x1fa8, 0x1faf; 0x1fbc, 0x1fbc; 0x1fcc, 0x1fcc; 0x1ffc, 0x1ffc] 440 + 441 + let lu = Sedlex_utils.Cset.of_list 442 + [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 443 + 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 444 + 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 445 + 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 446 + 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 447 + 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 448 + 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 449 + 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 450 + 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 451 + 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 452 + 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 453 + 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 454 + 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 455 + 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 456 + 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 457 + 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 458 + 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 459 + 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 460 + 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 461 + 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 462 + 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 463 + 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 464 + 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 465 + 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 466 + 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 467 + 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 468 + 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 469 + 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 470 + 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 471 + 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 472 + 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 473 + 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 474 + 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 475 + 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 476 + 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 477 + 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 478 + 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 479 + 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 480 + 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 481 + 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 482 + 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 483 + 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 484 + 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 485 + 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 486 + 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 487 + 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 488 + 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 489 + 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 490 + 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 491 + 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 492 + 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 493 + 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 494 + 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 495 + 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 496 + 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 497 + 0x13a0, 0x13f5; 0x1c89, 0x1c89; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 498 + 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 499 + 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 500 + 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 501 + 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 502 + 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 503 + 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 504 + 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 505 + 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 506 + 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 507 + 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 508 + 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 509 + 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 510 + 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 511 + 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 512 + 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 513 + 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 514 + 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 515 + 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 516 + 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 517 + 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 518 + 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 519 + 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 520 + 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 521 + 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 522 + 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 523 + 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 524 + 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 525 + 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 526 + 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 527 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 528 + 0x2145, 0x2145; 0x2183, 0x2183; 0x2c00, 0x2c2f; 0x2c60, 0x2c60; 0x2c62, 0x2c64; 529 + 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 530 + 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 0x2c84, 0x2c84; 0x2c86, 0x2c86; 531 + 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 532 + 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 533 + 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 534 + 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 0x2cac, 0x2cac; 0x2cae, 0x2cae; 535 + 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 536 + 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 537 + 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 538 + 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 539 + 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 540 + 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 0x2cf2, 0x2cf2; 0xa640, 0xa640; 541 + 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 0xa648, 0xa648; 0xa64a, 0xa64a; 542 + 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 0xa652, 0xa652; 0xa654, 0xa654; 543 + 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 0xa65c, 0xa65c; 0xa65e, 0xa65e; 544 + 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 0xa666, 0xa666; 0xa668, 0xa668; 545 + 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 0xa682, 0xa682; 0xa684, 0xa684; 546 + 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 0xa68c, 0xa68c; 0xa68e, 0xa68e; 547 + 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 0xa696, 0xa696; 0xa698, 0xa698; 548 + 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 0xa726, 0xa726; 0xa728, 0xa728; 549 + 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 0xa732, 0xa732; 0xa734, 0xa734; 550 + 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 0xa73c, 0xa73c; 0xa73e, 0xa73e; 551 + 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 0xa746, 0xa746; 0xa748, 0xa748; 552 + 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 0xa750, 0xa750; 0xa752, 0xa752; 553 + 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 0xa75a, 0xa75a; 0xa75c, 0xa75c; 554 + 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 0xa764, 0xa764; 0xa766, 0xa766; 555 + 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 0xa76e, 0xa76e; 0xa779, 0xa779; 556 + 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 0xa782, 0xa782; 0xa784, 0xa784; 557 + 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 0xa790, 0xa790; 0xa792, 0xa792; 558 + 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 0xa79c, 0xa79c; 0xa79e, 0xa79e; 559 + 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 560 + 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 561 + 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c0, 0xa7c0; 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 562 + 0xa7c9, 0xa7c9; 0xa7cb, 0xa7cc; 0xa7d0, 0xa7d0; 0xa7d6, 0xa7d6; 0xa7d8, 0xa7d8; 563 + 0xa7da, 0xa7da; 0xa7dc, 0xa7dc; 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 564 + 0x104b0, 0x104d3; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 565 + 0x10c80, 0x10cb2; 0x10d50, 0x10d65; 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x1d400, 0x1d419; 566 + 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 567 + 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 568 + 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 569 + 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 570 + 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 571 + 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1d790, 0x1d7a8; 0x1d7ca, 0x1d7ca; 572 + 0x1e900, 0x1e921] 573 + 574 + let mc = Sedlex_utils.Cset.of_list 575 + [0x903, 0x903; 0x93b, 0x93b; 0x93e, 0x940; 0x949, 0x94c; 0x94e, 0x94f; 576 + 0x982, 0x983; 0x9be, 0x9c0; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9d7, 0x9d7; 577 + 0xa03, 0xa03; 0xa3e, 0xa40; 0xa83, 0xa83; 0xabe, 0xac0; 0xac9, 0xac9; 578 + 0xacb, 0xacc; 0xb02, 0xb03; 0xb3e, 0xb3e; 0xb40, 0xb40; 0xb47, 0xb48; 579 + 0xb4b, 0xb4c; 0xb57, 0xb57; 0xbbe, 0xbbf; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 580 + 0xbca, 0xbcc; 0xbd7, 0xbd7; 0xc01, 0xc03; 0xc41, 0xc44; 0xc82, 0xc83; 581 + 0xcbe, 0xcbe; 0xcc0, 0xcc4; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xcd5, 0xcd6; 582 + 0xcf3, 0xcf3; 0xd02, 0xd03; 0xd3e, 0xd40; 0xd46, 0xd48; 0xd4a, 0xd4c; 583 + 0xd57, 0xd57; 0xd82, 0xd83; 0xdcf, 0xdd1; 0xdd8, 0xddf; 0xdf2, 0xdf3; 584 + 0xf3e, 0xf3f; 0xf7f, 0xf7f; 0x102b, 0x102c; 0x1031, 0x1031; 0x1038, 0x1038; 585 + 0x103b, 0x103c; 0x1056, 0x1057; 0x1062, 0x1064; 0x1067, 0x106d; 0x1083, 0x1084; 586 + 0x1087, 0x108c; 0x108f, 0x108f; 0x109a, 0x109c; 0x1715, 0x1715; 0x1734, 0x1734; 587 + 0x17b6, 0x17b6; 0x17be, 0x17c5; 0x17c7, 0x17c8; 0x1923, 0x1926; 0x1929, 0x192b; 588 + 0x1930, 0x1931; 0x1933, 0x1938; 0x1a19, 0x1a1a; 0x1a55, 0x1a55; 0x1a57, 0x1a57; 589 + 0x1a61, 0x1a61; 0x1a63, 0x1a64; 0x1a6d, 0x1a72; 0x1b04, 0x1b04; 0x1b35, 0x1b35; 590 + 0x1b3b, 0x1b3b; 0x1b3d, 0x1b41; 0x1b43, 0x1b44; 0x1b82, 0x1b82; 0x1ba1, 0x1ba1; 591 + 0x1ba6, 0x1ba7; 0x1baa, 0x1baa; 0x1be7, 0x1be7; 0x1bea, 0x1bec; 0x1bee, 0x1bee; 592 + 0x1bf2, 0x1bf3; 0x1c24, 0x1c2b; 0x1c34, 0x1c35; 0x1ce1, 0x1ce1; 0x1cf7, 0x1cf7; 593 + 0x302e, 0x302f; 0xa823, 0xa824; 0xa827, 0xa827; 0xa880, 0xa881; 0xa8b4, 0xa8c3; 594 + 0xa952, 0xa953; 0xa983, 0xa983; 0xa9b4, 0xa9b5; 0xa9ba, 0xa9bb; 0xa9be, 0xa9c0; 595 + 0xaa2f, 0xaa30; 0xaa33, 0xaa34; 0xaa4d, 0xaa4d; 0xaa7b, 0xaa7b; 0xaa7d, 0xaa7d; 596 + 0xaaeb, 0xaaeb; 0xaaee, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabe4; 0xabe6, 0xabe7; 597 + 0xabe9, 0xabea; 0xabec, 0xabec; 0x11000, 0x11000; 0x11002, 0x11002; 0x11082, 0x11082; 598 + 0x110b0, 0x110b2; 0x110b7, 0x110b8; 0x1112c, 0x1112c; 0x11145, 0x11146; 0x11182, 0x11182; 599 + 0x111b3, 0x111b5; 0x111bf, 0x111c0; 0x111ce, 0x111ce; 0x1122c, 0x1122e; 0x11232, 0x11233; 600 + 0x11235, 0x11235; 0x112e0, 0x112e2; 0x11302, 0x11303; 0x1133e, 0x1133f; 0x11341, 0x11344; 601 + 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11357, 0x11357; 0x11362, 0x11363; 0x113b8, 0x113ba; 602 + 0x113c2, 0x113c2; 0x113c5, 0x113c5; 0x113c7, 0x113ca; 0x113cc, 0x113cd; 0x113cf, 0x113cf; 603 + 0x11435, 0x11437; 0x11440, 0x11441; 0x11445, 0x11445; 0x114b0, 0x114b2; 0x114b9, 0x114b9; 604 + 0x114bb, 0x114be; 0x114c1, 0x114c1; 0x115af, 0x115b1; 0x115b8, 0x115bb; 0x115be, 0x115be; 605 + 0x11630, 0x11632; 0x1163b, 0x1163c; 0x1163e, 0x1163e; 0x116ac, 0x116ac; 0x116ae, 0x116af; 606 + 0x116b6, 0x116b6; 0x1171e, 0x1171e; 0x11720, 0x11721; 0x11726, 0x11726; 0x1182c, 0x1182e; 607 + 0x11838, 0x11838; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193d, 0x1193d; 0x11940, 0x11940; 608 + 0x11942, 0x11942; 0x119d1, 0x119d3; 0x119dc, 0x119df; 0x119e4, 0x119e4; 0x11a39, 0x11a39; 609 + 0x11a57, 0x11a58; 0x11a97, 0x11a97; 0x11c2f, 0x11c2f; 0x11c3e, 0x11c3e; 0x11ca9, 0x11ca9; 610 + 0x11cb1, 0x11cb1; 0x11cb4, 0x11cb4; 0x11d8a, 0x11d8e; 0x11d93, 0x11d94; 0x11d96, 0x11d96; 611 + 0x11ef5, 0x11ef6; 0x11f03, 0x11f03; 0x11f34, 0x11f35; 0x11f3e, 0x11f3f; 0x11f41, 0x11f41; 612 + 0x1612a, 0x1612c; 0x16f51, 0x16f87; 0x16ff0, 0x16ff1; 0x1d165, 0x1d166; 0x1d16d, 0x1d172] 613 + 614 + let me = Sedlex_utils.Cset.of_list 615 + [0x488, 0x489; 0x1abe, 0x1abe; 0x20dd, 0x20e0; 0x20e2, 0x20e4; 0xa670, 0xa672] 616 + 617 + let mn = Sedlex_utils.Cset.of_list 618 + [0x300, 0x36f; 0x483, 0x487; 0x591, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 619 + 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x65f; 0x670, 0x670; 620 + 0x6d6, 0x6dc; 0x6df, 0x6e4; 0x6e7, 0x6e8; 0x6ea, 0x6ed; 0x711, 0x711; 621 + 0x730, 0x74a; 0x7a6, 0x7b0; 0x7eb, 0x7f3; 0x7fd, 0x7fd; 0x816, 0x819; 622 + 0x81b, 0x823; 0x825, 0x827; 0x829, 0x82d; 0x859, 0x85b; 0x897, 0x89f; 623 + 0x8ca, 0x8e1; 0x8e3, 0x902; 0x93a, 0x93a; 0x93c, 0x93c; 0x941, 0x948; 624 + 0x94d, 0x94d; 0x951, 0x957; 0x962, 0x963; 0x981, 0x981; 0x9bc, 0x9bc; 625 + 0x9c1, 0x9c4; 0x9cd, 0x9cd; 0x9e2, 0x9e3; 0x9fe, 0x9fe; 0xa01, 0xa02; 626 + 0xa3c, 0xa3c; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 627 + 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa82; 0xabc, 0xabc; 0xac1, 0xac5; 628 + 0xac7, 0xac8; 0xacd, 0xacd; 0xae2, 0xae3; 0xafa, 0xaff; 0xb01, 0xb01; 629 + 0xb3c, 0xb3c; 0xb3f, 0xb3f; 0xb41, 0xb44; 0xb4d, 0xb4d; 0xb55, 0xb56; 630 + 0xb62, 0xb63; 0xb82, 0xb82; 0xbc0, 0xbc0; 0xbcd, 0xbcd; 0xc00, 0xc00; 631 + 0xc04, 0xc04; 0xc3c, 0xc3c; 0xc3e, 0xc40; 0xc46, 0xc48; 0xc4a, 0xc4d; 632 + 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc81; 0xcbc, 0xcbc; 0xcbf, 0xcbf; 633 + 0xcc6, 0xcc6; 0xccc, 0xccd; 0xce2, 0xce3; 0xd00, 0xd01; 0xd3b, 0xd3c; 634 + 0xd41, 0xd44; 0xd4d, 0xd4d; 0xd62, 0xd63; 0xd81, 0xd81; 0xdca, 0xdca; 635 + 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xe31, 0xe31; 0xe34, 0xe3a; 0xe47, 0xe4e; 636 + 0xeb1, 0xeb1; 0xeb4, 0xebc; 0xec8, 0xece; 0xf18, 0xf19; 0xf35, 0xf35; 637 + 0xf37, 0xf37; 0xf39, 0xf39; 0xf71, 0xf7e; 0xf80, 0xf84; 0xf86, 0xf87; 638 + 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x102d, 0x1030; 0x1032, 0x1037; 639 + 0x1039, 0x103a; 0x103d, 0x103e; 0x1058, 0x1059; 0x105e, 0x1060; 0x1071, 0x1074; 640 + 0x1082, 0x1082; 0x1085, 0x1086; 0x108d, 0x108d; 0x109d, 0x109d; 0x135d, 0x135f; 641 + 0x1712, 0x1714; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 0x17b4, 0x17b5; 642 + 0x17b7, 0x17bd; 0x17c6, 0x17c6; 0x17c9, 0x17d3; 0x17dd, 0x17dd; 0x180b, 0x180d; 643 + 0x180f, 0x180f; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x1922; 0x1927, 0x1928; 644 + 0x1932, 0x1932; 0x1939, 0x193b; 0x1a17, 0x1a18; 0x1a1b, 0x1a1b; 0x1a56, 0x1a56; 645 + 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a62, 0x1a62; 0x1a65, 0x1a6c; 0x1a73, 0x1a7c; 646 + 0x1a7f, 0x1a7f; 0x1ab0, 0x1abd; 0x1abf, 0x1ace; 0x1b00, 0x1b03; 0x1b34, 0x1b34; 647 + 0x1b36, 0x1b3a; 0x1b3c, 0x1b3c; 0x1b42, 0x1b42; 0x1b6b, 0x1b73; 0x1b80, 0x1b81; 648 + 0x1ba2, 0x1ba5; 0x1ba8, 0x1ba9; 0x1bab, 0x1bad; 0x1be6, 0x1be6; 0x1be8, 0x1be9; 649 + 0x1bed, 0x1bed; 0x1bef, 0x1bf1; 0x1c2c, 0x1c33; 0x1c36, 0x1c37; 0x1cd0, 0x1cd2; 650 + 0x1cd4, 0x1ce0; 0x1ce2, 0x1ce8; 0x1ced, 0x1ced; 0x1cf4, 0x1cf4; 0x1cf8, 0x1cf9; 651 + 0x1dc0, 0x1dff; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2cef, 0x2cf1; 652 + 0x2d7f, 0x2d7f; 0x2de0, 0x2dff; 0x302a, 0x302d; 0x3099, 0x309a; 0xa66f, 0xa66f; 653 + 0xa674, 0xa67d; 0xa69e, 0xa69f; 0xa6f0, 0xa6f1; 0xa802, 0xa802; 0xa806, 0xa806; 654 + 0xa80b, 0xa80b; 0xa825, 0xa826; 0xa82c, 0xa82c; 0xa8c4, 0xa8c5; 0xa8e0, 0xa8f1; 655 + 0xa8ff, 0xa8ff; 0xa926, 0xa92d; 0xa947, 0xa951; 0xa980, 0xa982; 0xa9b3, 0xa9b3; 656 + 0xa9b6, 0xa9b9; 0xa9bc, 0xa9bd; 0xa9e5, 0xa9e5; 0xaa29, 0xaa2e; 0xaa31, 0xaa32; 657 + 0xaa35, 0xaa36; 0xaa43, 0xaa43; 0xaa4c, 0xaa4c; 0xaa7c, 0xaa7c; 0xaab0, 0xaab0; 658 + 0xaab2, 0xaab4; 0xaab7, 0xaab8; 0xaabe, 0xaabf; 0xaac1, 0xaac1; 0xaaec, 0xaaed; 659 + 0xaaf6, 0xaaf6; 0xabe5, 0xabe5; 0xabe8, 0xabe8; 0xabed, 0xabed; 0xfb1e, 0xfb1e; 660 + 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0x101fd, 0x101fd; 0x102e0, 0x102e0; 0x10376, 0x1037a; 661 + 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 662 + 0x10ae5, 0x10ae6; 0x10d24, 0x10d27; 0x10d69, 0x10d6d; 0x10eab, 0x10eac; 0x10efc, 0x10eff; 663 + 0x10f46, 0x10f50; 0x10f82, 0x10f85; 0x11001, 0x11001; 0x11038, 0x11046; 0x11070, 0x11070; 664 + 0x11073, 0x11074; 0x1107f, 0x11081; 0x110b3, 0x110b6; 0x110b9, 0x110ba; 0x110c2, 0x110c2; 665 + 0x11100, 0x11102; 0x11127, 0x1112b; 0x1112d, 0x11134; 0x11173, 0x11173; 0x11180, 0x11181; 666 + 0x111b6, 0x111be; 0x111c9, 0x111cc; 0x111cf, 0x111cf; 0x1122f, 0x11231; 0x11234, 0x11234; 667 + 0x11236, 0x11237; 0x1123e, 0x1123e; 0x11241, 0x11241; 0x112df, 0x112df; 0x112e3, 0x112ea; 668 + 0x11300, 0x11301; 0x1133b, 0x1133c; 0x11340, 0x11340; 0x11366, 0x1136c; 0x11370, 0x11374; 669 + 0x113bb, 0x113c0; 0x113ce, 0x113ce; 0x113d0, 0x113d0; 0x113d2, 0x113d2; 0x113e1, 0x113e2; 670 + 0x11438, 0x1143f; 0x11442, 0x11444; 0x11446, 0x11446; 0x1145e, 0x1145e; 0x114b3, 0x114b8; 671 + 0x114ba, 0x114ba; 0x114bf, 0x114c0; 0x114c2, 0x114c3; 0x115b2, 0x115b5; 0x115bc, 0x115bd; 672 + 0x115bf, 0x115c0; 0x115dc, 0x115dd; 0x11633, 0x1163a; 0x1163d, 0x1163d; 0x1163f, 0x11640; 673 + 0x116ab, 0x116ab; 0x116ad, 0x116ad; 0x116b0, 0x116b5; 0x116b7, 0x116b7; 0x1171d, 0x1171d; 674 + 0x1171f, 0x1171f; 0x11722, 0x11725; 0x11727, 0x1172b; 0x1182f, 0x11837; 0x11839, 0x1183a; 675 + 0x1193b, 0x1193c; 0x1193e, 0x1193e; 0x11943, 0x11943; 0x119d4, 0x119d7; 0x119da, 0x119db; 676 + 0x119e0, 0x119e0; 0x11a01, 0x11a0a; 0x11a33, 0x11a38; 0x11a3b, 0x11a3e; 0x11a47, 0x11a47; 677 + 0x11a51, 0x11a56; 0x11a59, 0x11a5b; 0x11a8a, 0x11a96; 0x11a98, 0x11a99; 0x11c30, 0x11c36; 678 + 0x11c38, 0x11c3d; 0x11c3f, 0x11c3f; 0x11c92, 0x11ca7; 0x11caa, 0x11cb0; 0x11cb2, 0x11cb3; 679 + 0x11cb5, 0x11cb6; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d45; 680 + 0x11d47, 0x11d47; 0x11d90, 0x11d91; 0x11d95, 0x11d95; 0x11d97, 0x11d97; 0x11ef3, 0x11ef4; 681 + 0x11f00, 0x11f01; 0x11f36, 0x11f3a; 0x11f40, 0x11f40; 0x11f42, 0x11f42; 0x11f5a, 0x11f5a; 682 + 0x13440, 0x13440; 0x13447, 0x13455; 0x1611e, 0x16129; 0x1612d, 0x1612f; 0x16af0, 0x16af4; 683 + 0x16b30, 0x16b36; 0x16f4f, 0x16f4f; 0x16f8f, 0x16f92; 0x16fe4, 0x16fe4; 0x1bc9d, 0x1bc9e; 684 + 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 0x1d167, 0x1d169; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 685 + 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 686 + 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 687 + 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e08f, 0x1e08f; 0x1e130, 0x1e136; 688 + 0x1e2ae, 0x1e2ae; 0x1e2ec, 0x1e2ef; 0x1e4ec, 0x1e4ef; 0x1e5ee, 0x1e5ef; 0x1e8d0, 0x1e8d6; 689 + 0x1e944, 0x1e94a; 0xe0100, 0xe01ef] 690 + 691 + let nd = Sedlex_utils.Cset.of_list 692 + [0x30, 0x39; 0x660, 0x669; 0x6f0, 0x6f9; 0x7c0, 0x7c9; 0x966, 0x96f; 693 + 0x9e6, 0x9ef; 0xa66, 0xa6f; 0xae6, 0xaef; 0xb66, 0xb6f; 0xbe6, 0xbef; 694 + 0xc66, 0xc6f; 0xce6, 0xcef; 0xd66, 0xd6f; 0xde6, 0xdef; 0xe50, 0xe59; 695 + 0xed0, 0xed9; 0xf20, 0xf29; 0x1040, 0x1049; 0x1090, 0x1099; 0x17e0, 0x17e9; 696 + 0x1810, 0x1819; 0x1946, 0x194f; 0x19d0, 0x19d9; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 697 + 0x1b50, 0x1b59; 0x1bb0, 0x1bb9; 0x1c40, 0x1c49; 0x1c50, 0x1c59; 0xa620, 0xa629; 698 + 0xa8d0, 0xa8d9; 0xa900, 0xa909; 0xa9d0, 0xa9d9; 0xa9f0, 0xa9f9; 0xaa50, 0xaa59; 699 + 0xabf0, 0xabf9; 0xff10, 0xff19; 0x104a0, 0x104a9; 0x10d30, 0x10d39; 0x10d40, 0x10d49; 700 + 0x11066, 0x1106f; 0x110f0, 0x110f9; 0x11136, 0x1113f; 0x111d0, 0x111d9; 0x112f0, 0x112f9; 701 + 0x11450, 0x11459; 0x114d0, 0x114d9; 0x11650, 0x11659; 0x116c0, 0x116c9; 0x116d0, 0x116e3; 702 + 0x11730, 0x11739; 0x118e0, 0x118e9; 0x11950, 0x11959; 0x11bf0, 0x11bf9; 0x11c50, 0x11c59; 703 + 0x11d50, 0x11d59; 0x11da0, 0x11da9; 0x11f50, 0x11f59; 0x16130, 0x16139; 0x16a60, 0x16a69; 704 + 0x16ac0, 0x16ac9; 0x16b50, 0x16b59; 0x16d70, 0x16d79; 0x1ccf0, 0x1ccf9; 0x1d7ce, 0x1d7ff; 705 + 0x1e140, 0x1e149; 0x1e2f0, 0x1e2f9; 0x1e4f0, 0x1e4f9; 0x1e5f1, 0x1e5fa; 0x1e950, 0x1e959; 706 + 0x1fbf0, 0x1fbf9] 707 + 708 + let nl = Sedlex_utils.Cset.of_list 709 + [0x16ee, 0x16f0; 0x2160, 0x2182; 0x2185, 0x2188; 0x3007, 0x3007; 0x3021, 0x3029; 710 + 0x3038, 0x303a; 0xa6e6, 0xa6ef; 0x10140, 0x10174; 0x10341, 0x10341; 0x1034a, 0x1034a; 711 + 0x103d1, 0x103d5; 0x12400, 0x1246e] 712 + 713 + let no = Sedlex_utils.Cset.of_list 714 + [0xb2, 0xb3; 0xb9, 0xb9; 0xbc, 0xbe; 0x9f4, 0x9f9; 0xb72, 0xb77; 715 + 0xbf0, 0xbf2; 0xc78, 0xc7e; 0xd58, 0xd5e; 0xd70, 0xd78; 0xf2a, 0xf33; 716 + 0x1369, 0x137c; 0x17f0, 0x17f9; 0x19da, 0x19da; 0x2070, 0x2070; 0x2074, 0x2079; 717 + 0x2080, 0x2089; 0x2150, 0x215f; 0x2189, 0x2189; 0x2460, 0x249b; 0x24ea, 0x24ff; 718 + 0x2776, 0x2793; 0x2cfd, 0x2cfd; 0x3192, 0x3195; 0x3220, 0x3229; 0x3248, 0x324f; 719 + 0x3251, 0x325f; 0x3280, 0x3289; 0x32b1, 0x32bf; 0xa830, 0xa835; 0x10107, 0x10133; 720 + 0x10175, 0x10178; 0x1018a, 0x1018b; 0x102e1, 0x102fb; 0x10320, 0x10323; 0x10858, 0x1085f; 721 + 0x10879, 0x1087f; 0x108a7, 0x108af; 0x108fb, 0x108ff; 0x10916, 0x1091b; 0x109bc, 0x109bd; 722 + 0x109c0, 0x109cf; 0x109d2, 0x109ff; 0x10a40, 0x10a48; 0x10a7d, 0x10a7e; 0x10a9d, 0x10a9f; 723 + 0x10aeb, 0x10aef; 0x10b58, 0x10b5f; 0x10b78, 0x10b7f; 0x10ba9, 0x10baf; 0x10cfa, 0x10cff; 724 + 0x10e60, 0x10e7e; 0x10f1d, 0x10f26; 0x10f51, 0x10f54; 0x10fc5, 0x10fcb; 0x11052, 0x11065; 725 + 0x111e1, 0x111f4; 0x1173a, 0x1173b; 0x118ea, 0x118f2; 0x11c5a, 0x11c6c; 0x11fc0, 0x11fd4; 726 + 0x16b5b, 0x16b61; 0x16e80, 0x16e96; 0x1d2c0, 0x1d2d3; 0x1d2e0, 0x1d2f3; 0x1d360, 0x1d378; 727 + 0x1e8c7, 0x1e8cf; 0x1ec71, 0x1ecab; 0x1ecad, 0x1ecaf; 0x1ecb1, 0x1ecb4; 0x1ed01, 0x1ed2d; 728 + 0x1ed2f, 0x1ed3d; 0x1f100, 0x1f10c] 729 + 730 + let pc = Sedlex_utils.Cset.of_list 731 + [0x5f, 0x5f; 0x203f, 0x2040; 0x2054, 0x2054; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 732 + 0xff3f, 0xff3f] 733 + 734 + let pd = Sedlex_utils.Cset.of_list 735 + [0x2d, 0x2d; 0x58a, 0x58a; 0x5be, 0x5be; 0x1400, 0x1400; 0x1806, 0x1806; 736 + 0x2010, 0x2015; 0x2e17, 0x2e17; 0x2e1a, 0x2e1a; 0x2e3a, 0x2e3b; 0x2e40, 0x2e40; 737 + 0x2e5d, 0x2e5d; 0x301c, 0x301c; 0x3030, 0x3030; 0x30a0, 0x30a0; 0xfe31, 0xfe32; 738 + 0xfe58, 0xfe58; 0xfe63, 0xfe63; 0xff0d, 0xff0d; 0x10d6e, 0x10d6e; 0x10ead, 0x10ead] 739 + 740 + let pe = Sedlex_utils.Cset.of_list 741 + [0x29, 0x29; 0x5d, 0x5d; 0x7d, 0x7d; 0xf3b, 0xf3b; 0xf3d, 0xf3d; 742 + 0x169c, 0x169c; 0x2046, 0x2046; 0x207e, 0x207e; 0x208e, 0x208e; 0x2309, 0x2309; 743 + 0x230b, 0x230b; 0x232a, 0x232a; 0x2769, 0x2769; 0x276b, 0x276b; 0x276d, 0x276d; 744 + 0x276f, 0x276f; 0x2771, 0x2771; 0x2773, 0x2773; 0x2775, 0x2775; 0x27c6, 0x27c6; 745 + 0x27e7, 0x27e7; 0x27e9, 0x27e9; 0x27eb, 0x27eb; 0x27ed, 0x27ed; 0x27ef, 0x27ef; 746 + 0x2984, 0x2984; 0x2986, 0x2986; 0x2988, 0x2988; 0x298a, 0x298a; 0x298c, 0x298c; 747 + 0x298e, 0x298e; 0x2990, 0x2990; 0x2992, 0x2992; 0x2994, 0x2994; 0x2996, 0x2996; 748 + 0x2998, 0x2998; 0x29d9, 0x29d9; 0x29db, 0x29db; 0x29fd, 0x29fd; 0x2e23, 0x2e23; 749 + 0x2e25, 0x2e25; 0x2e27, 0x2e27; 0x2e29, 0x2e29; 0x2e56, 0x2e56; 0x2e58, 0x2e58; 750 + 0x2e5a, 0x2e5a; 0x2e5c, 0x2e5c; 0x3009, 0x3009; 0x300b, 0x300b; 0x300d, 0x300d; 751 + 0x300f, 0x300f; 0x3011, 0x3011; 0x3015, 0x3015; 0x3017, 0x3017; 0x3019, 0x3019; 752 + 0x301b, 0x301b; 0x301e, 0x301f; 0xfd3e, 0xfd3e; 0xfe18, 0xfe18; 0xfe36, 0xfe36; 753 + 0xfe38, 0xfe38; 0xfe3a, 0xfe3a; 0xfe3c, 0xfe3c; 0xfe3e, 0xfe3e; 0xfe40, 0xfe40; 754 + 0xfe42, 0xfe42; 0xfe44, 0xfe44; 0xfe48, 0xfe48; 0xfe5a, 0xfe5a; 0xfe5c, 0xfe5c; 755 + 0xfe5e, 0xfe5e; 0xff09, 0xff09; 0xff3d, 0xff3d; 0xff5d, 0xff5d; 0xff60, 0xff60; 756 + 0xff63, 0xff63] 757 + 758 + let pf = Sedlex_utils.Cset.of_list 759 + [0xbb, 0xbb; 0x2019, 0x2019; 0x201d, 0x201d; 0x203a, 0x203a; 0x2e03, 0x2e03; 760 + 0x2e05, 0x2e05; 0x2e0a, 0x2e0a; 0x2e0d, 0x2e0d; 0x2e1d, 0x2e1d; 0x2e21, 0x2e21] 761 + 762 + let pi = Sedlex_utils.Cset.of_list 763 + [0xab, 0xab; 0x2018, 0x2018; 0x201b, 0x201c; 0x201f, 0x201f; 0x2039, 0x2039; 764 + 0x2e02, 0x2e02; 0x2e04, 0x2e04; 0x2e09, 0x2e09; 0x2e0c, 0x2e0c; 0x2e1c, 0x2e1c; 765 + 0x2e20, 0x2e20] 766 + 767 + let po = Sedlex_utils.Cset.of_list 768 + [0x21, 0x23; 0x25, 0x27; 0x2a, 0x2a; 0x2c, 0x2c; 0x2e, 0x2f; 769 + 0x3a, 0x3b; 0x3f, 0x40; 0x5c, 0x5c; 0xa1, 0xa1; 0xa7, 0xa7; 770 + 0xb6, 0xb7; 0xbf, 0xbf; 0x37e, 0x37e; 0x387, 0x387; 0x55a, 0x55f; 771 + 0x589, 0x589; 0x5c0, 0x5c0; 0x5c3, 0x5c3; 0x5c6, 0x5c6; 0x5f3, 0x5f4; 772 + 0x609, 0x60a; 0x60c, 0x60d; 0x61b, 0x61b; 0x61d, 0x61f; 0x66a, 0x66d; 773 + 0x6d4, 0x6d4; 0x700, 0x70d; 0x7f7, 0x7f9; 0x830, 0x83e; 0x85e, 0x85e; 774 + 0x964, 0x965; 0x970, 0x970; 0x9fd, 0x9fd; 0xa76, 0xa76; 0xaf0, 0xaf0; 775 + 0xc77, 0xc77; 0xc84, 0xc84; 0xdf4, 0xdf4; 0xe4f, 0xe4f; 0xe5a, 0xe5b; 776 + 0xf04, 0xf12; 0xf14, 0xf14; 0xf85, 0xf85; 0xfd0, 0xfd4; 0xfd9, 0xfda; 777 + 0x104a, 0x104f; 0x10fb, 0x10fb; 0x1360, 0x1368; 0x166e, 0x166e; 0x16eb, 0x16ed; 778 + 0x1735, 0x1736; 0x17d4, 0x17d6; 0x17d8, 0x17da; 0x1800, 0x1805; 0x1807, 0x180a; 779 + 0x1944, 0x1945; 0x1a1e, 0x1a1f; 0x1aa0, 0x1aa6; 0x1aa8, 0x1aad; 0x1b4e, 0x1b4f; 780 + 0x1b5a, 0x1b60; 0x1b7d, 0x1b7f; 0x1bfc, 0x1bff; 0x1c3b, 0x1c3f; 0x1c7e, 0x1c7f; 781 + 0x1cc0, 0x1cc7; 0x1cd3, 0x1cd3; 0x2016, 0x2017; 0x2020, 0x2027; 0x2030, 0x2038; 782 + 0x203b, 0x203e; 0x2041, 0x2043; 0x2047, 0x2051; 0x2053, 0x2053; 0x2055, 0x205e; 783 + 0x2cf9, 0x2cfc; 0x2cfe, 0x2cff; 0x2d70, 0x2d70; 0x2e00, 0x2e01; 0x2e06, 0x2e08; 784 + 0x2e0b, 0x2e0b; 0x2e0e, 0x2e16; 0x2e18, 0x2e19; 0x2e1b, 0x2e1b; 0x2e1e, 0x2e1f; 785 + 0x2e2a, 0x2e2e; 0x2e30, 0x2e39; 0x2e3c, 0x2e3f; 0x2e41, 0x2e41; 0x2e43, 0x2e4f; 786 + 0x2e52, 0x2e54; 0x3001, 0x3003; 0x303d, 0x303d; 0x30fb, 0x30fb; 0xa4fe, 0xa4ff; 787 + 0xa60d, 0xa60f; 0xa673, 0xa673; 0xa67e, 0xa67e; 0xa6f2, 0xa6f7; 0xa874, 0xa877; 788 + 0xa8ce, 0xa8cf; 0xa8f8, 0xa8fa; 0xa8fc, 0xa8fc; 0xa92e, 0xa92f; 0xa95f, 0xa95f; 789 + 0xa9c1, 0xa9cd; 0xa9de, 0xa9df; 0xaa5c, 0xaa5f; 0xaade, 0xaadf; 0xaaf0, 0xaaf1; 790 + 0xabeb, 0xabeb; 0xfe10, 0xfe16; 0xfe19, 0xfe19; 0xfe30, 0xfe30; 0xfe45, 0xfe46; 791 + 0xfe49, 0xfe4c; 0xfe50, 0xfe52; 0xfe54, 0xfe57; 0xfe5f, 0xfe61; 0xfe68, 0xfe68; 792 + 0xfe6a, 0xfe6b; 0xff01, 0xff03; 0xff05, 0xff07; 0xff0a, 0xff0a; 0xff0c, 0xff0c; 793 + 0xff0e, 0xff0f; 0xff1a, 0xff1b; 0xff1f, 0xff20; 0xff3c, 0xff3c; 0xff61, 0xff61; 794 + 0xff64, 0xff65; 0x10100, 0x10102; 0x1039f, 0x1039f; 0x103d0, 0x103d0; 0x1056f, 0x1056f; 795 + 0x10857, 0x10857; 0x1091f, 0x1091f; 0x1093f, 0x1093f; 0x10a50, 0x10a58; 0x10a7f, 0x10a7f; 796 + 0x10af0, 0x10af6; 0x10b39, 0x10b3f; 0x10b99, 0x10b9c; 0x10f55, 0x10f59; 0x10f86, 0x10f89; 797 + 0x11047, 0x1104d; 0x110bb, 0x110bc; 0x110be, 0x110c1; 0x11140, 0x11143; 0x11174, 0x11175; 798 + 0x111c5, 0x111c8; 0x111cd, 0x111cd; 0x111db, 0x111db; 0x111dd, 0x111df; 0x11238, 0x1123d; 799 + 0x112a9, 0x112a9; 0x113d4, 0x113d5; 0x113d7, 0x113d8; 0x1144b, 0x1144f; 0x1145a, 0x1145b; 800 + 0x1145d, 0x1145d; 0x114c6, 0x114c6; 0x115c1, 0x115d7; 0x11641, 0x11643; 0x11660, 0x1166c; 801 + 0x116b9, 0x116b9; 0x1173c, 0x1173e; 0x1183b, 0x1183b; 0x11944, 0x11946; 0x119e2, 0x119e2; 802 + 0x11a3f, 0x11a46; 0x11a9a, 0x11a9c; 0x11a9e, 0x11aa2; 0x11b00, 0x11b09; 0x11be1, 0x11be1; 803 + 0x11c41, 0x11c45; 0x11c70, 0x11c71; 0x11ef7, 0x11ef8; 0x11f43, 0x11f4f; 0x11fff, 0x11fff; 804 + 0x12470, 0x12474; 0x12ff1, 0x12ff2; 0x16a6e, 0x16a6f; 0x16af5, 0x16af5; 0x16b37, 0x16b3b; 805 + 0x16b44, 0x16b44; 0x16d6d, 0x16d6f; 0x16e97, 0x16e9a; 0x16fe2, 0x16fe2; 0x1bc9f, 0x1bc9f; 806 + 0x1da87, 0x1da8b; 0x1e5ff, 0x1e5ff; 0x1e95e, 0x1e95f] 807 + 808 + let ps = Sedlex_utils.Cset.of_list 809 + [0x28, 0x28; 0x5b, 0x5b; 0x7b, 0x7b; 0xf3a, 0xf3a; 0xf3c, 0xf3c; 810 + 0x169b, 0x169b; 0x201a, 0x201a; 0x201e, 0x201e; 0x2045, 0x2045; 0x207d, 0x207d; 811 + 0x208d, 0x208d; 0x2308, 0x2308; 0x230a, 0x230a; 0x2329, 0x2329; 0x2768, 0x2768; 812 + 0x276a, 0x276a; 0x276c, 0x276c; 0x276e, 0x276e; 0x2770, 0x2770; 0x2772, 0x2772; 813 + 0x2774, 0x2774; 0x27c5, 0x27c5; 0x27e6, 0x27e6; 0x27e8, 0x27e8; 0x27ea, 0x27ea; 814 + 0x27ec, 0x27ec; 0x27ee, 0x27ee; 0x2983, 0x2983; 0x2985, 0x2985; 0x2987, 0x2987; 815 + 0x2989, 0x2989; 0x298b, 0x298b; 0x298d, 0x298d; 0x298f, 0x298f; 0x2991, 0x2991; 816 + 0x2993, 0x2993; 0x2995, 0x2995; 0x2997, 0x2997; 0x29d8, 0x29d8; 0x29da, 0x29da; 817 + 0x29fc, 0x29fc; 0x2e22, 0x2e22; 0x2e24, 0x2e24; 0x2e26, 0x2e26; 0x2e28, 0x2e28; 818 + 0x2e42, 0x2e42; 0x2e55, 0x2e55; 0x2e57, 0x2e57; 0x2e59, 0x2e59; 0x2e5b, 0x2e5b; 819 + 0x3008, 0x3008; 0x300a, 0x300a; 0x300c, 0x300c; 0x300e, 0x300e; 0x3010, 0x3010; 820 + 0x3014, 0x3014; 0x3016, 0x3016; 0x3018, 0x3018; 0x301a, 0x301a; 0x301d, 0x301d; 821 + 0xfd3f, 0xfd3f; 0xfe17, 0xfe17; 0xfe35, 0xfe35; 0xfe37, 0xfe37; 0xfe39, 0xfe39; 822 + 0xfe3b, 0xfe3b; 0xfe3d, 0xfe3d; 0xfe3f, 0xfe3f; 0xfe41, 0xfe41; 0xfe43, 0xfe43; 823 + 0xfe47, 0xfe47; 0xfe59, 0xfe59; 0xfe5b, 0xfe5b; 0xfe5d, 0xfe5d; 0xff08, 0xff08; 824 + 0xff3b, 0xff3b; 0xff5b, 0xff5b; 0xff5f, 0xff5f; 0xff62, 0xff62] 825 + 826 + let sc = Sedlex_utils.Cset.of_list 827 + [0x24, 0x24; 0xa2, 0xa5; 0x58f, 0x58f; 0x60b, 0x60b; 0x7fe, 0x7ff; 828 + 0x9f2, 0x9f3; 0x9fb, 0x9fb; 0xaf1, 0xaf1; 0xbf9, 0xbf9; 0xe3f, 0xe3f; 829 + 0x17db, 0x17db; 0x20a0, 0x20c0; 0xa838, 0xa838; 0xfdfc, 0xfdfc; 0xfe69, 0xfe69; 830 + 0xff04, 0xff04; 0xffe0, 0xffe1; 0xffe5, 0xffe6; 0x11fdd, 0x11fe0; 0x1e2ff, 0x1e2ff; 831 + 0x1ecb0, 0x1ecb0] 832 + 833 + let sk = Sedlex_utils.Cset.of_list 834 + [0x5e, 0x5e; 0x60, 0x60; 0xa8, 0xa8; 0xaf, 0xaf; 0xb4, 0xb4; 835 + 0xb8, 0xb8; 0x2c2, 0x2c5; 0x2d2, 0x2df; 0x2e5, 0x2eb; 0x2ed, 0x2ed; 836 + 0x2ef, 0x2ff; 0x375, 0x375; 0x384, 0x385; 0x888, 0x888; 0x1fbd, 0x1fbd; 837 + 0x1fbf, 0x1fc1; 0x1fcd, 0x1fcf; 0x1fdd, 0x1fdf; 0x1fed, 0x1fef; 0x1ffd, 0x1ffe; 838 + 0x309b, 0x309c; 0xa700, 0xa716; 0xa720, 0xa721; 0xa789, 0xa78a; 0xab5b, 0xab5b; 839 + 0xab6a, 0xab6b; 0xfbb2, 0xfbc2; 0xff3e, 0xff3e; 0xff40, 0xff40; 0xffe3, 0xffe3; 840 + 0x1f3fb, 0x1f3ff] 841 + 842 + let sm = Sedlex_utils.Cset.of_list 843 + [0x2b, 0x2b; 0x3c, 0x3e; 0x7c, 0x7c; 0x7e, 0x7e; 0xac, 0xac; 844 + 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3f6, 0x3f6; 0x606, 0x608; 845 + 0x2044, 0x2044; 0x2052, 0x2052; 0x207a, 0x207c; 0x208a, 0x208c; 0x2118, 0x2118; 846 + 0x2140, 0x2144; 0x214b, 0x214b; 0x2190, 0x2194; 0x219a, 0x219b; 0x21a0, 0x21a0; 847 + 0x21a3, 0x21a3; 0x21a6, 0x21a6; 0x21ae, 0x21ae; 0x21ce, 0x21cf; 0x21d2, 0x21d2; 848 + 0x21d4, 0x21d4; 0x21f4, 0x22ff; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b3; 849 + 0x23dc, 0x23e1; 0x25b7, 0x25b7; 0x25c1, 0x25c1; 0x25f8, 0x25ff; 0x266f, 0x266f; 850 + 0x27c0, 0x27c4; 0x27c7, 0x27e5; 0x27f0, 0x27ff; 0x2900, 0x2982; 0x2999, 0x29d7; 851 + 0x29dc, 0x29fb; 0x29fe, 0x2aff; 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 852 + 0xfe62, 0xfe62; 0xfe64, 0xfe66; 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff5c, 0xff5c; 853 + 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x10d8e, 0x10d8f; 0x1d6c1, 0x1d6c1; 854 + 0x1d6db, 0x1d6db; 0x1d6fb, 0x1d6fb; 0x1d715, 0x1d715; 0x1d735, 0x1d735; 0x1d74f, 0x1d74f; 855 + 0x1d76f, 0x1d76f; 0x1d789, 0x1d789; 0x1d7a9, 0x1d7a9; 0x1d7c3, 0x1d7c3; 0x1eef0, 0x1eef1] 856 + 857 + let so = Sedlex_utils.Cset.of_list 858 + [0xa6, 0xa6; 0xa9, 0xa9; 0xae, 0xae; 0xb0, 0xb0; 0x482, 0x482; 859 + 0x58d, 0x58e; 0x60e, 0x60f; 0x6de, 0x6de; 0x6e9, 0x6e9; 0x6fd, 0x6fe; 860 + 0x7f6, 0x7f6; 0x9fa, 0x9fa; 0xb70, 0xb70; 0xbf3, 0xbf8; 0xbfa, 0xbfa; 861 + 0xc7f, 0xc7f; 0xd4f, 0xd4f; 0xd79, 0xd79; 0xf01, 0xf03; 0xf13, 0xf13; 862 + 0xf15, 0xf17; 0xf1a, 0xf1f; 0xf34, 0xf34; 0xf36, 0xf36; 0xf38, 0xf38; 863 + 0xfbe, 0xfc5; 0xfc7, 0xfcc; 0xfce, 0xfcf; 0xfd5, 0xfd8; 0x109e, 0x109f; 864 + 0x1390, 0x1399; 0x166d, 0x166d; 0x1940, 0x1940; 0x19de, 0x19ff; 0x1b61, 0x1b6a; 865 + 0x1b74, 0x1b7c; 0x2100, 0x2101; 0x2103, 0x2106; 0x2108, 0x2109; 0x2114, 0x2114; 866 + 0x2116, 0x2117; 0x211e, 0x2123; 0x2125, 0x2125; 0x2127, 0x2127; 0x2129, 0x2129; 867 + 0x212e, 0x212e; 0x213a, 0x213b; 0x214a, 0x214a; 0x214c, 0x214d; 0x214f, 0x214f; 868 + 0x218a, 0x218b; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 0x21a4, 0x21a5; 869 + 0x21a7, 0x21ad; 0x21af, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21f3; 870 + 0x2300, 0x2307; 0x230c, 0x231f; 0x2322, 0x2328; 0x232b, 0x237b; 0x237d, 0x239a; 871 + 0x23b4, 0x23db; 0x23e2, 0x2429; 0x2440, 0x244a; 0x249c, 0x24e9; 0x2500, 0x25b6; 872 + 0x25b8, 0x25c0; 0x25c2, 0x25f7; 0x2600, 0x266e; 0x2670, 0x2767; 0x2794, 0x27bf; 873 + 0x2800, 0x28ff; 0x2b00, 0x2b2f; 0x2b45, 0x2b46; 0x2b4d, 0x2b73; 0x2b76, 0x2b95; 874 + 0x2b97, 0x2bff; 0x2ce5, 0x2cea; 0x2e50, 0x2e51; 0x2e80, 0x2e99; 0x2e9b, 0x2ef3; 875 + 0x2f00, 0x2fd5; 0x2ff0, 0x2fff; 0x3004, 0x3004; 0x3012, 0x3013; 0x3020, 0x3020; 876 + 0x3036, 0x3037; 0x303e, 0x303f; 0x3190, 0x3191; 0x3196, 0x319f; 0x31c0, 0x31e5; 877 + 0x31ef, 0x31ef; 0x3200, 0x321e; 0x322a, 0x3247; 0x3250, 0x3250; 0x3260, 0x327f; 878 + 0x328a, 0x32b0; 0x32c0, 0x33ff; 0x4dc0, 0x4dff; 0xa490, 0xa4c6; 0xa828, 0xa82b; 879 + 0xa836, 0xa837; 0xa839, 0xa839; 0xaa77, 0xaa79; 0xfd40, 0xfd4f; 0xfdcf, 0xfdcf; 880 + 0xfdfd, 0xfdff; 0xffe4, 0xffe4; 0xffe8, 0xffe8; 0xffed, 0xffee; 0xfffc, 0xfffd; 881 + 0x10137, 0x1013f; 0x10179, 0x10189; 0x1018c, 0x1018e; 0x10190, 0x1019c; 0x101a0, 0x101a0; 882 + 0x101d0, 0x101fc; 0x10877, 0x10878; 0x10ac8, 0x10ac8; 0x1173f, 0x1173f; 0x11fd5, 0x11fdc; 883 + 0x11fe1, 0x11ff1; 0x16b3c, 0x16b3f; 0x16b45, 0x16b45; 0x1bc9c, 0x1bc9c; 0x1cc00, 0x1ccef; 884 + 0x1cd00, 0x1ceb3; 0x1cf50, 0x1cfc3; 0x1d000, 0x1d0f5; 0x1d100, 0x1d126; 0x1d129, 0x1d164; 885 + 0x1d16a, 0x1d16c; 0x1d183, 0x1d184; 0x1d18c, 0x1d1a9; 0x1d1ae, 0x1d1ea; 0x1d200, 0x1d241; 886 + 0x1d245, 0x1d245; 0x1d300, 0x1d356; 0x1d800, 0x1d9ff; 0x1da37, 0x1da3a; 0x1da6d, 0x1da74; 887 + 0x1da76, 0x1da83; 0x1da85, 0x1da86; 0x1e14f, 0x1e14f; 0x1ecac, 0x1ecac; 0x1ed2e, 0x1ed2e; 888 + 0x1f000, 0x1f02b; 0x1f030, 0x1f093; 0x1f0a0, 0x1f0ae; 0x1f0b1, 0x1f0bf; 0x1f0c1, 0x1f0cf; 889 + 0x1f0d1, 0x1f0f5; 0x1f10d, 0x1f1ad; 0x1f1e6, 0x1f202; 0x1f210, 0x1f23b; 0x1f240, 0x1f248; 890 + 0x1f250, 0x1f251; 0x1f260, 0x1f265; 0x1f300, 0x1f3fa; 0x1f400, 0x1f6d7; 0x1f6dc, 0x1f6ec; 891 + 0x1f6f0, 0x1f6fc; 0x1f700, 0x1f776; 0x1f77b, 0x1f7d9; 0x1f7e0, 0x1f7eb; 0x1f7f0, 0x1f7f0; 892 + 0x1f800, 0x1f80b; 0x1f810, 0x1f847; 0x1f850, 0x1f859; 0x1f860, 0x1f887; 0x1f890, 0x1f8ad; 893 + 0x1f8b0, 0x1f8bb; 0x1f8c0, 0x1f8c1; 0x1f900, 0x1fa53; 0x1fa60, 0x1fa6d; 0x1fa70, 0x1fa7c; 894 + 0x1fa80, 0x1fa89; 0x1fa8f, 0x1fac6; 0x1face, 0x1fadc; 0x1fadf, 0x1fae9; 0x1faf0, 0x1faf8; 895 + 0x1fb00, 0x1fb92; 0x1fb94, 0x1fbef] 896 + 897 + let zl = Sedlex_utils.Cset.of_list 898 + [0x2028, 0x2028] 899 + 900 + let zp = Sedlex_utils.Cset.of_list 901 + [0x2029, 0x2029] 902 + 903 + let zs = Sedlex_utils.Cset.of_list 904 + [0x20, 0x20; 0xa0, 0xa0; 0x1680, 0x1680; 0x2000, 0x200a; 0x202f, 0x202f; 905 + 0x205f, 0x205f; 0x3000, 0x3000] 906 + 907 + let list = [ 908 + ("cc", cc); 909 + ("cf", cf); 910 + ("cn", cn); 911 + ("co", co); 912 + ("cs", cs); 913 + ("ll", ll); 914 + ("lm", lm); 915 + ("lo", lo); 916 + ("lt", lt); 917 + ("lu", lu); 918 + ("mc", mc); 919 + ("me", me); 920 + ("mn", mn); 921 + ("nd", nd); 922 + ("nl", nl); 923 + ("no", no); 924 + ("pc", pc); 925 + ("pd", pd); 926 + ("pe", pe); 927 + ("pf", pf); 928 + ("pi", pi); 929 + ("po", po); 930 + ("ps", ps); 931 + ("sc", sc); 932 + ("sk", sk); 933 + ("sm", sm); 934 + ("so", so); 935 + ("zl", zl); 936 + ("zp", zp); 937 + ("zs", zs) 938 + ] 939 + 940 + end 941 + 942 + module Properties = struct 943 + 944 + let alphabetic = Sedlex_utils.Cset.of_list 945 + [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 946 + 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 947 + 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x345, 0x345; 0x363, 0x374; 0x376, 0x377; 948 + 0x37a, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 949 + 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 950 + 0x559, 0x559; 0x560, 0x588; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 951 + 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 952 + 0x620, 0x657; 0x659, 0x65f; 0x66e, 0x6d3; 0x6d5, 0x6dc; 0x6e1, 0x6e8; 953 + 0x6ed, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x73f; 0x74d, 0x7b1; 954 + 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x817; 0x81a, 0x82c; 955 + 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x897, 0x897; 956 + 0x8a0, 0x8c9; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8f0, 0x93b; 0x93d, 0x94c; 957 + 0x94e, 0x950; 0x955, 0x963; 0x971, 0x983; 0x985, 0x98c; 0x98f, 0x990; 958 + 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9c4; 959 + 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 960 + 0x9df, 0x9e3; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa01, 0xa03; 0xa05, 0xa0a; 961 + 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 962 + 0xa38, 0xa39; 0xa3e, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa51, 0xa51; 963 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa70, 0xa75; 0xa81, 0xa83; 0xa85, 0xa8d; 964 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 965 + 0xabd, 0xac5; 0xac7, 0xac9; 0xacb, 0xacc; 0xad0, 0xad0; 0xae0, 0xae3; 966 + 0xaf9, 0xafc; 0xb01, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 967 + 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb44; 0xb47, 0xb48; 968 + 0xb4b, 0xb4c; 0xb56, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb63; 0xb71, 0xb71; 969 + 0xb82, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 970 + 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 971 + 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 972 + 0xc00, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc44; 973 + 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5d, 0xc5d; 974 + 0xc60, 0xc63; 0xc80, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 975 + 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcc4; 0xcc6, 0xcc8; 0xcca, 0xccc; 976 + 0xcd5, 0xcd6; 0xcdd, 0xcde; 0xce0, 0xce3; 0xcf1, 0xcf3; 0xd00, 0xd0c; 977 + 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 978 + 0xd4e, 0xd4e; 0xd54, 0xd57; 0xd5f, 0xd63; 0xd7a, 0xd7f; 0xd81, 0xd83; 979 + 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 980 + 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 0xe01, 0xe3a; 981 + 0xe40, 0xe46; 0xe4d, 0xe4d; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 982 + 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb9; 0xebb, 0xebd; 0xec0, 0xec4; 983 + 0xec6, 0xec6; 0xecd, 0xecd; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 984 + 0xf49, 0xf6c; 0xf71, 0xf83; 0xf88, 0xf97; 0xf99, 0xfbc; 0x1000, 0x1036; 985 + 0x1038, 0x1038; 0x103b, 0x103f; 0x1050, 0x108f; 0x109a, 0x109d; 0x10a0, 0x10c5; 986 + 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 987 + 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 988 + 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 989 + 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 990 + 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 991 + 0x16a0, 0x16ea; 0x16ee, 0x16f8; 0x1700, 0x1713; 0x171f, 0x1733; 0x1740, 0x1753; 992 + 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b6, 0x17c8; 993 + 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1878; 0x1880, 0x18aa; 0x18b0, 0x18f5; 994 + 0x1900, 0x191e; 0x1920, 0x192b; 0x1930, 0x1938; 0x1950, 0x196d; 0x1970, 0x1974; 995 + 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a1b; 0x1a20, 0x1a5e; 0x1a61, 0x1a74; 996 + 0x1aa7, 0x1aa7; 0x1abf, 0x1ac0; 0x1acc, 0x1ace; 0x1b00, 0x1b33; 0x1b35, 0x1b43; 997 + 0x1b45, 0x1b4c; 0x1b80, 0x1ba9; 0x1bac, 0x1baf; 0x1bba, 0x1be5; 0x1be7, 0x1bf1; 998 + 0x1c00, 0x1c36; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c7d; 0x1c80, 0x1c8a; 0x1c90, 0x1cba; 999 + 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 1000 + 0x1d00, 0x1dbf; 0x1dd3, 0x1df4; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 1001 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 1002 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 1003 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 1004 + 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 1005 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 1006 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212f, 0x2139; 0x213c, 0x213f; 1007 + 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2188; 0x24b6, 0x24e9; 0x2c00, 0x2ce4; 1008 + 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 1009 + 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 1010 + 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 1011 + 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x2e2f, 0x2e2f; 0x3005, 0x3007; 0x3021, 0x3029; 1012 + 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x309d, 0x309f; 0x30a1, 0x30fa; 1013 + 0x30fc, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 1014 + 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 0xa610, 0xa61f; 1015 + 0xa62a, 0xa62b; 0xa640, 0xa66e; 0xa674, 0xa67b; 0xa67f, 0xa6ef; 0xa717, 0xa71f; 1016 + 0xa722, 0xa788; 0xa78b, 0xa7cd; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7dc; 1017 + 0xa7f2, 0xa805; 0xa807, 0xa827; 0xa840, 0xa873; 0xa880, 0xa8c3; 0xa8c5, 0xa8c5; 1018 + 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8ff; 0xa90a, 0xa92a; 0xa930, 0xa952; 1019 + 0xa960, 0xa97c; 0xa980, 0xa9b2; 0xa9b4, 0xa9bf; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9ef; 1020 + 0xa9fa, 0xa9fe; 0xaa00, 0xaa36; 0xaa40, 0xaa4d; 0xaa60, 0xaa76; 0xaa7a, 0xaabe; 1021 + 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadd; 0xaae0, 0xaaef; 0xaaf2, 0xaaf5; 1022 + 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 1023 + 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabea; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 1024 + 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 1025 + 0xfb1d, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 1026 + 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 1027 + 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 1028 + 0xff66, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 1029 + 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 1030 + 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 1031 + 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 1032 + 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 1033 + 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 1034 + 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 1035 + 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 1036 + 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 1037 + 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 1038 + 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 1039 + 0x109be, 0x109bf; 0x10a00, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a13; 0x10a15, 0x10a17; 1040 + 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 1041 + 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 1042 + 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d27; 0x10d4a, 0x10d65; 0x10d69, 0x10d69; 1043 + 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec4; 1044 + 0x10efc, 0x10efc; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 1045 + 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11045; 0x11071, 0x11075; 0x11080, 0x110b8; 1046 + 0x110c2, 0x110c2; 0x110d0, 0x110e8; 0x11100, 0x11132; 0x11144, 0x11147; 0x11150, 0x11172; 1047 + 0x11176, 0x11176; 0x11180, 0x111bf; 0x111c1, 0x111c4; 0x111ce, 0x111cf; 0x111da, 0x111da; 1048 + 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x11234; 0x11237, 0x11237; 0x1123e, 0x11241; 1049 + 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 1050 + 0x112b0, 0x112e8; 0x11300, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 1051 + 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x11344; 0x11347, 0x11348; 1052 + 0x1134b, 0x1134c; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11363; 0x11380, 0x11389; 1053 + 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113c0; 0x113c2, 0x113c2; 1054 + 0x113c5, 0x113c5; 0x113c7, 0x113ca; 0x113cc, 0x113cd; 0x113d1, 0x113d1; 0x113d3, 0x113d3; 1055 + 0x11400, 0x11441; 0x11443, 0x11445; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114c1; 1056 + 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115b5; 0x115b8, 0x115be; 0x115d8, 0x115dd; 1057 + 0x11600, 0x1163e; 0x11640, 0x11640; 0x11644, 0x11644; 0x11680, 0x116b5; 0x116b8, 0x116b8; 1058 + 0x11700, 0x1171a; 0x1171d, 0x1172a; 0x11740, 0x11746; 0x11800, 0x11838; 0x118a0, 0x118df; 1059 + 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x11935; 1060 + 0x11937, 0x11938; 0x1193b, 0x1193c; 0x1193f, 0x11942; 0x119a0, 0x119a7; 0x119aa, 0x119d7; 1061 + 0x119da, 0x119df; 0x119e1, 0x119e1; 0x119e3, 0x119e4; 0x11a00, 0x11a32; 0x11a35, 0x11a3e; 1062 + 0x11a50, 0x11a97; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 0x11c00, 0x11c08; 1063 + 0x11c0a, 0x11c36; 0x11c38, 0x11c3e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 1064 + 0x11ca9, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d36; 0x11d3a, 0x11d3a; 1065 + 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 0x11d46, 0x11d47; 0x11d60, 0x11d65; 1066 + 0x11d67, 0x11d68; 0x11d6a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d96; 0x11d98, 0x11d98; 1067 + 0x11ee0, 0x11ef6; 0x11f00, 0x11f10; 0x11f12, 0x11f3a; 0x11f3e, 0x11f40; 0x11fb0, 0x11fb0; 1068 + 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 1069 + 0x13441, 0x13446; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x1612e; 0x16800, 0x16a38; 1070 + 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 1071 + 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 1072 + 0x16f4f, 0x16f87; 0x16f8f, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16ff0, 0x16ff1; 1073 + 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18cff, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 1074 + 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 0x1b150, 0x1b152; 0x1b155, 0x1b155; 1075 + 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 1076 + 0x1bc90, 0x1bc99; 0x1bc9e, 0x1bc9e; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 1077 + 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 1078 + 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 1079 + 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 1080 + 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 1081 + 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 1082 + 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df1e; 0x1df25, 0x1df2a; 0x1e000, 0x1e006; 1083 + 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e030, 0x1e06d; 1084 + 0x1e08f, 0x1e08f; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 1085 + 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4eb; 0x1e5d0, 0x1e5ed; 0x1e5f0, 0x1e5f0; 0x1e7e0, 0x1e7e6; 1086 + 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 1087 + 0x1e947, 0x1e947; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 1088 + 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 1089 + 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 1090 + 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 1091 + 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 1092 + 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 1093 + 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 1094 + 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189; 0x20000, 0x2a6df; 0x2a700, 0x2b739; 1095 + 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 1096 + 0x30000, 0x3134a; 0x31350, 0x323af] 1097 + 1098 + let ascii_hex_digit = Sedlex_utils.Cset.of_list 1099 + [0x30, 0x39; 0x41, 0x46; 0x61, 0x66] 1100 + 1101 + let hex_digit = Sedlex_utils.Cset.of_list 1102 + [0x30, 0x39; 0x41, 0x46; 0x61, 0x66; 0xff10, 0xff19; 0xff21, 0xff26; 1103 + 0xff41, 0xff46] 1104 + 1105 + let id_continue = Sedlex_utils.Cset.of_list 1106 + [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 1107 + 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 1108 + 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 1109 + 0x300, 0x374; 0x376, 0x377; 0x37a, 0x37d; 0x37f, 0x37f; 0x386, 0x38a; 1110 + 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 1111 + 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 1112 + 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 1113 + 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x669; 0x66e, 0x6d3; 0x6d5, 0x6dc; 1114 + 0x6df, 0x6e8; 0x6ea, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x74a; 0x74d, 0x7b1; 1115 + 0x7c0, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x82d; 0x840, 0x85b; 1116 + 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x897, 0x8e1; 0x8e3, 0x963; 1117 + 0x966, 0x96f; 0x971, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1118 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9c4; 0x9c7, 0x9c8; 1119 + 0x9cb, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e3; 0x9e6, 0x9f1; 1120 + 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 1121 + 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 1122 + 0xa3c, 0xa3c; 0xa3e, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 1123 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa75; 0xa81, 0xa83; 0xa85, 0xa8d; 1124 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1125 + 0xabc, 0xac5; 0xac7, 0xac9; 0xacb, 0xacd; 0xad0, 0xad0; 0xae0, 0xae3; 1126 + 0xae6, 0xaef; 0xaf9, 0xaff; 0xb01, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 1127 + 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb44; 1128 + 0xb47, 0xb48; 0xb4b, 0xb4d; 0xb55, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb63; 1129 + 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 1130 + 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 1131 + 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcd; 1132 + 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc0c; 0xc0e, 0xc10; 1133 + 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3c, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 1134 + 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc63; 0xc66, 0xc6f; 1135 + 0xc80, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 1136 + 0xcb5, 0xcb9; 0xcbc, 0xcc4; 0xcc6, 0xcc8; 0xcca, 0xccd; 0xcd5, 0xcd6; 1137 + 0xcdd, 0xcde; 0xce0, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf3; 0xd00, 0xd0c; 1138 + 0xd0e, 0xd10; 0xd12, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4e; 0xd54, 0xd57; 1139 + 0xd5f, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd83; 0xd85, 0xd96; 1140 + 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 1141 + 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 1142 + 0xe01, 0xe3a; 0xe40, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 1143 + 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xebd; 0xec0, 0xec4; 1144 + 0xec6, 0xec6; 0xec8, 0xece; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 1145 + 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 1146 + 0xf3e, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf84; 0xf86, 0xf97; 0xf99, 0xfbc; 1147 + 0xfc6, 0xfc6; 0x1000, 0x1049; 0x1050, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1148 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1149 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 1150 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 1151 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 1152 + 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 1153 + 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f8; 0x1700, 0x1715; 0x171f, 0x1734; 1154 + 0x1740, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17d3; 1155 + 0x17d7, 0x17d7; 0x17dc, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x180f, 0x1819; 1156 + 0x1820, 0x1878; 0x1880, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x192b; 1157 + 0x1930, 0x193b; 0x1946, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 1158 + 0x19d0, 0x19da; 0x1a00, 0x1a1b; 0x1a20, 0x1a5e; 0x1a60, 0x1a7c; 0x1a7f, 0x1a89; 1159 + 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1ace; 0x1b00, 0x1b4c; 1160 + 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1bf3; 0x1c00, 0x1c37; 0x1c40, 0x1c49; 1161 + 0x1c4d, 0x1c7d; 0x1c80, 0x1c8a; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1cd0, 0x1cd2; 1162 + 0x1cd4, 0x1cfa; 0x1d00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 1163 + 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 1164 + 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 1165 + 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 1166 + 0x200c, 0x200d; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 0x207f, 0x207f; 1167 + 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2102, 0x2102; 1168 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 0x2124, 0x2124; 1169 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 1170 + 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cf3; 0x2d00, 0x2d25; 1171 + 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d7f, 0x2d96; 1172 + 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 1173 + 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x3005, 0x3007; 1174 + 0x3021, 0x302f; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x3099, 0x309f; 1175 + 0x30a1, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 1176 + 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 0xa610, 0xa62b; 1177 + 0xa640, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa6f1; 0xa717, 0xa71f; 0xa722, 0xa788; 1178 + 0xa78b, 0xa7cd; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7dc; 0xa7f2, 0xa827; 1179 + 0xa82c, 0xa82c; 0xa840, 0xa873; 0xa880, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f7; 1180 + 0xa8fb, 0xa8fb; 0xa8fd, 0xa92d; 0xa930, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa9c0; 1181 + 0xa9cf, 0xa9d9; 0xa9e0, 0xa9fe; 0xaa00, 0xaa36; 0xaa40, 0xaa4d; 0xaa50, 0xaa59; 1182 + 0xaa60, 0xaa76; 0xaa7a, 0xaac2; 0xaadb, 0xaadd; 0xaae0, 0xaaef; 0xaaf2, 0xaaf6; 1183 + 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 1184 + 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabea; 0xabec, 0xabed; 0xabf0, 0xabf9; 1185 + 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 1186 + 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 1187 + 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 1188 + 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 1189 + 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff10, 0xff19; 1190 + 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 0xff65, 0xffbe; 0xffc2, 0xffc7; 1191 + 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 1192 + 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 1193 + 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 1194 + 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 1195 + 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 1196 + 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 1197 + 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 1198 + 0x105bb, 0x105bc; 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 1199 + 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 1200 + 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 1201 + 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 1202 + 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a13; 1203 + 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 1204 + 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae6; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 1205 + 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 1206 + 0x10d00, 0x10d27; 0x10d30, 0x10d39; 0x10d40, 0x10d65; 0x10d69, 0x10d6d; 0x10d6f, 0x10d85; 1207 + 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec4; 0x10efc, 0x10f1c; 1208 + 0x10f27, 0x10f27; 0x10f30, 0x10f50; 0x10f70, 0x10f85; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 1209 + 0x11000, 0x11046; 0x11066, 0x11075; 0x1107f, 0x110ba; 0x110c2, 0x110c2; 0x110d0, 0x110e8; 1210 + 0x110f0, 0x110f9; 0x11100, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11147; 0x11150, 0x11173; 1211 + 0x11176, 0x11176; 0x11180, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111da; 0x111dc, 0x111dc; 1212 + 0x11200, 0x11211; 0x11213, 0x11237; 0x1123e, 0x11241; 0x11280, 0x11286; 0x11288, 0x11288; 1213 + 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112ea; 0x112f0, 0x112f9; 1214 + 0x11300, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 1215 + 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134d; 1216 + 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11363; 0x11366, 0x1136c; 0x11370, 0x11374; 1217 + 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113c0; 1218 + 0x113c2, 0x113c2; 0x113c5, 0x113c5; 0x113c7, 0x113ca; 0x113cc, 0x113d3; 0x113e1, 0x113e2; 1219 + 0x11400, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x11461; 0x11480, 0x114c5; 0x114c7, 0x114c7; 1220 + 0x114d0, 0x114d9; 0x11580, 0x115b5; 0x115b8, 0x115c0; 0x115d8, 0x115dd; 0x11600, 0x11640; 1221 + 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116b8; 0x116c0, 0x116c9; 0x116d0, 0x116e3; 1222 + 0x11700, 0x1171a; 0x1171d, 0x1172b; 0x11730, 0x11739; 0x11740, 0x11746; 0x11800, 0x1183a; 1223 + 0x118a0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 1224 + 0x11918, 0x11935; 0x11937, 0x11938; 0x1193b, 0x11943; 0x11950, 0x11959; 0x119a0, 0x119a7; 1225 + 0x119aa, 0x119d7; 0x119da, 0x119e1; 0x119e3, 0x119e4; 0x11a00, 0x11a3e; 0x11a47, 0x11a47; 1226 + 0x11a50, 0x11a99; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 0x11bf0, 0x11bf9; 1227 + 0x11c00, 0x11c08; 0x11c0a, 0x11c36; 0x11c38, 0x11c40; 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 1228 + 0x11c92, 0x11ca7; 0x11ca9, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d36; 1229 + 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d47; 0x11d50, 0x11d59; 0x11d60, 0x11d65; 1230 + 0x11d67, 0x11d68; 0x11d6a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d98; 0x11da0, 0x11da9; 1231 + 0x11ee0, 0x11ef6; 0x11f00, 0x11f10; 0x11f12, 0x11f3a; 0x11f3e, 0x11f42; 0x11f50, 0x11f5a; 1232 + 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 1233 + 0x13000, 0x1342f; 0x13440, 0x13455; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x16139; 1234 + 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 0x16a70, 0x16abe; 0x16ac0, 0x16ac9; 1235 + 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b36; 0x16b40, 0x16b43; 0x16b50, 0x16b59; 1236 + 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 0x16d70, 0x16d79; 0x16e40, 0x16e7f; 1237 + 0x16f00, 0x16f4a; 0x16f4f, 0x16f87; 0x16f8f, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe4; 1238 + 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18cff, 0x18d08; 0x1aff0, 0x1aff3; 1239 + 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 0x1b150, 0x1b152; 1240 + 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 1241 + 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1ccf0, 0x1ccf9; 0x1cf00, 0x1cf2d; 1242 + 0x1cf30, 0x1cf46; 0x1d165, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 1243 + 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 1244 + 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 1245 + 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 1246 + 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 1247 + 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 1248 + 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 1249 + 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 1250 + 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1df00, 0x1df1e; 1251 + 0x1df25, 0x1df2a; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 1252 + 0x1e026, 0x1e02a; 0x1e030, 0x1e06d; 0x1e08f, 0x1e08f; 0x1e100, 0x1e12c; 0x1e130, 0x1e13d; 1253 + 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ae; 0x1e2c0, 0x1e2f9; 0x1e4d0, 0x1e4f9; 1254 + 0x1e5d0, 0x1e5fa; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 1255 + 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e94b; 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 1256 + 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 1257 + 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 1258 + 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 1259 + 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 1260 + 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 1261 + 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 1262 + 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 0x20000, 0x2a6df; 0x2a700, 0x2b739; 1263 + 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 1264 + 0x30000, 0x3134a; 0x31350, 0x323af; 0xe0100, 0xe01ef] 1265 + 1266 + let id_start = Sedlex_utils.Cset.of_list 1267 + [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 1268 + 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 1269 + 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x374; 0x376, 0x377; 0x37a, 0x37d; 1270 + 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 1271 + 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 1272 + 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x64a; 0x66e, 0x66f; 1273 + 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 1274 + 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 1275 + 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 1276 + 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 1277 + 0x889, 0x88e; 0x8a0, 0x8c9; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 1278 + 0x958, 0x961; 0x971, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1279 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 1280 + 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 1281 + 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 1282 + 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 1283 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1284 + 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 1285 + 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 1286 + 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 1287 + 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 1288 + 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 1289 + 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 1290 + 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 1291 + 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 1292 + 0xcdd, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 1293 + 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 1294 + 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 1295 + 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe33; 0xe40, 0xe46; 0xe81, 0xe82; 1296 + 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 1297 + 0xeb2, 0xeb3; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 1298 + 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 1299 + 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 1300 + 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1301 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1302 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 1303 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 1304 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 1305 + 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 1306 + 0x16ee, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 1307 + 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1878; 1308 + 0x1880, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 1309 + 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 1310 + 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 1311 + 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c7d; 0x1c80, 0x1c8a; 1312 + 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 1313 + 0x1cfa, 0x1cfa; 0x1d00, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 1314 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 1315 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 1316 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 1317 + 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 1318 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 0x2124, 0x2124; 1319 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 1320 + 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 1321 + 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 1322 + 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 1323 + 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3007; 1324 + 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x309b, 0x309f; 1325 + 0x30a1, 0x30fa; 0x30fc, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 1326 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 1327 + 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66e; 0xa67f, 0xa69d; 0xa6a0, 0xa6ef; 1328 + 0xa717, 0xa71f; 0xa722, 0xa788; 0xa78b, 0xa7cd; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 1329 + 0xa7d5, 0xa7dc; 0xa7f2, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 1330 + 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 1331 + 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 1332 + 0xa9e0, 0xa9e4; 0xa9e6, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 1333 + 0xaa44, 0xaa4b; 0xaa60, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 1334 + 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadd; 1335 + 0xaae0, 0xaaea; 0xaaf2, 0xaaf4; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 1336 + 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabe2; 1337 + 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 1338 + 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 1339 + 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 1340 + 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 1341 + 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xffbe; 0xffc2, 0xffc7; 1342 + 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 1343 + 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 1344 + 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x1034a; 1345 + 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 1346 + 0x10400, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 1347 + 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 1348 + 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x105c0, 0x105f3; 0x10600, 0x10736; 1349 + 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 1350 + 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 1351 + 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 1352 + 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 1353 + 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 1354 + 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 1355 + 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 1356 + 0x10d4a, 0x10d65; 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec4; 1357 + 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 1358 + 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 1359 + 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 1360 + 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 1361 + 0x11200, 0x11211; 0x11213, 0x1122b; 0x1123f, 0x11240; 0x11280, 0x11286; 0x11288, 0x11288; 1362 + 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 1363 + 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 1364 + 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11380, 0x11389; 0x1138b, 0x1138b; 1365 + 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113b7; 0x113d1, 0x113d1; 0x113d3, 0x113d3; 1366 + 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 1367 + 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 1368 + 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 1369 + 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 1370 + 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 1371 + 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 1372 + 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 1373 + 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 1374 + 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 1375 + 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 0x11f02, 0x11f02; 0x11f04, 0x11f10; 1376 + 0x11f12, 0x11f33; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 1377 + 0x12f90, 0x12ff0; 0x13000, 0x1342f; 0x13441, 0x13446; 0x13460, 0x143fa; 0x14400, 0x14646; 1378 + 0x16100, 0x1611d; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 1379 + 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 1380 + 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 1381 + 0x16fe3, 0x16fe3; 0x17000, 0x187f7; 0x18800, 0x18cd5; 0x18cff, 0x18d08; 0x1aff0, 0x1aff3; 1382 + 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 0x1b150, 0x1b152; 1383 + 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 1384 + 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 1385 + 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 1386 + 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 1387 + 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 1388 + 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 1389 + 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 1390 + 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df1e; 0x1df25, 0x1df2a; 0x1e030, 0x1e06d; 1391 + 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 1392 + 0x1e4d0, 0x1e4eb; 0x1e5d0, 0x1e5ed; 0x1e5f0, 0x1e5f0; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 1393 + 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 1394 + 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 1395 + 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 1396 + 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 1397 + 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 1398 + 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 1399 + 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 1400 + 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 0x2a700, 0x2b739; 1401 + 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 1402 + 0x30000, 0x3134a; 0x31350, 0x323af] 1403 + 1404 + let lowercase = Sedlex_utils.Cset.of_list 1405 + [0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xdf, 0xf6; 1406 + 0xf8, 0xff; 0x101, 0x101; 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 1407 + 0x109, 0x109; 0x10b, 0x10b; 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 1408 + 0x113, 0x113; 0x115, 0x115; 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 1409 + 0x11d, 0x11d; 0x11f, 0x11f; 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 1410 + 0x127, 0x127; 0x129, 0x129; 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 1411 + 0x131, 0x131; 0x133, 0x133; 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 1412 + 0x13c, 0x13c; 0x13e, 0x13e; 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 1413 + 0x146, 0x146; 0x148, 0x149; 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 1414 + 0x151, 0x151; 0x153, 0x153; 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 1415 + 0x15b, 0x15b; 0x15d, 0x15d; 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 1416 + 0x165, 0x165; 0x167, 0x167; 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 1417 + 0x16f, 0x16f; 0x171, 0x171; 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 1418 + 0x17a, 0x17a; 0x17c, 0x17c; 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 1419 + 0x188, 0x188; 0x18c, 0x18d; 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 1420 + 0x19e, 0x19e; 0x1a1, 0x1a1; 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 1421 + 0x1aa, 0x1ab; 0x1ad, 0x1ad; 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 1422 + 0x1b9, 0x1ba; 0x1bd, 0x1bf; 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 1423 + 0x1ce, 0x1ce; 0x1d0, 0x1d0; 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 1424 + 0x1d8, 0x1d8; 0x1da, 0x1da; 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 1425 + 0x1e3, 0x1e3; 0x1e5, 0x1e5; 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 1426 + 0x1ed, 0x1ed; 0x1ef, 0x1f0; 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 1427 + 0x1fb, 0x1fb; 0x1fd, 0x1fd; 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 1428 + 0x205, 0x205; 0x207, 0x207; 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 1429 + 0x20f, 0x20f; 0x211, 0x211; 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 1430 + 0x219, 0x219; 0x21b, 0x21b; 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 1431 + 0x223, 0x223; 0x225, 0x225; 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 1432 + 0x22d, 0x22d; 0x22f, 0x22f; 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 1433 + 0x23f, 0x240; 0x242, 0x242; 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 1434 + 0x24d, 0x24d; 0x24f, 0x293; 0x295, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 1435 + 0x345, 0x345; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37a, 0x37d; 1436 + 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 1437 + 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 1438 + 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 1439 + 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 1440 + 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 1441 + 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 1442 + 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 1443 + 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 1444 + 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 1445 + 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 1446 + 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 1447 + 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 1448 + 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 1449 + 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 1450 + 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 1451 + 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 1452 + 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 1453 + 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 1454 + 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 1455 + 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 1456 + 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 1457 + 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 1458 + 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 1459 + 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 1460 + 0x10d0, 0x10fa; 0x10fc, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1c8a, 0x1c8a; 1461 + 0x1d00, 0x1dbf; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 0x1e05, 0x1e05; 0x1e07, 0x1e07; 1462 + 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 1463 + 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 1464 + 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 0x1e23, 0x1e23; 0x1e25, 0x1e25; 1465 + 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 1466 + 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 0x1e37, 0x1e37; 0x1e39, 0x1e39; 1467 + 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 0x1e41, 0x1e41; 0x1e43, 0x1e43; 1468 + 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 1469 + 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 0x1e55, 0x1e55; 0x1e57, 0x1e57; 1470 + 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 1471 + 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 1472 + 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 0x1e73, 0x1e73; 0x1e75, 0x1e75; 1473 + 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 1474 + 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 0x1e87, 0x1e87; 0x1e89, 0x1e89; 1475 + 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 0x1e91, 0x1e91; 0x1e93, 0x1e93; 1476 + 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 1477 + 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 1478 + 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 1479 + 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 1480 + 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 1481 + 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 1482 + 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 1483 + 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 1484 + 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 1485 + 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 0x1efd, 0x1efd; 0x1eff, 0x1f07; 1486 + 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 0x1f40, 0x1f45; 0x1f50, 0x1f57; 1487 + 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 1488 + 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 1489 + 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 1490 + 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x210a, 0x210a; 0x210e, 0x210f; 1491 + 0x2113, 0x2113; 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 1492 + 0x2146, 0x2149; 0x214e, 0x214e; 0x2170, 0x217f; 0x2184, 0x2184; 0x24d0, 0x24e9; 1493 + 0x2c30, 0x2c5f; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 1494 + 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 0x2c76, 0x2c7d; 0x2c81, 0x2c81; 1495 + 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 1496 + 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 0x2c93, 0x2c93; 0x2c95, 0x2c95; 1497 + 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 1498 + 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 1499 + 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 1500 + 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 1501 + 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 1502 + 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 1503 + 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 1504 + 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 1505 + 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 1506 + 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 0xa647, 0xa647; 0xa649, 0xa649; 1507 + 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 0xa651, 0xa651; 0xa653, 0xa653; 1508 + 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 0xa65b, 0xa65b; 0xa65d, 0xa65d; 1509 + 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 0xa665, 0xa665; 0xa667, 0xa667; 1510 + 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 0xa681, 0xa681; 0xa683, 0xa683; 1511 + 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 0xa68b, 0xa68b; 0xa68d, 0xa68d; 1512 + 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 0xa695, 0xa695; 0xa697, 0xa697; 1513 + 0xa699, 0xa699; 0xa69b, 0xa69d; 0xa723, 0xa723; 0xa725, 0xa725; 0xa727, 0xa727; 1514 + 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 0xa72f, 0xa731; 0xa733, 0xa733; 1515 + 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 0xa73b, 0xa73b; 0xa73d, 0xa73d; 1516 + 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 0xa745, 0xa745; 0xa747, 0xa747; 1517 + 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 0xa74f, 0xa74f; 0xa751, 0xa751; 1518 + 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 0xa759, 0xa759; 0xa75b, 0xa75b; 1519 + 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 0xa763, 0xa763; 0xa765, 0xa765; 1520 + 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 0xa76d, 0xa76d; 0xa76f, 0xa778; 1521 + 0xa77a, 0xa77a; 0xa77c, 0xa77c; 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 1522 + 0xa785, 0xa785; 0xa787, 0xa787; 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 1523 + 0xa793, 0xa795; 0xa797, 0xa797; 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 1524 + 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 1525 + 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 1526 + 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 0xa7bf, 0xa7bf; 0xa7c1, 0xa7c1; 0xa7c3, 0xa7c3; 1527 + 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 0xa7cd, 0xa7cd; 0xa7d1, 0xa7d1; 0xa7d3, 0xa7d3; 1528 + 0xa7d5, 0xa7d5; 0xa7d7, 0xa7d7; 0xa7d9, 0xa7d9; 0xa7db, 0xa7db; 0xa7f2, 0xa7f4; 1529 + 0xa7f6, 0xa7f6; 0xa7f8, 0xa7fa; 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabbf; 1530 + 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 0x10428, 0x1044f; 0x104d8, 0x104fb; 1531 + 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10780, 0x10780; 1532 + 0x10783, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10cc0, 0x10cf2; 0x10d70, 0x10d85; 1533 + 0x118c0, 0x118df; 0x16e60, 0x16e7f; 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 1534 + 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 1535 + 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 1536 + 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 1537 + 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 1538 + 0x1d770, 0x1d788; 0x1d78a, 0x1d78f; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7c9; 0x1d7cb, 0x1d7cb; 1539 + 0x1df00, 0x1df09; 0x1df0b, 0x1df1e; 0x1df25, 0x1df2a; 0x1e030, 0x1e06d; 0x1e922, 0x1e943] 1540 + 1541 + let math = Sedlex_utils.Cset.of_list 1542 + [0x2b, 0x2b; 0x3c, 0x3e; 0x5e, 0x5e; 0x7c, 0x7c; 0x7e, 0x7e; 1543 + 0xac, 0xac; 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3d0, 0x3d2; 1544 + 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f6; 0x606, 0x608; 0x2016, 0x2016; 1545 + 0x2032, 0x2034; 0x2040, 0x2040; 0x2044, 0x2044; 0x2052, 0x2052; 0x2061, 0x2064; 1546 + 0x207a, 0x207e; 0x208a, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 1547 + 0x20eb, 0x20ef; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 1548 + 0x2118, 0x211d; 0x2124, 0x2124; 0x2128, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 1549 + 0x2133, 0x2138; 0x213c, 0x2149; 0x214b, 0x214b; 0x2190, 0x21a7; 0x21a9, 0x21ae; 1550 + 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21db; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 1551 + 0x21f4, 0x22ff; 0x2308, 0x230b; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b5; 1552 + 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23dc, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b7; 1553 + 0x25bc, 0x25c1; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 1554 + 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x25f8, 0x25ff; 0x2605, 0x2606; 0x2640, 0x2640; 1555 + 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266f; 0x27c0, 0x27ff; 0x2900, 0x2aff; 1556 + 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 0xfe61, 0xfe66; 0xfe68, 0xfe68; 1557 + 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 0xff5c, 0xff5c; 1558 + 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x10d8e, 0x10d8f; 0x1d400, 0x1d454; 1559 + 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 1560 + 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 1561 + 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 1562 + 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d7cb; 0x1d7ce, 0x1d7ff; 1563 + 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 1564 + 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 1565 + 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 1566 + 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 1567 + 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 1568 + 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 1569 + 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1eef0, 0x1eef1] 1570 + 1571 + let other_alphabetic = Sedlex_utils.Cset.of_list 1572 + [0x345, 0x345; 0x363, 0x36f; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 1573 + 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x657; 0x659, 0x65f; 1574 + 0x670, 0x670; 0x6d6, 0x6dc; 0x6e1, 0x6e4; 0x6e7, 0x6e8; 0x6ed, 0x6ed; 1575 + 0x711, 0x711; 0x730, 0x73f; 0x7a6, 0x7b0; 0x816, 0x817; 0x81b, 0x823; 1576 + 0x825, 0x827; 0x829, 0x82c; 0x897, 0x897; 0x8d4, 0x8df; 0x8e3, 0x8e9; 1577 + 0x8f0, 0x903; 0x93a, 0x93b; 0x93e, 0x94c; 0x94e, 0x94f; 0x955, 0x957; 1578 + 0x962, 0x963; 0x981, 0x983; 0x9be, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 1579 + 0x9d7, 0x9d7; 0x9e2, 0x9e3; 0xa01, 0xa03; 0xa3e, 0xa42; 0xa47, 0xa48; 1580 + 0xa4b, 0xa4c; 0xa51, 0xa51; 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa83; 1581 + 0xabe, 0xac5; 0xac7, 0xac9; 0xacb, 0xacc; 0xae2, 0xae3; 0xafa, 0xafc; 1582 + 0xb01, 0xb03; 0xb3e, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb56, 0xb57; 1583 + 0xb62, 0xb63; 0xb82, 0xb82; 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 1584 + 0xbd7, 0xbd7; 0xc00, 0xc04; 0xc3e, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4c; 1585 + 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc83; 0xcbe, 0xcc4; 0xcc6, 0xcc8; 1586 + 0xcca, 0xccc; 0xcd5, 0xcd6; 0xce2, 0xce3; 0xcf3, 0xcf3; 0xd00, 0xd03; 1587 + 0xd3e, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd57, 0xd57; 0xd62, 0xd63; 1588 + 0xd81, 0xd83; 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 1589 + 0xe31, 0xe31; 0xe34, 0xe3a; 0xe4d, 0xe4d; 0xeb1, 0xeb1; 0xeb4, 0xeb9; 1590 + 0xebb, 0xebc; 0xecd, 0xecd; 0xf71, 0xf83; 0xf8d, 0xf97; 0xf99, 0xfbc; 1591 + 0x102b, 0x1036; 0x1038, 0x1038; 0x103b, 0x103e; 0x1056, 0x1059; 0x105e, 0x1060; 1592 + 0x1062, 0x1064; 0x1067, 0x106d; 0x1071, 0x1074; 0x1082, 0x108d; 0x108f, 0x108f; 1593 + 0x109a, 0x109d; 0x1712, 0x1713; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 1594 + 0x17b6, 0x17c8; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x192b; 0x1930, 0x1938; 1595 + 0x1a17, 0x1a1b; 0x1a55, 0x1a5e; 0x1a61, 0x1a74; 0x1abf, 0x1ac0; 0x1acc, 0x1ace; 1596 + 0x1b00, 0x1b04; 0x1b35, 0x1b43; 0x1b80, 0x1b82; 0x1ba1, 0x1ba9; 0x1bac, 0x1bad; 1597 + 0x1be7, 0x1bf1; 0x1c24, 0x1c36; 0x1dd3, 0x1df4; 0x24b6, 0x24e9; 0x2de0, 0x2dff; 1598 + 0xa674, 0xa67b; 0xa69e, 0xa69f; 0xa802, 0xa802; 0xa80b, 0xa80b; 0xa823, 0xa827; 1599 + 0xa880, 0xa881; 0xa8b4, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8ff, 0xa8ff; 0xa926, 0xa92a; 1600 + 0xa947, 0xa952; 0xa980, 0xa983; 0xa9b4, 0xa9bf; 0xa9e5, 0xa9e5; 0xaa29, 0xaa36; 1601 + 0xaa43, 0xaa43; 0xaa4c, 0xaa4d; 0xaa7b, 0xaa7d; 0xaab0, 0xaab0; 0xaab2, 0xaab4; 1602 + 0xaab7, 0xaab8; 0xaabe, 0xaabe; 0xaaeb, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabea; 1603 + 0xfb1e, 0xfb1e; 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 1604 + 0x10d24, 0x10d27; 0x10d69, 0x10d69; 0x10eab, 0x10eac; 0x10efc, 0x10efc; 0x11000, 0x11002; 1605 + 0x11038, 0x11045; 0x11073, 0x11074; 0x11080, 0x11082; 0x110b0, 0x110b8; 0x110c2, 0x110c2; 1606 + 0x11100, 0x11102; 0x11127, 0x11132; 0x11145, 0x11146; 0x11180, 0x11182; 0x111b3, 0x111bf; 1607 + 0x111ce, 0x111cf; 0x1122c, 0x11234; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x11241, 0x11241; 1608 + 0x112df, 0x112e8; 0x11300, 0x11303; 0x1133e, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 1609 + 0x11357, 0x11357; 0x11362, 0x11363; 0x113b8, 0x113c0; 0x113c2, 0x113c2; 0x113c5, 0x113c5; 1610 + 0x113c7, 0x113ca; 0x113cc, 0x113cd; 0x11435, 0x11441; 0x11443, 0x11445; 0x114b0, 0x114c1; 1611 + 0x115af, 0x115b5; 0x115b8, 0x115be; 0x115dc, 0x115dd; 0x11630, 0x1163e; 0x11640, 0x11640; 1612 + 0x116ab, 0x116b5; 0x1171d, 0x1172a; 0x1182c, 0x11838; 0x11930, 0x11935; 0x11937, 0x11938; 1613 + 0x1193b, 0x1193c; 0x11940, 0x11940; 0x11942, 0x11942; 0x119d1, 0x119d7; 0x119da, 0x119df; 1614 + 0x119e4, 0x119e4; 0x11a01, 0x11a0a; 0x11a35, 0x11a39; 0x11a3b, 0x11a3e; 0x11a51, 0x11a5b; 1615 + 0x11a8a, 0x11a97; 0x11c2f, 0x11c36; 0x11c38, 0x11c3e; 0x11c92, 0x11ca7; 0x11ca9, 0x11cb6; 1616 + 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 1617 + 0x11d47, 0x11d47; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d96; 0x11ef3, 0x11ef6; 1618 + 0x11f00, 0x11f01; 0x11f03, 0x11f03; 0x11f34, 0x11f3a; 0x11f3e, 0x11f40; 0x1611e, 0x1612e; 1619 + 0x16f4f, 0x16f4f; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16ff0, 0x16ff1; 0x1bc9e, 0x1bc9e; 1620 + 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 1621 + 0x1e08f, 0x1e08f; 0x1e947, 0x1e947; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189] 1622 + 1623 + let other_lowercase = Sedlex_utils.Cset.of_list 1624 + [0xaa, 0xaa; 0xba, 0xba; 0x2b0, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 1625 + 0x345, 0x345; 0x37a, 0x37a; 0x10fc, 0x10fc; 0x1d2c, 0x1d6a; 0x1d78, 0x1d78; 1626 + 0x1d9b, 0x1dbf; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2170, 0x217f; 1627 + 0x24d0, 0x24e9; 0x2c7c, 0x2c7d; 0xa69c, 0xa69d; 0xa770, 0xa770; 0xa7f2, 0xa7f4; 1628 + 0xa7f8, 0xa7f9; 0xab5c, 0xab5f; 0xab69, 0xab69; 0x10780, 0x10780; 0x10783, 0x10785; 1629 + 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x1e030, 0x1e06d] 1630 + 1631 + let other_math = Sedlex_utils.Cset.of_list 1632 + [0x5e, 0x5e; 0x3d0, 0x3d2; 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f5; 1633 + 0x2016, 0x2016; 0x2032, 0x2034; 0x2040, 0x2040; 0x2061, 0x2064; 0x207d, 0x207e; 1634 + 0x208d, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20eb, 0x20ef; 1635 + 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 1636 + 0x2124, 0x2124; 0x2128, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 0x2133, 0x2138; 1637 + 0x213c, 0x213f; 0x2145, 0x2149; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 1638 + 0x21a4, 0x21a5; 0x21a7, 0x21a7; 0x21a9, 0x21ad; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 1639 + 0x21bc, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21db; 0x21dd, 0x21dd; 1640 + 0x21e4, 0x21e5; 0x2308, 0x230b; 0x23b4, 0x23b5; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 1641 + 0x23e2, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25bc, 0x25c0; 0x25c6, 0x25c7; 1642 + 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 1643 + 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 1644 + 0x27c5, 0x27c6; 0x27e6, 0x27ef; 0x2983, 0x2998; 0x29d8, 0x29db; 0x29fc, 0x29fd; 1645 + 0xfe61, 0xfe61; 0xfe63, 0xfe63; 0xfe68, 0xfe68; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 1646 + 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 1647 + 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 1648 + 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 1649 + 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 1650 + 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 1651 + 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 1652 + 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 1653 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 1654 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 1655 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 1656 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 1657 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 1658 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb] 1659 + 1660 + let other_uppercase = Sedlex_utils.Cset.of_list 1661 + [0x2160, 0x216f; 0x24b6, 0x24cf; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189] 1662 + 1663 + let uppercase = Sedlex_utils.Cset.of_list 1664 + [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 1665 + 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 1666 + 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 1667 + 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 1668 + 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 1669 + 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 1670 + 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 1671 + 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 1672 + 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 1673 + 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 1674 + 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 1675 + 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 1676 + 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 1677 + 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 1678 + 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 1679 + 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 1680 + 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 1681 + 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 1682 + 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 1683 + 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 1684 + 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 1685 + 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 1686 + 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 1687 + 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 1688 + 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 1689 + 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 1690 + 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 1691 + 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 1692 + 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 1693 + 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 1694 + 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 1695 + 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 1696 + 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 1697 + 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 1698 + 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 1699 + 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 1700 + 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 1701 + 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 1702 + 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 1703 + 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 1704 + 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 1705 + 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 1706 + 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 1707 + 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 1708 + 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 1709 + 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 1710 + 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 1711 + 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 1712 + 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 1713 + 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 1714 + 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 1715 + 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 1716 + 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 1717 + 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 1718 + 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 1719 + 0x13a0, 0x13f5; 0x1c89, 0x1c89; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 1720 + 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 1721 + 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 1722 + 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 1723 + 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 1724 + 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 1725 + 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 1726 + 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 1727 + 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 1728 + 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 1729 + 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 1730 + 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 1731 + 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 1732 + 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 1733 + 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 1734 + 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 1735 + 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 1736 + 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 1737 + 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 1738 + 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 1739 + 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 1740 + 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 1741 + 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 1742 + 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 1743 + 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 1744 + 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 1745 + 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 1746 + 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 1747 + 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 1748 + 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 1749 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 1750 + 0x2145, 0x2145; 0x2160, 0x216f; 0x2183, 0x2183; 0x24b6, 0x24cf; 0x2c00, 0x2c2f; 1751 + 0x2c60, 0x2c60; 0x2c62, 0x2c64; 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 1752 + 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 1753 + 0x2c84, 0x2c84; 0x2c86, 0x2c86; 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 1754 + 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 1755 + 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 1756 + 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 1757 + 0x2cac, 0x2cac; 0x2cae, 0x2cae; 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 1758 + 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 1759 + 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 1760 + 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 1761 + 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 1762 + 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 1763 + 0x2cf2, 0x2cf2; 0xa640, 0xa640; 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 1764 + 0xa648, 0xa648; 0xa64a, 0xa64a; 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 1765 + 0xa652, 0xa652; 0xa654, 0xa654; 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 1766 + 0xa65c, 0xa65c; 0xa65e, 0xa65e; 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 1767 + 0xa666, 0xa666; 0xa668, 0xa668; 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 1768 + 0xa682, 0xa682; 0xa684, 0xa684; 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 1769 + 0xa68c, 0xa68c; 0xa68e, 0xa68e; 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 1770 + 0xa696, 0xa696; 0xa698, 0xa698; 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 1771 + 0xa726, 0xa726; 0xa728, 0xa728; 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 1772 + 0xa732, 0xa732; 0xa734, 0xa734; 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 1773 + 0xa73c, 0xa73c; 0xa73e, 0xa73e; 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 1774 + 0xa746, 0xa746; 0xa748, 0xa748; 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 1775 + 0xa750, 0xa750; 0xa752, 0xa752; 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 1776 + 0xa75a, 0xa75a; 0xa75c, 0xa75c; 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 1777 + 0xa764, 0xa764; 0xa766, 0xa766; 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 1778 + 0xa76e, 0xa76e; 0xa779, 0xa779; 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 1779 + 0xa782, 0xa782; 0xa784, 0xa784; 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 1780 + 0xa790, 0xa790; 0xa792, 0xa792; 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 1781 + 0xa79c, 0xa79c; 0xa79e, 0xa79e; 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 1782 + 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 1783 + 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c0, 0xa7c0; 1784 + 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 0xa7c9, 0xa7c9; 0xa7cb, 0xa7cc; 0xa7d0, 0xa7d0; 1785 + 0xa7d6, 0xa7d6; 0xa7d8, 0xa7d8; 0xa7da, 0xa7da; 0xa7dc, 0xa7dc; 0xa7f5, 0xa7f5; 1786 + 0xff21, 0xff3a; 0x10400, 0x10427; 0x104b0, 0x104d3; 0x10570, 0x1057a; 0x1057c, 0x1058a; 1787 + 0x1058c, 0x10592; 0x10594, 0x10595; 0x10c80, 0x10cb2; 0x10d50, 0x10d65; 0x118a0, 0x118bf; 1788 + 0x16e40, 0x16e5f; 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 1789 + 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 1790 + 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 1791 + 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 1792 + 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 1793 + 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 1794 + 0x1d790, 0x1d7a8; 0x1d7ca, 0x1d7ca; 0x1e900, 0x1e921; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 1795 + 0x1f170, 0x1f189] 1796 + 1797 + let white_space = Sedlex_utils.Cset.of_list 1798 + [0x9, 0xd; 0x20, 0x20; 0x85, 0x85; 0xa0, 0xa0; 0x1680, 0x1680; 1799 + 0x2000, 0x200a; 0x2028, 0x2029; 0x202f, 0x202f; 0x205f, 0x205f; 0x3000, 0x3000] 1800 + 1801 + let xid_continue = Sedlex_utils.Cset.of_list 1802 + [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 1803 + 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 1804 + 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 1805 + 0x300, 0x374; 0x376, 0x377; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x38a; 1806 + 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 1807 + 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 1808 + 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 1809 + 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x669; 0x66e, 0x6d3; 0x6d5, 0x6dc; 1810 + 0x6df, 0x6e8; 0x6ea, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x74a; 0x74d, 0x7b1; 1811 + 0x7c0, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x82d; 0x840, 0x85b; 1812 + 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88e; 0x897, 0x8e1; 0x8e3, 0x963; 1813 + 0x966, 0x96f; 0x971, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1814 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9c4; 0x9c7, 0x9c8; 1815 + 0x9cb, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e3; 0x9e6, 0x9f1; 1816 + 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 1817 + 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 1818 + 0xa3c, 0xa3c; 0xa3e, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 1819 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa75; 0xa81, 0xa83; 0xa85, 0xa8d; 1820 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1821 + 0xabc, 0xac5; 0xac7, 0xac9; 0xacb, 0xacd; 0xad0, 0xad0; 0xae0, 0xae3; 1822 + 0xae6, 0xaef; 0xaf9, 0xaff; 0xb01, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 1823 + 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb44; 1824 + 0xb47, 0xb48; 0xb4b, 0xb4d; 0xb55, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb63; 1825 + 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 1826 + 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 1827 + 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcd; 1828 + 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc0c; 0xc0e, 0xc10; 1829 + 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3c, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 1830 + 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc63; 0xc66, 0xc6f; 1831 + 0xc80, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 1832 + 0xcb5, 0xcb9; 0xcbc, 0xcc4; 0xcc6, 0xcc8; 0xcca, 0xccd; 0xcd5, 0xcd6; 1833 + 0xcdd, 0xcde; 0xce0, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf3; 0xd00, 0xd0c; 1834 + 0xd0e, 0xd10; 0xd12, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4e; 0xd54, 0xd57; 1835 + 0xd5f, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd83; 0xd85, 0xd96; 1836 + 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 1837 + 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 1838 + 0xe01, 0xe3a; 0xe40, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 1839 + 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xebd; 0xec0, 0xec4; 1840 + 0xec6, 0xec6; 0xec8, 0xece; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 1841 + 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 1842 + 0xf3e, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf84; 0xf86, 0xf97; 0xf99, 0xfbc; 1843 + 0xfc6, 0xfc6; 0x1000, 0x1049; 0x1050, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1844 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1845 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 1846 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 1847 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 1848 + 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 1849 + 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f8; 0x1700, 0x1715; 0x171f, 0x1734; 1850 + 0x1740, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17d3; 1851 + 0x17d7, 0x17d7; 0x17dc, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x180f, 0x1819; 1852 + 0x1820, 0x1878; 0x1880, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x192b; 1853 + 0x1930, 0x193b; 0x1946, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 1854 + 0x19d0, 0x19da; 0x1a00, 0x1a1b; 0x1a20, 0x1a5e; 0x1a60, 0x1a7c; 0x1a7f, 0x1a89; 1855 + 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1ace; 0x1b00, 0x1b4c; 1856 + 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1bf3; 0x1c00, 0x1c37; 0x1c40, 0x1c49; 1857 + 0x1c4d, 0x1c7d; 0x1c80, 0x1c8a; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1cd0, 0x1cd2; 1858 + 0x1cd4, 0x1cfa; 0x1d00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 0x1f48, 0x1f4d; 1859 + 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 0x1f5f, 0x1f7d; 1860 + 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fcc; 1861 + 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ffc; 1862 + 0x200c, 0x200d; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 0x207f, 0x207f; 1863 + 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 0x2102, 0x2102; 1864 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 0x2124, 0x2124; 1865 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 1866 + 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cf3; 0x2d00, 0x2d25; 1867 + 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d7f, 0x2d96; 1868 + 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 1869 + 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x3005, 0x3007; 1870 + 0x3021, 0x302f; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x3099, 0x309a; 1871 + 0x309d, 0x309f; 0x30a1, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 1872 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 1873 + 0xa610, 0xa62b; 0xa640, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa6f1; 0xa717, 0xa71f; 1874 + 0xa722, 0xa788; 0xa78b, 0xa7cd; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7dc; 1875 + 0xa7f2, 0xa827; 0xa82c, 0xa82c; 0xa840, 0xa873; 0xa880, 0xa8c5; 0xa8d0, 0xa8d9; 1876 + 0xa8e0, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa92d; 0xa930, 0xa953; 0xa960, 0xa97c; 1877 + 0xa980, 0xa9c0; 0xa9cf, 0xa9d9; 0xa9e0, 0xa9fe; 0xaa00, 0xaa36; 0xaa40, 0xaa4d; 1878 + 0xaa50, 0xaa59; 0xaa60, 0xaa76; 0xaa7a, 0xaac2; 0xaadb, 0xaadd; 0xaae0, 0xaaef; 1879 + 0xaaf2, 0xaaf6; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 1880 + 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabea; 0xabec, 0xabed; 1881 + 0xabf0, 0xabf9; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 1882 + 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb28; 0xfb2a, 0xfb36; 1883 + 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 1884 + 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 1885 + 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe71, 0xfe71; 1886 + 0xfe73, 0xfe73; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 1887 + 0xfe7f, 0xfefc; 0xff10, 0xff19; 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 1888 + 0xff65, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 1889 + 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 1890 + 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 1891 + 0x102a0, 0x102d0; 0x102e0, 0x102e0; 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x1037a; 1892 + 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 1893 + 0x104a0, 0x104a9; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 1894 + 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 1895 + 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x105c0, 0x105f3; 0x10600, 0x10736; 1896 + 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 1897 + 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 1898 + 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 1899 + 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a03; 1900 + 0x10a05, 0x10a06; 0x10a0c, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 1901 + 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae6; 1902 + 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 1903 + 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d27; 0x10d30, 0x10d39; 0x10d40, 0x10d65; 1904 + 0x10d69, 0x10d6d; 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 1905 + 0x10ec2, 0x10ec4; 0x10efc, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f50; 0x10f70, 0x10f85; 1906 + 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11046; 0x11066, 0x11075; 0x1107f, 0x110ba; 1907 + 0x110c2, 0x110c2; 0x110d0, 0x110e8; 0x110f0, 0x110f9; 0x11100, 0x11134; 0x11136, 0x1113f; 1908 + 0x11144, 0x11147; 0x11150, 0x11173; 0x11176, 0x11176; 0x11180, 0x111c4; 0x111c9, 0x111cc; 1909 + 0x111ce, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x11237; 0x1123e, 0x11241; 1910 + 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 1911 + 0x112b0, 0x112ea; 0x112f0, 0x112f9; 0x11300, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 1912 + 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x11344; 1913 + 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11363; 1914 + 0x11366, 0x1136c; 0x11370, 0x11374; 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 1915 + 0x11390, 0x113b5; 0x113b7, 0x113c0; 0x113c2, 0x113c2; 0x113c5, 0x113c5; 0x113c7, 0x113ca; 1916 + 0x113cc, 0x113d3; 0x113e1, 0x113e2; 0x11400, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x11461; 1917 + 0x11480, 0x114c5; 0x114c7, 0x114c7; 0x114d0, 0x114d9; 0x11580, 0x115b5; 0x115b8, 0x115c0; 1918 + 0x115d8, 0x115dd; 0x11600, 0x11640; 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116b8; 1919 + 0x116c0, 0x116c9; 0x116d0, 0x116e3; 0x11700, 0x1171a; 0x1171d, 0x1172b; 0x11730, 0x11739; 1920 + 0x11740, 0x11746; 0x11800, 0x1183a; 0x118a0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 1921 + 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x11935; 0x11937, 0x11938; 0x1193b, 0x11943; 1922 + 0x11950, 0x11959; 0x119a0, 0x119a7; 0x119aa, 0x119d7; 0x119da, 0x119e1; 0x119e3, 0x119e4; 1923 + 0x11a00, 0x11a3e; 0x11a47, 0x11a47; 0x11a50, 0x11a99; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 1924 + 0x11bc0, 0x11be0; 0x11bf0, 0x11bf9; 0x11c00, 0x11c08; 0x11c0a, 0x11c36; 0x11c38, 0x11c40; 1925 + 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11cb6; 0x11d00, 0x11d06; 1926 + 0x11d08, 0x11d09; 0x11d0b, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d47; 1927 + 0x11d50, 0x11d59; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d8e; 0x11d90, 0x11d91; 1928 + 0x11d93, 0x11d98; 0x11da0, 0x11da9; 0x11ee0, 0x11ef6; 0x11f00, 0x11f10; 0x11f12, 0x11f3a; 1929 + 0x11f3e, 0x11f42; 0x11f50, 0x11f5a; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 1930 + 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 0x13440, 0x13455; 0x13460, 0x143fa; 1931 + 0x14400, 0x14646; 0x16100, 0x16139; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 1932 + 0x16a70, 0x16abe; 0x16ac0, 0x16ac9; 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b36; 1933 + 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 1934 + 0x16d70, 0x16d79; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f4f, 0x16f87; 0x16f8f, 0x16f9f; 1935 + 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe4; 0x16ff0, 0x16ff1; 0x17000, 0x187f7; 0x18800, 0x18cd5; 1936 + 0x18cff, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 1937 + 0x1b132, 0x1b132; 0x1b150, 0x1b152; 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 1938 + 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 1939 + 0x1ccf0, 0x1ccf9; 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 0x1d165, 0x1d169; 0x1d16d, 0x1d172; 1940 + 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 1941 + 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 1942 + 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 1943 + 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 1944 + 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 1945 + 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 1946 + 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 1947 + 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 1948 + 0x1daa1, 0x1daaf; 0x1df00, 0x1df1e; 0x1df25, 0x1df2a; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 1949 + 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e030, 0x1e06d; 0x1e08f, 0x1e08f; 1950 + 0x1e100, 0x1e12c; 0x1e130, 0x1e13d; 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ae; 1951 + 0x1e2c0, 0x1e2f9; 0x1e4d0, 0x1e4f9; 0x1e5d0, 0x1e5fa; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 1952 + 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e94b; 1953 + 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 1954 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 1955 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 1956 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 1957 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 1958 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 1959 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 1960 + 0x20000, 0x2a6df; 0x2a700, 0x2b739; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 1961 + 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0x31350, 0x323af; 0xe0100, 0xe01ef] 1962 + 1963 + let xid_start = Sedlex_utils.Cset.of_list 1964 + [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 1965 + 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 1966 + 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x374; 0x376, 0x377; 0x37b, 0x37d; 1967 + 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 1968 + 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 1969 + 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x64a; 0x66e, 0x66f; 1970 + 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 1971 + 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 1972 + 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 1973 + 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 1974 + 0x889, 0x88e; 0x8a0, 0x8c9; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 1975 + 0x958, 0x961; 0x971, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1976 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 1977 + 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 1978 + 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 1979 + 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 1980 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1981 + 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 1982 + 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 1983 + 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 1984 + 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 1985 + 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 1986 + 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 1987 + 0xc58, 0xc5a; 0xc5d, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 1988 + 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 1989 + 0xcdd, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 1990 + 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 1991 + 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 1992 + 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe32; 0xe40, 0xe46; 0xe81, 0xe82; 1993 + 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 1994 + 0xeb2, 0xeb2; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 1995 + 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 1996 + 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 1997 + 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1998 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1999 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 2000 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 2001 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 2002 + 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 2003 + 0x16ee, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 2004 + 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1878; 2005 + 0x1880, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 2006 + 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 2007 + 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 2008 + 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c7d; 0x1c80, 0x1c8a; 2009 + 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 2010 + 0x1cfa, 0x1cfa; 0x1d00, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 2011 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 2012 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 2013 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 2014 + 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 2015 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 0x2124, 0x2124; 2016 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 2017 + 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 2018 + 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 2019 + 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 2020 + 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3007; 2021 + 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x309d, 0x309f; 2022 + 0x30a1, 0x30fa; 0x30fc, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 2023 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 2024 + 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66e; 0xa67f, 0xa69d; 0xa6a0, 0xa6ef; 2025 + 0xa717, 0xa71f; 0xa722, 0xa788; 0xa78b, 0xa7cd; 0xa7d0, 0xa7d1; 0xa7d3, 0xa7d3; 2026 + 0xa7d5, 0xa7dc; 0xa7f2, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 0xa80c, 0xa822; 2027 + 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 2028 + 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 2029 + 0xa9e0, 0xa9e4; 0xa9e6, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 2030 + 0xaa44, 0xaa4b; 0xaa60, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 2031 + 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadd; 2032 + 0xaae0, 0xaaea; 0xaaf2, 0xaaf4; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 2033 + 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabe2; 2034 + 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 2035 + 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 2036 + 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 2037 + 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 2038 + 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 2039 + 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xff9d; 2040 + 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 2041 + 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 2042 + 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 2043 + 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 2044 + 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 2045 + 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 2046 + 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 2047 + 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 2048 + 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 2049 + 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 2050 + 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10980, 0x109b7; 2051 + 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 2052 + 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 2053 + 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 2054 + 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d4a, 0x10d65; 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 2055 + 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec4; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 2056 + 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 2057 + 0x11075, 0x11075; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 2058 + 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 2059 + 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 0x1123f, 0x11240; 2060 + 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 2061 + 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 2062 + 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 2063 + 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113b7; 2064 + 0x113d1, 0x113d1; 0x113d3, 0x113d3; 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 2065 + 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 2066 + 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 2067 + 0x11740, 0x11746; 0x11800, 0x1182b; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 2068 + 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 2069 + 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 2070 + 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 2071 + 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 2072 + 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 2073 + 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11ee0, 0x11ef2; 2074 + 0x11f02, 0x11f02; 0x11f04, 0x11f10; 0x11f12, 0x11f33; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 2075 + 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 0x13441, 0x13446; 2076 + 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x1611d; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 2077 + 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 2078 + 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 0x16e40, 0x16e7f; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 2079 + 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x17000, 0x187f7; 0x18800, 0x18cd5; 2080 + 0x18cff, 0x18d08; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 2081 + 0x1b132, 0x1b132; 0x1b150, 0x1b152; 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 2082 + 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 2083 + 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 2084 + 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 2085 + 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 2086 + 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 2087 + 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 2088 + 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df1e; 2089 + 0x1df25, 0x1df2a; 0x1e030, 0x1e06d; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 2090 + 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4eb; 0x1e5d0, 0x1e5ed; 0x1e5f0, 0x1e5f0; 2091 + 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 2092 + 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 2093 + 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 2094 + 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 2095 + 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 2096 + 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 2097 + 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 2098 + 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 2099 + 0x20000, 0x2a6df; 0x2a700, 0x2b739; 0x2b740, 0x2b81d; 0x2b820, 0x2cea1; 0x2ceb0, 0x2ebe0; 2100 + 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0x31350, 0x323af] 2101 + 2102 + let list = [ 2103 + ("alphabetic", alphabetic); 2104 + ("ascii_hex_digit", ascii_hex_digit); 2105 + ("hex_digit", hex_digit); 2106 + ("id_continue", id_continue); 2107 + ("id_start", id_start); 2108 + ("lowercase", lowercase); 2109 + ("math", math); 2110 + ("other_alphabetic", other_alphabetic); 2111 + ("other_lowercase", other_lowercase); 2112 + ("other_math", other_math); 2113 + ("other_uppercase", other_uppercase); 2114 + ("uppercase", uppercase); 2115 + ("white_space", white_space); 2116 + ("xid_continue", xid_continue); 2117 + ("xid_start", xid_start) 2118 + ] 2119 + 2120 + (* ignoring: 2121 + - bidi_control 2122 + - case_ignorable 2123 + - cased 2124 + - changes_when_casefolded 2125 + - changes_when_casemapped 2126 + - changes_when_lowercased 2127 + - changes_when_titlecased 2128 + - changes_when_uppercased 2129 + - dash 2130 + - default_ignorable_code_point 2131 + - deprecated 2132 + - diacritic 2133 + - extender 2134 + - grapheme_base 2135 + - grapheme_extend 2136 + - grapheme_link 2137 + - hyphen 2138 + - id_compat_math_continue 2139 + - id_compat_math_start 2140 + - ideographic 2141 + - ids_binary_operator 2142 + - ids_trinary_operator 2143 + - ids_unary_operator 2144 + - join_control 2145 + - logical_order_exception 2146 + - modifier_combining_mark 2147 + - noncharacter_code_point 2148 + - other_default_ignorable_code_point 2149 + - other_grapheme_extend 2150 + - other_id_continue 2151 + - other_id_start 2152 + - pattern_syntax 2153 + - pattern_white_space 2154 + - prepended_concatenation_mark 2155 + - quotation_mark 2156 + - radical 2157 + - regional_indicator 2158 + - sentence_terminal 2159 + - soft_dotted 2160 + - terminal_punctuation 2161 + - unified_ideograph 2162 + - variation_selector 2163 + *) 2164 + end
+40
vendor/opam/sedlex/opam/sedlex.opam
··· 1 + # This file is generated by dune, edit dune-project instead 2 + opam-version: "2.0" 3 + version: "3.7" 4 + synopsis: "An OCaml lexer generator for Unicode" 5 + description: """ 6 + sedlex is a lexer generator for OCaml. It is similar to ocamllex, but supports 7 + Unicode. Unlike ocamllex, sedlex allows lexer specifications within regular 8 + OCaml source files. Lexing specific constructs are provided via a ppx syntax 9 + extension.""" 10 + maintainer: ["Alain Frisch <alain.frisch@lexifi.com>"] 11 + authors: [ 12 + "Alain Frisch <alain.frisch@lexifi.com>" 13 + "https://github.com/ocaml-community/sedlex/graphs/contributors" 14 + ] 15 + license: "MIT" 16 + homepage: "https://github.com/ocaml-community/sedlex" 17 + bug-reports: "https://github.com/ocaml-community/sedlex/issues" 18 + depends: [ 19 + "ocaml" {>= "4.08"} 20 + "dune" {>= "3.0"} 21 + "ppxlib" {>= "0.26.0"} 22 + "gen" 23 + "ppx_expect" {with-test} 24 + "odoc" {with-doc} 25 + ] 26 + build: [ 27 + ["dune" "subst"] {dev} 28 + [ 29 + "dune" 30 + "build" 31 + "-p" 32 + name 33 + "-j" 34 + jobs 35 + "@install" 36 + "@runtest" {with-test} 37 + "@doc" {with-doc} 38 + ] 39 + ] 40 + dev-repo: "git+https://github.com/ocaml-community/sedlex.git"
+2
vendor/opam/sedlex/opam/sedlex.opam.template
··· 1 + doc: "https://ocaml-community.github.io/sedlex/index.html" 2 + x-maintenance-intent: ["(latest)"]
+79
vendor/opam/sedlex/src/common/cset.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + (* Character sets are represented as lists of intervals. The 6 + intervals must be non-overlapping and not collapsable, and the list 7 + must be ordered in increasing order. *) 8 + 9 + type t = (int * int) list 10 + 11 + let rec range_to_seq a b next () = 12 + if a = b then Seq.Cons (a, next) else Seq.Cons (a, range_to_seq (a + 1) b next) 13 + 14 + let rec to_seq x () = 15 + match x with [] -> Seq.Nil | (a, b) :: xs -> range_to_seq a b (to_seq xs) () 16 + 17 + let check_invariant l = 18 + let rec loop prev = function 19 + | [] -> () 20 + | (a, b) :: xs -> 21 + if a < prev then 22 + failwith 23 + (Printf.sprintf 24 + "Sedlex_cset.of_list: not in increasing order or overlapping. \ 25 + [_-%d]-[%d-%d]" 26 + prev a b); 27 + if a = prev then 28 + failwith 29 + (Printf.sprintf 30 + "Sedlex_cset.of_list: adjacent range. [_-%d]-[%d-%d]" prev a b); 31 + if a > b then 32 + failwith 33 + (Printf.sprintf "Sedlex_cset.of_list: malformed range. [%d-%d]" a b); 34 + loop b xs 35 + in 36 + loop (-1) l 37 + 38 + let of_list l = 39 + check_invariant l; 40 + l 41 + 42 + let to_list l = l 43 + let max_code = 0x10ffff (* must be < max_int *) 44 + let min_code = -1 45 + let empty = [] 46 + let singleton i = [(i, i)] 47 + let is_empty = function [] -> true | _ -> false 48 + let interval i j = if i <= j then [(i, j)] else [(j, i)] 49 + let eof = singleton (-1) 50 + let any = interval 0 max_code 51 + 52 + let rec union c1 c2 = 53 + match (c1, c2) with 54 + | [], _ -> c2 55 + | _, [] -> c1 56 + | ((i1, j1) as s1) :: r1, (i2, j2) :: r2 -> 57 + if i1 <= i2 then 58 + if j1 + 1 < i2 then s1 :: union r1 c2 59 + else if j1 < j2 then union r1 ((i1, j2) :: r2) 60 + else union c1 r2 61 + else union c2 c1 62 + 63 + let union_list : t list -> t = function 64 + | [] -> empty 65 + | [x] -> x 66 + | l -> 67 + List.concat l 68 + |> List.sort (fun a b -> compare b a) 69 + |> List.fold_left (fun (acc : t) (x : int * int) -> union [x] acc) empty 70 + 71 + let complement c = 72 + let rec aux start = function 73 + | [] -> if start <= max_code then [(start, max_code)] else [] 74 + | (i, j) :: l -> (start, i - 1) :: aux (succ j) l 75 + in 76 + match c with (-1, j) :: l -> aux (succ j) l | l -> aux (-1) l 77 + 78 + let intersection c1 c2 = complement (union (complement c1) (complement c2)) 79 + let difference c1 c2 = complement (union (complement c1) c2)
+26
vendor/opam/sedlex/src/common/cset.mli
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + (** Representation of sets of unicode code points. *) 6 + 7 + (** Character sets are represented as lists of intervals. The intervals must be 8 + non-overlapping and not collapsable, and the list must be ordered in 9 + increasing order. *) 10 + type t = private (int * int) list 11 + 12 + val of_list : (int * int) list -> t 13 + val to_list : t -> (int * int) list 14 + val min_code : int 15 + val max_code : int 16 + val empty : t 17 + val any : t 18 + val union : t -> t -> t 19 + val union_list : t list -> t 20 + val difference : t -> t -> t 21 + val intersection : t -> t -> t 22 + val is_empty : t -> bool 23 + val eof : t 24 + val singleton : int -> t 25 + val interval : int -> int -> t 26 + val to_seq : t -> int Seq.t
+3
vendor/opam/sedlex/src/common/dune
··· 1 + (library 2 + (name sedlex_utils) 3 + (public_name sedlex.utils))
+28
vendor/opam/sedlex/src/generator/README.md
··· 1 + # Unicode specification extraction 2 + 3 + The file `src/syntax/unicode.ml` is generated using the data available at 4 + [unicode.org](https://www.unicode.org/Public/). 5 + 6 + The rule with `targets unicode.ml` at `src/syntax/dune` is the main entry point for this process. 7 + It specifies how `unicode.ml` should be generated when running `dune @build` and triggers: 8 + * download of data files at `src/generator/data` 9 + * build of `src/generator/gen_unicode.exe` 10 + * generation `unicode.ml` and places a copy in the source tree and a copy in the build tree 11 + 12 + The rule is ignored when using the `--ignore-promoted-rules` option. This option is also implied 13 + when using `-p`/`--for-release-of-packages` which is used for production build so production build 14 + do not download the text data and re-generate `unicode.ml`. 15 + 16 + However, each development build re-generates a `unicode.ml` file which is placed into the source 17 + tree and, thus, can be easily commited when it is updated. 18 + 19 + See: [dune documentation](https://dune.readthedocs.io/en/latest/dune-files.html#modes) for more 20 + information. 21 + 22 + ## Update to new Unicode versions 23 + 24 + To update the supported version, update the URL at `src/generator/data/base_url`. Make sure to 25 + not include a trailing new line so that it is properly read in `src/generator/data/dune`. 26 + 27 + Finally, place a copy of the old `unicode.ml` at `examples/unicode_old.ml` and update 28 + `test_versions` and `regressions` in `examples/regressions.ml`.
+1
vendor/opam/sedlex/src/generator/data/base_url
··· 1 + https://www.unicode.org/Public/17.0.0
+35
vendor/opam/sedlex/src/generator/data/dune
··· 1 + (rule 2 + (target DerivedCoreProperties.txt) 3 + (deps base_url) 4 + (action 5 + (run 6 + curl 7 + -L 8 + -s 9 + %{read:base_url}/ucd/DerivedCoreProperties.txt 10 + -o 11 + %{target}))) 12 + 13 + (rule 14 + (target DerivedGeneralCategory.txt) 15 + (deps base_url) 16 + (action 17 + (run 18 + curl 19 + -L 20 + -s 21 + %{read:base_url}/ucd/extracted/DerivedGeneralCategory.txt 22 + -o 23 + %{target}))) 24 + 25 + (rule 26 + (target PropList.txt) 27 + (deps base_url) 28 + (action 29 + (run curl -L -s %{read:base_url}/ucd/PropList.txt -o %{target}))) 30 + 31 + (rule 32 + (target UnicodeData.txt) 33 + (deps base_url) 34 + (action 35 + (run curl -L -s %{read:base_url}/ucd/UnicodeData.txt -o %{target})))
+3
vendor/opam/sedlex/src/generator/dune
··· 1 + (executable 2 + (name gen_unicode) 3 + (libraries str sedlex.utils))
+209
vendor/opam/sedlex/src/generator/gen_unicode.ml
··· 1 + (* This file generates unicode data from 2 + * the files exported at https://www.unicode.org/Public/<unicode version> 3 + * and stored at src/generator/data. *) 4 + open Sedlex_utils 5 + module SSet = Set.Make (String) 6 + 7 + let target = Sys.argv.(1) 8 + let categories = Hashtbl.create 1024 9 + let labels = Hashtbl.create 1024 10 + 11 + (* Drop comments and split semi-column separated fields *) 12 + let parse_line l = 13 + let l = 14 + match String.index_opt l '#' with None -> l | Some i -> String.sub l 0 i 15 + in 16 + String.split_on_char ';' l |> List.map String.trim 17 + 18 + let parse_code s = 19 + try int_of_string (Printf.sprintf "0x%s" s) 20 + with _ -> failwith (Printf.sprintf "invalid code %s" s) 21 + 22 + let parse_category x = String.lowercase_ascii (String.trim x) 23 + let parse_prop x = String.lowercase_ascii (String.trim x) 24 + 25 + let parse_interval s = 26 + match String.split_on_char '.' (String.trim s) with 27 + | [] -> assert false 28 + | [x] -> 29 + let x = parse_code x in 30 + Cset.singleton x 31 + | [x; ""; y] -> 32 + let x = parse_code x and y = parse_code y in 33 + Cset.interval x y 34 + | _ -> failwith (Printf.sprintf "invalid interval %s" s) 35 + 36 + let print_elements ch hashtbl cats = 37 + let cats_set = SSet.of_list cats in 38 + let all_keys = SSet.of_seq (Hashtbl.to_seq_keys hashtbl) in 39 + let missing = SSet.diff cats_set all_keys in 40 + let ignoring = SSet.diff all_keys cats_set in 41 + let len = List.length cats in 42 + List.iter 43 + (fun c -> 44 + let entries = 45 + List.map 46 + (fun (b, e) -> Printf.sprintf "0x%x, 0x%x" b e) 47 + (Cset.union_list (Hashtbl.find_all hashtbl c) :> (int * int) list) 48 + in 49 + Printf.fprintf ch " let %s = Sedlex_cset.of_list\n [" c; 50 + List.iteri 51 + (fun i x -> 52 + if i > 0 then 53 + if i mod 5 = 0 then Printf.fprintf ch ";\n " 54 + else Printf.fprintf ch "; "; 55 + Printf.fprintf ch "%s" x) 56 + entries; 57 + Printf.fprintf ch "]\n\n") 58 + cats; 59 + Printf.fprintf ch " let list = [\n"; 60 + List.iteri 61 + (fun pos c -> 62 + Printf.fprintf ch " (%S, %s)%s\n" c c 63 + (if pos == len - 1 then "" else ";")) 64 + cats; 65 + Printf.fprintf ch " ]\n\n"; 66 + if not (SSet.is_empty ignoring) then ( 67 + Printf.fprintf ch "(* ignoring:\n"; 68 + SSet.iter (fun s -> Printf.fprintf ch " - %s\n" s) ignoring; 69 + Printf.fprintf ch "*)\n"); 70 + if not (SSet.is_empty missing) then ( 71 + Printf.fprintf ch "(* missing:\n"; 72 + SSet.iter (fun s -> Printf.fprintf ch " - %s\n" s) missing; 73 + Printf.fprintf ch "*)\n") 74 + 75 + let files = 76 + [ 77 + ( "PropList.txt", 78 + fun s -> 79 + match parse_line s with 80 + | [""] -> () 81 + | [interval; prop] -> 82 + let interval = parse_interval interval in 83 + let prop = parse_prop prop in 84 + Hashtbl.add labels prop interval 85 + | _ -> assert false ); 86 + ( "DerivedCoreProperties.txt", 87 + fun s -> 88 + match parse_line s with 89 + | [""] -> () 90 + | [interval; prop] -> 91 + let interval = parse_interval interval in 92 + let prop = parse_prop prop in 93 + Hashtbl.add labels prop interval 94 + | [_interval; "InCB"; ("Extend" | "Consonant" | "Linker")] -> 95 + (* TODO: support non-binary properties? *) 96 + () 97 + | _ -> assert false ); 98 + ( "DerivedGeneralCategory.txt", 99 + fun s -> 100 + match parse_line s with 101 + | [""] -> () 102 + | [interval; cat] -> 103 + let interval = parse_interval interval in 104 + let cat = parse_category cat in 105 + Hashtbl.add categories cat interval 106 + | _ -> assert false ); 107 + ( "UnicodeData.txt", 108 + fun s -> 109 + match parse_line s with 110 + | [""] -> () 111 + | interval :: _ :: cat :: _ -> 112 + let interval = parse_interval interval in 113 + let cat = parse_category cat in 114 + Hashtbl.add categories cat interval 115 + | _ -> assert false ); 116 + ] 117 + 118 + let read_version fname = 119 + let version_rex = 120 + Str.regexp "^# PropList-\\([0-9]+\\.[0-9]+\\.[0-9]+\\)\\.txt" 121 + in 122 + let ch = open_in_bin fname in 123 + let s = input_line ch in 124 + close_in ch; 125 + ignore (Str.string_match version_rex s 0); 126 + Str.matched_group 1 s 127 + 128 + let exported_categories = 129 + [ 130 + "cc"; 131 + "cf"; 132 + "cn"; 133 + "co"; 134 + "cs"; 135 + "ll"; 136 + "lm"; 137 + "lo"; 138 + "lt"; 139 + "lu"; 140 + "mc"; 141 + "me"; 142 + "mn"; 143 + "nd"; 144 + "nl"; 145 + "no"; 146 + "pc"; 147 + "pd"; 148 + "pe"; 149 + "pf"; 150 + "pi"; 151 + "po"; 152 + "ps"; 153 + "sc"; 154 + "sk"; 155 + "sm"; 156 + "so"; 157 + "zl"; 158 + "zp"; 159 + "zs"; 160 + ] 161 + 162 + let exported_properties = 163 + [ 164 + "alphabetic"; 165 + "ascii_hex_digit"; 166 + "hex_digit"; 167 + "id_continue"; 168 + "id_start"; 169 + "lowercase"; 170 + "math"; 171 + "other_alphabetic"; 172 + "other_lowercase"; 173 + "other_math"; 174 + "other_uppercase"; 175 + "uppercase"; 176 + "white_space"; 177 + "xid_continue"; 178 + "xid_start"; 179 + ] 180 + 181 + let () = 182 + let base_dir = 183 + Filename.concat (Filename.dirname Sys.executable_name) "data" 184 + in 185 + let version = read_version (Filename.concat base_dir "PropList.txt") in 186 + List.iter 187 + (fun (fname, fn) -> 188 + let ch = open_in_bin (Filename.concat base_dir fname) in 189 + try 190 + while true do 191 + let ret = input_line ch in 192 + fn ret 193 + done 194 + with End_of_file -> close_in ch) 195 + files; 196 + let ch = open_out_bin target in 197 + Printf.fprintf ch {|[@@@ocamlformat "disable"]|}; 198 + Printf.fprintf ch "\n\n"; 199 + Printf.fprintf ch 200 + "(* This file was automatically generated, do not edit. *)\n"; 201 + Printf.fprintf ch "(* Edit gen_unicode.ml.inc instead. *)\n\n"; 202 + Printf.fprintf ch "\n\nlet version = %S\n\n" version; 203 + Printf.fprintf ch "module Categories = struct\n\n"; 204 + print_elements ch categories exported_categories; 205 + Printf.fprintf ch "end\n\n"; 206 + Printf.fprintf ch "module Properties = struct\n\n"; 207 + print_elements ch labels exported_properties; 208 + Printf.fprintf ch "end\n"; 209 + close_out ch
+6
vendor/opam/sedlex/src/lib/dune
··· 1 + (library 2 + (name sedlex) 3 + (public_name sedlex) 4 + (wrapped false) 5 + (libraries gen) 6 + (flags :standard -w +A-4-9 -safe-string))
+659
vendor/opam/sedlex/src/lib/sedlexing.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + exception InvalidCodepoint of int 6 + exception MalFormed 7 + 8 + module Uchar = struct 9 + (* This for compatibility with ocaml < 4.14.0 *) 10 + let utf_8_byte_length u = 11 + match Uchar.to_int u with 12 + | u when u < 0 -> assert false 13 + | u when u <= 0x007F -> 1 14 + | u when u <= 0x07FF -> 2 15 + | u when u <= 0xFFFF -> 3 16 + | u when u <= 0x10FFFF -> 4 17 + | _ -> assert false 18 + 19 + let utf_16_byte_length u = 20 + match Uchar.to_int u with 21 + | u when u < 0 -> assert false 22 + | u when u <= 0xFFFF -> 2 23 + | u when u <= 0x10FFFF -> 4 24 + | _ -> assert false 25 + 26 + let () = 27 + ignore utf_8_byte_length; 28 + ignore utf_16_byte_length 29 + 30 + include Uchar 31 + 32 + let of_int x = 33 + if Uchar.is_valid x then Uchar.unsafe_of_int x else raise MalFormed 34 + end 35 + 36 + (* shadow polymorphic equal *) 37 + let ( = ) (a : int) b = a = b 38 + let ( >>| ) o f = match o with Some x -> Some (f x) | None -> None 39 + 40 + (* Absolute position from the beginning of the stream *) 41 + type apos = int 42 + 43 + type lexbuf = { 44 + refill : Uchar.t array -> int -> int -> int; 45 + bytes_per_char : Uchar.t -> int; 46 + mutable buf : Uchar.t array; 47 + mutable len : int; 48 + (* Number of meaningful uchar in buffer *) 49 + mutable offset : apos; 50 + (* Number of meaningful bytes in buffer *) 51 + mutable bytes_offset : apos; 52 + (* Position of the first uchar in buffer 53 + in the input stream *) 54 + mutable pos : int; 55 + (* Position of the first byte in buffer 56 + in the input stream *) 57 + mutable bytes_pos : int; 58 + (* Position of the beginning of the line in the buffer, in uchar *) 59 + mutable curr_bol : int; 60 + (* Position of the beginning of the line in the buffer, in bytes *) 61 + mutable curr_bytes_bol : int; 62 + (* Index of the current line in the input stream. *) 63 + mutable curr_line : int; 64 + (* starting position, in uchar. *) 65 + mutable start_pos : int; 66 + (* starting position, in bytes. *) 67 + mutable start_bytes_pos : int; 68 + (* First uchar we need to keep visible *) 69 + mutable start_bol : int; 70 + (* First byte we need to keep visible *) 71 + mutable start_bytes_bol : int; 72 + (* start from 1 *) 73 + mutable start_line : int; 74 + mutable marked_pos : int; 75 + mutable marked_bytes_pos : int; 76 + mutable marked_bol : int; 77 + mutable marked_bytes_bol : int; 78 + mutable marked_line : int; 79 + mutable marked_val : int; 80 + mutable filename : string; 81 + mutable finished : bool; 82 + } 83 + 84 + let chunk_size = 512 85 + 86 + let empty_lexbuf bytes_per_char = 87 + { 88 + refill = (fun _ _ _ -> assert false); 89 + bytes_per_char; 90 + buf = [||]; 91 + len = 0; 92 + offset = 0; 93 + bytes_offset = 0; 94 + pos = 0; 95 + bytes_pos = 0; 96 + curr_bol = 0; 97 + curr_bytes_bol = 0; 98 + curr_line = 1; 99 + start_pos = 0; 100 + start_bytes_pos = 0; 101 + start_bol = 0; 102 + start_bytes_bol = 0; 103 + start_line = 0; 104 + marked_pos = 0; 105 + marked_bytes_pos = 0; 106 + marked_bol = 0; 107 + marked_bytes_bol = 0; 108 + marked_line = 0; 109 + marked_val = 0; 110 + filename = ""; 111 + finished = false; 112 + } 113 + 114 + let dummy_uchar = Uchar.of_int 0 115 + let nl_uchar = Uchar.of_int 10 116 + 117 + let create ?(bytes_per_char = fun _ -> 1) refill = 118 + { 119 + (empty_lexbuf bytes_per_char) with 120 + refill; 121 + buf = Array.make chunk_size dummy_uchar; 122 + } 123 + 124 + let set_position ?bytes_position lexbuf position = 125 + lexbuf.offset <- position.Lexing.pos_cnum - lexbuf.pos; 126 + lexbuf.curr_bol <- position.Lexing.pos_bol; 127 + lexbuf.curr_line <- position.Lexing.pos_lnum; 128 + let bytes_position = Option.value ~default:position bytes_position in 129 + lexbuf.bytes_offset <- bytes_position.Lexing.pos_cnum - lexbuf.bytes_pos; 130 + lexbuf.curr_bytes_bol <- bytes_position.Lexing.pos_bol 131 + 132 + let set_filename lexbuf fname = lexbuf.filename <- fname 133 + 134 + let from_gen ?bytes_per_char gen = 135 + let malformed = ref false in 136 + let refill buf pos len = 137 + let rec loop i = 138 + if !malformed then raise MalFormed; 139 + if i >= len then len 140 + else ( 141 + match gen () with 142 + | Some c -> 143 + buf.(pos + i) <- c; 144 + loop (i + 1) 145 + | None -> i 146 + | exception MalFormed when i <> 0 -> 147 + malformed := true; 148 + i) 149 + in 150 + loop 0 151 + in 152 + create ?bytes_per_char refill 153 + 154 + let from_int_array ?bytes_per_char a = 155 + from_gen ?bytes_per_char 156 + (Gen.init ~limit:(Array.length a) (fun i -> Uchar.of_int a.(i))) 157 + 158 + let from_uchar_array ?(bytes_per_char = fun _ -> 1) a = 159 + let len = Array.length a in 160 + { 161 + (empty_lexbuf bytes_per_char) with 162 + buf = Array.init len (fun i -> a.(i)); 163 + len; 164 + finished = true; 165 + } 166 + 167 + let refill lexbuf = 168 + if lexbuf.len + chunk_size > Array.length lexbuf.buf then begin 169 + let s = lexbuf.start_pos in 170 + let s_bytes = lexbuf.start_bytes_pos in 171 + let ls = lexbuf.len - s in 172 + if ls + chunk_size <= Array.length lexbuf.buf then 173 + Array.blit lexbuf.buf s lexbuf.buf 0 ls 174 + else begin 175 + let newlen = (Array.length lexbuf.buf + chunk_size) * 2 in 176 + let newbuf = Array.make newlen dummy_uchar in 177 + Array.blit lexbuf.buf s newbuf 0 ls; 178 + lexbuf.buf <- newbuf 179 + end; 180 + lexbuf.len <- ls; 181 + lexbuf.offset <- lexbuf.offset + s; 182 + lexbuf.bytes_offset <- lexbuf.bytes_offset + s_bytes; 183 + lexbuf.pos <- lexbuf.pos - s; 184 + lexbuf.bytes_pos <- lexbuf.bytes_pos - s_bytes; 185 + lexbuf.marked_pos <- lexbuf.marked_pos - s; 186 + lexbuf.marked_bytes_pos <- lexbuf.marked_bytes_pos - s_bytes; 187 + lexbuf.start_pos <- 0; 188 + lexbuf.start_bytes_pos <- 0 189 + end; 190 + let n = lexbuf.refill lexbuf.buf lexbuf.pos chunk_size in 191 + if n = 0 then lexbuf.finished <- true else lexbuf.len <- lexbuf.len + n 192 + 193 + let new_line lexbuf = 194 + lexbuf.curr_line <- lexbuf.curr_line + 1; 195 + lexbuf.curr_bol <- lexbuf.pos + lexbuf.offset; 196 + lexbuf.curr_bytes_bol <- lexbuf.bytes_pos + lexbuf.bytes_offset 197 + 198 + let[@inline always] next_aux some none lexbuf = 199 + if (not lexbuf.finished) && lexbuf.pos = lexbuf.len then refill lexbuf; 200 + if lexbuf.finished && lexbuf.pos = lexbuf.len then none 201 + else begin 202 + let ret = lexbuf.buf.(lexbuf.pos) in 203 + lexbuf.pos <- lexbuf.pos + 1; 204 + lexbuf.bytes_pos <- lexbuf.bytes_pos + lexbuf.bytes_per_char ret; 205 + if Uchar.equal ret nl_uchar then new_line lexbuf; 206 + some ret 207 + end 208 + 209 + let next lexbuf = (next_aux [@inlined]) (fun x -> Some x) None lexbuf 210 + let __private__next_int lexbuf = (next_aux [@inlined]) Uchar.to_int (-1) lexbuf 211 + 212 + let mark lexbuf i = 213 + lexbuf.marked_pos <- lexbuf.pos; 214 + lexbuf.marked_bytes_pos <- lexbuf.bytes_pos; 215 + lexbuf.marked_bol <- lexbuf.curr_bol; 216 + lexbuf.marked_bytes_bol <- lexbuf.curr_bytes_bol; 217 + lexbuf.marked_line <- lexbuf.curr_line; 218 + lexbuf.marked_val <- i 219 + 220 + let start lexbuf = 221 + lexbuf.start_pos <- lexbuf.pos; 222 + lexbuf.start_bytes_pos <- lexbuf.bytes_pos; 223 + lexbuf.start_bol <- lexbuf.curr_bol; 224 + lexbuf.start_bytes_bol <- lexbuf.curr_bytes_bol; 225 + lexbuf.start_line <- lexbuf.curr_line; 226 + mark lexbuf (-1) 227 + 228 + let backtrack lexbuf = 229 + lexbuf.pos <- lexbuf.marked_pos; 230 + lexbuf.bytes_pos <- lexbuf.marked_bytes_pos; 231 + lexbuf.curr_bol <- lexbuf.marked_bol; 232 + lexbuf.curr_bytes_bol <- lexbuf.marked_bytes_bol; 233 + lexbuf.curr_line <- lexbuf.marked_line; 234 + lexbuf.marked_val 235 + 236 + let rollback lexbuf = 237 + lexbuf.pos <- lexbuf.start_pos; 238 + lexbuf.bytes_pos <- lexbuf.start_bytes_pos; 239 + lexbuf.curr_bol <- lexbuf.start_bol; 240 + lexbuf.curr_bytes_bol <- lexbuf.start_bytes_bol; 241 + lexbuf.curr_line <- lexbuf.start_line 242 + 243 + let lexeme_start lexbuf = lexbuf.start_pos + lexbuf.offset 244 + let lexeme_bytes_start lexbuf = lexbuf.start_bytes_pos + lexbuf.bytes_offset 245 + let lexeme_end lexbuf = lexbuf.pos + lexbuf.offset 246 + let lexeme_bytes_end lexbuf = lexbuf.bytes_pos + lexbuf.bytes_offset 247 + let loc lexbuf = (lexbuf.start_pos + lexbuf.offset, lexbuf.pos + lexbuf.offset) 248 + 249 + let bytes_loc lexbuf = 250 + ( lexbuf.start_bytes_pos + lexbuf.bytes_offset, 251 + lexbuf.bytes_pos + lexbuf.bytes_offset ) 252 + 253 + let lexeme_length lexbuf = lexbuf.pos - lexbuf.start_pos 254 + let lexeme_bytes_length lexbuf = lexbuf.bytes_pos - lexbuf.start_bytes_pos 255 + 256 + let sub_lexeme lexbuf pos len = 257 + Array.sub lexbuf.buf (lexbuf.start_pos + pos) len 258 + 259 + let lexeme lexbuf = 260 + Array.sub lexbuf.buf lexbuf.start_pos (lexbuf.pos - lexbuf.start_pos) 261 + 262 + let lexeme_char lexbuf pos = lexbuf.buf.(lexbuf.start_pos + pos) 263 + 264 + let lexing_position_start lexbuf = 265 + { 266 + Lexing.pos_fname = lexbuf.filename; 267 + pos_lnum = lexbuf.start_line; 268 + pos_cnum = lexbuf.start_pos + lexbuf.offset; 269 + pos_bol = lexbuf.start_bol; 270 + } 271 + 272 + let lexing_position_curr lexbuf = 273 + { 274 + Lexing.pos_fname = lexbuf.filename; 275 + pos_lnum = lexbuf.curr_line; 276 + pos_cnum = lexbuf.pos + lexbuf.offset; 277 + pos_bol = lexbuf.curr_bol; 278 + } 279 + 280 + let lexing_positions lexbuf = 281 + let start_p = lexing_position_start lexbuf 282 + and curr_p = lexing_position_curr lexbuf in 283 + (start_p, curr_p) 284 + 285 + let lexing_bytes_position_start lexbuf = 286 + { 287 + Lexing.pos_fname = lexbuf.filename; 288 + pos_lnum = lexbuf.start_line; 289 + pos_cnum = lexbuf.start_bytes_pos + lexbuf.bytes_offset; 290 + pos_bol = lexbuf.start_bytes_bol; 291 + } 292 + 293 + let lexing_bytes_position_curr lexbuf = 294 + { 295 + Lexing.pos_fname = lexbuf.filename; 296 + pos_lnum = lexbuf.curr_line; 297 + pos_cnum = lexbuf.bytes_pos + lexbuf.bytes_offset; 298 + pos_bol = lexbuf.curr_bytes_bol; 299 + } 300 + 301 + let lexing_bytes_positions lexbuf = 302 + let start_p = lexing_bytes_position_start lexbuf 303 + and curr_p = lexing_bytes_position_curr lexbuf in 304 + (start_p, curr_p) 305 + 306 + let with_tokenizer lexer' lexbuf = 307 + let lexer () = 308 + let token = lexer' lexbuf in 309 + let start_p, curr_p = lexing_positions lexbuf in 310 + (token, start_p, curr_p) 311 + in 312 + lexer 313 + 314 + module Chan = struct 315 + exception Missing_input 316 + 317 + type t = { 318 + b : Bytes.t; 319 + ic : in_channel; 320 + mutable len : int; 321 + mutable pos : int; 322 + } 323 + 324 + let min_buffer_size = 64 325 + 326 + let create ic len : t = 327 + let len = max len min_buffer_size in 328 + { b = Bytes.create len; ic; len = 0; pos = 0 } 329 + 330 + let available (t : t) = t.len - t.pos 331 + 332 + let rec ensure_bytes_available (t : t) ~can_refill n = 333 + if available t >= n then () 334 + else if can_refill then ( 335 + let len = t.len - t.pos in 336 + if len > 0 then Bytes.blit t.b t.pos t.b 0 len; 337 + let read = input t.ic t.b len (Bytes.length t.b - len) in 338 + t.len <- len + read; 339 + t.pos <- 0; 340 + if read = 0 then raise Missing_input 341 + else ensure_bytes_available t ~can_refill n) 342 + else raise Missing_input 343 + 344 + let ensure_bytes_available t ~can_refill n = 345 + (* [n] should not exceed the size of the buffer. Here we are 346 + conservative and make sure it doesn't exceed the mininum size 347 + for the buffer. *) 348 + if n <= 0 || n > min_buffer_size then invalid_arg "Sedlexing.Chan.ensure"; 349 + ensure_bytes_available t ~can_refill n 350 + 351 + let get (t : t) i = Bytes.get t.b (t.pos + i) 352 + 353 + let advance (t : t) n = 354 + if t.pos + n > t.len then invalid_arg "advance"; 355 + t.pos <- t.pos + n 356 + 357 + let raw_buf (t : t) = t.b 358 + let raw_pos (t : t) = t.pos 359 + end 360 + 361 + let make_from_channel ?bytes_per_char ic ~max_bytes_per_uchar 362 + ~min_bytes_per_uchar ~read_uchar = 363 + let t = Chan.create ic (chunk_size * max_bytes_per_uchar) in 364 + let malformed = ref false in 365 + let refill buf pos len = 366 + let rec loop i = 367 + if !malformed then raise MalFormed; 368 + if i = len then i 369 + else ( 370 + match 371 + (* we refill our bytes buffer only if we haven't refilled any uchar yet. *) 372 + let can_refill = i = 0 in 373 + Chan.ensure_bytes_available t ~can_refill min_bytes_per_uchar; 374 + read_uchar ~can_refill t 375 + with 376 + | c -> 377 + buf.(pos + i) <- c; 378 + loop (i + 1) 379 + | exception MalFormed when i <> 0 -> 380 + malformed := true; 381 + i 382 + | exception Chan.Missing_input -> 383 + if i = 0 && Chan.available t > 0 then raise MalFormed; 384 + i) 385 + in 386 + loop 0 387 + in 388 + create ?bytes_per_char refill 389 + 390 + module Latin1 = struct 391 + let from_gen s = 392 + from_gen ~bytes_per_char:(fun _ -> 1) (Gen.map Uchar.of_char s) 393 + 394 + let from_string s = 395 + let len = String.length s in 396 + { 397 + (empty_lexbuf (fun _ -> 1)) with 398 + buf = Array.init len (fun i -> Uchar.of_char s.[i]); 399 + len; 400 + finished = true; 401 + } 402 + 403 + let from_channel ic = 404 + make_from_channel ic 405 + ~bytes_per_char:(fun _ -> 1) 406 + ~min_bytes_per_uchar:1 ~max_bytes_per_uchar:1 407 + ~read_uchar:(fun ~can_refill:_ t -> 408 + let c = Chan.get t 0 in 409 + Chan.advance t 1; 410 + Uchar.of_char c) 411 + 412 + let to_latin1 c = 413 + if Uchar.is_char c then Uchar.to_char c 414 + else raise (InvalidCodepoint (Uchar.to_int c)) 415 + 416 + let lexeme_char lexbuf pos = to_latin1 (lexeme_char lexbuf pos) 417 + 418 + let sub_lexeme lexbuf pos len = 419 + let s = Bytes.create len in 420 + for i = 0 to len - 1 do 421 + Bytes.set s i (to_latin1 lexbuf.buf.(lexbuf.start_pos + pos + i)) 422 + done; 423 + Bytes.to_string s 424 + 425 + let lexeme lexbuf = sub_lexeme lexbuf 0 (lexbuf.pos - lexbuf.start_pos) 426 + end 427 + 428 + module Utf8 = struct 429 + module Helper = struct 430 + (* http://www.faqs.org/rfcs/rfc3629.html *) 431 + 432 + let width = function 433 + | '\000' .. '\127' -> 1 434 + | '\192' .. '\223' -> 2 435 + | '\224' .. '\239' -> 3 436 + | '\240' .. '\247' -> 4 437 + | _ -> raise MalFormed 438 + 439 + (* https://www.unicode.org/versions/corrigendum1.html *) 440 + let check_two n1 n2 = 441 + if n1 < 0xc2 || 0xdf < n1 then raise MalFormed; 442 + if n2 < 0x80 || 0xbf < n2 then raise MalFormed; 443 + if n2 lsr 6 != 0b10 then raise MalFormed; 444 + ((n1 land 0x1f) lsl 6) lor (n2 land 0x3f) 445 + 446 + let check_three n1 n2 n3 = 447 + if n1 = 0xe0 then ( 448 + if n2 < 0xa0 || 0xbf < n2 then raise MalFormed; 449 + if n3 < 0x80 || 0xbf < n3 then raise MalFormed) 450 + else ( 451 + if n1 < 0xe1 || 0xef < n1 then raise MalFormed; 452 + if n2 < 0x80 || 0xbf < n2 then raise MalFormed; 453 + if n3 < 0x80 || 0xbf < n3 then raise MalFormed); 454 + if n2 lsr 6 != 0b10 || n3 lsr 6 != 0b10 then raise MalFormed; 455 + let p = 456 + ((n1 land 0x0f) lsl 12) lor ((n2 land 0x3f) lsl 6) lor (n3 land 0x3f) 457 + in 458 + if p >= 0xd800 && p <= 0xdf00 then raise MalFormed; 459 + p 460 + 461 + let check_four n1 n2 n3 n4 = 462 + if n1 = 0xf0 then ( 463 + if n2 < 0x90 || 0xbf < n2 then raise MalFormed; 464 + if n3 < 0x80 || 0xbf < n3 then raise MalFormed; 465 + if n4 < 0x80 || 0xbf < n4 then raise MalFormed) 466 + else if n1 = 0xf4 then ( 467 + if n2 < 0x80 || 0x8f < n2 then raise MalFormed; 468 + if n3 < 0x80 || 0xbf < n3 then raise MalFormed; 469 + if n4 < 0x80 || 0xbf < n4 then raise MalFormed) 470 + else ( 471 + if n1 < 0xf1 || 0xf3 < n1 then raise MalFormed; 472 + if n2 < 0x80 || 0xbf < n2 then raise MalFormed; 473 + if n3 < 0x80 || 0xbf < n3 then raise MalFormed; 474 + if n4 < 0x80 || 0xbf < n4 then raise MalFormed); 475 + if n2 lsr 6 != 0b10 || n3 lsr 6 != 0b10 || n4 lsr 6 != 0b10 then 476 + raise MalFormed; 477 + ((n1 land 0x07) lsl 18) 478 + lor ((n2 land 0x3f) lsl 12) 479 + lor ((n3 land 0x3f) lsl 6) 480 + lor (n4 land 0x3f) 481 + 482 + let next s i = 483 + let c1 = s.[i] in 484 + match width c1 with 485 + | 1 -> Char.code c1 486 + | 2 -> 487 + let n1 = Char.code c1 in 488 + let n2 = Char.code s.[i + 1] in 489 + check_two n1 n2 490 + | 3 -> 491 + let n1 = Char.code c1 in 492 + let n2 = Char.code s.[i + 1] in 493 + let n3 = Char.code s.[i + 2] in 494 + check_three n1 n2 n3 495 + | 4 -> 496 + let n1 = Char.code c1 in 497 + let n2 = Char.code s.[i + 1] in 498 + let n3 = Char.code s.[i + 2] in 499 + let n4 = Char.code s.[i + 3] in 500 + check_four n1 n2 n3 n4 501 + | _ -> assert false 502 + 503 + let gen_from_char_gen s = 504 + let next_or_fail () = 505 + match Gen.next s with None -> raise MalFormed | Some x -> Char.code x 506 + in 507 + fun () -> 508 + Gen.next s >>| fun c1 -> 509 + match width c1 with 510 + | 1 -> Uchar.of_char c1 511 + | 2 -> 512 + let n1 = Char.code c1 in 513 + let n2 = next_or_fail () in 514 + Uchar.of_int (check_two n1 n2) 515 + | 3 -> 516 + let n1 = Char.code c1 in 517 + let n2 = next_or_fail () in 518 + let n3 = next_or_fail () in 519 + Uchar.of_int (check_three n1 n2 n3) 520 + | 4 -> 521 + let n1 = Char.code c1 in 522 + let n2 = next_or_fail () in 523 + let n3 = next_or_fail () in 524 + let n4 = next_or_fail () in 525 + Uchar.of_int (check_four n1 n2 n3 n4) 526 + | _ -> raise MalFormed 527 + 528 + (**************************) 529 + 530 + let to_buffer a apos len b = 531 + for i = apos to apos + len - 1 do 532 + Buffer.add_utf_8_uchar b a.(i) 533 + done 534 + end 535 + 536 + let from_channel ic = 537 + make_from_channel ic ~bytes_per_char:Uchar.utf_8_byte_length 538 + ~min_bytes_per_uchar:1 ~max_bytes_per_uchar:4 539 + ~read_uchar:(fun ~can_refill t -> 540 + let w = Helper.width (Chan.get t 0) in 541 + Chan.ensure_bytes_available t ~can_refill w; 542 + let c = 543 + Helper.next (Bytes.unsafe_to_string (Chan.raw_buf t)) (Chan.raw_pos t) 544 + in 545 + Chan.advance t w; 546 + Uchar.of_int c) 547 + 548 + let from_gen s = 549 + from_gen ~bytes_per_char:Uchar.utf_8_byte_length 550 + (Helper.gen_from_char_gen s) 551 + 552 + let from_string s = 553 + from_gen (Gen.init ~limit:(String.length s) (fun i -> String.get s i)) 554 + 555 + let sub_lexeme lexbuf pos len = 556 + let buf = Buffer.create (len * 4) in 557 + Helper.to_buffer lexbuf.buf (lexbuf.start_pos + pos) len buf; 558 + Buffer.contents buf 559 + 560 + let lexeme lexbuf = sub_lexeme lexbuf 0 (lexbuf.pos - lexbuf.start_pos) 561 + end 562 + 563 + module Utf16 = struct 564 + type byte_order = Little_endian | Big_endian 565 + 566 + module Helper = struct 567 + (* http://www.ietf.org/rfc/rfc2781.txt *) 568 + 569 + let number_of_pair bo c1 c2 = 570 + match bo with 571 + | Little_endian -> (c2 lsl 8) + c1 572 + | Big_endian -> (c1 lsl 8) + c2 573 + 574 + let get_bo bo c1 c2 = 575 + match !bo with 576 + | Some o -> o 577 + | None -> 578 + let o = 579 + match (c1, c2) with 580 + | 0xff, 0xfe -> Little_endian 581 + | _ -> Big_endian 582 + in 583 + bo := Some o; 584 + o 585 + 586 + let gen_from_char_gen opt_bo s = 587 + let next_or_fail () = 588 + match Gen.next s with None -> raise MalFormed | Some x -> Char.code x 589 + in 590 + let bo = ref opt_bo in 591 + fun () -> 592 + Gen.next s >>| fun c1 -> 593 + let n1 = Char.code c1 in 594 + let n2 = next_or_fail () in 595 + let o = get_bo bo n1 n2 in 596 + let w1 = number_of_pair o n1 n2 in 597 + if w1 = 0xfffe then raise (InvalidCodepoint w1); 598 + if w1 < 0xd800 || 0xdfff < w1 then Uchar.of_int w1 599 + else if w1 <= 0xdbff then ( 600 + let n3 = next_or_fail () in 601 + let n4 = next_or_fail () in 602 + let w2 = number_of_pair o n3 n4 in 603 + if w2 < 0xdc00 || w2 > 0xdfff then raise MalFormed; 604 + let upper10 = (w1 land 0x3ff) lsl 10 and lower10 = w2 land 0x3ff in 605 + Uchar.of_int (0x10000 + upper10 + lower10)) 606 + else raise MalFormed 607 + 608 + let to_buffer bo a apos len bom b = 609 + let store = 610 + match bo with 611 + | Big_endian -> Buffer.add_utf_16be_uchar b 612 + | Little_endian -> Buffer.add_utf_16le_uchar b 613 + in 614 + if bom then store (Uchar.of_int 0xfeff); 615 + (* first, store the BOM *) 616 + for i = apos to apos + len - 1 do 617 + store a.(i) 618 + done 619 + end 620 + 621 + let from_channel ic opt_bo = 622 + let bo = ref opt_bo in 623 + make_from_channel ic ~bytes_per_char:Uchar.utf_16_byte_length 624 + ~min_bytes_per_uchar:2 ~max_bytes_per_uchar:4 625 + ~read_uchar:(fun ~can_refill t -> 626 + let n1 = Char.code (Chan.get t 0) in 627 + let n2 = Char.code (Chan.get t 1) in 628 + let o = Helper.get_bo bo n1 n2 in 629 + let w1 = Helper.number_of_pair o n1 n2 in 630 + if w1 = 0xfffe then raise (InvalidCodepoint w1); 631 + if w1 < 0xd800 || 0xdfff < w1 then ( 632 + Chan.advance t 2; 633 + Uchar.of_int w1) 634 + else if w1 <= 0xdbff then ( 635 + Chan.ensure_bytes_available t ~can_refill 4; 636 + let n3 = Char.code (Chan.get t 2) in 637 + let n4 = Char.code (Chan.get t 3) in 638 + let w2 = Helper.number_of_pair o n3 n4 in 639 + if w2 < 0xdc00 || w2 > 0xdfff then raise MalFormed; 640 + let upper10 = (w1 land 0x3ff) lsl 10 and lower10 = w2 land 0x3ff in 641 + Chan.advance t 4; 642 + Uchar.of_int (0x10000 + upper10 + lower10)) 643 + else raise MalFormed) 644 + 645 + let from_gen s opt_bo = 646 + from_gen ~bytes_per_char:Uchar.utf_16_byte_length 647 + (Helper.gen_from_char_gen opt_bo s) 648 + 649 + let from_string s = 650 + from_gen (Gen.init ~limit:(String.length s) (fun i -> String.get s i)) 651 + 652 + let sub_lexeme lb pos len bo bom = 653 + let buf = Buffer.create ((len * 4) + 2) in 654 + (* +2 for the BOM *) 655 + Helper.to_buffer bo lb.buf (lb.start_pos + pos) len bom buf; 656 + Buffer.contents buf 657 + 658 + let lexeme lb bo bom = sub_lexeme lb 0 (lb.pos - lb.start_pos) bo bom 659 + end
+301
vendor/opam/sedlex/src/lib/sedlexing.mli
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + (** Runtime support for lexers generated by [sedlex]. *) 6 + 7 + (** This module is roughly equivalent to the module Lexing from the OCaml 8 + standard library, except that its lexbuffers handle Unicode code points 9 + (OCaml type: {!Uchar.t} in the range [0..0x10ffff]) instead of bytes (OCaml 10 + type: [char]). 11 + 12 + It is possible to have sedlex-generated lexers work on a custom 13 + implementation for lex buffers. To do this, define a module [L] which 14 + implements the [start], [next], [mark] and [backtrack] functions (See the 15 + Internal Interface section below for a specification). They need not work on 16 + a type named [lexbuf]: you can use the type name you want. Then, just do in 17 + your sedlex-processed source, bind this module to the name [Sedlexing] (for 18 + instance, with a local module definition: [let module Sedlexing = L in ...]. 19 + 20 + Of course, you'll probably want to define functions like [lexeme] to be used 21 + in the lexers semantic actions. *) 22 + 23 + (** The type of lexer buffers. A lexer buffer is the argument passed to the 24 + scanning functions defined by the generated lexers. The lexer buffer holds 25 + the internal information for the scanners, including the code points of the 26 + token currently scanned, its position from the beginning of the input 27 + stream, and the current position of the lexer. *) 28 + type lexbuf 29 + 30 + (** Raised by some functions to signal that some code point is not compatible 31 + with a specified encoding. *) 32 + exception InvalidCodepoint of int 33 + 34 + (** Raised by functions in the [Utf8] and [Utf16] modules to report strings 35 + which do not comply to the encoding. *) 36 + exception MalFormed 37 + 38 + (** {6 Creating generic lexbufs} *) 39 + 40 + (** Create a generic lexer buffer. When the lexer needs more characters, it will 41 + call the given function, giving it an array of Uchars [a], a position [pos] 42 + and a code point count [n]. The function should put [n] code points or less 43 + in [a], starting at position [pos], and return the number of characters 44 + provided. A return value of 0 means end of input. [bytes_per_char] argument 45 + is optional. If unspecified, byte positions are the same as code point 46 + position. *) 47 + val create : 48 + ?bytes_per_char:(Uchar.t -> int) -> 49 + (Uchar.t array -> int -> int -> int) -> 50 + lexbuf 51 + 52 + (** set the initial tracked input position, in code point, for [lexbuf]. If 53 + unspecified, byte postion is set to the same value as code point position. 54 + *) 55 + val set_position : 56 + ?bytes_position:Lexing.position -> lexbuf -> Lexing.position -> unit 57 + 58 + (** [set_filename lexbuf file] sets the filename to [file] in [lexbuf]. It also 59 + sets the {!Lexing.pos_fname} field in returned {!Lexing.position} records. 60 + *) 61 + val set_filename : lexbuf -> string -> unit 62 + 63 + (** Create a lexbuf from a stream of Unicode code points. [bytes_per_char] is 64 + optional. If unspecified, byte positions are the same as code point 65 + positions. *) 66 + val from_gen : ?bytes_per_char:(Uchar.t -> int) -> Uchar.t Gen.t -> lexbuf 67 + 68 + (** Create a lexbuf from an array of Unicode code points. [bytes_per_char] is 69 + optional. If unspecified, byte positions are the same as code point 70 + positions. *) 71 + val from_int_array : ?bytes_per_char:(Uchar.t -> int) -> int array -> lexbuf 72 + 73 + (** Create a lexbuf from an array of Unicode code points. [bytes_per_char] is 74 + optional. If unspecified, byte positions are the same as code point 75 + positions. *) 76 + val from_uchar_array : 77 + ?bytes_per_char:(Uchar.t -> int) -> Uchar.t array -> lexbuf 78 + 79 + (** {6 Interface for lexers semantic actions} *) 80 + 81 + (** The following functions can be called from the semantic actions of lexer 82 + definitions. They give access to the character string matched by the regular 83 + expression associated with the semantic action. *) 84 + 85 + (** [Sedlexing.lexeme_start lexbuf] returns the offset in the input stream of 86 + the first code point of the matched string. The first code point of the 87 + stream has offset 0. *) 88 + val lexeme_start : lexbuf -> int 89 + 90 + (** [Sedlexing.lexeme_start lexbuf] returns the offset in the input stream of 91 + the first byte of the matched string. The first code point of the stream has 92 + offset 0. *) 93 + val lexeme_bytes_start : lexbuf -> int 94 + 95 + (** [Sedlexing.lexeme_end lexbuf] returns the offset in the input stream of the 96 + character following the last code point of the matched string. The first 97 + character of the stream has offset 0. *) 98 + val lexeme_end : lexbuf -> int 99 + 100 + (** [Sedlexing.lexeme_end lexbuf] returns the offset in the input stream of the 101 + byte following the last code point of the matched string. The first 102 + character of the stream has offset 0. *) 103 + val lexeme_bytes_end : lexbuf -> int 104 + 105 + (** [Sedlexing.loc lexbuf] returns the pair 106 + [(Sedlexing.lexeme_start lexbuf,Sedlexing.lexeme_end lexbuf)]. *) 107 + val loc : lexbuf -> int * int 108 + 109 + (** [Sedlexing.bytes_loc lexbuf] returns the pair 110 + [(Sedlexing.lexeme_bytes_start lexbuf,Sedlexing.lexeme_bytes_end lexbuf)]. 111 + *) 112 + val bytes_loc : lexbuf -> int * int 113 + 114 + (** [Sedlexing.lexeme_length lexbuf] returns the difference 115 + [(Sedlexing.lexeme_end lexbuf) - (Sedlexing.lexeme_start lexbuf)], that is, 116 + the length (in code points) of the matched string. *) 117 + val lexeme_length : lexbuf -> int 118 + 119 + (** [Sedlexing.lexeme_length lexbuf] returns the difference 120 + [(Sedlexing.lexeme_bytes_end lexbuf) - (Sedlexing.lexeme_bytes_start 121 + lexbuf)], that is, the length (in bytes) of the matched string. *) 122 + val lexeme_bytes_length : lexbuf -> int 123 + 124 + (** [Sedlexing.lexing_positions lexbuf] returns the start and end positions, in 125 + code points, of the current token, using a record of type [Lexing.position]. 126 + This is intended for consumption by parsers like those generated by 127 + [Menhir]. *) 128 + val lexing_positions : lexbuf -> Lexing.position * Lexing.position 129 + 130 + (** [Sedlexing.lexing_position_start lexbuf] returns the start position, in code 131 + points, of the current token. *) 132 + val lexing_position_start : lexbuf -> Lexing.position 133 + 134 + (** [Sedlexing.lexing_position_curr lexbuf] returns the end position, in code 135 + points, of the current token. *) 136 + val lexing_position_curr : lexbuf -> Lexing.position 137 + 138 + (** [Sedlexing.lexing_bytes_positions lexbuf] returns the start and end 139 + positions, in bytes, of the current token, using a record of type 140 + [Lexing.position]. This is intended for consumption by parsers like those 141 + generated by [Menhir]. *) 142 + val lexing_bytes_positions : lexbuf -> Lexing.position * Lexing.position 143 + 144 + (** [Sedlexing.lexing_bytes_position_start lexbuf] returns the start position, 145 + in bytes, of the current token. *) 146 + val lexing_bytes_position_start : lexbuf -> Lexing.position 147 + 148 + (** [Sedlexing.lexing_bytes_position_curr lexbuf] returns the end position, in 149 + bytes, of the current token. *) 150 + val lexing_bytes_position_curr : lexbuf -> Lexing.position 151 + 152 + (** [Sedlexing.new_line lexbuf] increments the line count and sets the beginning 153 + of line to the current position, as though a newline character had been 154 + encountered in the input. *) 155 + val new_line : lexbuf -> unit 156 + 157 + (** [Sedlexing.lexeme lexbuf] returns the string matched by the regular 158 + expression as an array of Unicode code point. *) 159 + val lexeme : lexbuf -> Uchar.t array 160 + 161 + (** [Sedlexing.lexeme_char lexbuf pos] returns code point number [pos] in the 162 + matched string. *) 163 + val lexeme_char : lexbuf -> int -> Uchar.t 164 + 165 + (** [Sedlexing.sub_lexeme lexbuf pos len] returns a substring of the string 166 + matched by the regular expression as an array of Unicode code point. *) 167 + val sub_lexeme : lexbuf -> int -> int -> Uchar.t array 168 + 169 + (** [Sedlexing.rollback lexbuf] puts [lexbuf] back in its configuration before 170 + the last lexeme was matched. It is then possible to use another lexer to 171 + parse the same characters again. The other functions above in this section 172 + should not be used in the semantic action after a call to 173 + [Sedlexing.rollback]. *) 174 + val rollback : lexbuf -> unit 175 + 176 + (** {6 Internal interface} *) 177 + 178 + (** These functions are used internally by the lexers. They could be used to 179 + write lexers by hand, or with a lexer generator different from [sedlex]. The 180 + lexer buffers have a unique internal slot that can store an integer. They 181 + also store a "backtrack" position. *) 182 + 183 + (** [start t] informs the lexer buffer that any code points until the current 184 + position can be discarded. The current position become the "start" position 185 + as returned by [Sedlexing.lexeme_start]. Moreover, the internal slot is set 186 + to [-1] and the backtrack position is set to the current position. *) 187 + val start : lexbuf -> unit 188 + 189 + (** [next lexbuf] extracts the next code point from the lexer buffer and 190 + increments to current position. If the input stream is exhausted, the 191 + function returns [None]. If a ['\n'] is encountered, the tracked line number 192 + is incremented. *) 193 + val next : lexbuf -> Uchar.t option 194 + 195 + (** [__private__next_int lexbuf] extracts the next code point from the lexer 196 + buffer and increments to current position. If the input stream is exhausted, 197 + the function returns -1. If a ['\n'] is encountered, the tracked line number 198 + is incremented. 199 + 200 + This is a private API, it should not be used by code using this module's API 201 + and can be removed at any time. *) 202 + val __private__next_int : lexbuf -> int 203 + 204 + (** [mark lexbuf i] stores the integer [i] in the internal slot. The backtrack 205 + position is set to the current position. *) 206 + val mark : lexbuf -> int -> unit 207 + 208 + (** [backtrack lexbuf] returns the value stored in the internal slot of the 209 + buffer, and performs backtracking (the current position is set to the value 210 + of the backtrack position). *) 211 + val backtrack : lexbuf -> int 212 + 213 + (** [with_tokenizer tokenizer lexbuf] given a lexer and a lexbuf, returns a 214 + generator of tokens annotated with positions. This generator can be used 215 + with the Menir parser generator's incremental API. *) 216 + val with_tokenizer : 217 + (lexbuf -> 'token) -> 218 + lexbuf -> 219 + unit -> 220 + 'token * Lexing.position * Lexing.position 221 + 222 + (** {6 Support for common encodings} *) 223 + 224 + module Latin1 : sig 225 + (** Create a lexbuf from a Latin1 encoded stream (ie a stream of Unicode code 226 + points in the range [0..255]) *) 227 + val from_gen : char Gen.t -> lexbuf 228 + 229 + (** Create a lexbuf from a Latin1 encoded input channel. The client is 230 + responsible for closing the channel. *) 231 + val from_channel : in_channel -> lexbuf 232 + 233 + (** Create a lexbuf from a Latin1 encoded string. *) 234 + val from_string : string -> lexbuf 235 + 236 + (** As [Sedlexing.lexeme] with a result encoded in Latin1. This function 237 + throws an exception [InvalidCodepoint] if it is not possible to encode the 238 + result in Latin1. *) 239 + val lexeme : lexbuf -> string 240 + 241 + (** As [Sedlexing.sub_lexeme] with a result encoded in Latin1. This function 242 + throws an exception [InvalidCodepoint] if it is not possible to encode the 243 + result in Latin1. *) 244 + val sub_lexeme : lexbuf -> int -> int -> string 245 + 246 + (** As [Sedlexing.lexeme_char] with a result encoded in Latin1. This function 247 + throws an exception [InvalidCodepoint] if it is not possible to encode the 248 + result in Latin1. *) 249 + val lexeme_char : lexbuf -> int -> char 250 + end 251 + 252 + module Utf8 : sig 253 + (** Create a lexbuf from a UTF-8 encoded stream. *) 254 + val from_gen : char Gen.t -> lexbuf 255 + 256 + (** Create a lexbuf from a UTF-8 encoded input channel. *) 257 + val from_channel : in_channel -> lexbuf 258 + 259 + (** Create a lexbuf from a UTF-8 encoded string. *) 260 + val from_string : string -> lexbuf 261 + 262 + (** As [Sedlexing.lexeme] with a result encoded in UTF-8. *) 263 + val lexeme : lexbuf -> string 264 + 265 + (** As [Sedlexing.sub_lexeme] with a result encoded in UTF-8. *) 266 + val sub_lexeme : lexbuf -> int -> int -> string 267 + 268 + module Helper : sig 269 + val width : char -> int 270 + val check_two : int -> int -> int 271 + val check_three : int -> int -> int -> int 272 + val check_four : int -> int -> int -> int -> int 273 + end 274 + end 275 + 276 + module Utf16 : sig 277 + type byte_order = Little_endian | Big_endian 278 + 279 + (** [Utf16.from_gen s opt_bo] creates a lexbuf from an UTF-16 encoded stream. 280 + If [opt_bo] matches with [None] the function expects a BOM (Byte Order 281 + Mark), and takes the byte order as [Utf16.Big_endian] if it cannot find 282 + one. When [opt_bo] matches with [Some bo], [bo] is taken as byte order. In 283 + this case a leading BOM is kept in the stream - the lexer has to ignore it 284 + and a `wrong' BOM ([0xfffe]) will raise Utf16.InvalidCodepoint. *) 285 + val from_gen : char Gen.t -> byte_order option -> lexbuf 286 + 287 + (** Works as [Utf16.from_gen] with an [in_channel]. *) 288 + val from_channel : in_channel -> byte_order option -> lexbuf 289 + 290 + (** Works as [Utf16.from_gen] with a [string]. *) 291 + val from_string : string -> byte_order option -> lexbuf 292 + 293 + (** [utf16_lexeme lb bo bom] as [Sedlexing.lexeme] with a result encoded in 294 + UTF-16 in byte_order [bo] and starting with a BOM if [bom = true]. *) 295 + val lexeme : lexbuf -> byte_order -> bool -> string 296 + 297 + (** [sub_lexeme lb pos len bo bom] as [Sedlexing.sub_lexeme] with a result 298 + encoded in UTF-16 with byte order [bo] and starting with a BOM if 299 + [bom=true] *) 300 + val sub_lexeme : lexbuf -> int -> int -> byte_order -> bool -> string 301 + end
+19
vendor/opam/sedlex/src/syntax/dune
··· 1 + (library 2 + (name sedlex_ppx) 3 + (public_name sedlex.ppx) 4 + (kind ppx_rewriter) 5 + (libraries ppxlib sedlex sedlex.utils) 6 + (ppx_runtime_libraries sedlex) 7 + (preprocess 8 + (pps ppxlib.metaquot)) 9 + (flags 10 + (:standard -w -9))) 11 + 12 + (rule 13 + (targets unicode.ml) 14 + (mode promote) 15 + (deps 16 + (:gen ../generator/gen_unicode.exe) 17 + (glob_files ../generator/data/*.txt)) 18 + (action 19 + (run %{gen} %{targets})))
+217
vendor/opam/sedlex/src/syntax/iso.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + 4 + open Sedlex_cset 5 + 6 + let tr8876_ident_char = 7 + let l = 8 + [ 9 + (* ASCII *) 10 + (0x0041, 0x005a); 11 + (0x0061, 0x007a); 12 + (* Latin *) 13 + (0x00c0, 0x00d6); 14 + (0x00d8, 0x00f6); 15 + (0x00f8, 0x01f5); 16 + (0x01fa, 0x0217); 17 + (0x0250, 0x02a8); 18 + (* Greek *) 19 + (0x0384, 0x0384); 20 + (0x0388, 0x038a); 21 + (0x038c, 0x038c); 22 + (0x038e, 0x03a1); 23 + (0x03a3, 0x03ce); 24 + (0x03d0, 0x03d6); 25 + (0x03da, 0x03da); 26 + (0x03dc, 0x03dc); 27 + (0x03de, 0x03de); 28 + (0x03e0, 0x03e0); 29 + (0x03e2, 0x03f3); 30 + (* Cyrillic *) 31 + (0x0401, 0x040d); 32 + (0x040f, 0x044f); 33 + (0x0451, 0x045c); 34 + (0x045e, 0x0481); 35 + (0x0490, 0x04c4); 36 + (0x04c7, 0x04c4); 37 + (0x04cb, 0x04cc); 38 + (0x04d0, 0x04eb); 39 + (0x04ee, 0x04f5); 40 + (0x04f8, 0x04f9); 41 + (* Armenian *) 42 + (0x0531, 0x0556); 43 + (0x0561, 0x0587); 44 + (0x04d0, 0x04eb); 45 + (* Hebrew *) 46 + (0x05d0, 0x05ea); 47 + (0x05f0, 0x05f4); 48 + (* Arabic *) 49 + (0x0621, 0x063a); 50 + (0x0640, 0x0652); 51 + (0x0670, 0x06b7); 52 + (0x06ba, 0x06be); 53 + (0x06c0, 0x06ce); 54 + (0x06e5, 0x06e7); 55 + (* Devanagari *) 56 + (0x0905, 0x0939); 57 + (0x0958, 0x0962); 58 + (* Bengali *) 59 + (0x0985, 0x098c); 60 + (0x098f, 0x0990); 61 + (0x0993, 0x09a8); 62 + (0x09aa, 0x09b0); 63 + (0x09b2, 0x09b2); 64 + (0x09b6, 0x09b9); 65 + (0x09dc, 0x09dd); 66 + (0x09df, 0x09e1); 67 + (0x09f0, 0x09f1); 68 + (* Gurmukhi *) 69 + (0x0a05, 0x0a0a); 70 + (0x0a0f, 0x0a10); 71 + (0x0a13, 0x0a28); 72 + (0x0a2a, 0x0a30); 73 + (0x0a32, 0x0a33); 74 + (0x0a35, 0x0a36); 75 + (0x0a38, 0x0a39); 76 + (0x0a59, 0x0a5c); 77 + (0x0a5e, 0x0a5e); 78 + (* Gunjarati *) 79 + (0x0a85, 0x0a8b); 80 + (0x0a8d, 0x0a8d); 81 + (0x0a8f, 0x0a91); 82 + (0x0a93, 0x0aa8); 83 + (0x0aaa, 0x0ab0); 84 + (0x0ab2, 0x0ab3); 85 + (0x0ab5, 0x0ab9); 86 + (0x0ae0, 0x0ae0); 87 + (* Oriya *) 88 + (0x0b05, 0x0b0c); 89 + (0x0b0f, 0x0b10); 90 + (0x0b13, 0x0b28); 91 + (0x0b2a, 0x0b30); 92 + (0x0b32, 0x0b33); 93 + (0x0b36, 0x0b39); 94 + (0x0b5c, 0x0b5d); 95 + (0x0b5f, 0x0b61); 96 + (* Tamil *) 97 + (0x0b85, 0x0b8a); 98 + (0x0b8e, 0x0b90); 99 + (0x0b92, 0x0b95); 100 + (0x0b99, 0x0b9a); 101 + (0x0b9c, 0x0b9c); 102 + (0x0b9e, 0x0b9f); 103 + (0x0ba3, 0x0ba4); 104 + (0x0ba8, 0x0baa); 105 + (0x0bae, 0x0bb5); 106 + (0x0bb7, 0x0bb9); 107 + (* Telugu *) 108 + (0x0c05, 0x0c0c); 109 + (0x0c0e, 0x0c10); 110 + (0x0c12, 0x0c28); 111 + (0x0c2a, 0x0c33); 112 + (0x0c35, 0x0c39); 113 + (0x0c60, 0x0c61); 114 + (* Kannada *) 115 + (0x0c85, 0x0c8c); 116 + (0x0c8e, 0x0c90); 117 + (0x0c92, 0x0ca8); 118 + (0x0caa, 0x0cb3); 119 + (0x0cb5, 0x0cb9); 120 + (0x0ce0, 0x0ce1); 121 + (* Malayam *) 122 + (0x0d05, 0x0d0c); 123 + (0x0d0e, 0x0d10); 124 + (0x0d12, 0x0d28); 125 + (0x0d2a, 0x0d39); 126 + (0x0d60, 0x0d61); 127 + (* Thai *) 128 + (0x0e01, 0x0e30); 129 + (0x0e32, 0x0e33); 130 + (0x0e40, 0x0e46); 131 + (0x0e4f, 0x0e5b); 132 + (* Lao *) 133 + (0x0e81, 0x0e82); 134 + (0x0e84, 0x0e84); 135 + (0x0e87, 0x0e88); 136 + (0x0e8a, 0x0e8a); 137 + (0x0e0d, 0x0e0d); 138 + (0x0e94, 0x0e97); 139 + (0x0e99, 0x0e9f); 140 + (0x0ea1, 0x0ea3); 141 + (0x0ea5, 0x0ea5); 142 + (0x0ea7, 0x0ea7); 143 + (0x0eaa, 0x0eab); 144 + (0x0ead, 0x0eb0); 145 + (0x0eb2, 0x0eb3); 146 + (0x0ebd, 0x0ebd); 147 + (0x0ec0, 0x0ec4); 148 + (0x0ec6, 0x0ec6); 149 + (* Georgian *) 150 + (0x10a0, 0x10c5); 151 + (0x10d0, 0x10f6); 152 + (* Hangul Jamo *) 153 + (0x1100, 0x1159); 154 + (0x1161, 0x11a2); 155 + (0x11a8, 0x11f9); 156 + (0x11d0, 0x11f6); 157 + (* Latin extensions *) 158 + (0x1e00, 0x1e9a); 159 + (0x1ea0, 0x1ef9); 160 + (* Greek extended *) 161 + (0x1f00, 0x1f15); 162 + (0x1f18, 0x1f1d); 163 + (0x1f20, 0x1f45); 164 + (0x1f48, 0x1f4d); 165 + (0x1f50, 0x1f57); 166 + (0x1f59, 0x1f59); 167 + (0x1f5b, 0x1f5b); 168 + (0x1f5d, 0x1f5d); 169 + (0x1f5f, 0x1f7d); 170 + (0x1f80, 0x1fb4); 171 + (0x1fb6, 0x1fbc); 172 + (0x1fc2, 0x1fc4); 173 + (0x1fc6, 0x1fcc); 174 + (0x1fd0, 0x1fd3); 175 + (0x1fd6, 0x1fdb); 176 + (0x1fe0, 0x1fec); 177 + (0x1ff2, 0x1ff4); 178 + (0x1ff6, 0x1ffc); 179 + (* Hiragana *) 180 + (0x3041, 0x3094); 181 + (0x309b, 0x309e); 182 + (* Katakana *) 183 + (0x30a1, 0x30fe); 184 + (* Bopmofo *) 185 + (0x3105, 0x312c); 186 + (* CJK Unified Ideographs *) 187 + (0x4e00, 0x9fa5); 188 + (* CJK Compatibility Ideographs *) 189 + (0xf900, 0xfa2d); 190 + (* Arabic Presentation Forms *) 191 + (0xfb1f, 0xfb36); 192 + (0xfb38, 0xfb3c); 193 + (0xfb3e, 0xfb3e); 194 + (0xfb40, 0xfb41); 195 + (0xfb42, 0xfb44); 196 + (0xfb46, 0xfbb1); 197 + (0xfbd3, 0xfd35); 198 + (* Arabic Presentation Forms-A *) 199 + (0xfd50, 0xfd85); 200 + (0xfd92, 0xfbc7); 201 + (0xfdf0, 0xfdfb); 202 + (* Arabic Presentation Forms-B *) 203 + (0xfe70, 0xfe72); 204 + (0xfe74, 0xfe74); 205 + (0xfe76, 0xfefc); 206 + (* Half width and Fullwidth Forms *) 207 + (0xff21, 0xff3a); 208 + (0xff41, 0xff5a); 209 + (0xff66, 0xffbe); 210 + (0xffc2, 0xffc7); 211 + (0xffca, 0xffcf); 212 + (0xffd2, 0xffd7); 213 + (0xffd2, 0xffd7); 214 + (0xffda, 0xffdc); 215 + ] 216 + in 217 + union_list (List.map (fun (a, b) -> interval a b) l)
+10
vendor/opam/sedlex/src/syntax/iso.mli
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + 4 + open Sedlex_cset 5 + 6 + (** Letters to be used in identifiers, as specified by ISO .... *) 7 + 8 + (* Data provided by John M. Skaller *) 9 + 10 + val tr8876_ident_char : t
+579
vendor/opam/sedlex/src/syntax/ppx_sedlex.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + open Ppxlib 6 + open Ast_builder.Default 7 + open Ast_helper 8 + 9 + (* let ocaml_version = Versions.ocaml_408 *) 10 + 11 + module Cset = Sedlex_cset 12 + 13 + (* Decision tree for partitions *) 14 + 15 + let default_loc = Location.none 16 + 17 + type decision_tree = 18 + | Lte of int * decision_tree * decision_tree 19 + | Table of int * int array 20 + | Return of int 21 + 22 + let rec simplify_decision_tree (x : decision_tree) = 23 + match x with 24 + | Table _ | Return _ -> x 25 + | Lte (_, (Return a as l), Return b) when a = b -> l 26 + | Lte (i, l, r) -> ( 27 + let l = simplify_decision_tree l in 28 + let r = simplify_decision_tree r in 29 + match (l, r) with 30 + | Return a, Return b when a = b -> l 31 + | _ -> Lte (i, l, r)) 32 + 33 + let decision l = 34 + let l = List.map (fun (a, b, i) -> (a, b, Return i)) l in 35 + let rec merge2 = function 36 + | (a1, b1, d1) :: (a2, b2, d2) :: rest -> 37 + let x = if b1 + 1 = a2 then d2 else Lte (a2 - 1, Return (-1), d2) in 38 + (a1, b2, Lte (b1, d1, x)) :: merge2 rest 39 + | rest -> rest 40 + in 41 + let rec aux = function 42 + | [(a, b, d)] -> Lte (a - 1, Return (-1), Lte (b, d, Return (-1))) 43 + | [] -> Return (-1) 44 + | l -> aux (merge2 l) 45 + in 46 + aux l 47 + 48 + let limit = 8192 49 + 50 + let decision_table l = 51 + let rec aux m accu = function 52 + | ((a, b, i) as x) :: rem when b < limit && i < 255 -> 53 + aux (min a m) (x :: accu) rem 54 + | rem -> (m, accu, rem) 55 + in 56 + let min, table, rest = aux max_int [] l in 57 + match table with 58 + | [] -> decision l 59 + | [(min, max, i)] -> 60 + Lte (min - 1, Return (-1), Lte (max, Return i, decision rest)) 61 + | (_, max, _) :: _ -> 62 + let arr = Array.make (max - min + 1) 0 in 63 + let set (a, b, i) = 64 + for j = a to b do 65 + arr.(j - min) <- i + 1 66 + done 67 + in 68 + List.iter set table; 69 + Lte (min - 1, Return (-1), Lte (max, Table (min, arr), decision rest)) 70 + 71 + let rec simplify min max = function 72 + | Lte (i, yes, no) -> 73 + if i >= max then simplify min max yes 74 + else if i < min then simplify min max no 75 + else Lte (i, simplify min i yes, simplify (i + 1) max no) 76 + | x -> x 77 + 78 + let segments_of_partition p = 79 + let seg = ref [] in 80 + Array.iteri 81 + (fun i c -> 82 + List.iter 83 + (fun (a, b) -> seg := (a, b, i) :: !seg) 84 + (c : Sedlex_cset.t :> (int * int) list)) 85 + p; 86 + List.sort (fun (a1, _, _) (a2, _, _) -> compare a1 a2) !seg 87 + 88 + let decision_table p = 89 + simplify (-1) Cset.max_code (decision_table (segments_of_partition p)) 90 + 91 + (* Helpers to build AST *) 92 + 93 + let appfun s l = 94 + let loc = default_loc in 95 + eapply ~loc (evar ~loc s) l 96 + 97 + let glb_value name def = 98 + let loc = default_loc in 99 + pstr_value ~loc Nonrecursive 100 + [value_binding ~loc ~pat:(pvar ~loc name) ~expr:def] 101 + 102 + (* Named regexps *) 103 + 104 + module StringMap = Map.Make (struct 105 + type t = string 106 + 107 + let compare = compare 108 + end) 109 + 110 + let builtin_regexps = 111 + List.fold_left 112 + (fun acc (n, c) -> StringMap.add n (Sedlex.chars c) acc) 113 + StringMap.empty 114 + ([ 115 + ("any", Cset.any); 116 + ("eof", Cset.eof); 117 + ("xml_letter", Xml.letter); 118 + ("xml_digit", Xml.digit); 119 + ("xml_extender", Xml.extender); 120 + ("xml_base_char", Xml.base_char); 121 + ("xml_ideographic", Xml.ideographic); 122 + ("xml_combining_char", Xml.combining_char); 123 + ("xml_blank", Xml.blank); 124 + ("tr8876_ident_char", Iso.tr8876_ident_char); 125 + ] 126 + @ Unicode.Categories.list @ Unicode.Properties.list) 127 + 128 + (* Tables (indexed mapping: codepoint -> next state) *) 129 + 130 + let tables = Hashtbl.create 31 131 + let table_counter = ref 0 132 + let get_tables () = Hashtbl.fold (fun key x accu -> (x, key) :: accu) tables [] 133 + 134 + let table_name x = 135 + try Hashtbl.find tables x 136 + with Not_found -> 137 + incr table_counter; 138 + let s = Printf.sprintf "__sedlex_table_%i" !table_counter in 139 + Hashtbl.add tables x s; 140 + s 141 + 142 + let table (name, v) = 143 + let n = Array.length v in 144 + let s = Bytes.create n in 145 + for i = 0 to n - 1 do 146 + Bytes.set s i (Char.chr v.(i)) 147 + done; 148 + glb_value name (estring ~loc:default_loc (Bytes.to_string s)) 149 + 150 + (* Partition (function: codepoint -> next state) *) 151 + 152 + let partitions = Hashtbl.create 31 153 + let partition_counter = ref 0 154 + 155 + let get_partitions () = 156 + Hashtbl.fold (fun key x accu -> (x, key) :: accu) partitions [] 157 + 158 + let partition_name x = 159 + try Hashtbl.find partitions x 160 + with Not_found -> 161 + incr partition_counter; 162 + let s = Printf.sprintf "__sedlex_partition_%i" !partition_counter in 163 + Hashtbl.add partitions x s; 164 + s 165 + 166 + (* We duplicate the body for the EOF (-1) case rather than creating 167 + an interior utility function. *) 168 + let partition (name, p) = 169 + let loc = default_loc in 170 + let rec gen_tree = function 171 + | Lte (i, yes, no) -> 172 + [%expr 173 + if c <= [%e eint ~loc i] then [%e gen_tree yes] else [%e gen_tree no]] 174 + | Return i -> eint ~loc:default_loc i 175 + | Table (offset, t) -> 176 + let c = 177 + if offset = 0 then [%expr c] else [%expr c - [%e eint ~loc offset]] 178 + in 179 + [%expr 180 + Char.code (String.unsafe_get [%e evar ~loc (table_name t)] [%e c]) - 1] 181 + in 182 + let body = gen_tree (simplify_decision_tree (decision_table p)) in 183 + glb_value name 184 + [%expr 185 + fun c -> 186 + let open! Stdlib in 187 + [%e body]] 188 + 189 + (* Code generation for the automata *) 190 + 191 + let best_final final = 192 + let fin = ref None in 193 + for i = Array.length final - 1 downto 0 do 194 + if final.(i) then fin := Some i 195 + done; 196 + !fin 197 + 198 + let state_fun state = Printf.sprintf "__sedlex_state_%i" state 199 + 200 + let call_state lexbuf auto state = 201 + let trans, final = auto.(state) in 202 + if Array.length trans = 0 then ( 203 + match best_final final with 204 + | Some i -> eint ~loc:default_loc i 205 + | None -> assert false) 206 + else appfun (state_fun state) [lexbuf] 207 + 208 + let gen_state (lexbuf_name, lexbuf) auto i (trans, final) = 209 + let loc = default_loc in 210 + let partition = Array.map fst trans in 211 + let cases = 212 + Array.mapi 213 + (fun i (_, j) -> 214 + case ~lhs:(pint ~loc i) ~guard:None ~rhs:(call_state lexbuf auto j)) 215 + trans 216 + in 217 + let cases = Array.to_list cases in 218 + let body () = 219 + pexp_match ~loc 220 + (appfun (partition_name partition) 221 + [[%expr Sedlexing.__private__next_int [%e lexbuf]]]) 222 + (cases 223 + @ [ 224 + case 225 + ~lhs:[%pat? _] 226 + ~guard:None 227 + ~rhs:[%expr Sedlexing.backtrack [%e lexbuf]]; 228 + ]) 229 + in 230 + let ret body = 231 + let lhs = pvar ~loc:lexbuf.pexp_loc lexbuf_name in 232 + [ 233 + value_binding ~loc 234 + ~pat:(pvar ~loc (state_fun i)) 235 + ~expr:(Exp.fun_ ~loc Nolabel None lhs body); 236 + ] 237 + in 238 + match best_final final with 239 + | None -> ret (body ()) 240 + | Some _ when Array.length trans = 0 -> [] 241 + | Some i -> 242 + ret 243 + [%expr 244 + Sedlexing.mark [%e lexbuf] [%e eint ~loc i]; 245 + [%e body ()]] 246 + 247 + let gen_recflag auto = 248 + (* The generated function is not recursive if the transitions end 249 + in states with no further transitions. *) 250 + try 251 + Array.iter 252 + (fun (trans_i, _) -> 253 + Array.iter 254 + (fun (_, j) -> 255 + let trans_j, _ = auto.(j) in 256 + if Array.length trans_j > 0 then raise Exit) 257 + trans_i) 258 + auto; 259 + Nonrecursive 260 + with Exit -> Recursive 261 + 262 + let gen_definition ((_, lexbuf) as lexbuf_with_name) l error = 263 + let loc = default_loc in 264 + let brs = Array.of_list l in 265 + let auto = Sedlex.compile (Array.map fst brs) in 266 + let cases = 267 + Array.to_list 268 + (Array.mapi 269 + (fun i (_, e) -> case ~lhs:(pint ~loc i) ~guard:None ~rhs:e) 270 + brs) 271 + in 272 + let states = Array.mapi (gen_state lexbuf_with_name auto) auto in 273 + let states = List.flatten (Array.to_list states) in 274 + pexp_let ~loc (gen_recflag auto) states 275 + (pexp_sequence ~loc 276 + [%expr Sedlexing.start [%e lexbuf]] 277 + (pexp_match ~loc 278 + (appfun (state_fun 0) [lexbuf]) 279 + (cases @ [case ~lhs:(ppat_any ~loc) ~guard:None ~rhs:error]))) 280 + 281 + (* Lexer specification parser *) 282 + 283 + let codepoint i = 284 + if i < 0 || i > Cset.max_code then 285 + failwith (Printf.sprintf "Invalid Unicode code point: %i" i); 286 + i 287 + 288 + let char c = Cset.singleton (Char.code c) 289 + let uchar c = Cset.singleton (Uchar.to_int c) 290 + 291 + let err loc fmt = 292 + Printf.ksprintf 293 + (fun s -> 294 + raise (Location.Error (Location.Error.createf ~loc "Sedlex: %s" s))) 295 + fmt 296 + 297 + type encoding = Utf8 | Latin1 | Ascii 298 + 299 + let string_of_encoding = function 300 + | Utf8 -> "UTF-8" 301 + | Latin1 -> "Latin-1" 302 + | Ascii -> "ASCII" 303 + 304 + let rev_csets_of_string ~loc ~encoding s = 305 + match encoding with 306 + | Utf8 -> 307 + Utf8.fold 308 + ~f:(fun acc _ x -> 309 + match x with 310 + | `Malformed _ -> 311 + err loc "Malformed %s string" (string_of_encoding encoding) 312 + | `Uchar c -> uchar c :: acc) 313 + [] s 314 + | Latin1 -> 315 + let l = ref [] in 316 + for i = 0 to String.length s - 1 do 317 + l := char s.[i] :: !l 318 + done; 319 + !l 320 + | Ascii -> 321 + let l = ref [] in 322 + for i = 0 to String.length s - 1 do 323 + match s.[i] with 324 + | '\x00' .. '\x7F' as c -> l := char c :: !l 325 + | _ -> err loc "Malformed %s string" (string_of_encoding encoding) 326 + done; 327 + !l 328 + 329 + let rec repeat r = function 330 + | 0, 0 -> Sedlex.eps 331 + | 0, m -> Sedlex.alt Sedlex.eps (Sedlex.seq r (repeat r (0, m - 1))) 332 + | n, m -> Sedlex.seq r (repeat r (n - 1, m - 1)) 333 + 334 + let regexp_of_pattern env = 335 + let rec char_pair_op func name ~encoding p tuple = 336 + (* Construct something like Sub(a,b) *) 337 + match tuple with 338 + | Some { ppat_desc = Ppat_tuple [p0; p1] } -> begin 339 + match func (aux ~encoding p0) (aux ~encoding p1) with 340 + | Some r -> r 341 + | None -> 342 + err p.ppat_loc 343 + "the %s operator can only applied to single-character length \ 344 + regexps" 345 + name 346 + end 347 + | _ -> 348 + err p.ppat_loc "the %s operator requires two arguments, like %s(a,b)" 349 + name name 350 + and aux ~encoding p = 351 + (* interpret one pattern node *) 352 + match p.ppat_desc with 353 + | Ppat_or (p1, p2) -> Sedlex.alt (aux ~encoding p1) (aux ~encoding p2) 354 + | Ppat_tuple (p :: pl) -> 355 + List.fold_left 356 + (fun r p -> Sedlex.seq r (aux ~encoding p)) 357 + (aux ~encoding p) pl 358 + | Ppat_construct ({ txt = Lident "Star" }, Some (_, p)) -> 359 + Sedlex.rep (aux ~encoding p) 360 + | Ppat_construct ({ txt = Lident "Plus" }, Some (_, p)) -> 361 + Sedlex.plus (aux ~encoding p) 362 + | Ppat_construct ({ txt = Lident "Utf8" }, Some (_, p)) -> 363 + aux ~encoding:Utf8 p 364 + | Ppat_construct ({ txt = Lident "Latin1" }, Some (_, p)) -> 365 + aux ~encoding:Latin1 p 366 + | Ppat_construct ({ txt = Lident "Ascii" }, Some (_, p)) -> 367 + aux ~encoding:Ascii p 368 + | Ppat_construct 369 + ( { txt = Lident "Rep" }, 370 + Some 371 + ( _, 372 + { 373 + ppat_desc = 374 + Ppat_tuple 375 + [ 376 + p0; 377 + { 378 + ppat_desc = 379 + Ppat_constant (i1 as i2) | Ppat_interval (i1, i2); 380 + }; 381 + ]; 382 + } ) ) -> begin 383 + match (i1, i2) with 384 + | Pconst_integer (i1, _), Pconst_integer (i2, _) -> 385 + let i1 = int_of_string i1 in 386 + let i2 = int_of_string i2 in 387 + if 0 <= i1 && i1 <= i2 then repeat (aux ~encoding p0) (i1, i2) 388 + else err p.ppat_loc "Invalid range for Rep operator" 389 + | _ -> 390 + err p.ppat_loc "Rep must take an integer constant or interval" 391 + end 392 + | Ppat_construct ({ txt = Lident "Rep" }, _) -> 393 + err p.ppat_loc "the Rep operator takes 2 arguments" 394 + | Ppat_construct ({ txt = Lident "Opt" }, Some (_, p)) -> 395 + Sedlex.alt Sedlex.eps (aux ~encoding p) 396 + | Ppat_construct ({ txt = Lident "Compl" }, arg) -> begin 397 + match arg with 398 + | Some (_, p0) -> begin 399 + match Sedlex.compl (aux ~encoding p0) with 400 + | Some r -> r 401 + | None -> 402 + err p.ppat_loc 403 + "the Compl operator can only applied to a \ 404 + single-character length regexp" 405 + end 406 + | _ -> err p.ppat_loc "the Compl operator requires an argument" 407 + end 408 + | Ppat_construct ({ txt = Lident "Sub" }, arg) -> 409 + char_pair_op ~encoding Sedlex.subtract "Sub" p 410 + (Option.map (fun (_, arg) -> arg) arg) 411 + | Ppat_construct ({ txt = Lident "Intersect" }, arg) -> 412 + char_pair_op ~encoding Sedlex.intersection "Intersect" p 413 + (Option.map (fun (_, arg) -> arg) arg) 414 + | Ppat_construct ({ txt = Lident "Chars" }, arg) -> ( 415 + let const = 416 + match arg with 417 + | Some (_, { ppat_desc = Ppat_constant const }) -> Some const 418 + | _ -> None 419 + in 420 + match const with 421 + | Some (Pconst_string (s, _, _)) -> 422 + let l = rev_csets_of_string ~loc:p.ppat_loc ~encoding s in 423 + let chars = List.fold_left Cset.union Cset.empty l in 424 + Sedlex.chars chars 425 + | _ -> 426 + err p.ppat_loc "the Chars operator requires a string argument") 427 + | Ppat_interval (i_start, i_end) -> begin 428 + match (i_start, i_end) with 429 + | Pconst_char c1, Pconst_char c2 -> 430 + let valid = 431 + match encoding with 432 + (* utf8 char interval can only match ascii because 433 + of the OCaml lexer. *) 434 + | Ascii | Utf8 -> ( 435 + function '\x00' .. '\x7f' -> true | _ -> false) 436 + | Latin1 -> ( function _ -> true) 437 + in 438 + if not (valid c1 && valid c2) then 439 + err p.ppat_loc 440 + "this pattern is not a valid %s interval regexp" 441 + (string_of_encoding encoding); 442 + Sedlex.chars (Cset.interval (Char.code c1) (Char.code c2)) 443 + | Pconst_integer (i1, _), Pconst_integer (i2, _) -> 444 + Sedlex.chars 445 + (Cset.interval 446 + (codepoint (int_of_string i1)) 447 + (codepoint (int_of_string i2))) 448 + | _ -> err p.ppat_loc "this pattern is not a valid interval regexp" 449 + end 450 + | Ppat_constant const -> begin 451 + match const with 452 + | Pconst_string (s, _, _) -> 453 + let rev_l = rev_csets_of_string s ~loc:p.ppat_loc ~encoding in 454 + List.fold_left 455 + (fun acc cset -> Sedlex.seq (Sedlex.chars cset) acc) 456 + Sedlex.eps rev_l 457 + | Pconst_char c -> Sedlex.chars (char c) 458 + | Pconst_integer (i, _) -> 459 + Sedlex.chars (Cset.singleton (codepoint (int_of_string i))) 460 + | _ -> err p.ppat_loc "this pattern is not a valid regexp" 461 + end 462 + | Ppat_var { txt = x } -> begin 463 + try StringMap.find x env 464 + with Not_found -> err p.ppat_loc "unbound regexp %s" x 465 + end 466 + | _ -> err p.ppat_loc "this pattern is not a valid regexp" 467 + in 468 + aux ~encoding:Ascii 469 + 470 + let previous = ref [] 471 + let regexps = ref [] 472 + let should_set_cookies = ref false 473 + 474 + let mapper = 475 + object (this) 476 + inherit Ast_traverse.map as super 477 + val env = builtin_regexps 478 + 479 + method define_regexp name p = 480 + {<env = StringMap.add name (regexp_of_pattern env p) env>} 481 + 482 + method! expression e = 483 + match e with 484 + | [%expr [%sedlex [%e? { pexp_desc = Pexp_match (lexbuf, cases) }]]] -> 485 + let lexbuf = 486 + match lexbuf with 487 + | { pexp_desc = Pexp_ident { txt = Lident txt } } -> 488 + (txt, lexbuf) 489 + | _ -> 490 + err lexbuf.pexp_loc 491 + "the matched expression must be a single identifier" 492 + in 493 + let cases = List.rev cases in 494 + let error = 495 + match List.hd cases with 496 + | { pc_lhs = [%pat? _]; pc_rhs = e; pc_guard = None } -> 497 + this#expression e 498 + | { pc_lhs = p } -> 499 + err p.ppat_loc 500 + "the last branch must be a catch-all error case" 501 + in 502 + let cases = List.rev (List.tl cases) in 503 + let cases = 504 + List.map 505 + (function 506 + | { pc_lhs = p; pc_rhs = e; pc_guard = None } -> 507 + (regexp_of_pattern env p, this#expression e) 508 + | { pc_guard = Some e } -> 509 + err e.pexp_loc "'when' guards are not supported") 510 + cases 511 + in 512 + gen_definition lexbuf cases error 513 + | [%expr 514 + let [%p? { ppat_desc = Ppat_var { txt = name } }] = 515 + [%sedlex.regexp? [%p? p]] 516 + in 517 + [%e? body]] -> 518 + (this#define_regexp name p)#expression body 519 + | [%expr [%sedlex [%e? _]]] -> 520 + err e.pexp_loc 521 + "the %%sedlex extension is only recognized on match expressions" 522 + | _ -> super#expression e 523 + 524 + val toplevel = true 525 + 526 + method structure_with_regexps l = 527 + let mapper = ref this in 528 + let regexps = ref [] in 529 + let l = 530 + List.concat 531 + (List.map 532 + (function 533 + | [%stri 534 + let [%p? { ppat_desc = Ppat_var { txt = name } }] = 535 + [%sedlex.regexp? [%p? p]]] as i -> 536 + regexps := i :: !regexps; 537 + mapper := !mapper#define_regexp name p; 538 + [] 539 + | i -> [!mapper#structure_item i]) 540 + l) 541 + in 542 + (l, List.rev !regexps) 543 + 544 + method! structure l = 545 + if toplevel then ( 546 + let sub = {<toplevel = false>} in 547 + let l, regexps' = sub#structure_with_regexps (!previous @ l) in 548 + let parts = List.map partition (get_partitions ()) in 549 + let tables = List.map table (get_tables ()) in 550 + regexps := regexps'; 551 + should_set_cookies := true; 552 + tables @ parts @ l) 553 + else fst (this#structure_with_regexps l) 554 + end 555 + 556 + let pre_handler cookies = 557 + previous := 558 + match Driver.Cookies.get cookies "sedlex.regexps" Ast_pattern.__ with 559 + | Some { pexp_desc = Pexp_extension (_, PStr l) } -> l 560 + | Some _ -> assert false 561 + | None -> [] 562 + 563 + let post_handler cookies = 564 + if !should_set_cookies then ( 565 + let loc = default_loc in 566 + Driver.Cookies.set cookies "sedlex.regexps" 567 + (pexp_extension ~loc ({ loc; txt = "regexps" }, PStr !regexps))) 568 + 569 + let extensions = 570 + [ 571 + Extension.declare "sedlex" Extension.Context.expression 572 + Ast_pattern.(single_expr_payload __) 573 + (fun ~loc:_ ~path:_ expr -> mapper#expression expr); 574 + ] 575 + 576 + let () = 577 + Driver.Cookies.add_handler pre_handler; 578 + Driver.Cookies.add_post_handler post_handler; 579 + Driver.register_transformation "sedlex" ~impl:mapper#structure
+141
vendor/opam/sedlex/src/syntax/sedlex.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + module Cset = Sedlex_cset 6 + 7 + (* NFA *) 8 + 9 + type node = { 10 + id : int; 11 + mutable eps : node list; 12 + mutable trans : (Cset.t * node) list; 13 + } 14 + 15 + (* Compilation regexp -> NFA *) 16 + 17 + type regexp = node -> node 18 + 19 + let cur_id = ref 0 20 + 21 + let new_node () = 22 + incr cur_id; 23 + { id = !cur_id; eps = []; trans = [] } 24 + 25 + let seq r1 r2 succ = r1 (r2 succ) 26 + 27 + let is_chars final = function 28 + | { eps = []; trans = [(c, f)] } when f == final -> Some c 29 + | _ -> None 30 + 31 + let chars c succ = 32 + let n = new_node () in 33 + n.trans <- [(c, succ)]; 34 + n 35 + 36 + let alt r1 r2 succ = 37 + let nr1 = r1 succ and nr2 = r2 succ in 38 + match (is_chars succ nr1, is_chars succ nr2) with 39 + | Some c1, Some c2 -> chars (Cset.union c1 c2) succ 40 + | _ -> 41 + let n = new_node () in 42 + n.eps <- [nr1; nr2]; 43 + n 44 + 45 + let rep r succ = 46 + let n = new_node () in 47 + n.eps <- [r n; succ]; 48 + n 49 + 50 + let plus r succ = 51 + let n = new_node () in 52 + let nr = r n in 53 + n.eps <- [nr; succ]; 54 + nr 55 + 56 + let eps succ = succ (* eps for epsilon *) 57 + 58 + let compl r = 59 + let n = new_node () in 60 + match is_chars n (r n) with 61 + | Some c -> Some (chars (Cset.difference Cset.any c)) 62 + | _ -> None 63 + 64 + let pair_op f r0 r1 = 65 + (* Construct subtract or intersection *) 66 + let n = new_node () in 67 + let to_chars r = is_chars n (r n) in 68 + match (to_chars r0, to_chars r1) with 69 + | Some c0, Some c1 -> Some (chars (f c0 c1)) 70 + | _ -> None 71 + 72 + let subtract = pair_op Cset.difference 73 + let intersection = pair_op Cset.intersection 74 + 75 + let compile_re re = 76 + let final = new_node () in 77 + (re final, final) 78 + 79 + (* Determinization *) 80 + 81 + type state = node list 82 + (* A state of the DFA corresponds to a set of nodes in the NFA. *) 83 + 84 + let rec add_node state node = 85 + if List.memq node state then state else add_nodes (node :: state) node.eps 86 + 87 + and add_nodes state nodes = List.fold_left add_node state nodes 88 + 89 + let transition (state : state) = 90 + (* Merge transition with the same target *) 91 + let rec norm = function 92 + | (c1, n1) :: ((c2, n2) :: q as l) -> 93 + if n1 == n2 then norm ((Cset.union c1 c2, n1) :: q) 94 + else (c1, n1) :: norm l 95 + | l -> l 96 + in 97 + let t = List.concat (List.map (fun n -> n.trans) state) in 98 + let t = norm (List.sort (fun (_, n1) (_, n2) -> n1.id - n2.id) t) in 99 + 100 + (* Split char sets so as to make them disjoint *) 101 + let split (all, t) (c0, n0) = 102 + let t = 103 + (Cset.difference c0 all, [n0]) 104 + :: List.map (fun (c, ns) -> (Cset.intersection c c0, n0 :: ns)) t 105 + @ List.map (fun (c, ns) -> (Cset.difference c c0, ns)) t 106 + in 107 + (Cset.union all c0, List.filter (fun (c, _) -> not (Cset.is_empty c)) t) 108 + in 109 + 110 + let _, t = List.fold_left split (Cset.empty, []) t in 111 + 112 + (* Epsilon closure of targets *) 113 + let t = List.map (fun (c, ns) -> (c, add_nodes [] ns)) t in 114 + 115 + (* Canonical ordering *) 116 + let t = Array.of_list t in 117 + Array.sort (fun (c1, _) (c2, _) -> compare c1 c2) t; 118 + t 119 + 120 + let compile rs = 121 + let rs = Array.map compile_re rs in 122 + let counter = ref 0 in 123 + let states = Hashtbl.create 31 in 124 + let states_def = Hashtbl.create 31 in 125 + let rec aux state = 126 + try Hashtbl.find states state 127 + with Not_found -> 128 + let i = !counter in 129 + incr counter; 130 + Hashtbl.add states state i; 131 + let trans = transition state in 132 + let trans = Array.map (fun (p, t) -> (p, aux t)) trans in 133 + let finals = Array.map (fun (_, f) -> List.memq f state) rs in 134 + Hashtbl.add states_def i (trans, finals); 135 + i 136 + in 137 + let init = ref [] in 138 + Array.iter (fun (i, _) -> init := add_node !init i) rs; 139 + let i = aux !init in 140 + assert (i = 0); 141 + Array.init !counter (Hashtbl.find states_def)
+25
vendor/opam/sedlex/src/syntax/sedlex.mli
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + type regexp 6 + 7 + val chars : Sedlex_cset.t -> regexp 8 + val seq : regexp -> regexp -> regexp 9 + val alt : regexp -> regexp -> regexp 10 + val rep : regexp -> regexp 11 + val plus : regexp -> regexp 12 + val eps : regexp 13 + val compl : regexp -> regexp option 14 + 15 + (* If the argument is a single [chars] regexp, returns a regexp 16 + which matches the complement set. Otherwise returns [None]. *) 17 + val subtract : regexp -> regexp -> regexp option 18 + 19 + (* If each argument is a single [chars] regexp, returns a regexp 20 + which matches the set (arg1 - arg2). Otherwise returns [None]. *) 21 + val intersection : regexp -> regexp -> regexp option 22 + (* If each argument is a single [chars] regexp, returns a regexp 23 + which matches the intersection set. Otherwise returns [None]. *) 24 + 25 + val compile : regexp array -> ((Sedlex_cset.t * int) array * bool array) array
+5
vendor/opam/sedlex/src/syntax/sedlex_cset.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + (* Copyright 2005, 2013 by Alain Frisch and LexiFi. *) 4 + 5 + include Sedlex_utils.Cset
+2181
vendor/opam/sedlex/src/syntax/unicode.ml
··· 1 + [@@@ocamlformat "disable"] 2 + 3 + (* This file was automatically generated, do not edit. *) 4 + (* Edit gen_unicode.ml.inc instead. *) 5 + 6 + 7 + 8 + let version = "17.0.0" 9 + 10 + module Categories = struct 11 + 12 + let cc = Sedlex_cset.of_list 13 + [0x0, 0x1f; 0x7f, 0x9f] 14 + 15 + let cf = Sedlex_cset.of_list 16 + [0xad, 0xad; 0x600, 0x605; 0x61c, 0x61c; 0x6dd, 0x6dd; 0x70f, 0x70f; 17 + 0x890, 0x891; 0x8e2, 0x8e2; 0x180e, 0x180e; 0x200b, 0x200f; 0x202a, 0x202e; 18 + 0x2060, 0x2064; 0x2066, 0x206f; 0xfeff, 0xfeff; 0xfff9, 0xfffb; 0x110bd, 0x110bd; 19 + 0x110cd, 0x110cd; 0x13430, 0x1343f; 0x1bca0, 0x1bca3; 0x1d173, 0x1d17a; 0xe0001, 0xe0001; 20 + 0xe0020, 0xe007f] 21 + 22 + let cn = Sedlex_cset.of_list 23 + [0x378, 0x379; 0x380, 0x383; 0x38b, 0x38b; 0x38d, 0x38d; 0x3a2, 0x3a2; 24 + 0x530, 0x530; 0x557, 0x558; 0x58b, 0x58c; 0x590, 0x590; 0x5c8, 0x5cf; 25 + 0x5eb, 0x5ee; 0x5f5, 0x5ff; 0x70e, 0x70e; 0x74b, 0x74c; 0x7b2, 0x7bf; 26 + 0x7fb, 0x7fc; 0x82e, 0x82f; 0x83f, 0x83f; 0x85c, 0x85d; 0x85f, 0x85f; 27 + 0x86b, 0x86f; 0x892, 0x896; 0x984, 0x984; 0x98d, 0x98e; 0x991, 0x992; 28 + 0x9a9, 0x9a9; 0x9b1, 0x9b1; 0x9b3, 0x9b5; 0x9ba, 0x9bb; 0x9c5, 0x9c6; 29 + 0x9c9, 0x9ca; 0x9cf, 0x9d6; 0x9d8, 0x9db; 0x9de, 0x9de; 0x9e4, 0x9e5; 30 + 0x9ff, 0xa00; 0xa04, 0xa04; 0xa0b, 0xa0e; 0xa11, 0xa12; 0xa29, 0xa29; 31 + 0xa31, 0xa31; 0xa34, 0xa34; 0xa37, 0xa37; 0xa3a, 0xa3b; 0xa3d, 0xa3d; 32 + 0xa43, 0xa46; 0xa49, 0xa4a; 0xa4e, 0xa50; 0xa52, 0xa58; 0xa5d, 0xa5d; 33 + 0xa5f, 0xa65; 0xa77, 0xa80; 0xa84, 0xa84; 0xa8e, 0xa8e; 0xa92, 0xa92; 34 + 0xaa9, 0xaa9; 0xab1, 0xab1; 0xab4, 0xab4; 0xaba, 0xabb; 0xac6, 0xac6; 35 + 0xaca, 0xaca; 0xace, 0xacf; 0xad1, 0xadf; 0xae4, 0xae5; 0xaf2, 0xaf8; 36 + 0xb00, 0xb00; 0xb04, 0xb04; 0xb0d, 0xb0e; 0xb11, 0xb12; 0xb29, 0xb29; 37 + 0xb31, 0xb31; 0xb34, 0xb34; 0xb3a, 0xb3b; 0xb45, 0xb46; 0xb49, 0xb4a; 38 + 0xb4e, 0xb54; 0xb58, 0xb5b; 0xb5e, 0xb5e; 0xb64, 0xb65; 0xb78, 0xb81; 39 + 0xb84, 0xb84; 0xb8b, 0xb8d; 0xb91, 0xb91; 0xb96, 0xb98; 0xb9b, 0xb9b; 40 + 0xb9d, 0xb9d; 0xba0, 0xba2; 0xba5, 0xba7; 0xbab, 0xbad; 0xbba, 0xbbd; 41 + 0xbc3, 0xbc5; 0xbc9, 0xbc9; 0xbce, 0xbcf; 0xbd1, 0xbd6; 0xbd8, 0xbe5; 42 + 0xbfb, 0xbff; 0xc0d, 0xc0d; 0xc11, 0xc11; 0xc29, 0xc29; 0xc3a, 0xc3b; 43 + 0xc45, 0xc45; 0xc49, 0xc49; 0xc4e, 0xc54; 0xc57, 0xc57; 0xc5b, 0xc5b; 44 + 0xc5e, 0xc5f; 0xc64, 0xc65; 0xc70, 0xc76; 0xc8d, 0xc8d; 0xc91, 0xc91; 45 + 0xca9, 0xca9; 0xcb4, 0xcb4; 0xcba, 0xcbb; 0xcc5, 0xcc5; 0xcc9, 0xcc9; 46 + 0xcce, 0xcd4; 0xcd7, 0xcdb; 0xcdf, 0xcdf; 0xce4, 0xce5; 0xcf0, 0xcf0; 47 + 0xcf4, 0xcff; 0xd0d, 0xd0d; 0xd11, 0xd11; 0xd45, 0xd45; 0xd49, 0xd49; 48 + 0xd50, 0xd53; 0xd64, 0xd65; 0xd80, 0xd80; 0xd84, 0xd84; 0xd97, 0xd99; 49 + 0xdb2, 0xdb2; 0xdbc, 0xdbc; 0xdbe, 0xdbf; 0xdc7, 0xdc9; 0xdcb, 0xdce; 50 + 0xdd5, 0xdd5; 0xdd7, 0xdd7; 0xde0, 0xde5; 0xdf0, 0xdf1; 0xdf5, 0xe00; 51 + 0xe3b, 0xe3e; 0xe5c, 0xe80; 0xe83, 0xe83; 0xe85, 0xe85; 0xe8b, 0xe8b; 52 + 0xea4, 0xea4; 0xea6, 0xea6; 0xebe, 0xebf; 0xec5, 0xec5; 0xec7, 0xec7; 53 + 0xecf, 0xecf; 0xeda, 0xedb; 0xee0, 0xeff; 0xf48, 0xf48; 0xf6d, 0xf70; 54 + 0xf98, 0xf98; 0xfbd, 0xfbd; 0xfcd, 0xfcd; 0xfdb, 0xfff; 0x10c6, 0x10c6; 55 + 0x10c8, 0x10cc; 0x10ce, 0x10cf; 0x1249, 0x1249; 0x124e, 0x124f; 0x1257, 0x1257; 56 + 0x1259, 0x1259; 0x125e, 0x125f; 0x1289, 0x1289; 0x128e, 0x128f; 0x12b1, 0x12b1; 57 + 0x12b6, 0x12b7; 0x12bf, 0x12bf; 0x12c1, 0x12c1; 0x12c6, 0x12c7; 0x12d7, 0x12d7; 58 + 0x1311, 0x1311; 0x1316, 0x1317; 0x135b, 0x135c; 0x137d, 0x137f; 0x139a, 0x139f; 59 + 0x13f6, 0x13f7; 0x13fe, 0x13ff; 0x169d, 0x169f; 0x16f9, 0x16ff; 0x1716, 0x171e; 60 + 0x1737, 0x173f; 0x1754, 0x175f; 0x176d, 0x176d; 0x1771, 0x1771; 0x1774, 0x177f; 61 + 0x17de, 0x17df; 0x17ea, 0x17ef; 0x17fa, 0x17ff; 0x181a, 0x181f; 0x1879, 0x187f; 62 + 0x18ab, 0x18af; 0x18f6, 0x18ff; 0x191f, 0x191f; 0x192c, 0x192f; 0x193c, 0x193f; 63 + 0x1941, 0x1943; 0x196e, 0x196f; 0x1975, 0x197f; 0x19ac, 0x19af; 0x19ca, 0x19cf; 64 + 0x19db, 0x19dd; 0x1a1c, 0x1a1d; 0x1a5f, 0x1a5f; 0x1a7d, 0x1a7e; 0x1a8a, 0x1a8f; 65 + 0x1a9a, 0x1a9f; 0x1aae, 0x1aaf; 0x1ade, 0x1adf; 0x1aec, 0x1aff; 0x1b4d, 0x1b4d; 66 + 0x1bf4, 0x1bfb; 0x1c38, 0x1c3a; 0x1c4a, 0x1c4c; 0x1c8b, 0x1c8f; 0x1cbb, 0x1cbc; 67 + 0x1cc8, 0x1ccf; 0x1cfb, 0x1cff; 0x1f16, 0x1f17; 0x1f1e, 0x1f1f; 0x1f46, 0x1f47; 68 + 0x1f4e, 0x1f4f; 0x1f58, 0x1f58; 0x1f5a, 0x1f5a; 0x1f5c, 0x1f5c; 0x1f5e, 0x1f5e; 69 + 0x1f7e, 0x1f7f; 0x1fb5, 0x1fb5; 0x1fc5, 0x1fc5; 0x1fd4, 0x1fd5; 0x1fdc, 0x1fdc; 70 + 0x1ff0, 0x1ff1; 0x1ff5, 0x1ff5; 0x1fff, 0x1fff; 0x2065, 0x2065; 0x2072, 0x2073; 71 + 0x208f, 0x208f; 0x209d, 0x209f; 0x20c2, 0x20cf; 0x20f1, 0x20ff; 0x218c, 0x218f; 72 + 0x242a, 0x243f; 0x244b, 0x245f; 0x2b74, 0x2b75; 0x2cf4, 0x2cf8; 0x2d26, 0x2d26; 73 + 0x2d28, 0x2d2c; 0x2d2e, 0x2d2f; 0x2d68, 0x2d6e; 0x2d71, 0x2d7e; 0x2d97, 0x2d9f; 74 + 0x2da7, 0x2da7; 0x2daf, 0x2daf; 0x2db7, 0x2db7; 0x2dbf, 0x2dbf; 0x2dc7, 0x2dc7; 75 + 0x2dcf, 0x2dcf; 0x2dd7, 0x2dd7; 0x2ddf, 0x2ddf; 0x2e5e, 0x2e7f; 0x2e9a, 0x2e9a; 76 + 0x2ef4, 0x2eff; 0x2fd6, 0x2fef; 0x3040, 0x3040; 0x3097, 0x3098; 0x3100, 0x3104; 77 + 0x3130, 0x3130; 0x318f, 0x318f; 0x31e6, 0x31ee; 0x321f, 0x321f; 0xa48d, 0xa48f; 78 + 0xa4c7, 0xa4cf; 0xa62c, 0xa63f; 0xa6f8, 0xa6ff; 0xa7dd, 0xa7f0; 0xa82d, 0xa82f; 79 + 0xa83a, 0xa83f; 0xa878, 0xa87f; 0xa8c6, 0xa8cd; 0xa8da, 0xa8df; 0xa954, 0xa95e; 80 + 0xa97d, 0xa97f; 0xa9ce, 0xa9ce; 0xa9da, 0xa9dd; 0xa9ff, 0xa9ff; 0xaa37, 0xaa3f; 81 + 0xaa4e, 0xaa4f; 0xaa5a, 0xaa5b; 0xaac3, 0xaada; 0xaaf7, 0xab00; 0xab07, 0xab08; 82 + 0xab0f, 0xab10; 0xab17, 0xab1f; 0xab27, 0xab27; 0xab2f, 0xab2f; 0xab6c, 0xab6f; 83 + 0xabee, 0xabef; 0xabfa, 0xabff; 0xd7a4, 0xd7af; 0xd7c7, 0xd7ca; 0xd7fc, 0xd7ff; 84 + 0xfa6e, 0xfa6f; 0xfada, 0xfaff; 0xfb07, 0xfb12; 0xfb18, 0xfb1c; 0xfb37, 0xfb37; 85 + 0xfb3d, 0xfb3d; 0xfb3f, 0xfb3f; 0xfb42, 0xfb42; 0xfb45, 0xfb45; 0xfdd0, 0xfdef; 86 + 0xfe1a, 0xfe1f; 0xfe53, 0xfe53; 0xfe67, 0xfe67; 0xfe6c, 0xfe6f; 0xfe75, 0xfe75; 87 + 0xfefd, 0xfefe; 0xff00, 0xff00; 0xffbf, 0xffc1; 0xffc8, 0xffc9; 0xffd0, 0xffd1; 88 + 0xffd8, 0xffd9; 0xffdd, 0xffdf; 0xffe7, 0xffe7; 0xffef, 0xfff8; 0xfffe, 0xffff; 89 + 0x1000c, 0x1000c; 0x10027, 0x10027; 0x1003b, 0x1003b; 0x1003e, 0x1003e; 0x1004e, 0x1004f; 90 + 0x1005e, 0x1007f; 0x100fb, 0x100ff; 0x10103, 0x10106; 0x10134, 0x10136; 0x1018f, 0x1018f; 91 + 0x1019d, 0x1019f; 0x101a1, 0x101cf; 0x101fe, 0x1027f; 0x1029d, 0x1029f; 0x102d1, 0x102df; 92 + 0x102fc, 0x102ff; 0x10324, 0x1032c; 0x1034b, 0x1034f; 0x1037b, 0x1037f; 0x1039e, 0x1039e; 93 + 0x103c4, 0x103c7; 0x103d6, 0x103ff; 0x1049e, 0x1049f; 0x104aa, 0x104af; 0x104d4, 0x104d7; 94 + 0x104fc, 0x104ff; 0x10528, 0x1052f; 0x10564, 0x1056e; 0x1057b, 0x1057b; 0x1058b, 0x1058b; 95 + 0x10593, 0x10593; 0x10596, 0x10596; 0x105a2, 0x105a2; 0x105b2, 0x105b2; 0x105ba, 0x105ba; 96 + 0x105bd, 0x105bf; 0x105f4, 0x105ff; 0x10737, 0x1073f; 0x10756, 0x1075f; 0x10768, 0x1077f; 97 + 0x10786, 0x10786; 0x107b1, 0x107b1; 0x107bb, 0x107ff; 0x10806, 0x10807; 0x10809, 0x10809; 98 + 0x10836, 0x10836; 0x10839, 0x1083b; 0x1083d, 0x1083e; 0x10856, 0x10856; 0x1089f, 0x108a6; 99 + 0x108b0, 0x108df; 0x108f3, 0x108f3; 0x108f6, 0x108fa; 0x1091c, 0x1091e; 0x1093a, 0x1093e; 100 + 0x1095a, 0x1097f; 0x109b8, 0x109bb; 0x109d0, 0x109d1; 0x10a04, 0x10a04; 0x10a07, 0x10a0b; 101 + 0x10a14, 0x10a14; 0x10a18, 0x10a18; 0x10a36, 0x10a37; 0x10a3b, 0x10a3e; 0x10a49, 0x10a4f; 102 + 0x10a59, 0x10a5f; 0x10aa0, 0x10abf; 0x10ae7, 0x10aea; 0x10af7, 0x10aff; 0x10b36, 0x10b38; 103 + 0x10b56, 0x10b57; 0x10b73, 0x10b77; 0x10b92, 0x10b98; 0x10b9d, 0x10ba8; 0x10bb0, 0x10bff; 104 + 0x10c49, 0x10c7f; 0x10cb3, 0x10cbf; 0x10cf3, 0x10cf9; 0x10d28, 0x10d2f; 0x10d3a, 0x10d3f; 105 + 0x10d66, 0x10d68; 0x10d86, 0x10d8d; 0x10d90, 0x10e5f; 0x10e7f, 0x10e7f; 0x10eaa, 0x10eaa; 106 + 0x10eae, 0x10eaf; 0x10eb2, 0x10ec1; 0x10ec8, 0x10ecf; 0x10ed9, 0x10ef9; 0x10f28, 0x10f2f; 107 + 0x10f5a, 0x10f6f; 0x10f8a, 0x10faf; 0x10fcc, 0x10fdf; 0x10ff7, 0x10fff; 0x1104e, 0x11051; 108 + 0x11076, 0x1107e; 0x110c3, 0x110cc; 0x110ce, 0x110cf; 0x110e9, 0x110ef; 0x110fa, 0x110ff; 109 + 0x11135, 0x11135; 0x11148, 0x1114f; 0x11177, 0x1117f; 0x111e0, 0x111e0; 0x111f5, 0x111ff; 110 + 0x11212, 0x11212; 0x11242, 0x1127f; 0x11287, 0x11287; 0x11289, 0x11289; 0x1128e, 0x1128e; 111 + 0x1129e, 0x1129e; 0x112aa, 0x112af; 0x112eb, 0x112ef; 0x112fa, 0x112ff; 0x11304, 0x11304; 112 + 0x1130d, 0x1130e; 0x11311, 0x11312; 0x11329, 0x11329; 0x11331, 0x11331; 0x11334, 0x11334; 113 + 0x1133a, 0x1133a; 0x11345, 0x11346; 0x11349, 0x1134a; 0x1134e, 0x1134f; 0x11351, 0x11356; 114 + 0x11358, 0x1135c; 0x11364, 0x11365; 0x1136d, 0x1136f; 0x11375, 0x1137f; 0x1138a, 0x1138a; 115 + 0x1138c, 0x1138d; 0x1138f, 0x1138f; 0x113b6, 0x113b6; 0x113c1, 0x113c1; 0x113c3, 0x113c4; 116 + 0x113c6, 0x113c6; 0x113cb, 0x113cb; 0x113d6, 0x113d6; 0x113d9, 0x113e0; 0x113e3, 0x113ff; 117 + 0x1145c, 0x1145c; 0x11462, 0x1147f; 0x114c8, 0x114cf; 0x114da, 0x1157f; 0x115b6, 0x115b7; 118 + 0x115de, 0x115ff; 0x11645, 0x1164f; 0x1165a, 0x1165f; 0x1166d, 0x1167f; 0x116ba, 0x116bf; 119 + 0x116ca, 0x116cf; 0x116e4, 0x116ff; 0x1171b, 0x1171c; 0x1172c, 0x1172f; 0x11747, 0x117ff; 120 + 0x1183c, 0x1189f; 0x118f3, 0x118fe; 0x11907, 0x11908; 0x1190a, 0x1190b; 0x11914, 0x11914; 121 + 0x11917, 0x11917; 0x11936, 0x11936; 0x11939, 0x1193a; 0x11947, 0x1194f; 0x1195a, 0x1199f; 122 + 0x119a8, 0x119a9; 0x119d8, 0x119d9; 0x119e5, 0x119ff; 0x11a48, 0x11a4f; 0x11aa3, 0x11aaf; 123 + 0x11af9, 0x11aff; 0x11b0a, 0x11b5f; 0x11b68, 0x11bbf; 0x11be2, 0x11bef; 0x11bfa, 0x11bff; 124 + 0x11c09, 0x11c09; 0x11c37, 0x11c37; 0x11c46, 0x11c4f; 0x11c6d, 0x11c6f; 0x11c90, 0x11c91; 125 + 0x11ca8, 0x11ca8; 0x11cb7, 0x11cff; 0x11d07, 0x11d07; 0x11d0a, 0x11d0a; 0x11d37, 0x11d39; 126 + 0x11d3b, 0x11d3b; 0x11d3e, 0x11d3e; 0x11d48, 0x11d4f; 0x11d5a, 0x11d5f; 0x11d66, 0x11d66; 127 + 0x11d69, 0x11d69; 0x11d8f, 0x11d8f; 0x11d92, 0x11d92; 0x11d99, 0x11d9f; 0x11daa, 0x11daf; 128 + 0x11ddc, 0x11ddf; 0x11dea, 0x11edf; 0x11ef9, 0x11eff; 0x11f11, 0x11f11; 0x11f3b, 0x11f3d; 129 + 0x11f5b, 0x11faf; 0x11fb1, 0x11fbf; 0x11ff2, 0x11ffe; 0x1239a, 0x123ff; 0x1246f, 0x1246f; 130 + 0x12475, 0x1247f; 0x12544, 0x12f8f; 0x12ff3, 0x12fff; 0x13456, 0x1345f; 0x143fb, 0x143ff; 131 + 0x14647, 0x160ff; 0x1613a, 0x167ff; 0x16a39, 0x16a3f; 0x16a5f, 0x16a5f; 0x16a6a, 0x16a6d; 132 + 0x16abf, 0x16abf; 0x16aca, 0x16acf; 0x16aee, 0x16aef; 0x16af6, 0x16aff; 0x16b46, 0x16b4f; 133 + 0x16b5a, 0x16b5a; 0x16b62, 0x16b62; 0x16b78, 0x16b7c; 0x16b90, 0x16d3f; 0x16d7a, 0x16e3f; 134 + 0x16e9b, 0x16e9f; 0x16eb9, 0x16eba; 0x16ed4, 0x16eff; 0x16f4b, 0x16f4e; 0x16f88, 0x16f8e; 135 + 0x16fa0, 0x16fdf; 0x16fe5, 0x16fef; 0x16ff7, 0x16fff; 0x18cd6, 0x18cfe; 0x18d1f, 0x18d7f; 136 + 0x18df3, 0x1afef; 0x1aff4, 0x1aff4; 0x1affc, 0x1affc; 0x1afff, 0x1afff; 0x1b123, 0x1b131; 137 + 0x1b133, 0x1b14f; 0x1b153, 0x1b154; 0x1b156, 0x1b163; 0x1b168, 0x1b16f; 0x1b2fc, 0x1bbff; 138 + 0x1bc6b, 0x1bc6f; 0x1bc7d, 0x1bc7f; 0x1bc89, 0x1bc8f; 0x1bc9a, 0x1bc9b; 0x1bca4, 0x1cbff; 139 + 0x1ccfd, 0x1ccff; 0x1ceb4, 0x1ceb9; 0x1ced1, 0x1cedf; 0x1cef1, 0x1ceff; 0x1cf2e, 0x1cf2f; 140 + 0x1cf47, 0x1cf4f; 0x1cfc4, 0x1cfff; 0x1d0f6, 0x1d0ff; 0x1d127, 0x1d128; 0x1d1eb, 0x1d1ff; 141 + 0x1d246, 0x1d2bf; 0x1d2d4, 0x1d2df; 0x1d2f4, 0x1d2ff; 0x1d357, 0x1d35f; 0x1d379, 0x1d3ff; 142 + 0x1d455, 0x1d455; 0x1d49d, 0x1d49d; 0x1d4a0, 0x1d4a1; 0x1d4a3, 0x1d4a4; 0x1d4a7, 0x1d4a8; 143 + 0x1d4ad, 0x1d4ad; 0x1d4ba, 0x1d4ba; 0x1d4bc, 0x1d4bc; 0x1d4c4, 0x1d4c4; 0x1d506, 0x1d506; 144 + 0x1d50b, 0x1d50c; 0x1d515, 0x1d515; 0x1d51d, 0x1d51d; 0x1d53a, 0x1d53a; 0x1d53f, 0x1d53f; 145 + 0x1d545, 0x1d545; 0x1d547, 0x1d549; 0x1d551, 0x1d551; 0x1d6a6, 0x1d6a7; 0x1d7cc, 0x1d7cd; 146 + 0x1da8c, 0x1da9a; 0x1daa0, 0x1daa0; 0x1dab0, 0x1deff; 0x1df1f, 0x1df24; 0x1df2b, 0x1dfff; 147 + 0x1e007, 0x1e007; 0x1e019, 0x1e01a; 0x1e022, 0x1e022; 0x1e025, 0x1e025; 0x1e02b, 0x1e02f; 148 + 0x1e06e, 0x1e08e; 0x1e090, 0x1e0ff; 0x1e12d, 0x1e12f; 0x1e13e, 0x1e13f; 0x1e14a, 0x1e14d; 149 + 0x1e150, 0x1e28f; 0x1e2af, 0x1e2bf; 0x1e2fa, 0x1e2fe; 0x1e300, 0x1e4cf; 0x1e4fa, 0x1e5cf; 150 + 0x1e5fb, 0x1e5fe; 0x1e600, 0x1e6bf; 0x1e6df, 0x1e6df; 0x1e6f6, 0x1e6fd; 0x1e700, 0x1e7df; 151 + 0x1e7e7, 0x1e7e7; 0x1e7ec, 0x1e7ec; 0x1e7ef, 0x1e7ef; 0x1e7ff, 0x1e7ff; 0x1e8c5, 0x1e8c6; 152 + 0x1e8d7, 0x1e8ff; 0x1e94c, 0x1e94f; 0x1e95a, 0x1e95d; 0x1e960, 0x1ec70; 0x1ecb5, 0x1ed00; 153 + 0x1ed3e, 0x1edff; 0x1ee04, 0x1ee04; 0x1ee20, 0x1ee20; 0x1ee23, 0x1ee23; 0x1ee25, 0x1ee26; 154 + 0x1ee28, 0x1ee28; 0x1ee33, 0x1ee33; 0x1ee38, 0x1ee38; 0x1ee3a, 0x1ee3a; 0x1ee3c, 0x1ee41; 155 + 0x1ee43, 0x1ee46; 0x1ee48, 0x1ee48; 0x1ee4a, 0x1ee4a; 0x1ee4c, 0x1ee4c; 0x1ee50, 0x1ee50; 156 + 0x1ee53, 0x1ee53; 0x1ee55, 0x1ee56; 0x1ee58, 0x1ee58; 0x1ee5a, 0x1ee5a; 0x1ee5c, 0x1ee5c; 157 + 0x1ee5e, 0x1ee5e; 0x1ee60, 0x1ee60; 0x1ee63, 0x1ee63; 0x1ee65, 0x1ee66; 0x1ee6b, 0x1ee6b; 158 + 0x1ee73, 0x1ee73; 0x1ee78, 0x1ee78; 0x1ee7d, 0x1ee7d; 0x1ee7f, 0x1ee7f; 0x1ee8a, 0x1ee8a; 159 + 0x1ee9c, 0x1eea0; 0x1eea4, 0x1eea4; 0x1eeaa, 0x1eeaa; 0x1eebc, 0x1eeef; 0x1eef2, 0x1efff; 160 + 0x1f02c, 0x1f02f; 0x1f094, 0x1f09f; 0x1f0af, 0x1f0b0; 0x1f0c0, 0x1f0c0; 0x1f0d0, 0x1f0d0; 161 + 0x1f0f6, 0x1f0ff; 0x1f1ae, 0x1f1e5; 0x1f203, 0x1f20f; 0x1f23c, 0x1f23f; 0x1f249, 0x1f24f; 162 + 0x1f252, 0x1f25f; 0x1f266, 0x1f2ff; 0x1f6d9, 0x1f6db; 0x1f6ed, 0x1f6ef; 0x1f6fd, 0x1f6ff; 163 + 0x1f7da, 0x1f7df; 0x1f7ec, 0x1f7ef; 0x1f7f1, 0x1f7ff; 0x1f80c, 0x1f80f; 0x1f848, 0x1f84f; 164 + 0x1f85a, 0x1f85f; 0x1f888, 0x1f88f; 0x1f8ae, 0x1f8af; 0x1f8bc, 0x1f8bf; 0x1f8c2, 0x1f8cf; 165 + 0x1f8d9, 0x1f8ff; 0x1fa58, 0x1fa5f; 0x1fa6e, 0x1fa6f; 0x1fa7d, 0x1fa7f; 0x1fa8b, 0x1fa8d; 166 + 0x1fac7, 0x1fac7; 0x1fac9, 0x1facc; 0x1fadd, 0x1fade; 0x1faeb, 0x1faee; 0x1faf9, 0x1faff; 167 + 0x1fb93, 0x1fb93; 0x1fbfb, 0x1ffff; 0x2a6e0, 0x2a6ff; 0x2b81e, 0x2b81f; 0x2ceae, 0x2ceaf; 168 + 0x2ebe1, 0x2ebef; 0x2ee5e, 0x2f7ff; 0x2fa1e, 0x2ffff; 0x3134b, 0x3134f; 0x3347a, 0xe0000; 169 + 0xe0002, 0xe001f; 0xe0080, 0xe00ff; 0xe01f0, 0xeffff; 0xffffe, 0xfffff; 0x10fffe, 0x10ffff] 170 + 171 + let co = Sedlex_cset.of_list 172 + [0xe000, 0xf8ff; 0xf0000, 0xffffd; 0x100000, 0x10fffd] 173 + 174 + let cs = Sedlex_cset.of_list 175 + [0xd800, 0xdfff] 176 + 177 + let ll = Sedlex_cset.of_list 178 + [0x61, 0x7a; 0xb5, 0xb5; 0xdf, 0xf6; 0xf8, 0xff; 0x101, 0x101; 179 + 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 0x109, 0x109; 0x10b, 0x10b; 180 + 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 0x113, 0x113; 0x115, 0x115; 181 + 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 0x11d, 0x11d; 0x11f, 0x11f; 182 + 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 0x127, 0x127; 0x129, 0x129; 183 + 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 0x131, 0x131; 0x133, 0x133; 184 + 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 0x13c, 0x13c; 0x13e, 0x13e; 185 + 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 0x146, 0x146; 0x148, 0x149; 186 + 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 0x151, 0x151; 0x153, 0x153; 187 + 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 0x15b, 0x15b; 0x15d, 0x15d; 188 + 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 0x165, 0x165; 0x167, 0x167; 189 + 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 0x16f, 0x16f; 0x171, 0x171; 190 + 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 0x17a, 0x17a; 0x17c, 0x17c; 191 + 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 0x188, 0x188; 0x18c, 0x18d; 192 + 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 0x19e, 0x19e; 0x1a1, 0x1a1; 193 + 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 0x1aa, 0x1ab; 0x1ad, 0x1ad; 194 + 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 0x1b9, 0x1ba; 0x1bd, 0x1bf; 195 + 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 0x1ce, 0x1ce; 0x1d0, 0x1d0; 196 + 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 0x1d8, 0x1d8; 0x1da, 0x1da; 197 + 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 0x1e3, 0x1e3; 0x1e5, 0x1e5; 198 + 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 0x1ed, 0x1ed; 0x1ef, 0x1f0; 199 + 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 0x1fb, 0x1fb; 0x1fd, 0x1fd; 200 + 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 0x205, 0x205; 0x207, 0x207; 201 + 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 0x20f, 0x20f; 0x211, 0x211; 202 + 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 0x219, 0x219; 0x21b, 0x21b; 203 + 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 0x223, 0x223; 0x225, 0x225; 204 + 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 0x22d, 0x22d; 0x22f, 0x22f; 205 + 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 0x23f, 0x240; 0x242, 0x242; 206 + 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 0x24d, 0x24d; 0x24f, 0x293; 207 + 0x296, 0x2af; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37b, 0x37d; 208 + 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 209 + 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 210 + 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 211 + 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 212 + 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 213 + 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 214 + 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 215 + 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 216 + 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 217 + 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 218 + 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 219 + 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 220 + 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 221 + 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 222 + 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 223 + 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 224 + 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 225 + 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 226 + 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 227 + 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 228 + 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 229 + 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 230 + 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 231 + 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 232 + 0x10d0, 0x10fa; 0x10fd, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1c8a, 0x1c8a; 233 + 0x1d00, 0x1d2b; 0x1d6b, 0x1d77; 0x1d79, 0x1d9a; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 234 + 0x1e05, 0x1e05; 0x1e07, 0x1e07; 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 235 + 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 236 + 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 237 + 0x1e23, 0x1e23; 0x1e25, 0x1e25; 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 238 + 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 239 + 0x1e37, 0x1e37; 0x1e39, 0x1e39; 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 240 + 0x1e41, 0x1e41; 0x1e43, 0x1e43; 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 241 + 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 242 + 0x1e55, 0x1e55; 0x1e57, 0x1e57; 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 243 + 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 244 + 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 245 + 0x1e73, 0x1e73; 0x1e75, 0x1e75; 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 246 + 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 247 + 0x1e87, 0x1e87; 0x1e89, 0x1e89; 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 248 + 0x1e91, 0x1e91; 0x1e93, 0x1e93; 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 249 + 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 250 + 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 251 + 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 252 + 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 253 + 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 254 + 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 255 + 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 256 + 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 257 + 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 258 + 0x1efd, 0x1efd; 0x1eff, 0x1f07; 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 259 + 0x1f40, 0x1f45; 0x1f50, 0x1f57; 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 260 + 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 261 + 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 262 + 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 0x210a, 0x210a; 0x210e, 0x210f; 0x2113, 0x2113; 263 + 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 0x2146, 0x2149; 264 + 0x214e, 0x214e; 0x2184, 0x2184; 0x2c30, 0x2c5f; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 265 + 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 266 + 0x2c76, 0x2c7b; 0x2c81, 0x2c81; 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 267 + 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 268 + 0x2c93, 0x2c93; 0x2c95, 0x2c95; 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 269 + 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 270 + 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 271 + 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 272 + 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 273 + 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 274 + 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 275 + 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 276 + 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 277 + 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 278 + 0xa647, 0xa647; 0xa649, 0xa649; 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 279 + 0xa651, 0xa651; 0xa653, 0xa653; 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 280 + 0xa65b, 0xa65b; 0xa65d, 0xa65d; 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 281 + 0xa665, 0xa665; 0xa667, 0xa667; 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 282 + 0xa681, 0xa681; 0xa683, 0xa683; 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 283 + 0xa68b, 0xa68b; 0xa68d, 0xa68d; 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 284 + 0xa695, 0xa695; 0xa697, 0xa697; 0xa699, 0xa699; 0xa69b, 0xa69b; 0xa723, 0xa723; 285 + 0xa725, 0xa725; 0xa727, 0xa727; 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 286 + 0xa72f, 0xa731; 0xa733, 0xa733; 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 287 + 0xa73b, 0xa73b; 0xa73d, 0xa73d; 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 288 + 0xa745, 0xa745; 0xa747, 0xa747; 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 289 + 0xa74f, 0xa74f; 0xa751, 0xa751; 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 290 + 0xa759, 0xa759; 0xa75b, 0xa75b; 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 291 + 0xa763, 0xa763; 0xa765, 0xa765; 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 292 + 0xa76d, 0xa76d; 0xa76f, 0xa76f; 0xa771, 0xa778; 0xa77a, 0xa77a; 0xa77c, 0xa77c; 293 + 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 0xa785, 0xa785; 0xa787, 0xa787; 294 + 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 0xa793, 0xa795; 0xa797, 0xa797; 295 + 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 296 + 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 297 + 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 298 + 0xa7bf, 0xa7bf; 0xa7c1, 0xa7c1; 0xa7c3, 0xa7c3; 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 299 + 0xa7cd, 0xa7cd; 0xa7cf, 0xa7cf; 0xa7d1, 0xa7d1; 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d5; 300 + 0xa7d7, 0xa7d7; 0xa7d9, 0xa7d9; 0xa7db, 0xa7db; 0xa7f6, 0xa7f6; 0xa7fa, 0xa7fa; 301 + 0xab30, 0xab5a; 0xab60, 0xab68; 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 302 + 0xff41, 0xff5a; 0x10428, 0x1044f; 0x104d8, 0x104fb; 0x10597, 0x105a1; 0x105a3, 0x105b1; 303 + 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x10cc0, 0x10cf2; 0x10d70, 0x10d85; 0x118c0, 0x118df; 304 + 0x16e60, 0x16e7f; 0x16ebb, 0x16ed3; 0x1d41a, 0x1d433; 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 305 + 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 306 + 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 307 + 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 308 + 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 309 + 0x1d770, 0x1d788; 0x1d78a, 0x1d78f; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7c9; 0x1d7cb, 0x1d7cb; 310 + 0x1df00, 0x1df09; 0x1df0b, 0x1df1e; 0x1df25, 0x1df2a; 0x1e922, 0x1e943] 311 + 312 + let lm = Sedlex_cset.of_list 313 + [0x2b0, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 314 + 0x374, 0x374; 0x37a, 0x37a; 0x559, 0x559; 0x640, 0x640; 0x6e5, 0x6e6; 315 + 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x81a, 0x81a; 0x824, 0x824; 0x828, 0x828; 316 + 0x8c9, 0x8c9; 0x971, 0x971; 0xe46, 0xe46; 0xec6, 0xec6; 0x10fc, 0x10fc; 317 + 0x17d7, 0x17d7; 0x1843, 0x1843; 0x1aa7, 0x1aa7; 0x1c78, 0x1c7d; 0x1d2c, 0x1d6a; 318 + 0x1d78, 0x1d78; 0x1d9b, 0x1dbf; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 319 + 0x2c7c, 0x2c7d; 0x2d6f, 0x2d6f; 0x2e2f, 0x2e2f; 0x3005, 0x3005; 0x3031, 0x3035; 320 + 0x303b, 0x303b; 0x309d, 0x309e; 0x30fc, 0x30fe; 0xa015, 0xa015; 0xa4f8, 0xa4fd; 321 + 0xa60c, 0xa60c; 0xa67f, 0xa67f; 0xa69c, 0xa69d; 0xa717, 0xa71f; 0xa770, 0xa770; 322 + 0xa788, 0xa788; 0xa7f1, 0xa7f4; 0xa7f8, 0xa7f9; 0xa9cf, 0xa9cf; 0xa9e6, 0xa9e6; 323 + 0xaa70, 0xaa70; 0xaadd, 0xaadd; 0xaaf3, 0xaaf4; 0xab5c, 0xab5f; 0xab69, 0xab69; 324 + 0xff70, 0xff70; 0xff9e, 0xff9f; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 325 + 0x10d4e, 0x10d4e; 0x10d6f, 0x10d6f; 0x10ec5, 0x10ec5; 0x11dd9, 0x11dd9; 0x16b40, 0x16b43; 326 + 0x16d40, 0x16d42; 0x16d6b, 0x16d6c; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 327 + 0x16ff2, 0x16ff3; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1e030, 0x1e06d; 328 + 0x1e137, 0x1e13d; 0x1e4eb, 0x1e4eb; 0x1e6ff, 0x1e6ff; 0x1e94b, 0x1e94b] 329 + 330 + let lo = Sedlex_cset.of_list 331 + [0xaa, 0xaa; 0xba, 0xba; 0x1bb, 0x1bb; 0x1c0, 0x1c3; 0x294, 0x295; 332 + 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x63f; 0x641, 0x64a; 0x66e, 0x66f; 333 + 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 334 + 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 0x7ca, 0x7ea; 335 + 0x800, 0x815; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88f; 336 + 0x8a0, 0x8c8; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 0x958, 0x961; 337 + 0x972, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 0x9aa, 0x9b0; 338 + 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 0x9dc, 0x9dd; 339 + 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 0xa0f, 0xa10; 340 + 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 341 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 0xa8f, 0xa91; 342 + 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 0xabd, 0xabd; 343 + 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 0xb0f, 0xb10; 344 + 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb3d; 345 + 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 0xb85, 0xb8a; 346 + 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 347 + 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 0xc05, 0xc0c; 348 + 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 0xc58, 0xc5a; 349 + 0xc5c, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 0xc8e, 0xc90; 350 + 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 0xcdc, 0xcde; 351 + 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 0xd12, 0xd3a; 352 + 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 0xd7a, 0xd7f; 353 + 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 354 + 0xe01, 0xe30; 0xe32, 0xe33; 0xe40, 0xe45; 0xe81, 0xe82; 0xe84, 0xe84; 355 + 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 0xeb2, 0xeb3; 356 + 0xebd, 0xebd; 0xec0, 0xec4; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 357 + 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 0x103f, 0x103f; 0x1050, 0x1055; 358 + 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 0x106e, 0x1070; 0x1075, 0x1081; 359 + 0x108e, 0x108e; 0x1100, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 0x1258, 0x1258; 360 + 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 0x12b2, 0x12b5; 361 + 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 0x12d8, 0x1310; 362 + 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x1401, 0x166c; 0x166f, 0x167f; 363 + 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16f1, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 364 + 0x1740, 0x1751; 0x1760, 0x176c; 0x176e, 0x1770; 0x1780, 0x17b3; 0x17dc, 0x17dc; 365 + 0x1820, 0x1842; 0x1844, 0x1878; 0x1880, 0x1884; 0x1887, 0x18a8; 0x18aa, 0x18aa; 366 + 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 367 + 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 368 + 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 369 + 0x1c5a, 0x1c77; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 370 + 0x2135, 0x2138; 0x2d30, 0x2d67; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 371 + 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 372 + 0x2dd8, 0x2dde; 0x3006, 0x3006; 0x303c, 0x303c; 0x3041, 0x3096; 0x309f, 0x309f; 373 + 0x30a1, 0x30fa; 0x30ff, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 374 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa014; 0xa016, 0xa48c; 0xa4d0, 0xa4f7; 375 + 0xa500, 0xa60b; 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa66e, 0xa66e; 0xa6a0, 0xa6e5; 376 + 0xa78f, 0xa78f; 0xa7f7, 0xa7f7; 0xa7fb, 0xa801; 0xa803, 0xa805; 0xa807, 0xa80a; 377 + 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 378 + 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 0xa984, 0xa9b2; 379 + 0xa9e0, 0xa9e4; 0xa9e7, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa28; 0xaa40, 0xaa42; 380 + 0xaa44, 0xaa4b; 0xaa60, 0xaa6f; 0xaa71, 0xaa76; 0xaa7a, 0xaa7a; 0xaa7e, 0xaaaf; 381 + 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 382 + 0xaadb, 0xaadc; 0xaae0, 0xaaea; 0xaaf2, 0xaaf2; 0xab01, 0xab06; 0xab09, 0xab0e; 383 + 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xabc0, 0xabe2; 0xac00, 0xd7a3; 384 + 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb1d, 0xfb1d; 385 + 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 386 + 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 387 + 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff66, 0xff6f; 0xff71, 0xff9d; 388 + 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 389 + 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 390 + 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 391 + 0x1032d, 0x10340; 0x10342, 0x10349; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 392 + 0x103c8, 0x103cf; 0x10450, 0x1049d; 0x10500, 0x10527; 0x10530, 0x10563; 0x105c0, 0x105f3; 393 + 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10800, 0x10805; 0x10808, 0x10808; 394 + 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 395 + 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 396 + 0x10940, 0x10959; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 397 + 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 398 + 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 399 + 0x10c00, 0x10c48; 0x10d00, 0x10d23; 0x10d4a, 0x10d4d; 0x10d4f, 0x10d4f; 0x10e80, 0x10ea9; 400 + 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec4; 0x10ec6, 0x10ec7; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 401 + 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 402 + 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 403 + 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 404 + 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 405 + 0x1123f, 0x11240; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 406 + 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 407 + 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 408 + 0x1135d, 0x11361; 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 409 + 0x113b7, 0x113b7; 0x113d1, 0x113d1; 0x113d3, 0x113d3; 0x11400, 0x11434; 0x11447, 0x1144a; 410 + 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 411 + 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 412 + 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 0x118ff, 0x11906; 0x11909, 0x11909; 413 + 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 414 + 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 415 + 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 416 + 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 417 + 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 418 + 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11db0, 0x11dd8; 419 + 0x11dda, 0x11ddb; 0x11ee0, 0x11ef2; 0x11f02, 0x11f02; 0x11f04, 0x11f10; 0x11f12, 0x11f33; 420 + 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 421 + 0x13441, 0x13446; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x1611d; 0x16800, 0x16a38; 422 + 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b63, 0x16b77; 423 + 0x16b7d, 0x16b8f; 0x16d43, 0x16d6a; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x17000, 0x18cd5; 424 + 0x18cff, 0x18d1e; 0x18d80, 0x18df2; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 0x1b150, 0x1b152; 425 + 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 426 + 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1df0a, 0x1df0a; 0x1e100, 0x1e12c; 0x1e14e, 0x1e14e; 427 + 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4ea; 0x1e5d0, 0x1e5ed; 0x1e5f0, 0x1e5f0; 428 + 0x1e6c0, 0x1e6de; 0x1e6e0, 0x1e6e2; 0x1e6e4, 0x1e6e5; 0x1e6e7, 0x1e6ed; 0x1e6f0, 0x1e6f4; 429 + 0x1e6fe, 0x1e6fe; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 430 + 0x1e800, 0x1e8c4; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 431 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 432 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 433 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 434 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 435 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 436 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 437 + 0x2a700, 0x2b81d; 0x2b820, 0x2cead; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 438 + 0x30000, 0x3134a; 0x31350, 0x33479] 439 + 440 + let lt = Sedlex_cset.of_list 441 + [0x1c5, 0x1c5; 0x1c8, 0x1c8; 0x1cb, 0x1cb; 0x1f2, 0x1f2; 0x1f88, 0x1f8f; 442 + 0x1f98, 0x1f9f; 0x1fa8, 0x1faf; 0x1fbc, 0x1fbc; 0x1fcc, 0x1fcc; 0x1ffc, 0x1ffc] 443 + 444 + let lu = Sedlex_cset.of_list 445 + [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 446 + 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 447 + 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 448 + 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 449 + 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 450 + 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 451 + 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 452 + 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 453 + 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 454 + 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 455 + 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 456 + 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 457 + 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 458 + 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 459 + 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 460 + 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 461 + 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 462 + 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 463 + 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 464 + 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 465 + 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 466 + 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 467 + 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 468 + 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 469 + 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 470 + 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 471 + 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 472 + 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 473 + 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 474 + 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 475 + 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 476 + 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 477 + 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 478 + 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 479 + 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 480 + 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 481 + 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 482 + 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 483 + 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 484 + 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 485 + 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 486 + 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 487 + 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 488 + 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 489 + 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 490 + 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 491 + 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 492 + 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 493 + 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 494 + 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 495 + 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 496 + 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 497 + 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 498 + 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 499 + 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 500 + 0x13a0, 0x13f5; 0x1c89, 0x1c89; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 501 + 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 502 + 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 503 + 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 504 + 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 505 + 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 506 + 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 507 + 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 508 + 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 509 + 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 510 + 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 511 + 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 512 + 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 513 + 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 514 + 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 515 + 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 516 + 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 517 + 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 518 + 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 519 + 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 520 + 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 521 + 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 522 + 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 523 + 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 524 + 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 525 + 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 526 + 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 527 + 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 528 + 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 529 + 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 530 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 531 + 0x2145, 0x2145; 0x2183, 0x2183; 0x2c00, 0x2c2f; 0x2c60, 0x2c60; 0x2c62, 0x2c64; 532 + 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 533 + 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 0x2c84, 0x2c84; 0x2c86, 0x2c86; 534 + 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 535 + 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 536 + 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 537 + 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 0x2cac, 0x2cac; 0x2cae, 0x2cae; 538 + 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 539 + 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 540 + 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 541 + 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 542 + 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 543 + 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 0x2cf2, 0x2cf2; 0xa640, 0xa640; 544 + 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 0xa648, 0xa648; 0xa64a, 0xa64a; 545 + 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 0xa652, 0xa652; 0xa654, 0xa654; 546 + 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 0xa65c, 0xa65c; 0xa65e, 0xa65e; 547 + 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 0xa666, 0xa666; 0xa668, 0xa668; 548 + 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 0xa682, 0xa682; 0xa684, 0xa684; 549 + 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 0xa68c, 0xa68c; 0xa68e, 0xa68e; 550 + 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 0xa696, 0xa696; 0xa698, 0xa698; 551 + 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 0xa726, 0xa726; 0xa728, 0xa728; 552 + 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 0xa732, 0xa732; 0xa734, 0xa734; 553 + 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 0xa73c, 0xa73c; 0xa73e, 0xa73e; 554 + 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 0xa746, 0xa746; 0xa748, 0xa748; 555 + 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 0xa750, 0xa750; 0xa752, 0xa752; 556 + 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 0xa75a, 0xa75a; 0xa75c, 0xa75c; 557 + 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 0xa764, 0xa764; 0xa766, 0xa766; 558 + 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 0xa76e, 0xa76e; 0xa779, 0xa779; 559 + 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 0xa782, 0xa782; 0xa784, 0xa784; 560 + 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 0xa790, 0xa790; 0xa792, 0xa792; 561 + 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 0xa79c, 0xa79c; 0xa79e, 0xa79e; 562 + 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 563 + 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 564 + 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c0, 0xa7c0; 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 565 + 0xa7c9, 0xa7c9; 0xa7cb, 0xa7cc; 0xa7ce, 0xa7ce; 0xa7d0, 0xa7d0; 0xa7d2, 0xa7d2; 566 + 0xa7d4, 0xa7d4; 0xa7d6, 0xa7d6; 0xa7d8, 0xa7d8; 0xa7da, 0xa7da; 0xa7dc, 0xa7dc; 567 + 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 0x104b0, 0x104d3; 0x10570, 0x1057a; 568 + 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10c80, 0x10cb2; 0x10d50, 0x10d65; 569 + 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x16ea0, 0x16eb8; 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 570 + 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 571 + 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 572 + 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 573 + 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 574 + 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 575 + 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1d790, 0x1d7a8; 0x1d7ca, 0x1d7ca; 0x1e900, 0x1e921] 576 + 577 + let mc = Sedlex_cset.of_list 578 + [0x903, 0x903; 0x93b, 0x93b; 0x93e, 0x940; 0x949, 0x94c; 0x94e, 0x94f; 579 + 0x982, 0x983; 0x9be, 0x9c0; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9d7, 0x9d7; 580 + 0xa03, 0xa03; 0xa3e, 0xa40; 0xa83, 0xa83; 0xabe, 0xac0; 0xac9, 0xac9; 581 + 0xacb, 0xacc; 0xb02, 0xb03; 0xb3e, 0xb3e; 0xb40, 0xb40; 0xb47, 0xb48; 582 + 0xb4b, 0xb4c; 0xb57, 0xb57; 0xbbe, 0xbbf; 0xbc1, 0xbc2; 0xbc6, 0xbc8; 583 + 0xbca, 0xbcc; 0xbd7, 0xbd7; 0xc01, 0xc03; 0xc41, 0xc44; 0xc82, 0xc83; 584 + 0xcbe, 0xcbe; 0xcc0, 0xcc4; 0xcc7, 0xcc8; 0xcca, 0xccb; 0xcd5, 0xcd6; 585 + 0xcf3, 0xcf3; 0xd02, 0xd03; 0xd3e, 0xd40; 0xd46, 0xd48; 0xd4a, 0xd4c; 586 + 0xd57, 0xd57; 0xd82, 0xd83; 0xdcf, 0xdd1; 0xdd8, 0xddf; 0xdf2, 0xdf3; 587 + 0xf3e, 0xf3f; 0xf7f, 0xf7f; 0x102b, 0x102c; 0x1031, 0x1031; 0x1038, 0x1038; 588 + 0x103b, 0x103c; 0x1056, 0x1057; 0x1062, 0x1064; 0x1067, 0x106d; 0x1083, 0x1084; 589 + 0x1087, 0x108c; 0x108f, 0x108f; 0x109a, 0x109c; 0x1715, 0x1715; 0x1734, 0x1734; 590 + 0x17b6, 0x17b6; 0x17be, 0x17c5; 0x17c7, 0x17c8; 0x1923, 0x1926; 0x1929, 0x192b; 591 + 0x1930, 0x1931; 0x1933, 0x1938; 0x1a19, 0x1a1a; 0x1a55, 0x1a55; 0x1a57, 0x1a57; 592 + 0x1a61, 0x1a61; 0x1a63, 0x1a64; 0x1a6d, 0x1a72; 0x1b04, 0x1b04; 0x1b35, 0x1b35; 593 + 0x1b3b, 0x1b3b; 0x1b3d, 0x1b41; 0x1b43, 0x1b44; 0x1b82, 0x1b82; 0x1ba1, 0x1ba1; 594 + 0x1ba6, 0x1ba7; 0x1baa, 0x1baa; 0x1be7, 0x1be7; 0x1bea, 0x1bec; 0x1bee, 0x1bee; 595 + 0x1bf2, 0x1bf3; 0x1c24, 0x1c2b; 0x1c34, 0x1c35; 0x1ce1, 0x1ce1; 0x1cf7, 0x1cf7; 596 + 0x302e, 0x302f; 0xa823, 0xa824; 0xa827, 0xa827; 0xa880, 0xa881; 0xa8b4, 0xa8c3; 597 + 0xa952, 0xa953; 0xa983, 0xa983; 0xa9b4, 0xa9b5; 0xa9ba, 0xa9bb; 0xa9be, 0xa9c0; 598 + 0xaa2f, 0xaa30; 0xaa33, 0xaa34; 0xaa4d, 0xaa4d; 0xaa7b, 0xaa7b; 0xaa7d, 0xaa7d; 599 + 0xaaeb, 0xaaeb; 0xaaee, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabe4; 0xabe6, 0xabe7; 600 + 0xabe9, 0xabea; 0xabec, 0xabec; 0x11000, 0x11000; 0x11002, 0x11002; 0x11082, 0x11082; 601 + 0x110b0, 0x110b2; 0x110b7, 0x110b8; 0x1112c, 0x1112c; 0x11145, 0x11146; 0x11182, 0x11182; 602 + 0x111b3, 0x111b5; 0x111bf, 0x111c0; 0x111ce, 0x111ce; 0x1122c, 0x1122e; 0x11232, 0x11233; 603 + 0x11235, 0x11235; 0x112e0, 0x112e2; 0x11302, 0x11303; 0x1133e, 0x1133f; 0x11341, 0x11344; 604 + 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11357, 0x11357; 0x11362, 0x11363; 0x113b8, 0x113ba; 605 + 0x113c2, 0x113c2; 0x113c5, 0x113c5; 0x113c7, 0x113ca; 0x113cc, 0x113cd; 0x113cf, 0x113cf; 606 + 0x11435, 0x11437; 0x11440, 0x11441; 0x11445, 0x11445; 0x114b0, 0x114b2; 0x114b9, 0x114b9; 607 + 0x114bb, 0x114be; 0x114c1, 0x114c1; 0x115af, 0x115b1; 0x115b8, 0x115bb; 0x115be, 0x115be; 608 + 0x11630, 0x11632; 0x1163b, 0x1163c; 0x1163e, 0x1163e; 0x116ac, 0x116ac; 0x116ae, 0x116af; 609 + 0x116b6, 0x116b6; 0x1171e, 0x1171e; 0x11720, 0x11721; 0x11726, 0x11726; 0x1182c, 0x1182e; 610 + 0x11838, 0x11838; 0x11930, 0x11935; 0x11937, 0x11938; 0x1193d, 0x1193d; 0x11940, 0x11940; 611 + 0x11942, 0x11942; 0x119d1, 0x119d3; 0x119dc, 0x119df; 0x119e4, 0x119e4; 0x11a39, 0x11a39; 612 + 0x11a57, 0x11a58; 0x11a97, 0x11a97; 0x11b61, 0x11b61; 0x11b65, 0x11b65; 0x11b67, 0x11b67; 613 + 0x11c2f, 0x11c2f; 0x11c3e, 0x11c3e; 0x11ca9, 0x11ca9; 0x11cb1, 0x11cb1; 0x11cb4, 0x11cb4; 614 + 0x11d8a, 0x11d8e; 0x11d93, 0x11d94; 0x11d96, 0x11d96; 0x11ef5, 0x11ef6; 0x11f03, 0x11f03; 615 + 0x11f34, 0x11f35; 0x11f3e, 0x11f3f; 0x11f41, 0x11f41; 0x1612a, 0x1612c; 0x16f51, 0x16f87; 616 + 0x16ff0, 0x16ff1; 0x1d165, 0x1d166; 0x1d16d, 0x1d172] 617 + 618 + let me = Sedlex_cset.of_list 619 + [0x488, 0x489; 0x1abe, 0x1abe; 0x20dd, 0x20e0; 0x20e2, 0x20e4; 0xa670, 0xa672] 620 + 621 + let mn = Sedlex_cset.of_list 622 + [0x300, 0x36f; 0x483, 0x487; 0x591, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 623 + 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x65f; 0x670, 0x670; 624 + 0x6d6, 0x6dc; 0x6df, 0x6e4; 0x6e7, 0x6e8; 0x6ea, 0x6ed; 0x711, 0x711; 625 + 0x730, 0x74a; 0x7a6, 0x7b0; 0x7eb, 0x7f3; 0x7fd, 0x7fd; 0x816, 0x819; 626 + 0x81b, 0x823; 0x825, 0x827; 0x829, 0x82d; 0x859, 0x85b; 0x897, 0x89f; 627 + 0x8ca, 0x8e1; 0x8e3, 0x902; 0x93a, 0x93a; 0x93c, 0x93c; 0x941, 0x948; 628 + 0x94d, 0x94d; 0x951, 0x957; 0x962, 0x963; 0x981, 0x981; 0x9bc, 0x9bc; 629 + 0x9c1, 0x9c4; 0x9cd, 0x9cd; 0x9e2, 0x9e3; 0x9fe, 0x9fe; 0xa01, 0xa02; 630 + 0xa3c, 0xa3c; 0xa41, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 631 + 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa82; 0xabc, 0xabc; 0xac1, 0xac5; 632 + 0xac7, 0xac8; 0xacd, 0xacd; 0xae2, 0xae3; 0xafa, 0xaff; 0xb01, 0xb01; 633 + 0xb3c, 0xb3c; 0xb3f, 0xb3f; 0xb41, 0xb44; 0xb4d, 0xb4d; 0xb55, 0xb56; 634 + 0xb62, 0xb63; 0xb82, 0xb82; 0xbc0, 0xbc0; 0xbcd, 0xbcd; 0xc00, 0xc00; 635 + 0xc04, 0xc04; 0xc3c, 0xc3c; 0xc3e, 0xc40; 0xc46, 0xc48; 0xc4a, 0xc4d; 636 + 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc81; 0xcbc, 0xcbc; 0xcbf, 0xcbf; 637 + 0xcc6, 0xcc6; 0xccc, 0xccd; 0xce2, 0xce3; 0xd00, 0xd01; 0xd3b, 0xd3c; 638 + 0xd41, 0xd44; 0xd4d, 0xd4d; 0xd62, 0xd63; 0xd81, 0xd81; 0xdca, 0xdca; 639 + 0xdd2, 0xdd4; 0xdd6, 0xdd6; 0xe31, 0xe31; 0xe34, 0xe3a; 0xe47, 0xe4e; 640 + 0xeb1, 0xeb1; 0xeb4, 0xebc; 0xec8, 0xece; 0xf18, 0xf19; 0xf35, 0xf35; 641 + 0xf37, 0xf37; 0xf39, 0xf39; 0xf71, 0xf7e; 0xf80, 0xf84; 0xf86, 0xf87; 642 + 0xf8d, 0xf97; 0xf99, 0xfbc; 0xfc6, 0xfc6; 0x102d, 0x1030; 0x1032, 0x1037; 643 + 0x1039, 0x103a; 0x103d, 0x103e; 0x1058, 0x1059; 0x105e, 0x1060; 0x1071, 0x1074; 644 + 0x1082, 0x1082; 0x1085, 0x1086; 0x108d, 0x108d; 0x109d, 0x109d; 0x135d, 0x135f; 645 + 0x1712, 0x1714; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 0x17b4, 0x17b5; 646 + 0x17b7, 0x17bd; 0x17c6, 0x17c6; 0x17c9, 0x17d3; 0x17dd, 0x17dd; 0x180b, 0x180d; 647 + 0x180f, 0x180f; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x1922; 0x1927, 0x1928; 648 + 0x1932, 0x1932; 0x1939, 0x193b; 0x1a17, 0x1a18; 0x1a1b, 0x1a1b; 0x1a56, 0x1a56; 649 + 0x1a58, 0x1a5e; 0x1a60, 0x1a60; 0x1a62, 0x1a62; 0x1a65, 0x1a6c; 0x1a73, 0x1a7c; 650 + 0x1a7f, 0x1a7f; 0x1ab0, 0x1abd; 0x1abf, 0x1add; 0x1ae0, 0x1aeb; 0x1b00, 0x1b03; 651 + 0x1b34, 0x1b34; 0x1b36, 0x1b3a; 0x1b3c, 0x1b3c; 0x1b42, 0x1b42; 0x1b6b, 0x1b73; 652 + 0x1b80, 0x1b81; 0x1ba2, 0x1ba5; 0x1ba8, 0x1ba9; 0x1bab, 0x1bad; 0x1be6, 0x1be6; 653 + 0x1be8, 0x1be9; 0x1bed, 0x1bed; 0x1bef, 0x1bf1; 0x1c2c, 0x1c33; 0x1c36, 0x1c37; 654 + 0x1cd0, 0x1cd2; 0x1cd4, 0x1ce0; 0x1ce2, 0x1ce8; 0x1ced, 0x1ced; 0x1cf4, 0x1cf4; 655 + 0x1cf8, 0x1cf9; 0x1dc0, 0x1dff; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 656 + 0x2cef, 0x2cf1; 0x2d7f, 0x2d7f; 0x2de0, 0x2dff; 0x302a, 0x302d; 0x3099, 0x309a; 657 + 0xa66f, 0xa66f; 0xa674, 0xa67d; 0xa69e, 0xa69f; 0xa6f0, 0xa6f1; 0xa802, 0xa802; 658 + 0xa806, 0xa806; 0xa80b, 0xa80b; 0xa825, 0xa826; 0xa82c, 0xa82c; 0xa8c4, 0xa8c5; 659 + 0xa8e0, 0xa8f1; 0xa8ff, 0xa8ff; 0xa926, 0xa92d; 0xa947, 0xa951; 0xa980, 0xa982; 660 + 0xa9b3, 0xa9b3; 0xa9b6, 0xa9b9; 0xa9bc, 0xa9bd; 0xa9e5, 0xa9e5; 0xaa29, 0xaa2e; 661 + 0xaa31, 0xaa32; 0xaa35, 0xaa36; 0xaa43, 0xaa43; 0xaa4c, 0xaa4c; 0xaa7c, 0xaa7c; 662 + 0xaab0, 0xaab0; 0xaab2, 0xaab4; 0xaab7, 0xaab8; 0xaabe, 0xaabf; 0xaac1, 0xaac1; 663 + 0xaaec, 0xaaed; 0xaaf6, 0xaaf6; 0xabe5, 0xabe5; 0xabe8, 0xabe8; 0xabed, 0xabed; 664 + 0xfb1e, 0xfb1e; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0x101fd, 0x101fd; 0x102e0, 0x102e0; 665 + 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 0x10a38, 0x10a3a; 666 + 0x10a3f, 0x10a3f; 0x10ae5, 0x10ae6; 0x10d24, 0x10d27; 0x10d69, 0x10d6d; 0x10eab, 0x10eac; 667 + 0x10efa, 0x10eff; 0x10f46, 0x10f50; 0x10f82, 0x10f85; 0x11001, 0x11001; 0x11038, 0x11046; 668 + 0x11070, 0x11070; 0x11073, 0x11074; 0x1107f, 0x11081; 0x110b3, 0x110b6; 0x110b9, 0x110ba; 669 + 0x110c2, 0x110c2; 0x11100, 0x11102; 0x11127, 0x1112b; 0x1112d, 0x11134; 0x11173, 0x11173; 670 + 0x11180, 0x11181; 0x111b6, 0x111be; 0x111c9, 0x111cc; 0x111cf, 0x111cf; 0x1122f, 0x11231; 671 + 0x11234, 0x11234; 0x11236, 0x11237; 0x1123e, 0x1123e; 0x11241, 0x11241; 0x112df, 0x112df; 672 + 0x112e3, 0x112ea; 0x11300, 0x11301; 0x1133b, 0x1133c; 0x11340, 0x11340; 0x11366, 0x1136c; 673 + 0x11370, 0x11374; 0x113bb, 0x113c0; 0x113ce, 0x113ce; 0x113d0, 0x113d0; 0x113d2, 0x113d2; 674 + 0x113e1, 0x113e2; 0x11438, 0x1143f; 0x11442, 0x11444; 0x11446, 0x11446; 0x1145e, 0x1145e; 675 + 0x114b3, 0x114b8; 0x114ba, 0x114ba; 0x114bf, 0x114c0; 0x114c2, 0x114c3; 0x115b2, 0x115b5; 676 + 0x115bc, 0x115bd; 0x115bf, 0x115c0; 0x115dc, 0x115dd; 0x11633, 0x1163a; 0x1163d, 0x1163d; 677 + 0x1163f, 0x11640; 0x116ab, 0x116ab; 0x116ad, 0x116ad; 0x116b0, 0x116b5; 0x116b7, 0x116b7; 678 + 0x1171d, 0x1171d; 0x1171f, 0x1171f; 0x11722, 0x11725; 0x11727, 0x1172b; 0x1182f, 0x11837; 679 + 0x11839, 0x1183a; 0x1193b, 0x1193c; 0x1193e, 0x1193e; 0x11943, 0x11943; 0x119d4, 0x119d7; 680 + 0x119da, 0x119db; 0x119e0, 0x119e0; 0x11a01, 0x11a0a; 0x11a33, 0x11a38; 0x11a3b, 0x11a3e; 681 + 0x11a47, 0x11a47; 0x11a51, 0x11a56; 0x11a59, 0x11a5b; 0x11a8a, 0x11a96; 0x11a98, 0x11a99; 682 + 0x11b60, 0x11b60; 0x11b62, 0x11b64; 0x11b66, 0x11b66; 0x11c30, 0x11c36; 0x11c38, 0x11c3d; 683 + 0x11c3f, 0x11c3f; 0x11c92, 0x11ca7; 0x11caa, 0x11cb0; 0x11cb2, 0x11cb3; 0x11cb5, 0x11cb6; 684 + 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d45; 0x11d47, 0x11d47; 685 + 0x11d90, 0x11d91; 0x11d95, 0x11d95; 0x11d97, 0x11d97; 0x11ef3, 0x11ef4; 0x11f00, 0x11f01; 686 + 0x11f36, 0x11f3a; 0x11f40, 0x11f40; 0x11f42, 0x11f42; 0x11f5a, 0x11f5a; 0x13440, 0x13440; 687 + 0x13447, 0x13455; 0x1611e, 0x16129; 0x1612d, 0x1612f; 0x16af0, 0x16af4; 0x16b30, 0x16b36; 688 + 0x16f4f, 0x16f4f; 0x16f8f, 0x16f92; 0x16fe4, 0x16fe4; 0x1bc9d, 0x1bc9e; 0x1cf00, 0x1cf2d; 689 + 0x1cf30, 0x1cf46; 0x1d167, 0x1d169; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 690 + 0x1d242, 0x1d244; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 691 + 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 692 + 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e08f, 0x1e08f; 0x1e130, 0x1e136; 0x1e2ae, 0x1e2ae; 693 + 0x1e2ec, 0x1e2ef; 0x1e4ec, 0x1e4ef; 0x1e5ee, 0x1e5ef; 0x1e6e3, 0x1e6e3; 0x1e6e6, 0x1e6e6; 694 + 0x1e6ee, 0x1e6ef; 0x1e6f5, 0x1e6f5; 0x1e8d0, 0x1e8d6; 0x1e944, 0x1e94a; 0xe0100, 0xe01ef] 695 + 696 + let nd = Sedlex_cset.of_list 697 + [0x30, 0x39; 0x660, 0x669; 0x6f0, 0x6f9; 0x7c0, 0x7c9; 0x966, 0x96f; 698 + 0x9e6, 0x9ef; 0xa66, 0xa6f; 0xae6, 0xaef; 0xb66, 0xb6f; 0xbe6, 0xbef; 699 + 0xc66, 0xc6f; 0xce6, 0xcef; 0xd66, 0xd6f; 0xde6, 0xdef; 0xe50, 0xe59; 700 + 0xed0, 0xed9; 0xf20, 0xf29; 0x1040, 0x1049; 0x1090, 0x1099; 0x17e0, 0x17e9; 701 + 0x1810, 0x1819; 0x1946, 0x194f; 0x19d0, 0x19d9; 0x1a80, 0x1a89; 0x1a90, 0x1a99; 702 + 0x1b50, 0x1b59; 0x1bb0, 0x1bb9; 0x1c40, 0x1c49; 0x1c50, 0x1c59; 0xa620, 0xa629; 703 + 0xa8d0, 0xa8d9; 0xa900, 0xa909; 0xa9d0, 0xa9d9; 0xa9f0, 0xa9f9; 0xaa50, 0xaa59; 704 + 0xabf0, 0xabf9; 0xff10, 0xff19; 0x104a0, 0x104a9; 0x10d30, 0x10d39; 0x10d40, 0x10d49; 705 + 0x11066, 0x1106f; 0x110f0, 0x110f9; 0x11136, 0x1113f; 0x111d0, 0x111d9; 0x112f0, 0x112f9; 706 + 0x11450, 0x11459; 0x114d0, 0x114d9; 0x11650, 0x11659; 0x116c0, 0x116c9; 0x116d0, 0x116e3; 707 + 0x11730, 0x11739; 0x118e0, 0x118e9; 0x11950, 0x11959; 0x11bf0, 0x11bf9; 0x11c50, 0x11c59; 708 + 0x11d50, 0x11d59; 0x11da0, 0x11da9; 0x11de0, 0x11de9; 0x11f50, 0x11f59; 0x16130, 0x16139; 709 + 0x16a60, 0x16a69; 0x16ac0, 0x16ac9; 0x16b50, 0x16b59; 0x16d70, 0x16d79; 0x1ccf0, 0x1ccf9; 710 + 0x1d7ce, 0x1d7ff; 0x1e140, 0x1e149; 0x1e2f0, 0x1e2f9; 0x1e4f0, 0x1e4f9; 0x1e5f1, 0x1e5fa; 711 + 0x1e950, 0x1e959; 0x1fbf0, 0x1fbf9] 712 + 713 + let nl = Sedlex_cset.of_list 714 + [0x16ee, 0x16f0; 0x2160, 0x2182; 0x2185, 0x2188; 0x3007, 0x3007; 0x3021, 0x3029; 715 + 0x3038, 0x303a; 0xa6e6, 0xa6ef; 0x10140, 0x10174; 0x10341, 0x10341; 0x1034a, 0x1034a; 716 + 0x103d1, 0x103d5; 0x12400, 0x1246e; 0x16ff4, 0x16ff6] 717 + 718 + let no = Sedlex_cset.of_list 719 + [0xb2, 0xb3; 0xb9, 0xb9; 0xbc, 0xbe; 0x9f4, 0x9f9; 0xb72, 0xb77; 720 + 0xbf0, 0xbf2; 0xc78, 0xc7e; 0xd58, 0xd5e; 0xd70, 0xd78; 0xf2a, 0xf33; 721 + 0x1369, 0x137c; 0x17f0, 0x17f9; 0x19da, 0x19da; 0x2070, 0x2070; 0x2074, 0x2079; 722 + 0x2080, 0x2089; 0x2150, 0x215f; 0x2189, 0x2189; 0x2460, 0x249b; 0x24ea, 0x24ff; 723 + 0x2776, 0x2793; 0x2cfd, 0x2cfd; 0x3192, 0x3195; 0x3220, 0x3229; 0x3248, 0x324f; 724 + 0x3251, 0x325f; 0x3280, 0x3289; 0x32b1, 0x32bf; 0xa830, 0xa835; 0x10107, 0x10133; 725 + 0x10175, 0x10178; 0x1018a, 0x1018b; 0x102e1, 0x102fb; 0x10320, 0x10323; 0x10858, 0x1085f; 726 + 0x10879, 0x1087f; 0x108a7, 0x108af; 0x108fb, 0x108ff; 0x10916, 0x1091b; 0x109bc, 0x109bd; 727 + 0x109c0, 0x109cf; 0x109d2, 0x109ff; 0x10a40, 0x10a48; 0x10a7d, 0x10a7e; 0x10a9d, 0x10a9f; 728 + 0x10aeb, 0x10aef; 0x10b58, 0x10b5f; 0x10b78, 0x10b7f; 0x10ba9, 0x10baf; 0x10cfa, 0x10cff; 729 + 0x10e60, 0x10e7e; 0x10f1d, 0x10f26; 0x10f51, 0x10f54; 0x10fc5, 0x10fcb; 0x11052, 0x11065; 730 + 0x111e1, 0x111f4; 0x1173a, 0x1173b; 0x118ea, 0x118f2; 0x11c5a, 0x11c6c; 0x11fc0, 0x11fd4; 731 + 0x16b5b, 0x16b61; 0x16e80, 0x16e96; 0x1d2c0, 0x1d2d3; 0x1d2e0, 0x1d2f3; 0x1d360, 0x1d378; 732 + 0x1e8c7, 0x1e8cf; 0x1ec71, 0x1ecab; 0x1ecad, 0x1ecaf; 0x1ecb1, 0x1ecb4; 0x1ed01, 0x1ed2d; 733 + 0x1ed2f, 0x1ed3d; 0x1f100, 0x1f10c] 734 + 735 + let pc = Sedlex_cset.of_list 736 + [0x5f, 0x5f; 0x203f, 0x2040; 0x2054, 0x2054; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 737 + 0xff3f, 0xff3f] 738 + 739 + let pd = Sedlex_cset.of_list 740 + [0x2d, 0x2d; 0x58a, 0x58a; 0x5be, 0x5be; 0x1400, 0x1400; 0x1806, 0x1806; 741 + 0x2010, 0x2015; 0x2e17, 0x2e17; 0x2e1a, 0x2e1a; 0x2e3a, 0x2e3b; 0x2e40, 0x2e40; 742 + 0x2e5d, 0x2e5d; 0x301c, 0x301c; 0x3030, 0x3030; 0x30a0, 0x30a0; 0xfe31, 0xfe32; 743 + 0xfe58, 0xfe58; 0xfe63, 0xfe63; 0xff0d, 0xff0d; 0x10d6e, 0x10d6e; 0x10ead, 0x10ead] 744 + 745 + let pe = Sedlex_cset.of_list 746 + [0x29, 0x29; 0x5d, 0x5d; 0x7d, 0x7d; 0xf3b, 0xf3b; 0xf3d, 0xf3d; 747 + 0x169c, 0x169c; 0x2046, 0x2046; 0x207e, 0x207e; 0x208e, 0x208e; 0x2309, 0x2309; 748 + 0x230b, 0x230b; 0x232a, 0x232a; 0x2769, 0x2769; 0x276b, 0x276b; 0x276d, 0x276d; 749 + 0x276f, 0x276f; 0x2771, 0x2771; 0x2773, 0x2773; 0x2775, 0x2775; 0x27c6, 0x27c6; 750 + 0x27e7, 0x27e7; 0x27e9, 0x27e9; 0x27eb, 0x27eb; 0x27ed, 0x27ed; 0x27ef, 0x27ef; 751 + 0x2984, 0x2984; 0x2986, 0x2986; 0x2988, 0x2988; 0x298a, 0x298a; 0x298c, 0x298c; 752 + 0x298e, 0x298e; 0x2990, 0x2990; 0x2992, 0x2992; 0x2994, 0x2994; 0x2996, 0x2996; 753 + 0x2998, 0x2998; 0x29d9, 0x29d9; 0x29db, 0x29db; 0x29fd, 0x29fd; 0x2e23, 0x2e23; 754 + 0x2e25, 0x2e25; 0x2e27, 0x2e27; 0x2e29, 0x2e29; 0x2e56, 0x2e56; 0x2e58, 0x2e58; 755 + 0x2e5a, 0x2e5a; 0x2e5c, 0x2e5c; 0x3009, 0x3009; 0x300b, 0x300b; 0x300d, 0x300d; 756 + 0x300f, 0x300f; 0x3011, 0x3011; 0x3015, 0x3015; 0x3017, 0x3017; 0x3019, 0x3019; 757 + 0x301b, 0x301b; 0x301e, 0x301f; 0xfd3e, 0xfd3e; 0xfe18, 0xfe18; 0xfe36, 0xfe36; 758 + 0xfe38, 0xfe38; 0xfe3a, 0xfe3a; 0xfe3c, 0xfe3c; 0xfe3e, 0xfe3e; 0xfe40, 0xfe40; 759 + 0xfe42, 0xfe42; 0xfe44, 0xfe44; 0xfe48, 0xfe48; 0xfe5a, 0xfe5a; 0xfe5c, 0xfe5c; 760 + 0xfe5e, 0xfe5e; 0xff09, 0xff09; 0xff3d, 0xff3d; 0xff5d, 0xff5d; 0xff60, 0xff60; 761 + 0xff63, 0xff63] 762 + 763 + let pf = Sedlex_cset.of_list 764 + [0xbb, 0xbb; 0x2019, 0x2019; 0x201d, 0x201d; 0x203a, 0x203a; 0x2e03, 0x2e03; 765 + 0x2e05, 0x2e05; 0x2e0a, 0x2e0a; 0x2e0d, 0x2e0d; 0x2e1d, 0x2e1d; 0x2e21, 0x2e21] 766 + 767 + let pi = Sedlex_cset.of_list 768 + [0xab, 0xab; 0x2018, 0x2018; 0x201b, 0x201c; 0x201f, 0x201f; 0x2039, 0x2039; 769 + 0x2e02, 0x2e02; 0x2e04, 0x2e04; 0x2e09, 0x2e09; 0x2e0c, 0x2e0c; 0x2e1c, 0x2e1c; 770 + 0x2e20, 0x2e20] 771 + 772 + let po = Sedlex_cset.of_list 773 + [0x21, 0x23; 0x25, 0x27; 0x2a, 0x2a; 0x2c, 0x2c; 0x2e, 0x2f; 774 + 0x3a, 0x3b; 0x3f, 0x40; 0x5c, 0x5c; 0xa1, 0xa1; 0xa7, 0xa7; 775 + 0xb6, 0xb7; 0xbf, 0xbf; 0x37e, 0x37e; 0x387, 0x387; 0x55a, 0x55f; 776 + 0x589, 0x589; 0x5c0, 0x5c0; 0x5c3, 0x5c3; 0x5c6, 0x5c6; 0x5f3, 0x5f4; 777 + 0x609, 0x60a; 0x60c, 0x60d; 0x61b, 0x61b; 0x61d, 0x61f; 0x66a, 0x66d; 778 + 0x6d4, 0x6d4; 0x700, 0x70d; 0x7f7, 0x7f9; 0x830, 0x83e; 0x85e, 0x85e; 779 + 0x964, 0x965; 0x970, 0x970; 0x9fd, 0x9fd; 0xa76, 0xa76; 0xaf0, 0xaf0; 780 + 0xc77, 0xc77; 0xc84, 0xc84; 0xdf4, 0xdf4; 0xe4f, 0xe4f; 0xe5a, 0xe5b; 781 + 0xf04, 0xf12; 0xf14, 0xf14; 0xf85, 0xf85; 0xfd0, 0xfd4; 0xfd9, 0xfda; 782 + 0x104a, 0x104f; 0x10fb, 0x10fb; 0x1360, 0x1368; 0x166e, 0x166e; 0x16eb, 0x16ed; 783 + 0x1735, 0x1736; 0x17d4, 0x17d6; 0x17d8, 0x17da; 0x1800, 0x1805; 0x1807, 0x180a; 784 + 0x1944, 0x1945; 0x1a1e, 0x1a1f; 0x1aa0, 0x1aa6; 0x1aa8, 0x1aad; 0x1b4e, 0x1b4f; 785 + 0x1b5a, 0x1b60; 0x1b7d, 0x1b7f; 0x1bfc, 0x1bff; 0x1c3b, 0x1c3f; 0x1c7e, 0x1c7f; 786 + 0x1cc0, 0x1cc7; 0x1cd3, 0x1cd3; 0x2016, 0x2017; 0x2020, 0x2027; 0x2030, 0x2038; 787 + 0x203b, 0x203e; 0x2041, 0x2043; 0x2047, 0x2051; 0x2053, 0x2053; 0x2055, 0x205e; 788 + 0x2cf9, 0x2cfc; 0x2cfe, 0x2cff; 0x2d70, 0x2d70; 0x2e00, 0x2e01; 0x2e06, 0x2e08; 789 + 0x2e0b, 0x2e0b; 0x2e0e, 0x2e16; 0x2e18, 0x2e19; 0x2e1b, 0x2e1b; 0x2e1e, 0x2e1f; 790 + 0x2e2a, 0x2e2e; 0x2e30, 0x2e39; 0x2e3c, 0x2e3f; 0x2e41, 0x2e41; 0x2e43, 0x2e4f; 791 + 0x2e52, 0x2e54; 0x3001, 0x3003; 0x303d, 0x303d; 0x30fb, 0x30fb; 0xa4fe, 0xa4ff; 792 + 0xa60d, 0xa60f; 0xa673, 0xa673; 0xa67e, 0xa67e; 0xa6f2, 0xa6f7; 0xa874, 0xa877; 793 + 0xa8ce, 0xa8cf; 0xa8f8, 0xa8fa; 0xa8fc, 0xa8fc; 0xa92e, 0xa92f; 0xa95f, 0xa95f; 794 + 0xa9c1, 0xa9cd; 0xa9de, 0xa9df; 0xaa5c, 0xaa5f; 0xaade, 0xaadf; 0xaaf0, 0xaaf1; 795 + 0xabeb, 0xabeb; 0xfe10, 0xfe16; 0xfe19, 0xfe19; 0xfe30, 0xfe30; 0xfe45, 0xfe46; 796 + 0xfe49, 0xfe4c; 0xfe50, 0xfe52; 0xfe54, 0xfe57; 0xfe5f, 0xfe61; 0xfe68, 0xfe68; 797 + 0xfe6a, 0xfe6b; 0xff01, 0xff03; 0xff05, 0xff07; 0xff0a, 0xff0a; 0xff0c, 0xff0c; 798 + 0xff0e, 0xff0f; 0xff1a, 0xff1b; 0xff1f, 0xff20; 0xff3c, 0xff3c; 0xff61, 0xff61; 799 + 0xff64, 0xff65; 0x10100, 0x10102; 0x1039f, 0x1039f; 0x103d0, 0x103d0; 0x1056f, 0x1056f; 800 + 0x10857, 0x10857; 0x1091f, 0x1091f; 0x1093f, 0x1093f; 0x10a50, 0x10a58; 0x10a7f, 0x10a7f; 801 + 0x10af0, 0x10af6; 0x10b39, 0x10b3f; 0x10b99, 0x10b9c; 0x10ed0, 0x10ed0; 0x10f55, 0x10f59; 802 + 0x10f86, 0x10f89; 0x11047, 0x1104d; 0x110bb, 0x110bc; 0x110be, 0x110c1; 0x11140, 0x11143; 803 + 0x11174, 0x11175; 0x111c5, 0x111c8; 0x111cd, 0x111cd; 0x111db, 0x111db; 0x111dd, 0x111df; 804 + 0x11238, 0x1123d; 0x112a9, 0x112a9; 0x113d4, 0x113d5; 0x113d7, 0x113d8; 0x1144b, 0x1144f; 805 + 0x1145a, 0x1145b; 0x1145d, 0x1145d; 0x114c6, 0x114c6; 0x115c1, 0x115d7; 0x11641, 0x11643; 806 + 0x11660, 0x1166c; 0x116b9, 0x116b9; 0x1173c, 0x1173e; 0x1183b, 0x1183b; 0x11944, 0x11946; 807 + 0x119e2, 0x119e2; 0x11a3f, 0x11a46; 0x11a9a, 0x11a9c; 0x11a9e, 0x11aa2; 0x11b00, 0x11b09; 808 + 0x11be1, 0x11be1; 0x11c41, 0x11c45; 0x11c70, 0x11c71; 0x11ef7, 0x11ef8; 0x11f43, 0x11f4f; 809 + 0x11fff, 0x11fff; 0x12470, 0x12474; 0x12ff1, 0x12ff2; 0x16a6e, 0x16a6f; 0x16af5, 0x16af5; 810 + 0x16b37, 0x16b3b; 0x16b44, 0x16b44; 0x16d6d, 0x16d6f; 0x16e97, 0x16e9a; 0x16fe2, 0x16fe2; 811 + 0x1bc9f, 0x1bc9f; 0x1da87, 0x1da8b; 0x1e5ff, 0x1e5ff; 0x1e95e, 0x1e95f] 812 + 813 + let ps = Sedlex_cset.of_list 814 + [0x28, 0x28; 0x5b, 0x5b; 0x7b, 0x7b; 0xf3a, 0xf3a; 0xf3c, 0xf3c; 815 + 0x169b, 0x169b; 0x201a, 0x201a; 0x201e, 0x201e; 0x2045, 0x2045; 0x207d, 0x207d; 816 + 0x208d, 0x208d; 0x2308, 0x2308; 0x230a, 0x230a; 0x2329, 0x2329; 0x2768, 0x2768; 817 + 0x276a, 0x276a; 0x276c, 0x276c; 0x276e, 0x276e; 0x2770, 0x2770; 0x2772, 0x2772; 818 + 0x2774, 0x2774; 0x27c5, 0x27c5; 0x27e6, 0x27e6; 0x27e8, 0x27e8; 0x27ea, 0x27ea; 819 + 0x27ec, 0x27ec; 0x27ee, 0x27ee; 0x2983, 0x2983; 0x2985, 0x2985; 0x2987, 0x2987; 820 + 0x2989, 0x2989; 0x298b, 0x298b; 0x298d, 0x298d; 0x298f, 0x298f; 0x2991, 0x2991; 821 + 0x2993, 0x2993; 0x2995, 0x2995; 0x2997, 0x2997; 0x29d8, 0x29d8; 0x29da, 0x29da; 822 + 0x29fc, 0x29fc; 0x2e22, 0x2e22; 0x2e24, 0x2e24; 0x2e26, 0x2e26; 0x2e28, 0x2e28; 823 + 0x2e42, 0x2e42; 0x2e55, 0x2e55; 0x2e57, 0x2e57; 0x2e59, 0x2e59; 0x2e5b, 0x2e5b; 824 + 0x3008, 0x3008; 0x300a, 0x300a; 0x300c, 0x300c; 0x300e, 0x300e; 0x3010, 0x3010; 825 + 0x3014, 0x3014; 0x3016, 0x3016; 0x3018, 0x3018; 0x301a, 0x301a; 0x301d, 0x301d; 826 + 0xfd3f, 0xfd3f; 0xfe17, 0xfe17; 0xfe35, 0xfe35; 0xfe37, 0xfe37; 0xfe39, 0xfe39; 827 + 0xfe3b, 0xfe3b; 0xfe3d, 0xfe3d; 0xfe3f, 0xfe3f; 0xfe41, 0xfe41; 0xfe43, 0xfe43; 828 + 0xfe47, 0xfe47; 0xfe59, 0xfe59; 0xfe5b, 0xfe5b; 0xfe5d, 0xfe5d; 0xff08, 0xff08; 829 + 0xff3b, 0xff3b; 0xff5b, 0xff5b; 0xff5f, 0xff5f; 0xff62, 0xff62] 830 + 831 + let sc = Sedlex_cset.of_list 832 + [0x24, 0x24; 0xa2, 0xa5; 0x58f, 0x58f; 0x60b, 0x60b; 0x7fe, 0x7ff; 833 + 0x9f2, 0x9f3; 0x9fb, 0x9fb; 0xaf1, 0xaf1; 0xbf9, 0xbf9; 0xe3f, 0xe3f; 834 + 0x17db, 0x17db; 0x20a0, 0x20c1; 0xa838, 0xa838; 0xfdfc, 0xfdfc; 0xfe69, 0xfe69; 835 + 0xff04, 0xff04; 0xffe0, 0xffe1; 0xffe5, 0xffe6; 0x11fdd, 0x11fe0; 0x1e2ff, 0x1e2ff; 836 + 0x1ecb0, 0x1ecb0] 837 + 838 + let sk = Sedlex_cset.of_list 839 + [0x5e, 0x5e; 0x60, 0x60; 0xa8, 0xa8; 0xaf, 0xaf; 0xb4, 0xb4; 840 + 0xb8, 0xb8; 0x2c2, 0x2c5; 0x2d2, 0x2df; 0x2e5, 0x2eb; 0x2ed, 0x2ed; 841 + 0x2ef, 0x2ff; 0x375, 0x375; 0x384, 0x385; 0x888, 0x888; 0x1fbd, 0x1fbd; 842 + 0x1fbf, 0x1fc1; 0x1fcd, 0x1fcf; 0x1fdd, 0x1fdf; 0x1fed, 0x1fef; 0x1ffd, 0x1ffe; 843 + 0x309b, 0x309c; 0xa700, 0xa716; 0xa720, 0xa721; 0xa789, 0xa78a; 0xab5b, 0xab5b; 844 + 0xab6a, 0xab6b; 0xfbb2, 0xfbc2; 0xff3e, 0xff3e; 0xff40, 0xff40; 0xffe3, 0xffe3; 845 + 0x1f3fb, 0x1f3ff] 846 + 847 + let sm = Sedlex_cset.of_list 848 + [0x2b, 0x2b; 0x3c, 0x3e; 0x7c, 0x7c; 0x7e, 0x7e; 0xac, 0xac; 849 + 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3f6, 0x3f6; 0x606, 0x608; 850 + 0x2044, 0x2044; 0x2052, 0x2052; 0x207a, 0x207c; 0x208a, 0x208c; 0x2118, 0x2118; 851 + 0x2140, 0x2144; 0x214b, 0x214b; 0x2190, 0x2194; 0x219a, 0x219b; 0x21a0, 0x21a0; 852 + 0x21a3, 0x21a3; 0x21a6, 0x21a6; 0x21ae, 0x21ae; 0x21ce, 0x21cf; 0x21d2, 0x21d2; 853 + 0x21d4, 0x21d4; 0x21f4, 0x22ff; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b3; 854 + 0x23dc, 0x23e1; 0x25b7, 0x25b7; 0x25c1, 0x25c1; 0x25f8, 0x25ff; 0x266f, 0x266f; 855 + 0x27c0, 0x27c4; 0x27c7, 0x27e5; 0x27f0, 0x27ff; 0x2900, 0x2982; 0x2999, 0x29d7; 856 + 0x29dc, 0x29fb; 0x29fe, 0x2aff; 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 857 + 0xfe62, 0xfe62; 0xfe64, 0xfe66; 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff5c, 0xff5c; 858 + 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x10d8e, 0x10d8f; 0x1cef0, 0x1cef0; 859 + 0x1d6c1, 0x1d6c1; 0x1d6db, 0x1d6db; 0x1d6fb, 0x1d6fb; 0x1d715, 0x1d715; 0x1d735, 0x1d735; 860 + 0x1d74f, 0x1d74f; 0x1d76f, 0x1d76f; 0x1d789, 0x1d789; 0x1d7a9, 0x1d7a9; 0x1d7c3, 0x1d7c3; 861 + 0x1eef0, 0x1eef1; 0x1f8d0, 0x1f8d8] 862 + 863 + let so = Sedlex_cset.of_list 864 + [0xa6, 0xa6; 0xa9, 0xa9; 0xae, 0xae; 0xb0, 0xb0; 0x482, 0x482; 865 + 0x58d, 0x58e; 0x60e, 0x60f; 0x6de, 0x6de; 0x6e9, 0x6e9; 0x6fd, 0x6fe; 866 + 0x7f6, 0x7f6; 0x9fa, 0x9fa; 0xb70, 0xb70; 0xbf3, 0xbf8; 0xbfa, 0xbfa; 867 + 0xc7f, 0xc7f; 0xd4f, 0xd4f; 0xd79, 0xd79; 0xf01, 0xf03; 0xf13, 0xf13; 868 + 0xf15, 0xf17; 0xf1a, 0xf1f; 0xf34, 0xf34; 0xf36, 0xf36; 0xf38, 0xf38; 869 + 0xfbe, 0xfc5; 0xfc7, 0xfcc; 0xfce, 0xfcf; 0xfd5, 0xfd8; 0x109e, 0x109f; 870 + 0x1390, 0x1399; 0x166d, 0x166d; 0x1940, 0x1940; 0x19de, 0x19ff; 0x1b61, 0x1b6a; 871 + 0x1b74, 0x1b7c; 0x2100, 0x2101; 0x2103, 0x2106; 0x2108, 0x2109; 0x2114, 0x2114; 872 + 0x2116, 0x2117; 0x211e, 0x2123; 0x2125, 0x2125; 0x2127, 0x2127; 0x2129, 0x2129; 873 + 0x212e, 0x212e; 0x213a, 0x213b; 0x214a, 0x214a; 0x214c, 0x214d; 0x214f, 0x214f; 874 + 0x218a, 0x218b; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 0x21a4, 0x21a5; 875 + 0x21a7, 0x21ad; 0x21af, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21f3; 876 + 0x2300, 0x2307; 0x230c, 0x231f; 0x2322, 0x2328; 0x232b, 0x237b; 0x237d, 0x239a; 877 + 0x23b4, 0x23db; 0x23e2, 0x2429; 0x2440, 0x244a; 0x249c, 0x24e9; 0x2500, 0x25b6; 878 + 0x25b8, 0x25c0; 0x25c2, 0x25f7; 0x2600, 0x266e; 0x2670, 0x2767; 0x2794, 0x27bf; 879 + 0x2800, 0x28ff; 0x2b00, 0x2b2f; 0x2b45, 0x2b46; 0x2b4d, 0x2b73; 0x2b76, 0x2bff; 880 + 0x2ce5, 0x2cea; 0x2e50, 0x2e51; 0x2e80, 0x2e99; 0x2e9b, 0x2ef3; 0x2f00, 0x2fd5; 881 + 0x2ff0, 0x2fff; 0x3004, 0x3004; 0x3012, 0x3013; 0x3020, 0x3020; 0x3036, 0x3037; 882 + 0x303e, 0x303f; 0x3190, 0x3191; 0x3196, 0x319f; 0x31c0, 0x31e5; 0x31ef, 0x31ef; 883 + 0x3200, 0x321e; 0x322a, 0x3247; 0x3250, 0x3250; 0x3260, 0x327f; 0x328a, 0x32b0; 884 + 0x32c0, 0x33ff; 0x4dc0, 0x4dff; 0xa490, 0xa4c6; 0xa828, 0xa82b; 0xa836, 0xa837; 885 + 0xa839, 0xa839; 0xaa77, 0xaa79; 0xfbc3, 0xfbd2; 0xfd40, 0xfd4f; 0xfd90, 0xfd91; 886 + 0xfdc8, 0xfdcf; 0xfdfd, 0xfdff; 0xffe4, 0xffe4; 0xffe8, 0xffe8; 0xffed, 0xffee; 887 + 0xfffc, 0xfffd; 0x10137, 0x1013f; 0x10179, 0x10189; 0x1018c, 0x1018e; 0x10190, 0x1019c; 888 + 0x101a0, 0x101a0; 0x101d0, 0x101fc; 0x10877, 0x10878; 0x10ac8, 0x10ac8; 0x10ed1, 0x10ed8; 889 + 0x1173f, 0x1173f; 0x11fd5, 0x11fdc; 0x11fe1, 0x11ff1; 0x16b3c, 0x16b3f; 0x16b45, 0x16b45; 890 + 0x1bc9c, 0x1bc9c; 0x1cc00, 0x1ccef; 0x1ccfa, 0x1ccfc; 0x1cd00, 0x1ceb3; 0x1ceba, 0x1ced0; 891 + 0x1cee0, 0x1ceef; 0x1cf50, 0x1cfc3; 0x1d000, 0x1d0f5; 0x1d100, 0x1d126; 0x1d129, 0x1d164; 892 + 0x1d16a, 0x1d16c; 0x1d183, 0x1d184; 0x1d18c, 0x1d1a9; 0x1d1ae, 0x1d1ea; 0x1d200, 0x1d241; 893 + 0x1d245, 0x1d245; 0x1d300, 0x1d356; 0x1d800, 0x1d9ff; 0x1da37, 0x1da3a; 0x1da6d, 0x1da74; 894 + 0x1da76, 0x1da83; 0x1da85, 0x1da86; 0x1e14f, 0x1e14f; 0x1ecac, 0x1ecac; 0x1ed2e, 0x1ed2e; 895 + 0x1f000, 0x1f02b; 0x1f030, 0x1f093; 0x1f0a0, 0x1f0ae; 0x1f0b1, 0x1f0bf; 0x1f0c1, 0x1f0cf; 896 + 0x1f0d1, 0x1f0f5; 0x1f10d, 0x1f1ad; 0x1f1e6, 0x1f202; 0x1f210, 0x1f23b; 0x1f240, 0x1f248; 897 + 0x1f250, 0x1f251; 0x1f260, 0x1f265; 0x1f300, 0x1f3fa; 0x1f400, 0x1f6d8; 0x1f6dc, 0x1f6ec; 898 + 0x1f6f0, 0x1f6fc; 0x1f700, 0x1f7d9; 0x1f7e0, 0x1f7eb; 0x1f7f0, 0x1f7f0; 0x1f800, 0x1f80b; 899 + 0x1f810, 0x1f847; 0x1f850, 0x1f859; 0x1f860, 0x1f887; 0x1f890, 0x1f8ad; 0x1f8b0, 0x1f8bb; 900 + 0x1f8c0, 0x1f8c1; 0x1f900, 0x1fa57; 0x1fa60, 0x1fa6d; 0x1fa70, 0x1fa7c; 0x1fa80, 0x1fa8a; 901 + 0x1fa8e, 0x1fac6; 0x1fac8, 0x1fac8; 0x1facd, 0x1fadc; 0x1fadf, 0x1faea; 0x1faef, 0x1faf8; 902 + 0x1fb00, 0x1fb92; 0x1fb94, 0x1fbef; 0x1fbfa, 0x1fbfa] 903 + 904 + let zl = Sedlex_cset.of_list 905 + [0x2028, 0x2028] 906 + 907 + let zp = Sedlex_cset.of_list 908 + [0x2029, 0x2029] 909 + 910 + let zs = Sedlex_cset.of_list 911 + [0x20, 0x20; 0xa0, 0xa0; 0x1680, 0x1680; 0x2000, 0x200a; 0x202f, 0x202f; 912 + 0x205f, 0x205f; 0x3000, 0x3000] 913 + 914 + let list = [ 915 + ("cc", cc); 916 + ("cf", cf); 917 + ("cn", cn); 918 + ("co", co); 919 + ("cs", cs); 920 + ("ll", ll); 921 + ("lm", lm); 922 + ("lo", lo); 923 + ("lt", lt); 924 + ("lu", lu); 925 + ("mc", mc); 926 + ("me", me); 927 + ("mn", mn); 928 + ("nd", nd); 929 + ("nl", nl); 930 + ("no", no); 931 + ("pc", pc); 932 + ("pd", pd); 933 + ("pe", pe); 934 + ("pf", pf); 935 + ("pi", pi); 936 + ("po", po); 937 + ("ps", ps); 938 + ("sc", sc); 939 + ("sk", sk); 940 + ("sm", sm); 941 + ("so", so); 942 + ("zl", zl); 943 + ("zp", zp); 944 + ("zs", zs) 945 + ] 946 + 947 + end 948 + 949 + module Properties = struct 950 + 951 + let alphabetic = Sedlex_cset.of_list 952 + [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 953 + 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 954 + 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x345, 0x345; 0x363, 0x374; 0x376, 0x377; 955 + 0x37a, 0x37d; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 956 + 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 957 + 0x559, 0x559; 0x560, 0x588; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 958 + 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x610, 0x61a; 959 + 0x620, 0x657; 0x659, 0x65f; 0x66e, 0x6d3; 0x6d5, 0x6dc; 0x6e1, 0x6e8; 960 + 0x6ed, 0x6ef; 0x6fa, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x73f; 0x74d, 0x7b1; 961 + 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x817; 0x81a, 0x82c; 962 + 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88f; 0x897, 0x897; 963 + 0x8a0, 0x8c9; 0x8d4, 0x8df; 0x8e3, 0x8e9; 0x8f0, 0x93b; 0x93d, 0x94c; 964 + 0x94e, 0x950; 0x955, 0x963; 0x971, 0x983; 0x985, 0x98c; 0x98f, 0x990; 965 + 0x993, 0x9a8; 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9c4; 966 + 0x9c7, 0x9c8; 0x9cb, 0x9cc; 0x9ce, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 967 + 0x9df, 0x9e3; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa01, 0xa03; 0xa05, 0xa0a; 968 + 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 969 + 0xa38, 0xa39; 0xa3e, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4c; 0xa51, 0xa51; 970 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa70, 0xa75; 0xa81, 0xa83; 0xa85, 0xa8d; 971 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 972 + 0xabd, 0xac5; 0xac7, 0xac9; 0xacb, 0xacc; 0xad0, 0xad0; 0xae0, 0xae3; 973 + 0xaf9, 0xafc; 0xb01, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 0xb13, 0xb28; 974 + 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3d, 0xb44; 0xb47, 0xb48; 975 + 0xb4b, 0xb4c; 0xb56, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb63; 0xb71, 0xb71; 976 + 0xb82, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 977 + 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 978 + 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 0xbd0, 0xbd0; 0xbd7, 0xbd7; 979 + 0xc00, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc44; 980 + 0xc46, 0xc48; 0xc4a, 0xc4c; 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5c, 0xc5d; 981 + 0xc60, 0xc63; 0xc80, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 982 + 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcc4; 0xcc6, 0xcc8; 0xcca, 0xccc; 983 + 0xcd5, 0xcd6; 0xcdc, 0xcde; 0xce0, 0xce3; 0xcf1, 0xcf3; 0xd00, 0xd0c; 984 + 0xd0e, 0xd10; 0xd12, 0xd3a; 0xd3d, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 985 + 0xd4e, 0xd4e; 0xd54, 0xd57; 0xd5f, 0xd63; 0xd7a, 0xd7f; 0xd81, 0xd83; 986 + 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 987 + 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 0xe01, 0xe3a; 988 + 0xe40, 0xe46; 0xe4d, 0xe4d; 0xe81, 0xe82; 0xe84, 0xe84; 0xe86, 0xe8a; 989 + 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb9; 0xebb, 0xebd; 0xec0, 0xec4; 990 + 0xec6, 0xec6; 0xecd, 0xecd; 0xedc, 0xedf; 0xf00, 0xf00; 0xf40, 0xf47; 991 + 0xf49, 0xf6c; 0xf71, 0xf83; 0xf88, 0xf97; 0xf99, 0xfbc; 0x1000, 0x1036; 992 + 0x1038, 0x1038; 0x103b, 0x103f; 0x1050, 0x108f; 0x109a, 0x109d; 0x10a0, 0x10c5; 993 + 0x10c7, 0x10c7; 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 994 + 0x1250, 0x1256; 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 995 + 0x1290, 0x12b0; 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 996 + 0x12c8, 0x12d6; 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 997 + 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 998 + 0x16a0, 0x16ea; 0x16ee, 0x16f8; 0x1700, 0x1713; 0x171f, 0x1733; 0x1740, 0x1753; 999 + 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17b3; 0x17b6, 0x17c8; 1000 + 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1878; 0x1880, 0x18aa; 0x18b0, 0x18f5; 1001 + 0x1900, 0x191e; 0x1920, 0x192b; 0x1930, 0x1938; 0x1950, 0x196d; 0x1970, 0x1974; 1002 + 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a1b; 0x1a20, 0x1a5e; 0x1a61, 0x1a74; 1003 + 0x1aa7, 0x1aa7; 0x1abf, 0x1ac0; 0x1acc, 0x1ace; 0x1b00, 0x1b33; 0x1b35, 0x1b43; 1004 + 0x1b45, 0x1b4c; 0x1b80, 0x1ba9; 0x1bac, 0x1baf; 0x1bba, 0x1be5; 0x1be7, 0x1bf1; 1005 + 0x1c00, 0x1c36; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c7d; 0x1c80, 0x1c8a; 0x1c90, 0x1cba; 1006 + 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 0x1cfa, 0x1cfa; 1007 + 0x1d00, 0x1dbf; 0x1dd3, 0x1df4; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 1008 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 1009 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 1010 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 1011 + 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 1012 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 1013 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x212f, 0x2139; 0x213c, 0x213f; 1014 + 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2188; 0x24b6, 0x24e9; 0x2c00, 0x2ce4; 1015 + 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 1016 + 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 1017 + 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 1018 + 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 0x2e2f, 0x2e2f; 0x3005, 0x3007; 0x3021, 0x3029; 1019 + 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x309d, 0x309f; 0x30a1, 0x30fa; 1020 + 0x30fc, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 0x31f0, 0x31ff; 1021 + 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 0xa610, 0xa61f; 1022 + 0xa62a, 0xa62b; 0xa640, 0xa66e; 0xa674, 0xa67b; 0xa67f, 0xa6ef; 0xa717, 0xa71f; 1023 + 0xa722, 0xa788; 0xa78b, 0xa7dc; 0xa7f1, 0xa805; 0xa807, 0xa827; 0xa840, 0xa873; 1024 + 0xa880, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8f2, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa8ff; 1025 + 0xa90a, 0xa92a; 0xa930, 0xa952; 0xa960, 0xa97c; 0xa980, 0xa9b2; 0xa9b4, 0xa9bf; 1026 + 0xa9cf, 0xa9cf; 0xa9e0, 0xa9ef; 0xa9fa, 0xa9fe; 0xaa00, 0xaa36; 0xaa40, 0xaa4d; 1027 + 0xaa60, 0xaa76; 0xaa7a, 0xaabe; 0xaac0, 0xaac0; 0xaac2, 0xaac2; 0xaadb, 0xaadd; 1028 + 0xaae0, 0xaaef; 0xaaf2, 0xaaf5; 0xab01, 0xab06; 0xab09, 0xab0e; 0xab11, 0xab16; 1029 + 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab69; 0xab70, 0xabea; 1030 + 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 1031 + 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 1032 + 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 1033 + 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 1034 + 0xff21, 0xff3a; 0xff41, 0xff5a; 0xff66, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 1035 + 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 1036 + 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 1037 + 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x1037a; 1038 + 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 1039 + 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 1040 + 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 1041 + 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 1042 + 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 1043 + 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 1044 + 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 1045 + 0x10920, 0x10939; 0x10940, 0x10959; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a03; 1046 + 0x10a05, 0x10a06; 0x10a0c, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 1047 + 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 1048 + 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 1049 + 0x10d00, 0x10d27; 0x10d4a, 0x10d65; 0x10d69, 0x10d69; 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 1050 + 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec7; 0x10efa, 0x10efc; 0x10f00, 0x10f1c; 1051 + 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 1052 + 0x11000, 0x11045; 0x11071, 0x11075; 0x11080, 0x110b8; 0x110c2, 0x110c2; 0x110d0, 0x110e8; 1053 + 0x11100, 0x11132; 0x11144, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11180, 0x111bf; 1054 + 0x111c1, 0x111c4; 0x111ce, 0x111cf; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 1055 + 0x11213, 0x11234; 0x11237, 0x11237; 0x1123e, 0x11241; 0x11280, 0x11286; 0x11288, 0x11288; 1056 + 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112e8; 0x11300, 0x11303; 1057 + 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 1058 + 0x11335, 0x11339; 0x1133d, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 0x11350, 0x11350; 1059 + 0x11357, 0x11357; 0x1135d, 0x11363; 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 1060 + 0x11390, 0x113b5; 0x113b7, 0x113c0; 0x113c2, 0x113c2; 0x113c5, 0x113c5; 0x113c7, 0x113ca; 1061 + 0x113cc, 0x113cd; 0x113d1, 0x113d1; 0x113d3, 0x113d3; 0x11400, 0x11441; 0x11443, 0x11445; 1062 + 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114c1; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 1063 + 0x11580, 0x115b5; 0x115b8, 0x115be; 0x115d8, 0x115dd; 0x11600, 0x1163e; 0x11640, 0x11640; 1064 + 0x11644, 0x11644; 0x11680, 0x116b5; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x1171d, 0x1172a; 1065 + 0x11740, 0x11746; 0x11800, 0x11838; 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 1066 + 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x11935; 0x11937, 0x11938; 0x1193b, 0x1193c; 1067 + 0x1193f, 0x11942; 0x119a0, 0x119a7; 0x119aa, 0x119d7; 0x119da, 0x119df; 0x119e1, 0x119e1; 1068 + 0x119e3, 0x119e4; 0x11a00, 0x11a32; 0x11a35, 0x11a3e; 0x11a50, 0x11a97; 0x11a9d, 0x11a9d; 1069 + 0x11ab0, 0x11af8; 0x11b60, 0x11b67; 0x11bc0, 0x11be0; 0x11c00, 0x11c08; 0x11c0a, 0x11c36; 1070 + 0x11c38, 0x11c3e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11cb6; 1071 + 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 1072 + 0x11d3f, 0x11d41; 0x11d43, 0x11d43; 0x11d46, 0x11d47; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 1073 + 0x11d6a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d96; 0x11d98, 0x11d98; 0x11db0, 0x11ddb; 1074 + 0x11ee0, 0x11ef6; 0x11f00, 0x11f10; 0x11f12, 0x11f3a; 0x11f3e, 0x11f40; 0x11fb0, 0x11fb0; 1075 + 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 1076 + 0x13441, 0x13446; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x1612e; 0x16800, 0x16a38; 1077 + 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 1078 + 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 0x16e40, 0x16e7f; 0x16ea0, 0x16eb8; 1079 + 0x16ebb, 0x16ed3; 0x16f00, 0x16f4a; 0x16f4f, 0x16f87; 0x16f8f, 0x16f9f; 0x16fe0, 0x16fe1; 1080 + 0x16fe3, 0x16fe3; 0x16ff0, 0x16ff6; 0x17000, 0x18cd5; 0x18cff, 0x18d1e; 0x18d80, 0x18df2; 1081 + 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 1082 + 0x1b150, 0x1b152; 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 1083 + 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9e, 0x1bc9e; 0x1d400, 0x1d454; 1084 + 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 1085 + 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 1086 + 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 1087 + 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 1088 + 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 1089 + 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df1e; 1090 + 0x1df25, 0x1df2a; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 1091 + 0x1e026, 0x1e02a; 0x1e030, 0x1e06d; 0x1e08f, 0x1e08f; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 1092 + 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4eb; 0x1e5d0, 0x1e5ed; 1093 + 0x1e5f0, 0x1e5f0; 0x1e6c0, 0x1e6de; 0x1e6e0, 0x1e6f5; 0x1e6fe, 0x1e6ff; 0x1e7e0, 0x1e7e6; 1094 + 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 1095 + 0x1e947, 0x1e947; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 1096 + 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 1097 + 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 1098 + 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 1099 + 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 1100 + 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 1101 + 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 1102 + 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189; 0x20000, 0x2a6df; 0x2a700, 0x2b81d; 1103 + 0x2b820, 0x2cead; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 1104 + 0x31350, 0x33479] 1105 + 1106 + let ascii_hex_digit = Sedlex_cset.of_list 1107 + [0x30, 0x39; 0x41, 0x46; 0x61, 0x66] 1108 + 1109 + let hex_digit = Sedlex_cset.of_list 1110 + [0x30, 0x39; 0x41, 0x46; 0x61, 0x66; 0xff10, 0xff19; 0xff21, 0xff26; 1111 + 0xff41, 0xff46] 1112 + 1113 + let id_continue = Sedlex_cset.of_list 1114 + [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 1115 + 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 1116 + 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 1117 + 0x300, 0x374; 0x376, 0x377; 0x37a, 0x37d; 0x37f, 0x37f; 0x386, 0x38a; 1118 + 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 1119 + 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 1120 + 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 1121 + 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x669; 0x66e, 0x6d3; 0x6d5, 0x6dc; 1122 + 0x6df, 0x6e8; 0x6ea, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x74a; 0x74d, 0x7b1; 1123 + 0x7c0, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x82d; 0x840, 0x85b; 1124 + 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88f; 0x897, 0x8e1; 0x8e3, 0x963; 1125 + 0x966, 0x96f; 0x971, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1126 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9c4; 0x9c7, 0x9c8; 1127 + 0x9cb, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e3; 0x9e6, 0x9f1; 1128 + 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 1129 + 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 1130 + 0xa3c, 0xa3c; 0xa3e, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 1131 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa75; 0xa81, 0xa83; 0xa85, 0xa8d; 1132 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1133 + 0xabc, 0xac5; 0xac7, 0xac9; 0xacb, 0xacd; 0xad0, 0xad0; 0xae0, 0xae3; 1134 + 0xae6, 0xaef; 0xaf9, 0xaff; 0xb01, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 1135 + 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb44; 1136 + 0xb47, 0xb48; 0xb4b, 0xb4d; 0xb55, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb63; 1137 + 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 1138 + 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 1139 + 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcd; 1140 + 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc0c; 0xc0e, 0xc10; 1141 + 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3c, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 1142 + 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5c, 0xc5d; 0xc60, 0xc63; 0xc66, 0xc6f; 1143 + 0xc80, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 1144 + 0xcb5, 0xcb9; 0xcbc, 0xcc4; 0xcc6, 0xcc8; 0xcca, 0xccd; 0xcd5, 0xcd6; 1145 + 0xcdc, 0xcde; 0xce0, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf3; 0xd00, 0xd0c; 1146 + 0xd0e, 0xd10; 0xd12, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4e; 0xd54, 0xd57; 1147 + 0xd5f, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd83; 0xd85, 0xd96; 1148 + 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 1149 + 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 1150 + 0xe01, 0xe3a; 0xe40, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 1151 + 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xebd; 0xec0, 0xec4; 1152 + 0xec6, 0xec6; 0xec8, 0xece; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 1153 + 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 1154 + 0xf3e, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf84; 0xf86, 0xf97; 0xf99, 0xfbc; 1155 + 0xfc6, 0xfc6; 0x1000, 0x1049; 0x1050, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1156 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1157 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 1158 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 1159 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 1160 + 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 1161 + 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f8; 0x1700, 0x1715; 0x171f, 0x1734; 1162 + 0x1740, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17d3; 1163 + 0x17d7, 0x17d7; 0x17dc, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x180f, 0x1819; 1164 + 0x1820, 0x1878; 0x1880, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x192b; 1165 + 0x1930, 0x193b; 0x1946, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 1166 + 0x19d0, 0x19da; 0x1a00, 0x1a1b; 0x1a20, 0x1a5e; 0x1a60, 0x1a7c; 0x1a7f, 0x1a89; 1167 + 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1add; 0x1ae0, 0x1aeb; 1168 + 0x1b00, 0x1b4c; 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1bf3; 0x1c00, 0x1c37; 1169 + 0x1c40, 0x1c49; 0x1c4d, 0x1c7d; 0x1c80, 0x1c8a; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 1170 + 0x1cd0, 0x1cd2; 0x1cd4, 0x1cfa; 0x1d00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 1171 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 1172 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 1173 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 1174 + 0x1ff6, 0x1ffc; 0x200c, 0x200d; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 1175 + 0x207f, 0x207f; 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 1176 + 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 1177 + 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 1178 + 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cf3; 1179 + 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 1180 + 0x2d7f, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 1181 + 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 1182 + 0x3005, 0x3007; 0x3021, 0x302f; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 1183 + 0x3099, 0x309f; 0x30a1, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 1184 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 1185 + 0xa610, 0xa62b; 0xa640, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa6f1; 0xa717, 0xa71f; 1186 + 0xa722, 0xa788; 0xa78b, 0xa7dc; 0xa7f1, 0xa827; 0xa82c, 0xa82c; 0xa840, 0xa873; 1187 + 0xa880, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f7; 0xa8fb, 0xa8fb; 0xa8fd, 0xa92d; 1188 + 0xa930, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa9c0; 0xa9cf, 0xa9d9; 0xa9e0, 0xa9fe; 1189 + 0xaa00, 0xaa36; 0xaa40, 0xaa4d; 0xaa50, 0xaa59; 0xaa60, 0xaa76; 0xaa7a, 0xaac2; 1190 + 0xaadb, 0xaadd; 0xaae0, 0xaaef; 0xaaf2, 0xaaf6; 0xab01, 0xab06; 0xab09, 0xab0e; 1191 + 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 0xab5c, 0xab69; 1192 + 0xab70, 0xabea; 0xabec, 0xabed; 0xabf0, 0xabf9; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 1193 + 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 1194 + 0xfb1d, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 1195 + 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 1196 + 0xfdf0, 0xfdfb; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 1197 + 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff10, 0xff19; 0xff21, 0xff3a; 0xff3f, 0xff3f; 1198 + 0xff41, 0xff5a; 0xff65, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 1199 + 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 1200 + 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x101fd, 0x101fd; 1201 + 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 0x10300, 0x1031f; 0x1032d, 0x1034a; 1202 + 0x10350, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 1203 + 0x10400, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 1204 + 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 1205 + 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x105c0, 0x105f3; 1206 + 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 1207 + 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 1208 + 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 1209 + 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10940, 0x10959; 0x10980, 0x109b7; 1210 + 0x109be, 0x109bf; 0x10a00, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a13; 0x10a15, 0x10a17; 1211 + 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 1212 + 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae6; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 1213 + 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d27; 1214 + 0x10d30, 0x10d39; 0x10d40, 0x10d65; 0x10d69, 0x10d6d; 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 1215 + 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec7; 0x10efa, 0x10f1c; 0x10f27, 0x10f27; 1216 + 0x10f30, 0x10f50; 0x10f70, 0x10f85; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11000, 0x11046; 1217 + 0x11066, 0x11075; 0x1107f, 0x110ba; 0x110c2, 0x110c2; 0x110d0, 0x110e8; 0x110f0, 0x110f9; 1218 + 0x11100, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11147; 0x11150, 0x11173; 0x11176, 0x11176; 1219 + 0x11180, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 1220 + 0x11213, 0x11237; 0x1123e, 0x11241; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 1221 + 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112ea; 0x112f0, 0x112f9; 0x11300, 0x11303; 1222 + 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 1223 + 0x11335, 0x11339; 0x1133b, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134d; 0x11350, 0x11350; 1224 + 0x11357, 0x11357; 0x1135d, 0x11363; 0x11366, 0x1136c; 0x11370, 0x11374; 0x11380, 0x11389; 1225 + 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113c0; 0x113c2, 0x113c2; 1226 + 0x113c5, 0x113c5; 0x113c7, 0x113ca; 0x113cc, 0x113d3; 0x113e1, 0x113e2; 0x11400, 0x1144a; 1227 + 0x11450, 0x11459; 0x1145e, 0x11461; 0x11480, 0x114c5; 0x114c7, 0x114c7; 0x114d0, 0x114d9; 1228 + 0x11580, 0x115b5; 0x115b8, 0x115c0; 0x115d8, 0x115dd; 0x11600, 0x11640; 0x11644, 0x11644; 1229 + 0x11650, 0x11659; 0x11680, 0x116b8; 0x116c0, 0x116c9; 0x116d0, 0x116e3; 0x11700, 0x1171a; 1230 + 0x1171d, 0x1172b; 0x11730, 0x11739; 0x11740, 0x11746; 0x11800, 0x1183a; 0x118a0, 0x118e9; 1231 + 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x11935; 1232 + 0x11937, 0x11938; 0x1193b, 0x11943; 0x11950, 0x11959; 0x119a0, 0x119a7; 0x119aa, 0x119d7; 1233 + 0x119da, 0x119e1; 0x119e3, 0x119e4; 0x11a00, 0x11a3e; 0x11a47, 0x11a47; 0x11a50, 0x11a99; 1234 + 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11b60, 0x11b67; 0x11bc0, 0x11be0; 0x11bf0, 0x11bf9; 1235 + 0x11c00, 0x11c08; 0x11c0a, 0x11c36; 0x11c38, 0x11c40; 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 1236 + 0x11c92, 0x11ca7; 0x11ca9, 0x11cb6; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d36; 1237 + 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d47; 0x11d50, 0x11d59; 0x11d60, 0x11d65; 1238 + 0x11d67, 0x11d68; 0x11d6a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d98; 0x11da0, 0x11da9; 1239 + 0x11db0, 0x11ddb; 0x11de0, 0x11de9; 0x11ee0, 0x11ef6; 0x11f00, 0x11f10; 0x11f12, 0x11f3a; 1240 + 0x11f3e, 0x11f42; 0x11f50, 0x11f5a; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 1241 + 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 0x13440, 0x13455; 0x13460, 0x143fa; 1242 + 0x14400, 0x14646; 0x16100, 0x16139; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 1243 + 0x16a70, 0x16abe; 0x16ac0, 0x16ac9; 0x16ad0, 0x16aed; 0x16af0, 0x16af4; 0x16b00, 0x16b36; 1244 + 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 1245 + 0x16d70, 0x16d79; 0x16e40, 0x16e7f; 0x16ea0, 0x16eb8; 0x16ebb, 0x16ed3; 0x16f00, 0x16f4a; 1246 + 0x16f4f, 0x16f87; 0x16f8f, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe4; 0x16ff0, 0x16ff6; 1247 + 0x17000, 0x18cd5; 0x18cff, 0x18d1e; 0x18d80, 0x18df2; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 1248 + 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 0x1b150, 0x1b152; 0x1b155, 0x1b155; 1249 + 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 1250 + 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1ccf0, 0x1ccf9; 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 1251 + 0x1d165, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 1252 + 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 1253 + 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 1254 + 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 1255 + 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 1256 + 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 1257 + 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 1258 + 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 1259 + 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 0x1df00, 0x1df1e; 0x1df25, 0x1df2a; 1260 + 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 1261 + 0x1e030, 0x1e06d; 0x1e08f, 0x1e08f; 0x1e100, 0x1e12c; 0x1e130, 0x1e13d; 0x1e140, 0x1e149; 1262 + 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ae; 0x1e2c0, 0x1e2f9; 0x1e4d0, 0x1e4f9; 0x1e5d0, 0x1e5fa; 1263 + 0x1e6c0, 0x1e6de; 0x1e6e0, 0x1e6f5; 0x1e6fe, 0x1e6ff; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 1264 + 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e94b; 1265 + 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 1266 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 1267 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 1268 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 1269 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 1270 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 1271 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 1272 + 0x20000, 0x2a6df; 0x2a700, 0x2b81d; 0x2b820, 0x2cead; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 1273 + 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0x31350, 0x33479; 0xe0100, 0xe01ef] 1274 + 1275 + let id_start = Sedlex_cset.of_list 1276 + [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 1277 + 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 1278 + 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x374; 0x376, 0x377; 0x37a, 0x37d; 1279 + 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 1280 + 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 1281 + 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x64a; 0x66e, 0x66f; 1282 + 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 1283 + 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 1284 + 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 1285 + 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 1286 + 0x889, 0x88f; 0x8a0, 0x8c9; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 1287 + 0x958, 0x961; 0x971, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1288 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 1289 + 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 1290 + 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 1291 + 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 1292 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1293 + 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 1294 + 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 1295 + 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 1296 + 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 1297 + 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 1298 + 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 1299 + 0xc58, 0xc5a; 0xc5c, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 1300 + 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 1301 + 0xcdc, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 1302 + 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 1303 + 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 1304 + 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe33; 0xe40, 0xe46; 0xe81, 0xe82; 1305 + 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 1306 + 0xeb2, 0xeb3; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 1307 + 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 1308 + 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 1309 + 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1310 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1311 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 1312 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 1313 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 1314 + 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 1315 + 0x16ee, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 1316 + 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1878; 1317 + 0x1880, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 1318 + 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 1319 + 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 1320 + 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c7d; 0x1c80, 0x1c8a; 1321 + 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 1322 + 0x1cfa, 0x1cfa; 0x1d00, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 1323 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 1324 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 1325 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 1326 + 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 1327 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 0x2124, 0x2124; 1328 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 1329 + 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 1330 + 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 1331 + 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 1332 + 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3007; 1333 + 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x309b, 0x309f; 1334 + 0x30a1, 0x30fa; 0x30fc, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 1335 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 1336 + 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66e; 0xa67f, 0xa69d; 0xa6a0, 0xa6ef; 1337 + 0xa717, 0xa71f; 0xa722, 0xa788; 0xa78b, 0xa7dc; 0xa7f1, 0xa801; 0xa803, 0xa805; 1338 + 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 1339 + 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 1340 + 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e6, 0xa9ef; 0xa9fa, 0xa9fe; 1341 + 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa76; 0xaa7a, 0xaa7a; 1342 + 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 1343 + 0xaac2, 0xaac2; 0xaadb, 0xaadd; 0xaae0, 0xaaea; 0xaaf2, 0xaaf4; 0xab01, 0xab06; 1344 + 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 1345 + 0xab5c, 0xab69; 0xab70, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 1346 + 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 1347 + 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 1348 + 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfd3d; 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 1349 + 0xfdf0, 0xfdfb; 0xfe70, 0xfe74; 0xfe76, 0xfefc; 0xff21, 0xff3a; 0xff41, 0xff5a; 1350 + 0xff66, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 1351 + 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 1352 + 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 0x10280, 0x1029c; 0x102a0, 0x102d0; 1353 + 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x10375; 0x10380, 0x1039d; 0x103a0, 0x103c3; 1354 + 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 0x104b0, 0x104d3; 0x104d8, 0x104fb; 1355 + 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 1356 + 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 1357 + 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 0x10780, 0x10785; 1358 + 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 0x1080a, 0x10835; 1359 + 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 0x10880, 0x1089e; 1360 + 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 0x10940, 0x10959; 1361 + 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 0x10a10, 0x10a13; 0x10a15, 0x10a17; 1362 + 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 1363 + 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 1364 + 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 0x10d4a, 0x10d65; 0x10d6f, 0x10d85; 1365 + 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec7; 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 1366 + 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 0x10fe0, 0x10ff6; 0x11003, 0x11037; 1367 + 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 0x110d0, 0x110e8; 0x11103, 0x11126; 1368 + 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 0x11176, 0x11176; 0x11183, 0x111b2; 1369 + 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x1122b; 1370 + 0x1123f, 0x11240; 0x11280, 0x11286; 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 1371 + 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 1372 + 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133d, 0x1133d; 0x11350, 0x11350; 1373 + 0x1135d, 0x11361; 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 1374 + 0x113b7, 0x113b7; 0x113d1, 0x113d1; 0x113d3, 0x113d3; 0x11400, 0x11434; 0x11447, 0x1144a; 1375 + 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 0x114c7, 0x114c7; 0x11580, 0x115ae; 1376 + 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 0x11680, 0x116aa; 0x116b8, 0x116b8; 1377 + 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 0x118a0, 0x118df; 0x118ff, 0x11906; 1378 + 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 0x11918, 0x1192f; 0x1193f, 0x1193f; 1379 + 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 0x119e1, 0x119e1; 0x119e3, 0x119e3; 1380 + 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 1381 + 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 1382 + 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 1383 + 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 1384 + 0x11db0, 0x11ddb; 0x11ee0, 0x11ef2; 0x11f02, 0x11f02; 0x11f04, 0x11f10; 0x11f12, 0x11f33; 1385 + 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 1386 + 0x13000, 0x1342f; 0x13441, 0x13446; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x1611d; 1387 + 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 1388 + 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 0x16e40, 0x16e7f; 1389 + 0x16ea0, 0x16eb8; 0x16ebb, 0x16ed3; 0x16f00, 0x16f4a; 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 1390 + 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16ff2, 0x16ff6; 0x17000, 0x18cd5; 0x18cff, 0x18d1e; 1391 + 0x18d80, 0x18df2; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 1392 + 0x1b132, 0x1b132; 0x1b150, 0x1b152; 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 1393 + 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 1394 + 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 1395 + 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 1396 + 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 1397 + 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 1398 + 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 1399 + 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df1e; 1400 + 0x1df25, 0x1df2a; 0x1e030, 0x1e06d; 0x1e100, 0x1e12c; 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 1401 + 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4eb; 0x1e5d0, 0x1e5ed; 0x1e5f0, 0x1e5f0; 1402 + 0x1e6c0, 0x1e6de; 0x1e6e0, 0x1e6e2; 0x1e6e4, 0x1e6e5; 0x1e6e7, 0x1e6ed; 0x1e6f0, 0x1e6f4; 1403 + 0x1e6fe, 0x1e6ff; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 1404 + 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 1405 + 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 1406 + 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 1407 + 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 1408 + 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 1409 + 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 1410 + 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 1411 + 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 0x2a700, 0x2b81d; 0x2b820, 0x2cead; 0x2ceb0, 0x2ebe0; 1412 + 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0x31350, 0x33479] 1413 + 1414 + let lowercase = Sedlex_cset.of_list 1415 + [0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 0xdf, 0xf6; 1416 + 0xf8, 0xff; 0x101, 0x101; 0x103, 0x103; 0x105, 0x105; 0x107, 0x107; 1417 + 0x109, 0x109; 0x10b, 0x10b; 0x10d, 0x10d; 0x10f, 0x10f; 0x111, 0x111; 1418 + 0x113, 0x113; 0x115, 0x115; 0x117, 0x117; 0x119, 0x119; 0x11b, 0x11b; 1419 + 0x11d, 0x11d; 0x11f, 0x11f; 0x121, 0x121; 0x123, 0x123; 0x125, 0x125; 1420 + 0x127, 0x127; 0x129, 0x129; 0x12b, 0x12b; 0x12d, 0x12d; 0x12f, 0x12f; 1421 + 0x131, 0x131; 0x133, 0x133; 0x135, 0x135; 0x137, 0x138; 0x13a, 0x13a; 1422 + 0x13c, 0x13c; 0x13e, 0x13e; 0x140, 0x140; 0x142, 0x142; 0x144, 0x144; 1423 + 0x146, 0x146; 0x148, 0x149; 0x14b, 0x14b; 0x14d, 0x14d; 0x14f, 0x14f; 1424 + 0x151, 0x151; 0x153, 0x153; 0x155, 0x155; 0x157, 0x157; 0x159, 0x159; 1425 + 0x15b, 0x15b; 0x15d, 0x15d; 0x15f, 0x15f; 0x161, 0x161; 0x163, 0x163; 1426 + 0x165, 0x165; 0x167, 0x167; 0x169, 0x169; 0x16b, 0x16b; 0x16d, 0x16d; 1427 + 0x16f, 0x16f; 0x171, 0x171; 0x173, 0x173; 0x175, 0x175; 0x177, 0x177; 1428 + 0x17a, 0x17a; 0x17c, 0x17c; 0x17e, 0x180; 0x183, 0x183; 0x185, 0x185; 1429 + 0x188, 0x188; 0x18c, 0x18d; 0x192, 0x192; 0x195, 0x195; 0x199, 0x19b; 1430 + 0x19e, 0x19e; 0x1a1, 0x1a1; 0x1a3, 0x1a3; 0x1a5, 0x1a5; 0x1a8, 0x1a8; 1431 + 0x1aa, 0x1ab; 0x1ad, 0x1ad; 0x1b0, 0x1b0; 0x1b4, 0x1b4; 0x1b6, 0x1b6; 1432 + 0x1b9, 0x1ba; 0x1bd, 0x1bf; 0x1c6, 0x1c6; 0x1c9, 0x1c9; 0x1cc, 0x1cc; 1433 + 0x1ce, 0x1ce; 0x1d0, 0x1d0; 0x1d2, 0x1d2; 0x1d4, 0x1d4; 0x1d6, 0x1d6; 1434 + 0x1d8, 0x1d8; 0x1da, 0x1da; 0x1dc, 0x1dd; 0x1df, 0x1df; 0x1e1, 0x1e1; 1435 + 0x1e3, 0x1e3; 0x1e5, 0x1e5; 0x1e7, 0x1e7; 0x1e9, 0x1e9; 0x1eb, 0x1eb; 1436 + 0x1ed, 0x1ed; 0x1ef, 0x1f0; 0x1f3, 0x1f3; 0x1f5, 0x1f5; 0x1f9, 0x1f9; 1437 + 0x1fb, 0x1fb; 0x1fd, 0x1fd; 0x1ff, 0x1ff; 0x201, 0x201; 0x203, 0x203; 1438 + 0x205, 0x205; 0x207, 0x207; 0x209, 0x209; 0x20b, 0x20b; 0x20d, 0x20d; 1439 + 0x20f, 0x20f; 0x211, 0x211; 0x213, 0x213; 0x215, 0x215; 0x217, 0x217; 1440 + 0x219, 0x219; 0x21b, 0x21b; 0x21d, 0x21d; 0x21f, 0x21f; 0x221, 0x221; 1441 + 0x223, 0x223; 0x225, 0x225; 0x227, 0x227; 0x229, 0x229; 0x22b, 0x22b; 1442 + 0x22d, 0x22d; 0x22f, 0x22f; 0x231, 0x231; 0x233, 0x239; 0x23c, 0x23c; 1443 + 0x23f, 0x240; 0x242, 0x242; 0x247, 0x247; 0x249, 0x249; 0x24b, 0x24b; 1444 + 0x24d, 0x24d; 0x24f, 0x293; 0x296, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 1445 + 0x345, 0x345; 0x371, 0x371; 0x373, 0x373; 0x377, 0x377; 0x37a, 0x37d; 1446 + 0x390, 0x390; 0x3ac, 0x3ce; 0x3d0, 0x3d1; 0x3d5, 0x3d7; 0x3d9, 0x3d9; 1447 + 0x3db, 0x3db; 0x3dd, 0x3dd; 0x3df, 0x3df; 0x3e1, 0x3e1; 0x3e3, 0x3e3; 1448 + 0x3e5, 0x3e5; 0x3e7, 0x3e7; 0x3e9, 0x3e9; 0x3eb, 0x3eb; 0x3ed, 0x3ed; 1449 + 0x3ef, 0x3f3; 0x3f5, 0x3f5; 0x3f8, 0x3f8; 0x3fb, 0x3fc; 0x430, 0x45f; 1450 + 0x461, 0x461; 0x463, 0x463; 0x465, 0x465; 0x467, 0x467; 0x469, 0x469; 1451 + 0x46b, 0x46b; 0x46d, 0x46d; 0x46f, 0x46f; 0x471, 0x471; 0x473, 0x473; 1452 + 0x475, 0x475; 0x477, 0x477; 0x479, 0x479; 0x47b, 0x47b; 0x47d, 0x47d; 1453 + 0x47f, 0x47f; 0x481, 0x481; 0x48b, 0x48b; 0x48d, 0x48d; 0x48f, 0x48f; 1454 + 0x491, 0x491; 0x493, 0x493; 0x495, 0x495; 0x497, 0x497; 0x499, 0x499; 1455 + 0x49b, 0x49b; 0x49d, 0x49d; 0x49f, 0x49f; 0x4a1, 0x4a1; 0x4a3, 0x4a3; 1456 + 0x4a5, 0x4a5; 0x4a7, 0x4a7; 0x4a9, 0x4a9; 0x4ab, 0x4ab; 0x4ad, 0x4ad; 1457 + 0x4af, 0x4af; 0x4b1, 0x4b1; 0x4b3, 0x4b3; 0x4b5, 0x4b5; 0x4b7, 0x4b7; 1458 + 0x4b9, 0x4b9; 0x4bb, 0x4bb; 0x4bd, 0x4bd; 0x4bf, 0x4bf; 0x4c2, 0x4c2; 1459 + 0x4c4, 0x4c4; 0x4c6, 0x4c6; 0x4c8, 0x4c8; 0x4ca, 0x4ca; 0x4cc, 0x4cc; 1460 + 0x4ce, 0x4cf; 0x4d1, 0x4d1; 0x4d3, 0x4d3; 0x4d5, 0x4d5; 0x4d7, 0x4d7; 1461 + 0x4d9, 0x4d9; 0x4db, 0x4db; 0x4dd, 0x4dd; 0x4df, 0x4df; 0x4e1, 0x4e1; 1462 + 0x4e3, 0x4e3; 0x4e5, 0x4e5; 0x4e7, 0x4e7; 0x4e9, 0x4e9; 0x4eb, 0x4eb; 1463 + 0x4ed, 0x4ed; 0x4ef, 0x4ef; 0x4f1, 0x4f1; 0x4f3, 0x4f3; 0x4f5, 0x4f5; 1464 + 0x4f7, 0x4f7; 0x4f9, 0x4f9; 0x4fb, 0x4fb; 0x4fd, 0x4fd; 0x4ff, 0x4ff; 1465 + 0x501, 0x501; 0x503, 0x503; 0x505, 0x505; 0x507, 0x507; 0x509, 0x509; 1466 + 0x50b, 0x50b; 0x50d, 0x50d; 0x50f, 0x50f; 0x511, 0x511; 0x513, 0x513; 1467 + 0x515, 0x515; 0x517, 0x517; 0x519, 0x519; 0x51b, 0x51b; 0x51d, 0x51d; 1468 + 0x51f, 0x51f; 0x521, 0x521; 0x523, 0x523; 0x525, 0x525; 0x527, 0x527; 1469 + 0x529, 0x529; 0x52b, 0x52b; 0x52d, 0x52d; 0x52f, 0x52f; 0x560, 0x588; 1470 + 0x10d0, 0x10fa; 0x10fc, 0x10ff; 0x13f8, 0x13fd; 0x1c80, 0x1c88; 0x1c8a, 0x1c8a; 1471 + 0x1d00, 0x1dbf; 0x1e01, 0x1e01; 0x1e03, 0x1e03; 0x1e05, 0x1e05; 0x1e07, 0x1e07; 1472 + 0x1e09, 0x1e09; 0x1e0b, 0x1e0b; 0x1e0d, 0x1e0d; 0x1e0f, 0x1e0f; 0x1e11, 0x1e11; 1473 + 0x1e13, 0x1e13; 0x1e15, 0x1e15; 0x1e17, 0x1e17; 0x1e19, 0x1e19; 0x1e1b, 0x1e1b; 1474 + 0x1e1d, 0x1e1d; 0x1e1f, 0x1e1f; 0x1e21, 0x1e21; 0x1e23, 0x1e23; 0x1e25, 0x1e25; 1475 + 0x1e27, 0x1e27; 0x1e29, 0x1e29; 0x1e2b, 0x1e2b; 0x1e2d, 0x1e2d; 0x1e2f, 0x1e2f; 1476 + 0x1e31, 0x1e31; 0x1e33, 0x1e33; 0x1e35, 0x1e35; 0x1e37, 0x1e37; 0x1e39, 0x1e39; 1477 + 0x1e3b, 0x1e3b; 0x1e3d, 0x1e3d; 0x1e3f, 0x1e3f; 0x1e41, 0x1e41; 0x1e43, 0x1e43; 1478 + 0x1e45, 0x1e45; 0x1e47, 0x1e47; 0x1e49, 0x1e49; 0x1e4b, 0x1e4b; 0x1e4d, 0x1e4d; 1479 + 0x1e4f, 0x1e4f; 0x1e51, 0x1e51; 0x1e53, 0x1e53; 0x1e55, 0x1e55; 0x1e57, 0x1e57; 1480 + 0x1e59, 0x1e59; 0x1e5b, 0x1e5b; 0x1e5d, 0x1e5d; 0x1e5f, 0x1e5f; 0x1e61, 0x1e61; 1481 + 0x1e63, 0x1e63; 0x1e65, 0x1e65; 0x1e67, 0x1e67; 0x1e69, 0x1e69; 0x1e6b, 0x1e6b; 1482 + 0x1e6d, 0x1e6d; 0x1e6f, 0x1e6f; 0x1e71, 0x1e71; 0x1e73, 0x1e73; 0x1e75, 0x1e75; 1483 + 0x1e77, 0x1e77; 0x1e79, 0x1e79; 0x1e7b, 0x1e7b; 0x1e7d, 0x1e7d; 0x1e7f, 0x1e7f; 1484 + 0x1e81, 0x1e81; 0x1e83, 0x1e83; 0x1e85, 0x1e85; 0x1e87, 0x1e87; 0x1e89, 0x1e89; 1485 + 0x1e8b, 0x1e8b; 0x1e8d, 0x1e8d; 0x1e8f, 0x1e8f; 0x1e91, 0x1e91; 0x1e93, 0x1e93; 1486 + 0x1e95, 0x1e9d; 0x1e9f, 0x1e9f; 0x1ea1, 0x1ea1; 0x1ea3, 0x1ea3; 0x1ea5, 0x1ea5; 1487 + 0x1ea7, 0x1ea7; 0x1ea9, 0x1ea9; 0x1eab, 0x1eab; 0x1ead, 0x1ead; 0x1eaf, 0x1eaf; 1488 + 0x1eb1, 0x1eb1; 0x1eb3, 0x1eb3; 0x1eb5, 0x1eb5; 0x1eb7, 0x1eb7; 0x1eb9, 0x1eb9; 1489 + 0x1ebb, 0x1ebb; 0x1ebd, 0x1ebd; 0x1ebf, 0x1ebf; 0x1ec1, 0x1ec1; 0x1ec3, 0x1ec3; 1490 + 0x1ec5, 0x1ec5; 0x1ec7, 0x1ec7; 0x1ec9, 0x1ec9; 0x1ecb, 0x1ecb; 0x1ecd, 0x1ecd; 1491 + 0x1ecf, 0x1ecf; 0x1ed1, 0x1ed1; 0x1ed3, 0x1ed3; 0x1ed5, 0x1ed5; 0x1ed7, 0x1ed7; 1492 + 0x1ed9, 0x1ed9; 0x1edb, 0x1edb; 0x1edd, 0x1edd; 0x1edf, 0x1edf; 0x1ee1, 0x1ee1; 1493 + 0x1ee3, 0x1ee3; 0x1ee5, 0x1ee5; 0x1ee7, 0x1ee7; 0x1ee9, 0x1ee9; 0x1eeb, 0x1eeb; 1494 + 0x1eed, 0x1eed; 0x1eef, 0x1eef; 0x1ef1, 0x1ef1; 0x1ef3, 0x1ef3; 0x1ef5, 0x1ef5; 1495 + 0x1ef7, 0x1ef7; 0x1ef9, 0x1ef9; 0x1efb, 0x1efb; 0x1efd, 0x1efd; 0x1eff, 0x1f07; 1496 + 0x1f10, 0x1f15; 0x1f20, 0x1f27; 0x1f30, 0x1f37; 0x1f40, 0x1f45; 0x1f50, 0x1f57; 1497 + 0x1f60, 0x1f67; 0x1f70, 0x1f7d; 0x1f80, 0x1f87; 0x1f90, 0x1f97; 0x1fa0, 0x1fa7; 1498 + 0x1fb0, 0x1fb4; 0x1fb6, 0x1fb7; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 0x1fc6, 0x1fc7; 1499 + 0x1fd0, 0x1fd3; 0x1fd6, 0x1fd7; 0x1fe0, 0x1fe7; 0x1ff2, 0x1ff4; 0x1ff6, 0x1ff7; 1500 + 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x210a, 0x210a; 0x210e, 0x210f; 1501 + 0x2113, 0x2113; 0x212f, 0x212f; 0x2134, 0x2134; 0x2139, 0x2139; 0x213c, 0x213d; 1502 + 0x2146, 0x2149; 0x214e, 0x214e; 0x2170, 0x217f; 0x2184, 0x2184; 0x24d0, 0x24e9; 1503 + 0x2c30, 0x2c5f; 0x2c61, 0x2c61; 0x2c65, 0x2c66; 0x2c68, 0x2c68; 0x2c6a, 0x2c6a; 1504 + 0x2c6c, 0x2c6c; 0x2c71, 0x2c71; 0x2c73, 0x2c74; 0x2c76, 0x2c7d; 0x2c81, 0x2c81; 1505 + 0x2c83, 0x2c83; 0x2c85, 0x2c85; 0x2c87, 0x2c87; 0x2c89, 0x2c89; 0x2c8b, 0x2c8b; 1506 + 0x2c8d, 0x2c8d; 0x2c8f, 0x2c8f; 0x2c91, 0x2c91; 0x2c93, 0x2c93; 0x2c95, 0x2c95; 1507 + 0x2c97, 0x2c97; 0x2c99, 0x2c99; 0x2c9b, 0x2c9b; 0x2c9d, 0x2c9d; 0x2c9f, 0x2c9f; 1508 + 0x2ca1, 0x2ca1; 0x2ca3, 0x2ca3; 0x2ca5, 0x2ca5; 0x2ca7, 0x2ca7; 0x2ca9, 0x2ca9; 1509 + 0x2cab, 0x2cab; 0x2cad, 0x2cad; 0x2caf, 0x2caf; 0x2cb1, 0x2cb1; 0x2cb3, 0x2cb3; 1510 + 0x2cb5, 0x2cb5; 0x2cb7, 0x2cb7; 0x2cb9, 0x2cb9; 0x2cbb, 0x2cbb; 0x2cbd, 0x2cbd; 1511 + 0x2cbf, 0x2cbf; 0x2cc1, 0x2cc1; 0x2cc3, 0x2cc3; 0x2cc5, 0x2cc5; 0x2cc7, 0x2cc7; 1512 + 0x2cc9, 0x2cc9; 0x2ccb, 0x2ccb; 0x2ccd, 0x2ccd; 0x2ccf, 0x2ccf; 0x2cd1, 0x2cd1; 1513 + 0x2cd3, 0x2cd3; 0x2cd5, 0x2cd5; 0x2cd7, 0x2cd7; 0x2cd9, 0x2cd9; 0x2cdb, 0x2cdb; 1514 + 0x2cdd, 0x2cdd; 0x2cdf, 0x2cdf; 0x2ce1, 0x2ce1; 0x2ce3, 0x2ce4; 0x2cec, 0x2cec; 1515 + 0x2cee, 0x2cee; 0x2cf3, 0x2cf3; 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 1516 + 0xa641, 0xa641; 0xa643, 0xa643; 0xa645, 0xa645; 0xa647, 0xa647; 0xa649, 0xa649; 1517 + 0xa64b, 0xa64b; 0xa64d, 0xa64d; 0xa64f, 0xa64f; 0xa651, 0xa651; 0xa653, 0xa653; 1518 + 0xa655, 0xa655; 0xa657, 0xa657; 0xa659, 0xa659; 0xa65b, 0xa65b; 0xa65d, 0xa65d; 1519 + 0xa65f, 0xa65f; 0xa661, 0xa661; 0xa663, 0xa663; 0xa665, 0xa665; 0xa667, 0xa667; 1520 + 0xa669, 0xa669; 0xa66b, 0xa66b; 0xa66d, 0xa66d; 0xa681, 0xa681; 0xa683, 0xa683; 1521 + 0xa685, 0xa685; 0xa687, 0xa687; 0xa689, 0xa689; 0xa68b, 0xa68b; 0xa68d, 0xa68d; 1522 + 0xa68f, 0xa68f; 0xa691, 0xa691; 0xa693, 0xa693; 0xa695, 0xa695; 0xa697, 0xa697; 1523 + 0xa699, 0xa699; 0xa69b, 0xa69d; 0xa723, 0xa723; 0xa725, 0xa725; 0xa727, 0xa727; 1524 + 0xa729, 0xa729; 0xa72b, 0xa72b; 0xa72d, 0xa72d; 0xa72f, 0xa731; 0xa733, 0xa733; 1525 + 0xa735, 0xa735; 0xa737, 0xa737; 0xa739, 0xa739; 0xa73b, 0xa73b; 0xa73d, 0xa73d; 1526 + 0xa73f, 0xa73f; 0xa741, 0xa741; 0xa743, 0xa743; 0xa745, 0xa745; 0xa747, 0xa747; 1527 + 0xa749, 0xa749; 0xa74b, 0xa74b; 0xa74d, 0xa74d; 0xa74f, 0xa74f; 0xa751, 0xa751; 1528 + 0xa753, 0xa753; 0xa755, 0xa755; 0xa757, 0xa757; 0xa759, 0xa759; 0xa75b, 0xa75b; 1529 + 0xa75d, 0xa75d; 0xa75f, 0xa75f; 0xa761, 0xa761; 0xa763, 0xa763; 0xa765, 0xa765; 1530 + 0xa767, 0xa767; 0xa769, 0xa769; 0xa76b, 0xa76b; 0xa76d, 0xa76d; 0xa76f, 0xa778; 1531 + 0xa77a, 0xa77a; 0xa77c, 0xa77c; 0xa77f, 0xa77f; 0xa781, 0xa781; 0xa783, 0xa783; 1532 + 0xa785, 0xa785; 0xa787, 0xa787; 0xa78c, 0xa78c; 0xa78e, 0xa78e; 0xa791, 0xa791; 1533 + 0xa793, 0xa795; 0xa797, 0xa797; 0xa799, 0xa799; 0xa79b, 0xa79b; 0xa79d, 0xa79d; 1534 + 0xa79f, 0xa79f; 0xa7a1, 0xa7a1; 0xa7a3, 0xa7a3; 0xa7a5, 0xa7a5; 0xa7a7, 0xa7a7; 1535 + 0xa7a9, 0xa7a9; 0xa7af, 0xa7af; 0xa7b5, 0xa7b5; 0xa7b7, 0xa7b7; 0xa7b9, 0xa7b9; 1536 + 0xa7bb, 0xa7bb; 0xa7bd, 0xa7bd; 0xa7bf, 0xa7bf; 0xa7c1, 0xa7c1; 0xa7c3, 0xa7c3; 1537 + 0xa7c8, 0xa7c8; 0xa7ca, 0xa7ca; 0xa7cd, 0xa7cd; 0xa7cf, 0xa7cf; 0xa7d1, 0xa7d1; 1538 + 0xa7d3, 0xa7d3; 0xa7d5, 0xa7d5; 0xa7d7, 0xa7d7; 0xa7d9, 0xa7d9; 0xa7db, 0xa7db; 1539 + 0xa7f1, 0xa7f4; 0xa7f6, 0xa7f6; 0xa7f8, 0xa7fa; 0xab30, 0xab5a; 0xab5c, 0xab69; 1540 + 0xab70, 0xabbf; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xff41, 0xff5a; 0x10428, 0x1044f; 1541 + 0x104d8, 0x104fb; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 0x105bb, 0x105bc; 1542 + 0x10780, 0x10780; 0x10783, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10cc0, 0x10cf2; 1543 + 0x10d70, 0x10d85; 0x118c0, 0x118df; 0x16e60, 0x16e7f; 0x16ebb, 0x16ed3; 0x1d41a, 0x1d433; 1544 + 0x1d44e, 0x1d454; 0x1d456, 0x1d467; 0x1d482, 0x1d49b; 0x1d4b6, 0x1d4b9; 0x1d4bb, 0x1d4bb; 1545 + 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d4cf; 0x1d4ea, 0x1d503; 0x1d51e, 0x1d537; 0x1d552, 0x1d56b; 1546 + 0x1d586, 0x1d59f; 0x1d5ba, 0x1d5d3; 0x1d5ee, 0x1d607; 0x1d622, 0x1d63b; 0x1d656, 0x1d66f; 1547 + 0x1d68a, 0x1d6a5; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6e1; 0x1d6fc, 0x1d714; 0x1d716, 0x1d71b; 1548 + 0x1d736, 0x1d74e; 0x1d750, 0x1d755; 0x1d770, 0x1d788; 0x1d78a, 0x1d78f; 0x1d7aa, 0x1d7c2; 1549 + 0x1d7c4, 0x1d7c9; 0x1d7cb, 0x1d7cb; 0x1df00, 0x1df09; 0x1df0b, 0x1df1e; 0x1df25, 0x1df2a; 1550 + 0x1e030, 0x1e06d; 0x1e922, 0x1e943] 1551 + 1552 + let math = Sedlex_cset.of_list 1553 + [0x2b, 0x2b; 0x3c, 0x3e; 0x5e, 0x5e; 0x7c, 0x7c; 0x7e, 0x7e; 1554 + 0xac, 0xac; 0xb1, 0xb1; 0xd7, 0xd7; 0xf7, 0xf7; 0x3d0, 0x3d2; 1555 + 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f6; 0x606, 0x608; 0x2016, 0x2016; 1556 + 0x2032, 0x2034; 0x2040, 0x2040; 0x2044, 0x2044; 0x2052, 0x2052; 0x2061, 0x2064; 1557 + 0x207a, 0x207e; 0x208a, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 1558 + 0x20eb, 0x20ef; 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 1559 + 0x2118, 0x211d; 0x2124, 0x2124; 0x2128, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 1560 + 0x2133, 0x2138; 0x213c, 0x2149; 0x214b, 0x214b; 0x2190, 0x21a7; 0x21a9, 0x21ae; 1561 + 0x21b0, 0x21b1; 0x21b6, 0x21b7; 0x21bc, 0x21db; 0x21dd, 0x21dd; 0x21e4, 0x21e5; 1562 + 0x21f4, 0x22ff; 0x2308, 0x230b; 0x2320, 0x2321; 0x237c, 0x237c; 0x239b, 0x23b5; 1563 + 0x23b7, 0x23b7; 0x23d0, 0x23d0; 0x23dc, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b7; 1564 + 0x25bc, 0x25c1; 0x25c6, 0x25c7; 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 1565 + 0x25e4, 0x25e4; 0x25e7, 0x25ec; 0x25f8, 0x25ff; 0x2605, 0x2606; 0x2640, 0x2640; 1566 + 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266f; 0x27c0, 0x27ff; 0x2900, 0x2aff; 1567 + 0x2b30, 0x2b44; 0x2b47, 0x2b4c; 0xfb29, 0xfb29; 0xfe61, 0xfe66; 0xfe68, 0xfe68; 1568 + 0xff0b, 0xff0b; 0xff1c, 0xff1e; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 0xff5c, 0xff5c; 1569 + 0xff5e, 0xff5e; 0xffe2, 0xffe2; 0xffe9, 0xffec; 0x10d8e, 0x10d8f; 0x1cef0, 0x1cef0; 1570 + 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 1571 + 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 1572 + 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 1573 + 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d7cb; 1574 + 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 1575 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 1576 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 1577 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 1578 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 1579 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 1580 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x1eef0, 0x1eef1; 1581 + 0x1f8d0, 0x1f8d8] 1582 + 1583 + let other_alphabetic = Sedlex_cset.of_list 1584 + [0x345, 0x345; 0x363, 0x36f; 0x5b0, 0x5bd; 0x5bf, 0x5bf; 0x5c1, 0x5c2; 1585 + 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x610, 0x61a; 0x64b, 0x657; 0x659, 0x65f; 1586 + 0x670, 0x670; 0x6d6, 0x6dc; 0x6e1, 0x6e4; 0x6e7, 0x6e8; 0x6ed, 0x6ed; 1587 + 0x711, 0x711; 0x730, 0x73f; 0x7a6, 0x7b0; 0x816, 0x817; 0x81b, 0x823; 1588 + 0x825, 0x827; 0x829, 0x82c; 0x897, 0x897; 0x8d4, 0x8df; 0x8e3, 0x8e9; 1589 + 0x8f0, 0x903; 0x93a, 0x93b; 0x93e, 0x94c; 0x94e, 0x94f; 0x955, 0x957; 1590 + 0x962, 0x963; 0x981, 0x983; 0x9be, 0x9c4; 0x9c7, 0x9c8; 0x9cb, 0x9cc; 1591 + 0x9d7, 0x9d7; 0x9e2, 0x9e3; 0xa01, 0xa03; 0xa3e, 0xa42; 0xa47, 0xa48; 1592 + 0xa4b, 0xa4c; 0xa51, 0xa51; 0xa70, 0xa71; 0xa75, 0xa75; 0xa81, 0xa83; 1593 + 0xabe, 0xac5; 0xac7, 0xac9; 0xacb, 0xacc; 0xae2, 0xae3; 0xafa, 0xafc; 1594 + 0xb01, 0xb03; 0xb3e, 0xb44; 0xb47, 0xb48; 0xb4b, 0xb4c; 0xb56, 0xb57; 1595 + 0xb62, 0xb63; 0xb82, 0xb82; 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcc; 1596 + 0xbd7, 0xbd7; 0xc00, 0xc04; 0xc3e, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4c; 1597 + 0xc55, 0xc56; 0xc62, 0xc63; 0xc81, 0xc83; 0xcbe, 0xcc4; 0xcc6, 0xcc8; 1598 + 0xcca, 0xccc; 0xcd5, 0xcd6; 0xce2, 0xce3; 0xcf3, 0xcf3; 0xd00, 0xd03; 1599 + 0xd3e, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4c; 0xd57, 0xd57; 0xd62, 0xd63; 1600 + 0xd81, 0xd83; 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xdf2, 0xdf3; 1601 + 0xe31, 0xe31; 0xe34, 0xe3a; 0xe4d, 0xe4d; 0xeb1, 0xeb1; 0xeb4, 0xeb9; 1602 + 0xebb, 0xebc; 0xecd, 0xecd; 0xf71, 0xf83; 0xf8d, 0xf97; 0xf99, 0xfbc; 1603 + 0x102b, 0x1036; 0x1038, 0x1038; 0x103b, 0x103e; 0x1056, 0x1059; 0x105e, 0x1060; 1604 + 0x1062, 0x1064; 0x1067, 0x106d; 0x1071, 0x1074; 0x1082, 0x108d; 0x108f, 0x108f; 1605 + 0x109a, 0x109d; 0x1712, 0x1713; 0x1732, 0x1733; 0x1752, 0x1753; 0x1772, 0x1773; 1606 + 0x17b6, 0x17c8; 0x1885, 0x1886; 0x18a9, 0x18a9; 0x1920, 0x192b; 0x1930, 0x1938; 1607 + 0x1a17, 0x1a1b; 0x1a55, 0x1a5e; 0x1a61, 0x1a74; 0x1abf, 0x1ac0; 0x1acc, 0x1ace; 1608 + 0x1b00, 0x1b04; 0x1b35, 0x1b43; 0x1b80, 0x1b82; 0x1ba1, 0x1ba9; 0x1bac, 0x1bad; 1609 + 0x1be7, 0x1bf1; 0x1c24, 0x1c36; 0x1dd3, 0x1df4; 0x24b6, 0x24e9; 0x2de0, 0x2dff; 1610 + 0xa674, 0xa67b; 0xa69e, 0xa69f; 0xa802, 0xa802; 0xa80b, 0xa80b; 0xa823, 0xa827; 1611 + 0xa880, 0xa881; 0xa8b4, 0xa8c3; 0xa8c5, 0xa8c5; 0xa8ff, 0xa8ff; 0xa926, 0xa92a; 1612 + 0xa947, 0xa952; 0xa980, 0xa983; 0xa9b4, 0xa9bf; 0xa9e5, 0xa9e5; 0xaa29, 0xaa36; 1613 + 0xaa43, 0xaa43; 0xaa4c, 0xaa4d; 0xaa7b, 0xaa7d; 0xaab0, 0xaab0; 0xaab2, 0xaab4; 1614 + 0xaab7, 0xaab8; 0xaabe, 0xaabe; 0xaaeb, 0xaaef; 0xaaf5, 0xaaf5; 0xabe3, 0xabea; 1615 + 0xfb1e, 0xfb1e; 0x10376, 0x1037a; 0x10a01, 0x10a03; 0x10a05, 0x10a06; 0x10a0c, 0x10a0f; 1616 + 0x10d24, 0x10d27; 0x10d69, 0x10d69; 0x10eab, 0x10eac; 0x10efa, 0x10efc; 0x11000, 0x11002; 1617 + 0x11038, 0x11045; 0x11073, 0x11074; 0x11080, 0x11082; 0x110b0, 0x110b8; 0x110c2, 0x110c2; 1618 + 0x11100, 0x11102; 0x11127, 0x11132; 0x11145, 0x11146; 0x11180, 0x11182; 0x111b3, 0x111bf; 1619 + 0x111ce, 0x111cf; 0x1122c, 0x11234; 0x11237, 0x11237; 0x1123e, 0x1123e; 0x11241, 0x11241; 1620 + 0x112df, 0x112e8; 0x11300, 0x11303; 0x1133e, 0x11344; 0x11347, 0x11348; 0x1134b, 0x1134c; 1621 + 0x11357, 0x11357; 0x11362, 0x11363; 0x113b8, 0x113c0; 0x113c2, 0x113c2; 0x113c5, 0x113c5; 1622 + 0x113c7, 0x113ca; 0x113cc, 0x113cd; 0x11435, 0x11441; 0x11443, 0x11445; 0x114b0, 0x114c1; 1623 + 0x115af, 0x115b5; 0x115b8, 0x115be; 0x115dc, 0x115dd; 0x11630, 0x1163e; 0x11640, 0x11640; 1624 + 0x116ab, 0x116b5; 0x1171d, 0x1172a; 0x1182c, 0x11838; 0x11930, 0x11935; 0x11937, 0x11938; 1625 + 0x1193b, 0x1193c; 0x11940, 0x11940; 0x11942, 0x11942; 0x119d1, 0x119d7; 0x119da, 0x119df; 1626 + 0x119e4, 0x119e4; 0x11a01, 0x11a0a; 0x11a35, 0x11a39; 0x11a3b, 0x11a3e; 0x11a51, 0x11a5b; 1627 + 0x11a8a, 0x11a97; 0x11b60, 0x11b67; 0x11c2f, 0x11c36; 0x11c38, 0x11c3e; 0x11c92, 0x11ca7; 1628 + 0x11ca9, 0x11cb6; 0x11d31, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d41; 1629 + 0x11d43, 0x11d43; 0x11d47, 0x11d47; 0x11d8a, 0x11d8e; 0x11d90, 0x11d91; 0x11d93, 0x11d96; 1630 + 0x11ef3, 0x11ef6; 0x11f00, 0x11f01; 0x11f03, 0x11f03; 0x11f34, 0x11f3a; 0x11f3e, 0x11f40; 1631 + 0x1611e, 0x1612e; 0x16f4f, 0x16f4f; 0x16f51, 0x16f87; 0x16f8f, 0x16f92; 0x16ff0, 0x16ff1; 1632 + 0x1bc9e, 0x1bc9e; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 0x1e023, 0x1e024; 1633 + 0x1e026, 0x1e02a; 0x1e08f, 0x1e08f; 0x1e6e3, 0x1e6e3; 0x1e6e6, 0x1e6e6; 0x1e6ee, 0x1e6ef; 1634 + 0x1e6f5, 0x1e6f5; 0x1e947, 0x1e947; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189] 1635 + 1636 + let other_lowercase = Sedlex_cset.of_list 1637 + [0xaa, 0xaa; 0xba, 0xba; 0x2b0, 0x2b8; 0x2c0, 0x2c1; 0x2e0, 0x2e4; 1638 + 0x345, 0x345; 0x37a, 0x37a; 0x10fc, 0x10fc; 0x1d2c, 0x1d6a; 0x1d78, 0x1d78; 1639 + 0x1d9b, 0x1dbf; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2170, 0x217f; 1640 + 0x24d0, 0x24e9; 0x2c7c, 0x2c7d; 0xa69c, 0xa69d; 0xa770, 0xa770; 0xa7f1, 0xa7f4; 1641 + 0xa7f8, 0xa7f9; 0xab5c, 0xab5f; 0xab69, 0xab69; 0x10780, 0x10780; 0x10783, 0x10785; 1642 + 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x1e030, 0x1e06d] 1643 + 1644 + let other_math = Sedlex_cset.of_list 1645 + [0x5e, 0x5e; 0x3d0, 0x3d2; 0x3d5, 0x3d5; 0x3f0, 0x3f1; 0x3f4, 0x3f5; 1646 + 0x2016, 0x2016; 0x2032, 0x2034; 0x2040, 0x2040; 0x2061, 0x2064; 0x207d, 0x207e; 1647 + 0x208d, 0x208e; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20e6; 0x20eb, 0x20ef; 1648 + 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2119, 0x211d; 1649 + 0x2124, 0x2124; 0x2128, 0x2129; 0x212c, 0x212d; 0x212f, 0x2131; 0x2133, 0x2138; 1650 + 0x213c, 0x213f; 0x2145, 0x2149; 0x2195, 0x2199; 0x219c, 0x219f; 0x21a1, 0x21a2; 1651 + 0x21a4, 0x21a5; 0x21a7, 0x21a7; 0x21a9, 0x21ad; 0x21b0, 0x21b1; 0x21b6, 0x21b7; 1652 + 0x21bc, 0x21cd; 0x21d0, 0x21d1; 0x21d3, 0x21d3; 0x21d5, 0x21db; 0x21dd, 0x21dd; 1653 + 0x21e4, 0x21e5; 0x2308, 0x230b; 0x23b4, 0x23b5; 0x23b7, 0x23b7; 0x23d0, 0x23d0; 1654 + 0x23e2, 0x23e2; 0x25a0, 0x25a1; 0x25ae, 0x25b6; 0x25bc, 0x25c0; 0x25c6, 0x25c7; 1655 + 0x25ca, 0x25cb; 0x25cf, 0x25d3; 0x25e2, 0x25e2; 0x25e4, 0x25e4; 0x25e7, 0x25ec; 1656 + 0x2605, 0x2606; 0x2640, 0x2640; 0x2642, 0x2642; 0x2660, 0x2663; 0x266d, 0x266e; 1657 + 0x27c5, 0x27c6; 0x27e6, 0x27ef; 0x2983, 0x2998; 0x29d8, 0x29db; 0x29fc, 0x29fd; 1658 + 0xfe61, 0xfe61; 0xfe63, 0xfe63; 0xfe68, 0xfe68; 0xff3c, 0xff3c; 0xff3e, 0xff3e; 1659 + 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 1660 + 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 1661 + 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 1662 + 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 1663 + 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 1664 + 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 1665 + 0x1d7ce, 0x1d7ff; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 1666 + 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 1667 + 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 1668 + 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 1669 + 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 1670 + 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 1671 + 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb] 1672 + 1673 + let other_uppercase = Sedlex_cset.of_list 1674 + [0x2160, 0x216f; 0x24b6, 0x24cf; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189] 1675 + 1676 + let uppercase = Sedlex_cset.of_list 1677 + [0x41, 0x5a; 0xc0, 0xd6; 0xd8, 0xde; 0x100, 0x100; 0x102, 0x102; 1678 + 0x104, 0x104; 0x106, 0x106; 0x108, 0x108; 0x10a, 0x10a; 0x10c, 0x10c; 1679 + 0x10e, 0x10e; 0x110, 0x110; 0x112, 0x112; 0x114, 0x114; 0x116, 0x116; 1680 + 0x118, 0x118; 0x11a, 0x11a; 0x11c, 0x11c; 0x11e, 0x11e; 0x120, 0x120; 1681 + 0x122, 0x122; 0x124, 0x124; 0x126, 0x126; 0x128, 0x128; 0x12a, 0x12a; 1682 + 0x12c, 0x12c; 0x12e, 0x12e; 0x130, 0x130; 0x132, 0x132; 0x134, 0x134; 1683 + 0x136, 0x136; 0x139, 0x139; 0x13b, 0x13b; 0x13d, 0x13d; 0x13f, 0x13f; 1684 + 0x141, 0x141; 0x143, 0x143; 0x145, 0x145; 0x147, 0x147; 0x14a, 0x14a; 1685 + 0x14c, 0x14c; 0x14e, 0x14e; 0x150, 0x150; 0x152, 0x152; 0x154, 0x154; 1686 + 0x156, 0x156; 0x158, 0x158; 0x15a, 0x15a; 0x15c, 0x15c; 0x15e, 0x15e; 1687 + 0x160, 0x160; 0x162, 0x162; 0x164, 0x164; 0x166, 0x166; 0x168, 0x168; 1688 + 0x16a, 0x16a; 0x16c, 0x16c; 0x16e, 0x16e; 0x170, 0x170; 0x172, 0x172; 1689 + 0x174, 0x174; 0x176, 0x176; 0x178, 0x179; 0x17b, 0x17b; 0x17d, 0x17d; 1690 + 0x181, 0x182; 0x184, 0x184; 0x186, 0x187; 0x189, 0x18b; 0x18e, 0x191; 1691 + 0x193, 0x194; 0x196, 0x198; 0x19c, 0x19d; 0x19f, 0x1a0; 0x1a2, 0x1a2; 1692 + 0x1a4, 0x1a4; 0x1a6, 0x1a7; 0x1a9, 0x1a9; 0x1ac, 0x1ac; 0x1ae, 0x1af; 1693 + 0x1b1, 0x1b3; 0x1b5, 0x1b5; 0x1b7, 0x1b8; 0x1bc, 0x1bc; 0x1c4, 0x1c4; 1694 + 0x1c7, 0x1c7; 0x1ca, 0x1ca; 0x1cd, 0x1cd; 0x1cf, 0x1cf; 0x1d1, 0x1d1; 1695 + 0x1d3, 0x1d3; 0x1d5, 0x1d5; 0x1d7, 0x1d7; 0x1d9, 0x1d9; 0x1db, 0x1db; 1696 + 0x1de, 0x1de; 0x1e0, 0x1e0; 0x1e2, 0x1e2; 0x1e4, 0x1e4; 0x1e6, 0x1e6; 1697 + 0x1e8, 0x1e8; 0x1ea, 0x1ea; 0x1ec, 0x1ec; 0x1ee, 0x1ee; 0x1f1, 0x1f1; 1698 + 0x1f4, 0x1f4; 0x1f6, 0x1f8; 0x1fa, 0x1fa; 0x1fc, 0x1fc; 0x1fe, 0x1fe; 1699 + 0x200, 0x200; 0x202, 0x202; 0x204, 0x204; 0x206, 0x206; 0x208, 0x208; 1700 + 0x20a, 0x20a; 0x20c, 0x20c; 0x20e, 0x20e; 0x210, 0x210; 0x212, 0x212; 1701 + 0x214, 0x214; 0x216, 0x216; 0x218, 0x218; 0x21a, 0x21a; 0x21c, 0x21c; 1702 + 0x21e, 0x21e; 0x220, 0x220; 0x222, 0x222; 0x224, 0x224; 0x226, 0x226; 1703 + 0x228, 0x228; 0x22a, 0x22a; 0x22c, 0x22c; 0x22e, 0x22e; 0x230, 0x230; 1704 + 0x232, 0x232; 0x23a, 0x23b; 0x23d, 0x23e; 0x241, 0x241; 0x243, 0x246; 1705 + 0x248, 0x248; 0x24a, 0x24a; 0x24c, 0x24c; 0x24e, 0x24e; 0x370, 0x370; 1706 + 0x372, 0x372; 0x376, 0x376; 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 1707 + 0x38c, 0x38c; 0x38e, 0x38f; 0x391, 0x3a1; 0x3a3, 0x3ab; 0x3cf, 0x3cf; 1708 + 0x3d2, 0x3d4; 0x3d8, 0x3d8; 0x3da, 0x3da; 0x3dc, 0x3dc; 0x3de, 0x3de; 1709 + 0x3e0, 0x3e0; 0x3e2, 0x3e2; 0x3e4, 0x3e4; 0x3e6, 0x3e6; 0x3e8, 0x3e8; 1710 + 0x3ea, 0x3ea; 0x3ec, 0x3ec; 0x3ee, 0x3ee; 0x3f4, 0x3f4; 0x3f7, 0x3f7; 1711 + 0x3f9, 0x3fa; 0x3fd, 0x42f; 0x460, 0x460; 0x462, 0x462; 0x464, 0x464; 1712 + 0x466, 0x466; 0x468, 0x468; 0x46a, 0x46a; 0x46c, 0x46c; 0x46e, 0x46e; 1713 + 0x470, 0x470; 0x472, 0x472; 0x474, 0x474; 0x476, 0x476; 0x478, 0x478; 1714 + 0x47a, 0x47a; 0x47c, 0x47c; 0x47e, 0x47e; 0x480, 0x480; 0x48a, 0x48a; 1715 + 0x48c, 0x48c; 0x48e, 0x48e; 0x490, 0x490; 0x492, 0x492; 0x494, 0x494; 1716 + 0x496, 0x496; 0x498, 0x498; 0x49a, 0x49a; 0x49c, 0x49c; 0x49e, 0x49e; 1717 + 0x4a0, 0x4a0; 0x4a2, 0x4a2; 0x4a4, 0x4a4; 0x4a6, 0x4a6; 0x4a8, 0x4a8; 1718 + 0x4aa, 0x4aa; 0x4ac, 0x4ac; 0x4ae, 0x4ae; 0x4b0, 0x4b0; 0x4b2, 0x4b2; 1719 + 0x4b4, 0x4b4; 0x4b6, 0x4b6; 0x4b8, 0x4b8; 0x4ba, 0x4ba; 0x4bc, 0x4bc; 1720 + 0x4be, 0x4be; 0x4c0, 0x4c1; 0x4c3, 0x4c3; 0x4c5, 0x4c5; 0x4c7, 0x4c7; 1721 + 0x4c9, 0x4c9; 0x4cb, 0x4cb; 0x4cd, 0x4cd; 0x4d0, 0x4d0; 0x4d2, 0x4d2; 1722 + 0x4d4, 0x4d4; 0x4d6, 0x4d6; 0x4d8, 0x4d8; 0x4da, 0x4da; 0x4dc, 0x4dc; 1723 + 0x4de, 0x4de; 0x4e0, 0x4e0; 0x4e2, 0x4e2; 0x4e4, 0x4e4; 0x4e6, 0x4e6; 1724 + 0x4e8, 0x4e8; 0x4ea, 0x4ea; 0x4ec, 0x4ec; 0x4ee, 0x4ee; 0x4f0, 0x4f0; 1725 + 0x4f2, 0x4f2; 0x4f4, 0x4f4; 0x4f6, 0x4f6; 0x4f8, 0x4f8; 0x4fa, 0x4fa; 1726 + 0x4fc, 0x4fc; 0x4fe, 0x4fe; 0x500, 0x500; 0x502, 0x502; 0x504, 0x504; 1727 + 0x506, 0x506; 0x508, 0x508; 0x50a, 0x50a; 0x50c, 0x50c; 0x50e, 0x50e; 1728 + 0x510, 0x510; 0x512, 0x512; 0x514, 0x514; 0x516, 0x516; 0x518, 0x518; 1729 + 0x51a, 0x51a; 0x51c, 0x51c; 0x51e, 0x51e; 0x520, 0x520; 0x522, 0x522; 1730 + 0x524, 0x524; 0x526, 0x526; 0x528, 0x528; 0x52a, 0x52a; 0x52c, 0x52c; 1731 + 0x52e, 0x52e; 0x531, 0x556; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 0x10cd, 0x10cd; 1732 + 0x13a0, 0x13f5; 0x1c89, 0x1c89; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1e00, 0x1e00; 1733 + 0x1e02, 0x1e02; 0x1e04, 0x1e04; 0x1e06, 0x1e06; 0x1e08, 0x1e08; 0x1e0a, 0x1e0a; 1734 + 0x1e0c, 0x1e0c; 0x1e0e, 0x1e0e; 0x1e10, 0x1e10; 0x1e12, 0x1e12; 0x1e14, 0x1e14; 1735 + 0x1e16, 0x1e16; 0x1e18, 0x1e18; 0x1e1a, 0x1e1a; 0x1e1c, 0x1e1c; 0x1e1e, 0x1e1e; 1736 + 0x1e20, 0x1e20; 0x1e22, 0x1e22; 0x1e24, 0x1e24; 0x1e26, 0x1e26; 0x1e28, 0x1e28; 1737 + 0x1e2a, 0x1e2a; 0x1e2c, 0x1e2c; 0x1e2e, 0x1e2e; 0x1e30, 0x1e30; 0x1e32, 0x1e32; 1738 + 0x1e34, 0x1e34; 0x1e36, 0x1e36; 0x1e38, 0x1e38; 0x1e3a, 0x1e3a; 0x1e3c, 0x1e3c; 1739 + 0x1e3e, 0x1e3e; 0x1e40, 0x1e40; 0x1e42, 0x1e42; 0x1e44, 0x1e44; 0x1e46, 0x1e46; 1740 + 0x1e48, 0x1e48; 0x1e4a, 0x1e4a; 0x1e4c, 0x1e4c; 0x1e4e, 0x1e4e; 0x1e50, 0x1e50; 1741 + 0x1e52, 0x1e52; 0x1e54, 0x1e54; 0x1e56, 0x1e56; 0x1e58, 0x1e58; 0x1e5a, 0x1e5a; 1742 + 0x1e5c, 0x1e5c; 0x1e5e, 0x1e5e; 0x1e60, 0x1e60; 0x1e62, 0x1e62; 0x1e64, 0x1e64; 1743 + 0x1e66, 0x1e66; 0x1e68, 0x1e68; 0x1e6a, 0x1e6a; 0x1e6c, 0x1e6c; 0x1e6e, 0x1e6e; 1744 + 0x1e70, 0x1e70; 0x1e72, 0x1e72; 0x1e74, 0x1e74; 0x1e76, 0x1e76; 0x1e78, 0x1e78; 1745 + 0x1e7a, 0x1e7a; 0x1e7c, 0x1e7c; 0x1e7e, 0x1e7e; 0x1e80, 0x1e80; 0x1e82, 0x1e82; 1746 + 0x1e84, 0x1e84; 0x1e86, 0x1e86; 0x1e88, 0x1e88; 0x1e8a, 0x1e8a; 0x1e8c, 0x1e8c; 1747 + 0x1e8e, 0x1e8e; 0x1e90, 0x1e90; 0x1e92, 0x1e92; 0x1e94, 0x1e94; 0x1e9e, 0x1e9e; 1748 + 0x1ea0, 0x1ea0; 0x1ea2, 0x1ea2; 0x1ea4, 0x1ea4; 0x1ea6, 0x1ea6; 0x1ea8, 0x1ea8; 1749 + 0x1eaa, 0x1eaa; 0x1eac, 0x1eac; 0x1eae, 0x1eae; 0x1eb0, 0x1eb0; 0x1eb2, 0x1eb2; 1750 + 0x1eb4, 0x1eb4; 0x1eb6, 0x1eb6; 0x1eb8, 0x1eb8; 0x1eba, 0x1eba; 0x1ebc, 0x1ebc; 1751 + 0x1ebe, 0x1ebe; 0x1ec0, 0x1ec0; 0x1ec2, 0x1ec2; 0x1ec4, 0x1ec4; 0x1ec6, 0x1ec6; 1752 + 0x1ec8, 0x1ec8; 0x1eca, 0x1eca; 0x1ecc, 0x1ecc; 0x1ece, 0x1ece; 0x1ed0, 0x1ed0; 1753 + 0x1ed2, 0x1ed2; 0x1ed4, 0x1ed4; 0x1ed6, 0x1ed6; 0x1ed8, 0x1ed8; 0x1eda, 0x1eda; 1754 + 0x1edc, 0x1edc; 0x1ede, 0x1ede; 0x1ee0, 0x1ee0; 0x1ee2, 0x1ee2; 0x1ee4, 0x1ee4; 1755 + 0x1ee6, 0x1ee6; 0x1ee8, 0x1ee8; 0x1eea, 0x1eea; 0x1eec, 0x1eec; 0x1eee, 0x1eee; 1756 + 0x1ef0, 0x1ef0; 0x1ef2, 0x1ef2; 0x1ef4, 0x1ef4; 0x1ef6, 0x1ef6; 0x1ef8, 0x1ef8; 1757 + 0x1efa, 0x1efa; 0x1efc, 0x1efc; 0x1efe, 0x1efe; 0x1f08, 0x1f0f; 0x1f18, 0x1f1d; 1758 + 0x1f28, 0x1f2f; 0x1f38, 0x1f3f; 0x1f48, 0x1f4d; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 1759 + 0x1f5d, 0x1f5d; 0x1f5f, 0x1f5f; 0x1f68, 0x1f6f; 0x1fb8, 0x1fbb; 0x1fc8, 0x1fcb; 1760 + 0x1fd8, 0x1fdb; 0x1fe8, 0x1fec; 0x1ff8, 0x1ffb; 0x2102, 0x2102; 0x2107, 0x2107; 1761 + 0x210b, 0x210d; 0x2110, 0x2112; 0x2115, 0x2115; 0x2119, 0x211d; 0x2124, 0x2124; 1762 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x212d; 0x2130, 0x2133; 0x213e, 0x213f; 1763 + 0x2145, 0x2145; 0x2160, 0x216f; 0x2183, 0x2183; 0x24b6, 0x24cf; 0x2c00, 0x2c2f; 1764 + 0x2c60, 0x2c60; 0x2c62, 0x2c64; 0x2c67, 0x2c67; 0x2c69, 0x2c69; 0x2c6b, 0x2c6b; 1765 + 0x2c6d, 0x2c70; 0x2c72, 0x2c72; 0x2c75, 0x2c75; 0x2c7e, 0x2c80; 0x2c82, 0x2c82; 1766 + 0x2c84, 0x2c84; 0x2c86, 0x2c86; 0x2c88, 0x2c88; 0x2c8a, 0x2c8a; 0x2c8c, 0x2c8c; 1767 + 0x2c8e, 0x2c8e; 0x2c90, 0x2c90; 0x2c92, 0x2c92; 0x2c94, 0x2c94; 0x2c96, 0x2c96; 1768 + 0x2c98, 0x2c98; 0x2c9a, 0x2c9a; 0x2c9c, 0x2c9c; 0x2c9e, 0x2c9e; 0x2ca0, 0x2ca0; 1769 + 0x2ca2, 0x2ca2; 0x2ca4, 0x2ca4; 0x2ca6, 0x2ca6; 0x2ca8, 0x2ca8; 0x2caa, 0x2caa; 1770 + 0x2cac, 0x2cac; 0x2cae, 0x2cae; 0x2cb0, 0x2cb0; 0x2cb2, 0x2cb2; 0x2cb4, 0x2cb4; 1771 + 0x2cb6, 0x2cb6; 0x2cb8, 0x2cb8; 0x2cba, 0x2cba; 0x2cbc, 0x2cbc; 0x2cbe, 0x2cbe; 1772 + 0x2cc0, 0x2cc0; 0x2cc2, 0x2cc2; 0x2cc4, 0x2cc4; 0x2cc6, 0x2cc6; 0x2cc8, 0x2cc8; 1773 + 0x2cca, 0x2cca; 0x2ccc, 0x2ccc; 0x2cce, 0x2cce; 0x2cd0, 0x2cd0; 0x2cd2, 0x2cd2; 1774 + 0x2cd4, 0x2cd4; 0x2cd6, 0x2cd6; 0x2cd8, 0x2cd8; 0x2cda, 0x2cda; 0x2cdc, 0x2cdc; 1775 + 0x2cde, 0x2cde; 0x2ce0, 0x2ce0; 0x2ce2, 0x2ce2; 0x2ceb, 0x2ceb; 0x2ced, 0x2ced; 1776 + 0x2cf2, 0x2cf2; 0xa640, 0xa640; 0xa642, 0xa642; 0xa644, 0xa644; 0xa646, 0xa646; 1777 + 0xa648, 0xa648; 0xa64a, 0xa64a; 0xa64c, 0xa64c; 0xa64e, 0xa64e; 0xa650, 0xa650; 1778 + 0xa652, 0xa652; 0xa654, 0xa654; 0xa656, 0xa656; 0xa658, 0xa658; 0xa65a, 0xa65a; 1779 + 0xa65c, 0xa65c; 0xa65e, 0xa65e; 0xa660, 0xa660; 0xa662, 0xa662; 0xa664, 0xa664; 1780 + 0xa666, 0xa666; 0xa668, 0xa668; 0xa66a, 0xa66a; 0xa66c, 0xa66c; 0xa680, 0xa680; 1781 + 0xa682, 0xa682; 0xa684, 0xa684; 0xa686, 0xa686; 0xa688, 0xa688; 0xa68a, 0xa68a; 1782 + 0xa68c, 0xa68c; 0xa68e, 0xa68e; 0xa690, 0xa690; 0xa692, 0xa692; 0xa694, 0xa694; 1783 + 0xa696, 0xa696; 0xa698, 0xa698; 0xa69a, 0xa69a; 0xa722, 0xa722; 0xa724, 0xa724; 1784 + 0xa726, 0xa726; 0xa728, 0xa728; 0xa72a, 0xa72a; 0xa72c, 0xa72c; 0xa72e, 0xa72e; 1785 + 0xa732, 0xa732; 0xa734, 0xa734; 0xa736, 0xa736; 0xa738, 0xa738; 0xa73a, 0xa73a; 1786 + 0xa73c, 0xa73c; 0xa73e, 0xa73e; 0xa740, 0xa740; 0xa742, 0xa742; 0xa744, 0xa744; 1787 + 0xa746, 0xa746; 0xa748, 0xa748; 0xa74a, 0xa74a; 0xa74c, 0xa74c; 0xa74e, 0xa74e; 1788 + 0xa750, 0xa750; 0xa752, 0xa752; 0xa754, 0xa754; 0xa756, 0xa756; 0xa758, 0xa758; 1789 + 0xa75a, 0xa75a; 0xa75c, 0xa75c; 0xa75e, 0xa75e; 0xa760, 0xa760; 0xa762, 0xa762; 1790 + 0xa764, 0xa764; 0xa766, 0xa766; 0xa768, 0xa768; 0xa76a, 0xa76a; 0xa76c, 0xa76c; 1791 + 0xa76e, 0xa76e; 0xa779, 0xa779; 0xa77b, 0xa77b; 0xa77d, 0xa77e; 0xa780, 0xa780; 1792 + 0xa782, 0xa782; 0xa784, 0xa784; 0xa786, 0xa786; 0xa78b, 0xa78b; 0xa78d, 0xa78d; 1793 + 0xa790, 0xa790; 0xa792, 0xa792; 0xa796, 0xa796; 0xa798, 0xa798; 0xa79a, 0xa79a; 1794 + 0xa79c, 0xa79c; 0xa79e, 0xa79e; 0xa7a0, 0xa7a0; 0xa7a2, 0xa7a2; 0xa7a4, 0xa7a4; 1795 + 0xa7a6, 0xa7a6; 0xa7a8, 0xa7a8; 0xa7aa, 0xa7ae; 0xa7b0, 0xa7b4; 0xa7b6, 0xa7b6; 1796 + 0xa7b8, 0xa7b8; 0xa7ba, 0xa7ba; 0xa7bc, 0xa7bc; 0xa7be, 0xa7be; 0xa7c0, 0xa7c0; 1797 + 0xa7c2, 0xa7c2; 0xa7c4, 0xa7c7; 0xa7c9, 0xa7c9; 0xa7cb, 0xa7cc; 0xa7ce, 0xa7ce; 1798 + 0xa7d0, 0xa7d0; 0xa7d2, 0xa7d2; 0xa7d4, 0xa7d4; 0xa7d6, 0xa7d6; 0xa7d8, 0xa7d8; 1799 + 0xa7da, 0xa7da; 0xa7dc, 0xa7dc; 0xa7f5, 0xa7f5; 0xff21, 0xff3a; 0x10400, 0x10427; 1800 + 0x104b0, 0x104d3; 0x10570, 0x1057a; 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 1801 + 0x10c80, 0x10cb2; 0x10d50, 0x10d65; 0x118a0, 0x118bf; 0x16e40, 0x16e5f; 0x16ea0, 0x16eb8; 1802 + 0x1d400, 0x1d419; 0x1d434, 0x1d44d; 0x1d468, 0x1d481; 0x1d49c, 0x1d49c; 0x1d49e, 0x1d49f; 1803 + 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b5; 0x1d4d0, 0x1d4e9; 1804 + 0x1d504, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d538, 0x1d539; 1805 + 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d56c, 0x1d585; 1806 + 0x1d5a0, 0x1d5b9; 0x1d5d4, 0x1d5ed; 0x1d608, 0x1d621; 0x1d63c, 0x1d655; 0x1d670, 0x1d689; 1807 + 0x1d6a8, 0x1d6c0; 0x1d6e2, 0x1d6fa; 0x1d71c, 0x1d734; 0x1d756, 0x1d76e; 0x1d790, 0x1d7a8; 1808 + 0x1d7ca, 0x1d7ca; 0x1e900, 0x1e921; 0x1f130, 0x1f149; 0x1f150, 0x1f169; 0x1f170, 0x1f189] 1809 + 1810 + let white_space = Sedlex_cset.of_list 1811 + [0x9, 0xd; 0x20, 0x20; 0x85, 0x85; 0xa0, 0xa0; 0x1680, 0x1680; 1812 + 0x2000, 0x200a; 0x2028, 0x2029; 0x202f, 0x202f; 0x205f, 0x205f; 0x3000, 0x3000] 1813 + 1814 + let xid_continue = Sedlex_cset.of_list 1815 + [0x30, 0x39; 0x41, 0x5a; 0x5f, 0x5f; 0x61, 0x7a; 0xaa, 0xaa; 1816 + 0xb5, 0xb5; 0xb7, 0xb7; 0xba, 0xba; 0xc0, 0xd6; 0xd8, 0xf6; 1817 + 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 0x2ec, 0x2ec; 0x2ee, 0x2ee; 1818 + 0x300, 0x374; 0x376, 0x377; 0x37b, 0x37d; 0x37f, 0x37f; 0x386, 0x38a; 1819 + 0x38c, 0x38c; 0x38e, 0x3a1; 0x3a3, 0x3f5; 0x3f7, 0x481; 0x483, 0x487; 1820 + 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 0x560, 0x588; 0x591, 0x5bd; 1821 + 0x5bf, 0x5bf; 0x5c1, 0x5c2; 0x5c4, 0x5c5; 0x5c7, 0x5c7; 0x5d0, 0x5ea; 1822 + 0x5ef, 0x5f2; 0x610, 0x61a; 0x620, 0x669; 0x66e, 0x6d3; 0x6d5, 0x6dc; 1823 + 0x6df, 0x6e8; 0x6ea, 0x6fc; 0x6ff, 0x6ff; 0x710, 0x74a; 0x74d, 0x7b1; 1824 + 0x7c0, 0x7f5; 0x7fa, 0x7fa; 0x7fd, 0x7fd; 0x800, 0x82d; 0x840, 0x85b; 1825 + 0x860, 0x86a; 0x870, 0x887; 0x889, 0x88f; 0x897, 0x8e1; 0x8e3, 0x963; 1826 + 0x966, 0x96f; 0x971, 0x983; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1827 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bc, 0x9c4; 0x9c7, 0x9c8; 1828 + 0x9cb, 0x9ce; 0x9d7, 0x9d7; 0x9dc, 0x9dd; 0x9df, 0x9e3; 0x9e6, 0x9f1; 1829 + 0x9fc, 0x9fc; 0x9fe, 0x9fe; 0xa01, 0xa03; 0xa05, 0xa0a; 0xa0f, 0xa10; 1830 + 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 0xa38, 0xa39; 1831 + 0xa3c, 0xa3c; 0xa3e, 0xa42; 0xa47, 0xa48; 0xa4b, 0xa4d; 0xa51, 0xa51; 1832 + 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa66, 0xa75; 0xa81, 0xa83; 0xa85, 0xa8d; 1833 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1834 + 0xabc, 0xac5; 0xac7, 0xac9; 0xacb, 0xacd; 0xad0, 0xad0; 0xae0, 0xae3; 1835 + 0xae6, 0xaef; 0xaf9, 0xaff; 0xb01, 0xb03; 0xb05, 0xb0c; 0xb0f, 0xb10; 1836 + 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 0xb3c, 0xb44; 1837 + 0xb47, 0xb48; 0xb4b, 0xb4d; 0xb55, 0xb57; 0xb5c, 0xb5d; 0xb5f, 0xb63; 1838 + 0xb66, 0xb6f; 0xb71, 0xb71; 0xb82, 0xb83; 0xb85, 0xb8a; 0xb8e, 0xb90; 1839 + 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 0xb9e, 0xb9f; 0xba3, 0xba4; 1840 + 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbbe, 0xbc2; 0xbc6, 0xbc8; 0xbca, 0xbcd; 1841 + 0xbd0, 0xbd0; 0xbd7, 0xbd7; 0xbe6, 0xbef; 0xc00, 0xc0c; 0xc0e, 0xc10; 1842 + 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3c, 0xc44; 0xc46, 0xc48; 0xc4a, 0xc4d; 1843 + 0xc55, 0xc56; 0xc58, 0xc5a; 0xc5c, 0xc5d; 0xc60, 0xc63; 0xc66, 0xc6f; 1844 + 0xc80, 0xc83; 0xc85, 0xc8c; 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 1845 + 0xcb5, 0xcb9; 0xcbc, 0xcc4; 0xcc6, 0xcc8; 0xcca, 0xccd; 0xcd5, 0xcd6; 1846 + 0xcdc, 0xcde; 0xce0, 0xce3; 0xce6, 0xcef; 0xcf1, 0xcf3; 0xd00, 0xd0c; 1847 + 0xd0e, 0xd10; 0xd12, 0xd44; 0xd46, 0xd48; 0xd4a, 0xd4e; 0xd54, 0xd57; 1848 + 0xd5f, 0xd63; 0xd66, 0xd6f; 0xd7a, 0xd7f; 0xd81, 0xd83; 0xd85, 0xd96; 1849 + 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 0xdc0, 0xdc6; 0xdca, 0xdca; 1850 + 0xdcf, 0xdd4; 0xdd6, 0xdd6; 0xdd8, 0xddf; 0xde6, 0xdef; 0xdf2, 0xdf3; 1851 + 0xe01, 0xe3a; 0xe40, 0xe4e; 0xe50, 0xe59; 0xe81, 0xe82; 0xe84, 0xe84; 1852 + 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xebd; 0xec0, 0xec4; 1853 + 0xec6, 0xec6; 0xec8, 0xece; 0xed0, 0xed9; 0xedc, 0xedf; 0xf00, 0xf00; 1854 + 0xf18, 0xf19; 0xf20, 0xf29; 0xf35, 0xf35; 0xf37, 0xf37; 0xf39, 0xf39; 1855 + 0xf3e, 0xf47; 0xf49, 0xf6c; 0xf71, 0xf84; 0xf86, 0xf97; 0xf99, 0xfbc; 1856 + 0xfc6, 0xfc6; 0x1000, 0x1049; 0x1050, 0x109d; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 1857 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 1858 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 1859 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 1860 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x135d, 0x135f; 0x1369, 0x1371; 1861 + 0x1380, 0x138f; 0x13a0, 0x13f5; 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 1862 + 0x1681, 0x169a; 0x16a0, 0x16ea; 0x16ee, 0x16f8; 0x1700, 0x1715; 0x171f, 0x1734; 1863 + 0x1740, 0x1753; 0x1760, 0x176c; 0x176e, 0x1770; 0x1772, 0x1773; 0x1780, 0x17d3; 1864 + 0x17d7, 0x17d7; 0x17dc, 0x17dd; 0x17e0, 0x17e9; 0x180b, 0x180d; 0x180f, 0x1819; 1865 + 0x1820, 0x1878; 0x1880, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1920, 0x192b; 1866 + 0x1930, 0x193b; 0x1946, 0x196d; 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 1867 + 0x19d0, 0x19da; 0x1a00, 0x1a1b; 0x1a20, 0x1a5e; 0x1a60, 0x1a7c; 0x1a7f, 0x1a89; 1868 + 0x1a90, 0x1a99; 0x1aa7, 0x1aa7; 0x1ab0, 0x1abd; 0x1abf, 0x1add; 0x1ae0, 0x1aeb; 1869 + 0x1b00, 0x1b4c; 0x1b50, 0x1b59; 0x1b6b, 0x1b73; 0x1b80, 0x1bf3; 0x1c00, 0x1c37; 1870 + 0x1c40, 0x1c49; 0x1c4d, 0x1c7d; 0x1c80, 0x1c8a; 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 1871 + 0x1cd0, 0x1cd2; 0x1cd4, 0x1cfa; 0x1d00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 1872 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 1873 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 1874 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 1875 + 0x1ff6, 0x1ffc; 0x200c, 0x200d; 0x203f, 0x2040; 0x2054, 0x2054; 0x2071, 0x2071; 1876 + 0x207f, 0x207f; 0x2090, 0x209c; 0x20d0, 0x20dc; 0x20e1, 0x20e1; 0x20e5, 0x20f0; 1877 + 0x2102, 0x2102; 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 1878 + 0x2124, 0x2124; 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 1879 + 0x2145, 0x2149; 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cf3; 1880 + 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 1881 + 0x2d7f, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 1882 + 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x2de0, 0x2dff; 1883 + 0x3005, 0x3007; 0x3021, 0x302f; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 1884 + 0x3099, 0x309a; 0x309d, 0x309f; 0x30a1, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 1885 + 0x31a0, 0x31bf; 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 1886 + 0xa500, 0xa60c; 0xa610, 0xa62b; 0xa640, 0xa66f; 0xa674, 0xa67d; 0xa67f, 0xa6f1; 1887 + 0xa717, 0xa71f; 0xa722, 0xa788; 0xa78b, 0xa7dc; 0xa7f1, 0xa827; 0xa82c, 0xa82c; 1888 + 0xa840, 0xa873; 0xa880, 0xa8c5; 0xa8d0, 0xa8d9; 0xa8e0, 0xa8f7; 0xa8fb, 0xa8fb; 1889 + 0xa8fd, 0xa92d; 0xa930, 0xa953; 0xa960, 0xa97c; 0xa980, 0xa9c0; 0xa9cf, 0xa9d9; 1890 + 0xa9e0, 0xa9fe; 0xaa00, 0xaa36; 0xaa40, 0xaa4d; 0xaa50, 0xaa59; 0xaa60, 0xaa76; 1891 + 0xaa7a, 0xaac2; 0xaadb, 0xaadd; 0xaae0, 0xaaef; 0xaaf2, 0xaaf6; 0xab01, 0xab06; 1892 + 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 1893 + 0xab5c, 0xab69; 0xab70, 0xabea; 0xabec, 0xabed; 0xabf0, 0xabf9; 0xac00, 0xd7a3; 1894 + 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 1895 + 0xfb13, 0xfb17; 0xfb1d, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 1896 + 0xfb40, 0xfb41; 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 1897 + 0xfd50, 0xfd8f; 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfe00, 0xfe0f; 0xfe20, 0xfe2f; 1898 + 0xfe33, 0xfe34; 0xfe4d, 0xfe4f; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 1899 + 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff10, 0xff19; 1900 + 0xff21, 0xff3a; 0xff3f, 0xff3f; 0xff41, 0xff5a; 0xff65, 0xffbe; 0xffc2, 0xffc7; 1901 + 0xffca, 0xffcf; 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 1902 + 0x10028, 0x1003a; 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 1903 + 0x10140, 0x10174; 0x101fd, 0x101fd; 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x102e0, 0x102e0; 1904 + 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x1037a; 0x10380, 0x1039d; 0x103a0, 0x103c3; 1905 + 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 0x104a0, 0x104a9; 0x104b0, 0x104d3; 1906 + 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 0x1057c, 0x1058a; 1907 + 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 0x105b3, 0x105b9; 1908 + 0x105bb, 0x105bc; 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 0x10760, 0x10767; 1909 + 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 0x10808, 0x10808; 1910 + 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 0x10860, 0x10876; 1911 + 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 0x10920, 0x10939; 1912 + 0x10940, 0x10959; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a03; 0x10a05, 0x10a06; 1913 + 0x10a0c, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a38, 0x10a3a; 0x10a3f, 0x10a3f; 1914 + 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae6; 0x10b00, 0x10b35; 1915 + 0x10b40, 0x10b55; 0x10b60, 0x10b72; 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 1916 + 0x10cc0, 0x10cf2; 0x10d00, 0x10d27; 0x10d30, 0x10d39; 0x10d40, 0x10d65; 0x10d69, 0x10d6d; 1917 + 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 0x10eab, 0x10eac; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec7; 1918 + 0x10efa, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f50; 0x10f70, 0x10f85; 0x10fb0, 0x10fc4; 1919 + 0x10fe0, 0x10ff6; 0x11000, 0x11046; 0x11066, 0x11075; 0x1107f, 0x110ba; 0x110c2, 0x110c2; 1920 + 0x110d0, 0x110e8; 0x110f0, 0x110f9; 0x11100, 0x11134; 0x11136, 0x1113f; 0x11144, 0x11147; 1921 + 0x11150, 0x11173; 0x11176, 0x11176; 0x11180, 0x111c4; 0x111c9, 0x111cc; 0x111ce, 0x111da; 1922 + 0x111dc, 0x111dc; 0x11200, 0x11211; 0x11213, 0x11237; 0x1123e, 0x11241; 0x11280, 0x11286; 1923 + 0x11288, 0x11288; 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112ea; 1924 + 0x112f0, 0x112f9; 0x11300, 0x11303; 0x11305, 0x1130c; 0x1130f, 0x11310; 0x11313, 0x11328; 1925 + 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 0x1133b, 0x11344; 0x11347, 0x11348; 1926 + 0x1134b, 0x1134d; 0x11350, 0x11350; 0x11357, 0x11357; 0x1135d, 0x11363; 0x11366, 0x1136c; 1927 + 0x11370, 0x11374; 0x11380, 0x11389; 0x1138b, 0x1138b; 0x1138e, 0x1138e; 0x11390, 0x113b5; 1928 + 0x113b7, 0x113c0; 0x113c2, 0x113c2; 0x113c5, 0x113c5; 0x113c7, 0x113ca; 0x113cc, 0x113d3; 1929 + 0x113e1, 0x113e2; 0x11400, 0x1144a; 0x11450, 0x11459; 0x1145e, 0x11461; 0x11480, 0x114c5; 1930 + 0x114c7, 0x114c7; 0x114d0, 0x114d9; 0x11580, 0x115b5; 0x115b8, 0x115c0; 0x115d8, 0x115dd; 1931 + 0x11600, 0x11640; 0x11644, 0x11644; 0x11650, 0x11659; 0x11680, 0x116b8; 0x116c0, 0x116c9; 1932 + 0x116d0, 0x116e3; 0x11700, 0x1171a; 0x1171d, 0x1172b; 0x11730, 0x11739; 0x11740, 0x11746; 1933 + 0x11800, 0x1183a; 0x118a0, 0x118e9; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 1934 + 0x11915, 0x11916; 0x11918, 0x11935; 0x11937, 0x11938; 0x1193b, 0x11943; 0x11950, 0x11959; 1935 + 0x119a0, 0x119a7; 0x119aa, 0x119d7; 0x119da, 0x119e1; 0x119e3, 0x119e4; 0x11a00, 0x11a3e; 1936 + 0x11a47, 0x11a47; 0x11a50, 0x11a99; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11b60, 0x11b67; 1937 + 0x11bc0, 0x11be0; 0x11bf0, 0x11bf9; 0x11c00, 0x11c08; 0x11c0a, 0x11c36; 0x11c38, 0x11c40; 1938 + 0x11c50, 0x11c59; 0x11c72, 0x11c8f; 0x11c92, 0x11ca7; 0x11ca9, 0x11cb6; 0x11d00, 0x11d06; 1939 + 0x11d08, 0x11d09; 0x11d0b, 0x11d36; 0x11d3a, 0x11d3a; 0x11d3c, 0x11d3d; 0x11d3f, 0x11d47; 1940 + 0x11d50, 0x11d59; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 0x11d6a, 0x11d8e; 0x11d90, 0x11d91; 1941 + 0x11d93, 0x11d98; 0x11da0, 0x11da9; 0x11db0, 0x11ddb; 0x11de0, 0x11de9; 0x11ee0, 0x11ef6; 1942 + 0x11f00, 0x11f10; 0x11f12, 0x11f3a; 0x11f3e, 0x11f42; 0x11f50, 0x11f5a; 0x11fb0, 0x11fb0; 1943 + 0x12000, 0x12399; 0x12400, 0x1246e; 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 1944 + 0x13440, 0x13455; 0x13460, 0x143fa; 0x14400, 0x14646; 0x16100, 0x16139; 0x16800, 0x16a38; 1945 + 0x16a40, 0x16a5e; 0x16a60, 0x16a69; 0x16a70, 0x16abe; 0x16ac0, 0x16ac9; 0x16ad0, 0x16aed; 1946 + 0x16af0, 0x16af4; 0x16b00, 0x16b36; 0x16b40, 0x16b43; 0x16b50, 0x16b59; 0x16b63, 0x16b77; 1947 + 0x16b7d, 0x16b8f; 0x16d40, 0x16d6c; 0x16d70, 0x16d79; 0x16e40, 0x16e7f; 0x16ea0, 0x16eb8; 1948 + 0x16ebb, 0x16ed3; 0x16f00, 0x16f4a; 0x16f4f, 0x16f87; 0x16f8f, 0x16f9f; 0x16fe0, 0x16fe1; 1949 + 0x16fe3, 0x16fe4; 0x16ff0, 0x16ff6; 0x17000, 0x18cd5; 0x18cff, 0x18d1e; 0x18d80, 0x18df2; 1950 + 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 1951 + 0x1b150, 0x1b152; 0x1b155, 0x1b155; 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 1952 + 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 0x1bc90, 0x1bc99; 0x1bc9d, 0x1bc9e; 0x1ccf0, 0x1ccf9; 1953 + 0x1cf00, 0x1cf2d; 0x1cf30, 0x1cf46; 0x1d165, 0x1d169; 0x1d16d, 0x1d172; 0x1d17b, 0x1d182; 1954 + 0x1d185, 0x1d18b; 0x1d1aa, 0x1d1ad; 0x1d242, 0x1d244; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 1955 + 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 1956 + 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 1957 + 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 1958 + 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 1959 + 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 1960 + 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 0x1d7c4, 0x1d7cb; 0x1d7ce, 0x1d7ff; 0x1da00, 0x1da36; 1961 + 0x1da3b, 0x1da6c; 0x1da75, 0x1da75; 0x1da84, 0x1da84; 0x1da9b, 0x1da9f; 0x1daa1, 0x1daaf; 1962 + 0x1df00, 0x1df1e; 0x1df25, 0x1df2a; 0x1e000, 0x1e006; 0x1e008, 0x1e018; 0x1e01b, 0x1e021; 1963 + 0x1e023, 0x1e024; 0x1e026, 0x1e02a; 0x1e030, 0x1e06d; 0x1e08f, 0x1e08f; 0x1e100, 0x1e12c; 1964 + 0x1e130, 0x1e13d; 0x1e140, 0x1e149; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ae; 0x1e2c0, 0x1e2f9; 1965 + 0x1e4d0, 0x1e4f9; 0x1e5d0, 0x1e5fa; 0x1e6c0, 0x1e6de; 0x1e6e0, 0x1e6f5; 0x1e6fe, 0x1e6ff; 1966 + 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 1967 + 0x1e8d0, 0x1e8d6; 0x1e900, 0x1e94b; 0x1e950, 0x1e959; 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 1968 + 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 1969 + 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 1970 + 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 1971 + 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 1972 + 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 1973 + 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 1974 + 0x1eeab, 0x1eebb; 0x1fbf0, 0x1fbf9; 0x20000, 0x2a6df; 0x2a700, 0x2b81d; 0x2b820, 0x2cead; 1975 + 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 0x31350, 0x33479; 1976 + 0xe0100, 0xe01ef] 1977 + 1978 + let xid_start = Sedlex_cset.of_list 1979 + [0x41, 0x5a; 0x61, 0x7a; 0xaa, 0xaa; 0xb5, 0xb5; 0xba, 0xba; 1980 + 0xc0, 0xd6; 0xd8, 0xf6; 0xf8, 0x2c1; 0x2c6, 0x2d1; 0x2e0, 0x2e4; 1981 + 0x2ec, 0x2ec; 0x2ee, 0x2ee; 0x370, 0x374; 0x376, 0x377; 0x37b, 0x37d; 1982 + 0x37f, 0x37f; 0x386, 0x386; 0x388, 0x38a; 0x38c, 0x38c; 0x38e, 0x3a1; 1983 + 0x3a3, 0x3f5; 0x3f7, 0x481; 0x48a, 0x52f; 0x531, 0x556; 0x559, 0x559; 1984 + 0x560, 0x588; 0x5d0, 0x5ea; 0x5ef, 0x5f2; 0x620, 0x64a; 0x66e, 0x66f; 1985 + 0x671, 0x6d3; 0x6d5, 0x6d5; 0x6e5, 0x6e6; 0x6ee, 0x6ef; 0x6fa, 0x6fc; 1986 + 0x6ff, 0x6ff; 0x710, 0x710; 0x712, 0x72f; 0x74d, 0x7a5; 0x7b1, 0x7b1; 1987 + 0x7ca, 0x7ea; 0x7f4, 0x7f5; 0x7fa, 0x7fa; 0x800, 0x815; 0x81a, 0x81a; 1988 + 0x824, 0x824; 0x828, 0x828; 0x840, 0x858; 0x860, 0x86a; 0x870, 0x887; 1989 + 0x889, 0x88f; 0x8a0, 0x8c9; 0x904, 0x939; 0x93d, 0x93d; 0x950, 0x950; 1990 + 0x958, 0x961; 0x971, 0x980; 0x985, 0x98c; 0x98f, 0x990; 0x993, 0x9a8; 1991 + 0x9aa, 0x9b0; 0x9b2, 0x9b2; 0x9b6, 0x9b9; 0x9bd, 0x9bd; 0x9ce, 0x9ce; 1992 + 0x9dc, 0x9dd; 0x9df, 0x9e1; 0x9f0, 0x9f1; 0x9fc, 0x9fc; 0xa05, 0xa0a; 1993 + 0xa0f, 0xa10; 0xa13, 0xa28; 0xa2a, 0xa30; 0xa32, 0xa33; 0xa35, 0xa36; 1994 + 0xa38, 0xa39; 0xa59, 0xa5c; 0xa5e, 0xa5e; 0xa72, 0xa74; 0xa85, 0xa8d; 1995 + 0xa8f, 0xa91; 0xa93, 0xaa8; 0xaaa, 0xab0; 0xab2, 0xab3; 0xab5, 0xab9; 1996 + 0xabd, 0xabd; 0xad0, 0xad0; 0xae0, 0xae1; 0xaf9, 0xaf9; 0xb05, 0xb0c; 1997 + 0xb0f, 0xb10; 0xb13, 0xb28; 0xb2a, 0xb30; 0xb32, 0xb33; 0xb35, 0xb39; 1998 + 0xb3d, 0xb3d; 0xb5c, 0xb5d; 0xb5f, 0xb61; 0xb71, 0xb71; 0xb83, 0xb83; 1999 + 0xb85, 0xb8a; 0xb8e, 0xb90; 0xb92, 0xb95; 0xb99, 0xb9a; 0xb9c, 0xb9c; 2000 + 0xb9e, 0xb9f; 0xba3, 0xba4; 0xba8, 0xbaa; 0xbae, 0xbb9; 0xbd0, 0xbd0; 2001 + 0xc05, 0xc0c; 0xc0e, 0xc10; 0xc12, 0xc28; 0xc2a, 0xc39; 0xc3d, 0xc3d; 2002 + 0xc58, 0xc5a; 0xc5c, 0xc5d; 0xc60, 0xc61; 0xc80, 0xc80; 0xc85, 0xc8c; 2003 + 0xc8e, 0xc90; 0xc92, 0xca8; 0xcaa, 0xcb3; 0xcb5, 0xcb9; 0xcbd, 0xcbd; 2004 + 0xcdc, 0xcde; 0xce0, 0xce1; 0xcf1, 0xcf2; 0xd04, 0xd0c; 0xd0e, 0xd10; 2005 + 0xd12, 0xd3a; 0xd3d, 0xd3d; 0xd4e, 0xd4e; 0xd54, 0xd56; 0xd5f, 0xd61; 2006 + 0xd7a, 0xd7f; 0xd85, 0xd96; 0xd9a, 0xdb1; 0xdb3, 0xdbb; 0xdbd, 0xdbd; 2007 + 0xdc0, 0xdc6; 0xe01, 0xe30; 0xe32, 0xe32; 0xe40, 0xe46; 0xe81, 0xe82; 2008 + 0xe84, 0xe84; 0xe86, 0xe8a; 0xe8c, 0xea3; 0xea5, 0xea5; 0xea7, 0xeb0; 2009 + 0xeb2, 0xeb2; 0xebd, 0xebd; 0xec0, 0xec4; 0xec6, 0xec6; 0xedc, 0xedf; 2010 + 0xf00, 0xf00; 0xf40, 0xf47; 0xf49, 0xf6c; 0xf88, 0xf8c; 0x1000, 0x102a; 2011 + 0x103f, 0x103f; 0x1050, 0x1055; 0x105a, 0x105d; 0x1061, 0x1061; 0x1065, 0x1066; 2012 + 0x106e, 0x1070; 0x1075, 0x1081; 0x108e, 0x108e; 0x10a0, 0x10c5; 0x10c7, 0x10c7; 2013 + 0x10cd, 0x10cd; 0x10d0, 0x10fa; 0x10fc, 0x1248; 0x124a, 0x124d; 0x1250, 0x1256; 2014 + 0x1258, 0x1258; 0x125a, 0x125d; 0x1260, 0x1288; 0x128a, 0x128d; 0x1290, 0x12b0; 2015 + 0x12b2, 0x12b5; 0x12b8, 0x12be; 0x12c0, 0x12c0; 0x12c2, 0x12c5; 0x12c8, 0x12d6; 2016 + 0x12d8, 0x1310; 0x1312, 0x1315; 0x1318, 0x135a; 0x1380, 0x138f; 0x13a0, 0x13f5; 2017 + 0x13f8, 0x13fd; 0x1401, 0x166c; 0x166f, 0x167f; 0x1681, 0x169a; 0x16a0, 0x16ea; 2018 + 0x16ee, 0x16f8; 0x1700, 0x1711; 0x171f, 0x1731; 0x1740, 0x1751; 0x1760, 0x176c; 2019 + 0x176e, 0x1770; 0x1780, 0x17b3; 0x17d7, 0x17d7; 0x17dc, 0x17dc; 0x1820, 0x1878; 2020 + 0x1880, 0x18a8; 0x18aa, 0x18aa; 0x18b0, 0x18f5; 0x1900, 0x191e; 0x1950, 0x196d; 2021 + 0x1970, 0x1974; 0x1980, 0x19ab; 0x19b0, 0x19c9; 0x1a00, 0x1a16; 0x1a20, 0x1a54; 2022 + 0x1aa7, 0x1aa7; 0x1b05, 0x1b33; 0x1b45, 0x1b4c; 0x1b83, 0x1ba0; 0x1bae, 0x1baf; 2023 + 0x1bba, 0x1be5; 0x1c00, 0x1c23; 0x1c4d, 0x1c4f; 0x1c5a, 0x1c7d; 0x1c80, 0x1c8a; 2024 + 0x1c90, 0x1cba; 0x1cbd, 0x1cbf; 0x1ce9, 0x1cec; 0x1cee, 0x1cf3; 0x1cf5, 0x1cf6; 2025 + 0x1cfa, 0x1cfa; 0x1d00, 0x1dbf; 0x1e00, 0x1f15; 0x1f18, 0x1f1d; 0x1f20, 0x1f45; 2026 + 0x1f48, 0x1f4d; 0x1f50, 0x1f57; 0x1f59, 0x1f59; 0x1f5b, 0x1f5b; 0x1f5d, 0x1f5d; 2027 + 0x1f5f, 0x1f7d; 0x1f80, 0x1fb4; 0x1fb6, 0x1fbc; 0x1fbe, 0x1fbe; 0x1fc2, 0x1fc4; 2028 + 0x1fc6, 0x1fcc; 0x1fd0, 0x1fd3; 0x1fd6, 0x1fdb; 0x1fe0, 0x1fec; 0x1ff2, 0x1ff4; 2029 + 0x1ff6, 0x1ffc; 0x2071, 0x2071; 0x207f, 0x207f; 0x2090, 0x209c; 0x2102, 0x2102; 2030 + 0x2107, 0x2107; 0x210a, 0x2113; 0x2115, 0x2115; 0x2118, 0x211d; 0x2124, 0x2124; 2031 + 0x2126, 0x2126; 0x2128, 0x2128; 0x212a, 0x2139; 0x213c, 0x213f; 0x2145, 0x2149; 2032 + 0x214e, 0x214e; 0x2160, 0x2188; 0x2c00, 0x2ce4; 0x2ceb, 0x2cee; 0x2cf2, 0x2cf3; 2033 + 0x2d00, 0x2d25; 0x2d27, 0x2d27; 0x2d2d, 0x2d2d; 0x2d30, 0x2d67; 0x2d6f, 0x2d6f; 2034 + 0x2d80, 0x2d96; 0x2da0, 0x2da6; 0x2da8, 0x2dae; 0x2db0, 0x2db6; 0x2db8, 0x2dbe; 2035 + 0x2dc0, 0x2dc6; 0x2dc8, 0x2dce; 0x2dd0, 0x2dd6; 0x2dd8, 0x2dde; 0x3005, 0x3007; 2036 + 0x3021, 0x3029; 0x3031, 0x3035; 0x3038, 0x303c; 0x3041, 0x3096; 0x309d, 0x309f; 2037 + 0x30a1, 0x30fa; 0x30fc, 0x30ff; 0x3105, 0x312f; 0x3131, 0x318e; 0x31a0, 0x31bf; 2038 + 0x31f0, 0x31ff; 0x3400, 0x4dbf; 0x4e00, 0xa48c; 0xa4d0, 0xa4fd; 0xa500, 0xa60c; 2039 + 0xa610, 0xa61f; 0xa62a, 0xa62b; 0xa640, 0xa66e; 0xa67f, 0xa69d; 0xa6a0, 0xa6ef; 2040 + 0xa717, 0xa71f; 0xa722, 0xa788; 0xa78b, 0xa7dc; 0xa7f1, 0xa801; 0xa803, 0xa805; 2041 + 0xa807, 0xa80a; 0xa80c, 0xa822; 0xa840, 0xa873; 0xa882, 0xa8b3; 0xa8f2, 0xa8f7; 2042 + 0xa8fb, 0xa8fb; 0xa8fd, 0xa8fe; 0xa90a, 0xa925; 0xa930, 0xa946; 0xa960, 0xa97c; 2043 + 0xa984, 0xa9b2; 0xa9cf, 0xa9cf; 0xa9e0, 0xa9e4; 0xa9e6, 0xa9ef; 0xa9fa, 0xa9fe; 2044 + 0xaa00, 0xaa28; 0xaa40, 0xaa42; 0xaa44, 0xaa4b; 0xaa60, 0xaa76; 0xaa7a, 0xaa7a; 2045 + 0xaa7e, 0xaaaf; 0xaab1, 0xaab1; 0xaab5, 0xaab6; 0xaab9, 0xaabd; 0xaac0, 0xaac0; 2046 + 0xaac2, 0xaac2; 0xaadb, 0xaadd; 0xaae0, 0xaaea; 0xaaf2, 0xaaf4; 0xab01, 0xab06; 2047 + 0xab09, 0xab0e; 0xab11, 0xab16; 0xab20, 0xab26; 0xab28, 0xab2e; 0xab30, 0xab5a; 2048 + 0xab5c, 0xab69; 0xab70, 0xabe2; 0xac00, 0xd7a3; 0xd7b0, 0xd7c6; 0xd7cb, 0xd7fb; 2049 + 0xf900, 0xfa6d; 0xfa70, 0xfad9; 0xfb00, 0xfb06; 0xfb13, 0xfb17; 0xfb1d, 0xfb1d; 2050 + 0xfb1f, 0xfb28; 0xfb2a, 0xfb36; 0xfb38, 0xfb3c; 0xfb3e, 0xfb3e; 0xfb40, 0xfb41; 2051 + 0xfb43, 0xfb44; 0xfb46, 0xfbb1; 0xfbd3, 0xfc5d; 0xfc64, 0xfd3d; 0xfd50, 0xfd8f; 2052 + 0xfd92, 0xfdc7; 0xfdf0, 0xfdf9; 0xfe71, 0xfe71; 0xfe73, 0xfe73; 0xfe77, 0xfe77; 2053 + 0xfe79, 0xfe79; 0xfe7b, 0xfe7b; 0xfe7d, 0xfe7d; 0xfe7f, 0xfefc; 0xff21, 0xff3a; 2054 + 0xff41, 0xff5a; 0xff66, 0xff9d; 0xffa0, 0xffbe; 0xffc2, 0xffc7; 0xffca, 0xffcf; 2055 + 0xffd2, 0xffd7; 0xffda, 0xffdc; 0x10000, 0x1000b; 0x1000d, 0x10026; 0x10028, 0x1003a; 2056 + 0x1003c, 0x1003d; 0x1003f, 0x1004d; 0x10050, 0x1005d; 0x10080, 0x100fa; 0x10140, 0x10174; 2057 + 0x10280, 0x1029c; 0x102a0, 0x102d0; 0x10300, 0x1031f; 0x1032d, 0x1034a; 0x10350, 0x10375; 2058 + 0x10380, 0x1039d; 0x103a0, 0x103c3; 0x103c8, 0x103cf; 0x103d1, 0x103d5; 0x10400, 0x1049d; 2059 + 0x104b0, 0x104d3; 0x104d8, 0x104fb; 0x10500, 0x10527; 0x10530, 0x10563; 0x10570, 0x1057a; 2060 + 0x1057c, 0x1058a; 0x1058c, 0x10592; 0x10594, 0x10595; 0x10597, 0x105a1; 0x105a3, 0x105b1; 2061 + 0x105b3, 0x105b9; 0x105bb, 0x105bc; 0x105c0, 0x105f3; 0x10600, 0x10736; 0x10740, 0x10755; 2062 + 0x10760, 0x10767; 0x10780, 0x10785; 0x10787, 0x107b0; 0x107b2, 0x107ba; 0x10800, 0x10805; 2063 + 0x10808, 0x10808; 0x1080a, 0x10835; 0x10837, 0x10838; 0x1083c, 0x1083c; 0x1083f, 0x10855; 2064 + 0x10860, 0x10876; 0x10880, 0x1089e; 0x108e0, 0x108f2; 0x108f4, 0x108f5; 0x10900, 0x10915; 2065 + 0x10920, 0x10939; 0x10940, 0x10959; 0x10980, 0x109b7; 0x109be, 0x109bf; 0x10a00, 0x10a00; 2066 + 0x10a10, 0x10a13; 0x10a15, 0x10a17; 0x10a19, 0x10a35; 0x10a60, 0x10a7c; 0x10a80, 0x10a9c; 2067 + 0x10ac0, 0x10ac7; 0x10ac9, 0x10ae4; 0x10b00, 0x10b35; 0x10b40, 0x10b55; 0x10b60, 0x10b72; 2068 + 0x10b80, 0x10b91; 0x10c00, 0x10c48; 0x10c80, 0x10cb2; 0x10cc0, 0x10cf2; 0x10d00, 0x10d23; 2069 + 0x10d4a, 0x10d65; 0x10d6f, 0x10d85; 0x10e80, 0x10ea9; 0x10eb0, 0x10eb1; 0x10ec2, 0x10ec7; 2070 + 0x10f00, 0x10f1c; 0x10f27, 0x10f27; 0x10f30, 0x10f45; 0x10f70, 0x10f81; 0x10fb0, 0x10fc4; 2071 + 0x10fe0, 0x10ff6; 0x11003, 0x11037; 0x11071, 0x11072; 0x11075, 0x11075; 0x11083, 0x110af; 2072 + 0x110d0, 0x110e8; 0x11103, 0x11126; 0x11144, 0x11144; 0x11147, 0x11147; 0x11150, 0x11172; 2073 + 0x11176, 0x11176; 0x11183, 0x111b2; 0x111c1, 0x111c4; 0x111da, 0x111da; 0x111dc, 0x111dc; 2074 + 0x11200, 0x11211; 0x11213, 0x1122b; 0x1123f, 0x11240; 0x11280, 0x11286; 0x11288, 0x11288; 2075 + 0x1128a, 0x1128d; 0x1128f, 0x1129d; 0x1129f, 0x112a8; 0x112b0, 0x112de; 0x11305, 0x1130c; 2076 + 0x1130f, 0x11310; 0x11313, 0x11328; 0x1132a, 0x11330; 0x11332, 0x11333; 0x11335, 0x11339; 2077 + 0x1133d, 0x1133d; 0x11350, 0x11350; 0x1135d, 0x11361; 0x11380, 0x11389; 0x1138b, 0x1138b; 2078 + 0x1138e, 0x1138e; 0x11390, 0x113b5; 0x113b7, 0x113b7; 0x113d1, 0x113d1; 0x113d3, 0x113d3; 2079 + 0x11400, 0x11434; 0x11447, 0x1144a; 0x1145f, 0x11461; 0x11480, 0x114af; 0x114c4, 0x114c5; 2080 + 0x114c7, 0x114c7; 0x11580, 0x115ae; 0x115d8, 0x115db; 0x11600, 0x1162f; 0x11644, 0x11644; 2081 + 0x11680, 0x116aa; 0x116b8, 0x116b8; 0x11700, 0x1171a; 0x11740, 0x11746; 0x11800, 0x1182b; 2082 + 0x118a0, 0x118df; 0x118ff, 0x11906; 0x11909, 0x11909; 0x1190c, 0x11913; 0x11915, 0x11916; 2083 + 0x11918, 0x1192f; 0x1193f, 0x1193f; 0x11941, 0x11941; 0x119a0, 0x119a7; 0x119aa, 0x119d0; 2084 + 0x119e1, 0x119e1; 0x119e3, 0x119e3; 0x11a00, 0x11a00; 0x11a0b, 0x11a32; 0x11a3a, 0x11a3a; 2085 + 0x11a50, 0x11a50; 0x11a5c, 0x11a89; 0x11a9d, 0x11a9d; 0x11ab0, 0x11af8; 0x11bc0, 0x11be0; 2086 + 0x11c00, 0x11c08; 0x11c0a, 0x11c2e; 0x11c40, 0x11c40; 0x11c72, 0x11c8f; 0x11d00, 0x11d06; 2087 + 0x11d08, 0x11d09; 0x11d0b, 0x11d30; 0x11d46, 0x11d46; 0x11d60, 0x11d65; 0x11d67, 0x11d68; 2088 + 0x11d6a, 0x11d89; 0x11d98, 0x11d98; 0x11db0, 0x11ddb; 0x11ee0, 0x11ef2; 0x11f02, 0x11f02; 2089 + 0x11f04, 0x11f10; 0x11f12, 0x11f33; 0x11fb0, 0x11fb0; 0x12000, 0x12399; 0x12400, 0x1246e; 2090 + 0x12480, 0x12543; 0x12f90, 0x12ff0; 0x13000, 0x1342f; 0x13441, 0x13446; 0x13460, 0x143fa; 2091 + 0x14400, 0x14646; 0x16100, 0x1611d; 0x16800, 0x16a38; 0x16a40, 0x16a5e; 0x16a70, 0x16abe; 2092 + 0x16ad0, 0x16aed; 0x16b00, 0x16b2f; 0x16b40, 0x16b43; 0x16b63, 0x16b77; 0x16b7d, 0x16b8f; 2093 + 0x16d40, 0x16d6c; 0x16e40, 0x16e7f; 0x16ea0, 0x16eb8; 0x16ebb, 0x16ed3; 0x16f00, 0x16f4a; 2094 + 0x16f50, 0x16f50; 0x16f93, 0x16f9f; 0x16fe0, 0x16fe1; 0x16fe3, 0x16fe3; 0x16ff2, 0x16ff6; 2095 + 0x17000, 0x18cd5; 0x18cff, 0x18d1e; 0x18d80, 0x18df2; 0x1aff0, 0x1aff3; 0x1aff5, 0x1affb; 2096 + 0x1affd, 0x1affe; 0x1b000, 0x1b122; 0x1b132, 0x1b132; 0x1b150, 0x1b152; 0x1b155, 0x1b155; 2097 + 0x1b164, 0x1b167; 0x1b170, 0x1b2fb; 0x1bc00, 0x1bc6a; 0x1bc70, 0x1bc7c; 0x1bc80, 0x1bc88; 2098 + 0x1bc90, 0x1bc99; 0x1d400, 0x1d454; 0x1d456, 0x1d49c; 0x1d49e, 0x1d49f; 0x1d4a2, 0x1d4a2; 2099 + 0x1d4a5, 0x1d4a6; 0x1d4a9, 0x1d4ac; 0x1d4ae, 0x1d4b9; 0x1d4bb, 0x1d4bb; 0x1d4bd, 0x1d4c3; 2100 + 0x1d4c5, 0x1d505; 0x1d507, 0x1d50a; 0x1d50d, 0x1d514; 0x1d516, 0x1d51c; 0x1d51e, 0x1d539; 2101 + 0x1d53b, 0x1d53e; 0x1d540, 0x1d544; 0x1d546, 0x1d546; 0x1d54a, 0x1d550; 0x1d552, 0x1d6a5; 2102 + 0x1d6a8, 0x1d6c0; 0x1d6c2, 0x1d6da; 0x1d6dc, 0x1d6fa; 0x1d6fc, 0x1d714; 0x1d716, 0x1d734; 2103 + 0x1d736, 0x1d74e; 0x1d750, 0x1d76e; 0x1d770, 0x1d788; 0x1d78a, 0x1d7a8; 0x1d7aa, 0x1d7c2; 2104 + 0x1d7c4, 0x1d7cb; 0x1df00, 0x1df1e; 0x1df25, 0x1df2a; 0x1e030, 0x1e06d; 0x1e100, 0x1e12c; 2105 + 0x1e137, 0x1e13d; 0x1e14e, 0x1e14e; 0x1e290, 0x1e2ad; 0x1e2c0, 0x1e2eb; 0x1e4d0, 0x1e4eb; 2106 + 0x1e5d0, 0x1e5ed; 0x1e5f0, 0x1e5f0; 0x1e6c0, 0x1e6de; 0x1e6e0, 0x1e6e2; 0x1e6e4, 0x1e6e5; 2107 + 0x1e6e7, 0x1e6ed; 0x1e6f0, 0x1e6f4; 0x1e6fe, 0x1e6ff; 0x1e7e0, 0x1e7e6; 0x1e7e8, 0x1e7eb; 2108 + 0x1e7ed, 0x1e7ee; 0x1e7f0, 0x1e7fe; 0x1e800, 0x1e8c4; 0x1e900, 0x1e943; 0x1e94b, 0x1e94b; 2109 + 0x1ee00, 0x1ee03; 0x1ee05, 0x1ee1f; 0x1ee21, 0x1ee22; 0x1ee24, 0x1ee24; 0x1ee27, 0x1ee27; 2110 + 0x1ee29, 0x1ee32; 0x1ee34, 0x1ee37; 0x1ee39, 0x1ee39; 0x1ee3b, 0x1ee3b; 0x1ee42, 0x1ee42; 2111 + 0x1ee47, 0x1ee47; 0x1ee49, 0x1ee49; 0x1ee4b, 0x1ee4b; 0x1ee4d, 0x1ee4f; 0x1ee51, 0x1ee52; 2112 + 0x1ee54, 0x1ee54; 0x1ee57, 0x1ee57; 0x1ee59, 0x1ee59; 0x1ee5b, 0x1ee5b; 0x1ee5d, 0x1ee5d; 2113 + 0x1ee5f, 0x1ee5f; 0x1ee61, 0x1ee62; 0x1ee64, 0x1ee64; 0x1ee67, 0x1ee6a; 0x1ee6c, 0x1ee72; 2114 + 0x1ee74, 0x1ee77; 0x1ee79, 0x1ee7c; 0x1ee7e, 0x1ee7e; 0x1ee80, 0x1ee89; 0x1ee8b, 0x1ee9b; 2115 + 0x1eea1, 0x1eea3; 0x1eea5, 0x1eea9; 0x1eeab, 0x1eebb; 0x20000, 0x2a6df; 0x2a700, 0x2b81d; 2116 + 0x2b820, 0x2cead; 0x2ceb0, 0x2ebe0; 0x2ebf0, 0x2ee5d; 0x2f800, 0x2fa1d; 0x30000, 0x3134a; 2117 + 0x31350, 0x33479] 2118 + 2119 + let list = [ 2120 + ("alphabetic", alphabetic); 2121 + ("ascii_hex_digit", ascii_hex_digit); 2122 + ("hex_digit", hex_digit); 2123 + ("id_continue", id_continue); 2124 + ("id_start", id_start); 2125 + ("lowercase", lowercase); 2126 + ("math", math); 2127 + ("other_alphabetic", other_alphabetic); 2128 + ("other_lowercase", other_lowercase); 2129 + ("other_math", other_math); 2130 + ("other_uppercase", other_uppercase); 2131 + ("uppercase", uppercase); 2132 + ("white_space", white_space); 2133 + ("xid_continue", xid_continue); 2134 + ("xid_start", xid_start) 2135 + ] 2136 + 2137 + (* ignoring: 2138 + - bidi_control 2139 + - case_ignorable 2140 + - cased 2141 + - changes_when_casefolded 2142 + - changes_when_casemapped 2143 + - changes_when_lowercased 2144 + - changes_when_titlecased 2145 + - changes_when_uppercased 2146 + - dash 2147 + - default_ignorable_code_point 2148 + - deprecated 2149 + - diacritic 2150 + - extender 2151 + - grapheme_base 2152 + - grapheme_extend 2153 + - grapheme_link 2154 + - hyphen 2155 + - id_compat_math_continue 2156 + - id_compat_math_start 2157 + - ideographic 2158 + - ids_binary_operator 2159 + - ids_trinary_operator 2160 + - ids_unary_operator 2161 + - join_control 2162 + - logical_order_exception 2163 + - modifier_combining_mark 2164 + - noncharacter_code_point 2165 + - other_default_ignorable_code_point 2166 + - other_grapheme_extend 2167 + - other_id_continue 2168 + - other_id_start 2169 + - pattern_syntax 2170 + - pattern_white_space 2171 + - prepended_concatenation_mark 2172 + - quotation_mark 2173 + - radical 2174 + - regional_indicator 2175 + - sentence_terminal 2176 + - soft_dotted 2177 + - terminal_punctuation 2178 + - unified_ideograph 2179 + - variation_selector 2180 + *) 2181 + end
+56
vendor/opam/sedlex/src/syntax/unicode.mli
··· 1 + (* Version is automatically generated from unicode data at 2 + * src/generator/data *) 3 + val version : string 4 + 5 + module Categories : sig 6 + val cc : Sedlex_cset.t 7 + val cf : Sedlex_cset.t 8 + val cn : Sedlex_cset.t 9 + val co : Sedlex_cset.t 10 + val cs : Sedlex_cset.t 11 + val ll : Sedlex_cset.t 12 + val lm : Sedlex_cset.t 13 + val lo : Sedlex_cset.t 14 + val lt : Sedlex_cset.t 15 + val lu : Sedlex_cset.t 16 + val mc : Sedlex_cset.t 17 + val me : Sedlex_cset.t 18 + val mn : Sedlex_cset.t 19 + val nd : Sedlex_cset.t 20 + val nl : Sedlex_cset.t 21 + val no : Sedlex_cset.t 22 + val pc : Sedlex_cset.t 23 + val pd : Sedlex_cset.t 24 + val pe : Sedlex_cset.t 25 + val pf : Sedlex_cset.t 26 + val pi : Sedlex_cset.t 27 + val po : Sedlex_cset.t 28 + val ps : Sedlex_cset.t 29 + val sc : Sedlex_cset.t 30 + val sk : Sedlex_cset.t 31 + val sm : Sedlex_cset.t 32 + val so : Sedlex_cset.t 33 + val zl : Sedlex_cset.t 34 + val zp : Sedlex_cset.t 35 + val zs : Sedlex_cset.t 36 + val list : (string * Sedlex_cset.t) list 37 + end 38 + 39 + module Properties : sig 40 + val alphabetic : Sedlex_cset.t 41 + val ascii_hex_digit : Sedlex_cset.t 42 + val hex_digit : Sedlex_cset.t 43 + val id_continue : Sedlex_cset.t 44 + val id_start : Sedlex_cset.t 45 + val lowercase : Sedlex_cset.t 46 + val math : Sedlex_cset.t 47 + val other_alphabetic : Sedlex_cset.t 48 + val other_lowercase : Sedlex_cset.t 49 + val other_math : Sedlex_cset.t 50 + val other_uppercase : Sedlex_cset.t 51 + val uppercase : Sedlex_cset.t 52 + val white_space : Sedlex_cset.t 53 + val xid_continue : Sedlex_cset.t 54 + val xid_start : Sedlex_cset.t 55 + val list : (string * Sedlex_cset.t) list 56 + end
+49
vendor/opam/sedlex/src/syntax/utf8.ml
··· 1 + open Sedlexing 2 + 3 + let unsafe_byte s j = Char.code (String.unsafe_get s j) 4 + let malformed s j l = `Malformed (String.sub s j l) 5 + 6 + let r_utf_8 s j l = 7 + (* assert (0 <= j && 0 <= l && j + l <= String.length s); *) 8 + let uchar c = `Uchar (Uchar.unsafe_of_int c) in 9 + match l with 10 + | 1 -> uchar (unsafe_byte s j) 11 + | 2 -> ( 12 + let b0 = unsafe_byte s j in 13 + let b1 = unsafe_byte s (j + 1) in 14 + match Utf8.Helper.check_two b0 b1 with 15 + | i -> uchar i 16 + | exception MalFormed -> malformed s j l) 17 + | 3 -> ( 18 + let b0 = unsafe_byte s j in 19 + let b1 = unsafe_byte s (j + 1) in 20 + let b2 = unsafe_byte s (j + 2) in 21 + match Utf8.Helper.check_three b0 b1 b2 with 22 + | i -> uchar i 23 + | exception MalFormed -> malformed s j l) 24 + | 4 -> ( 25 + let b0 = unsafe_byte s j in 26 + let b1 = unsafe_byte s (j + 1) in 27 + let b2 = unsafe_byte s (j + 2) in 28 + let b3 = unsafe_byte s (j + 3) in 29 + match Utf8.Helper.check_four b0 b1 b2 b3 with 30 + | i -> uchar i 31 + | exception MalFormed -> malformed s j l) 32 + | _ -> assert false 33 + 34 + let fold ~f acc s = 35 + let rec loop acc f s i last = 36 + if i > last then acc 37 + else ( 38 + match Utf8.Helper.width (String.unsafe_get s i) with 39 + | exception MalFormed -> 40 + loop (f acc i (malformed s i 1)) f s (i + 1) last 41 + | need -> 42 + let rem = last - i + 1 in 43 + if rem < need then f acc i (malformed s i rem) 44 + else loop (f acc i (r_utf_8 s i need)) f s (i + need) last) 45 + in 46 + let pos = 0 in 47 + let len = String.length s in 48 + let last = pos + len - 1 in 49 + loop acc f s pos last
+5
vendor/opam/sedlex/src/syntax/utf8.mli
··· 1 + val fold : 2 + f:('a -> int -> [> `Malformed of string | `Uchar of Uchar.t ] -> 'a) -> 3 + 'a -> 4 + string -> 5 + 'a
+365
vendor/opam/sedlex/src/syntax/xml.ml
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + 4 + open Sedlex_cset 5 + 6 + (* Unicode classes from XML *) 7 + let base_char = 8 + let l = 9 + [ 10 + (0x0041, 0x005A); 11 + (0x0061, 0x007A); 12 + (0x00C0, 0x00D6); 13 + (0x00D8, 0x00F6); 14 + (0x00F8, 0x00FF); 15 + (0x0100, 0x0131); 16 + (0x0134, 0x013E); 17 + (0x0141, 0x0148); 18 + (0x014A, 0x017E); 19 + (0x0180, 0x01C3); 20 + (0x01CD, 0x01F0); 21 + (0x01F4, 0x01F5); 22 + (0x01FA, 0x0217); 23 + (0x0250, 0x02A8); 24 + (0x02BB, 0x02C1); 25 + (0x0386, 0x0386); 26 + (0x0388, 0x038A); 27 + (0x038C, 0x038C); 28 + (0x038E, 0x03A1); 29 + (0x03A3, 0x03CE); 30 + (0x03D0, 0x03D6); 31 + (0x03DA, 0x03DA); 32 + (0x03DC, 0x03DC); 33 + (0x03DE, 0x03DE); 34 + (0x03E0, 0x03E0); 35 + (0x03E2, 0x03F3); 36 + (0x0401, 0x040C); 37 + (0x040E, 0x044F); 38 + (0x0451, 0x045C); 39 + (0x045E, 0x0481); 40 + (0x0490, 0x04C4); 41 + (0x04C7, 0x04C8); 42 + (0x04CB, 0x04CC); 43 + (0x04D0, 0x04EB); 44 + (0x04EE, 0x04F5); 45 + (0x04F8, 0x04F9); 46 + (0x0531, 0x0556); 47 + (0x0559, 0x0559); 48 + (0x0561, 0x0586); 49 + (0x05D0, 0x05EA); 50 + (0x05F0, 0x05F2); 51 + (0x0621, 0x063A); 52 + (0x0641, 0x064A); 53 + (0x0671, 0x06B7); 54 + (0x06BA, 0x06BE); 55 + (0x06C0, 0x06CE); 56 + (0x06D0, 0x06D3); 57 + (0x06D5, 0x06D5); 58 + (0x06E5, 0x06E6); 59 + (0x0905, 0x0939); 60 + (0x093D, 0x093D); 61 + (0x0958, 0x0961); 62 + (0x0985, 0x098C); 63 + (0x098F, 0x0990); 64 + (0x0993, 0x09A8); 65 + (0x09AA, 0x09B0); 66 + (0x09B2, 0x09B2); 67 + (0x09B6, 0x09B9); 68 + (0x09DC, 0x09DD); 69 + (0x09DF, 0x09E1); 70 + (0x09F0, 0x09F1); 71 + (0x0A05, 0x0A0A); 72 + (0x0A0F, 0x0A10); 73 + (0x0A13, 0x0A28); 74 + (0x0A2A, 0x0A30); 75 + (0x0A32, 0x0A33); 76 + (0x0A35, 0x0A36); 77 + (0x0A38, 0x0A39); 78 + (0x0A59, 0x0A5C); 79 + (0x0A5E, 0x0A5E); 80 + (0x0A72, 0x0A74); 81 + (0x0A85, 0x0A8B); 82 + (0x0A8D, 0x0A8D); 83 + (0x0A8F, 0x0A91); 84 + (0x0A93, 0x0AA8); 85 + (0x0AAA, 0x0AB0); 86 + (0x0AB2, 0x0AB3); 87 + (0x0AB5, 0x0AB9); 88 + (0x0ABD, 0x0ABD); 89 + (0x0AE0, 0x0AE0); 90 + (0x0B05, 0x0B0C); 91 + (0x0B0F, 0x0B10); 92 + (0x0B13, 0x0B28); 93 + (0x0B2A, 0x0B30); 94 + (0x0B32, 0x0B33); 95 + (0x0B36, 0x0B39); 96 + (0x0B3D, 0x0B3D); 97 + (0x0B5C, 0x0B5D); 98 + (0x0B5F, 0x0B61); 99 + (0x0B85, 0x0B8A); 100 + (0x0B8E, 0x0B90); 101 + (0x0B92, 0x0B95); 102 + (0x0B99, 0x0B9A); 103 + (0x0B9C, 0x0B9C); 104 + (0x0B9E, 0x0B9F); 105 + (0x0BA3, 0x0BA4); 106 + (0x0BA8, 0x0BAA); 107 + (0x0BAE, 0x0BB5); 108 + (0x0BB7, 0x0BB9); 109 + (0x0C05, 0x0C0C); 110 + (0x0C0E, 0x0C10); 111 + (0x0C12, 0x0C28); 112 + (0x0C2A, 0x0C33); 113 + (0x0C35, 0x0C39); 114 + (0x0C60, 0x0C61); 115 + (0x0C85, 0x0C8C); 116 + (0x0C8E, 0x0C90); 117 + (0x0C92, 0x0CA8); 118 + (0x0CAA, 0x0CB3); 119 + (0x0CB5, 0x0CB9); 120 + (0x0CDE, 0x0CDE); 121 + (0x0CE0, 0x0CE1); 122 + (0x0D05, 0x0D0C); 123 + (0x0D0E, 0x0D10); 124 + (0x0D12, 0x0D28); 125 + (0x0D2A, 0x0D39); 126 + (0x0D60, 0x0D61); 127 + (0x0E01, 0x0E2E); 128 + (0x0E30, 0x0E30); 129 + (0x0E32, 0x0E33); 130 + (0x0E40, 0x0E45); 131 + (0x0E81, 0x0E82); 132 + (0x0E84, 0x0E84); 133 + (0x0E87, 0x0E88); 134 + (0x0E8A, 0x0E8A); 135 + (0x0E8D, 0x0E8D); 136 + (0x0E94, 0x0E97); 137 + (0x0E99, 0x0E9F); 138 + (0x0EA1, 0x0EA3); 139 + (0x0EA5, 0x0EA5); 140 + (0x0EA7, 0x0EA7); 141 + (0x0EAA, 0x0EAB); 142 + (0x0EAD, 0x0EAE); 143 + (0x0EB0, 0x0EB0); 144 + (0x0EB2, 0x0EB3); 145 + (0x0EBD, 0x0EBD); 146 + (0x0EC0, 0x0EC4); 147 + (0x0F40, 0x0F47); 148 + (0x0F49, 0x0F69); 149 + (0x10A0, 0x10C5); 150 + (0x10D0, 0x10F6); 151 + (0x1100, 0x1100); 152 + (0x1102, 0x1103); 153 + (0x1105, 0x1107); 154 + (0x1109, 0x1109); 155 + (0x110B, 0x110C); 156 + (0x110E, 0x1112); 157 + (0x113C, 0x113C); 158 + (0x113E, 0x113E); 159 + (0x1140, 0x1140); 160 + (0x114C, 0x114C); 161 + (0x114E, 0x114E); 162 + (0x1150, 0x1150); 163 + (0x1154, 0x1155); 164 + (0x1159, 0x1159); 165 + (0x115F, 0x1161); 166 + (0x1163, 0x1163); 167 + (0x1165, 0x1165); 168 + (0x1167, 0x1167); 169 + (0x1169, 0x1169); 170 + (0x116D, 0x116E); 171 + (0x1172, 0x1173); 172 + (0x1175, 0x1175); 173 + (0x119E, 0x119E); 174 + (0x11A8, 0x11A8); 175 + (0x11AB, 0x11AB); 176 + (0x11AE, 0x11AF); 177 + (0x11B7, 0x11B8); 178 + (0x11BA, 0x11BA); 179 + (0x11BC, 0x11C2); 180 + (0x11EB, 0x11EB); 181 + (0x11F0, 0x11F0); 182 + (0x11F9, 0x11F9); 183 + (0x1E00, 0x1E9B); 184 + (0x1EA0, 0x1EF9); 185 + (0x1F00, 0x1F15); 186 + (0x1F18, 0x1F1D); 187 + (0x1F20, 0x1F45); 188 + (0x1F48, 0x1F4D); 189 + (0x1F50, 0x1F57); 190 + (0x1F59, 0x1F59); 191 + (0x1F5B, 0x1F5B); 192 + (0x1F5D, 0x1F5D); 193 + (0x1F5F, 0x1F7D); 194 + (0x1F80, 0x1FB4); 195 + (0x1FB6, 0x1FBC); 196 + (0x1FBE, 0x1FBE); 197 + (0x1FC2, 0x1FC4); 198 + (0x1FC6, 0x1FCC); 199 + (0x1FD0, 0x1FD3); 200 + (0x1FD6, 0x1FDB); 201 + (0x1FE0, 0x1FEC); 202 + (0x1FF2, 0x1FF4); 203 + (0x1FF6, 0x1FFC); 204 + (0x2126, 0x2126); 205 + (0x212A, 0x212B); 206 + (0x212E, 0x212E); 207 + (0x2180, 0x2182); 208 + (0x3041, 0x3094); 209 + (0x30A1, 0x30FA); 210 + (0x3105, 0x312C); 211 + (0xAC00, 0xD7A3); 212 + ] 213 + in 214 + of_list l 215 + 216 + let ideographic = 217 + let l = [(0x3007, 0x3007); (0x3021, 0x3029); (0x4E00, 0x9FA5)] in 218 + of_list l 219 + 220 + let combining_char = 221 + let l = 222 + [ 223 + (0x0300, 0x0345); 224 + (0x0360, 0x0361); 225 + (0x0483, 0x0486); 226 + (0x0591, 0x05A1); 227 + (0x05A3, 0x05B9); 228 + (0x05BB, 0x05BD); 229 + (0x05BF, 0x05BF); 230 + (0x05C1, 0x05C2); 231 + (0x05C4, 0x05C4); 232 + (0x064B, 0x0652); 233 + (0x0670, 0x0670); 234 + (0x06D6, 0x06DC); 235 + (0x06DD, 0x06DF); 236 + (0x06E0, 0x06E4); 237 + (0x06E7, 0x06E8); 238 + (0x06EA, 0x06ED); 239 + (0x0901, 0x0903); 240 + (0x093C, 0x093C); 241 + (0x093E, 0x094C); 242 + (0x094D, 0x094D); 243 + (0x0951, 0x0954); 244 + (0x0962, 0x0963); 245 + (0x0981, 0x0983); 246 + (0x09BC, 0x09BC); 247 + (0x09BE, 0x09BE); 248 + (0x09BF, 0x09BF); 249 + (0x09C0, 0x09C4); 250 + (0x09C7, 0x09C8); 251 + (0x09CB, 0x09CD); 252 + (0x09D7, 0x09D7); 253 + (0x09E2, 0x09E3); 254 + (0x0A02, 0x0A02); 255 + (0x0A3C, 0x0A3C); 256 + (0x0A3E, 0x0A3E); 257 + (0x0A3F, 0x0A3F); 258 + (0x0A40, 0x0A42); 259 + (0x0A47, 0x0A48); 260 + (0x0A4B, 0x0A4D); 261 + (0x0A70, 0x0A71); 262 + (0x0A81, 0x0A83); 263 + (0x0ABC, 0x0ABC); 264 + (0x0ABE, 0x0AC5); 265 + (0x0AC7, 0x0AC9); 266 + (0x0ACB, 0x0ACD); 267 + (0x0B01, 0x0B03); 268 + (0x0B3C, 0x0B3C); 269 + (0x0B3E, 0x0B43); 270 + (0x0B47, 0x0B48); 271 + (0x0B4B, 0x0B4D); 272 + (0x0B56, 0x0B57); 273 + (0x0B82, 0x0B83); 274 + (0x0BBE, 0x0BC2); 275 + (0x0BC6, 0x0BC8); 276 + (0x0BCA, 0x0BCD); 277 + (0x0BD7, 0x0BD7); 278 + (0x0C01, 0x0C03); 279 + (0x0C3E, 0x0C44); 280 + (0x0C46, 0x0C48); 281 + (0x0C4A, 0x0C4D); 282 + (0x0C55, 0x0C56); 283 + (0x0C82, 0x0C83); 284 + (0x0CBE, 0x0CC4); 285 + (0x0CC6, 0x0CC8); 286 + (0x0CCA, 0x0CCD); 287 + (0x0CD5, 0x0CD6); 288 + (0x0D02, 0x0D03); 289 + (0x0D3E, 0x0D43); 290 + (0x0D46, 0x0D48); 291 + (0x0D4A, 0x0D4D); 292 + (0x0D57, 0x0D57); 293 + (0x0E31, 0x0E31); 294 + (0x0E34, 0x0E3A); 295 + (0x0E47, 0x0E4E); 296 + (0x0EB1, 0x0EB1); 297 + (0x0EB4, 0x0EB9); 298 + (0x0EBB, 0x0EBC); 299 + (0x0EC8, 0x0ECD); 300 + (0x0F18, 0x0F19); 301 + (0x0F35, 0x0F35); 302 + (0x0F37, 0x0F37); 303 + (0x0F39, 0x0F39); 304 + (0x0F3E, 0x0F3E); 305 + (0x0F3F, 0x0F3F); 306 + (0x0F71, 0x0F84); 307 + (0x0F86, 0x0F8B); 308 + (0x0F90, 0x0F95); 309 + (0x0F97, 0x0F97); 310 + (0x0F99, 0x0FAD); 311 + (0x0FB1, 0x0FB7); 312 + (0x0FB9, 0x0FB9); 313 + (0x20D0, 0x20DC); 314 + (0x20E1, 0x20E1); 315 + (0x302A, 0x302F); 316 + (0x3099, 0x3099); 317 + (0x309A, 0x309A); 318 + ] 319 + in 320 + of_list l 321 + 322 + let digit = 323 + let l = 324 + [ 325 + (0x0030, 0x0039); 326 + (0x0660, 0x0669); 327 + (0x06F0, 0x06F9); 328 + (0x0966, 0x096F); 329 + (0x09E6, 0x09EF); 330 + (0x0A66, 0x0A6F); 331 + (0x0AE6, 0x0AEF); 332 + (0x0B66, 0x0B6F); 333 + (0x0BE7, 0x0BEF); 334 + (0x0C66, 0x0C6F); 335 + (0x0CE6, 0x0CEF); 336 + (0x0D66, 0x0D6F); 337 + (0x0E50, 0x0E59); 338 + (0x0ED0, 0x0ED9); 339 + (0x0F20, 0x0F29); 340 + ] 341 + in 342 + of_list l 343 + 344 + let extender = 345 + let l = 346 + [ 347 + (0x00B7, 0x00B7); 348 + (0x02D0, 0x02D1); 349 + (0x0387, 0x0387); 350 + (0x0640, 0x0640); 351 + (0x0E46, 0x0E46); 352 + (0x0EC6, 0x0EC6); 353 + (0x3005, 0x3005); 354 + (0x3031, 0x3035); 355 + (0x309D, 0x309E); 356 + (0x30FC, 0x30FE); 357 + ] 358 + in 359 + of_list l 360 + 361 + let blank = 362 + let l = [(0x0009, 0x000A); (0x000D, 0x000D); (0x0020, 0x0020)] in 363 + of_list l 364 + 365 + let letter = union base_char ideographic
+14
vendor/opam/sedlex/src/syntax/xml.mli
··· 1 + (* The package sedlex is released under the terms of an MIT-like license. *) 2 + (* See the attached LICENSE file. *) 3 + 4 + (** Unicode classes from XML *) 5 + 6 + open Sedlex_cset 7 + 8 + val letter : t 9 + val digit : t 10 + val extender : t 11 + val base_char : t 12 + val ideographic : t 13 + val combining_char : t 14 + val blank : t
vendor/opam/sedlex/test/UTF-8-test.txt

This is a binary file and will not be displayed.

+1062
vendor/opam/sedlex/test/basic.ml
··· 1 + let () = set_binary_mode_out stdout true 2 + let digit = [%sedlex.regexp? '0' .. '9'] 3 + let number = [%sedlex.regexp? Plus digit] 4 + 5 + let print_pos buf = 6 + let f { Lexing.pos_lnum; pos_bol; pos_cnum; _ } = 7 + Printf.sprintf "line=%d:bol=%d:cnum=%d" pos_lnum pos_bol pos_cnum 8 + in 9 + let f ~prefix (startp, endp) = 10 + Printf.printf "%s pos: [%s;%s]\n" prefix (f startp) (f endp) 11 + in 12 + f ~prefix:"code point" (Sedlexing.lexing_positions buf); 13 + f ~prefix:"bytes" (Sedlexing.lexing_bytes_positions buf) 14 + 15 + let rec token buf = 16 + match%sedlex buf with 17 + | number -> 18 + print_pos buf; 19 + Printf.printf "Number %s\n" (Sedlexing.Utf8.lexeme buf); 20 + token buf 21 + | id_start, Star id_continue -> 22 + print_pos buf; 23 + Printf.printf "Ident %s\n" (Sedlexing.Utf8.lexeme buf); 24 + token buf 25 + | Plus xml_blank -> token buf 26 + | Plus (Chars "+*-/") -> 27 + print_pos buf; 28 + Printf.printf "Op %s\n" (Sedlexing.Utf8.lexeme buf); 29 + token buf 30 + | eof -> 31 + print_pos buf; 32 + print_endline "EOF" 33 + | any -> 34 + print_pos buf; 35 + Printf.printf "Any %s\n" (Sedlexing.Utf8.lexeme buf); 36 + token buf 37 + | _ -> assert false 38 + 39 + let utf16_of_utf8 ?(endian = Sedlexing.Utf16.Big_endian) s = 40 + let b = Buffer.create (String.length s * 4) in 41 + let rec loop pos = 42 + if pos >= String.length s then () 43 + else ( 44 + let c = String.get_utf_8_uchar s pos in 45 + let u = Uchar.utf_decode_uchar c in 46 + (match endian with 47 + | Big_endian -> Buffer.add_utf_16be_uchar b u 48 + | Little_endian -> Buffer.add_utf_16le_uchar b u); 49 + loop (pos + Uchar.utf_decode_length c)) 50 + in 51 + loop 0; 52 + Buffer.contents b 53 + 54 + let remove_last s n = String.sub s 0 (String.length s - n) 55 + 56 + let gen_from_string s = 57 + let i = ref 0 in 58 + fun () -> 59 + if !i >= String.length s then None 60 + else ( 61 + let c = String.get s !i in 62 + incr i; 63 + Some c) 64 + 65 + let channel_from_string s = 66 + let name, oc = Filename.open_temp_file "" "" in 67 + output_string oc s; 68 + close_out oc; 69 + open_in_bin name 70 + 71 + let test_latin s f = 72 + print_endline "== from_string =="; 73 + (try f (Sedlexing.Latin1.from_string s) 74 + with Sedlexing.MalFormed -> print_endline "MalFormed"); 75 + print_endline "== from_gen =="; 76 + (try f (Sedlexing.Latin1.from_gen (gen_from_string s)) 77 + with Sedlexing.MalFormed -> print_endline "MalFormed"); 78 + print_endline "== from_channel =="; 79 + try f (Sedlexing.Latin1.from_channel (channel_from_string s)) 80 + with Sedlexing.MalFormed -> print_endline "MalFormed" 81 + 82 + let test_utf8 s f = 83 + print_endline "== from_string =="; 84 + (try f (Sedlexing.Utf8.from_string s) 85 + with Sedlexing.MalFormed -> print_endline "MalFormed"); 86 + print_endline "== from_gen =="; 87 + (try f (Sedlexing.Utf8.from_gen (gen_from_string s)) 88 + with Sedlexing.MalFormed -> print_endline "MalFormed"); 89 + print_endline "== from_channel =="; 90 + try f (Sedlexing.Utf8.from_channel (channel_from_string s)) 91 + with Sedlexing.MalFormed -> print_endline "MalFormed" 92 + 93 + let test_utf16 s bo f = 94 + print_endline "== from_string =="; 95 + (try f (Sedlexing.Utf16.from_string s bo) 96 + with Sedlexing.MalFormed -> print_endline "MalFormed"); 97 + print_endline "== from_gen =="; 98 + (try f (Sedlexing.Utf16.from_gen (gen_from_string s) bo) 99 + with Sedlexing.MalFormed -> print_endline "MalFormed"); 100 + print_endline "== from_channel =="; 101 + try f (Sedlexing.Utf16.from_channel (channel_from_string s) bo) 102 + with Sedlexing.MalFormed -> print_endline "MalFormed" 103 + 104 + let%expect_test "latin1" = 105 + let s = "asas 123 + 2asd" in 106 + test_latin s (fun lb -> token lb); 107 + [%expect 108 + {| 109 + == from_string == 110 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 111 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 112 + Ident asas 113 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 114 + bytes pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 115 + Number 123 116 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 117 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 118 + Op + 119 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 120 + bytes pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 121 + Number 2 122 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 123 + bytes pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 124 + Ident asd 125 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 126 + bytes pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 127 + EOF 128 + == from_gen == 129 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 130 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 131 + Ident asas 132 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 133 + bytes pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 134 + Number 123 135 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 136 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 137 + Op + 138 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 139 + bytes pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 140 + Number 2 141 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 142 + bytes pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 143 + Ident asd 144 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 145 + bytes pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 146 + EOF 147 + == from_channel == 148 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 149 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 150 + Ident asas 151 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 152 + bytes pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 153 + Number 123 154 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 155 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 156 + Op + 157 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 158 + bytes pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 159 + Number 2 160 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 161 + bytes pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 162 + Ident asd 163 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 164 + bytes pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 165 + EOF |}]; 166 + let s = "asas 123 + 2\129" in 167 + test_latin s (fun lb -> token lb); 168 + [%expect 169 + {| 170 + == from_string == 171 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 172 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 173 + Ident asas 174 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 175 + bytes pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 176 + Number 123 177 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 178 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 179 + Op + 180 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 181 + bytes pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 182 + Number 2 183 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 184 + bytes pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 185 + Any  186 + code point pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=13] 187 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=13] 188 + EOF 189 + == from_gen == 190 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 191 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 192 + Ident asas 193 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 194 + bytes pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 195 + Number 123 196 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 197 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 198 + Op + 199 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 200 + bytes pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 201 + Number 2 202 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 203 + bytes pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 204 + Any  205 + code point pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=13] 206 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=13] 207 + EOF 208 + == from_channel == 209 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 210 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 211 + Ident asas 212 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 213 + bytes pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 214 + Number 123 215 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 216 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 217 + Op + 218 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 219 + bytes pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 220 + Number 2 221 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 222 + bytes pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 223 + Any  224 + code point pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=13] 225 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=13] 226 + EOF |}] 227 + 228 + let%expect_test "utf8" = 229 + let s = {|as🎉as 123 + 2asd|} in 230 + test_utf8 s (fun lb -> token lb); 231 + [%expect 232 + {| 233 + == from_string == 234 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 235 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 236 + Ident as 237 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=3] 238 + bytes pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=6] 239 + Any 🎉 240 + code point pos: [line=1:bol=0:cnum=3;line=1:bol=0:cnum=5] 241 + bytes pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=8] 242 + Ident as 243 + code point pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=9] 244 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=12] 245 + Number 123 246 + code point pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=11] 247 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=14] 248 + Op + 249 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 250 + bytes pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=16] 251 + Number 2 252 + code point pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=16] 253 + bytes pos: [line=1:bol=0:cnum=16;line=1:bol=0:cnum=19] 254 + Ident asd 255 + code point pos: [line=1:bol=0:cnum=16;line=1:bol=0:cnum=16] 256 + bytes pos: [line=1:bol=0:cnum=19;line=1:bol=0:cnum=19] 257 + EOF 258 + == from_gen == 259 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 260 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 261 + Ident as 262 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=3] 263 + bytes pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=6] 264 + Any 🎉 265 + code point pos: [line=1:bol=0:cnum=3;line=1:bol=0:cnum=5] 266 + bytes pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=8] 267 + Ident as 268 + code point pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=9] 269 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=12] 270 + Number 123 271 + code point pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=11] 272 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=14] 273 + Op + 274 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 275 + bytes pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=16] 276 + Number 2 277 + code point pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=16] 278 + bytes pos: [line=1:bol=0:cnum=16;line=1:bol=0:cnum=19] 279 + Ident asd 280 + code point pos: [line=1:bol=0:cnum=16;line=1:bol=0:cnum=16] 281 + bytes pos: [line=1:bol=0:cnum=19;line=1:bol=0:cnum=19] 282 + EOF 283 + == from_channel == 284 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 285 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 286 + Ident as 287 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=3] 288 + bytes pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=6] 289 + Any 🎉 290 + code point pos: [line=1:bol=0:cnum=3;line=1:bol=0:cnum=5] 291 + bytes pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=8] 292 + Ident as 293 + code point pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=9] 294 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=12] 295 + Number 123 296 + code point pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=11] 297 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=14] 298 + Op + 299 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=13] 300 + bytes pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=16] 301 + Number 2 302 + code point pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=16] 303 + bytes pos: [line=1:bol=0:cnum=16;line=1:bol=0:cnum=19] 304 + Ident asd 305 + code point pos: [line=1:bol=0:cnum=16;line=1:bol=0:cnum=16] 306 + bytes pos: [line=1:bol=0:cnum=19;line=1:bol=0:cnum=19] 307 + EOF |}]; 308 + let s = {|as🎉as 123 + 2|} ^ "\129" in 309 + test_utf8 s (fun lb -> token lb); 310 + [%expect 311 + {| 312 + == from_string == 313 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 314 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 315 + Ident as 316 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=3] 317 + bytes pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=6] 318 + Any 🎉 319 + code point pos: [line=1:bol=0:cnum=3;line=1:bol=0:cnum=5] 320 + bytes pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=8] 321 + Ident as 322 + code point pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=9] 323 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=12] 324 + Number 123 325 + code point pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=11] 326 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=14] 327 + Op + 328 + MalFormed 329 + == from_gen == 330 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 331 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 332 + Ident as 333 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=3] 334 + bytes pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=6] 335 + Any 🎉 336 + code point pos: [line=1:bol=0:cnum=3;line=1:bol=0:cnum=5] 337 + bytes pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=8] 338 + Ident as 339 + code point pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=9] 340 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=12] 341 + Number 123 342 + code point pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=11] 343 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=14] 344 + Op + 345 + MalFormed 346 + == from_channel == 347 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 348 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 349 + Ident as 350 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=3] 351 + bytes pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=6] 352 + Any 🎉 353 + code point pos: [line=1:bol=0:cnum=3;line=1:bol=0:cnum=5] 354 + bytes pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=8] 355 + Ident as 356 + code point pos: [line=1:bol=0:cnum=6;line=1:bol=0:cnum=9] 357 + bytes pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=12] 358 + Number 123 359 + code point pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=11] 360 + bytes pos: [line=1:bol=0:cnum=13;line=1:bol=0:cnum=14] 361 + Op + 362 + MalFormed |}] 363 + 364 + let%expect_test "utf16" = 365 + let bo = None in 366 + let s = utf16_of_utf8 "asas 123 + 2asd" in 367 + test_utf16 s bo (fun lb -> token lb); 368 + [%expect 369 + {| 370 + == from_string == 371 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 372 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 373 + Ident asas 374 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 375 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 376 + Number 123 377 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 378 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 379 + Op + 380 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 381 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 382 + Number 2 383 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 384 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 385 + Ident asd 386 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 387 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 388 + EOF 389 + == from_gen == 390 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 391 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 392 + Ident asas 393 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 394 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 395 + Number 123 396 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 397 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 398 + Op + 399 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 400 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 401 + Number 2 402 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 403 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 404 + Ident asd 405 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 406 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 407 + EOF 408 + == from_channel == 409 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 410 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 411 + Ident asas 412 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 413 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 414 + Number 123 415 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 416 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 417 + Op + 418 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 419 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 420 + Number 2 421 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 422 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 423 + Ident asd 424 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 425 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 426 + EOF |}]; 427 + let s = utf16_of_utf8 "asas 123 + 2" ^ "a" in 428 + test_utf16 s bo (fun lb -> token lb); 429 + [%expect 430 + {| 431 + == from_string == 432 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 433 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 434 + Ident asas 435 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 436 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 437 + Number 123 438 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 439 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 440 + Op + 441 + MalFormed 442 + == from_gen == 443 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 444 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 445 + Ident asas 446 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 447 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 448 + Number 123 449 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 450 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 451 + Op + 452 + MalFormed 453 + == from_channel == 454 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 455 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 456 + Ident asas 457 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 458 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 459 + Number 123 460 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 461 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 462 + Op + 463 + MalFormed |}]; 464 + let s1 = "12asd12\u{1F6F3}" in 465 + let s = utf16_of_utf8 s1 in 466 + test_utf16 s bo (fun lb -> token lb); 467 + [%expect 468 + {| 469 + == from_string == 470 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 471 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 472 + Number 12 473 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 474 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 475 + Ident asd12 476 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 477 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 478 + Any 🛳 479 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 480 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 481 + EOF 482 + == from_gen == 483 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 484 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 485 + Number 12 486 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 487 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 488 + Ident asd12 489 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 490 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 491 + Any 🛳 492 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 493 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 494 + EOF 495 + == from_channel == 496 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 497 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 498 + Number 12 499 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 500 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 501 + Ident asd12 502 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 503 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 504 + Any 🛳 505 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 506 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 507 + EOF |}]; 508 + test_utf16 (remove_last s 1) bo (fun lb -> token lb); 509 + [%expect 510 + {| 511 + == from_string == 512 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 513 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 514 + Number 12 515 + MalFormed 516 + == from_gen == 517 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 518 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 519 + Number 12 520 + MalFormed 521 + == from_channel == 522 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 523 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 524 + Number 12 525 + MalFormed |}]; 526 + test_utf16 (remove_last s 2) bo (fun lb -> token lb); 527 + [%expect 528 + {| 529 + == from_string == 530 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 531 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 532 + Number 12 533 + MalFormed 534 + == from_gen == 535 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 536 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 537 + Number 12 538 + MalFormed 539 + == from_channel == 540 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 541 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 542 + Number 12 543 + MalFormed |}]; 544 + test_utf16 (remove_last s 3) bo (fun lb -> token lb); 545 + [%expect 546 + {| 547 + == from_string == 548 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 549 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 550 + Number 12 551 + MalFormed 552 + == from_gen == 553 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 554 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 555 + Number 12 556 + MalFormed 557 + == from_channel == 558 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 559 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 560 + Number 12 561 + MalFormed |}]; 562 + test_utf16 (remove_last s 4) bo (fun lb -> token lb); 563 + [%expect 564 + {| 565 + == from_string == 566 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 567 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 568 + Number 12 569 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 570 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 571 + Ident asd12 572 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 573 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 574 + EOF 575 + == from_gen == 576 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 577 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 578 + Number 12 579 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 580 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 581 + Ident asd12 582 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 583 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 584 + EOF 585 + == from_channel == 586 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 587 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 588 + Number 12 589 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 590 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 591 + Ident asd12 592 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 593 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 594 + EOF |}] 595 + 596 + let%expect_test "utf16-be" = 597 + let endian = Sedlexing.Utf16.Big_endian in 598 + let utf16_of_utf8 = utf16_of_utf8 ~endian in 599 + let bo = Some endian in 600 + let s = utf16_of_utf8 "asas 123 + 2asd" in 601 + test_utf16 s bo (fun lb -> token lb); 602 + [%expect 603 + {| 604 + == from_string == 605 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 606 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 607 + Ident asas 608 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 609 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 610 + Number 123 611 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 612 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 613 + Op + 614 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 615 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 616 + Number 2 617 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 618 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 619 + Ident asd 620 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 621 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 622 + EOF 623 + == from_gen == 624 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 625 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 626 + Ident asas 627 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 628 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 629 + Number 123 630 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 631 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 632 + Op + 633 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 634 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 635 + Number 2 636 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 637 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 638 + Ident asd 639 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 640 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 641 + EOF 642 + == from_channel == 643 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 644 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 645 + Ident asas 646 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 647 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 648 + Number 123 649 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 650 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 651 + Op + 652 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 653 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 654 + Number 2 655 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 656 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 657 + Ident asd 658 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 659 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 660 + EOF |}]; 661 + let s = utf16_of_utf8 "asas 123 + 2" ^ "a" in 662 + test_utf16 s bo (fun lb -> token lb); 663 + [%expect 664 + {| 665 + == from_string == 666 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 667 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 668 + Ident asas 669 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 670 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 671 + Number 123 672 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 673 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 674 + Op + 675 + MalFormed 676 + == from_gen == 677 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 678 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 679 + Ident asas 680 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 681 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 682 + Number 123 683 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 684 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 685 + Op + 686 + MalFormed 687 + == from_channel == 688 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 689 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 690 + Ident asas 691 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 692 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 693 + Number 123 694 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 695 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 696 + Op + 697 + MalFormed |}]; 698 + let s1 = "12asd12\u{1F6F3}" in 699 + let s = utf16_of_utf8 s1 in 700 + test_utf16 s bo (fun lb -> token lb); 701 + [%expect 702 + {| 703 + == from_string == 704 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 705 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 706 + Number 12 707 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 708 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 709 + Ident asd12 710 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 711 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 712 + Any 🛳 713 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 714 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 715 + EOF 716 + == from_gen == 717 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 718 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 719 + Number 12 720 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 721 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 722 + Ident asd12 723 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 724 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 725 + Any 🛳 726 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 727 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 728 + EOF 729 + == from_channel == 730 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 731 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 732 + Number 12 733 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 734 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 735 + Ident asd12 736 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 737 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 738 + Any 🛳 739 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 740 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 741 + EOF |}]; 742 + test_utf16 (remove_last s 1) bo (fun lb -> token lb); 743 + [%expect 744 + {| 745 + == from_string == 746 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 747 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 748 + Number 12 749 + MalFormed 750 + == from_gen == 751 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 752 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 753 + Number 12 754 + MalFormed 755 + == from_channel == 756 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 757 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 758 + Number 12 759 + MalFormed |}]; 760 + test_utf16 (remove_last s 2) bo (fun lb -> token lb); 761 + [%expect 762 + {| 763 + == from_string == 764 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 765 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 766 + Number 12 767 + MalFormed 768 + == from_gen == 769 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 770 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 771 + Number 12 772 + MalFormed 773 + == from_channel == 774 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 775 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 776 + Number 12 777 + MalFormed |}]; 778 + test_utf16 (remove_last s 3) bo (fun lb -> token lb); 779 + [%expect 780 + {| 781 + == from_string == 782 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 783 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 784 + Number 12 785 + MalFormed 786 + == from_gen == 787 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 788 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 789 + Number 12 790 + MalFormed 791 + == from_channel == 792 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 793 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 794 + Number 12 795 + MalFormed |}]; 796 + test_utf16 (remove_last s 4) bo (fun lb -> token lb); 797 + [%expect 798 + {| 799 + == from_string == 800 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 801 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 802 + Number 12 803 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 804 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 805 + Ident asd12 806 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 807 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 808 + EOF 809 + == from_gen == 810 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 811 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 812 + Number 12 813 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 814 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 815 + Ident asd12 816 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 817 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 818 + EOF 819 + == from_channel == 820 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 821 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 822 + Number 12 823 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 824 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 825 + Ident asd12 826 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 827 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 828 + EOF |}] 829 + 830 + let%expect_test "utf16-le" = 831 + let endian = Sedlexing.Utf16.Little_endian in 832 + let utf16_of_utf8 = utf16_of_utf8 ~endian in 833 + let bo = Some endian in 834 + let s = utf16_of_utf8 "asas 123 + 2asd" in 835 + test_utf16 s bo (fun lb -> token lb); 836 + [%expect 837 + {| 838 + == from_string == 839 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 840 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 841 + Ident asas 842 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 843 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 844 + Number 123 845 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 846 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 847 + Op + 848 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 849 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 850 + Number 2 851 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 852 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 853 + Ident asd 854 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 855 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 856 + EOF 857 + == from_gen == 858 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 859 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 860 + Ident asas 861 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 862 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 863 + Number 123 864 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 865 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 866 + Op + 867 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 868 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 869 + Number 2 870 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 871 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 872 + Ident asd 873 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 874 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 875 + EOF 876 + == from_channel == 877 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 878 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 879 + Ident asas 880 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 881 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 882 + Number 123 883 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 884 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 885 + Op + 886 + code point pos: [line=1:bol=0:cnum=11;line=1:bol=0:cnum=12] 887 + bytes pos: [line=1:bol=0:cnum=22;line=1:bol=0:cnum=24] 888 + Number 2 889 + code point pos: [line=1:bol=0:cnum=12;line=1:bol=0:cnum=15] 890 + bytes pos: [line=1:bol=0:cnum=24;line=1:bol=0:cnum=30] 891 + Ident asd 892 + code point pos: [line=1:bol=0:cnum=15;line=1:bol=0:cnum=15] 893 + bytes pos: [line=1:bol=0:cnum=30;line=1:bol=0:cnum=30] 894 + EOF |}]; 895 + let s = utf16_of_utf8 "asas 123 + 2" ^ "a" in 896 + test_utf16 s bo (fun lb -> token lb); 897 + [%expect 898 + {| 899 + == from_string == 900 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 901 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 902 + Ident asas 903 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 904 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 905 + Number 123 906 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 907 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 908 + Op + 909 + MalFormed 910 + == from_gen == 911 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 912 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 913 + Ident asas 914 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 915 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 916 + Number 123 917 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 918 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 919 + Op + 920 + MalFormed 921 + == from_channel == 922 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 923 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=8] 924 + Ident asas 925 + code point pos: [line=1:bol=0:cnum=5;line=1:bol=0:cnum=8] 926 + bytes pos: [line=1:bol=0:cnum=10;line=1:bol=0:cnum=16] 927 + Number 123 928 + code point pos: [line=1:bol=0:cnum=9;line=1:bol=0:cnum=10] 929 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=20] 930 + Op + 931 + MalFormed |}]; 932 + let s1 = "12asd12\u{1F6F3}" in 933 + let s = utf16_of_utf8 s1 in 934 + test_utf16 s bo (fun lb -> token lb); 935 + [%expect 936 + {| 937 + == from_string == 938 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 939 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 940 + Number 12 941 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 942 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 943 + Ident asd12 944 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 945 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 946 + Any 🛳 947 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 948 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 949 + EOF 950 + == from_gen == 951 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 952 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 953 + Number 12 954 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 955 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 956 + Ident asd12 957 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 958 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 959 + Any 🛳 960 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 961 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 962 + EOF 963 + == from_channel == 964 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 965 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 966 + Number 12 967 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 968 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 969 + Ident asd12 970 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=8] 971 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=18] 972 + Any 🛳 973 + code point pos: [line=1:bol=0:cnum=8;line=1:bol=0:cnum=8] 974 + bytes pos: [line=1:bol=0:cnum=18;line=1:bol=0:cnum=18] 975 + EOF |}]; 976 + test_utf16 (remove_last s 1) bo (fun lb -> token lb); 977 + [%expect 978 + {| 979 + == from_string == 980 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 981 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 982 + Number 12 983 + MalFormed 984 + == from_gen == 985 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 986 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 987 + Number 12 988 + MalFormed 989 + == from_channel == 990 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 991 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 992 + Number 12 993 + MalFormed |}]; 994 + test_utf16 (remove_last s 2) bo (fun lb -> token lb); 995 + [%expect 996 + {| 997 + == from_string == 998 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 999 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1000 + Number 12 1001 + MalFormed 1002 + == from_gen == 1003 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1004 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1005 + Number 12 1006 + MalFormed 1007 + == from_channel == 1008 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1009 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1010 + Number 12 1011 + MalFormed |}]; 1012 + test_utf16 (remove_last s 3) bo (fun lb -> token lb); 1013 + [%expect 1014 + {| 1015 + == from_string == 1016 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1017 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1018 + Number 12 1019 + MalFormed 1020 + == from_gen == 1021 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1022 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1023 + Number 12 1024 + MalFormed 1025 + == from_channel == 1026 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1027 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1028 + Number 12 1029 + MalFormed |}]; 1030 + test_utf16 (remove_last s 4) bo (fun lb -> token lb); 1031 + [%expect 1032 + {| 1033 + == from_string == 1034 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1035 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1036 + Number 12 1037 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 1038 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 1039 + Ident asd12 1040 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 1041 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 1042 + EOF 1043 + == from_gen == 1044 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1045 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1046 + Number 12 1047 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 1048 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 1049 + Ident asd12 1050 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 1051 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 1052 + EOF 1053 + == from_channel == 1054 + code point pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=2] 1055 + bytes pos: [line=1:bol=0:cnum=0;line=1:bol=0:cnum=4] 1056 + Number 12 1057 + code point pos: [line=1:bol=0:cnum=2;line=1:bol=0:cnum=7] 1058 + bytes pos: [line=1:bol=0:cnum=4;line=1:bol=0:cnum=14] 1059 + Ident asd12 1060 + code point pos: [line=1:bol=0:cnum=7;line=1:bol=0:cnum=7] 1061 + bytes pos: [line=1:bol=0:cnum=14;line=1:bol=0:cnum=14] 1062 + EOF |}]
+9
vendor/opam/sedlex/test/dune
··· 1 + (library 2 + (name sedlex_test) 3 + (libraries sedlex) 4 + (inline_tests 5 + (deps UTF-8-test.txt)) 6 + (enabled_if 7 + (>= %{ocaml_version} 4.14)) 8 + (preprocess 9 + (pps sedlex.ppx ppx_expect)))
+9
vendor/opam/sedlex/test/nested.ml
··· 1 + let%expect_test _ = 2 + let lb = Sedlexing.Utf8.from_string "ab" in 3 + let res = 4 + match%sedlex lb with 5 + | 'a' -> ( match%sedlex lb with 'b' -> "ok" | _ -> "error") 6 + | _ -> "error" 7 + in 8 + print_endline res; 9 + [%expect {| ok |}]
vendor/opam/sedlex/test/stress_test.ml

This is a binary file and will not be displayed.

+33
vendor/opam/sedlex/test/utf8.ml
··· 1 + open Printf 2 + 3 + let next_tok buf = 4 + let open Sedlexing.Utf8 in 5 + match%sedlex buf with 6 + | "a", Utf8 (Chars "+-×÷") -> sprintf "with Chars: %s" (lexeme buf) 7 + | "b", Utf8 ("+" | "-" | "×" | "÷") -> 8 + sprintf "with or_pattern: %s" (lexeme buf) 9 + | Latin1 "\xc0", Utf8 "À", Ascii (Utf8 (Latin1 (Utf8 (Chars "À")))) -> 10 + sprintf "mixed encoding: %s" (lexeme buf) 11 + | Ascii (Star '\x00' .. '\x7f') -> sprintf "only ascii: %s" (lexeme buf) 12 + | Utf8 (Star '\x00' .. '\x7f') -> 13 + assert false 14 + (* utf8 char interval can only match ascii because of the OCaml lexer. The regexp above should match instead *) 15 + | Latin1 (Star '\x00' .. '\xff') -> sprintf "only latin1: %s" (lexeme buf) 16 + | _ -> failwith (sprintf "Unexpected character: %s" (lexeme buf)) 17 + 18 + let%expect_test _ = 19 + Sedlexing.Utf8.from_string "a+" |> next_tok |> print_string; 20 + [%expect {| with Chars: a+ |}]; 21 + Sedlexing.Utf8.from_string "a÷" |> next_tok |> print_string; 22 + [%expect {| with Chars: a÷ |}]; 23 + Sedlexing.Utf8.from_string "b+" |> next_tok |> print_string; 24 + [%expect {| with or_pattern: b+ |}]; 25 + Sedlexing.Utf8.from_string "b÷" |> next_tok |> print_string; 26 + [%expect {| with or_pattern: b÷ |}]; 27 + Sedlexing.Utf8.from_string "ÀÀÀ" |> next_tok |> print_string; 28 + [%expect {| mixed encoding: ÀÀÀ |}]; 29 + Sedlexing.Utf8.from_string "az\x7f" 30 + |> next_tok |> String.escaped |> print_string; 31 + [%expect {| only ascii: az\127 |}]; 32 + Sedlexing.Utf8.from_string "az\u{c0}" |> next_tok |> print_string; 33 + [%expect {| only latin1: azÀ |}]