├── .gitignore ├── LICENSE ├── Makefile ├── README ├── Times-Roman.afm ├── afm.fs ├── example.fs ├── glyphlist.txt └── pdf.fs /.gitignore: -------------------------------------------------------------------------------- 1 | *.exe 2 | .*.swp 3 | *~ 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Simple PDF builder 2 | Copyright (C) 2016-2017 Daniel Beer 3 | 4 | Permission to use, copy, modify, and/or distribute this software for 5 | any purpose with or without fee is hereby granted, provided that the 6 | above copyright notice and this permission notice appear in all 7 | copies. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 | WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 | WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 | AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 | DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 | PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 | TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 | PERFORMANCE OF THIS SOFTWARE. 17 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # F# PDF utilities 2 | # Copyright (C) 2016 Daniel Beer 3 | # 4 | # Permission to use, copy, modify, and/or distribute this software for any 5 | # purpose with or without fee is hereby granted, provided that the above 6 | # copyright notice and this permission notice appear in all copies. 7 | # 8 | # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 | # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 | # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 | # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 | # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 | # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 | # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 | 16 | SRC = pdf.fs afm.fs example.fs 17 | RES = glyphlist.txt Times-Roman.afm 18 | 19 | all: example.exe 20 | 21 | example.exe: $(SRC) $(RES) 22 | fsharpc -o $@ $(SRC) $(patsubst %,--resource:%,$(RES)) 23 | chmod 755 $@ 24 | 25 | clean: 26 | rm -f example.exe 27 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Low-level PDF manipulation for F# 2 | 3 | Daniel Beer 4 | 13 Mar 2017 5 | 6 | The code contained here consists of a module for manipulating PDF 7 | objects (pdf.fs), and a very simple parser for Adobe Font Metrics files 8 | and glyph-lists (afm.fs). 9 | 10 | Things it can do: 11 | 12 | * Create arbitrary PDF documents. 13 | 14 | * Read objects from PDF documents (although it does not support 15 | parsing or decompression of content streams -- you need to implement 16 | this yourself). 17 | 18 | * Deep-copy objects from one PDF document to another (e.g. to use a 19 | page of one document as an image or background in another). 20 | 21 | * Calculate text sizes given a string, a point size, and an Adobe Font 22 | Metrics file. 23 | 24 | PDFs of arbitrary complexity can be created, but you may find it useful 25 | to wrap the module in something higher-level and more specific to your 26 | needs. 27 | 28 | Included is an example program (example.fs), which takes as arguments 29 | the name of an input and an output PDF file. Page 1 of the input file is 30 | extracted, and then a single-page output file is created which shows 31 | page 1 of the input file scaled down and centered in the middle of the 32 | page, with a blue border and a centered caption above it. 33 | 34 | Building the example 35 | -------------------- 36 | 37 | The included code should be able to be run on nearly any system. It has 38 | no dependencies outside the .NET standard library. If you're on a Linux 39 | system with mono and the F# compiler installed, type "make" to build. 40 | 41 | If you're building manually, select all F# files for building, with 42 | example.fs last in the list. You will also need to include glyphlist.txt 43 | and Times-Roman.afm as assembly resources. The names of these resources 44 | should be the same as their filenames. 45 | -------------------------------------------------------------------------------- /Times-Roman.afm: -------------------------------------------------------------------------------- 1 | StartFontMetrics 4.1 2 | Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved. 3 | Comment Creation Date: Thu May 1 12:49:17 1997 4 | Comment UniqueID 43068 5 | Comment VMusage 43909 54934 6 | FontName Times-Roman 7 | FullName Times Roman 8 | FamilyName Times 9 | Weight Roman 10 | ItalicAngle 0 11 | IsFixedPitch false 12 | CharacterSet ExtendedRoman 13 | FontBBox -168 -218 1000 898 14 | UnderlinePosition -100 15 | UnderlineThickness 50 16 | Version 002.000 17 | Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. 18 | EncodingScheme AdobeStandardEncoding 19 | CapHeight 662 20 | XHeight 450 21 | Ascender 683 22 | Descender -217 23 | StdHW 28 24 | StdVW 84 25 | StartCharMetrics 315 26 | C 32 ; WX 250 ; N space ; B 0 0 0 0 ; 27 | C 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ; 28 | C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ; 29 | C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ; 30 | C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ; 31 | C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ; 32 | C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ; 33 | C 39 ; WX 333 ; N quoteright ; B 79 433 218 676 ; 34 | C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ; 35 | C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ; 36 | C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ; 37 | C 43 ; WX 564 ; N plus ; B 30 0 534 506 ; 38 | C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ; 39 | C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ; 40 | C 46 ; WX 250 ; N period ; B 70 -11 181 100 ; 41 | C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ; 42 | C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ; 43 | C 49 ; WX 500 ; N one ; B 111 0 394 676 ; 44 | C 50 ; WX 500 ; N two ; B 30 0 475 676 ; 45 | C 51 ; WX 500 ; N three ; B 43 -14 431 676 ; 46 | C 52 ; WX 500 ; N four ; B 12 0 472 676 ; 47 | C 53 ; WX 500 ; N five ; B 32 -14 438 688 ; 48 | C 54 ; WX 500 ; N six ; B 34 -14 468 684 ; 49 | C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ; 50 | C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ; 51 | C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ; 52 | C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ; 53 | C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ; 54 | C 60 ; WX 564 ; N less ; B 28 -8 536 514 ; 55 | C 61 ; WX 564 ; N equal ; B 30 120 534 386 ; 56 | C 62 ; WX 564 ; N greater ; B 28 -8 536 514 ; 57 | C 63 ; WX 444 ; N question ; B 68 -8 414 676 ; 58 | C 64 ; WX 921 ; N at ; B 116 -14 809 676 ; 59 | C 65 ; WX 722 ; N A ; B 15 0 706 674 ; 60 | C 66 ; WX 667 ; N B ; B 17 0 593 662 ; 61 | C 67 ; WX 667 ; N C ; B 28 -14 633 676 ; 62 | C 68 ; WX 722 ; N D ; B 16 0 685 662 ; 63 | C 69 ; WX 611 ; N E ; B 12 0 597 662 ; 64 | C 70 ; WX 556 ; N F ; B 12 0 546 662 ; 65 | C 71 ; WX 722 ; N G ; B 32 -14 709 676 ; 66 | C 72 ; WX 722 ; N H ; B 19 0 702 662 ; 67 | C 73 ; WX 333 ; N I ; B 18 0 315 662 ; 68 | C 74 ; WX 389 ; N J ; B 10 -14 370 662 ; 69 | C 75 ; WX 722 ; N K ; B 34 0 723 662 ; 70 | C 76 ; WX 611 ; N L ; B 12 0 598 662 ; 71 | C 77 ; WX 889 ; N M ; B 12 0 863 662 ; 72 | C 78 ; WX 722 ; N N ; B 12 -11 707 662 ; 73 | C 79 ; WX 722 ; N O ; B 34 -14 688 676 ; 74 | C 80 ; WX 556 ; N P ; B 16 0 542 662 ; 75 | C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ; 76 | C 82 ; WX 667 ; N R ; B 17 0 659 662 ; 77 | C 83 ; WX 556 ; N S ; B 42 -14 491 676 ; 78 | C 84 ; WX 611 ; N T ; B 17 0 593 662 ; 79 | C 85 ; WX 722 ; N U ; B 14 -14 705 662 ; 80 | C 86 ; WX 722 ; N V ; B 16 -11 697 662 ; 81 | C 87 ; WX 944 ; N W ; B 5 -11 932 662 ; 82 | C 88 ; WX 722 ; N X ; B 10 0 704 662 ; 83 | C 89 ; WX 722 ; N Y ; B 22 0 703 662 ; 84 | C 90 ; WX 611 ; N Z ; B 9 0 597 662 ; 85 | C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ; 86 | C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ; 87 | C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ; 88 | C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ; 89 | C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ; 90 | C 96 ; WX 333 ; N quoteleft ; B 115 433 254 676 ; 91 | C 97 ; WX 444 ; N a ; B 37 -10 442 460 ; 92 | C 98 ; WX 500 ; N b ; B 3 -10 468 683 ; 93 | C 99 ; WX 444 ; N c ; B 25 -10 412 460 ; 94 | C 100 ; WX 500 ; N d ; B 27 -10 491 683 ; 95 | C 101 ; WX 444 ; N e ; B 25 -10 424 460 ; 96 | C 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ; 97 | C 103 ; WX 500 ; N g ; B 28 -218 470 460 ; 98 | C 104 ; WX 500 ; N h ; B 9 0 487 683 ; 99 | C 105 ; WX 278 ; N i ; B 16 0 253 683 ; 100 | C 106 ; WX 278 ; N j ; B -70 -218 194 683 ; 101 | C 107 ; WX 500 ; N k ; B 7 0 505 683 ; 102 | C 108 ; WX 278 ; N l ; B 19 0 257 683 ; 103 | C 109 ; WX 778 ; N m ; B 16 0 775 460 ; 104 | C 110 ; WX 500 ; N n ; B 16 0 485 460 ; 105 | C 111 ; WX 500 ; N o ; B 29 -10 470 460 ; 106 | C 112 ; WX 500 ; N p ; B 5 -217 470 460 ; 107 | C 113 ; WX 500 ; N q ; B 24 -217 488 460 ; 108 | C 114 ; WX 333 ; N r ; B 5 0 335 460 ; 109 | C 115 ; WX 389 ; N s ; B 51 -10 348 460 ; 110 | C 116 ; WX 278 ; N t ; B 13 -10 279 579 ; 111 | C 117 ; WX 500 ; N u ; B 9 -10 479 450 ; 112 | C 118 ; WX 500 ; N v ; B 19 -14 477 450 ; 113 | C 119 ; WX 722 ; N w ; B 21 -14 694 450 ; 114 | C 120 ; WX 500 ; N x ; B 17 0 479 450 ; 115 | C 121 ; WX 500 ; N y ; B 14 -218 475 450 ; 116 | C 122 ; WX 444 ; N z ; B 27 0 418 450 ; 117 | C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ; 118 | C 124 ; WX 200 ; N bar ; B 67 -218 133 782 ; 119 | C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ; 120 | C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ; 121 | C 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ; 122 | C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ; 123 | C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ; 124 | C 164 ; WX 167 ; N fraction ; B -168 -14 331 676 ; 125 | C 165 ; WX 500 ; N yen ; B -53 0 512 662 ; 126 | C 166 ; WX 500 ; N florin ; B 7 -189 490 676 ; 127 | C 167 ; WX 500 ; N section ; B 70 -148 426 676 ; 128 | C 168 ; WX 500 ; N currency ; B -22 58 522 602 ; 129 | C 169 ; WX 180 ; N quotesingle ; B 48 431 133 676 ; 130 | C 170 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ; 131 | C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ; 132 | C 172 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ; 133 | C 173 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ; 134 | C 174 ; WX 556 ; N fi ; B 31 0 521 683 ; 135 | C 175 ; WX 556 ; N fl ; B 32 0 521 683 ; 136 | C 177 ; WX 500 ; N endash ; B 0 201 500 250 ; 137 | C 178 ; WX 500 ; N dagger ; B 59 -149 442 676 ; 138 | C 179 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ; 139 | C 180 ; WX 250 ; N periodcentered ; B 70 199 181 310 ; 140 | C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ; 141 | C 183 ; WX 350 ; N bullet ; B 40 196 310 466 ; 142 | C 184 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ; 143 | C 185 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ; 144 | C 186 ; WX 444 ; N quotedblright ; B 30 433 401 676 ; 145 | C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ; 146 | C 188 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ; 147 | C 189 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ; 148 | C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ; 149 | C 193 ; WX 333 ; N grave ; B 19 507 242 678 ; 150 | C 194 ; WX 333 ; N acute ; B 93 507 317 678 ; 151 | C 195 ; WX 333 ; N circumflex ; B 11 507 322 674 ; 152 | C 196 ; WX 333 ; N tilde ; B 1 532 331 638 ; 153 | C 197 ; WX 333 ; N macron ; B 11 547 322 601 ; 154 | C 198 ; WX 333 ; N breve ; B 26 507 307 664 ; 155 | C 199 ; WX 333 ; N dotaccent ; B 118 581 216 681 ; 156 | C 200 ; WX 333 ; N dieresis ; B 18 581 315 681 ; 157 | C 202 ; WX 333 ; N ring ; B 67 512 266 711 ; 158 | C 203 ; WX 333 ; N cedilla ; B 52 -215 261 0 ; 159 | C 205 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ; 160 | C 206 ; WX 333 ; N ogonek ; B 62 -165 243 0 ; 161 | C 207 ; WX 333 ; N caron ; B 11 507 322 674 ; 162 | C 208 ; WX 1000 ; N emdash ; B 0 201 1000 250 ; 163 | C 225 ; WX 889 ; N AE ; B 0 0 863 662 ; 164 | C 227 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ; 165 | C 232 ; WX 611 ; N Lslash ; B 12 0 598 662 ; 166 | C 233 ; WX 722 ; N Oslash ; B 34 -80 688 734 ; 167 | C 234 ; WX 889 ; N OE ; B 30 -6 885 668 ; 168 | C 235 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ; 169 | C 241 ; WX 667 ; N ae ; B 38 -10 632 460 ; 170 | C 245 ; WX 278 ; N dotlessi ; B 16 0 253 460 ; 171 | C 248 ; WX 278 ; N lslash ; B 19 0 259 683 ; 172 | C 249 ; WX 500 ; N oslash ; B 29 -112 470 551 ; 173 | C 250 ; WX 722 ; N oe ; B 30 -10 690 460 ; 174 | C 251 ; WX 500 ; N germandbls ; B 12 -9 468 683 ; 175 | C -1 ; WX 333 ; N Idieresis ; B 18 0 315 835 ; 176 | C -1 ; WX 444 ; N eacute ; B 25 -10 424 678 ; 177 | C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ; 178 | C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ; 179 | C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ; 180 | C -1 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ; 181 | C -1 ; WX 564 ; N divide ; B 30 -10 534 516 ; 182 | C -1 ; WX 722 ; N Yacute ; B 22 0 703 890 ; 183 | C -1 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ; 184 | C -1 ; WX 444 ; N aacute ; B 37 -10 442 678 ; 185 | C -1 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ; 186 | C -1 ; WX 500 ; N yacute ; B 14 -218 475 678 ; 187 | C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ; 188 | C -1 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ; 189 | C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ; 190 | C -1 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ; 191 | C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ; 192 | C -1 ; WX 722 ; N Uacute ; B 14 -14 705 890 ; 193 | C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ; 194 | C -1 ; WX 611 ; N Edieresis ; B 12 0 597 835 ; 195 | C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ; 196 | C -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ; 197 | C -1 ; WX 760 ; N copyright ; B 38 -14 722 676 ; 198 | C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ; 199 | C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ; 200 | C -1 ; WX 444 ; N aring ; B 37 -10 442 711 ; 201 | C -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ; 202 | C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ; 203 | C -1 ; WX 444 ; N agrave ; B 37 -10 442 678 ; 204 | C -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ; 205 | C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ; 206 | C -1 ; WX 444 ; N atilde ; B 37 -10 442 638 ; 207 | C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ; 208 | C -1 ; WX 389 ; N scaron ; B 39 -10 350 674 ; 209 | C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ; 210 | C -1 ; WX 278 ; N iacute ; B 16 0 290 678 ; 211 | C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ; 212 | C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ; 213 | C -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ; 214 | C -1 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ; 215 | C -1 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ; 216 | C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ; 217 | C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ; 218 | C -1 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ; 219 | C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ; 220 | C -1 ; WX 556 ; N Thorn ; B 16 0 542 662 ; 221 | C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ; 222 | C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ; 223 | C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ; 224 | C -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ; 225 | C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ; 226 | C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ; 227 | C -1 ; WX 300 ; N threesuperior ; B 15 262 291 676 ; 228 | C -1 ; WX 722 ; N Ograve ; B 34 -14 688 890 ; 229 | C -1 ; WX 722 ; N Agrave ; B 15 0 706 890 ; 230 | C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ; 231 | C -1 ; WX 564 ; N multiply ; B 38 8 527 497 ; 232 | C -1 ; WX 500 ; N uacute ; B 9 -10 479 678 ; 233 | C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ; 234 | C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ; 235 | C -1 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ; 236 | C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ; 237 | C -1 ; WX 278 ; N icircumflex ; B -16 0 295 674 ; 238 | C -1 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ; 239 | C -1 ; WX 444 ; N adieresis ; B 37 -10 442 623 ; 240 | C -1 ; WX 444 ; N edieresis ; B 25 -10 424 623 ; 241 | C -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ; 242 | C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ; 243 | C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ; 244 | C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ; 245 | C -1 ; WX 333 ; N Iacute ; B 18 0 317 890 ; 246 | C -1 ; WX 564 ; N plusminus ; B 30 0 534 506 ; 247 | C -1 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ; 248 | C -1 ; WX 760 ; N registered ; B 38 -14 722 676 ; 249 | C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ; 250 | C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ; 251 | C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ; 252 | C -1 ; WX 611 ; N Egrave ; B 12 0 597 890 ; 253 | C -1 ; WX 333 ; N racute ; B 5 0 335 678 ; 254 | C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ; 255 | C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ; 256 | C -1 ; WX 611 ; N Zcaron ; B 9 0 597 886 ; 257 | C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ; 258 | C -1 ; WX 722 ; N Eth ; B 16 0 685 662 ; 259 | C -1 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ; 260 | C -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ; 261 | C -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ; 262 | C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ; 263 | C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ; 264 | C -1 ; WX 722 ; N Aacute ; B 15 0 706 890 ; 265 | C -1 ; WX 722 ; N Adieresis ; B 15 0 706 835 ; 266 | C -1 ; WX 444 ; N egrave ; B 25 -10 424 678 ; 267 | C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ; 268 | C -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ; 269 | C -1 ; WX 722 ; N Oacute ; B 34 -14 688 890 ; 270 | C -1 ; WX 500 ; N oacute ; B 29 -10 470 678 ; 271 | C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ; 272 | C -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ; 273 | C -1 ; WX 278 ; N idieresis ; B -9 0 288 623 ; 274 | C -1 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ; 275 | C -1 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ; 276 | C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ; 277 | C -1 ; WX 500 ; N thorn ; B 5 -217 470 683 ; 278 | C -1 ; WX 300 ; N twosuperior ; B 1 270 296 676 ; 279 | C -1 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ; 280 | C -1 ; WX 500 ; N mu ; B 36 -218 512 450 ; 281 | C -1 ; WX 278 ; N igrave ; B -8 0 253 678 ; 282 | C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ; 283 | C -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ; 284 | C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ; 285 | C -1 ; WX 750 ; N threequarters ; B 15 -14 718 676 ; 286 | C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ; 287 | C -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ; 288 | C -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ; 289 | C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ; 290 | C -1 ; WX 980 ; N trademark ; B 30 256 957 662 ; 291 | C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ; 292 | C -1 ; WX 333 ; N Igrave ; B 18 0 315 890 ; 293 | C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ; 294 | C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ; 295 | C -1 ; WX 750 ; N onehalf ; B 31 -14 746 676 ; 296 | C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ; 297 | C -1 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ; 298 | C -1 ; WX 500 ; N ntilde ; B 16 0 485 638 ; 299 | C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ; 300 | C -1 ; WX 611 ; N Eacute ; B 12 0 597 890 ; 301 | C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ; 302 | C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ; 303 | C -1 ; WX 750 ; N onequarter ; B 37 -14 718 676 ; 304 | C -1 ; WX 556 ; N Scaron ; B 42 -14 491 886 ; 305 | C -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ; 306 | C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ; 307 | C -1 ; WX 400 ; N degree ; B 57 390 343 676 ; 308 | C -1 ; WX 500 ; N ograve ; B 29 -10 470 678 ; 309 | C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ; 310 | C -1 ; WX 500 ; N ugrave ; B 9 -10 479 678 ; 311 | C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ; 312 | C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ; 313 | C -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ; 314 | C -1 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ; 315 | C -1 ; WX 500 ; N otilde ; B 29 -10 470 638 ; 316 | C -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ; 317 | C -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ; 318 | C -1 ; WX 722 ; N Atilde ; B 15 0 706 850 ; 319 | C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ; 320 | C -1 ; WX 722 ; N Aring ; B 15 0 706 898 ; 321 | C -1 ; WX 722 ; N Otilde ; B 34 -14 688 850 ; 322 | C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ; 323 | C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ; 324 | C -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ; 325 | C -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ; 326 | C -1 ; WX 564 ; N minus ; B 30 220 534 286 ; 327 | C -1 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ; 328 | C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ; 329 | C -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ; 330 | C -1 ; WX 564 ; N logicalnot ; B 30 108 534 386 ; 331 | C -1 ; WX 500 ; N odieresis ; B 29 -10 470 623 ; 332 | C -1 ; WX 500 ; N udieresis ; B 9 -10 479 623 ; 333 | C -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ; 334 | C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ; 335 | C -1 ; WX 500 ; N eth ; B 29 -10 471 686 ; 336 | C -1 ; WX 444 ; N zcaron ; B 27 0 418 674 ; 337 | C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ; 338 | C -1 ; WX 300 ; N onesuperior ; B 57 270 248 676 ; 339 | C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ; 340 | C -1 ; WX 500 ; N Euro ; B 0 0 0 0 ; 341 | EndCharMetrics 342 | StartKernData 343 | StartKernPairs 2073 344 | KPX A C -40 345 | KPX A Cacute -40 346 | KPX A Ccaron -40 347 | KPX A Ccedilla -40 348 | KPX A G -40 349 | KPX A Gbreve -40 350 | KPX A Gcommaaccent -40 351 | KPX A O -55 352 | KPX A Oacute -55 353 | KPX A Ocircumflex -55 354 | KPX A Odieresis -55 355 | KPX A Ograve -55 356 | KPX A Ohungarumlaut -55 357 | KPX A Omacron -55 358 | KPX A Oslash -55 359 | KPX A Otilde -55 360 | KPX A Q -55 361 | KPX A T -111 362 | KPX A Tcaron -111 363 | KPX A Tcommaaccent -111 364 | KPX A U -55 365 | KPX A Uacute -55 366 | KPX A Ucircumflex -55 367 | KPX A Udieresis -55 368 | KPX A Ugrave -55 369 | KPX A Uhungarumlaut -55 370 | KPX A Umacron -55 371 | KPX A Uogonek -55 372 | KPX A Uring -55 373 | KPX A V -135 374 | KPX A W -90 375 | KPX A Y -105 376 | KPX A Yacute -105 377 | KPX A Ydieresis -105 378 | KPX A quoteright -111 379 | KPX A v -74 380 | KPX A w -92 381 | KPX A y -92 382 | KPX A yacute -92 383 | KPX A ydieresis -92 384 | KPX Aacute C -40 385 | KPX Aacute Cacute -40 386 | KPX Aacute Ccaron -40 387 | KPX Aacute Ccedilla -40 388 | KPX Aacute G -40 389 | KPX Aacute Gbreve -40 390 | KPX Aacute Gcommaaccent -40 391 | KPX Aacute O -55 392 | KPX Aacute Oacute -55 393 | KPX Aacute Ocircumflex -55 394 | KPX Aacute Odieresis -55 395 | KPX Aacute Ograve -55 396 | KPX Aacute Ohungarumlaut -55 397 | KPX Aacute Omacron -55 398 | KPX Aacute Oslash -55 399 | KPX Aacute Otilde -55 400 | KPX Aacute Q -55 401 | KPX Aacute T -111 402 | KPX Aacute Tcaron -111 403 | KPX Aacute Tcommaaccent -111 404 | KPX Aacute U -55 405 | KPX Aacute Uacute -55 406 | KPX Aacute Ucircumflex -55 407 | KPX Aacute Udieresis -55 408 | KPX Aacute Ugrave -55 409 | KPX Aacute Uhungarumlaut -55 410 | KPX Aacute Umacron -55 411 | KPX Aacute Uogonek -55 412 | KPX Aacute Uring -55 413 | KPX Aacute V -135 414 | KPX Aacute W -90 415 | KPX Aacute Y -105 416 | KPX Aacute Yacute -105 417 | KPX Aacute Ydieresis -105 418 | KPX Aacute quoteright -111 419 | KPX Aacute v -74 420 | KPX Aacute w -92 421 | KPX Aacute y -92 422 | KPX Aacute yacute -92 423 | KPX Aacute ydieresis -92 424 | KPX Abreve C -40 425 | KPX Abreve Cacute -40 426 | KPX Abreve Ccaron -40 427 | KPX Abreve Ccedilla -40 428 | KPX Abreve G -40 429 | KPX Abreve Gbreve -40 430 | KPX Abreve Gcommaaccent -40 431 | KPX Abreve O -55 432 | KPX Abreve Oacute -55 433 | KPX Abreve Ocircumflex -55 434 | KPX Abreve Odieresis -55 435 | KPX Abreve Ograve -55 436 | KPX Abreve Ohungarumlaut -55 437 | KPX Abreve Omacron -55 438 | KPX Abreve Oslash -55 439 | KPX Abreve Otilde -55 440 | KPX Abreve Q -55 441 | KPX Abreve T -111 442 | KPX Abreve Tcaron -111 443 | KPX Abreve Tcommaaccent -111 444 | KPX Abreve U -55 445 | KPX Abreve Uacute -55 446 | KPX Abreve Ucircumflex -55 447 | KPX Abreve Udieresis -55 448 | KPX Abreve Ugrave -55 449 | KPX Abreve Uhungarumlaut -55 450 | KPX Abreve Umacron -55 451 | KPX Abreve Uogonek -55 452 | KPX Abreve Uring -55 453 | KPX Abreve V -135 454 | KPX Abreve W -90 455 | KPX Abreve Y -105 456 | KPX Abreve Yacute -105 457 | KPX Abreve Ydieresis -105 458 | KPX Abreve quoteright -111 459 | KPX Abreve v -74 460 | KPX Abreve w -92 461 | KPX Abreve y -92 462 | KPX Abreve yacute -92 463 | KPX Abreve ydieresis -92 464 | KPX Acircumflex C -40 465 | KPX Acircumflex Cacute -40 466 | KPX Acircumflex Ccaron -40 467 | KPX Acircumflex Ccedilla -40 468 | KPX Acircumflex G -40 469 | KPX Acircumflex Gbreve -40 470 | KPX Acircumflex Gcommaaccent -40 471 | KPX Acircumflex O -55 472 | KPX Acircumflex Oacute -55 473 | KPX Acircumflex Ocircumflex -55 474 | KPX Acircumflex Odieresis -55 475 | KPX Acircumflex Ograve -55 476 | KPX Acircumflex Ohungarumlaut -55 477 | KPX Acircumflex Omacron -55 478 | KPX Acircumflex Oslash -55 479 | KPX Acircumflex Otilde -55 480 | KPX Acircumflex Q -55 481 | KPX Acircumflex T -111 482 | KPX Acircumflex Tcaron -111 483 | KPX Acircumflex Tcommaaccent -111 484 | KPX Acircumflex U -55 485 | KPX Acircumflex Uacute -55 486 | KPX Acircumflex Ucircumflex -55 487 | KPX Acircumflex Udieresis -55 488 | KPX Acircumflex Ugrave -55 489 | KPX Acircumflex Uhungarumlaut -55 490 | KPX Acircumflex Umacron -55 491 | KPX Acircumflex Uogonek -55 492 | KPX Acircumflex Uring -55 493 | KPX Acircumflex V -135 494 | KPX Acircumflex W -90 495 | KPX Acircumflex Y -105 496 | KPX Acircumflex Yacute -105 497 | KPX Acircumflex Ydieresis -105 498 | KPX Acircumflex quoteright -111 499 | KPX Acircumflex v -74 500 | KPX Acircumflex w -92 501 | KPX Acircumflex y -92 502 | KPX Acircumflex yacute -92 503 | KPX Acircumflex ydieresis -92 504 | KPX Adieresis C -40 505 | KPX Adieresis Cacute -40 506 | KPX Adieresis Ccaron -40 507 | KPX Adieresis Ccedilla -40 508 | KPX Adieresis G -40 509 | KPX Adieresis Gbreve -40 510 | KPX Adieresis Gcommaaccent -40 511 | KPX Adieresis O -55 512 | KPX Adieresis Oacute -55 513 | KPX Adieresis Ocircumflex -55 514 | KPX Adieresis Odieresis -55 515 | KPX Adieresis Ograve -55 516 | KPX Adieresis Ohungarumlaut -55 517 | KPX Adieresis Omacron -55 518 | KPX Adieresis Oslash -55 519 | KPX Adieresis Otilde -55 520 | KPX Adieresis Q -55 521 | KPX Adieresis T -111 522 | KPX Adieresis Tcaron -111 523 | KPX Adieresis Tcommaaccent -111 524 | KPX Adieresis U -55 525 | KPX Adieresis Uacute -55 526 | KPX Adieresis Ucircumflex -55 527 | KPX Adieresis Udieresis -55 528 | KPX Adieresis Ugrave -55 529 | KPX Adieresis Uhungarumlaut -55 530 | KPX Adieresis Umacron -55 531 | KPX Adieresis Uogonek -55 532 | KPX Adieresis Uring -55 533 | KPX Adieresis V -135 534 | KPX Adieresis W -90 535 | KPX Adieresis Y -105 536 | KPX Adieresis Yacute -105 537 | KPX Adieresis Ydieresis -105 538 | KPX Adieresis quoteright -111 539 | KPX Adieresis v -74 540 | KPX Adieresis w -92 541 | KPX Adieresis y -92 542 | KPX Adieresis yacute -92 543 | KPX Adieresis ydieresis -92 544 | KPX Agrave C -40 545 | KPX Agrave Cacute -40 546 | KPX Agrave Ccaron -40 547 | KPX Agrave Ccedilla -40 548 | KPX Agrave G -40 549 | KPX Agrave Gbreve -40 550 | KPX Agrave Gcommaaccent -40 551 | KPX Agrave O -55 552 | KPX Agrave Oacute -55 553 | KPX Agrave Ocircumflex -55 554 | KPX Agrave Odieresis -55 555 | KPX Agrave Ograve -55 556 | KPX Agrave Ohungarumlaut -55 557 | KPX Agrave Omacron -55 558 | KPX Agrave Oslash -55 559 | KPX Agrave Otilde -55 560 | KPX Agrave Q -55 561 | KPX Agrave T -111 562 | KPX Agrave Tcaron -111 563 | KPX Agrave Tcommaaccent -111 564 | KPX Agrave U -55 565 | KPX Agrave Uacute -55 566 | KPX Agrave Ucircumflex -55 567 | KPX Agrave Udieresis -55 568 | KPX Agrave Ugrave -55 569 | KPX Agrave Uhungarumlaut -55 570 | KPX Agrave Umacron -55 571 | KPX Agrave Uogonek -55 572 | KPX Agrave Uring -55 573 | KPX Agrave V -135 574 | KPX Agrave W -90 575 | KPX Agrave Y -105 576 | KPX Agrave Yacute -105 577 | KPX Agrave Ydieresis -105 578 | KPX Agrave quoteright -111 579 | KPX Agrave v -74 580 | KPX Agrave w -92 581 | KPX Agrave y -92 582 | KPX Agrave yacute -92 583 | KPX Agrave ydieresis -92 584 | KPX Amacron C -40 585 | KPX Amacron Cacute -40 586 | KPX Amacron Ccaron -40 587 | KPX Amacron Ccedilla -40 588 | KPX Amacron G -40 589 | KPX Amacron Gbreve -40 590 | KPX Amacron Gcommaaccent -40 591 | KPX Amacron O -55 592 | KPX Amacron Oacute -55 593 | KPX Amacron Ocircumflex -55 594 | KPX Amacron Odieresis -55 595 | KPX Amacron Ograve -55 596 | KPX Amacron Ohungarumlaut -55 597 | KPX Amacron Omacron -55 598 | KPX Amacron Oslash -55 599 | KPX Amacron Otilde -55 600 | KPX Amacron Q -55 601 | KPX Amacron T -111 602 | KPX Amacron Tcaron -111 603 | KPX Amacron Tcommaaccent -111 604 | KPX Amacron U -55 605 | KPX Amacron Uacute -55 606 | KPX Amacron Ucircumflex -55 607 | KPX Amacron Udieresis -55 608 | KPX Amacron Ugrave -55 609 | KPX Amacron Uhungarumlaut -55 610 | KPX Amacron Umacron -55 611 | KPX Amacron Uogonek -55 612 | KPX Amacron Uring -55 613 | KPX Amacron V -135 614 | KPX Amacron W -90 615 | KPX Amacron Y -105 616 | KPX Amacron Yacute -105 617 | KPX Amacron Ydieresis -105 618 | KPX Amacron quoteright -111 619 | KPX Amacron v -74 620 | KPX Amacron w -92 621 | KPX Amacron y -92 622 | KPX Amacron yacute -92 623 | KPX Amacron ydieresis -92 624 | KPX Aogonek C -40 625 | KPX Aogonek Cacute -40 626 | KPX Aogonek Ccaron -40 627 | KPX Aogonek Ccedilla -40 628 | KPX Aogonek G -40 629 | KPX Aogonek Gbreve -40 630 | KPX Aogonek Gcommaaccent -40 631 | KPX Aogonek O -55 632 | KPX Aogonek Oacute -55 633 | KPX Aogonek Ocircumflex -55 634 | KPX Aogonek Odieresis -55 635 | KPX Aogonek Ograve -55 636 | KPX Aogonek Ohungarumlaut -55 637 | KPX Aogonek Omacron -55 638 | KPX Aogonek Oslash -55 639 | KPX Aogonek Otilde -55 640 | KPX Aogonek Q -55 641 | KPX Aogonek T -111 642 | KPX Aogonek Tcaron -111 643 | KPX Aogonek Tcommaaccent -111 644 | KPX Aogonek U -55 645 | KPX Aogonek Uacute -55 646 | KPX Aogonek Ucircumflex -55 647 | KPX Aogonek Udieresis -55 648 | KPX Aogonek Ugrave -55 649 | KPX Aogonek Uhungarumlaut -55 650 | KPX Aogonek Umacron -55 651 | KPX Aogonek Uogonek -55 652 | KPX Aogonek Uring -55 653 | KPX Aogonek V -135 654 | KPX Aogonek W -90 655 | KPX Aogonek Y -105 656 | KPX Aogonek Yacute -105 657 | KPX Aogonek Ydieresis -105 658 | KPX Aogonek quoteright -111 659 | KPX Aogonek v -74 660 | KPX Aogonek w -52 661 | KPX Aogonek y -52 662 | KPX Aogonek yacute -52 663 | KPX Aogonek ydieresis -52 664 | KPX Aring C -40 665 | KPX Aring Cacute -40 666 | KPX Aring Ccaron -40 667 | KPX Aring Ccedilla -40 668 | KPX Aring G -40 669 | KPX Aring Gbreve -40 670 | KPX Aring Gcommaaccent -40 671 | KPX Aring O -55 672 | KPX Aring Oacute -55 673 | KPX Aring Ocircumflex -55 674 | KPX Aring Odieresis -55 675 | KPX Aring Ograve -55 676 | KPX Aring Ohungarumlaut -55 677 | KPX Aring Omacron -55 678 | KPX Aring Oslash -55 679 | KPX Aring Otilde -55 680 | KPX Aring Q -55 681 | KPX Aring T -111 682 | KPX Aring Tcaron -111 683 | KPX Aring Tcommaaccent -111 684 | KPX Aring U -55 685 | KPX Aring Uacute -55 686 | KPX Aring Ucircumflex -55 687 | KPX Aring Udieresis -55 688 | KPX Aring Ugrave -55 689 | KPX Aring Uhungarumlaut -55 690 | KPX Aring Umacron -55 691 | KPX Aring Uogonek -55 692 | KPX Aring Uring -55 693 | KPX Aring V -135 694 | KPX Aring W -90 695 | KPX Aring Y -105 696 | KPX Aring Yacute -105 697 | KPX Aring Ydieresis -105 698 | KPX Aring quoteright -111 699 | KPX Aring v -74 700 | KPX Aring w -92 701 | KPX Aring y -92 702 | KPX Aring yacute -92 703 | KPX Aring ydieresis -92 704 | KPX Atilde C -40 705 | KPX Atilde Cacute -40 706 | KPX Atilde Ccaron -40 707 | KPX Atilde Ccedilla -40 708 | KPX Atilde G -40 709 | KPX Atilde Gbreve -40 710 | KPX Atilde Gcommaaccent -40 711 | KPX Atilde O -55 712 | KPX Atilde Oacute -55 713 | KPX Atilde Ocircumflex -55 714 | KPX Atilde Odieresis -55 715 | KPX Atilde Ograve -55 716 | KPX Atilde Ohungarumlaut -55 717 | KPX Atilde Omacron -55 718 | KPX Atilde Oslash -55 719 | KPX Atilde Otilde -55 720 | KPX Atilde Q -55 721 | KPX Atilde T -111 722 | KPX Atilde Tcaron -111 723 | KPX Atilde Tcommaaccent -111 724 | KPX Atilde U -55 725 | KPX Atilde Uacute -55 726 | KPX Atilde Ucircumflex -55 727 | KPX Atilde Udieresis -55 728 | KPX Atilde Ugrave -55 729 | KPX Atilde Uhungarumlaut -55 730 | KPX Atilde Umacron -55 731 | KPX Atilde Uogonek -55 732 | KPX Atilde Uring -55 733 | KPX Atilde V -135 734 | KPX Atilde W -90 735 | KPX Atilde Y -105 736 | KPX Atilde Yacute -105 737 | KPX Atilde Ydieresis -105 738 | KPX Atilde quoteright -111 739 | KPX Atilde v -74 740 | KPX Atilde w -92 741 | KPX Atilde y -92 742 | KPX Atilde yacute -92 743 | KPX Atilde ydieresis -92 744 | KPX B A -35 745 | KPX B Aacute -35 746 | KPX B Abreve -35 747 | KPX B Acircumflex -35 748 | KPX B Adieresis -35 749 | KPX B Agrave -35 750 | KPX B Amacron -35 751 | KPX B Aogonek -35 752 | KPX B Aring -35 753 | KPX B Atilde -35 754 | KPX B U -10 755 | KPX B Uacute -10 756 | KPX B Ucircumflex -10 757 | KPX B Udieresis -10 758 | KPX B Ugrave -10 759 | KPX B Uhungarumlaut -10 760 | KPX B Umacron -10 761 | KPX B Uogonek -10 762 | KPX B Uring -10 763 | KPX D A -40 764 | KPX D Aacute -40 765 | KPX D Abreve -40 766 | KPX D Acircumflex -40 767 | KPX D Adieresis -40 768 | KPX D Agrave -40 769 | KPX D Amacron -40 770 | KPX D Aogonek -40 771 | KPX D Aring -40 772 | KPX D Atilde -40 773 | KPX D V -40 774 | KPX D W -30 775 | KPX D Y -55 776 | KPX D Yacute -55 777 | KPX D Ydieresis -55 778 | KPX Dcaron A -40 779 | KPX Dcaron Aacute -40 780 | KPX Dcaron Abreve -40 781 | KPX Dcaron Acircumflex -40 782 | KPX Dcaron Adieresis -40 783 | KPX Dcaron Agrave -40 784 | KPX Dcaron Amacron -40 785 | KPX Dcaron Aogonek -40 786 | KPX Dcaron Aring -40 787 | KPX Dcaron Atilde -40 788 | KPX Dcaron V -40 789 | KPX Dcaron W -30 790 | KPX Dcaron Y -55 791 | KPX Dcaron Yacute -55 792 | KPX Dcaron Ydieresis -55 793 | KPX Dcroat A -40 794 | KPX Dcroat Aacute -40 795 | KPX Dcroat Abreve -40 796 | KPX Dcroat Acircumflex -40 797 | KPX Dcroat Adieresis -40 798 | KPX Dcroat Agrave -40 799 | KPX Dcroat Amacron -40 800 | KPX Dcroat Aogonek -40 801 | KPX Dcroat Aring -40 802 | KPX Dcroat Atilde -40 803 | KPX Dcroat V -40 804 | KPX Dcroat W -30 805 | KPX Dcroat Y -55 806 | KPX Dcroat Yacute -55 807 | KPX Dcroat Ydieresis -55 808 | KPX F A -74 809 | KPX F Aacute -74 810 | KPX F Abreve -74 811 | KPX F Acircumflex -74 812 | KPX F Adieresis -74 813 | KPX F Agrave -74 814 | KPX F Amacron -74 815 | KPX F Aogonek -74 816 | KPX F Aring -74 817 | KPX F Atilde -74 818 | KPX F a -15 819 | KPX F aacute -15 820 | KPX F abreve -15 821 | KPX F acircumflex -15 822 | KPX F adieresis -15 823 | KPX F agrave -15 824 | KPX F amacron -15 825 | KPX F aogonek -15 826 | KPX F aring -15 827 | KPX F atilde -15 828 | KPX F comma -80 829 | KPX F o -15 830 | KPX F oacute -15 831 | KPX F ocircumflex -15 832 | KPX F odieresis -15 833 | KPX F ograve -15 834 | KPX F ohungarumlaut -15 835 | KPX F omacron -15 836 | KPX F oslash -15 837 | KPX F otilde -15 838 | KPX F period -80 839 | KPX J A -60 840 | KPX J Aacute -60 841 | KPX J Abreve -60 842 | KPX J Acircumflex -60 843 | KPX J Adieresis -60 844 | KPX J Agrave -60 845 | KPX J Amacron -60 846 | KPX J Aogonek -60 847 | KPX J Aring -60 848 | KPX J Atilde -60 849 | KPX K O -30 850 | KPX K Oacute -30 851 | KPX K Ocircumflex -30 852 | KPX K Odieresis -30 853 | KPX K Ograve -30 854 | KPX K Ohungarumlaut -30 855 | KPX K Omacron -30 856 | KPX K Oslash -30 857 | KPX K Otilde -30 858 | KPX K e -25 859 | KPX K eacute -25 860 | KPX K ecaron -25 861 | KPX K ecircumflex -25 862 | KPX K edieresis -25 863 | KPX K edotaccent -25 864 | KPX K egrave -25 865 | KPX K emacron -25 866 | KPX K eogonek -25 867 | KPX K o -35 868 | KPX K oacute -35 869 | KPX K ocircumflex -35 870 | KPX K odieresis -35 871 | KPX K ograve -35 872 | KPX K ohungarumlaut -35 873 | KPX K omacron -35 874 | KPX K oslash -35 875 | KPX K otilde -35 876 | KPX K u -15 877 | KPX K uacute -15 878 | KPX K ucircumflex -15 879 | KPX K udieresis -15 880 | KPX K ugrave -15 881 | KPX K uhungarumlaut -15 882 | KPX K umacron -15 883 | KPX K uogonek -15 884 | KPX K uring -15 885 | KPX K y -25 886 | KPX K yacute -25 887 | KPX K ydieresis -25 888 | KPX Kcommaaccent O -30 889 | KPX Kcommaaccent Oacute -30 890 | KPX Kcommaaccent Ocircumflex -30 891 | KPX Kcommaaccent Odieresis -30 892 | KPX Kcommaaccent Ograve -30 893 | KPX Kcommaaccent Ohungarumlaut -30 894 | KPX Kcommaaccent Omacron -30 895 | KPX Kcommaaccent Oslash -30 896 | KPX Kcommaaccent Otilde -30 897 | KPX Kcommaaccent e -25 898 | KPX Kcommaaccent eacute -25 899 | KPX Kcommaaccent ecaron -25 900 | KPX Kcommaaccent ecircumflex -25 901 | KPX Kcommaaccent edieresis -25 902 | KPX Kcommaaccent edotaccent -25 903 | KPX Kcommaaccent egrave -25 904 | KPX Kcommaaccent emacron -25 905 | KPX Kcommaaccent eogonek -25 906 | KPX Kcommaaccent o -35 907 | KPX Kcommaaccent oacute -35 908 | KPX Kcommaaccent ocircumflex -35 909 | KPX Kcommaaccent odieresis -35 910 | KPX Kcommaaccent ograve -35 911 | KPX Kcommaaccent ohungarumlaut -35 912 | KPX Kcommaaccent omacron -35 913 | KPX Kcommaaccent oslash -35 914 | KPX Kcommaaccent otilde -35 915 | KPX Kcommaaccent u -15 916 | KPX Kcommaaccent uacute -15 917 | KPX Kcommaaccent ucircumflex -15 918 | KPX Kcommaaccent udieresis -15 919 | KPX Kcommaaccent ugrave -15 920 | KPX Kcommaaccent uhungarumlaut -15 921 | KPX Kcommaaccent umacron -15 922 | KPX Kcommaaccent uogonek -15 923 | KPX Kcommaaccent uring -15 924 | KPX Kcommaaccent y -25 925 | KPX Kcommaaccent yacute -25 926 | KPX Kcommaaccent ydieresis -25 927 | KPX L T -92 928 | KPX L Tcaron -92 929 | KPX L Tcommaaccent -92 930 | KPX L V -100 931 | KPX L W -74 932 | KPX L Y -100 933 | KPX L Yacute -100 934 | KPX L Ydieresis -100 935 | KPX L quoteright -92 936 | KPX L y -55 937 | KPX L yacute -55 938 | KPX L ydieresis -55 939 | KPX Lacute T -92 940 | KPX Lacute Tcaron -92 941 | KPX Lacute Tcommaaccent -92 942 | KPX Lacute V -100 943 | KPX Lacute W -74 944 | KPX Lacute Y -100 945 | KPX Lacute Yacute -100 946 | KPX Lacute Ydieresis -100 947 | KPX Lacute quoteright -92 948 | KPX Lacute y -55 949 | KPX Lacute yacute -55 950 | KPX Lacute ydieresis -55 951 | KPX Lcaron quoteright -92 952 | KPX Lcaron y -55 953 | KPX Lcaron yacute -55 954 | KPX Lcaron ydieresis -55 955 | KPX Lcommaaccent T -92 956 | KPX Lcommaaccent Tcaron -92 957 | KPX Lcommaaccent Tcommaaccent -92 958 | KPX Lcommaaccent V -100 959 | KPX Lcommaaccent W -74 960 | KPX Lcommaaccent Y -100 961 | KPX Lcommaaccent Yacute -100 962 | KPX Lcommaaccent Ydieresis -100 963 | KPX Lcommaaccent quoteright -92 964 | KPX Lcommaaccent y -55 965 | KPX Lcommaaccent yacute -55 966 | KPX Lcommaaccent ydieresis -55 967 | KPX Lslash T -92 968 | KPX Lslash Tcaron -92 969 | KPX Lslash Tcommaaccent -92 970 | KPX Lslash V -100 971 | KPX Lslash W -74 972 | KPX Lslash Y -100 973 | KPX Lslash Yacute -100 974 | KPX Lslash Ydieresis -100 975 | KPX Lslash quoteright -92 976 | KPX Lslash y -55 977 | KPX Lslash yacute -55 978 | KPX Lslash ydieresis -55 979 | KPX N A -35 980 | KPX N Aacute -35 981 | KPX N Abreve -35 982 | KPX N Acircumflex -35 983 | KPX N Adieresis -35 984 | KPX N Agrave -35 985 | KPX N Amacron -35 986 | KPX N Aogonek -35 987 | KPX N Aring -35 988 | KPX N Atilde -35 989 | KPX Nacute A -35 990 | KPX Nacute Aacute -35 991 | KPX Nacute Abreve -35 992 | KPX Nacute Acircumflex -35 993 | KPX Nacute Adieresis -35 994 | KPX Nacute Agrave -35 995 | KPX Nacute Amacron -35 996 | KPX Nacute Aogonek -35 997 | KPX Nacute Aring -35 998 | KPX Nacute Atilde -35 999 | KPX Ncaron A -35 1000 | KPX Ncaron Aacute -35 1001 | KPX Ncaron Abreve -35 1002 | KPX Ncaron Acircumflex -35 1003 | KPX Ncaron Adieresis -35 1004 | KPX Ncaron Agrave -35 1005 | KPX Ncaron Amacron -35 1006 | KPX Ncaron Aogonek -35 1007 | KPX Ncaron Aring -35 1008 | KPX Ncaron Atilde -35 1009 | KPX Ncommaaccent A -35 1010 | KPX Ncommaaccent Aacute -35 1011 | KPX Ncommaaccent Abreve -35 1012 | KPX Ncommaaccent Acircumflex -35 1013 | KPX Ncommaaccent Adieresis -35 1014 | KPX Ncommaaccent Agrave -35 1015 | KPX Ncommaaccent Amacron -35 1016 | KPX Ncommaaccent Aogonek -35 1017 | KPX Ncommaaccent Aring -35 1018 | KPX Ncommaaccent Atilde -35 1019 | KPX Ntilde A -35 1020 | KPX Ntilde Aacute -35 1021 | KPX Ntilde Abreve -35 1022 | KPX Ntilde Acircumflex -35 1023 | KPX Ntilde Adieresis -35 1024 | KPX Ntilde Agrave -35 1025 | KPX Ntilde Amacron -35 1026 | KPX Ntilde Aogonek -35 1027 | KPX Ntilde Aring -35 1028 | KPX Ntilde Atilde -35 1029 | KPX O A -35 1030 | KPX O Aacute -35 1031 | KPX O Abreve -35 1032 | KPX O Acircumflex -35 1033 | KPX O Adieresis -35 1034 | KPX O Agrave -35 1035 | KPX O Amacron -35 1036 | KPX O Aogonek -35 1037 | KPX O Aring -35 1038 | KPX O Atilde -35 1039 | KPX O T -40 1040 | KPX O Tcaron -40 1041 | KPX O Tcommaaccent -40 1042 | KPX O V -50 1043 | KPX O W -35 1044 | KPX O X -40 1045 | KPX O Y -50 1046 | KPX O Yacute -50 1047 | KPX O Ydieresis -50 1048 | KPX Oacute A -35 1049 | KPX Oacute Aacute -35 1050 | KPX Oacute Abreve -35 1051 | KPX Oacute Acircumflex -35 1052 | KPX Oacute Adieresis -35 1053 | KPX Oacute Agrave -35 1054 | KPX Oacute Amacron -35 1055 | KPX Oacute Aogonek -35 1056 | KPX Oacute Aring -35 1057 | KPX Oacute Atilde -35 1058 | KPX Oacute T -40 1059 | KPX Oacute Tcaron -40 1060 | KPX Oacute Tcommaaccent -40 1061 | KPX Oacute V -50 1062 | KPX Oacute W -35 1063 | KPX Oacute X -40 1064 | KPX Oacute Y -50 1065 | KPX Oacute Yacute -50 1066 | KPX Oacute Ydieresis -50 1067 | KPX Ocircumflex A -35 1068 | KPX Ocircumflex Aacute -35 1069 | KPX Ocircumflex Abreve -35 1070 | KPX Ocircumflex Acircumflex -35 1071 | KPX Ocircumflex Adieresis -35 1072 | KPX Ocircumflex Agrave -35 1073 | KPX Ocircumflex Amacron -35 1074 | KPX Ocircumflex Aogonek -35 1075 | KPX Ocircumflex Aring -35 1076 | KPX Ocircumflex Atilde -35 1077 | KPX Ocircumflex T -40 1078 | KPX Ocircumflex Tcaron -40 1079 | KPX Ocircumflex Tcommaaccent -40 1080 | KPX Ocircumflex V -50 1081 | KPX Ocircumflex W -35 1082 | KPX Ocircumflex X -40 1083 | KPX Ocircumflex Y -50 1084 | KPX Ocircumflex Yacute -50 1085 | KPX Ocircumflex Ydieresis -50 1086 | KPX Odieresis A -35 1087 | KPX Odieresis Aacute -35 1088 | KPX Odieresis Abreve -35 1089 | KPX Odieresis Acircumflex -35 1090 | KPX Odieresis Adieresis -35 1091 | KPX Odieresis Agrave -35 1092 | KPX Odieresis Amacron -35 1093 | KPX Odieresis Aogonek -35 1094 | KPX Odieresis Aring -35 1095 | KPX Odieresis Atilde -35 1096 | KPX Odieresis T -40 1097 | KPX Odieresis Tcaron -40 1098 | KPX Odieresis Tcommaaccent -40 1099 | KPX Odieresis V -50 1100 | KPX Odieresis W -35 1101 | KPX Odieresis X -40 1102 | KPX Odieresis Y -50 1103 | KPX Odieresis Yacute -50 1104 | KPX Odieresis Ydieresis -50 1105 | KPX Ograve A -35 1106 | KPX Ograve Aacute -35 1107 | KPX Ograve Abreve -35 1108 | KPX Ograve Acircumflex -35 1109 | KPX Ograve Adieresis -35 1110 | KPX Ograve Agrave -35 1111 | KPX Ograve Amacron -35 1112 | KPX Ograve Aogonek -35 1113 | KPX Ograve Aring -35 1114 | KPX Ograve Atilde -35 1115 | KPX Ograve T -40 1116 | KPX Ograve Tcaron -40 1117 | KPX Ograve Tcommaaccent -40 1118 | KPX Ograve V -50 1119 | KPX Ograve W -35 1120 | KPX Ograve X -40 1121 | KPX Ograve Y -50 1122 | KPX Ograve Yacute -50 1123 | KPX Ograve Ydieresis -50 1124 | KPX Ohungarumlaut A -35 1125 | KPX Ohungarumlaut Aacute -35 1126 | KPX Ohungarumlaut Abreve -35 1127 | KPX Ohungarumlaut Acircumflex -35 1128 | KPX Ohungarumlaut Adieresis -35 1129 | KPX Ohungarumlaut Agrave -35 1130 | KPX Ohungarumlaut Amacron -35 1131 | KPX Ohungarumlaut Aogonek -35 1132 | KPX Ohungarumlaut Aring -35 1133 | KPX Ohungarumlaut Atilde -35 1134 | KPX Ohungarumlaut T -40 1135 | KPX Ohungarumlaut Tcaron -40 1136 | KPX Ohungarumlaut Tcommaaccent -40 1137 | KPX Ohungarumlaut V -50 1138 | KPX Ohungarumlaut W -35 1139 | KPX Ohungarumlaut X -40 1140 | KPX Ohungarumlaut Y -50 1141 | KPX Ohungarumlaut Yacute -50 1142 | KPX Ohungarumlaut Ydieresis -50 1143 | KPX Omacron A -35 1144 | KPX Omacron Aacute -35 1145 | KPX Omacron Abreve -35 1146 | KPX Omacron Acircumflex -35 1147 | KPX Omacron Adieresis -35 1148 | KPX Omacron Agrave -35 1149 | KPX Omacron Amacron -35 1150 | KPX Omacron Aogonek -35 1151 | KPX Omacron Aring -35 1152 | KPX Omacron Atilde -35 1153 | KPX Omacron T -40 1154 | KPX Omacron Tcaron -40 1155 | KPX Omacron Tcommaaccent -40 1156 | KPX Omacron V -50 1157 | KPX Omacron W -35 1158 | KPX Omacron X -40 1159 | KPX Omacron Y -50 1160 | KPX Omacron Yacute -50 1161 | KPX Omacron Ydieresis -50 1162 | KPX Oslash A -35 1163 | KPX Oslash Aacute -35 1164 | KPX Oslash Abreve -35 1165 | KPX Oslash Acircumflex -35 1166 | KPX Oslash Adieresis -35 1167 | KPX Oslash Agrave -35 1168 | KPX Oslash Amacron -35 1169 | KPX Oslash Aogonek -35 1170 | KPX Oslash Aring -35 1171 | KPX Oslash Atilde -35 1172 | KPX Oslash T -40 1173 | KPX Oslash Tcaron -40 1174 | KPX Oslash Tcommaaccent -40 1175 | KPX Oslash V -50 1176 | KPX Oslash W -35 1177 | KPX Oslash X -40 1178 | KPX Oslash Y -50 1179 | KPX Oslash Yacute -50 1180 | KPX Oslash Ydieresis -50 1181 | KPX Otilde A -35 1182 | KPX Otilde Aacute -35 1183 | KPX Otilde Abreve -35 1184 | KPX Otilde Acircumflex -35 1185 | KPX Otilde Adieresis -35 1186 | KPX Otilde Agrave -35 1187 | KPX Otilde Amacron -35 1188 | KPX Otilde Aogonek -35 1189 | KPX Otilde Aring -35 1190 | KPX Otilde Atilde -35 1191 | KPX Otilde T -40 1192 | KPX Otilde Tcaron -40 1193 | KPX Otilde Tcommaaccent -40 1194 | KPX Otilde V -50 1195 | KPX Otilde W -35 1196 | KPX Otilde X -40 1197 | KPX Otilde Y -50 1198 | KPX Otilde Yacute -50 1199 | KPX Otilde Ydieresis -50 1200 | KPX P A -92 1201 | KPX P Aacute -92 1202 | KPX P Abreve -92 1203 | KPX P Acircumflex -92 1204 | KPX P Adieresis -92 1205 | KPX P Agrave -92 1206 | KPX P Amacron -92 1207 | KPX P Aogonek -92 1208 | KPX P Aring -92 1209 | KPX P Atilde -92 1210 | KPX P a -15 1211 | KPX P aacute -15 1212 | KPX P abreve -15 1213 | KPX P acircumflex -15 1214 | KPX P adieresis -15 1215 | KPX P agrave -15 1216 | KPX P amacron -15 1217 | KPX P aogonek -15 1218 | KPX P aring -15 1219 | KPX P atilde -15 1220 | KPX P comma -111 1221 | KPX P period -111 1222 | KPX Q U -10 1223 | KPX Q Uacute -10 1224 | KPX Q Ucircumflex -10 1225 | KPX Q Udieresis -10 1226 | KPX Q Ugrave -10 1227 | KPX Q Uhungarumlaut -10 1228 | KPX Q Umacron -10 1229 | KPX Q Uogonek -10 1230 | KPX Q Uring -10 1231 | KPX R O -40 1232 | KPX R Oacute -40 1233 | KPX R Ocircumflex -40 1234 | KPX R Odieresis -40 1235 | KPX R Ograve -40 1236 | KPX R Ohungarumlaut -40 1237 | KPX R Omacron -40 1238 | KPX R Oslash -40 1239 | KPX R Otilde -40 1240 | KPX R T -60 1241 | KPX R Tcaron -60 1242 | KPX R Tcommaaccent -60 1243 | KPX R U -40 1244 | KPX R Uacute -40 1245 | KPX R Ucircumflex -40 1246 | KPX R Udieresis -40 1247 | KPX R Ugrave -40 1248 | KPX R Uhungarumlaut -40 1249 | KPX R Umacron -40 1250 | KPX R Uogonek -40 1251 | KPX R Uring -40 1252 | KPX R V -80 1253 | KPX R W -55 1254 | KPX R Y -65 1255 | KPX R Yacute -65 1256 | KPX R Ydieresis -65 1257 | KPX Racute O -40 1258 | KPX Racute Oacute -40 1259 | KPX Racute Ocircumflex -40 1260 | KPX Racute Odieresis -40 1261 | KPX Racute Ograve -40 1262 | KPX Racute Ohungarumlaut -40 1263 | KPX Racute Omacron -40 1264 | KPX Racute Oslash -40 1265 | KPX Racute Otilde -40 1266 | KPX Racute T -60 1267 | KPX Racute Tcaron -60 1268 | KPX Racute Tcommaaccent -60 1269 | KPX Racute U -40 1270 | KPX Racute Uacute -40 1271 | KPX Racute Ucircumflex -40 1272 | KPX Racute Udieresis -40 1273 | KPX Racute Ugrave -40 1274 | KPX Racute Uhungarumlaut -40 1275 | KPX Racute Umacron -40 1276 | KPX Racute Uogonek -40 1277 | KPX Racute Uring -40 1278 | KPX Racute V -80 1279 | KPX Racute W -55 1280 | KPX Racute Y -65 1281 | KPX Racute Yacute -65 1282 | KPX Racute Ydieresis -65 1283 | KPX Rcaron O -40 1284 | KPX Rcaron Oacute -40 1285 | KPX Rcaron Ocircumflex -40 1286 | KPX Rcaron Odieresis -40 1287 | KPX Rcaron Ograve -40 1288 | KPX Rcaron Ohungarumlaut -40 1289 | KPX Rcaron Omacron -40 1290 | KPX Rcaron Oslash -40 1291 | KPX Rcaron Otilde -40 1292 | KPX Rcaron T -60 1293 | KPX Rcaron Tcaron -60 1294 | KPX Rcaron Tcommaaccent -60 1295 | KPX Rcaron U -40 1296 | KPX Rcaron Uacute -40 1297 | KPX Rcaron Ucircumflex -40 1298 | KPX Rcaron Udieresis -40 1299 | KPX Rcaron Ugrave -40 1300 | KPX Rcaron Uhungarumlaut -40 1301 | KPX Rcaron Umacron -40 1302 | KPX Rcaron Uogonek -40 1303 | KPX Rcaron Uring -40 1304 | KPX Rcaron V -80 1305 | KPX Rcaron W -55 1306 | KPX Rcaron Y -65 1307 | KPX Rcaron Yacute -65 1308 | KPX Rcaron Ydieresis -65 1309 | KPX Rcommaaccent O -40 1310 | KPX Rcommaaccent Oacute -40 1311 | KPX Rcommaaccent Ocircumflex -40 1312 | KPX Rcommaaccent Odieresis -40 1313 | KPX Rcommaaccent Ograve -40 1314 | KPX Rcommaaccent Ohungarumlaut -40 1315 | KPX Rcommaaccent Omacron -40 1316 | KPX Rcommaaccent Oslash -40 1317 | KPX Rcommaaccent Otilde -40 1318 | KPX Rcommaaccent T -60 1319 | KPX Rcommaaccent Tcaron -60 1320 | KPX Rcommaaccent Tcommaaccent -60 1321 | KPX Rcommaaccent U -40 1322 | KPX Rcommaaccent Uacute -40 1323 | KPX Rcommaaccent Ucircumflex -40 1324 | KPX Rcommaaccent Udieresis -40 1325 | KPX Rcommaaccent Ugrave -40 1326 | KPX Rcommaaccent Uhungarumlaut -40 1327 | KPX Rcommaaccent Umacron -40 1328 | KPX Rcommaaccent Uogonek -40 1329 | KPX Rcommaaccent Uring -40 1330 | KPX Rcommaaccent V -80 1331 | KPX Rcommaaccent W -55 1332 | KPX Rcommaaccent Y -65 1333 | KPX Rcommaaccent Yacute -65 1334 | KPX Rcommaaccent Ydieresis -65 1335 | KPX T A -93 1336 | KPX T Aacute -93 1337 | KPX T Abreve -93 1338 | KPX T Acircumflex -93 1339 | KPX T Adieresis -93 1340 | KPX T Agrave -93 1341 | KPX T Amacron -93 1342 | KPX T Aogonek -93 1343 | KPX T Aring -93 1344 | KPX T Atilde -93 1345 | KPX T O -18 1346 | KPX T Oacute -18 1347 | KPX T Ocircumflex -18 1348 | KPX T Odieresis -18 1349 | KPX T Ograve -18 1350 | KPX T Ohungarumlaut -18 1351 | KPX T Omacron -18 1352 | KPX T Oslash -18 1353 | KPX T Otilde -18 1354 | KPX T a -80 1355 | KPX T aacute -80 1356 | KPX T abreve -80 1357 | KPX T acircumflex -80 1358 | KPX T adieresis -40 1359 | KPX T agrave -40 1360 | KPX T amacron -40 1361 | KPX T aogonek -80 1362 | KPX T aring -80 1363 | KPX T atilde -40 1364 | KPX T colon -50 1365 | KPX T comma -74 1366 | KPX T e -70 1367 | KPX T eacute -70 1368 | KPX T ecaron -70 1369 | KPX T ecircumflex -70 1370 | KPX T edieresis -30 1371 | KPX T edotaccent -70 1372 | KPX T egrave -70 1373 | KPX T emacron -30 1374 | KPX T eogonek -70 1375 | KPX T hyphen -92 1376 | KPX T i -35 1377 | KPX T iacute -35 1378 | KPX T iogonek -35 1379 | KPX T o -80 1380 | KPX T oacute -80 1381 | KPX T ocircumflex -80 1382 | KPX T odieresis -80 1383 | KPX T ograve -80 1384 | KPX T ohungarumlaut -80 1385 | KPX T omacron -80 1386 | KPX T oslash -80 1387 | KPX T otilde -80 1388 | KPX T period -74 1389 | KPX T r -35 1390 | KPX T racute -35 1391 | KPX T rcaron -35 1392 | KPX T rcommaaccent -35 1393 | KPX T semicolon -55 1394 | KPX T u -45 1395 | KPX T uacute -45 1396 | KPX T ucircumflex -45 1397 | KPX T udieresis -45 1398 | KPX T ugrave -45 1399 | KPX T uhungarumlaut -45 1400 | KPX T umacron -45 1401 | KPX T uogonek -45 1402 | KPX T uring -45 1403 | KPX T w -80 1404 | KPX T y -80 1405 | KPX T yacute -80 1406 | KPX T ydieresis -80 1407 | KPX Tcaron A -93 1408 | KPX Tcaron Aacute -93 1409 | KPX Tcaron Abreve -93 1410 | KPX Tcaron Acircumflex -93 1411 | KPX Tcaron Adieresis -93 1412 | KPX Tcaron Agrave -93 1413 | KPX Tcaron Amacron -93 1414 | KPX Tcaron Aogonek -93 1415 | KPX Tcaron Aring -93 1416 | KPX Tcaron Atilde -93 1417 | KPX Tcaron O -18 1418 | KPX Tcaron Oacute -18 1419 | KPX Tcaron Ocircumflex -18 1420 | KPX Tcaron Odieresis -18 1421 | KPX Tcaron Ograve -18 1422 | KPX Tcaron Ohungarumlaut -18 1423 | KPX Tcaron Omacron -18 1424 | KPX Tcaron Oslash -18 1425 | KPX Tcaron Otilde -18 1426 | KPX Tcaron a -80 1427 | KPX Tcaron aacute -80 1428 | KPX Tcaron abreve -80 1429 | KPX Tcaron acircumflex -80 1430 | KPX Tcaron adieresis -40 1431 | KPX Tcaron agrave -40 1432 | KPX Tcaron amacron -40 1433 | KPX Tcaron aogonek -80 1434 | KPX Tcaron aring -80 1435 | KPX Tcaron atilde -40 1436 | KPX Tcaron colon -50 1437 | KPX Tcaron comma -74 1438 | KPX Tcaron e -70 1439 | KPX Tcaron eacute -70 1440 | KPX Tcaron ecaron -70 1441 | KPX Tcaron ecircumflex -30 1442 | KPX Tcaron edieresis -30 1443 | KPX Tcaron edotaccent -70 1444 | KPX Tcaron egrave -70 1445 | KPX Tcaron emacron -30 1446 | KPX Tcaron eogonek -70 1447 | KPX Tcaron hyphen -92 1448 | KPX Tcaron i -35 1449 | KPX Tcaron iacute -35 1450 | KPX Tcaron iogonek -35 1451 | KPX Tcaron o -80 1452 | KPX Tcaron oacute -80 1453 | KPX Tcaron ocircumflex -80 1454 | KPX Tcaron odieresis -80 1455 | KPX Tcaron ograve -80 1456 | KPX Tcaron ohungarumlaut -80 1457 | KPX Tcaron omacron -80 1458 | KPX Tcaron oslash -80 1459 | KPX Tcaron otilde -80 1460 | KPX Tcaron period -74 1461 | KPX Tcaron r -35 1462 | KPX Tcaron racute -35 1463 | KPX Tcaron rcaron -35 1464 | KPX Tcaron rcommaaccent -35 1465 | KPX Tcaron semicolon -55 1466 | KPX Tcaron u -45 1467 | KPX Tcaron uacute -45 1468 | KPX Tcaron ucircumflex -45 1469 | KPX Tcaron udieresis -45 1470 | KPX Tcaron ugrave -45 1471 | KPX Tcaron uhungarumlaut -45 1472 | KPX Tcaron umacron -45 1473 | KPX Tcaron uogonek -45 1474 | KPX Tcaron uring -45 1475 | KPX Tcaron w -80 1476 | KPX Tcaron y -80 1477 | KPX Tcaron yacute -80 1478 | KPX Tcaron ydieresis -80 1479 | KPX Tcommaaccent A -93 1480 | KPX Tcommaaccent Aacute -93 1481 | KPX Tcommaaccent Abreve -93 1482 | KPX Tcommaaccent Acircumflex -93 1483 | KPX Tcommaaccent Adieresis -93 1484 | KPX Tcommaaccent Agrave -93 1485 | KPX Tcommaaccent Amacron -93 1486 | KPX Tcommaaccent Aogonek -93 1487 | KPX Tcommaaccent Aring -93 1488 | KPX Tcommaaccent Atilde -93 1489 | KPX Tcommaaccent O -18 1490 | KPX Tcommaaccent Oacute -18 1491 | KPX Tcommaaccent Ocircumflex -18 1492 | KPX Tcommaaccent Odieresis -18 1493 | KPX Tcommaaccent Ograve -18 1494 | KPX Tcommaaccent Ohungarumlaut -18 1495 | KPX Tcommaaccent Omacron -18 1496 | KPX Tcommaaccent Oslash -18 1497 | KPX Tcommaaccent Otilde -18 1498 | KPX Tcommaaccent a -80 1499 | KPX Tcommaaccent aacute -80 1500 | KPX Tcommaaccent abreve -80 1501 | KPX Tcommaaccent acircumflex -80 1502 | KPX Tcommaaccent adieresis -40 1503 | KPX Tcommaaccent agrave -40 1504 | KPX Tcommaaccent amacron -40 1505 | KPX Tcommaaccent aogonek -80 1506 | KPX Tcommaaccent aring -80 1507 | KPX Tcommaaccent atilde -40 1508 | KPX Tcommaaccent colon -50 1509 | KPX Tcommaaccent comma -74 1510 | KPX Tcommaaccent e -70 1511 | KPX Tcommaaccent eacute -70 1512 | KPX Tcommaaccent ecaron -70 1513 | KPX Tcommaaccent ecircumflex -30 1514 | KPX Tcommaaccent edieresis -30 1515 | KPX Tcommaaccent edotaccent -70 1516 | KPX Tcommaaccent egrave -30 1517 | KPX Tcommaaccent emacron -70 1518 | KPX Tcommaaccent eogonek -70 1519 | KPX Tcommaaccent hyphen -92 1520 | KPX Tcommaaccent i -35 1521 | KPX Tcommaaccent iacute -35 1522 | KPX Tcommaaccent iogonek -35 1523 | KPX Tcommaaccent o -80 1524 | KPX Tcommaaccent oacute -80 1525 | KPX Tcommaaccent ocircumflex -80 1526 | KPX Tcommaaccent odieresis -80 1527 | KPX Tcommaaccent ograve -80 1528 | KPX Tcommaaccent ohungarumlaut -80 1529 | KPX Tcommaaccent omacron -80 1530 | KPX Tcommaaccent oslash -80 1531 | KPX Tcommaaccent otilde -80 1532 | KPX Tcommaaccent period -74 1533 | KPX Tcommaaccent r -35 1534 | KPX Tcommaaccent racute -35 1535 | KPX Tcommaaccent rcaron -35 1536 | KPX Tcommaaccent rcommaaccent -35 1537 | KPX Tcommaaccent semicolon -55 1538 | KPX Tcommaaccent u -45 1539 | KPX Tcommaaccent uacute -45 1540 | KPX Tcommaaccent ucircumflex -45 1541 | KPX Tcommaaccent udieresis -45 1542 | KPX Tcommaaccent ugrave -45 1543 | KPX Tcommaaccent uhungarumlaut -45 1544 | KPX Tcommaaccent umacron -45 1545 | KPX Tcommaaccent uogonek -45 1546 | KPX Tcommaaccent uring -45 1547 | KPX Tcommaaccent w -80 1548 | KPX Tcommaaccent y -80 1549 | KPX Tcommaaccent yacute -80 1550 | KPX Tcommaaccent ydieresis -80 1551 | KPX U A -40 1552 | KPX U Aacute -40 1553 | KPX U Abreve -40 1554 | KPX U Acircumflex -40 1555 | KPX U Adieresis -40 1556 | KPX U Agrave -40 1557 | KPX U Amacron -40 1558 | KPX U Aogonek -40 1559 | KPX U Aring -40 1560 | KPX U Atilde -40 1561 | KPX Uacute A -40 1562 | KPX Uacute Aacute -40 1563 | KPX Uacute Abreve -40 1564 | KPX Uacute Acircumflex -40 1565 | KPX Uacute Adieresis -40 1566 | KPX Uacute Agrave -40 1567 | KPX Uacute Amacron -40 1568 | KPX Uacute Aogonek -40 1569 | KPX Uacute Aring -40 1570 | KPX Uacute Atilde -40 1571 | KPX Ucircumflex A -40 1572 | KPX Ucircumflex Aacute -40 1573 | KPX Ucircumflex Abreve -40 1574 | KPX Ucircumflex Acircumflex -40 1575 | KPX Ucircumflex Adieresis -40 1576 | KPX Ucircumflex Agrave -40 1577 | KPX Ucircumflex Amacron -40 1578 | KPX Ucircumflex Aogonek -40 1579 | KPX Ucircumflex Aring -40 1580 | KPX Ucircumflex Atilde -40 1581 | KPX Udieresis A -40 1582 | KPX Udieresis Aacute -40 1583 | KPX Udieresis Abreve -40 1584 | KPX Udieresis Acircumflex -40 1585 | KPX Udieresis Adieresis -40 1586 | KPX Udieresis Agrave -40 1587 | KPX Udieresis Amacron -40 1588 | KPX Udieresis Aogonek -40 1589 | KPX Udieresis Aring -40 1590 | KPX Udieresis Atilde -40 1591 | KPX Ugrave A -40 1592 | KPX Ugrave Aacute -40 1593 | KPX Ugrave Abreve -40 1594 | KPX Ugrave Acircumflex -40 1595 | KPX Ugrave Adieresis -40 1596 | KPX Ugrave Agrave -40 1597 | KPX Ugrave Amacron -40 1598 | KPX Ugrave Aogonek -40 1599 | KPX Ugrave Aring -40 1600 | KPX Ugrave Atilde -40 1601 | KPX Uhungarumlaut A -40 1602 | KPX Uhungarumlaut Aacute -40 1603 | KPX Uhungarumlaut Abreve -40 1604 | KPX Uhungarumlaut Acircumflex -40 1605 | KPX Uhungarumlaut Adieresis -40 1606 | KPX Uhungarumlaut Agrave -40 1607 | KPX Uhungarumlaut Amacron -40 1608 | KPX Uhungarumlaut Aogonek -40 1609 | KPX Uhungarumlaut Aring -40 1610 | KPX Uhungarumlaut Atilde -40 1611 | KPX Umacron A -40 1612 | KPX Umacron Aacute -40 1613 | KPX Umacron Abreve -40 1614 | KPX Umacron Acircumflex -40 1615 | KPX Umacron Adieresis -40 1616 | KPX Umacron Agrave -40 1617 | KPX Umacron Amacron -40 1618 | KPX Umacron Aogonek -40 1619 | KPX Umacron Aring -40 1620 | KPX Umacron Atilde -40 1621 | KPX Uogonek A -40 1622 | KPX Uogonek Aacute -40 1623 | KPX Uogonek Abreve -40 1624 | KPX Uogonek Acircumflex -40 1625 | KPX Uogonek Adieresis -40 1626 | KPX Uogonek Agrave -40 1627 | KPX Uogonek Amacron -40 1628 | KPX Uogonek Aogonek -40 1629 | KPX Uogonek Aring -40 1630 | KPX Uogonek Atilde -40 1631 | KPX Uring A -40 1632 | KPX Uring Aacute -40 1633 | KPX Uring Abreve -40 1634 | KPX Uring Acircumflex -40 1635 | KPX Uring Adieresis -40 1636 | KPX Uring Agrave -40 1637 | KPX Uring Amacron -40 1638 | KPX Uring Aogonek -40 1639 | KPX Uring Aring -40 1640 | KPX Uring Atilde -40 1641 | KPX V A -135 1642 | KPX V Aacute -135 1643 | KPX V Abreve -135 1644 | KPX V Acircumflex -135 1645 | KPX V Adieresis -135 1646 | KPX V Agrave -135 1647 | KPX V Amacron -135 1648 | KPX V Aogonek -135 1649 | KPX V Aring -135 1650 | KPX V Atilde -135 1651 | KPX V G -15 1652 | KPX V Gbreve -15 1653 | KPX V Gcommaaccent -15 1654 | KPX V O -40 1655 | KPX V Oacute -40 1656 | KPX V Ocircumflex -40 1657 | KPX V Odieresis -40 1658 | KPX V Ograve -40 1659 | KPX V Ohungarumlaut -40 1660 | KPX V Omacron -40 1661 | KPX V Oslash -40 1662 | KPX V Otilde -40 1663 | KPX V a -111 1664 | KPX V aacute -111 1665 | KPX V abreve -111 1666 | KPX V acircumflex -71 1667 | KPX V adieresis -71 1668 | KPX V agrave -71 1669 | KPX V amacron -71 1670 | KPX V aogonek -111 1671 | KPX V aring -111 1672 | KPX V atilde -71 1673 | KPX V colon -74 1674 | KPX V comma -129 1675 | KPX V e -111 1676 | KPX V eacute -111 1677 | KPX V ecaron -71 1678 | KPX V ecircumflex -71 1679 | KPX V edieresis -71 1680 | KPX V edotaccent -111 1681 | KPX V egrave -71 1682 | KPX V emacron -71 1683 | KPX V eogonek -111 1684 | KPX V hyphen -100 1685 | KPX V i -60 1686 | KPX V iacute -60 1687 | KPX V icircumflex -20 1688 | KPX V idieresis -20 1689 | KPX V igrave -20 1690 | KPX V imacron -20 1691 | KPX V iogonek -60 1692 | KPX V o -129 1693 | KPX V oacute -129 1694 | KPX V ocircumflex -129 1695 | KPX V odieresis -89 1696 | KPX V ograve -89 1697 | KPX V ohungarumlaut -129 1698 | KPX V omacron -89 1699 | KPX V oslash -129 1700 | KPX V otilde -89 1701 | KPX V period -129 1702 | KPX V semicolon -74 1703 | KPX V u -75 1704 | KPX V uacute -75 1705 | KPX V ucircumflex -75 1706 | KPX V udieresis -75 1707 | KPX V ugrave -75 1708 | KPX V uhungarumlaut -75 1709 | KPX V umacron -75 1710 | KPX V uogonek -75 1711 | KPX V uring -75 1712 | KPX W A -120 1713 | KPX W Aacute -120 1714 | KPX W Abreve -120 1715 | KPX W Acircumflex -120 1716 | KPX W Adieresis -120 1717 | KPX W Agrave -120 1718 | KPX W Amacron -120 1719 | KPX W Aogonek -120 1720 | KPX W Aring -120 1721 | KPX W Atilde -120 1722 | KPX W O -10 1723 | KPX W Oacute -10 1724 | KPX W Ocircumflex -10 1725 | KPX W Odieresis -10 1726 | KPX W Ograve -10 1727 | KPX W Ohungarumlaut -10 1728 | KPX W Omacron -10 1729 | KPX W Oslash -10 1730 | KPX W Otilde -10 1731 | KPX W a -80 1732 | KPX W aacute -80 1733 | KPX W abreve -80 1734 | KPX W acircumflex -80 1735 | KPX W adieresis -80 1736 | KPX W agrave -80 1737 | KPX W amacron -80 1738 | KPX W aogonek -80 1739 | KPX W aring -80 1740 | KPX W atilde -80 1741 | KPX W colon -37 1742 | KPX W comma -92 1743 | KPX W e -80 1744 | KPX W eacute -80 1745 | KPX W ecaron -80 1746 | KPX W ecircumflex -80 1747 | KPX W edieresis -40 1748 | KPX W edotaccent -80 1749 | KPX W egrave -40 1750 | KPX W emacron -40 1751 | KPX W eogonek -80 1752 | KPX W hyphen -65 1753 | KPX W i -40 1754 | KPX W iacute -40 1755 | KPX W iogonek -40 1756 | KPX W o -80 1757 | KPX W oacute -80 1758 | KPX W ocircumflex -80 1759 | KPX W odieresis -80 1760 | KPX W ograve -80 1761 | KPX W ohungarumlaut -80 1762 | KPX W omacron -80 1763 | KPX W oslash -80 1764 | KPX W otilde -80 1765 | KPX W period -92 1766 | KPX W semicolon -37 1767 | KPX W u -50 1768 | KPX W uacute -50 1769 | KPX W ucircumflex -50 1770 | KPX W udieresis -50 1771 | KPX W ugrave -50 1772 | KPX W uhungarumlaut -50 1773 | KPX W umacron -50 1774 | KPX W uogonek -50 1775 | KPX W uring -50 1776 | KPX W y -73 1777 | KPX W yacute -73 1778 | KPX W ydieresis -73 1779 | KPX Y A -120 1780 | KPX Y Aacute -120 1781 | KPX Y Abreve -120 1782 | KPX Y Acircumflex -120 1783 | KPX Y Adieresis -120 1784 | KPX Y Agrave -120 1785 | KPX Y Amacron -120 1786 | KPX Y Aogonek -120 1787 | KPX Y Aring -120 1788 | KPX Y Atilde -120 1789 | KPX Y O -30 1790 | KPX Y Oacute -30 1791 | KPX Y Ocircumflex -30 1792 | KPX Y Odieresis -30 1793 | KPX Y Ograve -30 1794 | KPX Y Ohungarumlaut -30 1795 | KPX Y Omacron -30 1796 | KPX Y Oslash -30 1797 | KPX Y Otilde -30 1798 | KPX Y a -100 1799 | KPX Y aacute -100 1800 | KPX Y abreve -100 1801 | KPX Y acircumflex -100 1802 | KPX Y adieresis -60 1803 | KPX Y agrave -60 1804 | KPX Y amacron -60 1805 | KPX Y aogonek -100 1806 | KPX Y aring -100 1807 | KPX Y atilde -60 1808 | KPX Y colon -92 1809 | KPX Y comma -129 1810 | KPX Y e -100 1811 | KPX Y eacute -100 1812 | KPX Y ecaron -100 1813 | KPX Y ecircumflex -100 1814 | KPX Y edieresis -60 1815 | KPX Y edotaccent -100 1816 | KPX Y egrave -60 1817 | KPX Y emacron -60 1818 | KPX Y eogonek -100 1819 | KPX Y hyphen -111 1820 | KPX Y i -55 1821 | KPX Y iacute -55 1822 | KPX Y iogonek -55 1823 | KPX Y o -110 1824 | KPX Y oacute -110 1825 | KPX Y ocircumflex -110 1826 | KPX Y odieresis -70 1827 | KPX Y ograve -70 1828 | KPX Y ohungarumlaut -110 1829 | KPX Y omacron -70 1830 | KPX Y oslash -110 1831 | KPX Y otilde -70 1832 | KPX Y period -129 1833 | KPX Y semicolon -92 1834 | KPX Y u -111 1835 | KPX Y uacute -111 1836 | KPX Y ucircumflex -111 1837 | KPX Y udieresis -71 1838 | KPX Y ugrave -71 1839 | KPX Y uhungarumlaut -111 1840 | KPX Y umacron -71 1841 | KPX Y uogonek -111 1842 | KPX Y uring -111 1843 | KPX Yacute A -120 1844 | KPX Yacute Aacute -120 1845 | KPX Yacute Abreve -120 1846 | KPX Yacute Acircumflex -120 1847 | KPX Yacute Adieresis -120 1848 | KPX Yacute Agrave -120 1849 | KPX Yacute Amacron -120 1850 | KPX Yacute Aogonek -120 1851 | KPX Yacute Aring -120 1852 | KPX Yacute Atilde -120 1853 | KPX Yacute O -30 1854 | KPX Yacute Oacute -30 1855 | KPX Yacute Ocircumflex -30 1856 | KPX Yacute Odieresis -30 1857 | KPX Yacute Ograve -30 1858 | KPX Yacute Ohungarumlaut -30 1859 | KPX Yacute Omacron -30 1860 | KPX Yacute Oslash -30 1861 | KPX Yacute Otilde -30 1862 | KPX Yacute a -100 1863 | KPX Yacute aacute -100 1864 | KPX Yacute abreve -100 1865 | KPX Yacute acircumflex -100 1866 | KPX Yacute adieresis -60 1867 | KPX Yacute agrave -60 1868 | KPX Yacute amacron -60 1869 | KPX Yacute aogonek -100 1870 | KPX Yacute aring -100 1871 | KPX Yacute atilde -60 1872 | KPX Yacute colon -92 1873 | KPX Yacute comma -129 1874 | KPX Yacute e -100 1875 | KPX Yacute eacute -100 1876 | KPX Yacute ecaron -100 1877 | KPX Yacute ecircumflex -100 1878 | KPX Yacute edieresis -60 1879 | KPX Yacute edotaccent -100 1880 | KPX Yacute egrave -60 1881 | KPX Yacute emacron -60 1882 | KPX Yacute eogonek -100 1883 | KPX Yacute hyphen -111 1884 | KPX Yacute i -55 1885 | KPX Yacute iacute -55 1886 | KPX Yacute iogonek -55 1887 | KPX Yacute o -110 1888 | KPX Yacute oacute -110 1889 | KPX Yacute ocircumflex -110 1890 | KPX Yacute odieresis -70 1891 | KPX Yacute ograve -70 1892 | KPX Yacute ohungarumlaut -110 1893 | KPX Yacute omacron -70 1894 | KPX Yacute oslash -110 1895 | KPX Yacute otilde -70 1896 | KPX Yacute period -129 1897 | KPX Yacute semicolon -92 1898 | KPX Yacute u -111 1899 | KPX Yacute uacute -111 1900 | KPX Yacute ucircumflex -111 1901 | KPX Yacute udieresis -71 1902 | KPX Yacute ugrave -71 1903 | KPX Yacute uhungarumlaut -111 1904 | KPX Yacute umacron -71 1905 | KPX Yacute uogonek -111 1906 | KPX Yacute uring -111 1907 | KPX Ydieresis A -120 1908 | KPX Ydieresis Aacute -120 1909 | KPX Ydieresis Abreve -120 1910 | KPX Ydieresis Acircumflex -120 1911 | KPX Ydieresis Adieresis -120 1912 | KPX Ydieresis Agrave -120 1913 | KPX Ydieresis Amacron -120 1914 | KPX Ydieresis Aogonek -120 1915 | KPX Ydieresis Aring -120 1916 | KPX Ydieresis Atilde -120 1917 | KPX Ydieresis O -30 1918 | KPX Ydieresis Oacute -30 1919 | KPX Ydieresis Ocircumflex -30 1920 | KPX Ydieresis Odieresis -30 1921 | KPX Ydieresis Ograve -30 1922 | KPX Ydieresis Ohungarumlaut -30 1923 | KPX Ydieresis Omacron -30 1924 | KPX Ydieresis Oslash -30 1925 | KPX Ydieresis Otilde -30 1926 | KPX Ydieresis a -100 1927 | KPX Ydieresis aacute -100 1928 | KPX Ydieresis abreve -100 1929 | KPX Ydieresis acircumflex -100 1930 | KPX Ydieresis adieresis -60 1931 | KPX Ydieresis agrave -60 1932 | KPX Ydieresis amacron -60 1933 | KPX Ydieresis aogonek -100 1934 | KPX Ydieresis aring -100 1935 | KPX Ydieresis atilde -100 1936 | KPX Ydieresis colon -92 1937 | KPX Ydieresis comma -129 1938 | KPX Ydieresis e -100 1939 | KPX Ydieresis eacute -100 1940 | KPX Ydieresis ecaron -100 1941 | KPX Ydieresis ecircumflex -100 1942 | KPX Ydieresis edieresis -60 1943 | KPX Ydieresis edotaccent -100 1944 | KPX Ydieresis egrave -60 1945 | KPX Ydieresis emacron -60 1946 | KPX Ydieresis eogonek -100 1947 | KPX Ydieresis hyphen -111 1948 | KPX Ydieresis i -55 1949 | KPX Ydieresis iacute -55 1950 | KPX Ydieresis iogonek -55 1951 | KPX Ydieresis o -110 1952 | KPX Ydieresis oacute -110 1953 | KPX Ydieresis ocircumflex -110 1954 | KPX Ydieresis odieresis -70 1955 | KPX Ydieresis ograve -70 1956 | KPX Ydieresis ohungarumlaut -110 1957 | KPX Ydieresis omacron -70 1958 | KPX Ydieresis oslash -110 1959 | KPX Ydieresis otilde -70 1960 | KPX Ydieresis period -129 1961 | KPX Ydieresis semicolon -92 1962 | KPX Ydieresis u -111 1963 | KPX Ydieresis uacute -111 1964 | KPX Ydieresis ucircumflex -111 1965 | KPX Ydieresis udieresis -71 1966 | KPX Ydieresis ugrave -71 1967 | KPX Ydieresis uhungarumlaut -111 1968 | KPX Ydieresis umacron -71 1969 | KPX Ydieresis uogonek -111 1970 | KPX Ydieresis uring -111 1971 | KPX a v -20 1972 | KPX a w -15 1973 | KPX aacute v -20 1974 | KPX aacute w -15 1975 | KPX abreve v -20 1976 | KPX abreve w -15 1977 | KPX acircumflex v -20 1978 | KPX acircumflex w -15 1979 | KPX adieresis v -20 1980 | KPX adieresis w -15 1981 | KPX agrave v -20 1982 | KPX agrave w -15 1983 | KPX amacron v -20 1984 | KPX amacron w -15 1985 | KPX aogonek v -20 1986 | KPX aogonek w -15 1987 | KPX aring v -20 1988 | KPX aring w -15 1989 | KPX atilde v -20 1990 | KPX atilde w -15 1991 | KPX b period -40 1992 | KPX b u -20 1993 | KPX b uacute -20 1994 | KPX b ucircumflex -20 1995 | KPX b udieresis -20 1996 | KPX b ugrave -20 1997 | KPX b uhungarumlaut -20 1998 | KPX b umacron -20 1999 | KPX b uogonek -20 2000 | KPX b uring -20 2001 | KPX b v -15 2002 | KPX c y -15 2003 | KPX c yacute -15 2004 | KPX c ydieresis -15 2005 | KPX cacute y -15 2006 | KPX cacute yacute -15 2007 | KPX cacute ydieresis -15 2008 | KPX ccaron y -15 2009 | KPX ccaron yacute -15 2010 | KPX ccaron ydieresis -15 2011 | KPX ccedilla y -15 2012 | KPX ccedilla yacute -15 2013 | KPX ccedilla ydieresis -15 2014 | KPX comma quotedblright -70 2015 | KPX comma quoteright -70 2016 | KPX e g -15 2017 | KPX e gbreve -15 2018 | KPX e gcommaaccent -15 2019 | KPX e v -25 2020 | KPX e w -25 2021 | KPX e x -15 2022 | KPX e y -15 2023 | KPX e yacute -15 2024 | KPX e ydieresis -15 2025 | KPX eacute g -15 2026 | KPX eacute gbreve -15 2027 | KPX eacute gcommaaccent -15 2028 | KPX eacute v -25 2029 | KPX eacute w -25 2030 | KPX eacute x -15 2031 | KPX eacute y -15 2032 | KPX eacute yacute -15 2033 | KPX eacute ydieresis -15 2034 | KPX ecaron g -15 2035 | KPX ecaron gbreve -15 2036 | KPX ecaron gcommaaccent -15 2037 | KPX ecaron v -25 2038 | KPX ecaron w -25 2039 | KPX ecaron x -15 2040 | KPX ecaron y -15 2041 | KPX ecaron yacute -15 2042 | KPX ecaron ydieresis -15 2043 | KPX ecircumflex g -15 2044 | KPX ecircumflex gbreve -15 2045 | KPX ecircumflex gcommaaccent -15 2046 | KPX ecircumflex v -25 2047 | KPX ecircumflex w -25 2048 | KPX ecircumflex x -15 2049 | KPX ecircumflex y -15 2050 | KPX ecircumflex yacute -15 2051 | KPX ecircumflex ydieresis -15 2052 | KPX edieresis g -15 2053 | KPX edieresis gbreve -15 2054 | KPX edieresis gcommaaccent -15 2055 | KPX edieresis v -25 2056 | KPX edieresis w -25 2057 | KPX edieresis x -15 2058 | KPX edieresis y -15 2059 | KPX edieresis yacute -15 2060 | KPX edieresis ydieresis -15 2061 | KPX edotaccent g -15 2062 | KPX edotaccent gbreve -15 2063 | KPX edotaccent gcommaaccent -15 2064 | KPX edotaccent v -25 2065 | KPX edotaccent w -25 2066 | KPX edotaccent x -15 2067 | KPX edotaccent y -15 2068 | KPX edotaccent yacute -15 2069 | KPX edotaccent ydieresis -15 2070 | KPX egrave g -15 2071 | KPX egrave gbreve -15 2072 | KPX egrave gcommaaccent -15 2073 | KPX egrave v -25 2074 | KPX egrave w -25 2075 | KPX egrave x -15 2076 | KPX egrave y -15 2077 | KPX egrave yacute -15 2078 | KPX egrave ydieresis -15 2079 | KPX emacron g -15 2080 | KPX emacron gbreve -15 2081 | KPX emacron gcommaaccent -15 2082 | KPX emacron v -25 2083 | KPX emacron w -25 2084 | KPX emacron x -15 2085 | KPX emacron y -15 2086 | KPX emacron yacute -15 2087 | KPX emacron ydieresis -15 2088 | KPX eogonek g -15 2089 | KPX eogonek gbreve -15 2090 | KPX eogonek gcommaaccent -15 2091 | KPX eogonek v -25 2092 | KPX eogonek w -25 2093 | KPX eogonek x -15 2094 | KPX eogonek y -15 2095 | KPX eogonek yacute -15 2096 | KPX eogonek ydieresis -15 2097 | KPX f a -10 2098 | KPX f aacute -10 2099 | KPX f abreve -10 2100 | KPX f acircumflex -10 2101 | KPX f adieresis -10 2102 | KPX f agrave -10 2103 | KPX f amacron -10 2104 | KPX f aogonek -10 2105 | KPX f aring -10 2106 | KPX f atilde -10 2107 | KPX f dotlessi -50 2108 | KPX f f -25 2109 | KPX f i -20 2110 | KPX f iacute -20 2111 | KPX f quoteright 55 2112 | KPX g a -5 2113 | KPX g aacute -5 2114 | KPX g abreve -5 2115 | KPX g acircumflex -5 2116 | KPX g adieresis -5 2117 | KPX g agrave -5 2118 | KPX g amacron -5 2119 | KPX g aogonek -5 2120 | KPX g aring -5 2121 | KPX g atilde -5 2122 | KPX gbreve a -5 2123 | KPX gbreve aacute -5 2124 | KPX gbreve abreve -5 2125 | KPX gbreve acircumflex -5 2126 | KPX gbreve adieresis -5 2127 | KPX gbreve agrave -5 2128 | KPX gbreve amacron -5 2129 | KPX gbreve aogonek -5 2130 | KPX gbreve aring -5 2131 | KPX gbreve atilde -5 2132 | KPX gcommaaccent a -5 2133 | KPX gcommaaccent aacute -5 2134 | KPX gcommaaccent abreve -5 2135 | KPX gcommaaccent acircumflex -5 2136 | KPX gcommaaccent adieresis -5 2137 | KPX gcommaaccent agrave -5 2138 | KPX gcommaaccent amacron -5 2139 | KPX gcommaaccent aogonek -5 2140 | KPX gcommaaccent aring -5 2141 | KPX gcommaaccent atilde -5 2142 | KPX h y -5 2143 | KPX h yacute -5 2144 | KPX h ydieresis -5 2145 | KPX i v -25 2146 | KPX iacute v -25 2147 | KPX icircumflex v -25 2148 | KPX idieresis v -25 2149 | KPX igrave v -25 2150 | KPX imacron v -25 2151 | KPX iogonek v -25 2152 | KPX k e -10 2153 | KPX k eacute -10 2154 | KPX k ecaron -10 2155 | KPX k ecircumflex -10 2156 | KPX k edieresis -10 2157 | KPX k edotaccent -10 2158 | KPX k egrave -10 2159 | KPX k emacron -10 2160 | KPX k eogonek -10 2161 | KPX k o -10 2162 | KPX k oacute -10 2163 | KPX k ocircumflex -10 2164 | KPX k odieresis -10 2165 | KPX k ograve -10 2166 | KPX k ohungarumlaut -10 2167 | KPX k omacron -10 2168 | KPX k oslash -10 2169 | KPX k otilde -10 2170 | KPX k y -15 2171 | KPX k yacute -15 2172 | KPX k ydieresis -15 2173 | KPX kcommaaccent e -10 2174 | KPX kcommaaccent eacute -10 2175 | KPX kcommaaccent ecaron -10 2176 | KPX kcommaaccent ecircumflex -10 2177 | KPX kcommaaccent edieresis -10 2178 | KPX kcommaaccent edotaccent -10 2179 | KPX kcommaaccent egrave -10 2180 | KPX kcommaaccent emacron -10 2181 | KPX kcommaaccent eogonek -10 2182 | KPX kcommaaccent o -10 2183 | KPX kcommaaccent oacute -10 2184 | KPX kcommaaccent ocircumflex -10 2185 | KPX kcommaaccent odieresis -10 2186 | KPX kcommaaccent ograve -10 2187 | KPX kcommaaccent ohungarumlaut -10 2188 | KPX kcommaaccent omacron -10 2189 | KPX kcommaaccent oslash -10 2190 | KPX kcommaaccent otilde -10 2191 | KPX kcommaaccent y -15 2192 | KPX kcommaaccent yacute -15 2193 | KPX kcommaaccent ydieresis -15 2194 | KPX l w -10 2195 | KPX lacute w -10 2196 | KPX lcommaaccent w -10 2197 | KPX lslash w -10 2198 | KPX n v -40 2199 | KPX n y -15 2200 | KPX n yacute -15 2201 | KPX n ydieresis -15 2202 | KPX nacute v -40 2203 | KPX nacute y -15 2204 | KPX nacute yacute -15 2205 | KPX nacute ydieresis -15 2206 | KPX ncaron v -40 2207 | KPX ncaron y -15 2208 | KPX ncaron yacute -15 2209 | KPX ncaron ydieresis -15 2210 | KPX ncommaaccent v -40 2211 | KPX ncommaaccent y -15 2212 | KPX ncommaaccent yacute -15 2213 | KPX ncommaaccent ydieresis -15 2214 | KPX ntilde v -40 2215 | KPX ntilde y -15 2216 | KPX ntilde yacute -15 2217 | KPX ntilde ydieresis -15 2218 | KPX o v -15 2219 | KPX o w -25 2220 | KPX o y -10 2221 | KPX o yacute -10 2222 | KPX o ydieresis -10 2223 | KPX oacute v -15 2224 | KPX oacute w -25 2225 | KPX oacute y -10 2226 | KPX oacute yacute -10 2227 | KPX oacute ydieresis -10 2228 | KPX ocircumflex v -15 2229 | KPX ocircumflex w -25 2230 | KPX ocircumflex y -10 2231 | KPX ocircumflex yacute -10 2232 | KPX ocircumflex ydieresis -10 2233 | KPX odieresis v -15 2234 | KPX odieresis w -25 2235 | KPX odieresis y -10 2236 | KPX odieresis yacute -10 2237 | KPX odieresis ydieresis -10 2238 | KPX ograve v -15 2239 | KPX ograve w -25 2240 | KPX ograve y -10 2241 | KPX ograve yacute -10 2242 | KPX ograve ydieresis -10 2243 | KPX ohungarumlaut v -15 2244 | KPX ohungarumlaut w -25 2245 | KPX ohungarumlaut y -10 2246 | KPX ohungarumlaut yacute -10 2247 | KPX ohungarumlaut ydieresis -10 2248 | KPX omacron v -15 2249 | KPX omacron w -25 2250 | KPX omacron y -10 2251 | KPX omacron yacute -10 2252 | KPX omacron ydieresis -10 2253 | KPX oslash v -15 2254 | KPX oslash w -25 2255 | KPX oslash y -10 2256 | KPX oslash yacute -10 2257 | KPX oslash ydieresis -10 2258 | KPX otilde v -15 2259 | KPX otilde w -25 2260 | KPX otilde y -10 2261 | KPX otilde yacute -10 2262 | KPX otilde ydieresis -10 2263 | KPX p y -10 2264 | KPX p yacute -10 2265 | KPX p ydieresis -10 2266 | KPX period quotedblright -70 2267 | KPX period quoteright -70 2268 | KPX quotedblleft A -80 2269 | KPX quotedblleft Aacute -80 2270 | KPX quotedblleft Abreve -80 2271 | KPX quotedblleft Acircumflex -80 2272 | KPX quotedblleft Adieresis -80 2273 | KPX quotedblleft Agrave -80 2274 | KPX quotedblleft Amacron -80 2275 | KPX quotedblleft Aogonek -80 2276 | KPX quotedblleft Aring -80 2277 | KPX quotedblleft Atilde -80 2278 | KPX quoteleft A -80 2279 | KPX quoteleft Aacute -80 2280 | KPX quoteleft Abreve -80 2281 | KPX quoteleft Acircumflex -80 2282 | KPX quoteleft Adieresis -80 2283 | KPX quoteleft Agrave -80 2284 | KPX quoteleft Amacron -80 2285 | KPX quoteleft Aogonek -80 2286 | KPX quoteleft Aring -80 2287 | KPX quoteleft Atilde -80 2288 | KPX quoteleft quoteleft -74 2289 | KPX quoteright d -50 2290 | KPX quoteright dcroat -50 2291 | KPX quoteright l -10 2292 | KPX quoteright lacute -10 2293 | KPX quoteright lcommaaccent -10 2294 | KPX quoteright lslash -10 2295 | KPX quoteright quoteright -74 2296 | KPX quoteright r -50 2297 | KPX quoteright racute -50 2298 | KPX quoteright rcaron -50 2299 | KPX quoteright rcommaaccent -50 2300 | KPX quoteright s -55 2301 | KPX quoteright sacute -55 2302 | KPX quoteright scaron -55 2303 | KPX quoteright scedilla -55 2304 | KPX quoteright scommaaccent -55 2305 | KPX quoteright space -74 2306 | KPX quoteright t -18 2307 | KPX quoteright tcommaaccent -18 2308 | KPX quoteright v -50 2309 | KPX r comma -40 2310 | KPX r g -18 2311 | KPX r gbreve -18 2312 | KPX r gcommaaccent -18 2313 | KPX r hyphen -20 2314 | KPX r period -55 2315 | KPX racute comma -40 2316 | KPX racute g -18 2317 | KPX racute gbreve -18 2318 | KPX racute gcommaaccent -18 2319 | KPX racute hyphen -20 2320 | KPX racute period -55 2321 | KPX rcaron comma -40 2322 | KPX rcaron g -18 2323 | KPX rcaron gbreve -18 2324 | KPX rcaron gcommaaccent -18 2325 | KPX rcaron hyphen -20 2326 | KPX rcaron period -55 2327 | KPX rcommaaccent comma -40 2328 | KPX rcommaaccent g -18 2329 | KPX rcommaaccent gbreve -18 2330 | KPX rcommaaccent gcommaaccent -18 2331 | KPX rcommaaccent hyphen -20 2332 | KPX rcommaaccent period -55 2333 | KPX space A -55 2334 | KPX space Aacute -55 2335 | KPX space Abreve -55 2336 | KPX space Acircumflex -55 2337 | KPX space Adieresis -55 2338 | KPX space Agrave -55 2339 | KPX space Amacron -55 2340 | KPX space Aogonek -55 2341 | KPX space Aring -55 2342 | KPX space Atilde -55 2343 | KPX space T -18 2344 | KPX space Tcaron -18 2345 | KPX space Tcommaaccent -18 2346 | KPX space V -50 2347 | KPX space W -30 2348 | KPX space Y -90 2349 | KPX space Yacute -90 2350 | KPX space Ydieresis -90 2351 | KPX v a -25 2352 | KPX v aacute -25 2353 | KPX v abreve -25 2354 | KPX v acircumflex -25 2355 | KPX v adieresis -25 2356 | KPX v agrave -25 2357 | KPX v amacron -25 2358 | KPX v aogonek -25 2359 | KPX v aring -25 2360 | KPX v atilde -25 2361 | KPX v comma -65 2362 | KPX v e -15 2363 | KPX v eacute -15 2364 | KPX v ecaron -15 2365 | KPX v ecircumflex -15 2366 | KPX v edieresis -15 2367 | KPX v edotaccent -15 2368 | KPX v egrave -15 2369 | KPX v emacron -15 2370 | KPX v eogonek -15 2371 | KPX v o -20 2372 | KPX v oacute -20 2373 | KPX v ocircumflex -20 2374 | KPX v odieresis -20 2375 | KPX v ograve -20 2376 | KPX v ohungarumlaut -20 2377 | KPX v omacron -20 2378 | KPX v oslash -20 2379 | KPX v otilde -20 2380 | KPX v period -65 2381 | KPX w a -10 2382 | KPX w aacute -10 2383 | KPX w abreve -10 2384 | KPX w acircumflex -10 2385 | KPX w adieresis -10 2386 | KPX w agrave -10 2387 | KPX w amacron -10 2388 | KPX w aogonek -10 2389 | KPX w aring -10 2390 | KPX w atilde -10 2391 | KPX w comma -65 2392 | KPX w o -10 2393 | KPX w oacute -10 2394 | KPX w ocircumflex -10 2395 | KPX w odieresis -10 2396 | KPX w ograve -10 2397 | KPX w ohungarumlaut -10 2398 | KPX w omacron -10 2399 | KPX w oslash -10 2400 | KPX w otilde -10 2401 | KPX w period -65 2402 | KPX x e -15 2403 | KPX x eacute -15 2404 | KPX x ecaron -15 2405 | KPX x ecircumflex -15 2406 | KPX x edieresis -15 2407 | KPX x edotaccent -15 2408 | KPX x egrave -15 2409 | KPX x emacron -15 2410 | KPX x eogonek -15 2411 | KPX y comma -65 2412 | KPX y period -65 2413 | KPX yacute comma -65 2414 | KPX yacute period -65 2415 | KPX ydieresis comma -65 2416 | KPX ydieresis period -65 2417 | EndKernPairs 2418 | EndKernData 2419 | EndFontMetrics 2420 | -------------------------------------------------------------------------------- /afm.fs: -------------------------------------------------------------------------------- 1 | // Adobe Font Metrics 2 | // Copyright (C) 2016 Daniel Beer 3 | // 4 | // Permission to use, copy, modify, and/or distribute this software for any 5 | // purpose with or without fee is hereby granted, provided that the above 6 | // copyright notice and this permission notice appear in all copies. 7 | // 8 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 | // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 | // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 | 16 | module AFM 17 | 18 | open System 19 | open System.Collections.Generic 20 | 21 | exception ParseError of string 22 | 23 | let parseGlyphList (text : string) = 24 | let out = new Dictionary() 25 | for l in text.Split('\n') do 26 | let d = l.Trim() 27 | if d.Length > 0 && d.[0] <> '#' then 28 | let p = d.Split(';') 29 | if p.Length >= 2 then 30 | try 31 | out.[p.[0]] <- Convert.ToUInt32(p.[1], 16) 32 | with 33 | | :? FormatException | :? OverflowException -> () 34 | out 35 | 36 | let glyphCode (l : IDictionary) (n : string) = 37 | match l.TryGetValue(n) with 38 | | (false, _) -> raise (ParseError ("Bad glyph: " + n)) 39 | | (true, x) -> x 40 | 41 | type Metrics = { 42 | name: string 43 | ascender: int 44 | descender: int 45 | width: IDictionary 46 | kern: IDictionary } 47 | 48 | let private getIntSimple (text : string) = 49 | try 50 | Convert.ToInt32(text) 51 | with 52 | | :? FormatException | :? OverflowException -> 53 | raise (ParseError ("Bad integer: " + text)) 54 | 55 | let parseGlyphInfo (gl : IDictionary) 56 | (w : IDictionary) 57 | (text : string) = 58 | let mutable (wx : int option) = None 59 | let mutable (name : string option) = None 60 | for p in text.Split(';') do 61 | let pp = p.Trim() 62 | if pp.Length >= 3 && pp.[0] = 'W' && pp.[1] = 'X' && 63 | pp.[2] = ' ' then 64 | wx <- Some (getIntSimple pp.[3..]) 65 | elif pp.Length >= 2 && pp.[0] = 'N' && pp.[1] = ' ' then 66 | name <- Some pp.[2..] 67 | match (name, wx) with 68 | | (Some n, Some x) -> w.[glyphCode gl n] <- x 69 | | (Some n, None) -> raise (ParseError ("Missing width: " + n)) 70 | | (None, _) -> raise (ParseError ("Missing glyph name")) 71 | 72 | let parseAFM (gl : IDictionary) (text : string) = 73 | let mutable name = "" 74 | let mutable ascender = 0 75 | let mutable descender = 0 76 | let width = new Dictionary() 77 | let kern = new Dictionary() 78 | 79 | for l in text.Split('\n') do 80 | let d = l.Trim() 81 | let parts = d.Split(' ') 82 | if parts.Length >= 1 then 83 | if parts.[0] = "C" then 84 | parseGlyphInfo gl width d 85 | elif parts.[0] = "Ascender" then 86 | if parts.Length < 1 then 87 | raise (ParseError ("Bad ascender info: " + d)) 88 | ascender <- Convert.ToInt32(parts.[1]) 89 | elif parts.[0] = "Descender" then 90 | if parts.Length < 1 then 91 | raise (ParseError ("Bad ascender info: " + d)) 92 | descender <- Convert.ToInt32(parts.[1]) 93 | elif parts.[0] = "WX" then 94 | if parts.Length < 4 then 95 | raise (ParseError ("Bad kerning entry: " + d)) 96 | kern.[(glyphCode gl parts.[1], glyphCode gl parts.[2])] <- 97 | getIntSimple(parts.[3]) 98 | elif parts.[0] = "FontName" then 99 | if parts.Length < 2 then 100 | raise (ParseError "Missing font name") 101 | name <- parts.[1] 102 | { name = name; ascender = ascender; descender = descender; 103 | width = width; kern = kern } 104 | 105 | let measureChar (afm : Metrics) (ch : char) = 106 | match afm.width.TryGetValue(uint32 ch) with 107 | | (true, x) -> x 108 | | (false, _) -> 0 109 | 110 | let measureKern (afm : Metrics) (a : char) (b : char) = 111 | match afm.kern.TryGetValue((uint32 a, uint32 b)) with 112 | | (true, x) -> x 113 | | (false, _) -> 0 114 | 115 | let measureString (afm : Metrics) (text : string) = 116 | let mutable total = text |> Seq.map (measureChar afm) |> Seq.sum 117 | for i = 0 to text.Length - 2 do 118 | total <- total + measureKern afm text.[i] text.[i + 1] 119 | total 120 | 121 | let unitsPerPt = 1000 122 | -------------------------------------------------------------------------------- /example.fs: -------------------------------------------------------------------------------- 1 | // Simple PDF builder: example use 2 | // Copyright (C) 2017 Daniel Beer 3 | // 4 | // Permission to use, copy, modify, and/or distribute this software for any 5 | // purpose with or without fee is hereby granted, provided that the above 6 | // copyright notice and this permission notice appear in all copies. 7 | // 8 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 | // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 | // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 | 16 | open System 17 | open System.IO 18 | open System.Text 19 | open System.Collections.Generic 20 | 21 | type private Dummy = { x: int } 22 | 23 | let getRString name = 24 | use s = typeof.Assembly.GetManifestResourceStream(name) 25 | let c = Array.create (int s.Length) 0uy 26 | s.Read(c, 0, c.Length) |> ignore 27 | Encoding.UTF8.GetString(c) 28 | 29 | let glyphs = getRString "glyphlist.txt" |> AFM.parseGlyphList 30 | let timesRoman = getRString "Times-Roman.afm" |> AFM.parseAFM glyphs 31 | 32 | let getKey (k : string) (d : IDictionary) = 33 | match d.TryGetValue(k) with 34 | | (false, _) -> failwith ("Missing key: " + k) 35 | | (true, v) -> v 36 | 37 | let resolve (src : PDF.ObjectLoader) (v : PDF.Value) = 38 | match v with 39 | | PDF.Indirect i -> src.Load(i) 40 | | _ -> v 41 | 42 | let getDict (v : PDF.Value) = 43 | match v with 44 | | PDF.Dictionary d -> d 45 | | _ -> failwith "Expected dictionary" 46 | 47 | let getArray (v : PDF.Value) = 48 | match v with 49 | | PDF.Array a -> a 50 | | _ -> failwith "Expected array" 51 | 52 | let getStream (v : PDF.Value) = 53 | match v with 54 | | PDF.Stream (d, s) -> (d, s) 55 | | _ -> failwith "Expected stream" 56 | 57 | let page1ToForm (inputData : byte[]) 58 | (out : PDF.Buffer) (outX : PDF.XRefTable) = 59 | // Read XRefs and trailer, and set up an object loader 60 | let pdf = PDF.Scanner(inputData) 61 | let (xin, tin) = PDF.loadAllXRefs pdf 62 | let src = PDF.ObjectLoader(pdf, xin) 63 | 64 | // Descend the tree to find page 1. Note that PDFs may contain page 65 | // trees nested more than one level deep, which this doesn't take 66 | // account of. 67 | let root = tin |> getKey "Root" |> resolve src |> getDict 68 | let pages = root |> getKey "Pages" |> resolve src |> getDict 69 | let plist = pages |> getKey "Kids" |> resolve src |> getArray 70 | 71 | if plist.Length < 1 then 72 | failwith "No pages in template" 73 | 74 | let p1 = plist.[0] |> resolve src |> getDict 75 | let (contentDict, contentStream) = 76 | p1 |> getKey "Contents" |> resolve src |> getStream 77 | 78 | // Copy page 1 into our document as an XObject 79 | let copier = PDF.Copier(src, out, outX) 80 | let form = Dictionary() 81 | form.["Type"] <- PDF.Name "XObject" 82 | form.["Subtype"] <- PDF.Name "Form" 83 | form.["BBox"] <- copier.Translate(p1 |> getKey "MediaBox") 84 | match p1.TryGetValue("Resources") with 85 | | (false, _) -> form.["Resources"] <- PDF.Dictionary (dict []) 86 | | (true, res) -> form.["Resources"] <- copier.Translate(res) 87 | 88 | for kv in contentDict do 89 | if not (form.ContainsKey(kv.Key)) then 90 | form.[kv.Key] <- copier.Translate(kv.Value) 91 | 92 | // Extract object size 93 | let (xw, xh) = 94 | match form.["BBox"] |> getArray with 95 | | [| _; _; PDF.Number w; PDF.Number h |] -> (w, h) 96 | | _ -> failwith "Malformed BBox" 97 | 98 | // Copy the object to the new file 99 | let r = PDF.Stream (form, contentStream) |> PDF.allocIndirect out outX 100 | (r, (xw, xh)) 101 | 102 | let buildPage (width : float, height : float) 103 | (xw : float, xh : float) (caption : string) = 104 | let pageBuf = PDF.Buffer() 105 | 106 | // Decide on a scale factor 107 | let scale = min (xw / (width * 2.0)) (xh / (height * 2.0)) 108 | 109 | // Draw our XObject in the center of the page 110 | let ox = (width - xw * scale) * 0.5 111 | let oy = (height - xh * scale) * 0.5 112 | 113 | PDF.wKeyword pageBuf "q" 114 | [| scale; 0.0; 0.0; scale; ox; oy |] |> Array.iter (PDF.wNumber pageBuf) 115 | PDF.wKeyword pageBuf "cm" 116 | PDF.wName pageBuf "p1" 117 | PDF.wKeyword pageBuf "Do" 118 | PDF.wFreshLine pageBuf 119 | PDF.wKeyword pageBuf "Q" 120 | 121 | // Draw text at top 122 | let tps = 16.0 123 | let tw = float (AFM.measureString timesRoman caption) * 124 | tps / float AFM.unitsPerPt 125 | 126 | PDF.wKeyword pageBuf "BT" 127 | PDF.wName pageBuf "f1" 128 | PDF.wNumber pageBuf tps 129 | PDF.wKeyword pageBuf "Tf" 130 | [| 1.0; 0.0; 0.0; 1.0; ((width - tw) * 0.5); (height * 7.0 / 8.0) |] |> 131 | Array.iter (PDF.wNumber pageBuf) 132 | PDF.wKeyword pageBuf "Tm" 133 | PDF.wTextString pageBuf caption 134 | PDF.wKeyword pageBuf "Tj" 135 | PDF.wKeyword pageBuf "ET" 136 | 137 | // Draw outline 138 | PDF.wName pageBuf "DeviceRGB" 139 | PDF.wKeyword pageBuf "CS" 140 | [| 0.0; 0.0; 0.8 |] |> Array.iter (PDF.wNumber pageBuf) 141 | PDF.wKeyword pageBuf "SC" 142 | PDF.wNumber pageBuf ox 143 | PDF.wNumber pageBuf oy 144 | PDF.wKeyword pageBuf "m" 145 | [| (xw, 0.0); (xw, xh); (0.0, xh); (0.0, 0.0) |] |> Array.iter (fun (x, y) -> 146 | PDF.wNumber pageBuf (ox + x*scale) 147 | PDF.wNumber pageBuf (oy + y*scale) 148 | PDF.wKeyword pageBuf "l") 149 | PDF.wKeyword pageBuf "S" 150 | 151 | pageBuf 152 | 153 | let makeDoc (inputData : byte[]) (caption : string) = 154 | let (width, height) = (612.0, 792.0) 155 | 156 | // Set up the output document 157 | let out = PDF.Buffer() 158 | let outX = PDF.XRefTable() 159 | PDF.wHeader out "1.3" 160 | 161 | // Copy page 1 from source into this document as an XObject 162 | let (formRef, (xw, xh)) = page1ToForm inputData out outX 163 | 164 | // Allocate a placeholder for the page directory 165 | let pageDirRef = outX.Alloc() 166 | 167 | // Create a content stream 168 | let pageBuf = buildPage (width, height) (xw, xh) caption 169 | 170 | // Construct page 1 metadata 171 | let f1 = 172 | dict [ 173 | ("Type", PDF.Name "Font") 174 | ("Subtype", PDF.Name "Type1") 175 | ("Name", PDF.Name "f1") 176 | ("BaseFont", PDF.Name "Times-Roman") ] |> 177 | PDF.Dictionary |> PDF.allocIndirect out outX 178 | let procSet = [| "PDF"; "Text" |] |> Array.map PDF.Name 179 | let fonts = dict [("f1", PDF.Indirect f1)] 180 | let xobs = dict [("p1", PDF.Indirect formRef)] 181 | let res = 182 | dict [ 183 | ("ProcSet", PDF.Array procSet) 184 | ("Font", PDF.Dictionary fonts) 185 | ("XObject", PDF.Dictionary xobs)] 186 | let content = 187 | ((dict [("Length", PDF.Number (float pageBuf.Size))]), 188 | PDF.Scanner(pageBuf.Data, 0, pageBuf.Size)) |> 189 | PDF.Stream |> PDF.allocIndirect out outX 190 | let p1 = 191 | dict [ 192 | ("Type", PDF.Name "Page") 193 | ("Parent", PDF.Indirect pageDirRef) 194 | ("Contents", PDF.Indirect content) 195 | ("Resources", PDF.Dictionary res)] |> 196 | PDF.Dictionary |> PDF.allocIndirect out outX 197 | 198 | // Finalize page directory and the remaining structures 199 | let pageDir = 200 | dict [ 201 | ("Type", PDF.Name "Pages") 202 | ("Count", PDF.Number 1.0) 203 | ("MediaBox", [| 0.0; 0.0; width; height |] |> 204 | Array.map PDF.Number |> PDF.Array) 205 | ("Kids", [| PDF.Indirect p1 |] |> PDF.Array)] 206 | 207 | outX.Set(pageDirRef, out.Size) 208 | PDF.wIndirect out pageDirRef (PDF.Dictionary pageDir) 209 | 210 | let catalog = 211 | dict [ 212 | ("Type", PDF.Name "Catalog") 213 | ("Pages", PDF.Indirect pageDirRef)] |> 214 | PDF.Dictionary |> PDF.allocIndirect out outX 215 | 216 | let trailer = 217 | dict [ 218 | ("Root", PDF.Indirect catalog) 219 | ("Size", PDF.Number (float outX.Count)) ] 220 | 221 | PDF.wTrailer out outX trailer 222 | out.ToArray() 223 | 224 | [] 225 | let main args = 226 | if args.Length < 2 then 227 | Console.Error.WriteLine("Usage: example.exe ") 228 | 1 229 | else 230 | let input = File.ReadAllBytes(args.[0]) 231 | let output = makeDoc input args.[0] 232 | File.WriteAllBytes(args.[1], output) 233 | 0 234 | -------------------------------------------------------------------------------- /glyphlist.txt: -------------------------------------------------------------------------------- 1 | # ----------------------------------------------------------- 2 | # Copyright 2002, 2010, 2015 Adobe Systems Incorporated. 3 | # All rights reserved. 4 | # 5 | # Redistribution and use in source and binary forms, with or 6 | # without modification, are permitted provided that the 7 | # following conditions are met: 8 | # 9 | # Redistributions of source code must retain the above 10 | # copyright notice, this list of conditions and the following 11 | # disclaimer. 12 | # 13 | # Redistributions in binary form must reproduce the above 14 | # copyright notice, this list of conditions and the following 15 | # disclaimer in the documentation and/or other materials 16 | # provided with the distribution. 17 | # 18 | # Neither the name of Adobe Systems Incorporated nor the names 19 | # of its contributors may be used to endorse or promote 20 | # products derived from this software without specific prior 21 | # written permission. 22 | # 23 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 24 | # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 25 | # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 26 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 27 | # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 28 | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 29 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 30 | # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 31 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 32 | # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 34 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 35 | # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36 | # ----------------------------------------------------------- 37 | # Name: Adobe Glyph List 38 | # Table version: 2.0 39 | # Date: September 20, 2002 40 | # URL: https://github.com/adobe-type-tools/agl-aglfn 41 | # 42 | # Format: two semicolon-delimited fields: 43 | # (1) glyph name--upper/lowercase letters and digits 44 | # (2) Unicode scalar value--four uppercase hexadecimal digits 45 | # 46 | A;0041 47 | AE;00C6 48 | AEacute;01FC 49 | AEmacron;01E2 50 | AEsmall;F7E6 51 | Aacute;00C1 52 | Aacutesmall;F7E1 53 | Abreve;0102 54 | Abreveacute;1EAE 55 | Abrevecyrillic;04D0 56 | Abrevedotbelow;1EB6 57 | Abrevegrave;1EB0 58 | Abrevehookabove;1EB2 59 | Abrevetilde;1EB4 60 | Acaron;01CD 61 | Acircle;24B6 62 | Acircumflex;00C2 63 | Acircumflexacute;1EA4 64 | Acircumflexdotbelow;1EAC 65 | Acircumflexgrave;1EA6 66 | Acircumflexhookabove;1EA8 67 | Acircumflexsmall;F7E2 68 | Acircumflextilde;1EAA 69 | Acute;F6C9 70 | Acutesmall;F7B4 71 | Acyrillic;0410 72 | Adblgrave;0200 73 | Adieresis;00C4 74 | Adieresiscyrillic;04D2 75 | Adieresismacron;01DE 76 | Adieresissmall;F7E4 77 | Adotbelow;1EA0 78 | Adotmacron;01E0 79 | Agrave;00C0 80 | Agravesmall;F7E0 81 | Ahookabove;1EA2 82 | Aiecyrillic;04D4 83 | Ainvertedbreve;0202 84 | Alpha;0391 85 | Alphatonos;0386 86 | Amacron;0100 87 | Amonospace;FF21 88 | Aogonek;0104 89 | Aring;00C5 90 | Aringacute;01FA 91 | Aringbelow;1E00 92 | Aringsmall;F7E5 93 | Asmall;F761 94 | Atilde;00C3 95 | Atildesmall;F7E3 96 | Aybarmenian;0531 97 | B;0042 98 | Bcircle;24B7 99 | Bdotaccent;1E02 100 | Bdotbelow;1E04 101 | Becyrillic;0411 102 | Benarmenian;0532 103 | Beta;0392 104 | Bhook;0181 105 | Blinebelow;1E06 106 | Bmonospace;FF22 107 | Brevesmall;F6F4 108 | Bsmall;F762 109 | Btopbar;0182 110 | C;0043 111 | Caarmenian;053E 112 | Cacute;0106 113 | Caron;F6CA 114 | Caronsmall;F6F5 115 | Ccaron;010C 116 | Ccedilla;00C7 117 | Ccedillaacute;1E08 118 | Ccedillasmall;F7E7 119 | Ccircle;24B8 120 | Ccircumflex;0108 121 | Cdot;010A 122 | Cdotaccent;010A 123 | Cedillasmall;F7B8 124 | Chaarmenian;0549 125 | Cheabkhasiancyrillic;04BC 126 | Checyrillic;0427 127 | Chedescenderabkhasiancyrillic;04BE 128 | Chedescendercyrillic;04B6 129 | Chedieresiscyrillic;04F4 130 | Cheharmenian;0543 131 | Chekhakassiancyrillic;04CB 132 | Cheverticalstrokecyrillic;04B8 133 | Chi;03A7 134 | Chook;0187 135 | Circumflexsmall;F6F6 136 | Cmonospace;FF23 137 | Coarmenian;0551 138 | Csmall;F763 139 | D;0044 140 | DZ;01F1 141 | DZcaron;01C4 142 | Daarmenian;0534 143 | Dafrican;0189 144 | Dcaron;010E 145 | Dcedilla;1E10 146 | Dcircle;24B9 147 | Dcircumflexbelow;1E12 148 | Dcroat;0110 149 | Ddotaccent;1E0A 150 | Ddotbelow;1E0C 151 | Decyrillic;0414 152 | Deicoptic;03EE 153 | Delta;2206 154 | Deltagreek;0394 155 | Dhook;018A 156 | Dieresis;F6CB 157 | DieresisAcute;F6CC 158 | DieresisGrave;F6CD 159 | Dieresissmall;F7A8 160 | Digammagreek;03DC 161 | Djecyrillic;0402 162 | Dlinebelow;1E0E 163 | Dmonospace;FF24 164 | Dotaccentsmall;F6F7 165 | Dslash;0110 166 | Dsmall;F764 167 | Dtopbar;018B 168 | Dz;01F2 169 | Dzcaron;01C5 170 | Dzeabkhasiancyrillic;04E0 171 | Dzecyrillic;0405 172 | Dzhecyrillic;040F 173 | E;0045 174 | Eacute;00C9 175 | Eacutesmall;F7E9 176 | Ebreve;0114 177 | Ecaron;011A 178 | Ecedillabreve;1E1C 179 | Echarmenian;0535 180 | Ecircle;24BA 181 | Ecircumflex;00CA 182 | Ecircumflexacute;1EBE 183 | Ecircumflexbelow;1E18 184 | Ecircumflexdotbelow;1EC6 185 | Ecircumflexgrave;1EC0 186 | Ecircumflexhookabove;1EC2 187 | Ecircumflexsmall;F7EA 188 | Ecircumflextilde;1EC4 189 | Ecyrillic;0404 190 | Edblgrave;0204 191 | Edieresis;00CB 192 | Edieresissmall;F7EB 193 | Edot;0116 194 | Edotaccent;0116 195 | Edotbelow;1EB8 196 | Efcyrillic;0424 197 | Egrave;00C8 198 | Egravesmall;F7E8 199 | Eharmenian;0537 200 | Ehookabove;1EBA 201 | Eightroman;2167 202 | Einvertedbreve;0206 203 | Eiotifiedcyrillic;0464 204 | Elcyrillic;041B 205 | Elevenroman;216A 206 | Emacron;0112 207 | Emacronacute;1E16 208 | Emacrongrave;1E14 209 | Emcyrillic;041C 210 | Emonospace;FF25 211 | Encyrillic;041D 212 | Endescendercyrillic;04A2 213 | Eng;014A 214 | Enghecyrillic;04A4 215 | Enhookcyrillic;04C7 216 | Eogonek;0118 217 | Eopen;0190 218 | Epsilon;0395 219 | Epsilontonos;0388 220 | Ercyrillic;0420 221 | Ereversed;018E 222 | Ereversedcyrillic;042D 223 | Escyrillic;0421 224 | Esdescendercyrillic;04AA 225 | Esh;01A9 226 | Esmall;F765 227 | Eta;0397 228 | Etarmenian;0538 229 | Etatonos;0389 230 | Eth;00D0 231 | Ethsmall;F7F0 232 | Etilde;1EBC 233 | Etildebelow;1E1A 234 | Euro;20AC 235 | Ezh;01B7 236 | Ezhcaron;01EE 237 | Ezhreversed;01B8 238 | F;0046 239 | Fcircle;24BB 240 | Fdotaccent;1E1E 241 | Feharmenian;0556 242 | Feicoptic;03E4 243 | Fhook;0191 244 | Fitacyrillic;0472 245 | Fiveroman;2164 246 | Fmonospace;FF26 247 | Fourroman;2163 248 | Fsmall;F766 249 | G;0047 250 | GBsquare;3387 251 | Gacute;01F4 252 | Gamma;0393 253 | Gammaafrican;0194 254 | Gangiacoptic;03EA 255 | Gbreve;011E 256 | Gcaron;01E6 257 | Gcedilla;0122 258 | Gcircle;24BC 259 | Gcircumflex;011C 260 | Gcommaaccent;0122 261 | Gdot;0120 262 | Gdotaccent;0120 263 | Gecyrillic;0413 264 | Ghadarmenian;0542 265 | Ghemiddlehookcyrillic;0494 266 | Ghestrokecyrillic;0492 267 | Gheupturncyrillic;0490 268 | Ghook;0193 269 | Gimarmenian;0533 270 | Gjecyrillic;0403 271 | Gmacron;1E20 272 | Gmonospace;FF27 273 | Grave;F6CE 274 | Gravesmall;F760 275 | Gsmall;F767 276 | Gsmallhook;029B 277 | Gstroke;01E4 278 | H;0048 279 | H18533;25CF 280 | H18543;25AA 281 | H18551;25AB 282 | H22073;25A1 283 | HPsquare;33CB 284 | Haabkhasiancyrillic;04A8 285 | Hadescendercyrillic;04B2 286 | Hardsigncyrillic;042A 287 | Hbar;0126 288 | Hbrevebelow;1E2A 289 | Hcedilla;1E28 290 | Hcircle;24BD 291 | Hcircumflex;0124 292 | Hdieresis;1E26 293 | Hdotaccent;1E22 294 | Hdotbelow;1E24 295 | Hmonospace;FF28 296 | Hoarmenian;0540 297 | Horicoptic;03E8 298 | Hsmall;F768 299 | Hungarumlaut;F6CF 300 | Hungarumlautsmall;F6F8 301 | Hzsquare;3390 302 | I;0049 303 | IAcyrillic;042F 304 | IJ;0132 305 | IUcyrillic;042E 306 | Iacute;00CD 307 | Iacutesmall;F7ED 308 | Ibreve;012C 309 | Icaron;01CF 310 | Icircle;24BE 311 | Icircumflex;00CE 312 | Icircumflexsmall;F7EE 313 | Icyrillic;0406 314 | Idblgrave;0208 315 | Idieresis;00CF 316 | Idieresisacute;1E2E 317 | Idieresiscyrillic;04E4 318 | Idieresissmall;F7EF 319 | Idot;0130 320 | Idotaccent;0130 321 | Idotbelow;1ECA 322 | Iebrevecyrillic;04D6 323 | Iecyrillic;0415 324 | Ifraktur;2111 325 | Igrave;00CC 326 | Igravesmall;F7EC 327 | Ihookabove;1EC8 328 | Iicyrillic;0418 329 | Iinvertedbreve;020A 330 | Iishortcyrillic;0419 331 | Imacron;012A 332 | Imacroncyrillic;04E2 333 | Imonospace;FF29 334 | Iniarmenian;053B 335 | Iocyrillic;0401 336 | Iogonek;012E 337 | Iota;0399 338 | Iotaafrican;0196 339 | Iotadieresis;03AA 340 | Iotatonos;038A 341 | Ismall;F769 342 | Istroke;0197 343 | Itilde;0128 344 | Itildebelow;1E2C 345 | Izhitsacyrillic;0474 346 | Izhitsadblgravecyrillic;0476 347 | J;004A 348 | Jaarmenian;0541 349 | Jcircle;24BF 350 | Jcircumflex;0134 351 | Jecyrillic;0408 352 | Jheharmenian;054B 353 | Jmonospace;FF2A 354 | Jsmall;F76A 355 | K;004B 356 | KBsquare;3385 357 | KKsquare;33CD 358 | Kabashkircyrillic;04A0 359 | Kacute;1E30 360 | Kacyrillic;041A 361 | Kadescendercyrillic;049A 362 | Kahookcyrillic;04C3 363 | Kappa;039A 364 | Kastrokecyrillic;049E 365 | Kaverticalstrokecyrillic;049C 366 | Kcaron;01E8 367 | Kcedilla;0136 368 | Kcircle;24C0 369 | Kcommaaccent;0136 370 | Kdotbelow;1E32 371 | Keharmenian;0554 372 | Kenarmenian;053F 373 | Khacyrillic;0425 374 | Kheicoptic;03E6 375 | Khook;0198 376 | Kjecyrillic;040C 377 | Klinebelow;1E34 378 | Kmonospace;FF2B 379 | Koppacyrillic;0480 380 | Koppagreek;03DE 381 | Ksicyrillic;046E 382 | Ksmall;F76B 383 | L;004C 384 | LJ;01C7 385 | LL;F6BF 386 | Lacute;0139 387 | Lambda;039B 388 | Lcaron;013D 389 | Lcedilla;013B 390 | Lcircle;24C1 391 | Lcircumflexbelow;1E3C 392 | Lcommaaccent;013B 393 | Ldot;013F 394 | Ldotaccent;013F 395 | Ldotbelow;1E36 396 | Ldotbelowmacron;1E38 397 | Liwnarmenian;053C 398 | Lj;01C8 399 | Ljecyrillic;0409 400 | Llinebelow;1E3A 401 | Lmonospace;FF2C 402 | Lslash;0141 403 | Lslashsmall;F6F9 404 | Lsmall;F76C 405 | M;004D 406 | MBsquare;3386 407 | Macron;F6D0 408 | Macronsmall;F7AF 409 | Macute;1E3E 410 | Mcircle;24C2 411 | Mdotaccent;1E40 412 | Mdotbelow;1E42 413 | Menarmenian;0544 414 | Mmonospace;FF2D 415 | Msmall;F76D 416 | Mturned;019C 417 | Mu;039C 418 | N;004E 419 | NJ;01CA 420 | Nacute;0143 421 | Ncaron;0147 422 | Ncedilla;0145 423 | Ncircle;24C3 424 | Ncircumflexbelow;1E4A 425 | Ncommaaccent;0145 426 | Ndotaccent;1E44 427 | Ndotbelow;1E46 428 | Nhookleft;019D 429 | Nineroman;2168 430 | Nj;01CB 431 | Njecyrillic;040A 432 | Nlinebelow;1E48 433 | Nmonospace;FF2E 434 | Nowarmenian;0546 435 | Nsmall;F76E 436 | Ntilde;00D1 437 | Ntildesmall;F7F1 438 | Nu;039D 439 | O;004F 440 | OE;0152 441 | OEsmall;F6FA 442 | Oacute;00D3 443 | Oacutesmall;F7F3 444 | Obarredcyrillic;04E8 445 | Obarreddieresiscyrillic;04EA 446 | Obreve;014E 447 | Ocaron;01D1 448 | Ocenteredtilde;019F 449 | Ocircle;24C4 450 | Ocircumflex;00D4 451 | Ocircumflexacute;1ED0 452 | Ocircumflexdotbelow;1ED8 453 | Ocircumflexgrave;1ED2 454 | Ocircumflexhookabove;1ED4 455 | Ocircumflexsmall;F7F4 456 | Ocircumflextilde;1ED6 457 | Ocyrillic;041E 458 | Odblacute;0150 459 | Odblgrave;020C 460 | Odieresis;00D6 461 | Odieresiscyrillic;04E6 462 | Odieresissmall;F7F6 463 | Odotbelow;1ECC 464 | Ogoneksmall;F6FB 465 | Ograve;00D2 466 | Ogravesmall;F7F2 467 | Oharmenian;0555 468 | Ohm;2126 469 | Ohookabove;1ECE 470 | Ohorn;01A0 471 | Ohornacute;1EDA 472 | Ohorndotbelow;1EE2 473 | Ohorngrave;1EDC 474 | Ohornhookabove;1EDE 475 | Ohorntilde;1EE0 476 | Ohungarumlaut;0150 477 | Oi;01A2 478 | Oinvertedbreve;020E 479 | Omacron;014C 480 | Omacronacute;1E52 481 | Omacrongrave;1E50 482 | Omega;2126 483 | Omegacyrillic;0460 484 | Omegagreek;03A9 485 | Omegaroundcyrillic;047A 486 | Omegatitlocyrillic;047C 487 | Omegatonos;038F 488 | Omicron;039F 489 | Omicrontonos;038C 490 | Omonospace;FF2F 491 | Oneroman;2160 492 | Oogonek;01EA 493 | Oogonekmacron;01EC 494 | Oopen;0186 495 | Oslash;00D8 496 | Oslashacute;01FE 497 | Oslashsmall;F7F8 498 | Osmall;F76F 499 | Ostrokeacute;01FE 500 | Otcyrillic;047E 501 | Otilde;00D5 502 | Otildeacute;1E4C 503 | Otildedieresis;1E4E 504 | Otildesmall;F7F5 505 | P;0050 506 | Pacute;1E54 507 | Pcircle;24C5 508 | Pdotaccent;1E56 509 | Pecyrillic;041F 510 | Peharmenian;054A 511 | Pemiddlehookcyrillic;04A6 512 | Phi;03A6 513 | Phook;01A4 514 | Pi;03A0 515 | Piwrarmenian;0553 516 | Pmonospace;FF30 517 | Psi;03A8 518 | Psicyrillic;0470 519 | Psmall;F770 520 | Q;0051 521 | Qcircle;24C6 522 | Qmonospace;FF31 523 | Qsmall;F771 524 | R;0052 525 | Raarmenian;054C 526 | Racute;0154 527 | Rcaron;0158 528 | Rcedilla;0156 529 | Rcircle;24C7 530 | Rcommaaccent;0156 531 | Rdblgrave;0210 532 | Rdotaccent;1E58 533 | Rdotbelow;1E5A 534 | Rdotbelowmacron;1E5C 535 | Reharmenian;0550 536 | Rfraktur;211C 537 | Rho;03A1 538 | Ringsmall;F6FC 539 | Rinvertedbreve;0212 540 | Rlinebelow;1E5E 541 | Rmonospace;FF32 542 | Rsmall;F772 543 | Rsmallinverted;0281 544 | Rsmallinvertedsuperior;02B6 545 | S;0053 546 | SF010000;250C 547 | SF020000;2514 548 | SF030000;2510 549 | SF040000;2518 550 | SF050000;253C 551 | SF060000;252C 552 | SF070000;2534 553 | SF080000;251C 554 | SF090000;2524 555 | SF100000;2500 556 | SF110000;2502 557 | SF190000;2561 558 | SF200000;2562 559 | SF210000;2556 560 | SF220000;2555 561 | SF230000;2563 562 | SF240000;2551 563 | SF250000;2557 564 | SF260000;255D 565 | SF270000;255C 566 | SF280000;255B 567 | SF360000;255E 568 | SF370000;255F 569 | SF380000;255A 570 | SF390000;2554 571 | SF400000;2569 572 | SF410000;2566 573 | SF420000;2560 574 | SF430000;2550 575 | SF440000;256C 576 | SF450000;2567 577 | SF460000;2568 578 | SF470000;2564 579 | SF480000;2565 580 | SF490000;2559 581 | SF500000;2558 582 | SF510000;2552 583 | SF520000;2553 584 | SF530000;256B 585 | SF540000;256A 586 | Sacute;015A 587 | Sacutedotaccent;1E64 588 | Sampigreek;03E0 589 | Scaron;0160 590 | Scarondotaccent;1E66 591 | Scaronsmall;F6FD 592 | Scedilla;015E 593 | Schwa;018F 594 | Schwacyrillic;04D8 595 | Schwadieresiscyrillic;04DA 596 | Scircle;24C8 597 | Scircumflex;015C 598 | Scommaaccent;0218 599 | Sdotaccent;1E60 600 | Sdotbelow;1E62 601 | Sdotbelowdotaccent;1E68 602 | Seharmenian;054D 603 | Sevenroman;2166 604 | Shaarmenian;0547 605 | Shacyrillic;0428 606 | Shchacyrillic;0429 607 | Sheicoptic;03E2 608 | Shhacyrillic;04BA 609 | Shimacoptic;03EC 610 | Sigma;03A3 611 | Sixroman;2165 612 | Smonospace;FF33 613 | Softsigncyrillic;042C 614 | Ssmall;F773 615 | Stigmagreek;03DA 616 | T;0054 617 | Tau;03A4 618 | Tbar;0166 619 | Tcaron;0164 620 | Tcedilla;0162 621 | Tcircle;24C9 622 | Tcircumflexbelow;1E70 623 | Tcommaaccent;0162 624 | Tdotaccent;1E6A 625 | Tdotbelow;1E6C 626 | Tecyrillic;0422 627 | Tedescendercyrillic;04AC 628 | Tenroman;2169 629 | Tetsecyrillic;04B4 630 | Theta;0398 631 | Thook;01AC 632 | Thorn;00DE 633 | Thornsmall;F7FE 634 | Threeroman;2162 635 | Tildesmall;F6FE 636 | Tiwnarmenian;054F 637 | Tlinebelow;1E6E 638 | Tmonospace;FF34 639 | Toarmenian;0539 640 | Tonefive;01BC 641 | Tonesix;0184 642 | Tonetwo;01A7 643 | Tretroflexhook;01AE 644 | Tsecyrillic;0426 645 | Tshecyrillic;040B 646 | Tsmall;F774 647 | Twelveroman;216B 648 | Tworoman;2161 649 | U;0055 650 | Uacute;00DA 651 | Uacutesmall;F7FA 652 | Ubreve;016C 653 | Ucaron;01D3 654 | Ucircle;24CA 655 | Ucircumflex;00DB 656 | Ucircumflexbelow;1E76 657 | Ucircumflexsmall;F7FB 658 | Ucyrillic;0423 659 | Udblacute;0170 660 | Udblgrave;0214 661 | Udieresis;00DC 662 | Udieresisacute;01D7 663 | Udieresisbelow;1E72 664 | Udieresiscaron;01D9 665 | Udieresiscyrillic;04F0 666 | Udieresisgrave;01DB 667 | Udieresismacron;01D5 668 | Udieresissmall;F7FC 669 | Udotbelow;1EE4 670 | Ugrave;00D9 671 | Ugravesmall;F7F9 672 | Uhookabove;1EE6 673 | Uhorn;01AF 674 | Uhornacute;1EE8 675 | Uhorndotbelow;1EF0 676 | Uhorngrave;1EEA 677 | Uhornhookabove;1EEC 678 | Uhorntilde;1EEE 679 | Uhungarumlaut;0170 680 | Uhungarumlautcyrillic;04F2 681 | Uinvertedbreve;0216 682 | Ukcyrillic;0478 683 | Umacron;016A 684 | Umacroncyrillic;04EE 685 | Umacrondieresis;1E7A 686 | Umonospace;FF35 687 | Uogonek;0172 688 | Upsilon;03A5 689 | Upsilon1;03D2 690 | Upsilonacutehooksymbolgreek;03D3 691 | Upsilonafrican;01B1 692 | Upsilondieresis;03AB 693 | Upsilondieresishooksymbolgreek;03D4 694 | Upsilonhooksymbol;03D2 695 | Upsilontonos;038E 696 | Uring;016E 697 | Ushortcyrillic;040E 698 | Usmall;F775 699 | Ustraightcyrillic;04AE 700 | Ustraightstrokecyrillic;04B0 701 | Utilde;0168 702 | Utildeacute;1E78 703 | Utildebelow;1E74 704 | V;0056 705 | Vcircle;24CB 706 | Vdotbelow;1E7E 707 | Vecyrillic;0412 708 | Vewarmenian;054E 709 | Vhook;01B2 710 | Vmonospace;FF36 711 | Voarmenian;0548 712 | Vsmall;F776 713 | Vtilde;1E7C 714 | W;0057 715 | Wacute;1E82 716 | Wcircle;24CC 717 | Wcircumflex;0174 718 | Wdieresis;1E84 719 | Wdotaccent;1E86 720 | Wdotbelow;1E88 721 | Wgrave;1E80 722 | Wmonospace;FF37 723 | Wsmall;F777 724 | X;0058 725 | Xcircle;24CD 726 | Xdieresis;1E8C 727 | Xdotaccent;1E8A 728 | Xeharmenian;053D 729 | Xi;039E 730 | Xmonospace;FF38 731 | Xsmall;F778 732 | Y;0059 733 | Yacute;00DD 734 | Yacutesmall;F7FD 735 | Yatcyrillic;0462 736 | Ycircle;24CE 737 | Ycircumflex;0176 738 | Ydieresis;0178 739 | Ydieresissmall;F7FF 740 | Ydotaccent;1E8E 741 | Ydotbelow;1EF4 742 | Yericyrillic;042B 743 | Yerudieresiscyrillic;04F8 744 | Ygrave;1EF2 745 | Yhook;01B3 746 | Yhookabove;1EF6 747 | Yiarmenian;0545 748 | Yicyrillic;0407 749 | Yiwnarmenian;0552 750 | Ymonospace;FF39 751 | Ysmall;F779 752 | Ytilde;1EF8 753 | Yusbigcyrillic;046A 754 | Yusbigiotifiedcyrillic;046C 755 | Yuslittlecyrillic;0466 756 | Yuslittleiotifiedcyrillic;0468 757 | Z;005A 758 | Zaarmenian;0536 759 | Zacute;0179 760 | Zcaron;017D 761 | Zcaronsmall;F6FF 762 | Zcircle;24CF 763 | Zcircumflex;1E90 764 | Zdot;017B 765 | Zdotaccent;017B 766 | Zdotbelow;1E92 767 | Zecyrillic;0417 768 | Zedescendercyrillic;0498 769 | Zedieresiscyrillic;04DE 770 | Zeta;0396 771 | Zhearmenian;053A 772 | Zhebrevecyrillic;04C1 773 | Zhecyrillic;0416 774 | Zhedescendercyrillic;0496 775 | Zhedieresiscyrillic;04DC 776 | Zlinebelow;1E94 777 | Zmonospace;FF3A 778 | Zsmall;F77A 779 | Zstroke;01B5 780 | a;0061 781 | aabengali;0986 782 | aacute;00E1 783 | aadeva;0906 784 | aagujarati;0A86 785 | aagurmukhi;0A06 786 | aamatragurmukhi;0A3E 787 | aarusquare;3303 788 | aavowelsignbengali;09BE 789 | aavowelsigndeva;093E 790 | aavowelsigngujarati;0ABE 791 | abbreviationmarkarmenian;055F 792 | abbreviationsigndeva;0970 793 | abengali;0985 794 | abopomofo;311A 795 | abreve;0103 796 | abreveacute;1EAF 797 | abrevecyrillic;04D1 798 | abrevedotbelow;1EB7 799 | abrevegrave;1EB1 800 | abrevehookabove;1EB3 801 | abrevetilde;1EB5 802 | acaron;01CE 803 | acircle;24D0 804 | acircumflex;00E2 805 | acircumflexacute;1EA5 806 | acircumflexdotbelow;1EAD 807 | acircumflexgrave;1EA7 808 | acircumflexhookabove;1EA9 809 | acircumflextilde;1EAB 810 | acute;00B4 811 | acutebelowcmb;0317 812 | acutecmb;0301 813 | acutecomb;0301 814 | acutedeva;0954 815 | acutelowmod;02CF 816 | acutetonecmb;0341 817 | acyrillic;0430 818 | adblgrave;0201 819 | addakgurmukhi;0A71 820 | adeva;0905 821 | adieresis;00E4 822 | adieresiscyrillic;04D3 823 | adieresismacron;01DF 824 | adotbelow;1EA1 825 | adotmacron;01E1 826 | ae;00E6 827 | aeacute;01FD 828 | aekorean;3150 829 | aemacron;01E3 830 | afii00208;2015 831 | afii08941;20A4 832 | afii10017;0410 833 | afii10018;0411 834 | afii10019;0412 835 | afii10020;0413 836 | afii10021;0414 837 | afii10022;0415 838 | afii10023;0401 839 | afii10024;0416 840 | afii10025;0417 841 | afii10026;0418 842 | afii10027;0419 843 | afii10028;041A 844 | afii10029;041B 845 | afii10030;041C 846 | afii10031;041D 847 | afii10032;041E 848 | afii10033;041F 849 | afii10034;0420 850 | afii10035;0421 851 | afii10036;0422 852 | afii10037;0423 853 | afii10038;0424 854 | afii10039;0425 855 | afii10040;0426 856 | afii10041;0427 857 | afii10042;0428 858 | afii10043;0429 859 | afii10044;042A 860 | afii10045;042B 861 | afii10046;042C 862 | afii10047;042D 863 | afii10048;042E 864 | afii10049;042F 865 | afii10050;0490 866 | afii10051;0402 867 | afii10052;0403 868 | afii10053;0404 869 | afii10054;0405 870 | afii10055;0406 871 | afii10056;0407 872 | afii10057;0408 873 | afii10058;0409 874 | afii10059;040A 875 | afii10060;040B 876 | afii10061;040C 877 | afii10062;040E 878 | afii10063;F6C4 879 | afii10064;F6C5 880 | afii10065;0430 881 | afii10066;0431 882 | afii10067;0432 883 | afii10068;0433 884 | afii10069;0434 885 | afii10070;0435 886 | afii10071;0451 887 | afii10072;0436 888 | afii10073;0437 889 | afii10074;0438 890 | afii10075;0439 891 | afii10076;043A 892 | afii10077;043B 893 | afii10078;043C 894 | afii10079;043D 895 | afii10080;043E 896 | afii10081;043F 897 | afii10082;0440 898 | afii10083;0441 899 | afii10084;0442 900 | afii10085;0443 901 | afii10086;0444 902 | afii10087;0445 903 | afii10088;0446 904 | afii10089;0447 905 | afii10090;0448 906 | afii10091;0449 907 | afii10092;044A 908 | afii10093;044B 909 | afii10094;044C 910 | afii10095;044D 911 | afii10096;044E 912 | afii10097;044F 913 | afii10098;0491 914 | afii10099;0452 915 | afii10100;0453 916 | afii10101;0454 917 | afii10102;0455 918 | afii10103;0456 919 | afii10104;0457 920 | afii10105;0458 921 | afii10106;0459 922 | afii10107;045A 923 | afii10108;045B 924 | afii10109;045C 925 | afii10110;045E 926 | afii10145;040F 927 | afii10146;0462 928 | afii10147;0472 929 | afii10148;0474 930 | afii10192;F6C6 931 | afii10193;045F 932 | afii10194;0463 933 | afii10195;0473 934 | afii10196;0475 935 | afii10831;F6C7 936 | afii10832;F6C8 937 | afii10846;04D9 938 | afii299;200E 939 | afii300;200F 940 | afii301;200D 941 | afii57381;066A 942 | afii57388;060C 943 | afii57392;0660 944 | afii57393;0661 945 | afii57394;0662 946 | afii57395;0663 947 | afii57396;0664 948 | afii57397;0665 949 | afii57398;0666 950 | afii57399;0667 951 | afii57400;0668 952 | afii57401;0669 953 | afii57403;061B 954 | afii57407;061F 955 | afii57409;0621 956 | afii57410;0622 957 | afii57411;0623 958 | afii57412;0624 959 | afii57413;0625 960 | afii57414;0626 961 | afii57415;0627 962 | afii57416;0628 963 | afii57417;0629 964 | afii57418;062A 965 | afii57419;062B 966 | afii57420;062C 967 | afii57421;062D 968 | afii57422;062E 969 | afii57423;062F 970 | afii57424;0630 971 | afii57425;0631 972 | afii57426;0632 973 | afii57427;0633 974 | afii57428;0634 975 | afii57429;0635 976 | afii57430;0636 977 | afii57431;0637 978 | afii57432;0638 979 | afii57433;0639 980 | afii57434;063A 981 | afii57440;0640 982 | afii57441;0641 983 | afii57442;0642 984 | afii57443;0643 985 | afii57444;0644 986 | afii57445;0645 987 | afii57446;0646 988 | afii57448;0648 989 | afii57449;0649 990 | afii57450;064A 991 | afii57451;064B 992 | afii57452;064C 993 | afii57453;064D 994 | afii57454;064E 995 | afii57455;064F 996 | afii57456;0650 997 | afii57457;0651 998 | afii57458;0652 999 | afii57470;0647 1000 | afii57505;06A4 1001 | afii57506;067E 1002 | afii57507;0686 1003 | afii57508;0698 1004 | afii57509;06AF 1005 | afii57511;0679 1006 | afii57512;0688 1007 | afii57513;0691 1008 | afii57514;06BA 1009 | afii57519;06D2 1010 | afii57534;06D5 1011 | afii57636;20AA 1012 | afii57645;05BE 1013 | afii57658;05C3 1014 | afii57664;05D0 1015 | afii57665;05D1 1016 | afii57666;05D2 1017 | afii57667;05D3 1018 | afii57668;05D4 1019 | afii57669;05D5 1020 | afii57670;05D6 1021 | afii57671;05D7 1022 | afii57672;05D8 1023 | afii57673;05D9 1024 | afii57674;05DA 1025 | afii57675;05DB 1026 | afii57676;05DC 1027 | afii57677;05DD 1028 | afii57678;05DE 1029 | afii57679;05DF 1030 | afii57680;05E0 1031 | afii57681;05E1 1032 | afii57682;05E2 1033 | afii57683;05E3 1034 | afii57684;05E4 1035 | afii57685;05E5 1036 | afii57686;05E6 1037 | afii57687;05E7 1038 | afii57688;05E8 1039 | afii57689;05E9 1040 | afii57690;05EA 1041 | afii57694;FB2A 1042 | afii57695;FB2B 1043 | afii57700;FB4B 1044 | afii57705;FB1F 1045 | afii57716;05F0 1046 | afii57717;05F1 1047 | afii57718;05F2 1048 | afii57723;FB35 1049 | afii57793;05B4 1050 | afii57794;05B5 1051 | afii57795;05B6 1052 | afii57796;05BB 1053 | afii57797;05B8 1054 | afii57798;05B7 1055 | afii57799;05B0 1056 | afii57800;05B2 1057 | afii57801;05B1 1058 | afii57802;05B3 1059 | afii57803;05C2 1060 | afii57804;05C1 1061 | afii57806;05B9 1062 | afii57807;05BC 1063 | afii57839;05BD 1064 | afii57841;05BF 1065 | afii57842;05C0 1066 | afii57929;02BC 1067 | afii61248;2105 1068 | afii61289;2113 1069 | afii61352;2116 1070 | afii61573;202C 1071 | afii61574;202D 1072 | afii61575;202E 1073 | afii61664;200C 1074 | afii63167;066D 1075 | afii64937;02BD 1076 | agrave;00E0 1077 | agujarati;0A85 1078 | agurmukhi;0A05 1079 | ahiragana;3042 1080 | ahookabove;1EA3 1081 | aibengali;0990 1082 | aibopomofo;311E 1083 | aideva;0910 1084 | aiecyrillic;04D5 1085 | aigujarati;0A90 1086 | aigurmukhi;0A10 1087 | aimatragurmukhi;0A48 1088 | ainarabic;0639 1089 | ainfinalarabic;FECA 1090 | aininitialarabic;FECB 1091 | ainmedialarabic;FECC 1092 | ainvertedbreve;0203 1093 | aivowelsignbengali;09C8 1094 | aivowelsigndeva;0948 1095 | aivowelsigngujarati;0AC8 1096 | akatakana;30A2 1097 | akatakanahalfwidth;FF71 1098 | akorean;314F 1099 | alef;05D0 1100 | alefarabic;0627 1101 | alefdageshhebrew;FB30 1102 | aleffinalarabic;FE8E 1103 | alefhamzaabovearabic;0623 1104 | alefhamzaabovefinalarabic;FE84 1105 | alefhamzabelowarabic;0625 1106 | alefhamzabelowfinalarabic;FE88 1107 | alefhebrew;05D0 1108 | aleflamedhebrew;FB4F 1109 | alefmaddaabovearabic;0622 1110 | alefmaddaabovefinalarabic;FE82 1111 | alefmaksuraarabic;0649 1112 | alefmaksurafinalarabic;FEF0 1113 | alefmaksurainitialarabic;FEF3 1114 | alefmaksuramedialarabic;FEF4 1115 | alefpatahhebrew;FB2E 1116 | alefqamatshebrew;FB2F 1117 | aleph;2135 1118 | allequal;224C 1119 | alpha;03B1 1120 | alphatonos;03AC 1121 | amacron;0101 1122 | amonospace;FF41 1123 | ampersand;0026 1124 | ampersandmonospace;FF06 1125 | ampersandsmall;F726 1126 | amsquare;33C2 1127 | anbopomofo;3122 1128 | angbopomofo;3124 1129 | angkhankhuthai;0E5A 1130 | angle;2220 1131 | anglebracketleft;3008 1132 | anglebracketleftvertical;FE3F 1133 | anglebracketright;3009 1134 | anglebracketrightvertical;FE40 1135 | angleleft;2329 1136 | angleright;232A 1137 | angstrom;212B 1138 | anoteleia;0387 1139 | anudattadeva;0952 1140 | anusvarabengali;0982 1141 | anusvaradeva;0902 1142 | anusvaragujarati;0A82 1143 | aogonek;0105 1144 | apaatosquare;3300 1145 | aparen;249C 1146 | apostrophearmenian;055A 1147 | apostrophemod;02BC 1148 | apple;F8FF 1149 | approaches;2250 1150 | approxequal;2248 1151 | approxequalorimage;2252 1152 | approximatelyequal;2245 1153 | araeaekorean;318E 1154 | araeakorean;318D 1155 | arc;2312 1156 | arighthalfring;1E9A 1157 | aring;00E5 1158 | aringacute;01FB 1159 | aringbelow;1E01 1160 | arrowboth;2194 1161 | arrowdashdown;21E3 1162 | arrowdashleft;21E0 1163 | arrowdashright;21E2 1164 | arrowdashup;21E1 1165 | arrowdblboth;21D4 1166 | arrowdbldown;21D3 1167 | arrowdblleft;21D0 1168 | arrowdblright;21D2 1169 | arrowdblup;21D1 1170 | arrowdown;2193 1171 | arrowdownleft;2199 1172 | arrowdownright;2198 1173 | arrowdownwhite;21E9 1174 | arrowheaddownmod;02C5 1175 | arrowheadleftmod;02C2 1176 | arrowheadrightmod;02C3 1177 | arrowheadupmod;02C4 1178 | arrowhorizex;F8E7 1179 | arrowleft;2190 1180 | arrowleftdbl;21D0 1181 | arrowleftdblstroke;21CD 1182 | arrowleftoverright;21C6 1183 | arrowleftwhite;21E6 1184 | arrowright;2192 1185 | arrowrightdblstroke;21CF 1186 | arrowrightheavy;279E 1187 | arrowrightoverleft;21C4 1188 | arrowrightwhite;21E8 1189 | arrowtableft;21E4 1190 | arrowtabright;21E5 1191 | arrowup;2191 1192 | arrowupdn;2195 1193 | arrowupdnbse;21A8 1194 | arrowupdownbase;21A8 1195 | arrowupleft;2196 1196 | arrowupleftofdown;21C5 1197 | arrowupright;2197 1198 | arrowupwhite;21E7 1199 | arrowvertex;F8E6 1200 | asciicircum;005E 1201 | asciicircummonospace;FF3E 1202 | asciitilde;007E 1203 | asciitildemonospace;FF5E 1204 | ascript;0251 1205 | ascriptturned;0252 1206 | asmallhiragana;3041 1207 | asmallkatakana;30A1 1208 | asmallkatakanahalfwidth;FF67 1209 | asterisk;002A 1210 | asteriskaltonearabic;066D 1211 | asteriskarabic;066D 1212 | asteriskmath;2217 1213 | asteriskmonospace;FF0A 1214 | asterisksmall;FE61 1215 | asterism;2042 1216 | asuperior;F6E9 1217 | asymptoticallyequal;2243 1218 | at;0040 1219 | atilde;00E3 1220 | atmonospace;FF20 1221 | atsmall;FE6B 1222 | aturned;0250 1223 | aubengali;0994 1224 | aubopomofo;3120 1225 | audeva;0914 1226 | augujarati;0A94 1227 | augurmukhi;0A14 1228 | aulengthmarkbengali;09D7 1229 | aumatragurmukhi;0A4C 1230 | auvowelsignbengali;09CC 1231 | auvowelsigndeva;094C 1232 | auvowelsigngujarati;0ACC 1233 | avagrahadeva;093D 1234 | aybarmenian;0561 1235 | ayin;05E2 1236 | ayinaltonehebrew;FB20 1237 | ayinhebrew;05E2 1238 | b;0062 1239 | babengali;09AC 1240 | backslash;005C 1241 | backslashmonospace;FF3C 1242 | badeva;092C 1243 | bagujarati;0AAC 1244 | bagurmukhi;0A2C 1245 | bahiragana;3070 1246 | bahtthai;0E3F 1247 | bakatakana;30D0 1248 | bar;007C 1249 | barmonospace;FF5C 1250 | bbopomofo;3105 1251 | bcircle;24D1 1252 | bdotaccent;1E03 1253 | bdotbelow;1E05 1254 | beamedsixteenthnotes;266C 1255 | because;2235 1256 | becyrillic;0431 1257 | beharabic;0628 1258 | behfinalarabic;FE90 1259 | behinitialarabic;FE91 1260 | behiragana;3079 1261 | behmedialarabic;FE92 1262 | behmeeminitialarabic;FC9F 1263 | behmeemisolatedarabic;FC08 1264 | behnoonfinalarabic;FC6D 1265 | bekatakana;30D9 1266 | benarmenian;0562 1267 | bet;05D1 1268 | beta;03B2 1269 | betasymbolgreek;03D0 1270 | betdagesh;FB31 1271 | betdageshhebrew;FB31 1272 | bethebrew;05D1 1273 | betrafehebrew;FB4C 1274 | bhabengali;09AD 1275 | bhadeva;092D 1276 | bhagujarati;0AAD 1277 | bhagurmukhi;0A2D 1278 | bhook;0253 1279 | bihiragana;3073 1280 | bikatakana;30D3 1281 | bilabialclick;0298 1282 | bindigurmukhi;0A02 1283 | birusquare;3331 1284 | blackcircle;25CF 1285 | blackdiamond;25C6 1286 | blackdownpointingtriangle;25BC 1287 | blackleftpointingpointer;25C4 1288 | blackleftpointingtriangle;25C0 1289 | blacklenticularbracketleft;3010 1290 | blacklenticularbracketleftvertical;FE3B 1291 | blacklenticularbracketright;3011 1292 | blacklenticularbracketrightvertical;FE3C 1293 | blacklowerlefttriangle;25E3 1294 | blacklowerrighttriangle;25E2 1295 | blackrectangle;25AC 1296 | blackrightpointingpointer;25BA 1297 | blackrightpointingtriangle;25B6 1298 | blacksmallsquare;25AA 1299 | blacksmilingface;263B 1300 | blacksquare;25A0 1301 | blackstar;2605 1302 | blackupperlefttriangle;25E4 1303 | blackupperrighttriangle;25E5 1304 | blackuppointingsmalltriangle;25B4 1305 | blackuppointingtriangle;25B2 1306 | blank;2423 1307 | blinebelow;1E07 1308 | block;2588 1309 | bmonospace;FF42 1310 | bobaimaithai;0E1A 1311 | bohiragana;307C 1312 | bokatakana;30DC 1313 | bparen;249D 1314 | bqsquare;33C3 1315 | braceex;F8F4 1316 | braceleft;007B 1317 | braceleftbt;F8F3 1318 | braceleftmid;F8F2 1319 | braceleftmonospace;FF5B 1320 | braceleftsmall;FE5B 1321 | bracelefttp;F8F1 1322 | braceleftvertical;FE37 1323 | braceright;007D 1324 | bracerightbt;F8FE 1325 | bracerightmid;F8FD 1326 | bracerightmonospace;FF5D 1327 | bracerightsmall;FE5C 1328 | bracerighttp;F8FC 1329 | bracerightvertical;FE38 1330 | bracketleft;005B 1331 | bracketleftbt;F8F0 1332 | bracketleftex;F8EF 1333 | bracketleftmonospace;FF3B 1334 | bracketlefttp;F8EE 1335 | bracketright;005D 1336 | bracketrightbt;F8FB 1337 | bracketrightex;F8FA 1338 | bracketrightmonospace;FF3D 1339 | bracketrighttp;F8F9 1340 | breve;02D8 1341 | brevebelowcmb;032E 1342 | brevecmb;0306 1343 | breveinvertedbelowcmb;032F 1344 | breveinvertedcmb;0311 1345 | breveinverteddoublecmb;0361 1346 | bridgebelowcmb;032A 1347 | bridgeinvertedbelowcmb;033A 1348 | brokenbar;00A6 1349 | bstroke;0180 1350 | bsuperior;F6EA 1351 | btopbar;0183 1352 | buhiragana;3076 1353 | bukatakana;30D6 1354 | bullet;2022 1355 | bulletinverse;25D8 1356 | bulletoperator;2219 1357 | bullseye;25CE 1358 | c;0063 1359 | caarmenian;056E 1360 | cabengali;099A 1361 | cacute;0107 1362 | cadeva;091A 1363 | cagujarati;0A9A 1364 | cagurmukhi;0A1A 1365 | calsquare;3388 1366 | candrabindubengali;0981 1367 | candrabinducmb;0310 1368 | candrabindudeva;0901 1369 | candrabindugujarati;0A81 1370 | capslock;21EA 1371 | careof;2105 1372 | caron;02C7 1373 | caronbelowcmb;032C 1374 | caroncmb;030C 1375 | carriagereturn;21B5 1376 | cbopomofo;3118 1377 | ccaron;010D 1378 | ccedilla;00E7 1379 | ccedillaacute;1E09 1380 | ccircle;24D2 1381 | ccircumflex;0109 1382 | ccurl;0255 1383 | cdot;010B 1384 | cdotaccent;010B 1385 | cdsquare;33C5 1386 | cedilla;00B8 1387 | cedillacmb;0327 1388 | cent;00A2 1389 | centigrade;2103 1390 | centinferior;F6DF 1391 | centmonospace;FFE0 1392 | centoldstyle;F7A2 1393 | centsuperior;F6E0 1394 | chaarmenian;0579 1395 | chabengali;099B 1396 | chadeva;091B 1397 | chagujarati;0A9B 1398 | chagurmukhi;0A1B 1399 | chbopomofo;3114 1400 | cheabkhasiancyrillic;04BD 1401 | checkmark;2713 1402 | checyrillic;0447 1403 | chedescenderabkhasiancyrillic;04BF 1404 | chedescendercyrillic;04B7 1405 | chedieresiscyrillic;04F5 1406 | cheharmenian;0573 1407 | chekhakassiancyrillic;04CC 1408 | cheverticalstrokecyrillic;04B9 1409 | chi;03C7 1410 | chieuchacirclekorean;3277 1411 | chieuchaparenkorean;3217 1412 | chieuchcirclekorean;3269 1413 | chieuchkorean;314A 1414 | chieuchparenkorean;3209 1415 | chochangthai;0E0A 1416 | chochanthai;0E08 1417 | chochingthai;0E09 1418 | chochoethai;0E0C 1419 | chook;0188 1420 | cieucacirclekorean;3276 1421 | cieucaparenkorean;3216 1422 | cieuccirclekorean;3268 1423 | cieuckorean;3148 1424 | cieucparenkorean;3208 1425 | cieucuparenkorean;321C 1426 | circle;25CB 1427 | circlemultiply;2297 1428 | circleot;2299 1429 | circleplus;2295 1430 | circlepostalmark;3036 1431 | circlewithlefthalfblack;25D0 1432 | circlewithrighthalfblack;25D1 1433 | circumflex;02C6 1434 | circumflexbelowcmb;032D 1435 | circumflexcmb;0302 1436 | clear;2327 1437 | clickalveolar;01C2 1438 | clickdental;01C0 1439 | clicklateral;01C1 1440 | clickretroflex;01C3 1441 | club;2663 1442 | clubsuitblack;2663 1443 | clubsuitwhite;2667 1444 | cmcubedsquare;33A4 1445 | cmonospace;FF43 1446 | cmsquaredsquare;33A0 1447 | coarmenian;0581 1448 | colon;003A 1449 | colonmonetary;20A1 1450 | colonmonospace;FF1A 1451 | colonsign;20A1 1452 | colonsmall;FE55 1453 | colontriangularhalfmod;02D1 1454 | colontriangularmod;02D0 1455 | comma;002C 1456 | commaabovecmb;0313 1457 | commaaboverightcmb;0315 1458 | commaaccent;F6C3 1459 | commaarabic;060C 1460 | commaarmenian;055D 1461 | commainferior;F6E1 1462 | commamonospace;FF0C 1463 | commareversedabovecmb;0314 1464 | commareversedmod;02BD 1465 | commasmall;FE50 1466 | commasuperior;F6E2 1467 | commaturnedabovecmb;0312 1468 | commaturnedmod;02BB 1469 | compass;263C 1470 | congruent;2245 1471 | contourintegral;222E 1472 | control;2303 1473 | controlACK;0006 1474 | controlBEL;0007 1475 | controlBS;0008 1476 | controlCAN;0018 1477 | controlCR;000D 1478 | controlDC1;0011 1479 | controlDC2;0012 1480 | controlDC3;0013 1481 | controlDC4;0014 1482 | controlDEL;007F 1483 | controlDLE;0010 1484 | controlEM;0019 1485 | controlENQ;0005 1486 | controlEOT;0004 1487 | controlESC;001B 1488 | controlETB;0017 1489 | controlETX;0003 1490 | controlFF;000C 1491 | controlFS;001C 1492 | controlGS;001D 1493 | controlHT;0009 1494 | controlLF;000A 1495 | controlNAK;0015 1496 | controlRS;001E 1497 | controlSI;000F 1498 | controlSO;000E 1499 | controlSOT;0002 1500 | controlSTX;0001 1501 | controlSUB;001A 1502 | controlSYN;0016 1503 | controlUS;001F 1504 | controlVT;000B 1505 | copyright;00A9 1506 | copyrightsans;F8E9 1507 | copyrightserif;F6D9 1508 | cornerbracketleft;300C 1509 | cornerbracketlefthalfwidth;FF62 1510 | cornerbracketleftvertical;FE41 1511 | cornerbracketright;300D 1512 | cornerbracketrighthalfwidth;FF63 1513 | cornerbracketrightvertical;FE42 1514 | corporationsquare;337F 1515 | cosquare;33C7 1516 | coverkgsquare;33C6 1517 | cparen;249E 1518 | cruzeiro;20A2 1519 | cstretched;0297 1520 | curlyand;22CF 1521 | curlyor;22CE 1522 | currency;00A4 1523 | cyrBreve;F6D1 1524 | cyrFlex;F6D2 1525 | cyrbreve;F6D4 1526 | cyrflex;F6D5 1527 | d;0064 1528 | daarmenian;0564 1529 | dabengali;09A6 1530 | dadarabic;0636 1531 | dadeva;0926 1532 | dadfinalarabic;FEBE 1533 | dadinitialarabic;FEBF 1534 | dadmedialarabic;FEC0 1535 | dagesh;05BC 1536 | dageshhebrew;05BC 1537 | dagger;2020 1538 | daggerdbl;2021 1539 | dagujarati;0AA6 1540 | dagurmukhi;0A26 1541 | dahiragana;3060 1542 | dakatakana;30C0 1543 | dalarabic;062F 1544 | dalet;05D3 1545 | daletdagesh;FB33 1546 | daletdageshhebrew;FB33 1547 | dalethatafpatah;05D3 05B2 1548 | dalethatafpatahhebrew;05D3 05B2 1549 | dalethatafsegol;05D3 05B1 1550 | dalethatafsegolhebrew;05D3 05B1 1551 | dalethebrew;05D3 1552 | dalethiriq;05D3 05B4 1553 | dalethiriqhebrew;05D3 05B4 1554 | daletholam;05D3 05B9 1555 | daletholamhebrew;05D3 05B9 1556 | daletpatah;05D3 05B7 1557 | daletpatahhebrew;05D3 05B7 1558 | daletqamats;05D3 05B8 1559 | daletqamatshebrew;05D3 05B8 1560 | daletqubuts;05D3 05BB 1561 | daletqubutshebrew;05D3 05BB 1562 | daletsegol;05D3 05B6 1563 | daletsegolhebrew;05D3 05B6 1564 | daletsheva;05D3 05B0 1565 | daletshevahebrew;05D3 05B0 1566 | dalettsere;05D3 05B5 1567 | dalettserehebrew;05D3 05B5 1568 | dalfinalarabic;FEAA 1569 | dammaarabic;064F 1570 | dammalowarabic;064F 1571 | dammatanaltonearabic;064C 1572 | dammatanarabic;064C 1573 | danda;0964 1574 | dargahebrew;05A7 1575 | dargalefthebrew;05A7 1576 | dasiapneumatacyrilliccmb;0485 1577 | dblGrave;F6D3 1578 | dblanglebracketleft;300A 1579 | dblanglebracketleftvertical;FE3D 1580 | dblanglebracketright;300B 1581 | dblanglebracketrightvertical;FE3E 1582 | dblarchinvertedbelowcmb;032B 1583 | dblarrowleft;21D4 1584 | dblarrowright;21D2 1585 | dbldanda;0965 1586 | dblgrave;F6D6 1587 | dblgravecmb;030F 1588 | dblintegral;222C 1589 | dbllowline;2017 1590 | dbllowlinecmb;0333 1591 | dbloverlinecmb;033F 1592 | dblprimemod;02BA 1593 | dblverticalbar;2016 1594 | dblverticallineabovecmb;030E 1595 | dbopomofo;3109 1596 | dbsquare;33C8 1597 | dcaron;010F 1598 | dcedilla;1E11 1599 | dcircle;24D3 1600 | dcircumflexbelow;1E13 1601 | dcroat;0111 1602 | ddabengali;09A1 1603 | ddadeva;0921 1604 | ddagujarati;0AA1 1605 | ddagurmukhi;0A21 1606 | ddalarabic;0688 1607 | ddalfinalarabic;FB89 1608 | dddhadeva;095C 1609 | ddhabengali;09A2 1610 | ddhadeva;0922 1611 | ddhagujarati;0AA2 1612 | ddhagurmukhi;0A22 1613 | ddotaccent;1E0B 1614 | ddotbelow;1E0D 1615 | decimalseparatorarabic;066B 1616 | decimalseparatorpersian;066B 1617 | decyrillic;0434 1618 | degree;00B0 1619 | dehihebrew;05AD 1620 | dehiragana;3067 1621 | deicoptic;03EF 1622 | dekatakana;30C7 1623 | deleteleft;232B 1624 | deleteright;2326 1625 | delta;03B4 1626 | deltaturned;018D 1627 | denominatorminusonenumeratorbengali;09F8 1628 | dezh;02A4 1629 | dhabengali;09A7 1630 | dhadeva;0927 1631 | dhagujarati;0AA7 1632 | dhagurmukhi;0A27 1633 | dhook;0257 1634 | dialytikatonos;0385 1635 | dialytikatonoscmb;0344 1636 | diamond;2666 1637 | diamondsuitwhite;2662 1638 | dieresis;00A8 1639 | dieresisacute;F6D7 1640 | dieresisbelowcmb;0324 1641 | dieresiscmb;0308 1642 | dieresisgrave;F6D8 1643 | dieresistonos;0385 1644 | dihiragana;3062 1645 | dikatakana;30C2 1646 | dittomark;3003 1647 | divide;00F7 1648 | divides;2223 1649 | divisionslash;2215 1650 | djecyrillic;0452 1651 | dkshade;2593 1652 | dlinebelow;1E0F 1653 | dlsquare;3397 1654 | dmacron;0111 1655 | dmonospace;FF44 1656 | dnblock;2584 1657 | dochadathai;0E0E 1658 | dodekthai;0E14 1659 | dohiragana;3069 1660 | dokatakana;30C9 1661 | dollar;0024 1662 | dollarinferior;F6E3 1663 | dollarmonospace;FF04 1664 | dollaroldstyle;F724 1665 | dollarsmall;FE69 1666 | dollarsuperior;F6E4 1667 | dong;20AB 1668 | dorusquare;3326 1669 | dotaccent;02D9 1670 | dotaccentcmb;0307 1671 | dotbelowcmb;0323 1672 | dotbelowcomb;0323 1673 | dotkatakana;30FB 1674 | dotlessi;0131 1675 | dotlessj;F6BE 1676 | dotlessjstrokehook;0284 1677 | dotmath;22C5 1678 | dottedcircle;25CC 1679 | doubleyodpatah;FB1F 1680 | doubleyodpatahhebrew;FB1F 1681 | downtackbelowcmb;031E 1682 | downtackmod;02D5 1683 | dparen;249F 1684 | dsuperior;F6EB 1685 | dtail;0256 1686 | dtopbar;018C 1687 | duhiragana;3065 1688 | dukatakana;30C5 1689 | dz;01F3 1690 | dzaltone;02A3 1691 | dzcaron;01C6 1692 | dzcurl;02A5 1693 | dzeabkhasiancyrillic;04E1 1694 | dzecyrillic;0455 1695 | dzhecyrillic;045F 1696 | e;0065 1697 | eacute;00E9 1698 | earth;2641 1699 | ebengali;098F 1700 | ebopomofo;311C 1701 | ebreve;0115 1702 | ecandradeva;090D 1703 | ecandragujarati;0A8D 1704 | ecandravowelsigndeva;0945 1705 | ecandravowelsigngujarati;0AC5 1706 | ecaron;011B 1707 | ecedillabreve;1E1D 1708 | echarmenian;0565 1709 | echyiwnarmenian;0587 1710 | ecircle;24D4 1711 | ecircumflex;00EA 1712 | ecircumflexacute;1EBF 1713 | ecircumflexbelow;1E19 1714 | ecircumflexdotbelow;1EC7 1715 | ecircumflexgrave;1EC1 1716 | ecircumflexhookabove;1EC3 1717 | ecircumflextilde;1EC5 1718 | ecyrillic;0454 1719 | edblgrave;0205 1720 | edeva;090F 1721 | edieresis;00EB 1722 | edot;0117 1723 | edotaccent;0117 1724 | edotbelow;1EB9 1725 | eegurmukhi;0A0F 1726 | eematragurmukhi;0A47 1727 | efcyrillic;0444 1728 | egrave;00E8 1729 | egujarati;0A8F 1730 | eharmenian;0567 1731 | ehbopomofo;311D 1732 | ehiragana;3048 1733 | ehookabove;1EBB 1734 | eibopomofo;311F 1735 | eight;0038 1736 | eightarabic;0668 1737 | eightbengali;09EE 1738 | eightcircle;2467 1739 | eightcircleinversesansserif;2791 1740 | eightdeva;096E 1741 | eighteencircle;2471 1742 | eighteenparen;2485 1743 | eighteenperiod;2499 1744 | eightgujarati;0AEE 1745 | eightgurmukhi;0A6E 1746 | eighthackarabic;0668 1747 | eighthangzhou;3028 1748 | eighthnotebeamed;266B 1749 | eightideographicparen;3227 1750 | eightinferior;2088 1751 | eightmonospace;FF18 1752 | eightoldstyle;F738 1753 | eightparen;247B 1754 | eightperiod;248F 1755 | eightpersian;06F8 1756 | eightroman;2177 1757 | eightsuperior;2078 1758 | eightthai;0E58 1759 | einvertedbreve;0207 1760 | eiotifiedcyrillic;0465 1761 | ekatakana;30A8 1762 | ekatakanahalfwidth;FF74 1763 | ekonkargurmukhi;0A74 1764 | ekorean;3154 1765 | elcyrillic;043B 1766 | element;2208 1767 | elevencircle;246A 1768 | elevenparen;247E 1769 | elevenperiod;2492 1770 | elevenroman;217A 1771 | ellipsis;2026 1772 | ellipsisvertical;22EE 1773 | emacron;0113 1774 | emacronacute;1E17 1775 | emacrongrave;1E15 1776 | emcyrillic;043C 1777 | emdash;2014 1778 | emdashvertical;FE31 1779 | emonospace;FF45 1780 | emphasismarkarmenian;055B 1781 | emptyset;2205 1782 | enbopomofo;3123 1783 | encyrillic;043D 1784 | endash;2013 1785 | endashvertical;FE32 1786 | endescendercyrillic;04A3 1787 | eng;014B 1788 | engbopomofo;3125 1789 | enghecyrillic;04A5 1790 | enhookcyrillic;04C8 1791 | enspace;2002 1792 | eogonek;0119 1793 | eokorean;3153 1794 | eopen;025B 1795 | eopenclosed;029A 1796 | eopenreversed;025C 1797 | eopenreversedclosed;025E 1798 | eopenreversedhook;025D 1799 | eparen;24A0 1800 | epsilon;03B5 1801 | epsilontonos;03AD 1802 | equal;003D 1803 | equalmonospace;FF1D 1804 | equalsmall;FE66 1805 | equalsuperior;207C 1806 | equivalence;2261 1807 | erbopomofo;3126 1808 | ercyrillic;0440 1809 | ereversed;0258 1810 | ereversedcyrillic;044D 1811 | escyrillic;0441 1812 | esdescendercyrillic;04AB 1813 | esh;0283 1814 | eshcurl;0286 1815 | eshortdeva;090E 1816 | eshortvowelsigndeva;0946 1817 | eshreversedloop;01AA 1818 | eshsquatreversed;0285 1819 | esmallhiragana;3047 1820 | esmallkatakana;30A7 1821 | esmallkatakanahalfwidth;FF6A 1822 | estimated;212E 1823 | esuperior;F6EC 1824 | eta;03B7 1825 | etarmenian;0568 1826 | etatonos;03AE 1827 | eth;00F0 1828 | etilde;1EBD 1829 | etildebelow;1E1B 1830 | etnahtafoukhhebrew;0591 1831 | etnahtafoukhlefthebrew;0591 1832 | etnahtahebrew;0591 1833 | etnahtalefthebrew;0591 1834 | eturned;01DD 1835 | eukorean;3161 1836 | euro;20AC 1837 | evowelsignbengali;09C7 1838 | evowelsigndeva;0947 1839 | evowelsigngujarati;0AC7 1840 | exclam;0021 1841 | exclamarmenian;055C 1842 | exclamdbl;203C 1843 | exclamdown;00A1 1844 | exclamdownsmall;F7A1 1845 | exclammonospace;FF01 1846 | exclamsmall;F721 1847 | existential;2203 1848 | ezh;0292 1849 | ezhcaron;01EF 1850 | ezhcurl;0293 1851 | ezhreversed;01B9 1852 | ezhtail;01BA 1853 | f;0066 1854 | fadeva;095E 1855 | fagurmukhi;0A5E 1856 | fahrenheit;2109 1857 | fathaarabic;064E 1858 | fathalowarabic;064E 1859 | fathatanarabic;064B 1860 | fbopomofo;3108 1861 | fcircle;24D5 1862 | fdotaccent;1E1F 1863 | feharabic;0641 1864 | feharmenian;0586 1865 | fehfinalarabic;FED2 1866 | fehinitialarabic;FED3 1867 | fehmedialarabic;FED4 1868 | feicoptic;03E5 1869 | female;2640 1870 | ff;FB00 1871 | ffi;FB03 1872 | ffl;FB04 1873 | fi;FB01 1874 | fifteencircle;246E 1875 | fifteenparen;2482 1876 | fifteenperiod;2496 1877 | figuredash;2012 1878 | filledbox;25A0 1879 | filledrect;25AC 1880 | finalkaf;05DA 1881 | finalkafdagesh;FB3A 1882 | finalkafdageshhebrew;FB3A 1883 | finalkafhebrew;05DA 1884 | finalkafqamats;05DA 05B8 1885 | finalkafqamatshebrew;05DA 05B8 1886 | finalkafsheva;05DA 05B0 1887 | finalkafshevahebrew;05DA 05B0 1888 | finalmem;05DD 1889 | finalmemhebrew;05DD 1890 | finalnun;05DF 1891 | finalnunhebrew;05DF 1892 | finalpe;05E3 1893 | finalpehebrew;05E3 1894 | finaltsadi;05E5 1895 | finaltsadihebrew;05E5 1896 | firsttonechinese;02C9 1897 | fisheye;25C9 1898 | fitacyrillic;0473 1899 | five;0035 1900 | fivearabic;0665 1901 | fivebengali;09EB 1902 | fivecircle;2464 1903 | fivecircleinversesansserif;278E 1904 | fivedeva;096B 1905 | fiveeighths;215D 1906 | fivegujarati;0AEB 1907 | fivegurmukhi;0A6B 1908 | fivehackarabic;0665 1909 | fivehangzhou;3025 1910 | fiveideographicparen;3224 1911 | fiveinferior;2085 1912 | fivemonospace;FF15 1913 | fiveoldstyle;F735 1914 | fiveparen;2478 1915 | fiveperiod;248C 1916 | fivepersian;06F5 1917 | fiveroman;2174 1918 | fivesuperior;2075 1919 | fivethai;0E55 1920 | fl;FB02 1921 | florin;0192 1922 | fmonospace;FF46 1923 | fmsquare;3399 1924 | fofanthai;0E1F 1925 | fofathai;0E1D 1926 | fongmanthai;0E4F 1927 | forall;2200 1928 | four;0034 1929 | fourarabic;0664 1930 | fourbengali;09EA 1931 | fourcircle;2463 1932 | fourcircleinversesansserif;278D 1933 | fourdeva;096A 1934 | fourgujarati;0AEA 1935 | fourgurmukhi;0A6A 1936 | fourhackarabic;0664 1937 | fourhangzhou;3024 1938 | fourideographicparen;3223 1939 | fourinferior;2084 1940 | fourmonospace;FF14 1941 | fournumeratorbengali;09F7 1942 | fouroldstyle;F734 1943 | fourparen;2477 1944 | fourperiod;248B 1945 | fourpersian;06F4 1946 | fourroman;2173 1947 | foursuperior;2074 1948 | fourteencircle;246D 1949 | fourteenparen;2481 1950 | fourteenperiod;2495 1951 | fourthai;0E54 1952 | fourthtonechinese;02CB 1953 | fparen;24A1 1954 | fraction;2044 1955 | franc;20A3 1956 | g;0067 1957 | gabengali;0997 1958 | gacute;01F5 1959 | gadeva;0917 1960 | gafarabic;06AF 1961 | gaffinalarabic;FB93 1962 | gafinitialarabic;FB94 1963 | gafmedialarabic;FB95 1964 | gagujarati;0A97 1965 | gagurmukhi;0A17 1966 | gahiragana;304C 1967 | gakatakana;30AC 1968 | gamma;03B3 1969 | gammalatinsmall;0263 1970 | gammasuperior;02E0 1971 | gangiacoptic;03EB 1972 | gbopomofo;310D 1973 | gbreve;011F 1974 | gcaron;01E7 1975 | gcedilla;0123 1976 | gcircle;24D6 1977 | gcircumflex;011D 1978 | gcommaaccent;0123 1979 | gdot;0121 1980 | gdotaccent;0121 1981 | gecyrillic;0433 1982 | gehiragana;3052 1983 | gekatakana;30B2 1984 | geometricallyequal;2251 1985 | gereshaccenthebrew;059C 1986 | gereshhebrew;05F3 1987 | gereshmuqdamhebrew;059D 1988 | germandbls;00DF 1989 | gershayimaccenthebrew;059E 1990 | gershayimhebrew;05F4 1991 | getamark;3013 1992 | ghabengali;0998 1993 | ghadarmenian;0572 1994 | ghadeva;0918 1995 | ghagujarati;0A98 1996 | ghagurmukhi;0A18 1997 | ghainarabic;063A 1998 | ghainfinalarabic;FECE 1999 | ghaininitialarabic;FECF 2000 | ghainmedialarabic;FED0 2001 | ghemiddlehookcyrillic;0495 2002 | ghestrokecyrillic;0493 2003 | gheupturncyrillic;0491 2004 | ghhadeva;095A 2005 | ghhagurmukhi;0A5A 2006 | ghook;0260 2007 | ghzsquare;3393 2008 | gihiragana;304E 2009 | gikatakana;30AE 2010 | gimarmenian;0563 2011 | gimel;05D2 2012 | gimeldagesh;FB32 2013 | gimeldageshhebrew;FB32 2014 | gimelhebrew;05D2 2015 | gjecyrillic;0453 2016 | glottalinvertedstroke;01BE 2017 | glottalstop;0294 2018 | glottalstopinverted;0296 2019 | glottalstopmod;02C0 2020 | glottalstopreversed;0295 2021 | glottalstopreversedmod;02C1 2022 | glottalstopreversedsuperior;02E4 2023 | glottalstopstroke;02A1 2024 | glottalstopstrokereversed;02A2 2025 | gmacron;1E21 2026 | gmonospace;FF47 2027 | gohiragana;3054 2028 | gokatakana;30B4 2029 | gparen;24A2 2030 | gpasquare;33AC 2031 | gradient;2207 2032 | grave;0060 2033 | gravebelowcmb;0316 2034 | gravecmb;0300 2035 | gravecomb;0300 2036 | gravedeva;0953 2037 | gravelowmod;02CE 2038 | gravemonospace;FF40 2039 | gravetonecmb;0340 2040 | greater;003E 2041 | greaterequal;2265 2042 | greaterequalorless;22DB 2043 | greatermonospace;FF1E 2044 | greaterorequivalent;2273 2045 | greaterorless;2277 2046 | greateroverequal;2267 2047 | greatersmall;FE65 2048 | gscript;0261 2049 | gstroke;01E5 2050 | guhiragana;3050 2051 | guillemotleft;00AB 2052 | guillemotright;00BB 2053 | guilsinglleft;2039 2054 | guilsinglright;203A 2055 | gukatakana;30B0 2056 | guramusquare;3318 2057 | gysquare;33C9 2058 | h;0068 2059 | haabkhasiancyrillic;04A9 2060 | haaltonearabic;06C1 2061 | habengali;09B9 2062 | hadescendercyrillic;04B3 2063 | hadeva;0939 2064 | hagujarati;0AB9 2065 | hagurmukhi;0A39 2066 | haharabic;062D 2067 | hahfinalarabic;FEA2 2068 | hahinitialarabic;FEA3 2069 | hahiragana;306F 2070 | hahmedialarabic;FEA4 2071 | haitusquare;332A 2072 | hakatakana;30CF 2073 | hakatakanahalfwidth;FF8A 2074 | halantgurmukhi;0A4D 2075 | hamzaarabic;0621 2076 | hamzadammaarabic;0621 064F 2077 | hamzadammatanarabic;0621 064C 2078 | hamzafathaarabic;0621 064E 2079 | hamzafathatanarabic;0621 064B 2080 | hamzalowarabic;0621 2081 | hamzalowkasraarabic;0621 0650 2082 | hamzalowkasratanarabic;0621 064D 2083 | hamzasukunarabic;0621 0652 2084 | hangulfiller;3164 2085 | hardsigncyrillic;044A 2086 | harpoonleftbarbup;21BC 2087 | harpoonrightbarbup;21C0 2088 | hasquare;33CA 2089 | hatafpatah;05B2 2090 | hatafpatah16;05B2 2091 | hatafpatah23;05B2 2092 | hatafpatah2f;05B2 2093 | hatafpatahhebrew;05B2 2094 | hatafpatahnarrowhebrew;05B2 2095 | hatafpatahquarterhebrew;05B2 2096 | hatafpatahwidehebrew;05B2 2097 | hatafqamats;05B3 2098 | hatafqamats1b;05B3 2099 | hatafqamats28;05B3 2100 | hatafqamats34;05B3 2101 | hatafqamatshebrew;05B3 2102 | hatafqamatsnarrowhebrew;05B3 2103 | hatafqamatsquarterhebrew;05B3 2104 | hatafqamatswidehebrew;05B3 2105 | hatafsegol;05B1 2106 | hatafsegol17;05B1 2107 | hatafsegol24;05B1 2108 | hatafsegol30;05B1 2109 | hatafsegolhebrew;05B1 2110 | hatafsegolnarrowhebrew;05B1 2111 | hatafsegolquarterhebrew;05B1 2112 | hatafsegolwidehebrew;05B1 2113 | hbar;0127 2114 | hbopomofo;310F 2115 | hbrevebelow;1E2B 2116 | hcedilla;1E29 2117 | hcircle;24D7 2118 | hcircumflex;0125 2119 | hdieresis;1E27 2120 | hdotaccent;1E23 2121 | hdotbelow;1E25 2122 | he;05D4 2123 | heart;2665 2124 | heartsuitblack;2665 2125 | heartsuitwhite;2661 2126 | hedagesh;FB34 2127 | hedageshhebrew;FB34 2128 | hehaltonearabic;06C1 2129 | heharabic;0647 2130 | hehebrew;05D4 2131 | hehfinalaltonearabic;FBA7 2132 | hehfinalalttwoarabic;FEEA 2133 | hehfinalarabic;FEEA 2134 | hehhamzaabovefinalarabic;FBA5 2135 | hehhamzaaboveisolatedarabic;FBA4 2136 | hehinitialaltonearabic;FBA8 2137 | hehinitialarabic;FEEB 2138 | hehiragana;3078 2139 | hehmedialaltonearabic;FBA9 2140 | hehmedialarabic;FEEC 2141 | heiseierasquare;337B 2142 | hekatakana;30D8 2143 | hekatakanahalfwidth;FF8D 2144 | hekutaarusquare;3336 2145 | henghook;0267 2146 | herutusquare;3339 2147 | het;05D7 2148 | hethebrew;05D7 2149 | hhook;0266 2150 | hhooksuperior;02B1 2151 | hieuhacirclekorean;327B 2152 | hieuhaparenkorean;321B 2153 | hieuhcirclekorean;326D 2154 | hieuhkorean;314E 2155 | hieuhparenkorean;320D 2156 | hihiragana;3072 2157 | hikatakana;30D2 2158 | hikatakanahalfwidth;FF8B 2159 | hiriq;05B4 2160 | hiriq14;05B4 2161 | hiriq21;05B4 2162 | hiriq2d;05B4 2163 | hiriqhebrew;05B4 2164 | hiriqnarrowhebrew;05B4 2165 | hiriqquarterhebrew;05B4 2166 | hiriqwidehebrew;05B4 2167 | hlinebelow;1E96 2168 | hmonospace;FF48 2169 | hoarmenian;0570 2170 | hohipthai;0E2B 2171 | hohiragana;307B 2172 | hokatakana;30DB 2173 | hokatakanahalfwidth;FF8E 2174 | holam;05B9 2175 | holam19;05B9 2176 | holam26;05B9 2177 | holam32;05B9 2178 | holamhebrew;05B9 2179 | holamnarrowhebrew;05B9 2180 | holamquarterhebrew;05B9 2181 | holamwidehebrew;05B9 2182 | honokhukthai;0E2E 2183 | hookabovecomb;0309 2184 | hookcmb;0309 2185 | hookpalatalizedbelowcmb;0321 2186 | hookretroflexbelowcmb;0322 2187 | hoonsquare;3342 2188 | horicoptic;03E9 2189 | horizontalbar;2015 2190 | horncmb;031B 2191 | hotsprings;2668 2192 | house;2302 2193 | hparen;24A3 2194 | hsuperior;02B0 2195 | hturned;0265 2196 | huhiragana;3075 2197 | huiitosquare;3333 2198 | hukatakana;30D5 2199 | hukatakanahalfwidth;FF8C 2200 | hungarumlaut;02DD 2201 | hungarumlautcmb;030B 2202 | hv;0195 2203 | hyphen;002D 2204 | hypheninferior;F6E5 2205 | hyphenmonospace;FF0D 2206 | hyphensmall;FE63 2207 | hyphensuperior;F6E6 2208 | hyphentwo;2010 2209 | i;0069 2210 | iacute;00ED 2211 | iacyrillic;044F 2212 | ibengali;0987 2213 | ibopomofo;3127 2214 | ibreve;012D 2215 | icaron;01D0 2216 | icircle;24D8 2217 | icircumflex;00EE 2218 | icyrillic;0456 2219 | idblgrave;0209 2220 | ideographearthcircle;328F 2221 | ideographfirecircle;328B 2222 | ideographicallianceparen;323F 2223 | ideographiccallparen;323A 2224 | ideographiccentrecircle;32A5 2225 | ideographicclose;3006 2226 | ideographiccomma;3001 2227 | ideographiccommaleft;FF64 2228 | ideographiccongratulationparen;3237 2229 | ideographiccorrectcircle;32A3 2230 | ideographicearthparen;322F 2231 | ideographicenterpriseparen;323D 2232 | ideographicexcellentcircle;329D 2233 | ideographicfestivalparen;3240 2234 | ideographicfinancialcircle;3296 2235 | ideographicfinancialparen;3236 2236 | ideographicfireparen;322B 2237 | ideographichaveparen;3232 2238 | ideographichighcircle;32A4 2239 | ideographiciterationmark;3005 2240 | ideographiclaborcircle;3298 2241 | ideographiclaborparen;3238 2242 | ideographicleftcircle;32A7 2243 | ideographiclowcircle;32A6 2244 | ideographicmedicinecircle;32A9 2245 | ideographicmetalparen;322E 2246 | ideographicmoonparen;322A 2247 | ideographicnameparen;3234 2248 | ideographicperiod;3002 2249 | ideographicprintcircle;329E 2250 | ideographicreachparen;3243 2251 | ideographicrepresentparen;3239 2252 | ideographicresourceparen;323E 2253 | ideographicrightcircle;32A8 2254 | ideographicsecretcircle;3299 2255 | ideographicselfparen;3242 2256 | ideographicsocietyparen;3233 2257 | ideographicspace;3000 2258 | ideographicspecialparen;3235 2259 | ideographicstockparen;3231 2260 | ideographicstudyparen;323B 2261 | ideographicsunparen;3230 2262 | ideographicsuperviseparen;323C 2263 | ideographicwaterparen;322C 2264 | ideographicwoodparen;322D 2265 | ideographiczero;3007 2266 | ideographmetalcircle;328E 2267 | ideographmooncircle;328A 2268 | ideographnamecircle;3294 2269 | ideographsuncircle;3290 2270 | ideographwatercircle;328C 2271 | ideographwoodcircle;328D 2272 | ideva;0907 2273 | idieresis;00EF 2274 | idieresisacute;1E2F 2275 | idieresiscyrillic;04E5 2276 | idotbelow;1ECB 2277 | iebrevecyrillic;04D7 2278 | iecyrillic;0435 2279 | ieungacirclekorean;3275 2280 | ieungaparenkorean;3215 2281 | ieungcirclekorean;3267 2282 | ieungkorean;3147 2283 | ieungparenkorean;3207 2284 | igrave;00EC 2285 | igujarati;0A87 2286 | igurmukhi;0A07 2287 | ihiragana;3044 2288 | ihookabove;1EC9 2289 | iibengali;0988 2290 | iicyrillic;0438 2291 | iideva;0908 2292 | iigujarati;0A88 2293 | iigurmukhi;0A08 2294 | iimatragurmukhi;0A40 2295 | iinvertedbreve;020B 2296 | iishortcyrillic;0439 2297 | iivowelsignbengali;09C0 2298 | iivowelsigndeva;0940 2299 | iivowelsigngujarati;0AC0 2300 | ij;0133 2301 | ikatakana;30A4 2302 | ikatakanahalfwidth;FF72 2303 | ikorean;3163 2304 | ilde;02DC 2305 | iluyhebrew;05AC 2306 | imacron;012B 2307 | imacroncyrillic;04E3 2308 | imageorapproximatelyequal;2253 2309 | imatragurmukhi;0A3F 2310 | imonospace;FF49 2311 | increment;2206 2312 | infinity;221E 2313 | iniarmenian;056B 2314 | integral;222B 2315 | integralbottom;2321 2316 | integralbt;2321 2317 | integralex;F8F5 2318 | integraltop;2320 2319 | integraltp;2320 2320 | intersection;2229 2321 | intisquare;3305 2322 | invbullet;25D8 2323 | invcircle;25D9 2324 | invsmileface;263B 2325 | iocyrillic;0451 2326 | iogonek;012F 2327 | iota;03B9 2328 | iotadieresis;03CA 2329 | iotadieresistonos;0390 2330 | iotalatin;0269 2331 | iotatonos;03AF 2332 | iparen;24A4 2333 | irigurmukhi;0A72 2334 | ismallhiragana;3043 2335 | ismallkatakana;30A3 2336 | ismallkatakanahalfwidth;FF68 2337 | issharbengali;09FA 2338 | istroke;0268 2339 | isuperior;F6ED 2340 | iterationhiragana;309D 2341 | iterationkatakana;30FD 2342 | itilde;0129 2343 | itildebelow;1E2D 2344 | iubopomofo;3129 2345 | iucyrillic;044E 2346 | ivowelsignbengali;09BF 2347 | ivowelsigndeva;093F 2348 | ivowelsigngujarati;0ABF 2349 | izhitsacyrillic;0475 2350 | izhitsadblgravecyrillic;0477 2351 | j;006A 2352 | jaarmenian;0571 2353 | jabengali;099C 2354 | jadeva;091C 2355 | jagujarati;0A9C 2356 | jagurmukhi;0A1C 2357 | jbopomofo;3110 2358 | jcaron;01F0 2359 | jcircle;24D9 2360 | jcircumflex;0135 2361 | jcrossedtail;029D 2362 | jdotlessstroke;025F 2363 | jecyrillic;0458 2364 | jeemarabic;062C 2365 | jeemfinalarabic;FE9E 2366 | jeeminitialarabic;FE9F 2367 | jeemmedialarabic;FEA0 2368 | jeharabic;0698 2369 | jehfinalarabic;FB8B 2370 | jhabengali;099D 2371 | jhadeva;091D 2372 | jhagujarati;0A9D 2373 | jhagurmukhi;0A1D 2374 | jheharmenian;057B 2375 | jis;3004 2376 | jmonospace;FF4A 2377 | jparen;24A5 2378 | jsuperior;02B2 2379 | k;006B 2380 | kabashkircyrillic;04A1 2381 | kabengali;0995 2382 | kacute;1E31 2383 | kacyrillic;043A 2384 | kadescendercyrillic;049B 2385 | kadeva;0915 2386 | kaf;05DB 2387 | kafarabic;0643 2388 | kafdagesh;FB3B 2389 | kafdageshhebrew;FB3B 2390 | kaffinalarabic;FEDA 2391 | kafhebrew;05DB 2392 | kafinitialarabic;FEDB 2393 | kafmedialarabic;FEDC 2394 | kafrafehebrew;FB4D 2395 | kagujarati;0A95 2396 | kagurmukhi;0A15 2397 | kahiragana;304B 2398 | kahookcyrillic;04C4 2399 | kakatakana;30AB 2400 | kakatakanahalfwidth;FF76 2401 | kappa;03BA 2402 | kappasymbolgreek;03F0 2403 | kapyeounmieumkorean;3171 2404 | kapyeounphieuphkorean;3184 2405 | kapyeounpieupkorean;3178 2406 | kapyeounssangpieupkorean;3179 2407 | karoriisquare;330D 2408 | kashidaautoarabic;0640 2409 | kashidaautonosidebearingarabic;0640 2410 | kasmallkatakana;30F5 2411 | kasquare;3384 2412 | kasraarabic;0650 2413 | kasratanarabic;064D 2414 | kastrokecyrillic;049F 2415 | katahiraprolongmarkhalfwidth;FF70 2416 | kaverticalstrokecyrillic;049D 2417 | kbopomofo;310E 2418 | kcalsquare;3389 2419 | kcaron;01E9 2420 | kcedilla;0137 2421 | kcircle;24DA 2422 | kcommaaccent;0137 2423 | kdotbelow;1E33 2424 | keharmenian;0584 2425 | kehiragana;3051 2426 | kekatakana;30B1 2427 | kekatakanahalfwidth;FF79 2428 | kenarmenian;056F 2429 | kesmallkatakana;30F6 2430 | kgreenlandic;0138 2431 | khabengali;0996 2432 | khacyrillic;0445 2433 | khadeva;0916 2434 | khagujarati;0A96 2435 | khagurmukhi;0A16 2436 | khaharabic;062E 2437 | khahfinalarabic;FEA6 2438 | khahinitialarabic;FEA7 2439 | khahmedialarabic;FEA8 2440 | kheicoptic;03E7 2441 | khhadeva;0959 2442 | khhagurmukhi;0A59 2443 | khieukhacirclekorean;3278 2444 | khieukhaparenkorean;3218 2445 | khieukhcirclekorean;326A 2446 | khieukhkorean;314B 2447 | khieukhparenkorean;320A 2448 | khokhaithai;0E02 2449 | khokhonthai;0E05 2450 | khokhuatthai;0E03 2451 | khokhwaithai;0E04 2452 | khomutthai;0E5B 2453 | khook;0199 2454 | khorakhangthai;0E06 2455 | khzsquare;3391 2456 | kihiragana;304D 2457 | kikatakana;30AD 2458 | kikatakanahalfwidth;FF77 2459 | kiroguramusquare;3315 2460 | kiromeetorusquare;3316 2461 | kirosquare;3314 2462 | kiyeokacirclekorean;326E 2463 | kiyeokaparenkorean;320E 2464 | kiyeokcirclekorean;3260 2465 | kiyeokkorean;3131 2466 | kiyeokparenkorean;3200 2467 | kiyeoksioskorean;3133 2468 | kjecyrillic;045C 2469 | klinebelow;1E35 2470 | klsquare;3398 2471 | kmcubedsquare;33A6 2472 | kmonospace;FF4B 2473 | kmsquaredsquare;33A2 2474 | kohiragana;3053 2475 | kohmsquare;33C0 2476 | kokaithai;0E01 2477 | kokatakana;30B3 2478 | kokatakanahalfwidth;FF7A 2479 | kooposquare;331E 2480 | koppacyrillic;0481 2481 | koreanstandardsymbol;327F 2482 | koroniscmb;0343 2483 | kparen;24A6 2484 | kpasquare;33AA 2485 | ksicyrillic;046F 2486 | ktsquare;33CF 2487 | kturned;029E 2488 | kuhiragana;304F 2489 | kukatakana;30AF 2490 | kukatakanahalfwidth;FF78 2491 | kvsquare;33B8 2492 | kwsquare;33BE 2493 | l;006C 2494 | labengali;09B2 2495 | lacute;013A 2496 | ladeva;0932 2497 | lagujarati;0AB2 2498 | lagurmukhi;0A32 2499 | lakkhangyaothai;0E45 2500 | lamaleffinalarabic;FEFC 2501 | lamalefhamzaabovefinalarabic;FEF8 2502 | lamalefhamzaaboveisolatedarabic;FEF7 2503 | lamalefhamzabelowfinalarabic;FEFA 2504 | lamalefhamzabelowisolatedarabic;FEF9 2505 | lamalefisolatedarabic;FEFB 2506 | lamalefmaddaabovefinalarabic;FEF6 2507 | lamalefmaddaaboveisolatedarabic;FEF5 2508 | lamarabic;0644 2509 | lambda;03BB 2510 | lambdastroke;019B 2511 | lamed;05DC 2512 | lameddagesh;FB3C 2513 | lameddageshhebrew;FB3C 2514 | lamedhebrew;05DC 2515 | lamedholam;05DC 05B9 2516 | lamedholamdagesh;05DC 05B9 05BC 2517 | lamedholamdageshhebrew;05DC 05B9 05BC 2518 | lamedholamhebrew;05DC 05B9 2519 | lamfinalarabic;FEDE 2520 | lamhahinitialarabic;FCCA 2521 | laminitialarabic;FEDF 2522 | lamjeeminitialarabic;FCC9 2523 | lamkhahinitialarabic;FCCB 2524 | lamlamhehisolatedarabic;FDF2 2525 | lammedialarabic;FEE0 2526 | lammeemhahinitialarabic;FD88 2527 | lammeeminitialarabic;FCCC 2528 | lammeemjeeminitialarabic;FEDF FEE4 FEA0 2529 | lammeemkhahinitialarabic;FEDF FEE4 FEA8 2530 | largecircle;25EF 2531 | lbar;019A 2532 | lbelt;026C 2533 | lbopomofo;310C 2534 | lcaron;013E 2535 | lcedilla;013C 2536 | lcircle;24DB 2537 | lcircumflexbelow;1E3D 2538 | lcommaaccent;013C 2539 | ldot;0140 2540 | ldotaccent;0140 2541 | ldotbelow;1E37 2542 | ldotbelowmacron;1E39 2543 | leftangleabovecmb;031A 2544 | lefttackbelowcmb;0318 2545 | less;003C 2546 | lessequal;2264 2547 | lessequalorgreater;22DA 2548 | lessmonospace;FF1C 2549 | lessorequivalent;2272 2550 | lessorgreater;2276 2551 | lessoverequal;2266 2552 | lesssmall;FE64 2553 | lezh;026E 2554 | lfblock;258C 2555 | lhookretroflex;026D 2556 | lira;20A4 2557 | liwnarmenian;056C 2558 | lj;01C9 2559 | ljecyrillic;0459 2560 | ll;F6C0 2561 | lladeva;0933 2562 | llagujarati;0AB3 2563 | llinebelow;1E3B 2564 | llladeva;0934 2565 | llvocalicbengali;09E1 2566 | llvocalicdeva;0961 2567 | llvocalicvowelsignbengali;09E3 2568 | llvocalicvowelsigndeva;0963 2569 | lmiddletilde;026B 2570 | lmonospace;FF4C 2571 | lmsquare;33D0 2572 | lochulathai;0E2C 2573 | logicaland;2227 2574 | logicalnot;00AC 2575 | logicalnotreversed;2310 2576 | logicalor;2228 2577 | lolingthai;0E25 2578 | longs;017F 2579 | lowlinecenterline;FE4E 2580 | lowlinecmb;0332 2581 | lowlinedashed;FE4D 2582 | lozenge;25CA 2583 | lparen;24A7 2584 | lslash;0142 2585 | lsquare;2113 2586 | lsuperior;F6EE 2587 | ltshade;2591 2588 | luthai;0E26 2589 | lvocalicbengali;098C 2590 | lvocalicdeva;090C 2591 | lvocalicvowelsignbengali;09E2 2592 | lvocalicvowelsigndeva;0962 2593 | lxsquare;33D3 2594 | m;006D 2595 | mabengali;09AE 2596 | macron;00AF 2597 | macronbelowcmb;0331 2598 | macroncmb;0304 2599 | macronlowmod;02CD 2600 | macronmonospace;FFE3 2601 | macute;1E3F 2602 | madeva;092E 2603 | magujarati;0AAE 2604 | magurmukhi;0A2E 2605 | mahapakhhebrew;05A4 2606 | mahapakhlefthebrew;05A4 2607 | mahiragana;307E 2608 | maichattawalowleftthai;F895 2609 | maichattawalowrightthai;F894 2610 | maichattawathai;0E4B 2611 | maichattawaupperleftthai;F893 2612 | maieklowleftthai;F88C 2613 | maieklowrightthai;F88B 2614 | maiekthai;0E48 2615 | maiekupperleftthai;F88A 2616 | maihanakatleftthai;F884 2617 | maihanakatthai;0E31 2618 | maitaikhuleftthai;F889 2619 | maitaikhuthai;0E47 2620 | maitholowleftthai;F88F 2621 | maitholowrightthai;F88E 2622 | maithothai;0E49 2623 | maithoupperleftthai;F88D 2624 | maitrilowleftthai;F892 2625 | maitrilowrightthai;F891 2626 | maitrithai;0E4A 2627 | maitriupperleftthai;F890 2628 | maiyamokthai;0E46 2629 | makatakana;30DE 2630 | makatakanahalfwidth;FF8F 2631 | male;2642 2632 | mansyonsquare;3347 2633 | maqafhebrew;05BE 2634 | mars;2642 2635 | masoracirclehebrew;05AF 2636 | masquare;3383 2637 | mbopomofo;3107 2638 | mbsquare;33D4 2639 | mcircle;24DC 2640 | mcubedsquare;33A5 2641 | mdotaccent;1E41 2642 | mdotbelow;1E43 2643 | meemarabic;0645 2644 | meemfinalarabic;FEE2 2645 | meeminitialarabic;FEE3 2646 | meemmedialarabic;FEE4 2647 | meemmeeminitialarabic;FCD1 2648 | meemmeemisolatedarabic;FC48 2649 | meetorusquare;334D 2650 | mehiragana;3081 2651 | meizierasquare;337E 2652 | mekatakana;30E1 2653 | mekatakanahalfwidth;FF92 2654 | mem;05DE 2655 | memdagesh;FB3E 2656 | memdageshhebrew;FB3E 2657 | memhebrew;05DE 2658 | menarmenian;0574 2659 | merkhahebrew;05A5 2660 | merkhakefulahebrew;05A6 2661 | merkhakefulalefthebrew;05A6 2662 | merkhalefthebrew;05A5 2663 | mhook;0271 2664 | mhzsquare;3392 2665 | middledotkatakanahalfwidth;FF65 2666 | middot;00B7 2667 | mieumacirclekorean;3272 2668 | mieumaparenkorean;3212 2669 | mieumcirclekorean;3264 2670 | mieumkorean;3141 2671 | mieumpansioskorean;3170 2672 | mieumparenkorean;3204 2673 | mieumpieupkorean;316E 2674 | mieumsioskorean;316F 2675 | mihiragana;307F 2676 | mikatakana;30DF 2677 | mikatakanahalfwidth;FF90 2678 | minus;2212 2679 | minusbelowcmb;0320 2680 | minuscircle;2296 2681 | minusmod;02D7 2682 | minusplus;2213 2683 | minute;2032 2684 | miribaarusquare;334A 2685 | mirisquare;3349 2686 | mlonglegturned;0270 2687 | mlsquare;3396 2688 | mmcubedsquare;33A3 2689 | mmonospace;FF4D 2690 | mmsquaredsquare;339F 2691 | mohiragana;3082 2692 | mohmsquare;33C1 2693 | mokatakana;30E2 2694 | mokatakanahalfwidth;FF93 2695 | molsquare;33D6 2696 | momathai;0E21 2697 | moverssquare;33A7 2698 | moverssquaredsquare;33A8 2699 | mparen;24A8 2700 | mpasquare;33AB 2701 | mssquare;33B3 2702 | msuperior;F6EF 2703 | mturned;026F 2704 | mu;00B5 2705 | mu1;00B5 2706 | muasquare;3382 2707 | muchgreater;226B 2708 | muchless;226A 2709 | mufsquare;338C 2710 | mugreek;03BC 2711 | mugsquare;338D 2712 | muhiragana;3080 2713 | mukatakana;30E0 2714 | mukatakanahalfwidth;FF91 2715 | mulsquare;3395 2716 | multiply;00D7 2717 | mumsquare;339B 2718 | munahhebrew;05A3 2719 | munahlefthebrew;05A3 2720 | musicalnote;266A 2721 | musicalnotedbl;266B 2722 | musicflatsign;266D 2723 | musicsharpsign;266F 2724 | mussquare;33B2 2725 | muvsquare;33B6 2726 | muwsquare;33BC 2727 | mvmegasquare;33B9 2728 | mvsquare;33B7 2729 | mwmegasquare;33BF 2730 | mwsquare;33BD 2731 | n;006E 2732 | nabengali;09A8 2733 | nabla;2207 2734 | nacute;0144 2735 | nadeva;0928 2736 | nagujarati;0AA8 2737 | nagurmukhi;0A28 2738 | nahiragana;306A 2739 | nakatakana;30CA 2740 | nakatakanahalfwidth;FF85 2741 | napostrophe;0149 2742 | nasquare;3381 2743 | nbopomofo;310B 2744 | nbspace;00A0 2745 | ncaron;0148 2746 | ncedilla;0146 2747 | ncircle;24DD 2748 | ncircumflexbelow;1E4B 2749 | ncommaaccent;0146 2750 | ndotaccent;1E45 2751 | ndotbelow;1E47 2752 | nehiragana;306D 2753 | nekatakana;30CD 2754 | nekatakanahalfwidth;FF88 2755 | newsheqelsign;20AA 2756 | nfsquare;338B 2757 | ngabengali;0999 2758 | ngadeva;0919 2759 | ngagujarati;0A99 2760 | ngagurmukhi;0A19 2761 | ngonguthai;0E07 2762 | nhiragana;3093 2763 | nhookleft;0272 2764 | nhookretroflex;0273 2765 | nieunacirclekorean;326F 2766 | nieunaparenkorean;320F 2767 | nieuncieuckorean;3135 2768 | nieuncirclekorean;3261 2769 | nieunhieuhkorean;3136 2770 | nieunkorean;3134 2771 | nieunpansioskorean;3168 2772 | nieunparenkorean;3201 2773 | nieunsioskorean;3167 2774 | nieuntikeutkorean;3166 2775 | nihiragana;306B 2776 | nikatakana;30CB 2777 | nikatakanahalfwidth;FF86 2778 | nikhahitleftthai;F899 2779 | nikhahitthai;0E4D 2780 | nine;0039 2781 | ninearabic;0669 2782 | ninebengali;09EF 2783 | ninecircle;2468 2784 | ninecircleinversesansserif;2792 2785 | ninedeva;096F 2786 | ninegujarati;0AEF 2787 | ninegurmukhi;0A6F 2788 | ninehackarabic;0669 2789 | ninehangzhou;3029 2790 | nineideographicparen;3228 2791 | nineinferior;2089 2792 | ninemonospace;FF19 2793 | nineoldstyle;F739 2794 | nineparen;247C 2795 | nineperiod;2490 2796 | ninepersian;06F9 2797 | nineroman;2178 2798 | ninesuperior;2079 2799 | nineteencircle;2472 2800 | nineteenparen;2486 2801 | nineteenperiod;249A 2802 | ninethai;0E59 2803 | nj;01CC 2804 | njecyrillic;045A 2805 | nkatakana;30F3 2806 | nkatakanahalfwidth;FF9D 2807 | nlegrightlong;019E 2808 | nlinebelow;1E49 2809 | nmonospace;FF4E 2810 | nmsquare;339A 2811 | nnabengali;09A3 2812 | nnadeva;0923 2813 | nnagujarati;0AA3 2814 | nnagurmukhi;0A23 2815 | nnnadeva;0929 2816 | nohiragana;306E 2817 | nokatakana;30CE 2818 | nokatakanahalfwidth;FF89 2819 | nonbreakingspace;00A0 2820 | nonenthai;0E13 2821 | nonuthai;0E19 2822 | noonarabic;0646 2823 | noonfinalarabic;FEE6 2824 | noonghunnaarabic;06BA 2825 | noonghunnafinalarabic;FB9F 2826 | noonhehinitialarabic;FEE7 FEEC 2827 | nooninitialarabic;FEE7 2828 | noonjeeminitialarabic;FCD2 2829 | noonjeemisolatedarabic;FC4B 2830 | noonmedialarabic;FEE8 2831 | noonmeeminitialarabic;FCD5 2832 | noonmeemisolatedarabic;FC4E 2833 | noonnoonfinalarabic;FC8D 2834 | notcontains;220C 2835 | notelement;2209 2836 | notelementof;2209 2837 | notequal;2260 2838 | notgreater;226F 2839 | notgreaternorequal;2271 2840 | notgreaternorless;2279 2841 | notidentical;2262 2842 | notless;226E 2843 | notlessnorequal;2270 2844 | notparallel;2226 2845 | notprecedes;2280 2846 | notsubset;2284 2847 | notsucceeds;2281 2848 | notsuperset;2285 2849 | nowarmenian;0576 2850 | nparen;24A9 2851 | nssquare;33B1 2852 | nsuperior;207F 2853 | ntilde;00F1 2854 | nu;03BD 2855 | nuhiragana;306C 2856 | nukatakana;30CC 2857 | nukatakanahalfwidth;FF87 2858 | nuktabengali;09BC 2859 | nuktadeva;093C 2860 | nuktagujarati;0ABC 2861 | nuktagurmukhi;0A3C 2862 | numbersign;0023 2863 | numbersignmonospace;FF03 2864 | numbersignsmall;FE5F 2865 | numeralsigngreek;0374 2866 | numeralsignlowergreek;0375 2867 | numero;2116 2868 | nun;05E0 2869 | nundagesh;FB40 2870 | nundageshhebrew;FB40 2871 | nunhebrew;05E0 2872 | nvsquare;33B5 2873 | nwsquare;33BB 2874 | nyabengali;099E 2875 | nyadeva;091E 2876 | nyagujarati;0A9E 2877 | nyagurmukhi;0A1E 2878 | o;006F 2879 | oacute;00F3 2880 | oangthai;0E2D 2881 | obarred;0275 2882 | obarredcyrillic;04E9 2883 | obarreddieresiscyrillic;04EB 2884 | obengali;0993 2885 | obopomofo;311B 2886 | obreve;014F 2887 | ocandradeva;0911 2888 | ocandragujarati;0A91 2889 | ocandravowelsigndeva;0949 2890 | ocandravowelsigngujarati;0AC9 2891 | ocaron;01D2 2892 | ocircle;24DE 2893 | ocircumflex;00F4 2894 | ocircumflexacute;1ED1 2895 | ocircumflexdotbelow;1ED9 2896 | ocircumflexgrave;1ED3 2897 | ocircumflexhookabove;1ED5 2898 | ocircumflextilde;1ED7 2899 | ocyrillic;043E 2900 | odblacute;0151 2901 | odblgrave;020D 2902 | odeva;0913 2903 | odieresis;00F6 2904 | odieresiscyrillic;04E7 2905 | odotbelow;1ECD 2906 | oe;0153 2907 | oekorean;315A 2908 | ogonek;02DB 2909 | ogonekcmb;0328 2910 | ograve;00F2 2911 | ogujarati;0A93 2912 | oharmenian;0585 2913 | ohiragana;304A 2914 | ohookabove;1ECF 2915 | ohorn;01A1 2916 | ohornacute;1EDB 2917 | ohorndotbelow;1EE3 2918 | ohorngrave;1EDD 2919 | ohornhookabove;1EDF 2920 | ohorntilde;1EE1 2921 | ohungarumlaut;0151 2922 | oi;01A3 2923 | oinvertedbreve;020F 2924 | okatakana;30AA 2925 | okatakanahalfwidth;FF75 2926 | okorean;3157 2927 | olehebrew;05AB 2928 | omacron;014D 2929 | omacronacute;1E53 2930 | omacrongrave;1E51 2931 | omdeva;0950 2932 | omega;03C9 2933 | omega1;03D6 2934 | omegacyrillic;0461 2935 | omegalatinclosed;0277 2936 | omegaroundcyrillic;047B 2937 | omegatitlocyrillic;047D 2938 | omegatonos;03CE 2939 | omgujarati;0AD0 2940 | omicron;03BF 2941 | omicrontonos;03CC 2942 | omonospace;FF4F 2943 | one;0031 2944 | onearabic;0661 2945 | onebengali;09E7 2946 | onecircle;2460 2947 | onecircleinversesansserif;278A 2948 | onedeva;0967 2949 | onedotenleader;2024 2950 | oneeighth;215B 2951 | onefitted;F6DC 2952 | onegujarati;0AE7 2953 | onegurmukhi;0A67 2954 | onehackarabic;0661 2955 | onehalf;00BD 2956 | onehangzhou;3021 2957 | oneideographicparen;3220 2958 | oneinferior;2081 2959 | onemonospace;FF11 2960 | onenumeratorbengali;09F4 2961 | oneoldstyle;F731 2962 | oneparen;2474 2963 | oneperiod;2488 2964 | onepersian;06F1 2965 | onequarter;00BC 2966 | oneroman;2170 2967 | onesuperior;00B9 2968 | onethai;0E51 2969 | onethird;2153 2970 | oogonek;01EB 2971 | oogonekmacron;01ED 2972 | oogurmukhi;0A13 2973 | oomatragurmukhi;0A4B 2974 | oopen;0254 2975 | oparen;24AA 2976 | openbullet;25E6 2977 | option;2325 2978 | ordfeminine;00AA 2979 | ordmasculine;00BA 2980 | orthogonal;221F 2981 | oshortdeva;0912 2982 | oshortvowelsigndeva;094A 2983 | oslash;00F8 2984 | oslashacute;01FF 2985 | osmallhiragana;3049 2986 | osmallkatakana;30A9 2987 | osmallkatakanahalfwidth;FF6B 2988 | ostrokeacute;01FF 2989 | osuperior;F6F0 2990 | otcyrillic;047F 2991 | otilde;00F5 2992 | otildeacute;1E4D 2993 | otildedieresis;1E4F 2994 | oubopomofo;3121 2995 | overline;203E 2996 | overlinecenterline;FE4A 2997 | overlinecmb;0305 2998 | overlinedashed;FE49 2999 | overlinedblwavy;FE4C 3000 | overlinewavy;FE4B 3001 | overscore;00AF 3002 | ovowelsignbengali;09CB 3003 | ovowelsigndeva;094B 3004 | ovowelsigngujarati;0ACB 3005 | p;0070 3006 | paampssquare;3380 3007 | paasentosquare;332B 3008 | pabengali;09AA 3009 | pacute;1E55 3010 | padeva;092A 3011 | pagedown;21DF 3012 | pageup;21DE 3013 | pagujarati;0AAA 3014 | pagurmukhi;0A2A 3015 | pahiragana;3071 3016 | paiyannoithai;0E2F 3017 | pakatakana;30D1 3018 | palatalizationcyrilliccmb;0484 3019 | palochkacyrillic;04C0 3020 | pansioskorean;317F 3021 | paragraph;00B6 3022 | parallel;2225 3023 | parenleft;0028 3024 | parenleftaltonearabic;FD3E 3025 | parenleftbt;F8ED 3026 | parenleftex;F8EC 3027 | parenleftinferior;208D 3028 | parenleftmonospace;FF08 3029 | parenleftsmall;FE59 3030 | parenleftsuperior;207D 3031 | parenlefttp;F8EB 3032 | parenleftvertical;FE35 3033 | parenright;0029 3034 | parenrightaltonearabic;FD3F 3035 | parenrightbt;F8F8 3036 | parenrightex;F8F7 3037 | parenrightinferior;208E 3038 | parenrightmonospace;FF09 3039 | parenrightsmall;FE5A 3040 | parenrightsuperior;207E 3041 | parenrighttp;F8F6 3042 | parenrightvertical;FE36 3043 | partialdiff;2202 3044 | paseqhebrew;05C0 3045 | pashtahebrew;0599 3046 | pasquare;33A9 3047 | patah;05B7 3048 | patah11;05B7 3049 | patah1d;05B7 3050 | patah2a;05B7 3051 | patahhebrew;05B7 3052 | patahnarrowhebrew;05B7 3053 | patahquarterhebrew;05B7 3054 | patahwidehebrew;05B7 3055 | pazerhebrew;05A1 3056 | pbopomofo;3106 3057 | pcircle;24DF 3058 | pdotaccent;1E57 3059 | pe;05E4 3060 | pecyrillic;043F 3061 | pedagesh;FB44 3062 | pedageshhebrew;FB44 3063 | peezisquare;333B 3064 | pefinaldageshhebrew;FB43 3065 | peharabic;067E 3066 | peharmenian;057A 3067 | pehebrew;05E4 3068 | pehfinalarabic;FB57 3069 | pehinitialarabic;FB58 3070 | pehiragana;307A 3071 | pehmedialarabic;FB59 3072 | pekatakana;30DA 3073 | pemiddlehookcyrillic;04A7 3074 | perafehebrew;FB4E 3075 | percent;0025 3076 | percentarabic;066A 3077 | percentmonospace;FF05 3078 | percentsmall;FE6A 3079 | period;002E 3080 | periodarmenian;0589 3081 | periodcentered;00B7 3082 | periodhalfwidth;FF61 3083 | periodinferior;F6E7 3084 | periodmonospace;FF0E 3085 | periodsmall;FE52 3086 | periodsuperior;F6E8 3087 | perispomenigreekcmb;0342 3088 | perpendicular;22A5 3089 | perthousand;2030 3090 | peseta;20A7 3091 | pfsquare;338A 3092 | phabengali;09AB 3093 | phadeva;092B 3094 | phagujarati;0AAB 3095 | phagurmukhi;0A2B 3096 | phi;03C6 3097 | phi1;03D5 3098 | phieuphacirclekorean;327A 3099 | phieuphaparenkorean;321A 3100 | phieuphcirclekorean;326C 3101 | phieuphkorean;314D 3102 | phieuphparenkorean;320C 3103 | philatin;0278 3104 | phinthuthai;0E3A 3105 | phisymbolgreek;03D5 3106 | phook;01A5 3107 | phophanthai;0E1E 3108 | phophungthai;0E1C 3109 | phosamphaothai;0E20 3110 | pi;03C0 3111 | pieupacirclekorean;3273 3112 | pieupaparenkorean;3213 3113 | pieupcieuckorean;3176 3114 | pieupcirclekorean;3265 3115 | pieupkiyeokkorean;3172 3116 | pieupkorean;3142 3117 | pieupparenkorean;3205 3118 | pieupsioskiyeokkorean;3174 3119 | pieupsioskorean;3144 3120 | pieupsiostikeutkorean;3175 3121 | pieupthieuthkorean;3177 3122 | pieuptikeutkorean;3173 3123 | pihiragana;3074 3124 | pikatakana;30D4 3125 | pisymbolgreek;03D6 3126 | piwrarmenian;0583 3127 | plus;002B 3128 | plusbelowcmb;031F 3129 | pluscircle;2295 3130 | plusminus;00B1 3131 | plusmod;02D6 3132 | plusmonospace;FF0B 3133 | plussmall;FE62 3134 | plussuperior;207A 3135 | pmonospace;FF50 3136 | pmsquare;33D8 3137 | pohiragana;307D 3138 | pointingindexdownwhite;261F 3139 | pointingindexleftwhite;261C 3140 | pointingindexrightwhite;261E 3141 | pointingindexupwhite;261D 3142 | pokatakana;30DD 3143 | poplathai;0E1B 3144 | postalmark;3012 3145 | postalmarkface;3020 3146 | pparen;24AB 3147 | precedes;227A 3148 | prescription;211E 3149 | primemod;02B9 3150 | primereversed;2035 3151 | product;220F 3152 | projective;2305 3153 | prolongedkana;30FC 3154 | propellor;2318 3155 | propersubset;2282 3156 | propersuperset;2283 3157 | proportion;2237 3158 | proportional;221D 3159 | psi;03C8 3160 | psicyrillic;0471 3161 | psilipneumatacyrilliccmb;0486 3162 | pssquare;33B0 3163 | puhiragana;3077 3164 | pukatakana;30D7 3165 | pvsquare;33B4 3166 | pwsquare;33BA 3167 | q;0071 3168 | qadeva;0958 3169 | qadmahebrew;05A8 3170 | qafarabic;0642 3171 | qaffinalarabic;FED6 3172 | qafinitialarabic;FED7 3173 | qafmedialarabic;FED8 3174 | qamats;05B8 3175 | qamats10;05B8 3176 | qamats1a;05B8 3177 | qamats1c;05B8 3178 | qamats27;05B8 3179 | qamats29;05B8 3180 | qamats33;05B8 3181 | qamatsde;05B8 3182 | qamatshebrew;05B8 3183 | qamatsnarrowhebrew;05B8 3184 | qamatsqatanhebrew;05B8 3185 | qamatsqatannarrowhebrew;05B8 3186 | qamatsqatanquarterhebrew;05B8 3187 | qamatsqatanwidehebrew;05B8 3188 | qamatsquarterhebrew;05B8 3189 | qamatswidehebrew;05B8 3190 | qarneyparahebrew;059F 3191 | qbopomofo;3111 3192 | qcircle;24E0 3193 | qhook;02A0 3194 | qmonospace;FF51 3195 | qof;05E7 3196 | qofdagesh;FB47 3197 | qofdageshhebrew;FB47 3198 | qofhatafpatah;05E7 05B2 3199 | qofhatafpatahhebrew;05E7 05B2 3200 | qofhatafsegol;05E7 05B1 3201 | qofhatafsegolhebrew;05E7 05B1 3202 | qofhebrew;05E7 3203 | qofhiriq;05E7 05B4 3204 | qofhiriqhebrew;05E7 05B4 3205 | qofholam;05E7 05B9 3206 | qofholamhebrew;05E7 05B9 3207 | qofpatah;05E7 05B7 3208 | qofpatahhebrew;05E7 05B7 3209 | qofqamats;05E7 05B8 3210 | qofqamatshebrew;05E7 05B8 3211 | qofqubuts;05E7 05BB 3212 | qofqubutshebrew;05E7 05BB 3213 | qofsegol;05E7 05B6 3214 | qofsegolhebrew;05E7 05B6 3215 | qofsheva;05E7 05B0 3216 | qofshevahebrew;05E7 05B0 3217 | qoftsere;05E7 05B5 3218 | qoftserehebrew;05E7 05B5 3219 | qparen;24AC 3220 | quarternote;2669 3221 | qubuts;05BB 3222 | qubuts18;05BB 3223 | qubuts25;05BB 3224 | qubuts31;05BB 3225 | qubutshebrew;05BB 3226 | qubutsnarrowhebrew;05BB 3227 | qubutsquarterhebrew;05BB 3228 | qubutswidehebrew;05BB 3229 | question;003F 3230 | questionarabic;061F 3231 | questionarmenian;055E 3232 | questiondown;00BF 3233 | questiondownsmall;F7BF 3234 | questiongreek;037E 3235 | questionmonospace;FF1F 3236 | questionsmall;F73F 3237 | quotedbl;0022 3238 | quotedblbase;201E 3239 | quotedblleft;201C 3240 | quotedblmonospace;FF02 3241 | quotedblprime;301E 3242 | quotedblprimereversed;301D 3243 | quotedblright;201D 3244 | quoteleft;2018 3245 | quoteleftreversed;201B 3246 | quotereversed;201B 3247 | quoteright;2019 3248 | quoterightn;0149 3249 | quotesinglbase;201A 3250 | quotesingle;0027 3251 | quotesinglemonospace;FF07 3252 | r;0072 3253 | raarmenian;057C 3254 | rabengali;09B0 3255 | racute;0155 3256 | radeva;0930 3257 | radical;221A 3258 | radicalex;F8E5 3259 | radoverssquare;33AE 3260 | radoverssquaredsquare;33AF 3261 | radsquare;33AD 3262 | rafe;05BF 3263 | rafehebrew;05BF 3264 | ragujarati;0AB0 3265 | ragurmukhi;0A30 3266 | rahiragana;3089 3267 | rakatakana;30E9 3268 | rakatakanahalfwidth;FF97 3269 | ralowerdiagonalbengali;09F1 3270 | ramiddlediagonalbengali;09F0 3271 | ramshorn;0264 3272 | ratio;2236 3273 | rbopomofo;3116 3274 | rcaron;0159 3275 | rcedilla;0157 3276 | rcircle;24E1 3277 | rcommaaccent;0157 3278 | rdblgrave;0211 3279 | rdotaccent;1E59 3280 | rdotbelow;1E5B 3281 | rdotbelowmacron;1E5D 3282 | referencemark;203B 3283 | reflexsubset;2286 3284 | reflexsuperset;2287 3285 | registered;00AE 3286 | registersans;F8E8 3287 | registerserif;F6DA 3288 | reharabic;0631 3289 | reharmenian;0580 3290 | rehfinalarabic;FEAE 3291 | rehiragana;308C 3292 | rehyehaleflamarabic;0631 FEF3 FE8E 0644 3293 | rekatakana;30EC 3294 | rekatakanahalfwidth;FF9A 3295 | resh;05E8 3296 | reshdageshhebrew;FB48 3297 | reshhatafpatah;05E8 05B2 3298 | reshhatafpatahhebrew;05E8 05B2 3299 | reshhatafsegol;05E8 05B1 3300 | reshhatafsegolhebrew;05E8 05B1 3301 | reshhebrew;05E8 3302 | reshhiriq;05E8 05B4 3303 | reshhiriqhebrew;05E8 05B4 3304 | reshholam;05E8 05B9 3305 | reshholamhebrew;05E8 05B9 3306 | reshpatah;05E8 05B7 3307 | reshpatahhebrew;05E8 05B7 3308 | reshqamats;05E8 05B8 3309 | reshqamatshebrew;05E8 05B8 3310 | reshqubuts;05E8 05BB 3311 | reshqubutshebrew;05E8 05BB 3312 | reshsegol;05E8 05B6 3313 | reshsegolhebrew;05E8 05B6 3314 | reshsheva;05E8 05B0 3315 | reshshevahebrew;05E8 05B0 3316 | reshtsere;05E8 05B5 3317 | reshtserehebrew;05E8 05B5 3318 | reversedtilde;223D 3319 | reviahebrew;0597 3320 | reviamugrashhebrew;0597 3321 | revlogicalnot;2310 3322 | rfishhook;027E 3323 | rfishhookreversed;027F 3324 | rhabengali;09DD 3325 | rhadeva;095D 3326 | rho;03C1 3327 | rhook;027D 3328 | rhookturned;027B 3329 | rhookturnedsuperior;02B5 3330 | rhosymbolgreek;03F1 3331 | rhotichookmod;02DE 3332 | rieulacirclekorean;3271 3333 | rieulaparenkorean;3211 3334 | rieulcirclekorean;3263 3335 | rieulhieuhkorean;3140 3336 | rieulkiyeokkorean;313A 3337 | rieulkiyeoksioskorean;3169 3338 | rieulkorean;3139 3339 | rieulmieumkorean;313B 3340 | rieulpansioskorean;316C 3341 | rieulparenkorean;3203 3342 | rieulphieuphkorean;313F 3343 | rieulpieupkorean;313C 3344 | rieulpieupsioskorean;316B 3345 | rieulsioskorean;313D 3346 | rieulthieuthkorean;313E 3347 | rieultikeutkorean;316A 3348 | rieulyeorinhieuhkorean;316D 3349 | rightangle;221F 3350 | righttackbelowcmb;0319 3351 | righttriangle;22BF 3352 | rihiragana;308A 3353 | rikatakana;30EA 3354 | rikatakanahalfwidth;FF98 3355 | ring;02DA 3356 | ringbelowcmb;0325 3357 | ringcmb;030A 3358 | ringhalfleft;02BF 3359 | ringhalfleftarmenian;0559 3360 | ringhalfleftbelowcmb;031C 3361 | ringhalfleftcentered;02D3 3362 | ringhalfright;02BE 3363 | ringhalfrightbelowcmb;0339 3364 | ringhalfrightcentered;02D2 3365 | rinvertedbreve;0213 3366 | rittorusquare;3351 3367 | rlinebelow;1E5F 3368 | rlongleg;027C 3369 | rlonglegturned;027A 3370 | rmonospace;FF52 3371 | rohiragana;308D 3372 | rokatakana;30ED 3373 | rokatakanahalfwidth;FF9B 3374 | roruathai;0E23 3375 | rparen;24AD 3376 | rrabengali;09DC 3377 | rradeva;0931 3378 | rragurmukhi;0A5C 3379 | rreharabic;0691 3380 | rrehfinalarabic;FB8D 3381 | rrvocalicbengali;09E0 3382 | rrvocalicdeva;0960 3383 | rrvocalicgujarati;0AE0 3384 | rrvocalicvowelsignbengali;09C4 3385 | rrvocalicvowelsigndeva;0944 3386 | rrvocalicvowelsigngujarati;0AC4 3387 | rsuperior;F6F1 3388 | rtblock;2590 3389 | rturned;0279 3390 | rturnedsuperior;02B4 3391 | ruhiragana;308B 3392 | rukatakana;30EB 3393 | rukatakanahalfwidth;FF99 3394 | rupeemarkbengali;09F2 3395 | rupeesignbengali;09F3 3396 | rupiah;F6DD 3397 | ruthai;0E24 3398 | rvocalicbengali;098B 3399 | rvocalicdeva;090B 3400 | rvocalicgujarati;0A8B 3401 | rvocalicvowelsignbengali;09C3 3402 | rvocalicvowelsigndeva;0943 3403 | rvocalicvowelsigngujarati;0AC3 3404 | s;0073 3405 | sabengali;09B8 3406 | sacute;015B 3407 | sacutedotaccent;1E65 3408 | sadarabic;0635 3409 | sadeva;0938 3410 | sadfinalarabic;FEBA 3411 | sadinitialarabic;FEBB 3412 | sadmedialarabic;FEBC 3413 | sagujarati;0AB8 3414 | sagurmukhi;0A38 3415 | sahiragana;3055 3416 | sakatakana;30B5 3417 | sakatakanahalfwidth;FF7B 3418 | sallallahoualayhewasallamarabic;FDFA 3419 | samekh;05E1 3420 | samekhdagesh;FB41 3421 | samekhdageshhebrew;FB41 3422 | samekhhebrew;05E1 3423 | saraaathai;0E32 3424 | saraaethai;0E41 3425 | saraaimaimalaithai;0E44 3426 | saraaimaimuanthai;0E43 3427 | saraamthai;0E33 3428 | saraathai;0E30 3429 | saraethai;0E40 3430 | saraiileftthai;F886 3431 | saraiithai;0E35 3432 | saraileftthai;F885 3433 | saraithai;0E34 3434 | saraothai;0E42 3435 | saraueeleftthai;F888 3436 | saraueethai;0E37 3437 | saraueleftthai;F887 3438 | sarauethai;0E36 3439 | sarauthai;0E38 3440 | sarauuthai;0E39 3441 | sbopomofo;3119 3442 | scaron;0161 3443 | scarondotaccent;1E67 3444 | scedilla;015F 3445 | schwa;0259 3446 | schwacyrillic;04D9 3447 | schwadieresiscyrillic;04DB 3448 | schwahook;025A 3449 | scircle;24E2 3450 | scircumflex;015D 3451 | scommaaccent;0219 3452 | sdotaccent;1E61 3453 | sdotbelow;1E63 3454 | sdotbelowdotaccent;1E69 3455 | seagullbelowcmb;033C 3456 | second;2033 3457 | secondtonechinese;02CA 3458 | section;00A7 3459 | seenarabic;0633 3460 | seenfinalarabic;FEB2 3461 | seeninitialarabic;FEB3 3462 | seenmedialarabic;FEB4 3463 | segol;05B6 3464 | segol13;05B6 3465 | segol1f;05B6 3466 | segol2c;05B6 3467 | segolhebrew;05B6 3468 | segolnarrowhebrew;05B6 3469 | segolquarterhebrew;05B6 3470 | segoltahebrew;0592 3471 | segolwidehebrew;05B6 3472 | seharmenian;057D 3473 | sehiragana;305B 3474 | sekatakana;30BB 3475 | sekatakanahalfwidth;FF7E 3476 | semicolon;003B 3477 | semicolonarabic;061B 3478 | semicolonmonospace;FF1B 3479 | semicolonsmall;FE54 3480 | semivoicedmarkkana;309C 3481 | semivoicedmarkkanahalfwidth;FF9F 3482 | sentisquare;3322 3483 | sentosquare;3323 3484 | seven;0037 3485 | sevenarabic;0667 3486 | sevenbengali;09ED 3487 | sevencircle;2466 3488 | sevencircleinversesansserif;2790 3489 | sevendeva;096D 3490 | seveneighths;215E 3491 | sevengujarati;0AED 3492 | sevengurmukhi;0A6D 3493 | sevenhackarabic;0667 3494 | sevenhangzhou;3027 3495 | sevenideographicparen;3226 3496 | seveninferior;2087 3497 | sevenmonospace;FF17 3498 | sevenoldstyle;F737 3499 | sevenparen;247A 3500 | sevenperiod;248E 3501 | sevenpersian;06F7 3502 | sevenroman;2176 3503 | sevensuperior;2077 3504 | seventeencircle;2470 3505 | seventeenparen;2484 3506 | seventeenperiod;2498 3507 | seventhai;0E57 3508 | sfthyphen;00AD 3509 | shaarmenian;0577 3510 | shabengali;09B6 3511 | shacyrillic;0448 3512 | shaddaarabic;0651 3513 | shaddadammaarabic;FC61 3514 | shaddadammatanarabic;FC5E 3515 | shaddafathaarabic;FC60 3516 | shaddafathatanarabic;0651 064B 3517 | shaddakasraarabic;FC62 3518 | shaddakasratanarabic;FC5F 3519 | shade;2592 3520 | shadedark;2593 3521 | shadelight;2591 3522 | shademedium;2592 3523 | shadeva;0936 3524 | shagujarati;0AB6 3525 | shagurmukhi;0A36 3526 | shalshelethebrew;0593 3527 | shbopomofo;3115 3528 | shchacyrillic;0449 3529 | sheenarabic;0634 3530 | sheenfinalarabic;FEB6 3531 | sheeninitialarabic;FEB7 3532 | sheenmedialarabic;FEB8 3533 | sheicoptic;03E3 3534 | sheqel;20AA 3535 | sheqelhebrew;20AA 3536 | sheva;05B0 3537 | sheva115;05B0 3538 | sheva15;05B0 3539 | sheva22;05B0 3540 | sheva2e;05B0 3541 | shevahebrew;05B0 3542 | shevanarrowhebrew;05B0 3543 | shevaquarterhebrew;05B0 3544 | shevawidehebrew;05B0 3545 | shhacyrillic;04BB 3546 | shimacoptic;03ED 3547 | shin;05E9 3548 | shindagesh;FB49 3549 | shindageshhebrew;FB49 3550 | shindageshshindot;FB2C 3551 | shindageshshindothebrew;FB2C 3552 | shindageshsindot;FB2D 3553 | shindageshsindothebrew;FB2D 3554 | shindothebrew;05C1 3555 | shinhebrew;05E9 3556 | shinshindot;FB2A 3557 | shinshindothebrew;FB2A 3558 | shinsindot;FB2B 3559 | shinsindothebrew;FB2B 3560 | shook;0282 3561 | sigma;03C3 3562 | sigma1;03C2 3563 | sigmafinal;03C2 3564 | sigmalunatesymbolgreek;03F2 3565 | sihiragana;3057 3566 | sikatakana;30B7 3567 | sikatakanahalfwidth;FF7C 3568 | siluqhebrew;05BD 3569 | siluqlefthebrew;05BD 3570 | similar;223C 3571 | sindothebrew;05C2 3572 | siosacirclekorean;3274 3573 | siosaparenkorean;3214 3574 | sioscieuckorean;317E 3575 | sioscirclekorean;3266 3576 | sioskiyeokkorean;317A 3577 | sioskorean;3145 3578 | siosnieunkorean;317B 3579 | siosparenkorean;3206 3580 | siospieupkorean;317D 3581 | siostikeutkorean;317C 3582 | six;0036 3583 | sixarabic;0666 3584 | sixbengali;09EC 3585 | sixcircle;2465 3586 | sixcircleinversesansserif;278F 3587 | sixdeva;096C 3588 | sixgujarati;0AEC 3589 | sixgurmukhi;0A6C 3590 | sixhackarabic;0666 3591 | sixhangzhou;3026 3592 | sixideographicparen;3225 3593 | sixinferior;2086 3594 | sixmonospace;FF16 3595 | sixoldstyle;F736 3596 | sixparen;2479 3597 | sixperiod;248D 3598 | sixpersian;06F6 3599 | sixroman;2175 3600 | sixsuperior;2076 3601 | sixteencircle;246F 3602 | sixteencurrencydenominatorbengali;09F9 3603 | sixteenparen;2483 3604 | sixteenperiod;2497 3605 | sixthai;0E56 3606 | slash;002F 3607 | slashmonospace;FF0F 3608 | slong;017F 3609 | slongdotaccent;1E9B 3610 | smileface;263A 3611 | smonospace;FF53 3612 | sofpasuqhebrew;05C3 3613 | softhyphen;00AD 3614 | softsigncyrillic;044C 3615 | sohiragana;305D 3616 | sokatakana;30BD 3617 | sokatakanahalfwidth;FF7F 3618 | soliduslongoverlaycmb;0338 3619 | solidusshortoverlaycmb;0337 3620 | sorusithai;0E29 3621 | sosalathai;0E28 3622 | sosothai;0E0B 3623 | sosuathai;0E2A 3624 | space;0020 3625 | spacehackarabic;0020 3626 | spade;2660 3627 | spadesuitblack;2660 3628 | spadesuitwhite;2664 3629 | sparen;24AE 3630 | squarebelowcmb;033B 3631 | squarecc;33C4 3632 | squarecm;339D 3633 | squarediagonalcrosshatchfill;25A9 3634 | squarehorizontalfill;25A4 3635 | squarekg;338F 3636 | squarekm;339E 3637 | squarekmcapital;33CE 3638 | squareln;33D1 3639 | squarelog;33D2 3640 | squaremg;338E 3641 | squaremil;33D5 3642 | squaremm;339C 3643 | squaremsquared;33A1 3644 | squareorthogonalcrosshatchfill;25A6 3645 | squareupperlefttolowerrightfill;25A7 3646 | squareupperrighttolowerleftfill;25A8 3647 | squareverticalfill;25A5 3648 | squarewhitewithsmallblack;25A3 3649 | srsquare;33DB 3650 | ssabengali;09B7 3651 | ssadeva;0937 3652 | ssagujarati;0AB7 3653 | ssangcieuckorean;3149 3654 | ssanghieuhkorean;3185 3655 | ssangieungkorean;3180 3656 | ssangkiyeokkorean;3132 3657 | ssangnieunkorean;3165 3658 | ssangpieupkorean;3143 3659 | ssangsioskorean;3146 3660 | ssangtikeutkorean;3138 3661 | ssuperior;F6F2 3662 | sterling;00A3 3663 | sterlingmonospace;FFE1 3664 | strokelongoverlaycmb;0336 3665 | strokeshortoverlaycmb;0335 3666 | subset;2282 3667 | subsetnotequal;228A 3668 | subsetorequal;2286 3669 | succeeds;227B 3670 | suchthat;220B 3671 | suhiragana;3059 3672 | sukatakana;30B9 3673 | sukatakanahalfwidth;FF7D 3674 | sukunarabic;0652 3675 | summation;2211 3676 | sun;263C 3677 | superset;2283 3678 | supersetnotequal;228B 3679 | supersetorequal;2287 3680 | svsquare;33DC 3681 | syouwaerasquare;337C 3682 | t;0074 3683 | tabengali;09A4 3684 | tackdown;22A4 3685 | tackleft;22A3 3686 | tadeva;0924 3687 | tagujarati;0AA4 3688 | tagurmukhi;0A24 3689 | taharabic;0637 3690 | tahfinalarabic;FEC2 3691 | tahinitialarabic;FEC3 3692 | tahiragana;305F 3693 | tahmedialarabic;FEC4 3694 | taisyouerasquare;337D 3695 | takatakana;30BF 3696 | takatakanahalfwidth;FF80 3697 | tatweelarabic;0640 3698 | tau;03C4 3699 | tav;05EA 3700 | tavdages;FB4A 3701 | tavdagesh;FB4A 3702 | tavdageshhebrew;FB4A 3703 | tavhebrew;05EA 3704 | tbar;0167 3705 | tbopomofo;310A 3706 | tcaron;0165 3707 | tccurl;02A8 3708 | tcedilla;0163 3709 | tcheharabic;0686 3710 | tchehfinalarabic;FB7B 3711 | tchehinitialarabic;FB7C 3712 | tchehmedialarabic;FB7D 3713 | tchehmeeminitialarabic;FB7C FEE4 3714 | tcircle;24E3 3715 | tcircumflexbelow;1E71 3716 | tcommaaccent;0163 3717 | tdieresis;1E97 3718 | tdotaccent;1E6B 3719 | tdotbelow;1E6D 3720 | tecyrillic;0442 3721 | tedescendercyrillic;04AD 3722 | teharabic;062A 3723 | tehfinalarabic;FE96 3724 | tehhahinitialarabic;FCA2 3725 | tehhahisolatedarabic;FC0C 3726 | tehinitialarabic;FE97 3727 | tehiragana;3066 3728 | tehjeeminitialarabic;FCA1 3729 | tehjeemisolatedarabic;FC0B 3730 | tehmarbutaarabic;0629 3731 | tehmarbutafinalarabic;FE94 3732 | tehmedialarabic;FE98 3733 | tehmeeminitialarabic;FCA4 3734 | tehmeemisolatedarabic;FC0E 3735 | tehnoonfinalarabic;FC73 3736 | tekatakana;30C6 3737 | tekatakanahalfwidth;FF83 3738 | telephone;2121 3739 | telephoneblack;260E 3740 | telishagedolahebrew;05A0 3741 | telishaqetanahebrew;05A9 3742 | tencircle;2469 3743 | tenideographicparen;3229 3744 | tenparen;247D 3745 | tenperiod;2491 3746 | tenroman;2179 3747 | tesh;02A7 3748 | tet;05D8 3749 | tetdagesh;FB38 3750 | tetdageshhebrew;FB38 3751 | tethebrew;05D8 3752 | tetsecyrillic;04B5 3753 | tevirhebrew;059B 3754 | tevirlefthebrew;059B 3755 | thabengali;09A5 3756 | thadeva;0925 3757 | thagujarati;0AA5 3758 | thagurmukhi;0A25 3759 | thalarabic;0630 3760 | thalfinalarabic;FEAC 3761 | thanthakhatlowleftthai;F898 3762 | thanthakhatlowrightthai;F897 3763 | thanthakhatthai;0E4C 3764 | thanthakhatupperleftthai;F896 3765 | theharabic;062B 3766 | thehfinalarabic;FE9A 3767 | thehinitialarabic;FE9B 3768 | thehmedialarabic;FE9C 3769 | thereexists;2203 3770 | therefore;2234 3771 | theta;03B8 3772 | theta1;03D1 3773 | thetasymbolgreek;03D1 3774 | thieuthacirclekorean;3279 3775 | thieuthaparenkorean;3219 3776 | thieuthcirclekorean;326B 3777 | thieuthkorean;314C 3778 | thieuthparenkorean;320B 3779 | thirteencircle;246C 3780 | thirteenparen;2480 3781 | thirteenperiod;2494 3782 | thonangmonthothai;0E11 3783 | thook;01AD 3784 | thophuthaothai;0E12 3785 | thorn;00FE 3786 | thothahanthai;0E17 3787 | thothanthai;0E10 3788 | thothongthai;0E18 3789 | thothungthai;0E16 3790 | thousandcyrillic;0482 3791 | thousandsseparatorarabic;066C 3792 | thousandsseparatorpersian;066C 3793 | three;0033 3794 | threearabic;0663 3795 | threebengali;09E9 3796 | threecircle;2462 3797 | threecircleinversesansserif;278C 3798 | threedeva;0969 3799 | threeeighths;215C 3800 | threegujarati;0AE9 3801 | threegurmukhi;0A69 3802 | threehackarabic;0663 3803 | threehangzhou;3023 3804 | threeideographicparen;3222 3805 | threeinferior;2083 3806 | threemonospace;FF13 3807 | threenumeratorbengali;09F6 3808 | threeoldstyle;F733 3809 | threeparen;2476 3810 | threeperiod;248A 3811 | threepersian;06F3 3812 | threequarters;00BE 3813 | threequartersemdash;F6DE 3814 | threeroman;2172 3815 | threesuperior;00B3 3816 | threethai;0E53 3817 | thzsquare;3394 3818 | tihiragana;3061 3819 | tikatakana;30C1 3820 | tikatakanahalfwidth;FF81 3821 | tikeutacirclekorean;3270 3822 | tikeutaparenkorean;3210 3823 | tikeutcirclekorean;3262 3824 | tikeutkorean;3137 3825 | tikeutparenkorean;3202 3826 | tilde;02DC 3827 | tildebelowcmb;0330 3828 | tildecmb;0303 3829 | tildecomb;0303 3830 | tildedoublecmb;0360 3831 | tildeoperator;223C 3832 | tildeoverlaycmb;0334 3833 | tildeverticalcmb;033E 3834 | timescircle;2297 3835 | tipehahebrew;0596 3836 | tipehalefthebrew;0596 3837 | tippigurmukhi;0A70 3838 | titlocyrilliccmb;0483 3839 | tiwnarmenian;057F 3840 | tlinebelow;1E6F 3841 | tmonospace;FF54 3842 | toarmenian;0569 3843 | tohiragana;3068 3844 | tokatakana;30C8 3845 | tokatakanahalfwidth;FF84 3846 | tonebarextrahighmod;02E5 3847 | tonebarextralowmod;02E9 3848 | tonebarhighmod;02E6 3849 | tonebarlowmod;02E8 3850 | tonebarmidmod;02E7 3851 | tonefive;01BD 3852 | tonesix;0185 3853 | tonetwo;01A8 3854 | tonos;0384 3855 | tonsquare;3327 3856 | topatakthai;0E0F 3857 | tortoiseshellbracketleft;3014 3858 | tortoiseshellbracketleftsmall;FE5D 3859 | tortoiseshellbracketleftvertical;FE39 3860 | tortoiseshellbracketright;3015 3861 | tortoiseshellbracketrightsmall;FE5E 3862 | tortoiseshellbracketrightvertical;FE3A 3863 | totaothai;0E15 3864 | tpalatalhook;01AB 3865 | tparen;24AF 3866 | trademark;2122 3867 | trademarksans;F8EA 3868 | trademarkserif;F6DB 3869 | tretroflexhook;0288 3870 | triagdn;25BC 3871 | triaglf;25C4 3872 | triagrt;25BA 3873 | triagup;25B2 3874 | ts;02A6 3875 | tsadi;05E6 3876 | tsadidagesh;FB46 3877 | tsadidageshhebrew;FB46 3878 | tsadihebrew;05E6 3879 | tsecyrillic;0446 3880 | tsere;05B5 3881 | tsere12;05B5 3882 | tsere1e;05B5 3883 | tsere2b;05B5 3884 | tserehebrew;05B5 3885 | tserenarrowhebrew;05B5 3886 | tserequarterhebrew;05B5 3887 | tserewidehebrew;05B5 3888 | tshecyrillic;045B 3889 | tsuperior;F6F3 3890 | ttabengali;099F 3891 | ttadeva;091F 3892 | ttagujarati;0A9F 3893 | ttagurmukhi;0A1F 3894 | tteharabic;0679 3895 | ttehfinalarabic;FB67 3896 | ttehinitialarabic;FB68 3897 | ttehmedialarabic;FB69 3898 | tthabengali;09A0 3899 | tthadeva;0920 3900 | tthagujarati;0AA0 3901 | tthagurmukhi;0A20 3902 | tturned;0287 3903 | tuhiragana;3064 3904 | tukatakana;30C4 3905 | tukatakanahalfwidth;FF82 3906 | tusmallhiragana;3063 3907 | tusmallkatakana;30C3 3908 | tusmallkatakanahalfwidth;FF6F 3909 | twelvecircle;246B 3910 | twelveparen;247F 3911 | twelveperiod;2493 3912 | twelveroman;217B 3913 | twentycircle;2473 3914 | twentyhangzhou;5344 3915 | twentyparen;2487 3916 | twentyperiod;249B 3917 | two;0032 3918 | twoarabic;0662 3919 | twobengali;09E8 3920 | twocircle;2461 3921 | twocircleinversesansserif;278B 3922 | twodeva;0968 3923 | twodotenleader;2025 3924 | twodotleader;2025 3925 | twodotleadervertical;FE30 3926 | twogujarati;0AE8 3927 | twogurmukhi;0A68 3928 | twohackarabic;0662 3929 | twohangzhou;3022 3930 | twoideographicparen;3221 3931 | twoinferior;2082 3932 | twomonospace;FF12 3933 | twonumeratorbengali;09F5 3934 | twooldstyle;F732 3935 | twoparen;2475 3936 | twoperiod;2489 3937 | twopersian;06F2 3938 | tworoman;2171 3939 | twostroke;01BB 3940 | twosuperior;00B2 3941 | twothai;0E52 3942 | twothirds;2154 3943 | u;0075 3944 | uacute;00FA 3945 | ubar;0289 3946 | ubengali;0989 3947 | ubopomofo;3128 3948 | ubreve;016D 3949 | ucaron;01D4 3950 | ucircle;24E4 3951 | ucircumflex;00FB 3952 | ucircumflexbelow;1E77 3953 | ucyrillic;0443 3954 | udattadeva;0951 3955 | udblacute;0171 3956 | udblgrave;0215 3957 | udeva;0909 3958 | udieresis;00FC 3959 | udieresisacute;01D8 3960 | udieresisbelow;1E73 3961 | udieresiscaron;01DA 3962 | udieresiscyrillic;04F1 3963 | udieresisgrave;01DC 3964 | udieresismacron;01D6 3965 | udotbelow;1EE5 3966 | ugrave;00F9 3967 | ugujarati;0A89 3968 | ugurmukhi;0A09 3969 | uhiragana;3046 3970 | uhookabove;1EE7 3971 | uhorn;01B0 3972 | uhornacute;1EE9 3973 | uhorndotbelow;1EF1 3974 | uhorngrave;1EEB 3975 | uhornhookabove;1EED 3976 | uhorntilde;1EEF 3977 | uhungarumlaut;0171 3978 | uhungarumlautcyrillic;04F3 3979 | uinvertedbreve;0217 3980 | ukatakana;30A6 3981 | ukatakanahalfwidth;FF73 3982 | ukcyrillic;0479 3983 | ukorean;315C 3984 | umacron;016B 3985 | umacroncyrillic;04EF 3986 | umacrondieresis;1E7B 3987 | umatragurmukhi;0A41 3988 | umonospace;FF55 3989 | underscore;005F 3990 | underscoredbl;2017 3991 | underscoremonospace;FF3F 3992 | underscorevertical;FE33 3993 | underscorewavy;FE4F 3994 | union;222A 3995 | universal;2200 3996 | uogonek;0173 3997 | uparen;24B0 3998 | upblock;2580 3999 | upperdothebrew;05C4 4000 | upsilon;03C5 4001 | upsilondieresis;03CB 4002 | upsilondieresistonos;03B0 4003 | upsilonlatin;028A 4004 | upsilontonos;03CD 4005 | uptackbelowcmb;031D 4006 | uptackmod;02D4 4007 | uragurmukhi;0A73 4008 | uring;016F 4009 | ushortcyrillic;045E 4010 | usmallhiragana;3045 4011 | usmallkatakana;30A5 4012 | usmallkatakanahalfwidth;FF69 4013 | ustraightcyrillic;04AF 4014 | ustraightstrokecyrillic;04B1 4015 | utilde;0169 4016 | utildeacute;1E79 4017 | utildebelow;1E75 4018 | uubengali;098A 4019 | uudeva;090A 4020 | uugujarati;0A8A 4021 | uugurmukhi;0A0A 4022 | uumatragurmukhi;0A42 4023 | uuvowelsignbengali;09C2 4024 | uuvowelsigndeva;0942 4025 | uuvowelsigngujarati;0AC2 4026 | uvowelsignbengali;09C1 4027 | uvowelsigndeva;0941 4028 | uvowelsigngujarati;0AC1 4029 | v;0076 4030 | vadeva;0935 4031 | vagujarati;0AB5 4032 | vagurmukhi;0A35 4033 | vakatakana;30F7 4034 | vav;05D5 4035 | vavdagesh;FB35 4036 | vavdagesh65;FB35 4037 | vavdageshhebrew;FB35 4038 | vavhebrew;05D5 4039 | vavholam;FB4B 4040 | vavholamhebrew;FB4B 4041 | vavvavhebrew;05F0 4042 | vavyodhebrew;05F1 4043 | vcircle;24E5 4044 | vdotbelow;1E7F 4045 | vecyrillic;0432 4046 | veharabic;06A4 4047 | vehfinalarabic;FB6B 4048 | vehinitialarabic;FB6C 4049 | vehmedialarabic;FB6D 4050 | vekatakana;30F9 4051 | venus;2640 4052 | verticalbar;007C 4053 | verticallineabovecmb;030D 4054 | verticallinebelowcmb;0329 4055 | verticallinelowmod;02CC 4056 | verticallinemod;02C8 4057 | vewarmenian;057E 4058 | vhook;028B 4059 | vikatakana;30F8 4060 | viramabengali;09CD 4061 | viramadeva;094D 4062 | viramagujarati;0ACD 4063 | visargabengali;0983 4064 | visargadeva;0903 4065 | visargagujarati;0A83 4066 | vmonospace;FF56 4067 | voarmenian;0578 4068 | voicediterationhiragana;309E 4069 | voicediterationkatakana;30FE 4070 | voicedmarkkana;309B 4071 | voicedmarkkanahalfwidth;FF9E 4072 | vokatakana;30FA 4073 | vparen;24B1 4074 | vtilde;1E7D 4075 | vturned;028C 4076 | vuhiragana;3094 4077 | vukatakana;30F4 4078 | w;0077 4079 | wacute;1E83 4080 | waekorean;3159 4081 | wahiragana;308F 4082 | wakatakana;30EF 4083 | wakatakanahalfwidth;FF9C 4084 | wakorean;3158 4085 | wasmallhiragana;308E 4086 | wasmallkatakana;30EE 4087 | wattosquare;3357 4088 | wavedash;301C 4089 | wavyunderscorevertical;FE34 4090 | wawarabic;0648 4091 | wawfinalarabic;FEEE 4092 | wawhamzaabovearabic;0624 4093 | wawhamzaabovefinalarabic;FE86 4094 | wbsquare;33DD 4095 | wcircle;24E6 4096 | wcircumflex;0175 4097 | wdieresis;1E85 4098 | wdotaccent;1E87 4099 | wdotbelow;1E89 4100 | wehiragana;3091 4101 | weierstrass;2118 4102 | wekatakana;30F1 4103 | wekorean;315E 4104 | weokorean;315D 4105 | wgrave;1E81 4106 | whitebullet;25E6 4107 | whitecircle;25CB 4108 | whitecircleinverse;25D9 4109 | whitecornerbracketleft;300E 4110 | whitecornerbracketleftvertical;FE43 4111 | whitecornerbracketright;300F 4112 | whitecornerbracketrightvertical;FE44 4113 | whitediamond;25C7 4114 | whitediamondcontainingblacksmalldiamond;25C8 4115 | whitedownpointingsmalltriangle;25BF 4116 | whitedownpointingtriangle;25BD 4117 | whiteleftpointingsmalltriangle;25C3 4118 | whiteleftpointingtriangle;25C1 4119 | whitelenticularbracketleft;3016 4120 | whitelenticularbracketright;3017 4121 | whiterightpointingsmalltriangle;25B9 4122 | whiterightpointingtriangle;25B7 4123 | whitesmallsquare;25AB 4124 | whitesmilingface;263A 4125 | whitesquare;25A1 4126 | whitestar;2606 4127 | whitetelephone;260F 4128 | whitetortoiseshellbracketleft;3018 4129 | whitetortoiseshellbracketright;3019 4130 | whiteuppointingsmalltriangle;25B5 4131 | whiteuppointingtriangle;25B3 4132 | wihiragana;3090 4133 | wikatakana;30F0 4134 | wikorean;315F 4135 | wmonospace;FF57 4136 | wohiragana;3092 4137 | wokatakana;30F2 4138 | wokatakanahalfwidth;FF66 4139 | won;20A9 4140 | wonmonospace;FFE6 4141 | wowaenthai;0E27 4142 | wparen;24B2 4143 | wring;1E98 4144 | wsuperior;02B7 4145 | wturned;028D 4146 | wynn;01BF 4147 | x;0078 4148 | xabovecmb;033D 4149 | xbopomofo;3112 4150 | xcircle;24E7 4151 | xdieresis;1E8D 4152 | xdotaccent;1E8B 4153 | xeharmenian;056D 4154 | xi;03BE 4155 | xmonospace;FF58 4156 | xparen;24B3 4157 | xsuperior;02E3 4158 | y;0079 4159 | yaadosquare;334E 4160 | yabengali;09AF 4161 | yacute;00FD 4162 | yadeva;092F 4163 | yaekorean;3152 4164 | yagujarati;0AAF 4165 | yagurmukhi;0A2F 4166 | yahiragana;3084 4167 | yakatakana;30E4 4168 | yakatakanahalfwidth;FF94 4169 | yakorean;3151 4170 | yamakkanthai;0E4E 4171 | yasmallhiragana;3083 4172 | yasmallkatakana;30E3 4173 | yasmallkatakanahalfwidth;FF6C 4174 | yatcyrillic;0463 4175 | ycircle;24E8 4176 | ycircumflex;0177 4177 | ydieresis;00FF 4178 | ydotaccent;1E8F 4179 | ydotbelow;1EF5 4180 | yeharabic;064A 4181 | yehbarreearabic;06D2 4182 | yehbarreefinalarabic;FBAF 4183 | yehfinalarabic;FEF2 4184 | yehhamzaabovearabic;0626 4185 | yehhamzaabovefinalarabic;FE8A 4186 | yehhamzaaboveinitialarabic;FE8B 4187 | yehhamzaabovemedialarabic;FE8C 4188 | yehinitialarabic;FEF3 4189 | yehmedialarabic;FEF4 4190 | yehmeeminitialarabic;FCDD 4191 | yehmeemisolatedarabic;FC58 4192 | yehnoonfinalarabic;FC94 4193 | yehthreedotsbelowarabic;06D1 4194 | yekorean;3156 4195 | yen;00A5 4196 | yenmonospace;FFE5 4197 | yeokorean;3155 4198 | yeorinhieuhkorean;3186 4199 | yerahbenyomohebrew;05AA 4200 | yerahbenyomolefthebrew;05AA 4201 | yericyrillic;044B 4202 | yerudieresiscyrillic;04F9 4203 | yesieungkorean;3181 4204 | yesieungpansioskorean;3183 4205 | yesieungsioskorean;3182 4206 | yetivhebrew;059A 4207 | ygrave;1EF3 4208 | yhook;01B4 4209 | yhookabove;1EF7 4210 | yiarmenian;0575 4211 | yicyrillic;0457 4212 | yikorean;3162 4213 | yinyang;262F 4214 | yiwnarmenian;0582 4215 | ymonospace;FF59 4216 | yod;05D9 4217 | yoddagesh;FB39 4218 | yoddageshhebrew;FB39 4219 | yodhebrew;05D9 4220 | yodyodhebrew;05F2 4221 | yodyodpatahhebrew;FB1F 4222 | yohiragana;3088 4223 | yoikorean;3189 4224 | yokatakana;30E8 4225 | yokatakanahalfwidth;FF96 4226 | yokorean;315B 4227 | yosmallhiragana;3087 4228 | yosmallkatakana;30E7 4229 | yosmallkatakanahalfwidth;FF6E 4230 | yotgreek;03F3 4231 | yoyaekorean;3188 4232 | yoyakorean;3187 4233 | yoyakthai;0E22 4234 | yoyingthai;0E0D 4235 | yparen;24B4 4236 | ypogegrammeni;037A 4237 | ypogegrammenigreekcmb;0345 4238 | yr;01A6 4239 | yring;1E99 4240 | ysuperior;02B8 4241 | ytilde;1EF9 4242 | yturned;028E 4243 | yuhiragana;3086 4244 | yuikorean;318C 4245 | yukatakana;30E6 4246 | yukatakanahalfwidth;FF95 4247 | yukorean;3160 4248 | yusbigcyrillic;046B 4249 | yusbigiotifiedcyrillic;046D 4250 | yuslittlecyrillic;0467 4251 | yuslittleiotifiedcyrillic;0469 4252 | yusmallhiragana;3085 4253 | yusmallkatakana;30E5 4254 | yusmallkatakanahalfwidth;FF6D 4255 | yuyekorean;318B 4256 | yuyeokorean;318A 4257 | yyabengali;09DF 4258 | yyadeva;095F 4259 | z;007A 4260 | zaarmenian;0566 4261 | zacute;017A 4262 | zadeva;095B 4263 | zagurmukhi;0A5B 4264 | zaharabic;0638 4265 | zahfinalarabic;FEC6 4266 | zahinitialarabic;FEC7 4267 | zahiragana;3056 4268 | zahmedialarabic;FEC8 4269 | zainarabic;0632 4270 | zainfinalarabic;FEB0 4271 | zakatakana;30B6 4272 | zaqefgadolhebrew;0595 4273 | zaqefqatanhebrew;0594 4274 | zarqahebrew;0598 4275 | zayin;05D6 4276 | zayindagesh;FB36 4277 | zayindageshhebrew;FB36 4278 | zayinhebrew;05D6 4279 | zbopomofo;3117 4280 | zcaron;017E 4281 | zcircle;24E9 4282 | zcircumflex;1E91 4283 | zcurl;0291 4284 | zdot;017C 4285 | zdotaccent;017C 4286 | zdotbelow;1E93 4287 | zecyrillic;0437 4288 | zedescendercyrillic;0499 4289 | zedieresiscyrillic;04DF 4290 | zehiragana;305C 4291 | zekatakana;30BC 4292 | zero;0030 4293 | zeroarabic;0660 4294 | zerobengali;09E6 4295 | zerodeva;0966 4296 | zerogujarati;0AE6 4297 | zerogurmukhi;0A66 4298 | zerohackarabic;0660 4299 | zeroinferior;2080 4300 | zeromonospace;FF10 4301 | zerooldstyle;F730 4302 | zeropersian;06F0 4303 | zerosuperior;2070 4304 | zerothai;0E50 4305 | zerowidthjoiner;FEFF 4306 | zerowidthnonjoiner;200C 4307 | zerowidthspace;200B 4308 | zeta;03B6 4309 | zhbopomofo;3113 4310 | zhearmenian;056A 4311 | zhebrevecyrillic;04C2 4312 | zhecyrillic;0436 4313 | zhedescendercyrillic;0497 4314 | zhedieresiscyrillic;04DD 4315 | zihiragana;3058 4316 | zikatakana;30B8 4317 | zinorhebrew;05AE 4318 | zlinebelow;1E95 4319 | zmonospace;FF5A 4320 | zohiragana;305E 4321 | zokatakana;30BE 4322 | zparen;24B5 4323 | zretroflexhook;0290 4324 | zstroke;01B6 4325 | zuhiragana;305A 4326 | zukatakana;30BA 4327 | #END 4328 | -------------------------------------------------------------------------------- /pdf.fs: -------------------------------------------------------------------------------- 1 | // Simple PDF builder 2 | // Copyright (C) 2016 Daniel Beer 3 | // 4 | // Permission to use, copy, modify, and/or distribute this software for any 5 | // purpose with or without fee is hereby granted, provided that the above 6 | // copyright notice and this permission notice appear in all copies. 7 | // 8 | // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 | // WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 | // MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11 | // ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 | // WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13 | // ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 | // OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 | 16 | module PDF 17 | 18 | open System 19 | open System.Collections.Generic 20 | 21 | //////////////////////////////////////////////////////////////////////// 22 | // Character classes 23 | // 24 | // See PDF 32000-1 2008: 7.2.2 "Character Set" 25 | //////////////////////////////////////////////////////////////////////// 26 | 27 | type CharClass = Whitespace | Delimiter | Regular 28 | 29 | let charType = Array.create 256 Regular 30 | 31 | for x in [| 0; 9; 10; 12; 13; 32 |] do 32 | charType.[x] <- Whitespace 33 | 34 | for x in [| 40; 41; 60; 62; 91; 93; 123; 125; 47; 37 |] do 35 | charType.[x] <- Delimiter 36 | 37 | //////////////////////////////////////////////////////////////////////// 38 | // Text encoding 39 | //////////////////////////////////////////////////////////////////////// 40 | 41 | let toASCII (s : string) = 42 | let out = Array.create s.Length 0uy 43 | for i = 0 to s.Length - 1 do 44 | out.[i] <- byte(s.[i]) 45 | out 46 | 47 | let fromASCII (s : byte[]) = 48 | let out = Text.StringBuilder() 49 | for i = 0 to s.Length - 1 do 50 | out.Append(char(s.[i])) |> ignore 51 | out.ToString() 52 | 53 | //////////////////////////////////////////////////////////////////////// 54 | // Writer 55 | //////////////////////////////////////////////////////////////////////// 56 | 57 | type Buffer() = 58 | let mutable data = Array.create 256 0uy 59 | let mutable size = 0 60 | 61 | member x.Size 62 | with get() = size 63 | and set(s: int) = size <- s 64 | 65 | member x.Data 66 | with get() = data 67 | 68 | member x.Push(dat: byte[], offset: int, len: int) = 69 | if size + len > data.Length then 70 | let mutable req = (size + len) * 2 71 | while (req &&& (req - 1)) <> 0 do 72 | req <- req &&& (req - 1) 73 | let n = Array.create req 0uy 74 | Array.blit data 0 n 0 size 75 | data <- n 76 | Array.blit dat offset data size len 77 | size <- size + len 78 | 79 | member x.Push(dat: byte[]) = 80 | x.Push(dat, 0, dat.Length) 81 | 82 | member x.Push(dat: byte) = 83 | x.Push([| dat |]) 84 | 85 | member x.ToArray() = 86 | let out = Array.create size 0uy 87 | Array.blit data 0 out 0 size 88 | out 89 | 90 | // Write raw ASCII 91 | let wASCII (buf : Buffer) (kw : string) = 92 | buf.Push(toASCII kw) 93 | 94 | // Write a newline, if the buffer doesn't already end on a new line 95 | let wFreshLine (buf : Buffer) = 96 | if buf.Size > 0 && buf.Data.[buf.Size - 1] <> 10uy then 97 | buf.Push(10uy) 98 | 99 | // Write a whitespace break, if the buffer doesn't end on a whitespace 100 | // character 101 | let wSeparate (buf : Buffer) = 102 | if buf.Size > 0 && 103 | charType.[int(buf.Data.[buf.Size - 1])] <> Whitespace then 104 | buf.Push(32uy) 105 | 106 | // Write a keyword (specified as an ASCII string) 107 | let wKeyword (buf : Buffer) (kw : string) = 108 | wSeparate buf 109 | wASCII buf kw 110 | 111 | // Write a PDF name 112 | let wName (buf : Buffer) (n : string) = 113 | wSeparate buf 114 | buf.Push(byte('/')) 115 | for cr in n do 116 | let c = byte(cr) 117 | if charType.[int(c)] = Regular then 118 | buf.Push(c) 119 | else 120 | wASCII buf <| sprintf "#%02x" c 121 | 122 | // Write a number 123 | let wNumber (buf : Buffer) (n : float) = 124 | wSeparate buf 125 | wASCII buf <| sprintf "%g" n 126 | 127 | // Write a byte-string 128 | let wByteString (buf : Buffer) (n : byte[]) = 129 | wSeparate buf 130 | if Array.exists (fun b -> b > 127uy) n then 131 | buf.Push(byte('<')) 132 | for b in n do 133 | wASCII buf (sprintf "%02X" (int b)) 134 | buf.Push(byte('>')) 135 | else 136 | buf.Push(byte('(')) 137 | for ch in n do 138 | if charType.[int(ch)] = Delimiter || ch = byte('\\') then 139 | buf.Push([| byte('\\'); ch |]) 140 | else 141 | buf.Push(ch) 142 | buf.Push(byte(')')) 143 | 144 | // Write a PDF string 145 | let wTextString (buf : Buffer) (n : string) = 146 | // Figure out an encoding 147 | if Seq.exists (fun x -> x > char(127)) n then 148 | let enc = new System.Text.UnicodeEncoding(true, true) 149 | let x = Array.create (enc.GetByteCount(n)) 0uy 150 | x.[0] <- 254uy 151 | x.[1] <- 255uy 152 | enc.GetBytes(n, 0, n.Length, x, 2) |> ignore 153 | wByteString buf x 154 | else 155 | toASCII n |> wByteString buf 156 | 157 | //////////////////////////////////////////////////////////////////////// 158 | // Basic parsing 159 | //////////////////////////////////////////////////////////////////////// 160 | 161 | exception ParseError of string 162 | 163 | type Scanner(data: byte[], oin: int, limit: int) = 164 | let mutable offset = oin 165 | 166 | new(d: byte[]) = 167 | Scanner(d, 0, d.Length) 168 | 169 | member x.Data 170 | with get() = data 171 | 172 | member x.Limit 173 | with get() = limit 174 | 175 | member x.Offset 176 | with get() = offset 177 | 178 | member x.Remaining 179 | with get() = limit - offset 180 | 181 | member x.Dup() = 182 | Scanner(data, offset, limit) 183 | 184 | member x.Join(s: Scanner) = 185 | offset <- s.Offset 186 | 187 | member x.Skip(n: int) = 188 | if n > x.Remaining then 189 | raise (ParseError "Data underflow") 190 | offset <- offset + n 191 | 192 | member x.Sub(n: int) = 193 | if n > x.Remaining then 194 | raise (ParseError "Data underflow") 195 | let r = Scanner(data, offset, offset + n) 196 | offset <- offset + n 197 | r 198 | 199 | member x.SubFrom(n: int) = 200 | if (n < 0) || (n > x.Remaining) then 201 | raise (ParseError "Invalid offset") 202 | Scanner(data, offset + n, limit) 203 | 204 | let isEOL (b : byte) = 205 | b = 13uy || b = 10uy 206 | 207 | let skipSpace (s : Scanner) = 208 | let mutable i = s.Offset 209 | let mutable x = false 210 | while i < s.Limit && (charType.[int(s.Data.[i])] = Whitespace || 211 | s.Data.[i] = 37uy) do 212 | if s.Data.[i] = 37uy then 213 | while i < s.Limit && not (isEOL s.Data.[i]) do 214 | i <- i + 1 215 | if i + 1 < s.Limit && s.Data.[i] = 13uy && s.Data.[i + 1] = 10uy then 216 | i <- i + 1 217 | else 218 | i <- i + 1 219 | s.Skip(i - s.Offset) 220 | 221 | let skipEOL (s : Scanner) = 222 | let mutable i = s.Offset 223 | while i < s.Limit && not (isEOL s.Data.[i]) do 224 | if s.Data.[i] = 37uy then 225 | while i < s.Limit && not (isEOL s.Data.[i]) do 226 | i <- i + 1 227 | if i + 1 < s.Limit && s.Data.[i] = 13uy && s.Data.[i + 1] = 10uy then 228 | i <- i + 1 229 | elif charType.[int(s.Data.[i])] <> Whitespace then 230 | raise (ParseError "Unexpected token while scanning for EOL") 231 | else 232 | i <- i + 1 233 | if i < s.Limit then 234 | if s.Data.[i] = 13uy then 235 | i <- i + 1 236 | if i < s.Limit && s.Data.[i] = 10uy then 237 | i <- i + 1 238 | else 239 | i <- i + 1 240 | s.Skip(i - s.Offset) 241 | 242 | let rKeyword (si : Scanner) = 243 | let s = si.Dup() 244 | 245 | skipSpace s 246 | let j = s.Offset 247 | let mutable i = s.Offset 248 | 249 | while i < s.Limit && charType.[int(s.Data.[i])] = Regular do 250 | i <- i + 1 251 | s.Skip(i - s.Offset) 252 | 253 | if i <> j then 254 | si.Join(s) 255 | Some (fromASCII s.Data.[j..i-1]) 256 | else None 257 | 258 | let rUInt (si : Scanner) = 259 | let s = si.Dup() 260 | 261 | skipSpace s 262 | let j = s.Offset 263 | let mutable i = s.Offset 264 | 265 | while i < s.Limit && (s.Data.[i] >= 48uy && s.Data.[i] <= 57uy) do 266 | i <- i + 1 267 | s.Skip(i - s.Offset) 268 | 269 | if i <> j && charType.[int(s.Data.[i])] <> Regular then 270 | let text = fromASCII s.Data.[j..i-1] 271 | try 272 | let r = Convert.ToInt32(text) 273 | si.Join(s) 274 | Some r 275 | with 276 | | :? FormatException | :? OverflowException -> 277 | raise (ParseError ("Malformed integer" + text)) 278 | else 279 | None 280 | 281 | //////////////////////////////////////////////////////////////////////// 282 | // X-refs table 283 | //////////////////////////////////////////////////////////////////////// 284 | 285 | type ObjectRef = int * int 286 | 287 | type ObjectInfo = { 288 | gen: int 289 | loc: int 290 | exists: bool } 291 | 292 | type XRefTable() = 293 | let table = Dictionary() 294 | let mutable next = 1 295 | 296 | do 297 | table.[0] <- { gen = 65535; loc = 0; exists = false } 298 | 299 | // Allocate a new name. This is a very simple allocation strategy! 300 | member x.Alloc(l: int) = 301 | let r = (next, 0) 302 | table.[next] <- { gen = 0; loc = l; exists = true } 303 | next <- next + 1 304 | r 305 | 306 | member x.Alloc() = 307 | x.Alloc(0) 308 | 309 | member x.Set((idx, gen): ObjectRef, loc: int) = 310 | table.[idx] <- { gen = gen; loc = loc; exists = true } 311 | 312 | member x.GetLoc((idx, gen): ObjectRef) = 313 | match table.TryGetValue(idx) with 314 | | (false, _) -> None 315 | | (true, info) -> 316 | if info.gen <> gen || not info.exists then 317 | None 318 | else 319 | Some info.loc 320 | 321 | member x.Count 322 | with get() = next 323 | 324 | // Write xrefs 325 | member x.Write(buf: Buffer) = 326 | let vals = table |> Seq.sortBy (fun kv -> kv.Key) |> Seq.toArray 327 | wASCII buf (sprintf "xref\r\n") 328 | let mutable s = 0 329 | while s < vals.Length do 330 | let mutable e = s 331 | while e + 1 < vals.Length && vals.[e + 1].Key = vals.[e].Key + 1 do 332 | e <- e + 1 333 | wASCII buf (sprintf "%d %d\r\n" vals.[s].Key (e - s + 1)) 334 | for i = s to e do 335 | wASCII buf (sprintf "%010d %05d %c\r\n" 336 | vals.[i].Value.loc vals.[i].Value.gen 337 | (if vals.[i].Value.exists then 'n' else 'f')) 338 | s <- e + 1 339 | 340 | // Read xrefs 341 | member x.Read(si: Scanner) = 342 | let parseBlock () = 343 | let ss = rUInt si 344 | let sc = rUInt si 345 | match (ss, sc) with 346 | | (Some s, Some c) -> 347 | skipEOL si 348 | for i = 0 to c-1 do 349 | let loc = rUInt si 350 | let gen = rUInt si 351 | let state = rKeyword si 352 | skipEOL si 353 | match (gen, loc, state) with 354 | | (Some gen, Some loc, Some state) -> 355 | if not (table.ContainsKey(s+i)) then 356 | table.[s+i] <- { gen = gen; loc = loc; exists = state = "n" } 357 | | _ -> raise (ParseError "Invalid xref entry") 358 | true 359 | | _ -> false 360 | if rKeyword si <> Some "xref" then 361 | raise (ParseError "Expected xref keyword") 362 | while parseBlock () do () 363 | 364 | // Write object ref 365 | let wObjectRef (buf : Buffer) (idx, gen) = 366 | wSeparate buf 367 | wASCII buf (sprintf "%d %d R" idx gen) 368 | 369 | // Write beginning and end of object 370 | let wObjectBegin (buf : Buffer) (idx, gen) = 371 | wFreshLine buf 372 | wASCII buf (sprintf "%d %d obj\n" idx gen) 373 | 374 | let wObjectEnd (buf : Buffer) = 375 | wFreshLine buf 376 | wASCII buf "endobj\n" 377 | 378 | //////////////////////////////////////////////////////////////////////// 379 | // Structured value types 380 | //////////////////////////////////////////////////////////////////////// 381 | 382 | type Value = 383 | | Null 384 | | Boolean of bool 385 | | Number of float 386 | | ByteString of byte[] 387 | | Name of string 388 | | Array of Value[] 389 | | Dictionary of IDictionary 390 | | Stream of IDictionary * Scanner 391 | | Indirect of ObjectRef 392 | 393 | let rec wValue (buf : Buffer) (v : Value) = 394 | let wDict (d : IDictionary) = 395 | wKeyword buf "<<" 396 | for e in d do 397 | wName buf e.Key 398 | wValue buf e.Value 399 | wKeyword buf ">>" 400 | match v with 401 | | Null -> wKeyword buf "null" 402 | | Boolean true -> wKeyword buf "true" 403 | | Boolean false -> wKeyword buf "false" 404 | | Number n -> wKeyword buf (sprintf "%g" n) 405 | | ByteString s -> wByteString buf s 406 | | Name s -> wName buf s 407 | | Array a -> 408 | wKeyword buf "[" 409 | Array.iter (wValue buf) a 410 | wKeyword buf "]" 411 | | Dictionary d -> wDict d 412 | | Stream (d, s) -> 413 | wDict d 414 | wFreshLine buf 415 | wKeyword buf "stream\n" 416 | buf.Push(s.Data, s.Offset, s.Limit - s.Offset) 417 | wKeyword buf "\nendstream\n" 418 | | Indirect r -> wObjectRef buf r 419 | 420 | let private rHexDigit (s : Scanner) = 421 | let b = s.Data.[s.Offset] 422 | if (b >= byte '0' && b <= byte '9') then 423 | s.Skip(1) 424 | b - byte('0') 425 | elif (b >= byte 'A' && b <= byte 'F') then 426 | s.Skip(1) 427 | b - byte('A') + 10uy 428 | elif (b >= byte 'a' && b <= byte 'f') then 429 | s.Skip(1) 430 | b - byte('a') + 10uy 431 | else 432 | raise (ParseError (sprintf "Invalid hex digit: %c" (char b))) 433 | 434 | let private rHexByte (s : Scanner) = 435 | let hi = rHexDigit s 436 | let lo = rHexDigit s 437 | (hi <<< 4) ||| lo 438 | 439 | let private rName (s : Scanner) = 440 | let out = Text.StringBuilder() 441 | let rec scan () = 442 | let ch = s.Data.[s.Offset] 443 | if ch = byte('#') then 444 | s.Skip(1) 445 | out.Append(char(rHexByte s)) |> ignore 446 | scan () 447 | elif charType.[int(ch)] = Regular then 448 | s.Skip(1) 449 | out.Append(char(ch)) |> ignore 450 | scan () 451 | if s.Data.[s.Offset] <> byte('/') then 452 | raise (ParseError "Expected name") 453 | s.Skip(1) 454 | scan () 455 | out.ToString() 456 | 457 | let private rEscape (s : Scanner) = 458 | if s.Offset >= s.Limit then 459 | raise (ParseError "EOF while reading escape sequence") 460 | let t = s.Data.[s.Offset] 461 | if t >= byte('0') && t <= byte('7') then 462 | let mutable octal = 0uy 463 | for i = 1 to 3 do 464 | let d = s.Data.[s.Offset] 465 | s.Skip(1) 466 | if (d < byte('0')) || (d > byte('7')) then 467 | raise (ParseError (sprintf "Invalid octal digit: %c" (char(d)))) 468 | octal <- (octal <<< 3) ||| d 469 | octal 470 | else 471 | s.Skip(1) 472 | match char(t) with 473 | | 'n' -> byte('\n') 474 | | 'r' -> byte('\r') 475 | | 't' -> byte('\t') 476 | | 'b' -> byte('\b') 477 | | 'f' -> 12uy 478 | | _ -> t 479 | 480 | let private rString (s : Scanner) = 481 | let mutable depth = 1 482 | let out = Buffer() 483 | s.Skip(1) 484 | while depth > 0 do 485 | let ch = s.Data.[s.Offset] 486 | s.Skip(1) 487 | 488 | if ch = byte('(') then 489 | out.Push(ch) 490 | depth <- depth + 1 491 | elif ch = byte(')') then 492 | depth <- depth - 1 493 | if depth > 0 then 494 | out.Push(ch) 495 | elif ch = byte('\\') then 496 | out.Push(rEscape s) 497 | else 498 | out.Push(ch) 499 | out.ToArray() 500 | 501 | let private rHexString (s : Scanner) = 502 | let out = Buffer() 503 | s.Skip(1) 504 | while s.Offset < s.Limit && s.Data.[s.Offset] <> byte('>') do 505 | out.Push(rHexByte s) 506 | if s.Offset >= s.Limit then 507 | raise (ParseError "EOF while trying to read hex string") 508 | s.Skip(1) 509 | out.ToArray() 510 | 511 | let private rIndirect (si : Scanner) = 512 | let s = si.Dup() 513 | match rUInt s with 514 | | None -> None 515 | | Some idx -> 516 | match rUInt s with 517 | | None -> None 518 | | Some gen -> 519 | if rKeyword s = Some "R" then 520 | si.Join(s) 521 | Some (idx, gen) 522 | else None 523 | 524 | let private rStreamData (s : Scanner) (d : Dictionary) 525 | (lresolve : Value -> Value) = 526 | let ss = s.Dup() 527 | if rKeyword ss = Some "stream" then 528 | skipEOL ss 529 | match d.TryGetValue("Length") with 530 | | (false, _) -> raise (ParseError "Missing length value") 531 | | (true, vv) -> 532 | match lresolve vv with 533 | | Number n -> 534 | let ni = int n 535 | if ni < 0 then 536 | raise (ParseError "Invalid length") 537 | else 538 | let d = ss.Sub(ni) 539 | if rKeyword ss <> Some "endstream" then 540 | raise (ParseError "Missing endstream") 541 | s.Join(ss) 542 | Some d 543 | | _ -> raise (ParseError "Invalid length type") 544 | else None 545 | 546 | let rec rValue (s : Scanner) (lresolve : Value -> Value) = 547 | skipSpace s 548 | if s.Offset >= s.Limit then 549 | raise (ParseError "EOF while trying to read object") 550 | if s.Data.[s.Offset] = byte('/') then 551 | rName s |> Name 552 | elif s.Data.[s.Offset] = byte('(') then 553 | rString s |> ByteString 554 | elif s.Data.[s.Offset] = byte('<') then 555 | if s.Offset + 1 < s.Limit && s.Data.[s.Offset+1] = byte('<') then 556 | let out = new Dictionary() 557 | s.Skip(2) 558 | skipSpace s 559 | while s.Offset + 1 < s.Limit && 560 | s.Data.[s.Offset..s.Offset+1] <> [| byte('>'); byte('>') |] do 561 | let k = rName s 562 | let v = rValue s lresolve 563 | out.[k] <- v 564 | skipSpace s 565 | if s.Offset + 1 >= s.Limit then 566 | raise (ParseError "EOF while trying to read array") 567 | s.Skip(2) 568 | 569 | match rStreamData s out lresolve with 570 | | None -> Dictionary out 571 | | Some d -> Stream (out, d) 572 | else 573 | rHexString s |> ByteString 574 | elif s.Data.[s.Offset] = byte('[') then 575 | s.Skip(1) 576 | skipSpace s 577 | let out = List() 578 | while s.Offset < s.Limit && s.Data.[s.Offset] <> byte(']') do 579 | out.Add(rValue s lresolve) 580 | skipSpace s 581 | if s.Offset >= s.Limit then 582 | raise (ParseError "EOF while trying to read array") 583 | s.Skip(1) 584 | out.ToArray() |> Array 585 | else 586 | match rIndirect s with 587 | | Some r -> Indirect r 588 | | _ -> 589 | match rKeyword s with 590 | | Some "null" -> Null 591 | | Some "true" -> Boolean true 592 | | Some "false" -> Boolean false 593 | | Some s -> 594 | match Double.TryParse(s) with 595 | | (false, _) -> raise (ParseError "Invalid number format") 596 | | (true, x) -> Number x 597 | | None -> raise (ParseError "Invalid object") 598 | 599 | //////////////////////////////////////////////////////////////////////// 600 | // File parsing 601 | //////////////////////////////////////////////////////////////////////// 602 | 603 | let loadVersion (s : Scanner) = 604 | if s.Remaining < 5 then 605 | raise (ParseError "Missing header") 606 | if s.Data.[s.Offset..s.Offset+4] <> [| 37uy; 80uy; 68uy; 70uy; 45uy |] then 607 | raise (ParseError "Missing header") 608 | let mutable i = s.Offset + 5 609 | while i < s.Limit && not (isEOL s.Data.[i]) do 610 | i <- i + 1 611 | fromASCII s.Data.[s.Offset+5..i-1] 612 | 613 | let loadStartXRef (s : Scanner) = 614 | let lines = Array.create 3 "" 615 | let mutable i = s.Limit 616 | 617 | for n = 2 downto 0 do 618 | while i > s.Offset && isEOL s.Data.[i - 1] do 619 | i <- i - 1 620 | let mutable j = i 621 | while j > s.Offset && not (isEOL s.Data.[j - 1]) do 622 | j <- j - 1 623 | lines.[n] <- fromASCII s.Data.[j..(i-1)] 624 | i <- j 625 | 626 | if lines.[2] <> "%%EOF" then 627 | raise (ParseError "Missing footer") 628 | if lines.[0] <> "startxref" then 629 | raise (ParseError "Missing startxref") 630 | try 631 | Convert.ToInt32(lines.[1]) 632 | with 633 | | :? FormatException | :? OverflowException -> 634 | raise (ParseError ("Malformed startxref: " + lines.[1])) 635 | 636 | let loadSingleXTable (ss : Scanner) (x : XRefTable) = 637 | x.Read(ss) 638 | if rKeyword ss <> Some "trailer" then 639 | raise (ParseError "Missing trailer after XRefs") 640 | match rValue ss id with 641 | | Dictionary d -> d 642 | | _ -> raise (ParseError "Invalid trailer: expected dictionary") 643 | 644 | let loadAllXRefs (s : Scanner) = 645 | let x = XRefTable() 646 | let rec scanBack lastptr (t : IDictionary) = 647 | match t.TryGetValue("Prev") with 648 | | (true, Number n) -> 649 | let p = int(n) 650 | if p < lastptr then 651 | loadSingleXTable (s.SubFrom(p)) x |> scanBack p 652 | | _ -> () 653 | let ptr = loadStartXRef s 654 | let first = loadSingleXTable (s.SubFrom(ptr)) x 655 | scanBack ptr first 656 | (x, first) 657 | 658 | let private loadIndirectRaw (s : Scanner) (x : XRefTable) (r : ObjectRef) 659 | (lresolve : Value -> Value) = 660 | match x.GetLoc(r) with 661 | | None -> Null 662 | | Some loc -> 663 | let ss = s.SubFrom(loc) 664 | let (idx, gen) = r 665 | if rUInt ss <> Some idx then 666 | raise (ParseError "Invalid index in object header") 667 | if rUInt ss <> Some gen then 668 | raise (ParseError "Invalid generation in object header") 669 | if rKeyword ss <> Some "obj" then 670 | raise (ParseError "Invalid object header") 671 | let ret = rValue ss lresolve 672 | if rKeyword ss <> Some "endobj" then 673 | raise (ParseError "Missing endobj") 674 | ret 675 | 676 | type ObjectLoader(s: Scanner, x: XRefTable) = 677 | let lengthCache = new Dictionary() 678 | 679 | member self.Load(r: ObjectRef) = 680 | loadIndirectRaw s x r <| fun v -> 681 | let visited = new HashSet() 682 | let rec descend n = 683 | match n with 684 | | Indirect rr -> 685 | match lengthCache.TryGetValue(rr) with 686 | | (true, v) -> v 687 | | (false, _) -> 688 | if not (visited.Add(rr)) then 689 | raise (ParseError "Recursive loop in length resolution") 690 | loadIndirectRaw s x rr id |> descend 691 | | _ -> n 692 | let ret = descend v 693 | for i in visited do 694 | lengthCache.[i] <- ret 695 | ret 696 | 697 | //////////////////////////////////////////////////////////////////////// 698 | // File construction 699 | //////////////////////////////////////////////////////////////////////// 700 | 701 | let wHeader (f : Buffer) (v : string) = 702 | wASCII f (sprintf "%%PDF-%s\n" v) 703 | 704 | let wTrailer (f : Buffer) (x : XRefTable) 705 | (trailer : IDictionary) = 706 | let startX = f.Size 707 | x.Write(f) 708 | wFreshLine f 709 | wASCII f "trailer\n" 710 | wValue f (Dictionary trailer) 711 | wFreshLine f 712 | wASCII f (sprintf "startxref\n%d\n%%%%EOF\n" startX) 713 | 714 | let wIndirect (f : Buffer) (r : ObjectRef) (v : Value) = 715 | wObjectBegin f r 716 | wValue f v 717 | wObjectEnd f 718 | 719 | let allocIndirect (f : Buffer) (x : XRefTable) (v : Value) = 720 | let r = x.Alloc(f.Size) 721 | wIndirect f r v 722 | r 723 | 724 | //////////////////////////////////////////////////////////////////////// 725 | // Deep copy of objects 726 | //////////////////////////////////////////////////////////////////////// 727 | 728 | type Copier(src: ObjectLoader, dst: Buffer, dx: XRefTable) = 729 | let mapping = new Dictionary() 730 | 731 | member x.TranslateDict(d: IDictionary) = 732 | let out = new Dictionary() 733 | for e in d do 734 | out.[e.Key] <- x.Translate(e.Value) 735 | out :> IDictionary 736 | 737 | member x.Translate(r: Value) = 738 | match r with 739 | | Null -> Null 740 | | Number n -> Number n 741 | | Boolean b -> Boolean b 742 | | ByteString b -> ByteString b 743 | | Name n -> Name n 744 | | Array a -> a |> Array.map (fun e -> x.Translate(e)) |> Array 745 | | Dictionary d -> x.TranslateDict(d) |> Dictionary 746 | | Stream (d, s) -> Stream (x.TranslateDict(d), s) 747 | | Indirect r -> 748 | match mapping.TryGetValue(r) with 749 | | (true, c) -> Indirect c 750 | | (false, _) -> 751 | let v = src.Load(r) 752 | if v = Null then Null 753 | else 754 | let c = dx.Alloc() 755 | mapping.[r] <- c 756 | let tv = x.Translate(v) 757 | dx.Set(c, dst.Size) 758 | wIndirect dst c tv 759 | Indirect c 760 | --------------------------------------------------------------------------------